local p = local getArgs = require('Module:Arguments').getArgs
-- Returns a table with the keys of the passed table as its valueslocal function getTableKeys(tbl) local keys = for k,_ in pairs(tbl) do keys[#keys + 1] = k end
table.sort(keys) return keysend
-- Construct a table of the tagged CSDs and any arguments passed in for each CSD-- Example format: |G6|rationaleG6 rationale|xfd|G7|rationaleG7 rationalelocal function constructCsdTable(args) local tbl = local current = -- Code of current CSD being processed. Its value will be the last CSD-like param read (eg 'G6') local size = 0 for k,v in pairs(args) do if string.match(v, '^[GgAaFfCcUuRrTtPp]%d%d?$') then -- Begin collecting args for a new CSD current, size = string.lower(v), 0 tbl[current] = else -- Add the arg to the CSD being processed (ie, the corresponding CSD) local arg = mw.text.split(v, '=') tbl[current][string.lower(arg[1])] = arg[2] size = size + 1 -- Increment the 'size', ie number of params passed for a particular CSD tbl[current]['size'] = size end end return tblend
-- Build the Db-meta wrapper templatelocal function build(frame, args) local passThruArgs = -- Arguments we'll pass through unchanged to the Db-meta wrapper local csdTable = constructCsdTable(args) local csdKeys = getTableKeys(csdTable) --if true then return mw.dumpObject(csdTable) end
local builtCsdTemplates = local summary = "" -- Loop through CSDs (eg G1, G2) local n = 0 for k,v in pairs(csdTable) do n = n + 1 local templateArgs = -- Add to summary the name of the CSD. Plus open brackets if we've got extra params summary = summary .. string.upper(k) .. (v['size'] > 0 and ' (' or ) -- add values to templateArgs (and summary) in any custom params we got for this CSD, eg Rationale, URL for _,arg in ipairs(passThruArgs) do if v[arg] then templateArgs[arg] = v[arg] summary = summary .. arg .. ': ' .. v[arg] .. (v['size'] > _ and ', ' or ) end end -- Close brackets if we had custom params. Add a comma if we've got another CSD summary = summary .. (v['size'] > 0 and ')' or ) .. (#csdKeys > n and ', ' or ) -- Save the built template table.insert(builtCsdTemplates, frame:expandTemplate) end -- Construct Db-meta wrapper, composed of all the built CSD templates local dbTemplate = frame:expandTemplate
return dbTemplateend
-- Exportsfunction p.main(frame) local args = getArgs(frame) return build(frame, args)end
-- Testfunction p.dump(frame) return mw.dumpObject(mw.text.unstripNoWiki(frame.args[1]))end
return p