Module:Flagg Explained

local titleSelf = mw.title.new(... or mw.getCurrentFrame:getTitle)local titleCountryData = mw.title.newif titleSelf.isSubpage then local sandbox = titleSelf.subpageText:match^sandbox if sandbox then titleCountryData = titleCountryData:subPageTitle(sandbox) endendlocal CountryData = require(tostring(titleCountryData))local p =

function p.main(frame)

--Get input arguments local args = require('Module:Arguments').getArgs(frame,)

--Call main function return p.luaMain(frame,args)

end

function p.luaMain(frame,args)

local function emp2nil(x) if x

"" then return nil else return x end end local function space2emp(x) if string.find(x,"^%s*$") then return "" else return x end end local function nopx(x) if x~=nil and (string.find(x,"^%d+$") or string.find(x,"^%d+px$")) then return string.gsub(x,"^(.*)px","%1") else return nil end end

--Country & mode parameters local mode = string.lower(args[1] or "usc") local mi = string.sub(mode,1,1) local ms = string.sub(mode,2,2) local mn = string.sub(mode,3,3) local me = string.sub(mode,4,-1)

local country = args[2] or "" local countryDataCountry = country if string.find(me, "i") then local titleIocCountryData = mw.title.new local IocCountryData = require(tostring(titleIocCountryData)) local iocCountryAlias = IocCountryData.countryAliases[country] or country countryDataCountry = IocCountryData.countries[iocCountryAlias]["countrydata_name"] or IocCountryData.countries[iocCountryAlias]["name"] end local avar = args["avar"] or args["altvar"] local clink = args["clink"] or args["link"]

--Get country data & altvar data local data, alink, amap, asuf if avar then local age = args["age"] or "" local aalias amap, aalias = require("Module:Flagg/Altvar data").alttable(age) avar = string.gsub(string.lower(avar or ""),"[-]","") avar = aalias[avar] or avar if not amap[avar] then error("Unknown avar") end local apar = data = CountryData.getcachedtable(frame, countryDataCountry, apar) asuf = amap[avar].altlink alink = data["link alias-"..amap[avar].altvar] or (clink or data["shortname alias"] or data.alias or country).." "..asuf else data = (args["nodata"] and) or CountryData.getcachedtable(frame, countryDataCountry,) avar = "" amap = end

--Name and link parameters clink = clink or data.alias or country

local pref = args["pref"] local suff = args["suff"] or asuf local pref2 = args["pref2"] local suff2 = args["suff2"] if not pref and not suff then --Default prefix pref = "Flag of" end local yn_map = local fthe = (args["pthe"] and yn_map[args["pthe"]]~=0) or (args["the"] and yn_map[args["the"]]~=0) local nthe = (args["nthe"] and yn_map[args["nthe"]]~=0) or (args["the"] and yn_map[args["the"]]~=0) fthe = fthe and (pref and "t" or "T").."he " or "" nthe = nthe and (pref and "t" or "T").."he " or "" local flink = args["plink"] or args["flink"] or alink or clink

"" and "" or space2emp((pref or "").." ")..fthe..clink..space2emp(" "..(suff or "")) local flink2 if args["plink2"] or args["flink2"] or pref2 or suff2 then flink2 = args["plink2"] or args["flink2"] or clink

"" and "" or space2emp((pref2 or "").." ")..fthe..clink..space2emp(" "..(suff2 or "")) else flink2 = flink end local fsec = args["psection"] or args["section"] local fsec2 = args["psection2"] or args["section"] local csec = args["csection"] or args["section"] fsec = fsec and "#"..fsec or "" fsec2 = fsec2 and "#"..fsec2 or "" csec = csec and "#"..csec or ""

if string.find(me,"f") then if mw.title.new(flink).exists

false then if flink2 ~= flink and mw.title.new (flink2).exists

true then flink = flink2 fsec = fsec2 else flink = clink end end end

local name = args["name"] if not name then local cname = string.find(me,"e") and (data["name alias-"..amap[avar].altvar] or data["shortname alias"] or data.alias) or country if mn

"f" then name = cname

"" and "" or space2emp((pref or "").." ")..nthe..cname..space2emp(" "..(suff or "")) else name = cname end end

--Image parameters local pimage = args["image"] local placeholder = "Flag placeholder.svg" local variant = args["variant"] or args[3] or "" local image_map = if pimage then --Remove namespace pimage = string.gsub(pimage,"^[Ff][Ii][Ll][Ee]:","") pimage = string.gsub(pimage,"^[Ii][Mm][Aa][Gg][Ee]:","") end local iname = image_map[pimage] or pimage

local size = args["size"] or args["sz"] local size_map = if size

nil or string.find(size,"^%d*x?%d+px$") then --valid EIS size (..px, x..px or ..x..px) or unset elseif string.find(size,"^%d*x?%d+$") then --EIS size without "px" suffix size=size.."px" else --size from map, or invalid value size = size_map[size] or nil end local border = args["border"]

if iname then size = size or "23x15px" if yn_map[border]

