Module:Country extract
Appearance
![]() | This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
![]() | This Lua module is used on 413,000+ pages, or roughly 47% of all pages. To avoid major disruption and server load, any changes should be tested in the module's /sandbox or /testcases subpages, or in your own module sandbox. The tested changes can be added to this page in a single edit. Consider discussing changes on the talk page before implementing them. |
local p = {}
--
-- to enable us to replicate the current functioning of CountryAbbr and CountryAbbr2
-- We need to deal with
-- 1 alternative names ISO 3166 should do that
-- 2 {{<name>}}
-- 3 [ [<name>] ]
-- 4 [ [<name>|<junk>] ]
-- 5 [ [image:flag of <country>.[svg|gif|png|jpg]|\d+px] ]
--
function p.extractCountry(frame)
local string= mw.ustring.toNFC (frame.args[1])
local match1=nil;
match1 = mw.ustring.match(string, "Flag of ([^\.]*)")
if (match) then
return match1
end
-- () for Cocos (Keeling) Islands
-- ' For People's
-- . for U.S. etc.
match1 = mw.ustring.match(string, "(%u[%a\(\)\.' -]+)")
if (match == "Image") then
string = mw.ustring.gsub(string, match1, "")
match1 = mw.ustring.match(string, "[\|\[](%u[%a\(\)\.' %-]+)")
end
if (match == "20px") then
string = mw.ustring.gsub(string, match1, "")
match1 = mw.ustring.match(string, "\[(%u[%a\(\)\.' %-]+)")
end
if (match) then
return match1
end
return string
end
--[[
]]
function p.extractSubdivision(frame)
local string= mw.ustring.toNFC (frame.args[1])
local match1=nil;
-- Needed for {{flag|Greenland}},
match1 = mw.ustring.match(string, "Flag of ([^\.]*)")
if (match) then
return match1
end
-- . needed for Washington D.C.
-- ' for cote d'azur
-- leading ' for 'Aden
-- ‘ and trailing ' for Şan‘ā'
match1 = mw.ustring.match(string, "('?[%u][%a'‘ \.\,%-]+[%a\.'\d]+)")
if (match) then
return match1
end
return string
end
local countries = {
["Andorra"] = "AD",
["United Arab Emirates"] = "AE",
["UAE"] = "AE",
["Afghanistan"] = "AF",
["Antigua and Barbuda"] = "AG",
["Anguilla"] = "AI",
["Albania"] = "AL",
["Armenia"] = "AM",
["Angola"] = "AO",
["Antarctica"] = "AQ",
["Argentina"] = "AR",
["American Samoa"] = "AS",
["Austria"] = "AT",
["Australia"] = "AU",
["Aruba"] = "AW",
["Åland Islands"] = "AX",
["Aland Islands"] = "AX",
["Azerbaijan"] = "AZ",
["Bosnia and Herzegovina"] = "BA",
["Bosnia"] = "BA",
["Barbados"] = "BB",
["Bangladesh"] = "BD",
["Belgium"] = "BE",
["Burkina Faso"] = "BF",
["Bulgaria"] = "BG",
["Bahrain"] = "BH",
["Burundi"] = "BI",
["Benin"] = "BJ",
["Saint Barthélemy"] = "BL",
["Saint Barthelemy"] = "BL",
["St. Barthélemy"] = "BL",
["St. Barthelemy"] = "BL",
["St Barthélemy"] = "BL",
["St Barthelemy"] = "BL",
["Bermuda"] = "BM",
["Brunei"] = "BN",
["Brunei Darussalam"] = "BN",
["Bolivia"] = "BO",
["Bolivia, Plurinational State of"] = "BO",
["Bonaire, Sint Eustatius and Saba"] = "BQ",
["Brazil"] = "BR",
["Bahamas"] = "BS",
["Bhutan"] = "BT",
["Bouvet Island"] = "BV",
["Botswana"] = "BW",
["Belarus"] = "BY",
["Belize"] = "BZ",
["Canada"] = "CA",
["Cocos (Keeling) Islands"] = "CC",
["Cocos Islands"] = "CC",
["Keeling Islands"] = "CC",
["Congo, the Democratic Republic of the"] = "CD",
["Democratic Republic of the Congo"] = "CD",
["DR Congo"] = "CD",
["Congo-Kinshasa"] = "CD",
["DROC"] = "CD",
["DRC"] = "CD",
["Central African Republic"] = "CF",
["CAR"] = "CF",
["Congo"] = "CG",
["Republic of the Congo"] = "CG",
["Congo Republic"] = "CG",
["Congo-Brazzaville"] = "CG",
["West Congo"] = "CG",
["Switzerland"] = "CH",
["Côte d'Ivoire"] = "CI",
["Ivory Coast"] = "CI",
["Cook Islands"] = "CK",
["Chile"] = "CL",
["Cameroon"] = "CM",
["China"] = "CN",
["PRC"] = "CN",
["People's Republic of China"] = "CN",
["Colombia"] = "CO",
["Costa Rica"] = "CR",
["Cuba"] = "CU",
["Cape Verde"] = "CV",
["Curaçao"] = "CW",
["Curacao"] = "CW",
["Christmas Island"] = "CX",
["Cyprus"] = "CY",
["Czech Republic"] = "CZ",
["Germany"] = "DE",
["Djibouti"] = "DJ",
["Denmark"] = "DK",
["Dominica"] = "DM",
["Dominican Republic"] = "DO",
["Algeria"] = "DZ",
["Ecuador"] = "EC",
["Estonia"] = "EE",
["Egypt"] = "EG",
["Western Sahara"] = "EH",
["Eritrea"] = "ER",
["Spain"] = "ES",
["Ethiopia"] = "ET",
["Finland"] = "FI",
["Fiji"] = "FJ",
["Falkland Islands (Malvinas)"] = "FK",
["Falklands"] = "FK",
["Falkland Islands"] = "FK",
["Malvinas"] = "FK",
["Malvinas Islands"] = "FK",
["Micronesia, Federated States of"] = "FM",
["Micronesia"] = "FM",
["Faroe Islands"] = "FO",
["France"] = "FR",
["Gabon"] = "GA",
["United Kingdom"] = "GB",
["U. K."] = "GB",
["U.K."] = "GB",
["UK"] = "GB",
["Great Britain"] = "GB",
["Grenada"] = "GD",
["Georgia"] = "GE",
["French Guiana"] = "GF",
["Guernsey"] = "GG",
["Ghana"] = "GH",
["Gibraltar"] = "GI",
["Greenland"] = "GL",
["Gambia"] = "GM",
["Guinea"] = "GN",
["Guadeloupe"] = "GP",
["Equatorial Guinea"] = "GQ",
["Greece"] = "GR",
["South Georgia and the South Sandwich Islands"] = "GS",
["Guatemala"] = "GT",
["Guam"] = "GU",
["Guinea-Bissau"] = "GW",
["Guyana"] = "GY",
["Hong Kong"] = "HK",
["Heard Island and McDonald Islands"] = "HM",
["Honduras"] = "HN",
["Croatia"] = "HR",
["Haiti"] = "HT",
["Hungary"] = "HU",
["Indonesia"] = "ID",
["Ireland"] = "IE",
["Israel"] = "IL",
["Isle of Man"] = "IM",
["India"] = "IN",
["British Indian Ocean Territory"] = "IO",
["Iraq"] = "IQ",
["Iran, Islamic Republic of"] = "IR",
["Iran"] = "IR",
["Iceland"] = "IS",
["Italy"] = "IT",
["Jersey"] = "JE",
["Jamaica"] = "JM",
["Jordan"] = "JO",
["Japan"] = "JP",
["Kenya"] = "KE",
["Kyrgyzstan"] = "KG",
["Cambodia"] = "KH",
["Kiribati"] = "KI",
["Comoros"] = "KM",
["Saint Kitts and Nevis"] = "KN",
["St. Kitts and Nevis"] = "KN",
["St Kitts and Nevis"] = "KN",
["Korea, Democratic People's Republic of"] = "KP",
["Democratic People's Republic of Korea"] = "KP",
["North Korea"] = "KP",
["Korea, Republic of"] = "KR",
["Republic of Korea"] = "KR",
["South Korea"] = "KR",
["Kuwait"] = "KW",
["Cayman Islands"] = "KY",
["Kazakhstan"] = "KZ",
["Lao People's Democratic Republic"] = "LA",
["Laos"] = "LA",
["Lao"] = "LA",
["Lebanon"] = "LB",
["Saint Lucia"] = "LC",
["St. Lucia"] = "LC",
["St Lucia"] = "LC",
["Liechtenstein"] = "LI",
["Sri Lanka"] = "LK",
["Liberia"] = "LR",
["Lesotho"] = "LS",
["Lithuania"] = "LT",
["Luxembourg"] = "LU",
["Latvia"] = "LV",
["Libyan Arab Jamahiriya"] = "LY",
["Libya"] = "LY",
["Morocco"] = "MA",
["Monaco"] = "MC",
["Moldova, Republic of"] = "MD",
["Moldova"] = "MD",
["Montenegro"] = "ME",
["Saint Martin (French part)"] = "MF",
["Saint Martin (France)"] = "MF",
["Collectivity of Saint Martin"] = "MF",
["Collectivity of St. Martin"] = "MF",
["Collectivity of St Martin"] = "MF",
["Saint-Martin"] = "MF",
["Madagascar"] = "MG",
["Marshall Islands"] = "MH",
["Macedonia"] = "MK",
["Mali"] = "ML",
["Myanmar"] = "MM",
["Burma"] = "MM",
["Mongolia"] = "MN",
["Macau"] = "MO",
["Macao"] = "MO",
["Northern Mariana Islands"] = "MP",
["Martinique"] = "MQ",
["Mauritania"] = "MR",
["Montserrat"] = "MS",
["Malta"] = "MT",
["Mauritius"] = "MU",
["Maldives"] = "MV",
["Malawi"] = "MW",
["Mexico"] = "MX",
["Malaysia"] = "MY",
["Mozambique"] = "MZ",
["Namibia"] = "NA",
["New Caledonia"] = "NC",
["Niger"] = "NE",
["Norfolk Island"] = "NF",
["Nigeria"] = "NG",
["Nicaragua"] = "NI",
["Netherlands"] = "NL",
["Norway"] = "NO",
["Nepal"] = "NP",
["Nauru"] = "NR",
["Niue"] = "NU",
["New Zealand"] = "NZ",
["Aotearoa"] = "NZ",
["Oman"] = "OM",
["Panama"] = "PA",
["Peru"] = "PE",
["French Polynesia"] = "PF",
["Papua New Guinea"] = "PG",
["Philippines"] = "PH",
["Pakistan"] = "PK",
["Poland"] = "PL",
["Saint Pierre and Miquelon"] = "PM",
["St. Pierre and Miquelon"] = "PM",
["St Pierre and Miquelon"] = "PM",
["Pitcairn"] = "PN",
["Puerto Rico"] = "PR",
["State of Palestine"] = "PS",
["Palestine"] = "PS",
["Portugal"] = "PT",
["Palau"] = "PW",
["Paraguay"] = "PY",
["Qatar"] = "QA",
["Réunion"] = "RE",
["Reunion"] = "RE",
["Romania"] = "RO",
["Serbia"] = "RS",
["Russian Federation"] = "RU",
["Russia"] = "RU",
["Rwanda"] = "RW",
["Saudi Arabia"] = "SA",
["Solomon Islands"] = "SB",
["Seychelles"] = "SC",
["Sudan"] = "SD",
["Sweden"] = "SE",
["Singapore"] = "SG",
["Saint Helena, Ascension and Tristan da Cunha"] = "SH",
["Slovenia"] = "SI",
["Svalbard and Jan Mayen"] = "SJ",
["Slovakia"] = "SK",
["Sierra Leone"] = "SL",
["San Marino"] = "SM",
["Senegal"] = "SN",
["Somalia"] = "SO",
["Suriname"] = "SR",
["South Sudan"] = "SS",
["São Tomé and Príncipe"] = "ST",
["Sao Tome and Principe"] = "ST",
["El Salvador"] = "SV",
["Sint Maarten"] = "SX",
["Saint Martin (Dutch part)"] = "SX",
["Saint Martin (Netherlands)"] = "SX",
["Syrian Arab Republic"] = "SY",
["Syria"] = "SY",
["Swaziland"] = "SZ",
["Turks and Caicos Islands"] = "TC",
["Chad"] = "TD",
["French Southern Territories"] = "TF",
["Togo"] = "TG",
["Thailand"] = "TH",
["Tajikistan"] = "TJ",
["Tokelau"] = "TK",
["Timor-Leste"] = "TL",
["East Timor"] = "TL",
["Turkmenistan"] = "TM",
["Tunisia"] = "TN",
["Tonga"] = "TO",
["Turkey"] = "TR",
["Trinidad and Tobago"] = "TT",
["Tuvalu"] = "TV",
["Taiwan"] = "TW",
["Republic of China"] = "TW",
["Tanzania, United Republic of"] = "TZ",
["Tanzania"] = "TZ",
["Ukraine"] = "UA",
["Uganda"] = "UG",
["United States Minor Outlying Islands"] = "UM",
["United States"] = "US",
["U. S."] = "US",
["U.S."] = "US",
["US"] = "US",
["Uruguay"] = "UY",
["Uzbekistan"] = "UZ",
["Holy See (Vatican City State)"] = "VA",
["Holy See"] = "VA",
["Vatican City State"] = "VA",
["Vatican City"] = "VA",
["Saint Vincent and the Grenadines"] = "VC",
["St. Vincent and the Grenadines"] = "VC",
["St Vincent and the Grenadines"] = "VC",
["Venezuela, Bolivarian Republic of"] = "VE",
["Venezuela"] = "VE",
["Virgin Islands, British"] = "VG",
["British Virgin Islands"] = "VG",
["Virgin Islands, U. S."] = "VI",
["Virgin Islands, U.S."] = "VI",
["Virgin Islands, US"] = "VI",
["United States Virgin Islands"] = "VI",
["American Virgin Islands"] = "VI",
["U. S. Virgin Islands"] = "VI",
["U.S. Virgin Islands"] = "VI",
["US Virgin Islands"] = "VI",
["Vietnam"] = "VN",
["Viet Nam"] = "VN",
["Vanuatu"] = "VU",
["Wallis and Futuna"] = "WF",
["Samoa"] = "WS",
["Yemen"] = "YE",
["Mayotte"] = "YT",
["South Africa"] = "ZA",
["Zambia"] = "ZM",
["Zimbabwe"] = "ZW",
}
function p.main(frame)
local country = mw.ustring.toNFC(frame.args[1] or '')
local match1 = ''
if country and country ~= '' then
match1 = mw.ustring.match(country, "Flag of ([^\.]*)") or mw.ustring.match(country, "(%u[%a%(%)%.' %-]+)")
if (match1 == "Image") or (match1 == "File") then
country = mw.ustring.gsub(country, match1, "")
match1 = mw.ustring.match(country, "[%|%[](%u[%a%(%)%.' %-]+)")
end
if mw.ustring.match(match1, "^%d*x?%d+px$") then
country = mw.ustring.gsub(country, match1, "")
match1 = mw.ustring.match(country, "%[(%u[%a%(%)%.' %-]+)")
end
end
local code = countries[match1]
if not code then
if mw.title.new('Template:ISO 3166 code ' .. match1).exists then
code = frame:expandTemplate{ title = 'Template:ISO 3166 code ' .. match1 }
else
local ns = mw.title.getCurrentTitle().namespace
if ns == 0 then
return '[[Category:Wikipedia page with obscure country]]'
else
return '[[Category:Wikipedia page with obscure country|'.. frame:expandTemplate{ title = 'Namespace Greek' } ..']]'
end
end
end
local subdivision = mw.ustring.toNFC(frame.args[2] or '')
if not subdivision or subdivision == '' then return code end
local countrytables = {
["AD"] = true,
["AE"] = true,
["AF"] = true,
["AG"] = true,
["AL"] = true,
["AM"] = true,
["AO"] = true,
["AR"] = true,
["AT"] = true,
["AU"] = true,
["AZ"] = true,
["BA"] = true,
["BB"] = true,
["BD"] = true,
["BE"] = true,
["BF"] = true,
["BG"] = true,
["BH"] = true,
["BI"] = true,
["BJ"] = true,
["BN"] = true,
["BO"] = true,
["BQ"] = true,
["BR"] = true,
["BS"] = true,
["BT"] = true,
["BW"] = true,
["BY"] = true,
["BZ"] = true,
["CA"] = true,
["CD"] = true,
["CF"] = true,
["CG"] = true,
["CH"] = true,
["CI"] = true,
["CL"] = true,
["CM"] = true,
["CN"] = true,
["CO"] = true,
["CR"] = true,
["CU"] = true,
["CV"] = true,
["CY"] = true,
["CZ"] = true,
["DE"] = true,
["DJ"] = true,
["DK"] = true,
["DM"] = true,
["DO"] = true,
["DZ"] = true,
["EC"] = true,
["EE"] = true,
["EG"] = true,
["ER"] = true,
["ES"] = true,
["ET"] = true,
["FI"] = true,
["FJ"] = true,
["FM"] = true,
["FR"] = true,
["GA"] = true,
["GB"] = true,
["GD"] = true,
["GE"] = true,
["GH"] = true,
["GL"] = true,
["GM"] = true,
["GN"] = true,
["GQ"] = true,
["GR"] = true,
["GT"] = true,
["GW"] = true,
["GY"] = true,
["HN"] = true,
["HR"] = true,
["HT"] = true,
["HU"] = true,
["ID"] = true,
["IE"] = true,
["IL"] = true,
["IN"] = true,
["IQ"] = true,
["IR"] = true,
["IS"] = true,
["IT"] = true,
["JM"] = true,
["JO"] = true,
["JP"] = true,
["KE"] = true,
["KG"] = true,
["KH"] = true,
["KI"] = true,
["KM"] = true,
["KN"] = true,
["KP"] = true,
["KR"] = true,
["KW"] = true,
["KZ"] = true,
["LA"] = true,
["LB"] = true,
["LC"] = true,
["LI"] = true,
["LK"] = true,
["LR"] = true,
["LS"] = true,
["LT"] = true,
["LU"] = true,
["LV"] = true,
["LY"] = true,
["MA"] = true,
["MC"] = true,
["MD"] = true,
["ME"] = true,
["MG"] = true,
["MH"] = true,
["MK"] = true,
["ML"] = true,
["MM"] = true,
["MN"] = true,
["MR"] = true,
["MT"] = true,
["MU"] = true,
["MV"] = true,
["MW"] = true,
["MX"] = true,
["MY"] = true,
["MZ"] = true,
["NA"] = true,
["NE"] = true,
["NG"] = true,
["NI"] = true,
["NL"] = true,
["NO"] = true,
["NP"] = true,
["NR"] = true,
["NZ"] = true,
["OM"] = true,
["PA"] = true,
["PE"] = true,
["PG"] = true,
["PH"] = true,
["PK"] = true,
["PL"] = true,
["PS"] = true,
["PT"] = true,
["PW"] = true,
["PY"] = true,
["QA"] = true,
["RO"] = true,
["RS"] = true,
["RU"] = true,
["RW"] = true,
["SA"] = true,
["SB"] = true,
["SC"] = true,
["SD"] = true,
["SE"] = true,
["SG"] = true,
["SH"] = true,
["SI"] = true,
["SK"] = true,
["SL"] = true,
["SM"] = true,
["SN"] = true,
["SO"] = true,
["SR"] = true,
["SS"] = true,
["ST"] = true,
["SV"] = true,
["SY"] = true,
["SZ"] = true,
["TD"] = true,
["TG"] = true,
["TH"] = true,
["TJ"] = true,
["TL"] = true,
["TM"] = true,
["TN"] = true,
["TO"] = true,
["TR"] = true,
["TT"] = true,
["TV"] = true,
["TW"] = true,
["TZ"] = true,
["UA"] = true,
["UG"] = true,
["UM"] = true,
["US"] = true,
["UY"] = true,
["UZ"] = true,
["VC"] = true,
["VE"] = true,
["VN"] = true,
["VU"] = true,
["WF"] = true,
["WS"] = true,
["YE"] = true,
["ZA"] = true,
["ZM"] = true,
["ZW"] = true,
}
local match2 = mw.ustring.match(subdivision, "Flag of ([^\.]*)") or mw.ustring.match(subdivision, "([ǁ'‘ʻ]?%u[%aZ̧z̄'‘‘ %.%,%-]+[%a%.'%d]+)")
if (match2 == "Image") or (match2 == "File") then
subdivision = mw.ustring.gsub(subdivision, match2, "")
match2 = mw.ustring.match(subdivision, "[\|\[]([ǁ'‘ʻ]?%u[%aZ̧z̄'‘ʻ %.%,%-]+[%a%.'%d]+)")
end
if mw.ustring.match(match2, "^%d*x?%d+px$") then
subdivision = mw.ustring.gsub(subdivision, match2, "")
match2 = mw.ustring.match2(subdivision, "%[([ǁ'‘ʻ]?%u[%aZ̧z̄'‘ʻ %.%,%-]+[%a%.'%d]+)")
end
if countrytables[code] then
local tmp = mw.loadData('Module:Country extract/' .. code)
local code2 = tmp[match2] or tmp[mw.ustring.gsub(match2, " %(.*%)$", "")] or tmp[mw.ustring.gsub(match2, ",.*$", "")]
if code2 then return code2 end
local legacytemplate = 'Template:ISO 3166 code ' .. match1
if mw.title.new(legacytemplate).exists then
tmp = frame:expandTemplate{ title = legacytemplate, args = { mw.ustring.gsub(match2, " %(.*%)$", "") } } or frame:expandTemplate{ title = legacytemplate, args = { mw.ustring.gsub(match2, ",.*$", "") } } or frame:expandTemplate{ title = legacytemplate, args = { match2 } }
end
if tmp and tmp ~= '' then return frame.expandTemplate{ title = tmp.text } end
local ns = mw.title.getCurrentTitle().namespace
if ns == 0 then
return code .. '[[Category:Wikipedia page with obscure country or subdivision]]'
else
return code .. '[[Category:Wikipedia page with obscure country or subdivision|'.. frame:expandTemplate{ title = 'Namespace Greek' } ..']]'
end
end
return code
end
return p