Difference between revisions of "Module:CountryData"
Jump to navigation
Jump to search
m (1 revision imported) |
(update from wikipedia) |
||
Line 1: | Line 1: | ||
local p = {} | local p = {} | ||
local mostUsed = mw.loadData('Module:CountryData/summary') | |||
local function getcontents(frame,country,params) | local function getcontents(frame,country,params) | ||
return frame:expandTemplate({title="Country data "..country;args=params}) | return frame:expandTemplate({title="Country data "..country;args=params}) | ||
end | |||
function p.getcachedtable(frame, country, params) | |||
country = mostUsed.redirects[country] or country | |||
if params and next(params) then return p.gettable(frame, country, params) end | |||
-- Uses mw.loadData to cache data for the most-used templates | |||
if mostUsed.pages[country] then | |||
local cache = mw.loadData('Module:CountryData/cache' .. mostUsed.pages[country]) | |||
if cache.data[country] then return cache.data[country] end | |||
end | |||
-- if not in cache | |||
return p.gettable(frame, country, params) | |||
end | end | ||
Line 9: | Line 22: | ||
--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 {}) | local bool, s = pcall(getcontents,frame,country,params or {}) | ||
if bool and string.find(s,"^%{%{ *%{%{%{1") | if bool and (string.find(s,"^%{%{ *%{%{%{1") or string.find(s,"^%{%{safesubst: *%{%{%{1")) | ||
then | then | ||
--Replace parameter delimiters with arbitrary control characters | --Replace parameter delimiters with arbitrary control characters |
Revision as of 01:40, 28 December 2021
Documentation for this module may be created at Module:CountryData/doc
local p = {} local mostUsed = mw.loadData('Module:CountryData/summary') local function getcontents(frame,country,params) return frame:expandTemplate({title="Country data "..country;args=params}) end function p.getcachedtable(frame, country, params) country = mostUsed.redirects[country] or country if params and next(params) then return p.gettable(frame, country, params) end -- Uses mw.loadData to cache data for the most-used templates if mostUsed.pages[country] then local cache = mw.loadData('Module:CountryData/cache' .. mostUsed.pages[country]) if cache.data[country] then return cache.data[country] end end -- if not in cache return p.gettable(frame, country, 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") or string.find(s,"^%{%{safesubst: *%{%{%{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