Module:ISO 3166/data

local p = {}

local data = mw.loadData("Module:ISO 3166/data/National")

function p.list(frame)
--Returns a list of subpages and associated countries
local codes = {}
for alpha2,cdata in pairs(data) do
  codes[#codes+1] = {alpha2,cdata.name}
end
table.sort(codes, function(t1,t2) return t1[1]<t2[1] end)

local out = {"* [[Module:ISO 3166/data/National|National]]"}
for _,cdata in ipairs(codes) do
  out[#out+1] = "* [[Module:ISO 3166/data/"..cdata[1].."|"..cdata[1].." ("..cdata[2]..")]]"
end
return table.concat(out,"\n")

end

function p.subpagetest(frame)
--Returns a table row indicating the existence of data pages (see [[User:SiBr4/sandbox#Data subpage test]])

local function cell(code,d)
  local sdata
  if not data[code] then
    return "" --Unassigned or reserved 3166-1 code
  else
    local sname = "Module:ISO 3166/data/"..code
    if not (d or mw.title.new(sname).exists) then
      return "title=\""..data[code].name.."\" style=\"background:#fee;\"|[["..sname.."|-]]" --Data subpage doesn't exist
    else
      sdata = mw.loadData(sname)
    end
  end
  for _,_ in pairs(sdata) do
    return "title=\""..data[code].name.."\" style=\"background:#efe;\"|n" --Non-empty 3166-2 entry
  end
  return "title=\""..data[code].name.."\" style=\"background:#eef;\"|e" --Empty 3166-2 entry
end

local letter = frame.args[1]
local out = "|-\n!"..letter.."*"
for i = 65, 90 do
  out = out.."\n|"..cell(letter..string.char(i),frame.args[2])
end
return out

end

function p.testall(frame)
--Search across all subpages for problems with names

local strip = require("Module:ISO 3166").strip

local function subpage(p)
  return "[[Module:ISO 3166/data/"..p.."|/"..p.."]]"
end
local function testname(names,inames,dnames,page,code,name)
  if name then
  	if type(name)~="string" then
  	  dnames[#dnames+1] = "*Unexpected non-string value in "..subpage(page).." ("..code..")"
  	else
      local sname = strip(name)
      if not names[sname] then
        inames[sname] = name
      else
        dnames[#dnames+1] = "*Duplicate name: \""..name.."\" in "..subpage(page)
                            ..(names[sname]==name and " (exact)" or " (non-exact)").." ("..code..")"
      end
    end
  end
  return names, inames, dnames
end
local function testnametable(names,inames,dnames,page,code,tab)
  if tab then
    if type(tab)~="table" then
      dnames[#dnames+1] = "*Unexpected non-table value in "..subpage(page).." ("..code..")"
    else
      for _,name in pairs(tab) do
        names, inames, dnames = testname(names,inames,dnames,page,code,name)
      end
    end
  end
  return names, inames, dnames
end
local fields = {name=1,isoname=1,isonames=1,displayname=1,isodisplayname=1,isodisplaynames=1,altnames=1,lang=1,defaultlang=1,alpha3=1,numeric=1,nocode=1}
local function testentry(names,dnames,page,code,edata)
  for k,_ in pairs(edata) do
    if not fields[k] then
      dnames[#dnames+1] = "*Unknown field \""..k.."\" in "..subpage(page).." ("..code..")"
    end
  end
  local inames = {}
  names, inames, dnames = testname(names,inames,dnames,page,code,edata.name)
  names, inames, dnames = testname(names,inames,dnames,page,code,edata.isoname)
  names, inames, dnames = testnametable(names,inames,dnames,page,code,edata.isonames)
  names, inames, dnames = testnametable(names,inames,dnames,page,code,edata.altnames)
  if not edata.nocode then
    names, inames, dnames = testname(names,inames,dnames,page,code,code)
  end
  if page=="National" then
    names, inames, dnames = testname(names,inames,dnames,page,code,edata.alpha3)
    names, inames, dnames = testname(names,inames,dnames,page,code,edata.numeric)
  end
  for k,v in pairs(inames) do names[k]=v end
  return names, dnames
end

local dnames = {}

--ISO 3166-1
local names = {}
for code,cdata in pairs(data) do
  names, dnames = testentry(names,dnames,"National",code,cdata)
end

--ISO 3166-2
for code,_ in pairs(data) do
  names = {}
  local spage = "Module:ISO 3166/data/"..code
  if mw.title.new(spage).exists then
    local sdata = mw.loadData(spage)
    for scode,cdata in pairs(sdata) do
      if type(cdata)=="table" then
        names, dnames = testentry(names,dnames,code,scode,cdata)
      end
    end
  end
end

if #dnames>0 then
  return table.concat(dnames,"\n")
else
  return "None"
end

end

return p

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.