0 then border = "" else border = "|border" end else iname = data["flag alias-"..amap[avar].altvar.."-"..variant] or data["flag alias-"..variant] or data["flag alias-"..amap[avar].altvar] or data["flag alias"] or placeholder size = size or emp2nil(data.size) or "23x15px" if border then if yn_map[border]

0 then border = "" else border = "|border" end else local autoborder = data["border-"..variant] or data["border-"..amap[avar].altvar] or data.border if autoborder and autoborder~="border" then border = "" else border = "|border" end end end

local am = "" if args["alt"] or string.find(me,"a") then am = args["alt"] or args["name"] or country am = am.."|"..am end --Build display name local text = args["text"] if not text then if mn

"x" then --no text text = "" elseif mn

"p" or mn

"f" or mn

"*" then --prefix/suffix link text = flink

"" and name or ""..name.."" -- By the principle of least surprise, there should be some -- indication that the link Country does not -- go to Country. if mn

"*" and clink ~= flink then text = text:sub(1, -3) .. "\226\128\175*]]" end elseif mn

"l" then --display link target text = flink

"" and name or ""..(args["name"] or flink).."" elseif mn

"b" then --both prefix/suffix and normal country link local preflink = pref and (flink

"" and pref.." " or ""..pref.." ") or "" local sufflink = suff and (flink

"" and " "..suff or " "..suff.."") or "" local namelink = (name

"" and "" or nthe)..(clink

"" and name or ""..name.."") text = preflink..namelink..sufflink elseif mn

"d" then --data template local title = mw.title.new("Template:Country data "..country) --check if redirect if title.isRedirect then text = "

["..title:fullUrl("redirect=no").." "..name.."]" else text = ""..name.."" end elseif mn

"u" then --unlinked text = name elseif mn

"a" then --abbr text = name

country and (clink

country and country or ""..country.."") or (""..country.."") else --country link (default) text = clink

"" and name or ""..name.."" end if string.find(me,"p") then text = "("..text..")" end end if type(text)

'function' then text = text(data) end

--Define separator local separator = " " --non-breaking space (n) if ms

"x" then --no separator separator = "" elseif ms

"l" then --line break separator = "
" end --Add preftext, if used local preftext = args["preftext"] if (preftext or "") ~= "" then text = preftext..separator..text end --Build image local ilink = args["ilink"] if not ilink then if mi

"x" or (iname

placeholder and pimage~=placeholder) then --no image/invisible image iname = placeholder border = "" ilink = "|link=" am = "" elseif mi

"i" then --image page link ilink = "" elseif mi

"c" then --country link ilink = "|link="..clink..(clink

"" and "" or csec) elseif mi

"p" or mi

"f" then --prefix/suffix link ilink = "|link="..flink..(flink

"" and "" or fsec) elseif mi

"d" then --data template local title = mw.title.new("Template:Country data "..country) --check if redirect if title.isRedirect then ilink = "|link="..title:fullUrl("redirect=no") else ilink = "|link="..title.fullText end else --unlinked (default) ilink = "|link=" end end if am

"" and string.find(me,"l") then am = mw.ustring.sub(ilink,7,-1) end local image = ""

if iname

placeholder then if require('Module:yesno')(args["noredlink"])

false or args["noredlink"]

"notext" then if country ~= and data.alias

nil then iname = image = "" if args["noredlink"]

"notext" then text = end end end if (args["missingcategory"] or ) ~= then image = image..args["missingcategory"] end if string.find(me,"b") then text = end end

--Combine image and name with separator local align_map = local align = align_map[args["align"] or args["al"]] local nalign = align_map[args["nalign"] or args["nal"]] local out if string.find(me,"r") then --image right of name if (ms

"x" and mi

"x") or (string.find(me,"o") and iname

placeholder and pimage~=placeholder) then --name only out = text elseif ms

"x" or ms

"n" or ms

"l" then --no separator, non-breaking space, or line break out = text.."

"..separator..image.."" elseif ms

"t" then --table cell out = "style=\"text-align:"..(nalign or "left").."\"|"..text.."||style=\"text-align:"..(align or "center").."\"|

"..image.."" else --fixed-width span box (default) local width = args["width"] or args["w"] or require("Module:Flaglist").luawidth(size) out = text.." "..image.."" end else --image left of name if (ms

"x" and mi

"x") or (string.find(me,"o") and iname

placeholder and pimage~=placeholder) then --name only out = text elseif ms

"x" or ms

"n" or ms

"l" then --no separator, non-breaking space, or line break out = "

"..image..separator..""..text elseif ms

"t" then --table cell out = "style=\"text-align:"..(align or "center")..";\"|

"..image.."||style=\"text-align:"..(nalign or "left").."\"|"..text else --fixed-width span box (default) local width = nopx(args["width"] or args["w"]) or require("Module:Flaglist").luawidth(size) out = ""..image.." "..text end end if string.find(me,"w") then --avoid wrapping out = ""..out.."" end -- align in table if me:find("t") then out = 'style="text-align:'..(align or 'left')..'"|'..out end

--Tracking categories local cat = "" if pimage and not image_map[pimage] and country~="" and data["flag alias"] and not args.demo then cat = "" end

return out..cat

end

p[''] = p.main

return p