پودمان:ForLoop/تمرین
ظاهر
![]() | اینجا صفحهٔ تمرین پودمان برای پودمان:ForLoop (تفاوت) است. |
-- This module implements {{for loop}}.
local num_con = require('Module:Numeral converter').convert
local getArgs = require('Module:Arguments').getArgs
local yesno = require('Module:Yesno')
local p = {}
function p.main(frame)
local args = getArgs(frame, {
trim = false,
removeBlanks = false
})
return p._main(args)
end
function p._main(args)
local template = args['call'] or args['فراخوانی'] or 'void'
local calltemplates = yesno(args.substall or args['جانشانی همه'] or "", true) or not mw.isSubsting()
local variableParam = args.pv or args['پارامتر متغیر']
variableParam = tonumber(variableParam) or variableParam or 1 -- fix for positional parameters
local variableValPrefix = args.prefix or args['پیشوند'] or ''
local variableValPostfix = args.postfix or args['پسوند'] or ''
local sep = args[1] or ''
local constantArgs = p.getConstants(args)
local variableVals = p.getVariableVals(args)
local result = ''
local addSeparator = false;
for _, v in ipairs(variableVals) do
v = mw.text.trim(v)
if #v > 0 or not yesno(args.skipBlanks or args['چشمپوشی از خالی']) then
if addSeparator then
result = result .. sep
end
addSeparator = true;
local targs = constantArgs
targs[variableParam] = variableValPrefix .. v .. variableValPostfix
if calltemplates then
local output = p.callTemplate(template, targs)
if #mw.text.trim(output) == 0 then
addSeparator = false
end
result = result .. output
else
local makeTemplate = require('Module:Template invocation').invocation
result = result .. makeTemplate(template, targs)
end
end
end
return result
end
function p.getConstants(args)
local constantArgNums = p.getArgNums(args, 'pc', 'n')
local constantArgs = {}
for _, num in ipairs(constantArgNums) do
local keyArg = 'pc' .. tostring(num) .. 'n'
local valArg = 'pc' .. tostring(num) .. 'v'
local key = args[keyArg]
key = tonumber(key) or key
local value = args[valArg]
constantArgs[key] = value
end
return constantArgs
end
function p.getVariableVals(args)
local variableVals = {}
if args.start or args['آغاز'] or args.stop or args['توقف'] or args.by or args['تا'] then
if args[2] then
error("هم پارامترهای آغاز/توقف/تا، و هم پارامترهای شمارهدار وارد شدهاند")
end
local start = tonumber(num_con('en', args.start or args['آغاز']) or 1)
local stop = tonumber(num_con('en', args.stop or args['توقف']) or 1)
local by = tonumber(args.by or args['تا'] or 1)
for i = start, stop, by do
variableVals [#variableVals + 1] = i
end
else
for i, v in ipairs(args) do
if i ~= 1 then
variableVals[i - 1] = v
end
end
end
return variableVals
end
function p.getArgNums(args, prefix, suffix)
-- Returns a table containing the numbers of the arguments that exist
-- for the specified prefix and suffix.
local nums = {}
local pattern = '^' .. prefix .. '([1-9۱-۹]%d*)' .. suffix .. '$'
for k, _ in pairs(args) do
local num = mw.ustring.match(tostring(k), pattern)
if num then
nums[#nums + 1] = tonumber(num)
end
end
table.sort(nums)
return nums
end
function p.callTemplate(template, targs)
return mw.getCurrentFrame():expandTemplate{title = template, args = targs}
end
return p