Module:Separated entries
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]
{{#invoke:Separated entries|br|args}}
{{#invoke:Separated entries|comma|args}}
{{#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