Module:ISO 3166: Difference between revisions

update with code from BrandonXLF per request on the talk page
(add coordinsert wrapper and simplify tracking category code)
(update with code from BrandonXLF per request on the talk page)
Line 9:
local data = mw.loadData("Module:ISO 3166/data/National")
 
--[[----------F I N D N A M E----------]]-- -- Finds the name in the database
 
local function findname(code,cdata,qry)
local sqry = p.strip(qry)
if cdata["name"] and sqry==p.strip(cdata["name"])
or cdata["isoname"] and sqry==p.strip(cdata["isoname"])
or not cdata["nocode"] and sqry==code
or sqry==cdata["alpha3"] or sqry==cdata["numeric"]
then
return true
end
for _,tname in pairs(cdata["isonames"] or {}) do
if sqry==p.strip(tname) then
return true
end
end
for _,tname in pairs(cdata["altnames"] or {}) do
if sqry==p.strip(tname) then
return true
end
end
return false
end
 
--[[----------I S O N A M E----------]]-- -- Find the ISO name of a country/region
 
function isoname(data,code,lang)
Line 51:
end
 
--[[----------S T R I P----------]]-- -- Removes junk from the input
 
function p.strip(text)
local accents = {["À"]="A",["Á"]="A",["Â"]="A",["Ã"]="A", -- accent list
local match=nil;
["Ä"]="A",["Å"]="A",["Ç"]="C",["È"]="E",["É"]="E",
match = mw.ustring.match(text, "Flag of ([^\.]*)")
["Ê"]="E",["Ë"]="E",["Ì"]="I",["Í"]="I",["Î"]="I",
match = mw.ustring.match(text, "Flag ([^\.]*)")
["Ï"]="I",["Ñ"]="N",["Ò"]="O",["Ó"]="O",["Ô"]="O",
if (match) then
["Õ"]="O",["Ö"]="O",["Ø"]="O",["Ù"]="U",["Ú"]="U",
text = match
["Û"]="U",["Ü"]="U",["Ý"]="Y"
end
}
match = mw.ustring.match(text, "(%u[%a\(\)\.' -]+)")
local remove = {"NATION OF","COUNTRY OF","TERRITORY OF", -- text to be removed list
if (match == "Image") then
"FLAG OF","FLAG","KINGDOM OF","STATE OF"," STATE ",
text = mw.ustring.gsub(text, match, "")
"PROVINCE OF","PROVINCE","TERRITORY"
match = mw.ustring.match(text, "[\|\[](%u[%a\(\)\.' -]+)")
}
local patterns = {[".+:"]="",["|.+"]="",["%(.-%)"]="", -- patterns to follow (order may matter)
["%..*"]="",["^THE "]="",["%_"]=" ",["%-"]=" ",
["%d%d?%d?PX"]="",
}
text = mw.ustring.upper(text) -- Case insensitivity
text = mw.ustring.gsub(text,"[À-Ý]",accents) -- Deaccent
for pattern,value in pairs(patterns) do -- Follow patterns
text = mw.ustring.gsub(text,pattern,value)
end
if (match == "20px") then
for _,words in pairs(remove) do -- Remove unneeded words
text = mw.ustring.gsub(text, match, "")
match text = mw.ustring.matchgsub(text, words,""\[(%u[%a\(\)\.' -]+)")
end
if (match) then
text = match
end
text = mw.ustring.upper(text) --Case insensitivity
text = stringmw.ustring.gsub(text,"^THE %W","") -- Remove definitenon articlealpha-numeric
text = string.gsub(text,"[%s%-%,%.%(%)%/%\']","") --Remove spacing and punctuation
local accents = {["À"]="A",["Á"]="A",["Â"]="A",["Ã"]="A",["Ä"]="A",["Å"]="A",["Ç"]="C",["È"]="E",["É"]="E",
["Ê"]="E",["Ë"]="E",["Ì"]="I",["Í"]="I",["Î"]="I",["Ï"]="I",["Ñ"]="N",["Ò"]="O",["Ó"]="O",
["Ô"]="O",["Õ"]="O",["Ö"]="O",["Ø"]="O",["Ù"]="U",["Ú"]="U",["Û"]="U",["Ü"]="U",["Ý"]="Y"}
text = mw.ustring.gsub(text,"[À-Ý]",accents) --Deaccent
return text
end
 
--[[----------P . C A L L S T R I P ---------]]-- -- Calls P.strip but using Module:Arguments
 
function p.callstrip(frame)
Line 92 ⟶ 97:
end
 
--[[----------P . L U A C O D E---------]]-- -- Makes the ISO code of a country
 
function p.luacode(args)
 
if string.find(args[1],"%-") then
args[1], args[2] = string.match(args[1],"^([^%-]*)%-(.*)$")
end
if args[1] then args[1] = p.strip(args[1]) end
if args[2] then args[2] = p.strip(args[2]) end
 
if args["codetype"]=="3" then
args["codetype"]="alpha3"
Line 105 ⟶ 114:
local eot = args.error or ""
local catnocountry = (args.nocat and args.nocat == 'true') and ''
or '[[Category:Wikipedia page with obscure country]]'
local catnosubdivision = (args.nocat and args.nocat == 'true') and ''
or '[[Category:Wikipedia page with obscure subdivision]]'
if not args[1] then
return returncatnocountry, '<span style="font-size:100%" class="error">"No parameter for the country given"</span>'
end
if not args[2] then --3166-1 code
for alpha2,cdata in pairs(data) do
if findname(alpha2,cdata,args[1]) then
if args["codetype"]=="numeric" or args["codetype"]=="alpha3" then
return cdata[args["codetype"]]
else
return alpha2
end
end
end
return catnocountry
else --3166-2 code
else --3166-2 code
for alpha2,cdata in pairs(data) do
if findname(alpha2,cdata,args[1]) then
if mw.ustring.match(alpha2,"GB") then -- For England, Wales etc.
alpha2 = "GB"
end
local sdata = mw.loadData("Module:ISO 3166/data/"..alpha2)
local empty = true
for scode,scdata in pairs(sdata) do
if type(scdata)=="table" then
empty = false
if findname(scode,scdata,args[2]) then
return alpha2.."-"..scode
end
end
end
if empty then
return catnosubdivision
else
return catnosubdivision
end
end
end
return catnocountry
end
 
end
 
--[[----------P . C O D E---------]]-- -- Calls P.Luacode but using Module:Arguments
 
function p.code(frame)
Line 161 ⟶ 170:
end
 
--[[----------P . N U M E R I C---------]]-- -- Calls P.Luacode but using Module:Arguments and setting it to output a numeric value
 
function p.numeric(frame)
Line 173 ⟶ 182:
end
--[[----------P . L U A N A M E---------]]-- -- Makes the ISO/common name of a country
function p.luaname(args)
Line 181 ⟶ 190:
if string.find(code1,"%-") then
code1, code2 = string.match(code1,"^([^%-]*)%-(.*)$")
end
if string.find(code1,"^%u%u$") then
if code2=="" then --3166-1 alpha-2 code
if data[code1] then
return (args.isoname or args.lang) and isoname(data,code1,args.lang)
or (data[code1]["displayname"] or data[code1]["name"])
and isoname(data,code1,args.lang)
else
or (data[code1]["displayname"] or data[code1]["name"])
return '[[Category:Wikipedia page with obscure country]]'
else
end
return '[[Category:Wikipedia page with obscure country]]'
else --3166-2 code
end
local sdata
else --3166-2 code
if data[code1] then
local sdata
sdata = mw.loadData("Module:ISO if 3166/data[/"..code1] then)
else
sdata = mw.loadData("Module:ISO 3166/data/"..code1)
return '[[Category:Wikipedia page with obscure country]]'
else
end
return '[[Category:Wikipedia page with obscure country]]'
if sdata[code2] then
end
return (args.isoname or args.lang) ifand isoname(sdata[,code2] then,args.lang)
or (sdata[code2]["displayname"] or sdata[code2]["name"])
return (args.isoname or args.lang)
else
and isoname(sdata,code2,args.lang)
return '[[Category:Wikipedia page with obscure country]]'
or (sdata[code2]["displayname"] or sdata[code2]["name"])
end
else
end
return '[[Category:Wikipedia page with obscure country]]'
end
end
end
end
 
--[[----------P .GEOCOORDINSERT N A M E---------]]-- -- WrapperCalls forP.Luaname but using Module:Coordinates.coordinsertArguments
 
function p.name(frame)
 
return p.luaname(getArgs(frame)) or ""
 
end
--[[----------P . G E O C O O R D I N S E R T---------]]-- -- Wrapper for Module:Coordinates.coordinsert
function p.geocoordinsert(frame)
-- {{#invoke:ISO 3166|geocoordinsert|{{coord|...}}
Line 265 ⟶ 280:
-- otherwise, just return the coordinates
return targs[1] .. tracking
end
 
--[[----------P . N A M E---------]]-- -- Calls P.Luaname but using Module:Arguments
 
function p.name(frame)
 
return p.luaname(getArgs(frame)) or ""
 
end
 
Anonymous user