Jump to content

Module:ISO 3166/data

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by SiBr4 (talk | contribs) at 22:33, 9 March 2016 (Check codes for conflicts with names). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

local p = {}

function p.list(frame)
--Returns a list of subpages and associated countries
local data = mw.loadData("Module:ISO 3166/data/National")
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 cell indicating the existence of a data page (see [[User:SiBr4/sandbox#Data subpage test]])
local data = mw.loadData("Module:ISO 3166/data/National")
local code = frame.args[1]
local sdata
if not data[code] then
  return "" --Unassigned or reserved 3166-1 code
else
  local sname = "Module:ISO 3166/data/"..code
  if not (frame.args[2]=="1" 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

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

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

local function testname(names,inames,dnames,page,name)
  if name then
  	if type(name)~="string" then
  	  dnames[#dnames+1] = "*Unexpected non-string value in [[/"..page.."]]"
  	else
      sname = strip(name)
      if not names[sname] then
        inames[sname] = name
      else
        dnames[#dnames+1] = "*Duplicate name: \""..name.."\" in [[/"..page.."]] "
                            ..(names[sname]==name and "(exact)" or "(non-exact)")
      end
    end
  end
  return names, inames, dnames
end
local function testnametable(names,inames,dnames,page,tab)
  if tab then
    if type(tab)~="table" then
      dnames[#dnames+1] = "*Unexpected non-table value in [[/"..page.."]]"
    else
      for _,name in pairs(tab) do
        names, inames, dnames = testname(names,inames,dnames,page,name)
      end
    end
  end
  return names, inames, dnames
end
local function testentry(names,dnames,page,code,edata)
  local inames = {}
  names, inames, dnames = testname(names,inames,dnames,page,edata.name)
  names, inames, dnames = testname(names,inames,dnames,page,edata.isoname)
  names, inames, dnames = testnametable(names,inames,dnames,page,edata.isonames)
  names, inames, dnames = testnametable(names,inames,dnames,page,edata.altnames)
  names, inames, dnames = testname(names,inames,dnames,page,code)
  if page=="National" then
    names, inames, dnames = testname(names,inames,dnames,page,edata.alpha3)
    names, inames, dnames = testname(names,inames,dnames,page,edata.numeric)
  end
  for k,v in pairs(inames) do names[k]=v end
  return names, dnames
end

local dnames = {}

--ISO 3166-1
local data = mw.loadData("Module:ISO 3166/data/National")
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
      names, dnames = testentry(names,dnames,code,scode,cdata)
    end
  end
end

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

end

return p