Anda dapat membuat halaman dokumentasi untuk buat pada modul Scribunto ini.
Penyunting dapat melakukan uji coba pada halaman bak pasir (buat | cermin) dan kasus uji (buat) modul ini.
Subhalaman modul ini.
Penyunting dapat melakukan uji coba pada halaman bak pasir (buat | cermin) dan kasus uji (buat) modul ini.
Subhalaman modul ini.
-- to enable us to replicate the current functioning of Country extract, we need to deal with: -- 2 {{<name>}} DONE! -- 3 [[<name>]] DONE! -- 4 [[<name>|<junk>]] DONE! -- 5 [[image:flag of <country>.[svg|gif|png|jpg]|\d+px]] DONE! localp={} localgetArgs=require("Module:Arguments").getArgs localdata=mw.loadData("Module:ISO 3166/data/National") --[[----------F I N D N A M E----------]]-- -- Finds the name in the database localfunctionfindname(code,cdata,qry) localsqry=p.strip(qry) ifcdata["name"]andsqry==p.strip(cdata["name"]) orcdata["isoname"]andsqry==p.strip(cdata["isoname"]) ornotcdata["nocode"]andsqry==code orsqry==cdata["alpha3"]orsqry==cdata["numeric"] then returntrue end for_,tnameinpairs(cdata["isonames"]or{})do ifsqry==p.strip(tname)then returntrue end end for_,tnameinpairs(cdata["altnames"]or{})do ifsqry==p.strip(tname)then returntrue end end returnfalse end --[[----------I S O N A M E----------]]-- -- Find the ISO name of a country/region localfunctionisoname(data,code,lang) ifdata[code]["isonames"]then localname=data[code]["isodisplaynames"]anddata[code]["isodisplaynames"][lang] ordata[code]["isonames"][lang] ordata[code]["isodisplaynames"]anddata[code]["isodisplaynames"][data[code]["defaultlang"]ordata["defaultlang"]] ordata[code]["isonames"][data[code]["defaultlang"]ordata["defaultlang"]] ordata[code]["isodisplaynames"]anddata[code]["isodisplaynames"]["en"] ordata[code]["isonames"]["en"] ifnamethenreturnnameend for_,inameinpairs(data[code]["isonames"])doreturninameend returndata[code]["isodisplayname"]ordata[code]["isoname"] else returndata[code]["isodisplayname"]ordata[code]["isoname"] end end --[[----------S T R I P----------]]-- -- Removes junk from the input functionp.strip(text) localaccents={["À"]="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" } localremove={"NATION OF","COUNTRY OF","TERRITORY OF",-- text to be removed list "FLAG OF","FLAG","KINGDOM OF","STATE OF"," STATE ", "PROVINCE OF","PROVINCE","TERRITORY" } localpatterns={[".+:"]="",["|.+"]="",["%(.-%)"]="",-- patterns to follow (order may matter) ["%..*"]="",["^THE "]="",["%_"]=" ",["%-"]=" ", ["%d%d?%d?PX"]="", } text=mw.ustring.upper(text)-- Case insensitivity text=mw.ustring.gsub(text,"[À-Ý]",accents)-- Deaccent forpattern,valueinpairs(patterns)do-- Follow patterns text=mw.ustring.gsub(text,pattern,value) end for_,wordsinpairs(remove)do-- Remove unneeded words text=mw.ustring.gsub(text,words,"") end text=mw.ustring.gsub(text,"%W","")-- Remove non alpha-numeric returntext end --[[----------P . C A L L S T R I P ---------]]-- -- Calls P.strip but using Module:Arguments functionp.callstrip(frame) localargs=getArgs(frame) returnp.strip(args[1])or"" end --[[----------P . L U A C O D E---------]]-- -- Makes the ISO code of a country functionp.luacode(args) ifstring.find(args[1]or'',"%-")then args[1],args[2]=string.match(args[1]or'',"^([^%-]*)%-(.*)$") end ifargs[1]thenargs[1]=p.strip(args[1])end ifargs[2]thenargs[2]=p.strip(args[2])end ifargs["codetype"]=="3"then args["codetype"]="alpha3" end localeot=args.erroror"" localcatnocountry=(args.nocatandargs.nocat=='true')and'' or'[[Category:Wikipedia page with obscure country]]' localcatnosubdivision=(args.nocatandargs.nocat=='true')and'' or'[[Category:Wikipedia page with obscure subdivision]]' ifnotargs[1]then returncatnocountry,'<span style="font-size:100%" class="error">"No parameter for the country given"</span>' end ifnotargs[2]then--3166-1 code foralpha2,cdatainpairs(data)do iffindname(alpha2,cdata,args[1])then ifargs["codetype"]=="numeric"orargs["codetype"]=="alpha3"then returncdata[args["codetype"]] else returnalpha2 end end end returncatnocountry else--3166-2 code foralpha2,cdatainpairs(data)do iffindname(alpha2,cdata,args[1])then ifmw.ustring.match(alpha2,"GB")then-- For England, Wales etc. alpha2="GB" end localsdata=mw.loadData("Module:ISO 3166/data/"..alpha2) localempty=true forscode,scdatainpairs(sdata)do iftype(scdata)=="table"then empty=false iffindname(scode,scdata,args[2])then returnalpha2.."-"..scode end end end ifemptythen returncatnosubdivision else returncatnosubdivision end end end returncatnocountry end end --[[----------P . C O D E---------]]-- -- Calls P.Luacode but using Module:Arguments functionp.code(frame) returnp.luacode(getArgs(frame))or"" end --[[----------P . N U M E R I C---------]]-- -- Calls P.Luacode but using Module:Arguments and setting it to output a numeric value functionp.numeric(frame) localargs=getArgs(frame) args["codetype"]="numeric" returnp.luacode(args)or"" end --[[----------P . L U A N A M E---------]]-- -- Makes the ISO/common name of a country functionp.luaname(args) localcode1=p.luacode(args) localcode2='' ifstring.find(code1,"%-")then code1,code2=string.match(code1,"^([^%-]*)%-(.*)$") end ifstring.find(code1,"^%u%u$")then ifcode2==""then--3166-1 alpha-2 code ifdata[code1]then return(args.isonameorargs.lang)andisoname(data,code1,args.lang) or(data[code1]["displayname"]ordata[code1]["name"]) else return'[[Category:Wikipedia page with obscure country]]' end else--3166-2 code localsdata ifdata[code1]then sdata=mw.loadData("Module:ISO 3166/data/"..code1) else return'[[Category:Wikipedia page with obscure country]]' end ifsdata[code2]then return(args.isonameorargs.lang)andisoname(sdata,code2,args.lang) or(sdata[code2]["displayname"]orsdata[code2]["name"]) else return'[[Category:Wikipedia page with obscure country]]' end end end end --[[----------P . N A M E---------]]-- -- Calls P.Luaname but using Module:Arguments functionp.name(frame) returnp.luaname(getArgs(frame))or"" end --[[----------P . G E O C O O R D I N S E R T---------]]-- -- Wrapper for Module:Coordinates.coordinsert functionp.geocoordinsert(frame) -- {{#invoke:ISO 3166|geocoordinsert|{{coord|...}} -- |country=..|subdivision1=...|subdivision2=... -- |type=...|scale=...|dim=...|source=...|globe=... -- }} localargs=frame.args localsubdivisionqueried=false localcatnocountry=(args.nocatandargs.nocat=='true')and'' or'[[Category:Wikipedia page with obscure country]]' localcatnosubdivision=(args.nocatandargs.nocat=='true')and'' or'[[Category:Wikipedia page with obscure subdivision]]'or'' localtracking='' localtargs={} targs[1]=args[1]or'' fori,vinpairs(args)do ifi=='country'andnotmw.ustring.find(targs[1],'region:')then localcountry=v localk,region=1,'' -- look for a valid subdivision whileregion==''andk<3do localsubdivision=args['subdivision'..k]or'' ifsubdivision~=''then region=p.luacode({country,subdivision,nocat='true'}) subdivisionqueried=true end k=k+1 end -- subdivision lookup failed or never attempted, try country only ifregion==''then region=p.luacode({country,nocat='true'}) ifregion==''then tracking=tracking..catnocountry elseifsubdivisionqueried==truethen tracking=tracking..catnosubdivision end end -- something worked, add it to the targs ifregion~=''then targs[#targs+1]='region:'..region end elseifi=='type'ori=='scale'ori=='dim' ori=='source'ori=='globe'then targs[#targs+1]=i..':'..v end end -- call Module:Coordinates.coordinsert if there is something to insert if#targs>1then localcoordinsert=require('Module:Coordinates').coordinsert returncoordinsert({args=targs})..tracking end -- otherwise, just return the coordinates returntargs[1]..tracking end returnp