Mô đun:Flagg

local p = {}
function p.main(frame)
--Get input arguments
local args = require('Mô đun:Arguments').getArgs(frame,{valueFunc =
function(key,value)
if value then
value = mw.text.trim(value)
if key=="image" or value~="" then
return value
end
end
return nil
end
})
--Call main function
return p.luaMain(frame,args)
end
function p.luaMain(frame,args)
function emp2nil(x)
if x=="" then return nil else return x end
end
function space2emp(x)
if string.find(x,"^%s*$") then return "" else return x end
end
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(args1 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 = args2 or ""
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("Mô đun:Flagg/Altvar data").alttable(age)
avar = string.gsub(string.lower(avar or "")," \-","")
avar = aaliasavar or avar
if not amapavar then error("Unknown avar") end
local apar = {altvar=amapavar.altvar;mw=amapavar.mw;age=amapavar.age;variant=args"variant" or args3}
data = require("Mô đun:CountryData").gettable(frame,country,apar)
asuf = amapavar.altlink
alink = data"link alias-"..amapavar.altvar or (clink or data"shortname alias" or data.alias or country).." "..asuf
else
data = require("Mô đun:CountryData").gettable(frame,country,{variant=args"variant" or args3})
avar = ""
amap = {""={altvar=""}}
end
--Name and link parameters
clink = clink or data.alias or country
local pref = args"pref"
local suff = args"suff" or asuf
if not pref and not suff then --Default prefix
pref = "Flag of"
end
local yn_map = {""=0; "0"=0; "no"=0; "n"=0; "1"=1; "yes"=1; "y"=1}
local fthe = (args"pthe" and yn_mapargs"pthe"~=0) or (args"the" and yn_mapargs"the"~=0)
local nthe = (args"nthe" and yn_mapargs"nthe"~=0) or (args"the" and yn_mapargs"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 space2emp((pref or "").." ")..fthe..clink..space2emp(" "..(suff or ""))
local fsec = args"psection" or args"section"
local csec = args"csection" or args"section"
fsec = fsec and "#"..fsec or ""
csec = csec and "#"..csec or ""
local name = args"name"
if string.find(me,"e") then
local cname = data"name alias-"..amapavar.altvar or data"shortname alias" or data.alias or country
if mn == "f" then
name = name or space2emp((pref or "").." ")..nthe..cname..space2emp(" "..(suff or ""))
else
name = name or cname
end
else
if mn == "f" then
name = name or space2emp((pref or "").." ")..nthe..country..space2emp(" "..(suff or ""))
else
name = name or country
end
end
--Image parameters
local pimage = args"image"
local placeholder = "Flag placeholder.svg"
local variant = args"variant" or args3 or ""
local image_map = {""=placeholder; "none"=placeholder; "blank"=placeholder}
if pimage then --Remove namespace
pimage = string.gsub(pimage,"^FfIiLlEe:(.*)$","%1")
pimage = string.gsub(pimage,"^IiMmAaGgEe:(.*)$","%1")
end
local iname = image_mappimage or pimage
local size = args"size" or args"sz"
local size_map = {xs="12x8px"; s="17x11px"; m="23x15px"; l="32x21px"; xl="46x30px"}
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 size=size.."px" --EIS size without "px" suffix
else size = size_mapsize or nil
end
local border = frame:getParent().args"border" or frame.args"border"
if iname then
size = size or "23x15px"
if yn_mapborder==0 then border = "" else border = "|border" end
else
iname = data"flag alias-"..amapavar.altvar.."-"..variant or data"flag alias-"..variant or data"flag alias-"..amapavar.altvar or data"flag alias" or placeholder
size = size or emp2nil(data.size) or "23x15px"
if border then
if yn_mapborder==0 then border = "" else border = "|border" end
else
local autoborder = data"border-"..variant or data"border-"..amapavar.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" then --prefix/suffix link
text = ""..name..""
elseif mn=="b" then --both prefix/suffix and normal country link
if pref and suff then
text = ""..pref.." "..nthe..""..name.." "..suff..""
elseif pref then
text = ""..pref.." "..nthe..""..name..""
elseif suff then
text = nthe..""..name.." "..suff..""
else
text = nthe..""..name..""
end
elseif mn=="d" then --data template
--check if redirect
if require('Mô đun:Redirect').luaIsRedirect("Bản mẫu:Country data "..country) then
text = ""..mw.title.new("Bản mẫu:Country data "..country):fullUrl("redirect=no").." "..name..""
else
text = ""..name..""
end
elseif mn=="u" then --unlinked
text = name
else --country link (default)
text = ""..name..""
end
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..csec
elseif mi=="p" or mi=="f" then --prefix/suffix link
ilink = "|link="..flink..fsec
elseif mi=="d" then --data template
--check if redirect
if require('Mô đun:Redirect').luaIsRedirect("Bản mẫu:Country data "..country) then
ilink = "|link="..mw.title.new("Bản mẫu:Country data "..country):fullUrl("redirect=no")
else
ilink = "|link=Bản mẫu:Country data "..country
end
else --unlinked (default)
ilink = "|link="
end
end
local image = "alt="..am..""
--Combine image and name with separator
local align = args"align" or args"al"
local nalign = args"nalign" or args"nal"
local align_map = {left="left", l="left", center="center", centre="center", c="center", middle="center", m="center", right="right", r="right"}
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" then --no separator
out = text..""..image..""
elseif ms=="n" then --non-breaking space
out = text.." "..image..""
elseif ms=="l" then --line break
out = text..""..image..""
elseif ms=="t" then --table cell
out = "style=\"text-align:"..(align_mapnalign or "left").."\"|"..text.."
else --fixed-width span box (default)
local width = args"width" or args"w" or require("Mô đun: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" then --no separator
out = ""..image..""..text
elseif ms=="n" then --non-breaking space
out = ""..image.." "..text
elseif ms=="l" then --line break
out = ""..image..""..text
elseif ms=="t" then --table cell
out = "style=\"text-align:"..(align_mapalign or "center")..";\"|"..image.."
else --fixed-width span box (default)
local width = nopx(args"width" or args"w") or require("Mô đun:Flaglist").luawidth(size)
out = ""..image..""..text
end
end
if string.find(me,"w") then --avoid wrapping
out = ""..out..""
end
--Tracking categories
local cat = ""
if pimage and not image_mappimage and country~="" and data"flag alias" and not args.demo then
cat = "Thể loại:Pages using Flagg with specified image instead of data template image"
end
return out..cat
end
return p