| مسابقه دانشدخت | |
| اسلامیکال از تاریخ ۱۵ دی تا ۲۰ بهمن، میزبان یک همایه با موضوع زنان است. شما میتوانید در مسابقه مقالهنویسی دانشدخت، شرکت کنید و با نگارش مقاله، از جوایز آن بهرهمند باشید. اگر به موضوعات مربوط با زنان علاقهمندید، این فرصت را از دست ندهید. فهرستی از مقالات پیشنهادی جهت ایجاد یا ویرایش در اینجا وجود دارد. |
پودمان:Item
توضیحات این پودمان میتواند در پودمان:Item/توضیحات قرار گیرد.
local p = {}
local function escape(str)
return str:gsub("[|\\]", function (c) return string.format("\\%03d", c:byte()) end)
end
local function unescape(str)
return str:gsub("\\(%d%d%d)", function (d) return string.char(d) end)
end
-- Implements [[Template:Item]]
function p.pack(frame)
local parent = frame:getParent()
local result = ''
for key, value in pairs(parent.args) do
result = result .. "|" .. escape(tostring(key)) .. "|" .. escape(value)
end
return result .. "|";
end
local function unpack(str)
local result = { }
for key, value in str:gfind("|([^|]*)|([^|]*)") do
result[unescape(key)] = unescape(value)
end
return result
end
-- Implements [[Template:Component]]
function p.component(frame)
return unpack(frame.args[1])[frame.args[2]]
end
local function getItems(frame)
return frame:getParent().args
end
local function invert(tbl)
local result = { }
for key, value in pairs(tbl) do
result[value] = key
end
return result
end
-- Add args into item as appropriate (see [[Template:Format item]])
local function addArgs(
item, -- unpacked item to modify
args, -- arguments for adding into item
ignore, -- pass in invert{keys to ignore}
shift -- for numbered arguments, args[key+shift] is assigned to item[key]
-- returns: item
)
for key, value in pairs(args) do
if not ignore[key] then
local _, _, paramKey = string.find(key, "^param (.*)")
local _, _, importantKey = string.find(key, "^important (.*)")
paramKey = paramKey or importantKey or key
if shift and type(paramKey) == "number" then
paramKey = paramKey - shift
if paramKey < 1 then paramKey = nil end
end
if paramKey and (importantKey or item[paramKey] == nil) then
item[paramKey] = value
end
end
end
return item
end
-- Implements [[Template:Format item]]
function p.format(frame)
local args = frame:getParent().args
local ignore = invert{ "template", "item" }
local templateArgs = addArgs(unpack(args.item), args, ignore)
return frame:expandTemplate{ title = args.template, args = templateArgs }
end
-- See [[Template:Item#Format each item using a template]]
function p.each(frame)
local args = frame.args
local items = getItems(frame)
local separator = args[1] or ""
local prepend = args[2] or ""
local append = args[3] or ""
local ignore = invert{ "template" }
local shift = 3
local result = ""
for i, item in ipairs(items) do
local templateArgs = addArgs(unpack(item), args, ignore, shift)
result = result .. prepend .. frame:expandTemplate{ title = args.template, args = templateArgs } .. append
if items[i + 1] then
result = result .. separator
end
end
return result
end
-- See [[Template:Item#Gather given parameter from all items]]
function p.gather(frame)
local args = frame.args
local items = getItems(frame)
local parameter = args.parameter or "1"
local templateArgs = { }
for i, item in ipairs(items) do
templateArgs[i] = unpack(item)[parameter]
end
return frame:expandTemplate{ title = args.template, args = templateArgs }
end
return p