mout = require 'mout/object'
mout = require 'mout/object'
Implements iso 3166-1-alpha-2 lookup
class Iso31661a2
constructor: ->
Given an iso country code, returns an english country name
getCountry: (code) ->
Iso31661a2::countries[code]
Given an english country name, returns an iso code
getCode: (country) ->
ret = null
if country?
ret = Object.keys(Iso31661a2::countries)[idx] if mout.values(Iso31661a2::countries).indexOf(country) != -1
ret
Returns a list of all english country names
getCountries: ->
mout.values Iso31661a2::countries
Returns a list of all iso country codes
getCodes: ->
Object.keys(Iso31661a2::countries)
Get the internal list of countries and region codes
getData: ->
Iso31661a2::countries
the actual list data
Iso31661a2::countries =
AF: "Afghanistan"
AX: "Åland Islands"
AL: "Albania"
DZ: "Algeria"
AS: "American Samoa"
AD: "Andorra"
AO: "Angola"
AI: "Anguilla"
AQ: "Antarctica"
AG: "Antigua and Barbuda"
AR: "Argentina"
AM: "Armenia"
AW: "Aruba"
AU: "Australia"
AT: "Austria"
AZ: "Azerbaijan"
BS: "Bahamas"
BH: "Bahrain"
BD: "Bangladesh"
BB: "Barbados"
BY: "Belarus"
BE: "Belgium"
BZ: "Belize"
BJ: "Benin"
BM: "Bermuda"
BT: "Bhutan"
BO: "Bolivia, Plurinational State of"
BQ: "Bonaire, Sint Eustatius and Saba"
BA: "Bosnia and Herzegovina"
BW: "Botswana"
BV: "Bouvet Island"
BR: "Brazil"
IO: "British Indian Ocean Territory"
BN: "Brunei Darussalam"
BG: "Bulgaria"
BF: "Burkina Faso"
BI: "Burundi"
KH: "Cambodia"
CM: "Cameroon"
CA: "Canada"
CV: "Cape Verde"
KY: "Cayman Islands"
CF: "Central African Republic"
TD: "Chad"
CL: "Chile"
CN: "China"
CX: "Christmas Island"
CC: "Cocos (Keeling) Islands"
CO: "Colombia"
KM: "Comoros"
CG: "Congo"
CD: "Congo, the Democratic Republic of the"
CK: "Cook Islands"
CR: "Costa Rica"
CI: "Côte d'Ivoire"
HR: "Croatia"
CU: "Cuba"
CW: "Curaçao"
CY: "Cyprus"
CZ: "Czech Republic"
DK: "Denmark"
DJ: "Djibouti"
DM: "Dominica"
DO: "Dominican Republic"
EC: "Ecuador"
EG: "Egypt"
SV: "El Salvador"
GQ: "Equatorial Guinea"
ER: "Eritrea"
EE: "Estonia"
ET: "Ethiopia"
FK: "Falkland Islands (Malvinas)"
FO: "Faroe Islands"
FJ: "Fiji"
FI: "Finland"
FR: "France"
GF: "French Guiana"
PF: "French Polynesia"
TF: "French Southern Territories"
GA: "Gabon"
GM: "Gambia"
GE: "Georgia"
DE: "Germany"
GH: "Ghana"
GI: "Gibraltar"
GR: "Greece"
GL: "Greenland"
GD: "Grenada"
GP: "Guadeloupe"
GU: "Guam"
GT: "Guatemala"
GG: "Guernsey"
GN: "Guinea"
GW: "Guinea-Bissau"
GY: "Guyana"
HT: "Haiti"
HM: "Heard Island and McDonald Mcdonald Islands"
VA: "Holy See (Vatican City State)"
HN: "Honduras"
HK: "Hong Kong"
HU: "Hungary"
IS: "Iceland"
IN: "India"
ID: "Indonesia"
IR: "Iran, Islamic Republic of"
IQ: "Iraq"
IE: "Ireland"
IM: "Isle of Man"
IL: "Israel"
IT: "Italy"
JM: "Jamaica"
JP: "Japan"
JE: "Jersey"
JO: "Jordan"
KZ: "Kazakhstan"
KE: "Kenya"
KI: "Kiribati"
KP: "Korea, Democratic People's Republic of"
KR: "Korea, Republic of"
KW: "Kuwait"
KG: "Kyrgyzstan"
LA: "Lao People's Democratic Republic"
LV: "Latvia"
LB: "Lebanon"
LS: "Lesotho"
LR: "Liberia"
LY: "Libya"
LI: "Liechtenstein"
LT: "Lithuania"
LU: "Luxembourg"
MO: "Macao"
MK: "Macedonia, the Former Yugoslav Republic of"
MG: "Madagascar"
MW: "Malawi"
MY: "Malaysia"
MV: "Maldives"
ML: "Mali"
MT: "Malta"
MH: "Marshall Islands"
MQ: "Martinique"
MR: "Mauritania"
MU: "Mauritius"
YT: "Mayotte"
MX: "Mexico"
FM: "Micronesia, Federated States of"
MD: "Moldova, Republic of"
MC: "Monaco"
MN: "Mongolia"
ME: "Montenegro"
MS: "Montserrat"
MA: "Morocco"
MZ: "Mozambique"
MM: "Myanmar"
NA: "Namibia"
NR: "Nauru"
NP: "Nepal"
NL: "Netherlands"
NC: "New Caledonia"
NZ: "New Zealand"
NI: "Nicaragua"
NE: "Niger"
NG: "Nigeria"
NU: "Niue"
NF: "Norfolk Island"
MP: "Northern Mariana Islands"
NO: "Norway"
OM: "Oman"
PK: "Pakistan"
PW: "Palau"
PS: "Palestine, State of"
PA: "Panama"
PG: "Papua New Guinea"
PY: "Paraguay"
PE: "Peru"
PH: "Philippines"
PN: "Pitcairn"
PL: "Poland"
PT: "Portugal"
PR: "Puerto Rico"
QA: "Qatar"
RE: "Réunion"
RO: "Romania"
RU: "Russian Federation"
RW: "Rwanda"
BL: "Saint Barthélemy"
SH: "Saint Helena, Ascension and Tristan da Cunha"
KN: "Saint Kitts and Nevis"
LC: "Saint Lucia"
MF: "Saint Martin (French part)"
PM: "Saint Pierre and Miquelon"
VC: "Saint Vincent and the Grenadines"
WS: "Samoa"
SM: "San Marino"
ST: "Sao Tome and Principe"
SA: "Saudi Arabia"
SN: "Senegal"
RS: "Serbia"
SC: "Seychelles"
SL: "Sierra Leone"
SG: "Singapore"
SX: "Sint Maarten (Dutch part)"
SK: "Slovakia"
SI: "Slovenia"
SB: "Solomon Islands"
SO: "Somalia"
ZA: "South Africa"
GS: "South Georgia and the South Sandwich Islands"
SS: "South Sudan"
ES: "Spain"
LK: "Sri Lanka"
SD: "Sudan"
SR: "Suriname"
SJ: "Svalbard and Jan Mayen"
SZ: "Swaziland"
SE: "Sweden"
CH: "Switzerland"
SY: "Syrian Arab Republic"
TW: "Taiwan, Province of China"
TJ: "Tajikistan"
TZ: "Tanzania, United Republic of"
TH: "Thailand"
TL: "Timor-Leste"
TG: "Togo"
TK: "Tokelau"
TO: "Tonga"
TT: "Trinidad and Tobago"
TN: "Tunisia"
TR: "Turkey"
TM: "Turkmenistan"
TC: "Turks and Caicos Islands"
TV: "Tuvalu"
UG: "Uganda"
UA: "Ukraine"
AE: "United Arab Emirates"
GB: "United Kingdom"
US: "United States"
UM: "United States Minor Outlying Islands"
UY: "Uruguay"
UZ: "Uzbekistan"
VU: "Vanuatu"
VE: "Venezuela, Bolivarian Republic of"
VN: "Viet Nam"
VG: "Virgin Islands, British"
VI: "Virgin Islands, U.S."
WF: "Wallis and Futuna"
EH: "Western Sahara"
YE: "Yemen"
ZM: "Zambia"
ZW: "Zimbabwe"
singleton = null
returns a singleton
module.exports = ->
singleton ?= new Iso31661a2()