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 20:30, 9 March 2016 (Catch names that are the same after stripping; disregard duplicates within the same entry). 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.finddupes(frame)
--Search for names that are used multiple times

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

local function testname(names,inames,dnames,page,name)
  if name then
  	--if type(name)=="table" then dnames[#dnames+1] = "*Error: "..page end
    sname = strip(name)
    if not names[sname] then inames[sname] = true
    else dnames[#dnames+1] = "*"..page..": "..name
    end
  end
  return names, inames, dnames
end
local function testentry(names,dnames,page,edata)
  local inames = {}
  names, inames, dnames = testname(names,inames,dnames,page,edata.name)
  names, inames, dnames = testname(names,inames,dnames,page,edata.isoname)
  if edata.altnames then for _,name in ipairs(edata.altnames) do
    names, inames, dnames = testname(names,inames,dnames,page,name)
  end end
  for k,_ in pairs(inames) do names[k]=true end
  return names, dnames
end

local dnames = {}

--ISO 3166-1
local data = mw.loadData("Module:ISO 3166/data/National")
local names = {}
for _,cdata in pairs(data) do
  names, dnames = testentry(names,dnames,"National",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 _,cdata in pairs(sdata) do
      names, dnames = testentry(names,dnames,code,cdata)
    end
  end
end

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

end

return p