Khác biệt giữa bản sửa đổi của “Mô đun:For loop”

Nội dung được xóa Nội dung được thêm vào
Nhập từ en:Module:ForLoop (559231221)
 
Nhập từ en:Module:ForLoop phiên bản 03:33, 18 January 2014‎ Mr. Stradivarius
Dòng 1:
-- This module implements {{for loop}}.
 
local getArgs = require('Module:Arguments').getArgs
 
p = {}
 
function p.main(frame)
local args
local args = getArgs(frame, {
trim = false,
local function callTemplate(template, targs)
removeBlanks = false
return mw.getCurrentFrame():expandTemplate{title = template, args = targs}
})
return p._main(args)
end
 
local function getArgNumsp._main(prefix, suffixargs)
local template = args['call'] or 'void'
-- Returns a table containing the numbers of the arguments that exist
local variableParam = args.pv
-- for the specified prefix and suffix.
variableParam = tonumber(variableParam) or variableParam or 1 -- fix for positional parameters
local nums = {}
local variableValPrefix = args.prefix or ''
for k, v in pairs(args) do
local variableValPostfix = args.postfix or ''
local num = tostring(k):match('^' .. prefix .. '([1-9]%d*)' .. suffix .. '$')
local sep = args[1] or ''
if num then table.insert(nums, tonumber(num)) end
local constantArgs = p.getConstants(args)
end
local variableVals = p.getVariableVals(args)
table.sort(nums)
 
return nums
local result = ''
for i, v in ipairs(variableVals) do
v = mw.text.trim(v) -- trim whitespace
local targs = constantArgs
targs[variableParam] = variableValPrefix .. v .. variableValPostfix
local expandedTemplate = p.callTemplate(template, targs)
result = result .. expandedTemplate
if variableVals[i + 1] then
result = result .. sep
end
end
return result
end
 
local function p.getConstants(args)
local constantArgNums = p.getArgNums(args, 'pc', 'n')
local constantArgs = {}
for _, vnum in ipairs(constantArgNums) do
local keyArgNamekeyArg = 'pc' .. tostring(vnum) .. 'n'
local valArgNamevalArg = 'pc' .. tostring(vnum) .. 'v'
local key = args[keyArg]
constantArgs[args[keyArgName]] = args[valArgName]
key = tonumber(key) or key
end
local value = args[valArg]
return constantArgs
constantArgs[key] = value
end
return constantArgs
end
 
local function p.getVariableVals(args)
local variableVals = {}
for i, v in ipairs(args) do
if i ~= 1 then
variableVals[i - 1] = v
end
end
return variableVals
end
 
local function _mainp.getArgNums(args, prefix, suffix)
-- Returns a table containing the numbers of the arguments that exist
local template = args['call'] or 'void'
-- for the specified prefix and suffix.
local variableParam = args.pv or 1
local nums = {}
local variableValPrefix = args.prefix or ''
local pattern = '^' .. prefix .. '([1-9]%d*)' .. suffix .. '$'
local variableValPostfix = args.postfix or ''
for k, v in local sep = pairs(args[1] or) ''do
local constantArgsnum = getConstantstostring(k):match(pattern)
if num then
local variableVals = getVariableVals()
nums[#nums + 1] = tonumber(num)
end
local result = ''
end
for i, v in ipairs(variableVals) do
table.sort(nums)
v = mw.text.trim(v) -- trim whitespace
return nums
local targs = constantArgs
targs[variableParam] = variableValPrefix .. v .. variableValPostfix
result = result .. tostring(callTemplate(template, targs))
if variableVals[i + 1] then
result = result .. sep
end
end
return result
end
 
function p.maincallTemplate(frametemplate, targs)
return mw.getCurrentFrame():expandTemplate{title = template, args = targs}
-- If called via #invoke, use the args passed into the invoking template.
-- Otherwise, for testing purposes, assume args are being passed directly in.
if frame == mw.getCurrentFrame() then
args = frame:getParent().args
for k, v in pairs(frame.args) do
args = frame.args
break
end
else
args = frame
end
return _main()
end
 
return p