Module:Separated entries

From Uncyclopedia, the content-free encyclopedia
Jump to navigation Jump to search

Description[edit]

This is a relatively simple Lua module taken from wikipedia:Module:Separated entries. Its only job is to splice a variable-length argument list with a given separator. It is powerful; a single-run test with 1000 arguments had a parser profile of 0.029 seconds (Real time usage).

Usage[edit]

  1. {{#invoke:Separated entries|br|args}}
  2. {{#invoke:Separated entries|comma|args}}
  3. {{#invoke:Separated entries|main|separator=custom|args}}

In form 1, the entries given by args are separated by line breaks. In form 2, entries are separated by commas. In form 3, entries are separated by the arbitrary separator custom.

Multiple arguments are separated by the standard pipe character. Direct invocation of this module might look like:

{{#invoke:Separated entries|main|separator=•|one|two|three}}

But, as recommended by wikipedia:Wikipedia:Lua, it's preferred that templates call this module. For the case of Template:Br separated entries, the argument list is passed directly to the template with the code:

{{#invoke:Separated entries|br}}




-- This module takes positional parameters as input and concatenates them with
-- an optional separator. The final separator (the "conjunction") can be
-- specified independently, enabling natural-language lists like
-- "foo, bar, baz and qux". The starting parameter can also be specified.

local compressSparseArray = require('Module:TableTools').compressSparseArray
local p = {}

function p._main(args)
	local separator = args.separator
		-- Decode (convert to Unicode) HTML escape sequences, such as " " for space.
		and mw.text.decode(args.separator) or ''
	local conjunction = args.conjunction and mw.text.decode(args.conjunction) or separator
	-- Discard values before the starting parameter.
	local start = tonumber(args.start)
	if start then
		for i = 1, start - 1 do args[i] = nil end
	end
	-- Discard named parameters.
	local values = compressSparseArray(args)
	return mw.text.listToText(values, separator, conjunction)
end

local function makeInvokeFunction(separator, conjunction, first)
	return function (frame)
		local args = require('Module:Arguments').getArgs(frame)
		args.separator = separator or args.separator
		args.conjunction = conjunction or args.conjunction
		args.first = first or args.first
		return p._main(args)
	end
end

p.main = makeInvokeFunction()
p.br = makeInvokeFunction('<br />')
p.comma = makeInvokeFunction(mw.message.new('comma-separator'):plain())

return p