localp={}-- Loading the flag translations module --localtranslations=mw.loadData("Module:Flags/LocaleData")localmaster=mw.loadData("Module:Flags/MasterData")-- check if name is an original name in translation.fullname and-- return its value, otherwise return nilfunctioncheck_translation(name)locallinkfortranslation,commonsNameinpairs(translations.fullName)doifcommonsName==namethenlink=translationbreak--if found break out from the loopendendreturnlinkend-- Size of flag ---- Function to define the default size for the flag if neededfunctiondefaultSize()--todo: move exception to Module:Flags/MasterDatalocalsizeExceptions={"Nepal","Switzerland","the Vatican City",}localsize="20x22px"--initialize with default valueforsome,exceptionsinpairs(sizeExceptions)doifcommonsName==exceptionsthensize="20x17px"break--if found break out from loopendendreturnsizeend-- Assigning the parameter to a flag and a linkfunctionp.flag(territory)--always declare local variable, they are more efficient and dont pollute global namespacelocalcommonsNamelocalflagOf="Flag_of_"-- Converts "Flag of" in a variable in order to accept images that don't follow this name schemalocallink=""-- more efficient to accesslocalflag_code=territory.args[1]or""-- Searching in the master table only.-- 2 letter code searchif#flag_code==2then-- try to assign a value to commonsName and check for nil valuecommonsName=master.twoLetter[flag_code]--if check_translation return nil then it will execute the or part and assign commonsName to linkifcommonsNamethenlink=check_translation(commonsName)orcommonsName;endelseif#flag_code==3then-- 3 letter code searchcommonsName=master.threeLetter[flag_code]ifcommonsNamethenlink=check_translation(commonsName)orcommonsName;endend-- check if commonsName is still nilifcommonsName==nilthen-- check master.fullName tablecommonsName=master.fullName[flag_code]ifcommonsNamethenlink=check_translation(commonsName)orcommonsName;else-- Searching in FlagTranslationscommonsName=translations.fullName[flag_code]ifcommonsNamethenlink=flag_codeelse-- Fallback to Commons when the parameter doesn't have an entry in the tablescommonsName=flag_codelink=flag_codeendendend-- Variant check for historical flags --localvariant=territory.args[3]ifvariantandvariant~=""thencommonsName=master.variant[commonsName.."|"..variant]flagOf=""end-- Label check --variant=territory.args[2]ifvariantandvariant~="{{{2}}}"thencommonsName=master.variant[commonsName.."|"..variant]flagOf=""end-- Digesting Commons flag files not following the format "Flag of "-- These filenamess must be preceded by "File:" in the table values.ifcommonsName~=nilandstring.find(commonsName,"File:",1)==1thencommonsName=string.sub(commonsName,6)flagOf=""end-- Fallback for non-identified variant/label flags --ifcommonsName==nilthencommonsName="Flag of None"end-- Border for everybody except Nepal and Ohio-- todo: move exception to Module:Flags/MasterDatalocalborder="border|"ifcommonsName=="Nepal"orcommonsName=="Ohio"thenborder=""end-- Checking whether a size parameter has been introduced, otherwise set defaultifterritory.args[4]:find("px",-2)~=nilthensize=territory.args[4]elsesize=defaultSize(commonsName)end-- Customizing the linkopenBrackets="[["closeBrackets="]]"ifterritory.args[5]==""thenflagLink=""textLink=""openBrackets=""closeBrackets=""elseifterritory.args[5]~="{{{link}}}"thenflagLink=territory.args[5]textLink=territory.args[5].."|"elseflagLink=linktextLink=link.."|"end-- Text in addition to flagifterritory.args[6]==""thentext=" "..openBrackets..link..closeBracketselseifterritory.args[6]~="{{{text}}}"thentext=" "..openBrackets..textLink..territory.args[6]..closeBracketselsetext=""endreturn'[[File:'..flagOf..commonsName..'.svg|'..border..'link='..flagLink..'|'..size..']]'..textendreturnp