Module:Multiformat
Appearance
| This template is currently being deleted. This template is being removed from the pages on which it is currently used, after which it will be deleted. Please check Wikipedia:Templates for discussion/Holding cell for any additional instructions. Please do not use it on any additional pages, but do not remove it from pages if it is under deletion review. The decision to delete this template was made following this discussion initiated on 29 September 2026 at Templates for discussion. Administrators: Please review this template's instructions at Wikipedia:Templates for discussion/Holding cell before proceeding with any action. |
Lua error in Module:I18n at line 384: attempt to index field 'data' (a nil value).
--- Formats multiple numbered arguments and outputs them in order, etc.
--
-- @module multiformat
-- @alias p
-- @require Module:Escape_input
-- @require Module:Yesno
-- @release alpha
local p = {}
local yn = require("Module:Yesno")
--- Main entrypoint for formatting output string with all parameters
--
-- @param {table} pargs The arguments from the template call
-- @param {table} cargs The arguments from the module call
-- @param {string} cargs.startAll the beginning formatting string sequence
-- @param {string} cargs.endAll the ending formatting string sequence
-- @param {string} cargs.format the format string
-- @param {boolean} cargs.nowiki Whether the arguments are encased in nowiki tags
-- @param {string} cargs.empty The message to give if no arguments are specified
-- @return {string} Output to preprocess
function p._all(pargs, cargs)
local nowiki = yn(cargs.nowiki) or false
local escape
if nowiki then
escape = function( s ) return mw.text.unstripNoWiki( s ) end
else
escape = require("Module:Escape input").escape
end
local startAll = escape(cargs.startAll or '')
local endAll = escape(cargs.endAll or '')
local formatString = escape(cargs.format)
local argArrayFilled = false
local outArr = {}
table.insert(outArr, startAll)
for k,v in pairs(pargs) do
table.insert(outArr, tostring(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(formatString, '%%ARGNAME%%', k), '%%ARG%%', v), '\\%%', '%')))
argArrayFilled = true
end
if not argArrayFilled then return escape(cargs.empty or '') end
table.insert(outArr, endAll)
return table.concat(outArr)
end
--- Template call
--
-- @param {Frame} frame calling frame
-- @return {string} Output wikitext
-- @usage {{#invoke:Multiformat|all|startAll=start|endAll=end|format=String with %ARG% to replace with current arguments and %ARGNAME% to replace with name of argument}}
function p.all(frame)
local pargs = frame:getParent() ~= nil and frame:getParent().args or error("Error occurred while fetching wrapping template arguments for multiformat", 0)
local cargs = frame.args
return frame:preprocess(p._all(pargs, cargs))
end
--- Main entrypoint for formatting output string with named parameters only
--
-- @param {table} pargs The arguments from the template call
-- @param {table} cargs The arguments from the module call
-- @param {string} cargs.startAll the beginning formatting string sequence
-- @param {string} cargs.endAll the ending formatting string sequence
-- @param {string} cargs.format the format string
-- @param {boolean} cargs.nowiki Whether the arguments are encased in nowiki tags
-- @param {string} cargs.empty The message to give if no arguments are specified
-- @return {string} Output to preprocess
function p._named(pargs, cargs)
local nowiki = yn(cargs.nowiki) or false
local escape
if nowiki then
escape = function( s ) return mw.text.unstripNoWiki( s ) end
else
escape = require("Module:Escape input").escape
end
local startAll = escape(cargs.startAll or '')
local endAll = escape(cargs.endAll or '')
local formatString = escape(cargs.format)
local argArrayFilled = false
local outArr = {}
local maxNumArg = p._nArgs(pargs, { nowiki = nowiki })
table.insert(outArr, startAll)
for k,v in pairs(pargs) do
if not (tonumber(k) ~= nil and tonumber(k) >= 1 and tonumber(k) <= maxNumArg) then
table.insert(outArr, tostring(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(formatString, '%%ARGNAME%%', k), '%%ARG%%', v), '\\%%', '%')))
argArrayFilled = true
end
end
if not argArrayFilled then return escape(cargs.empty or '') end
table.insert(outArr, endAll)
return table.concat(outArr)
end
--- Template call
--
-- @param {Frame} frame calling frame
-- @return {string} Output wikitext
-- @usage {{#invoke:Multiformat|named|startAll=start|endAll=end|format=String with %ARG% to replace with current arguments and %ARGNAME% to replace with name of argument}}
function p.named(frame)
local pargs = frame:getParent() ~= nil and frame:getParent().args or error("Error occurred while fetching wrapping template arguments for multiformat", 0)
local cargs = frame.args
return frame:preprocess(p._named(pargs, cargs))
end
--- Main entrypoint for formatting output string
--
-- @param {table} pargs The arguments from the template call
-- @param {table} cargs The arguments from the module call
-- @param {string} cargs.startAll the beginning formatting string sequence
-- @param {string} cargs.endAll the ending formatting string sequence
-- @param {string} cargs.format the format string
-- @param {number} cargs.firstArg the first numbered argument to begin formatting
-- @param {string} cargs.prefix the argument prefix
-- @param {string} cargs.suffix the argument suffix
-- @param {boolean} cargs.nowiki Whether the arguments are encased in nowiki tags
-- @param {string} cargs.empty The message to give if no arguments are specified
-- @return {string} Output to preprocess
function p._main(pargs, cargs)
local nowiki = yn(cargs.nowiki) or false
local escape
if nowiki then
escape = function( s ) return mw.text.unstripNoWiki( s ) end
else
escape = require("Module:Escape input").escape
end
local startAll = escape(cargs.startAll or '')
local endAll = escape(cargs.endAll or '')
local formatString = escape(cargs.format)
local currArg = tonumber(cargs.firstArg) or 1
local argPrefix = escape(cargs.prefix or '')
local argSuffix = escape(cargs.suffix or '')
local outArr = {}
if pargs[argPrefix .. currArg .. argSuffix] == nil then return escape(cargs.empty or '') end
table.insert(outArr, startAll)
while pargs[argPrefix .. currArg .. argSuffix] ~= nil do
table.insert(outArr, tostring(mw.ustring.gsub(mw.ustring.gsub(mw.ustring.gsub(formatString, '%%ARGNUM%%', currArg), '%%ARG%%', pargs[argPrefix .. currArg .. argSuffix]), '\\%%', '%')))
currArg = currArg + 1
end
table.insert(outArr, endAll)
return table.concat(outArr)
end
--- Template call
--
-- @param {Frame} frame calling frame
-- @return {string} Output wikitext
-- @usage {{#invoke:Multiformat|main|startAll=start|endAll=end|format=String with %ARG% to replace with current arguments|firstArg=number of first arg}}
function p.main(frame)
local pargs = frame:getParent() ~= nil and frame:getParent().args or error("Error occurred while fetching wrapping template arguments for multiformat", 0)
local cargs = frame.args
return frame:preprocess(p._main(pargs, cargs))
end
--- Counts the number of arguments which match a particular format
--
-- @param {table} pargs The arguments from the template call
-- @param {table} cargs The arguments from the module call
-- @param {number} cargs.firstArg the first numbered argument to begin formatting
-- @param {string} cargs.prefix the argument prefix
-- @param {string} cargs.suffix the argument suffix
-- @param {boolean} cargs.nowiki Whether the arguments are encased in nowiki tags
-- @return {number} Number of numbered parameters supplied
function p._nArgs(pargs, cargs)
local currArg = tonumber(cargs.firstArg) or 1
local nowiki = yn(cargs.nowiki) or false
local escape
if nowiki then
escape = function( s ) return mw.text.unstripNoWiki( s ) end
else
escape = require("Module:Escape input").escape
end
local argPrefix = escape(cargs.prefix or '')
local argSuffix = escape(cargs.suffix or '')
local count = 0
while pargs[argPrefix .. currArg .. argSuffix] ~= nil do
count = count + 1
currArg = currArg + 1
end
return count
end
--- Template call
--
-- @param {Frame} frame calling frame
-- @return {number} Number of arguments passed
-- @usage {{#invoke:Multiformat|nArgs}}
function p.nArgs(frame)
local pargs = frame:getParent() ~= nil and frame:getParent().args or error("Error occurred while fetching wrapping template arguments for multiformat", 0)
local cargs = frame.args
return p._nArgs(pargs, cargs)
end
return p