Module:Item
Documentation for this module may be created at Module:Item/doc
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 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 function p.component(frame) return unpack(frame.args[1])[frame.args[2]] end local function getItems(frame) return frame:getParent().args end local function getTemplate(frame) return frame.args.template end function p.format(frame) local args = frame:getParent().args local templateArgs = unpack(args.item) for key, value in pairs(args) do if key ~= "template" and key ~= "item" then local _, _, paramKey = string.find(key, "^param (.*)") local _, _, importantKey = string.find(key, "^important (.*)") paramKey = paramKey or importantKey or key if importantKey or templateArgs[paramKey] == nil then templateArgs[paramKey] = value end end end return frame:expandTemplate{ title = args.template, args = templateArgs } end function p.each(frame) local items = getItems(frame) local separator = frame.args[1] or "" local template = getTemplate(frame) local result = "" for i, item in ipairs(items) do result = result .. frame:expandTemplate{ title = template, args = unpack(item) } if items[i + 1] then result = result .. separator end end return result end function p.gather(frame) local items = getItems(frame) local template = getTemplate(frame) local parameter = frame.args.parameter or "1" local args = { } for i, item in ipairs(items) do args[i] = unpack(item)[parameter] end return frame:expandTemplate{ title = template, args = args } end return p