Module:ISO 3166/sandbox: Difference between revisions

Content deleted Content added
Fall back on not splitting by hyphen when getting code from name
Don't display script warnings if nocat is set to true
 
(40 intermediate revisions by 4 users not shown)
Line 7:
local p = {}
local getArgs = require("Module:Arguments").getArgs
local data = mw.loadData("Module:ISO 3166/data/National/sandbox")
 
--[[----------E R R O R S----------]]-- -- Assign error categories and display warnings
local function errors(errType, args, code, alpha2)
if not (args.nocat and args.nocat == 'true') then
if code then
local warningText = code .. ' ("%s") is not a recognized ' .. errType .. ' in [[ISO 3166-%s]] ([[Module:ISO 3166]]).'
if errType == 'country' then
mw.addWarning(string.format(warningText, args[1], '1'))
elseif errType == 'subdivision' and alpha2 then
mw.addWarning(string.format(warningText, args[2], '2:' .. alpha2))
end
end
return mw.title.getCurrentTitle().namespace == 0 and ('[[Category:Wikipedia articles with obscure ' .. errType .. 'subdivision]]') or ''
end
return ''
end
 
--[[----------F I N D N A M E----------]]-- -- Finds the name in the database
Line 54 ⟶ 70:
 
function p.strip(text)
if not text then return nil end
local accents = {["À"]="A",["Á"]="A",["Â"]="A",["Ã"]="A", -- accent list
["Ä"]="A",["Å"]="A",["Ç"]="C",["È"]="E",["É"]="E",
["Ê"] local accents ="E", {["ËÀ"]="EA",["ÌÁ"]="IA",["ÍÂ"]="IA",["ÎÃ"]="IA",
["ÏÄ"]="IA",["ÑÅ"]="NA",["ÒÆ"]="OAE",["ÓÇ"]="OC",["ÔÈ"]="OE",
["ÕÉ"]="OE",["ÖÊ"]="OE",["ØË"]="OE",["ÙÌ"]="UI",["ÚÍ"]="UI",
["ÛÎ"]="UI",["ÜÏ"]="UI",["ÝÐ"]="YD",["Ñ"]="N",["Ò"]="O",
["Ó"]="O",["Ô"]="O",["Õ"]="O",["Ö"]="O",["Ø"]="O",
["Ù"]="U",["Ú"]="U",["Û"]="U",["Ü"]="U",["Ý"]="Y",
["Þ"]="TH",
["Ā"]="A",["Ă"]="A",["Ą"]="A",["Ć"]="C",["Č"]="C",
["Ĉ"]="C",["Ċ"]="C",["Ď"]="D",["Đ"]="D",["Ĕ"]="E",
["Ě"]="E",["Ė"]="E",["Ē"]="E",["Ę"]="E",["Ŋ"]="N",
["Ğ"]="G",["Ģ"]="G",["Ĝ"]="G",["Ġ"]="G",["Ĥ"]="H",
["Ħ"]="H",["Ĭ"]="I",["İ"]="I",["Ī"]="I",["Į"]="I",
["Ĩ"]="I",["IJ"]="IJ",["Ĵ"]="J",["Ķ"]="K",["Ĺ"]="L",
["Ľ"]="L",["Ļ"]="L",["Ŀ"]="L",["Ł"]="L",["Ń"]="N",
["Ň"]="N",["Ņ"]="N",["Ŏ"]="O",["Ő"]="O",["Ō"]="O",
["Œ"]="OE",["Ŕ"]="R",["Ř"]="R",["Ŗ"]="R",["Ś"]="S",
["Š"]="S",["Ş"]="S",["Ŝ"]="S",["Ť"]="T",["Ţ"]="T",
["Ŧ"]="T",["Ŭ"]="U",["Ű"]="U",["Ū"]="U",["Ų"]="U",
["Ů"]="U",["Ũ"]="U",["Ŵ"]="W",["Ŷ"]="Y",["Ÿ"]="Y",
["Ź"]="Z",["Ž"]="Z",["Ż"]="Z",
}
local remove = {"NATION OF","COUNTRY OF","TERRITORY OF", -- text to be removed list
"FLAG OF","FLAG","KINGDOM OF","STATE OF"," STATE ",
"PROVINCE OF","PROVINCE","TERRITORY","COUNTY","GOVERNORATE"
}
local patterns = {"(%a)%.(%a)%.",".+:","|.+","%(.-%)", -- patterns to follow (order may matter)
"%.%S.*","^THE ","%_","%-","%d%d?%d?PX"
}
local patternsreplacements = {["(%a)%.+:"]="",["|(%a)%.+"]="",["%(.-1%)"]="2", -- Replacements for patterns to followabove (order maydoes not matter)
["%..*+:"]="",["^THE |.+"]="",["%_"]=" ",["(.-%-)"]=" ",
["%.%S.*"]="",["^THE "]="",["%_"]=" ",["%-"]=" ",
["%d%d?%d?PX"]="",
}
text = mw.text.decode(text) -- Decode HTML entities (passed from wikidata?)
text = mw.text.unstripNoWiki(text) -- Remove <nowiki> tags
text = mw.ustring.upper(text) -- Case insensitivity
text = mw.ustring.gsub(text,"[À-ÝŻ]",accents) -- Deaccent
for pattern_,valuepattern in pairsipairs(patterns) do -- Follow patterns
local value = replacements[pattern]
text = mw.ustring.gsub(text,pattern,value)
text = mw.ustring.gsub(text,pattern,value)
end
Line 99 ⟶ 138:
--[[----------P . L U A C O D E---------]]-- -- Makes the ISO code of a country
 
function p.luacode(args, skipHyphenSplit)
args[1], args[2] = args[1] or '', args[2] or ''
if not skipHyphenSplit then
if local stringcode1 = p.findstrip(args[1] or '',"%-") then
local code2 = p.strip(args[2])
args[1], args[2] = string.match(args[1] or '',"^([^%-]*)%-(.*)$")
end
end
 
if args["codetype"]=="3" then args["codetype"]="alpha3" end
--error(mw.dumpObject(args))
if args[1] then args[1] = p.strip(args[1]) end
if args[2] then args[2] = p.strip(args[2]) end
--error(mw.dumpObject(args))
if args["codetype"]=="3" then
args["codetype"]="alpha3"
end
local eot = args.error or ""
if code1 == "" then
local catnocountry = (args.nocat and args.nocat == 'true') and ''
if not (args.nocat and args.nocat == 'true') then
or '[[Category:Wikipedia page with obscure country]]'
mw.addWarning((args[1] ~= "" and ('Invalid parameter "' .. args[1] .. '"') or 'No parameter') ..
local catnosubdivision = (args.nocat and args.nocat == 'true') and ''
' for the country given ([[Module:ISO 3166]]).')
or '[[Category:Wikipedia page with obscure subdivision]]'
end
return errors('country', args), '<span style="font-size:100%" class="error">"No parameter for the country given"</span>'
if not args[1] then
if mw.title.getCurrentTitle().namespace ~= 0 then catnocountry = '' end
return catnocountry, '<span style="font-size:100%" class="error">"No parameter for the country given"</span>'
end
if notcode2 args[2]== "" then --3166-1 code
for alpha2,cdata in pairs(data) do
if findname(alpha2,cdata,args[1]code1) then
if args["codetype"]=="numeric" or args["codetype"]=="alpha3" then
return cdata[args["codetype"]]
Line 139 ⟶ 165:
end
end
if string.find(args[1],"%-") then
if mw.title.getCurrentTitle().namespace ~= 0 then catnocountry = '' end
args[1], args[2] = string.match(args[1],"^([^%-]*)%-(.*)$")
return catnocountry
if args[2] then return p.luacode(args) end
end
return errors('country', args, code1)
else --3166-2 code
for alpha2,cdata in pairs(data) do
if findname(alpha2,cdata,args[1]code1) then
if mw.ustring.match(alpha2,"GB") then -- For England, Wales etc.
alpha2 = "GB"
Line 152 ⟶ 181:
if type(scdata)=="table" then
empty = false
if findname(scode,scdata,args[2]code2) then
return alpha2.."-"..scode
end
end
end
if string.find(args[2] or '',"%-") then
if mw.title.getCurrentTitle().namespace ~= 0 then catnosubdivision = '' end
code1, args[2] = string.match(args[2] or '',"^([^%-]*)%-(.*)$")
return catnosubdivision
args[1] = args[1].."-"..code1
return p.luacode(args)
end
return errors('subdivision', args, code2, alpha2)
end
end
if string.find(args[1],"%-") then
if mw.title.getCurrentTitle().namespace ~= 0 then catnocountry = '' end
args[1] = string.match(args[1],"^([^%-]*)%-(.*)$")
return catnocountry
return p.luacode(args)
end
return errors('country', args, code1)
end
return errors('country', args, code1)
 
end
 
Line 170 ⟶ 206:
 
function p.code(frame)
 
return p.luacode(getArgs(frame)) or ""
--lucode() mutates its arguments, so we must call getArgs() twice.
 
unhyphenateResult = p.luacode(getArgs(frame))
keepHyphenResult = p.luacode(getArgs(frame), true)
--return unhyphenateResult .. '_' .. keepHyphenResult
--Prioritize single country name.
if keepHyphenResult ~= nil and keepHyphenResult ~= '' then
return keepHyphenResult
end
if unhyphenateResult ~= nil and unhyphenateResult ~= '' then
return unhyphenateResult
end
return ''
end
 
Line 204 ⟶ 229:
local code1 = p.luacode(args)
local code2 = ''
if string.find(code1,"%-") then
code1, code2 = string.match(code1,"^([^%-]*)%-(.*)$")
Line 215 ⟶ 240:
or (data[code1]["displayname"] or data[code1]["name"])
else
return errors('[[Category:Wikipedia page with obscure country]]', args)
end
else --3166-2 code
Line 222 ⟶ 247:
sdata = mw.loadData("Module:ISO 3166/data/"..code1)
else
return errors('[[Category:Wikipedia page with obscure country]]', args)
end
if sdata[code2] then
Line 228 ⟶ 253:
or (sdata[code2]["displayname"] or sdata[code2]["name"])
else
return errors('[[Category:Wikipedia page with obscure country]]', args)
end
end
Line 251 ⟶ 276:
local args = frame.args
local subdivisionqueried = false
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]]' or ''
local tracking = ''
local targs = {}
Line 274 ⟶ 295:
if region == '' then
region = p.luacode({country, nocat = 'true'})
if mw.title.getCurrentTitle().namespace ~= 0 then catnocountry, catnosubdivision = '', '' end
if region == '' then
tracking = tracking .. catnocountryerrors('country', args)
elseif subdivisionqueried == true then
tracking = tracking .. catnosubdivisionerrors('subdivision', args)
end
end