Module:ISO 3166/sandbox: Difference between revisions

Content deleted Content added
only specify category names once, never use category names outside of article namespace
Don't display script warnings if nocat is set to true
 
(17 intermediate revisions by the same user not shown)
Line 8:
local getArgs = require("Module:Arguments").getArgs
local data = mw.loadData("Module:ISO 3166/data/National/sandbox")
 
local cats = {nocountry = '[[Category:Wikipedia page with obscure country]]',
--[[----------E R R O R S----------]]-- -- Assign error categories and display warnings
nosubdivision = '[[Category:Wikipedia articles with obscure subdivision]]'}
local function errors(errType, args, code, alpha2)
localif catnocountry =not (args.nocat and args.nocat == 'true') and '' 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
nosubdivision 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 58 ⟶ 72:
if not text then return nil end
local accents = {["À"]="A",["Á"]="A",["Â"]="A",["Ã"]="A", -- accent list
["Ä"]="A",["Å"]="A",["ÇÆ"]="CAE",["ÈÇ"]="EC",["ÉÈ"]="E",
["ÊÉ"]="E",["ËÊ"]="E",["ÌË"]="IE",["ÍÌ"]="I",["ÎÍ"]="I",
["ÏÎ"]="I",["ÑÏ"]="NI",["ÒÐ"]="OD",["ÓÑ"]="ON",["ÔÒ"]="O",
["ÕÓ"]="O",["ÖÔ"]="O",["ØÕ"]="O",["ÙÖ"]="UO",["ÚØ"]="UO",
["Ù"]="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 replacements = {["(%a)%.(%a)%."]="%1%2", -- Replacements for patterns above (order does not matter)
[".+:"]="",["|.+"]="",["%(.-%)"]="",
["%.%S.*"]="",["^THE "]="",["%_"]=" ",["%-"]=" ",
["%d%d?%d?PX"]="",
}
Line 77 ⟶ 109:
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)
end
Line 106 ⟶ 139:
 
function p.luacode(args)
args[1], args[2] = args[1] or '', args[2] or ''
 
local code1 = p.strip(args[1])
local code2 = p.strip(args[2])
Line 114 ⟶ 147:
local eot = args.error or ""
if (code1 or "") == "" then
local catnocountry = (args.nocat and args.nocat == 'true') and ''
local if catnocountry =not (args.nocat and args.nocat == 'true') and ''then
or cats.nocountry
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 cats.nosubdivision
end
return catnocountryerrors('country', args), '<span style="font-size:100%" class="error">"No parameter for the country given"</span>'
if (code1 or "") == "" 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 (code2 or "") == "" then --3166-1 code
for alpha2,cdata in pairs(data) do
if findname(alpha2,cdata,code1) then
Line 134 ⟶ 165:
end
end
if string.find(args[1] or '',"%-") then
args[1], args[2] = string.match(args[1] or '',"^([^%-]*)%-(.*)$")
if args[2] then return p.luacode(args) end
end
return errors('country', args, code1)
return (mw.title.getCurrentTitle().namespace == 0) and catnocountry or ''
else --3166-2 code
for alpha2,cdata in pairs(data) do
Line 160 ⟶ 191:
return p.luacode(args)
end
return errors('subdivision', args, code2, alpha2)
return (mw.title.getCurrentTitle().namespace == 0) and catnosubdivision or ''
end
end
if string.find(args[1] or '',"%-") then
args[1] = string.match(args[1] or '',"^([^%-]*)%-(.*)$")
return p.luacode(args)
end
return errors('country', args, code1)
return (mw.title.getCurrentTitle().namespace == 0) and catnocountry or ''
end
return errors('country', args, code1)
 
end
 
Line 198 ⟶ 229:
local code1 = p.luacode(args)
local code2 = ''
local catnocountry = (args.nocat and args.nocat == 'true') and ''
or cats.nocountry
if string.find(code1,"%-") then
Line 212 ⟶ 240:
or (data[code1]["displayname"] or data[code1]["name"])
else
return errors('country', args)
return (mw.title.getCurrentTitle().namespace == 0) and catnocountry or ''
end
else --3166-2 code
Line 219 ⟶ 247:
sdata = mw.loadData("Module:ISO 3166/data/"..code1)
else
return errors('country', args)
return (mw.title.getCurrentTitle().namespace == 0) and catnocountry or ''
end
if sdata[code2] then
Line 225 ⟶ 253:
or (sdata[code2]["displayname"] or sdata[code2]["name"])
else
return errors('country', args)
return (mw.title.getCurrentTitle().namespace == 0) and catnocountry or ''
end
end
Line 248 ⟶ 276:
local args = frame.args
local subdivisionqueried = false
local catnocountry = (args.nocat and args.nocat == 'true') and ''
or cats.nocountry
local catnosubdivision = (args.nocat and args.nocat == 'true') and ''
or cats.nosubdivision
local tracking = ''
local targs = {}
Line 271 ⟶ 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