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:14, 19 February 2016. 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 = {}
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

function testname(names,dnames,page,name)
  if name then
    if not names[name] then names[name] = true
    else dnames[#dnames+1] = "*"..page..": "..name
    end
  end
  return names, dnames
end
function testentry(names,dnames,page,edata)
  names, dnames = testname(names,dnames,page,edata.name)
  names, dnames = testname(names,dnames,page,edata.isoname)
  if edata.altnames then for _,name in ipairs(edata.altnames) do
    names, dnames = testname(names,dnames,page,name)
  end 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

return table.concat(dnames,"\n")

end

return p