Difference between revisions of "Module:CountryData/sandbox"
Jump to navigation
Jump to search
blackwiki>SiBr4 (Creating) |
blackwiki>SiBr4 (Transclude data page once instead of twice) |
||
| Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
| + | |||
| + | function getcontents(frame,country,params) | ||
| + | return frame:expandTemplate({title="Country data "..country;args=params}) | ||
| + | end | ||
function p.gettable(frame,country,params) | function p.gettable(frame,country,params) | ||
--Returns the parameters of a country data template as a Lua table | --Returns the parameters of a country data template as a Lua table | ||
--If not a valid data template, return empty table | --If not a valid data template, return empty table | ||
| − | if string.find( | + | local bool, s = pcall(getcontents,frame,country,params or {}) |
| + | if bool and string.find(s,"^%{%{ *%{%{%{1") | ||
then | then | ||
| − | |||
| − | |||
| − | |||
| − | |||
--Replace parameter delimiters with arbitrary control characters | --Replace parameter delimiters with arbitrary control characters | ||
--to avoid clashes if param values contain equals/pipe signs | --to avoid clashes if param values contain equals/pipe signs | ||
Revision as of 12:54, 28 March 2016
Documentation for this module may be created at Module:CountryData/sandbox/doc
local p = {}
function getcontents(frame,country,params)
return frame:expandTemplate({title="Country data "..country;args=params})
end
function p.gettable(frame,country,params)
--Returns the parameters of a country data template as a Lua table
--If not a valid data template, return empty table
local bool, s = pcall(getcontents,frame,country,params or {})
if bool and string.find(s,"^%{%{ *%{%{%{1")
then
--Replace parameter delimiters with arbitrary control characters
--to avoid clashes if param values contain equals/pipe signs
s = string.gsub(s,"|([^|=]-)=","\1\1%1\2")
s = string.gsub(s,"}}%s*$","\1")
--Loop over string and add params to table
local part = {}
for par in string.gmatch(s,"\1[^\1\2]-\2[^\1\2]-\1") do
local k = string.match(par,"\1%s*(.-)%s*\2")
local v = string.match(par,"\2%s*(.-)%s*\1")
if v and not (v=="" and string.find(k,"^flag alias")) then
part[k] = v
end
end
return part
else
return {}
end
end
function p.getalias(frame)
--Returns a single parameter value from a data template
local part = p.gettable(frame,frame.args[1])
if frame.args.variant
then return tostring(part[frame.args[2].."-"..frame.args.variant]
or part[frame.args[2]] or frame.args.def)
else return tostring(part[frame.args[2]] or frame.args.def)
end
end
function p.gettemplate(frame)
--For testing, recreates the country data from the created Lua table
--Get data table
local data = p.gettable(frame,frame.args[1])
--Concatenate fields into a template-like string
local out = "{{ {{{1}}}"
for k,v in pairs(data) do
out = out.."\n| "..k.." = "..v
end
return out.."\n}}"
end
return p