local p = {}
local getArgs = require('Module:Arguments').getArgs
local data = mw.loadData('Module:Language/data/iso 15924')
function p.code(frame) -- to output part 1 code
frame.args.type = "code"
return p.main(frame)
end
function p.name(frame) -- to output name
frame.args.type = "name"
return p.main(frame)
end
function p.number(frame) -- to output name
frame.args.type = "number"
return p.main(frame)
end
function p.main(frame) -- main function (doesn't need to be called directly)
local args = getArgs(frame)
local accents = {["À"]="A",["Á"]="A",["Â"]="A",["Ã"]="A", -- accent list
["Ä"]="A",["Å"]="A",["Ç"]="C",["È"]="E",["É"]="E",
["Ê"]="E",["Ë"]="E",["Ì"]="I",["Í"]="I",["Î"]="I",
["Ï"]="I",["Ñ"]="N",["Ò"]="O",["Ó"]="O",["Ô"]="O",
["Õ"]="O",["Ö"]="O",["Ø"]="O",["Ù"]="U",["Ú"]="U",
["Û"]="U",["Ü"]="U",["Ý"]="Y"
}
args[1] = mw.ustring.gsub(args[1],"[À-Ý]",accents) -- Deaccent
args[1] = mw.ustring.gsub(args[1],"%[","") -- Delink
args[1] = mw.ustring.gsub(args[1],"%]","") -- Delink
args[1] = mw.ustring.gsub(args[1],"%{","") -- Remove {
args[1] = mw.ustring.gsub(args[1],"%}","") -- Remove }
for code,table in pairs(data) do
for _,value in pairs(table) do
if string.lower(args[1]) == string.lower(value) then
args[1] = code
end
end
if string.lower(args[1]) == string.lower(code)
or string.lower(args[1]) == table.num then
if args.type == "code" then
return code or ""
elseif args.type == "name" then
return table[1] or ""
elseif args.type == "number" then
return table.num or ""
end
end
end
end
return p