Jump to content

Module:CountryData: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Don't pass through empty flag alias
Use pcall to have to load the data template only 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
local bool, s = pcall(getcontents,frame,country,params or {})
if string.find(frame:preprocess("{{Country data "..country.."}}"),"^%{%{ *%{%{%{1")
if bool and string.find(s,"^%{%{ *%{%{%{1")
then
then
--Params to be passed into data template
params = params or {}
--Transclude template without first parameter for string list of params
local s = frame:expandTemplate({title="Country data "..country;args=params})
--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 16:56, 28 March 2016

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