Difference between revisions of "Module:For nowiki/sandbox"
Jump to navigation
Jump to search
blackwiki>Pppery |
blackwiki>BrandonXLF |
||
| Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
| − | local function doLoop(frame, | + | local function doLoop(frame, args, code, sep, offset, argstosub) |
| − | local | + | local result = {} |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
code = mw.text.unstripNoWiki(code) | code = mw.text.unstripNoWiki(code) | ||
| − | + | for i, value in ipairs(args) do | |
| − | |||
| − | |||
| − | for i, value in ipairs( | ||
if i > offset then | if i > offset then | ||
argstosub["i"] = i - offset | argstosub["i"] = i - offset | ||
| Line 28: | Line 12: | ||
end | end | ||
end | end | ||
| − | + | return table.concat(result, sep) | |
| − | |||
| − | |||
| − | |||
| − | |||
end | end | ||
function p.main(frame) | function p.main(frame) | ||
local args = frame:getParent().args | local args = frame:getParent().args | ||
| + | local sep = args[1] | ||
| + | local code = args.code or args[2] | ||
| + | local offset = args.code and 1 or 2 | ||
local argstosub = {} | local argstosub = {} | ||
for key, value in pairs(args) do | for key, value in pairs(args) do | ||
| − | if not tonumber(key) and key ~= "i" and key ~= "count | + | if not tonumber(key) and key ~= "i" and key ~= "count" then |
argstosub[key] = value | argstosub[key] = value | ||
end | end | ||
| Line 46: | Line 29: | ||
if countArg then | if countArg then | ||
offset = 0 | offset = 0 | ||
| − | + | args = {} | |
for i = 1, countArg do | for i = 1, countArg do | ||
| − | + | args[i] = i | |
end | end | ||
| − | |||
| − | |||
end | end | ||
| − | return doLoop(frame, | + | return doLoop(frame, args, code, sep, offset, argstosub) |
end | end | ||
function p.template(frame) | function p.template(frame) | ||
| + | local sep = frame.args[1] | ||
| + | local code = frame.args[2] or frame.args.code | ||
| + | local forceone = frame.args[3] | ||
local offset = tonumber(frame.args.offset) or 0 | local offset = tonumber(frame.args.offset) or 0 | ||
| − | return doLoop(frame:getParent(), frame:getParent().args, | + | local pargs = frame:getParent().args |
| + | if forceone and not pargs[1] then | ||
| + | pargs[1] = '' | ||
| + | end | ||
| + | return doLoop(frame:getParent(), frame:getParent().args, code, sep, offset, {}) | ||
end | end | ||
return p | return p | ||
Revision as of 02:21, 21 January 2020
Documentation for this module may be created at Module:For nowiki/sandbox/doc
local p = {}
local function doLoop(frame, args, code, sep, offset, argstosub)
local result = {}
code = mw.text.unstripNoWiki(code)
for i, value in ipairs(args) do
if i > offset then
argstosub["i"] = i - offset
argstosub["1"] = value
local actualCode = code:gsub("{{{([^{}|]*)|?[^{}]*}}}", argstosub)
table.insert(result, frame:preprocess(actualCode))
end
end
return table.concat(result, sep)
end
function p.main(frame)
local args = frame:getParent().args
local sep = args[1]
local code = args.code or args[2]
local offset = args.code and 1 or 2
local argstosub = {}
for key, value in pairs(args) do
if not tonumber(key) and key ~= "i" and key ~= "count" then
argstosub[key] = value
end
end
local countArg = args.count and tonumber(args.count);
if countArg then
offset = 0
args = {}
for i = 1, countArg do
args[i] = i
end
end
return doLoop(frame, args, code, sep, offset, argstosub)
end
function p.template(frame)
local sep = frame.args[1]
local code = frame.args[2] or frame.args.code
local forceone = frame.args[3]
local offset = tonumber(frame.args.offset) or 0
local pargs = frame:getParent().args
if forceone and not pargs[1] then
pargs[1] = ''
end
return doLoop(frame:getParent(), frame:getParent().args, code, sep, offset, {})
end
return p