This module has three functions to extract data from country data templates (which are used for most flag templates).
gettable
Extracts all parameters from a data template and returns them as a Lua table. This function is only usable from other Lua modules; invoke it using require('Module:CountryData').gettable(parameters)
.
The first parameter is the frame
of the invoking module; the second is the country or other entity to get the data of. The optional third parameter is a table of parameters to pass into the data template; this may, for example, include |age=
or |mw=
, which are used in the values of some sports alias parameters. E.g.,
local data = require('Module:CountryData').gettable(frame,"Франція",{age="20",mw="men's"})
The function returns an empty table if a data template does not exist or does not conform to the standard structure.
getalias
If used from wikicode, this function returns the value of a single field in a data template. The first parameter is the country or other entity whose data to return; the second is the name of the field. For example, {{#invoke:CountryData|getalias|France|flag alias}}
→ Flag of France.svg. The other parameters are |variant=
to return a variant parameter value, with fallback to the main field value if the variant does not exist, and |def=
for the fallback output if the wanted data template or field does not exist, the default for which is a literal "nil".
Note: This is likely not quicker than wikicode-only alternatives such as {{getalias}}, {{getalias2}} and {{pst name}}, because it transcludes the data template from Lua and converts it to a Lua table using the above function, picks the wanted parameter name, and returns it to wikicode, whereas other templates perform two simple non-Lua transclusions to get, in most cases, the same result. The Lua version does have the advantage that using it with a non-existing country data template returns "nil" (or the value of |def=
) rather than a redlink to the data template. See a comparison of the four at User:SiBr4/Flagg tests#Lua-based getalias.
gettemplate
This function concatenates the fields of a data template into a string similar to what you get when transcluding it directly. It can be compared with a direct transclusion to test if a template is being converted to Lua correctly:
{{pre|{{Дані країни Франція}}}} {{pre|{{#invoke:CountryData|gettemplate|Франція}}}}
gives
{{ {{{1}}} | alias = Франція | flag alias = Flag of France.svg | flag alias-1790 = Flag of France (1790-1794).svg | flag alias-1814 = Flag of the Kingdom of France (1814-1830).svg | flag alias-ВМС = Civil and Naval Ensign of France.svg | flag alias-ВМС-1790 = Flag of French-Navy-Revolution.svg | flag alias-Віши = VichyFlag.svg | link alias-ВМС = Військово-морські сили Франції | link alias-СВ = Сухопутні війська Франції | розмір = | назва = | altlink = | варіант = }}
{{ {{{1}}} | altlink = | flag alias-1790 = Flag of France (1790-1794).svg | варіант = | flag alias-ВМС = Civil and Naval Ensign of France.svg | розмір = | flag alias = Flag of France.svg | link alias-СВ = Сухопутні війська Франції | назва = | link alias-ВМС = Військово-морські сили Франції | flag alias-1814 = Flag of the Kingdom of France (1814-1830).svg | flag alias-ВМС-1790 = Flag of French-Navy-Revolution.svg | alias = Франція | flag alias-Віши = VichyFlag.svg }}
Note that, like with all Lua tables, the order of entries is not preserved, so the parameters are mixed up.
Документація вище включена з Модуль:CountryData/документація. (ред. | історія) Дописувачі можуть експериментувати на підсторінках пісочниця (створити | дзеркало) та тести (створити) цього модуля. Будь ласка, додавайте категорії до підсторінки /документація. Підсторінки цієї сторінки. |
local p = {}
function getcontents(frame,country,params)
return frame:expandTemplate({title="Дані країни "..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