Jump to content
 







Main menu
   


Navigation  



Main page
Contents
Current events
Random article
About Wikipedia
Contact us
Donate
 




Contribute  



Help
Learn to edit
Community portal
Recent changes
Upload file
 








Search  

































Create account

Log in
 









Create account
 Log in
 




Pages for logged out editors learn more  



Contributions
Talk
 



















Contents

   



(Top)
 


1 gettable  





2 getalias  





3 gettemplate  














Module:CountryData






Afrikaans
Anarâškielâ
العربية
Авар
تۆرکجه
Basa Bali

Banjar

Bosanski
Cymraeg
Ελληνικά
Euskara
فارسی
Français

Hausa
ि
Bahasa Indonesia

Ikinyarwanda
Kurdî
Ladin
Ladino
Latviešu
ि
Македонски

مصرى
مازِرونی
Bahasa Melayu
Монгол



ି
Oʻzbekcha / ўзбекча

پښتو
Tok Pisin
Português
Qaraqalpaqsha
Română
Русский
Scots

Simple English
سنڌي
Slovenščina
کوردی
Српски / srpski
Suomi
ி
 

Türkçe
Українська
اردو
Tiếng Vit
Winaray


 

Edit links
 









Module
Talk
 

















Read
View source
View history
 








Tools
   


Actions  



Read
View source
View history
 




General  



What links here
Related changes
Upload file
Special pages
Permanent link
Page information
Get shortened URL
Download QR code
Wikidata item
 




Print/export  



Download as PDF
Printable version
 




In other projects  



Wikivoyage
 
















Appearance
   

 





Permanently protected module

From Wikipedia, the free encyclopedia
 


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,"France",{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}} and {{getalias2}}, 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:

{{#tag:pre|{{Country data France}}}}
{{#tag:pre|{{#invoke:CountryData|gettemplate|France}}}}

gives

{{ {{{1}}}
| alias = France
| flag alias = Flag of France.svg
| flag alias-1790 = Flag of France (1790–1794).svg
| flag alias-1794 = Flag of France (1794–1815, 1830–1958).svg
| flag alias-1814 = Flag of the Kingdom of France (1814-1830).svg
| flag alias-1830 = Flag of France (1794–1815, 1830–1958).svg
| flag alias-1848 = Drapeau france 1848.svg
| flag alias-1848a = Drapeau france 1848.svg
| flag alias-1848b = Flag of France (1794–1815, 1830–1958).svg
| flag alias-1974 = Flag of France (lighter variant).svg
| flag alias-naval = Civil and Naval Ensign of France.svg
| flag alias-naval-1790 = Flag of French-Navy-Revolution.svg
| flag alias-air force = Flag of France.svg
| link alias-air force = French Air and Space Force
| flag alias-coast guard = French Maritime Gendarmerie racing stripe.svg
| border-coast guard = 
| link alias-coast guard = French Maritime Gendarmerie
| flag alias-army = Flag of France.svg
| link alias-army = French Army
| link alias-naval = French Navy
| flag alias-navy = Civil and Naval Ensign of France.svg
| link alias-navy = French Navy
| size = 
| name = 
| altlink = 
| variant = 

}}
{{ {{{1}}}
| altlink = 
| flag alias-naval-1790 = Flag of French-Navy-Revolution.svg
| link alias-coast guard = French Maritime Gendarmerie
| border-coast guard = 
| flag alias-1848 = Drapeau france 1848.svg
| flag alias = Flag of France.svg
| variant = 
| flag alias-1814 = Flag of the Kingdom of France (1814-1830).svg
| flag alias-1830 = Flag of France (1794–1815, 1830–1958).svg
| alias = France
| flag alias-1794 = Flag of France (1794–1815, 1830–1958).svg
| flag alias-army = Flag of France.svg
| flag alias-naval = Civil and Naval Ensign of France.svg
| flag alias-navy = Civil and Naval Ensign of France.svg
| flag alias-1848b = Flag of France (1794–1815, 1830–1958).svg
| name = 
| size = 
| flag alias-1848a = Drapeau france 1848.svg
| link alias-naval = French Navy
| flag alias-1974 = Flag of France (lighter variant).svg
| link alias-air force = French Air and Space Force
| link alias-army = French Army
| flag alias-coast guard = French Maritime Gendarmerie racing stripe.svg
| flag alias-1790 = Flag of France (1790–1794).svg
| flag alias-air force = Flag of France.svg
| link alias-navy = French Navy
}}

Note that, like with all Lua tables, the order of entries is not preserved, so the parameters are mixed up.

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

Retrieved from "https://en.wikipedia.org/w/index.php?title=Module:CountryData&oldid=1021638208"

Categories: 
Modules subject to page protection
Flag template system
Hidden category: 
Wikipedia template-protected modules
 



This page was last edited on 5 May 2021, at 20:40 (UTC).

Text is available under the Creative Commons Attribution-ShareAlike License 4.0; additional terms may apply. By using this site, you agree to the Terms of Use and Privacy Policy. Wikipedia® is a registered trademark of the Wikimedia Foundation, Inc., a non-profit organization.



Privacy policy

About Wikipedia

Disclaimers

Contact Wikipedia

Code of Conduct

Developers

Statistics

Cookie statement

Mobile view



Wikimedia Foundation
Powered by MediaWiki