1/*
2 * Copyright (C) 2010 Google Inc.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.i18n.addressinput;
18
19import org.json.JSONException;
20import org.json.JSONObject;
21
22import java.util.HashMap;
23import java.util.Map;
24
25/**
26 * Initial data in JSON format for regions. This has some formatting information for some countries,
27 * and a list of all the regions that the widget can support. Data has been sorted below for ease of
28 * editing.
29 */
30class RegionDataConstants {
31
32    private static final Map<String, String> COUNTRY_FORMAT_MAP =
33            new HashMap<String, String>();
34
35    private enum RegionDataEnum {
36
37        AC(new String[]{
38            "name", "ASCENSION ISLAND",
39        }),
40        AD(new String[]{
41                "name", "ANDORRA",
42                "lang", "ca",
43                "languages", "ca",
44                "fmt", "%N%n%O%n%A%n%Z %C",
45                "require", "A",
46        }),
47        AE(new String[]{
48                "name", "UNITED ARAB EMIRATES",
49                "fmt", "%N%n%O%n%A%n%C",
50                "require", "AC",
51        }),
52        AF(new String[]{
53                "name", "AFGHANISTAN",
54        }),
55        AG(new String[]{
56                "name", "ANTIGUA AND BARBUDA",
57                "require", "A",
58        }),
59        AI(new String[]{
60                "name", "ANGUILLA",
61        }),
62        AL(new String[]{
63                "name", "ALBANIA",
64        }),
65        AM(new String[]{
66                "name", "ARMENIA",
67                "lang", "hy",
68                "languages", "hy",
69                "fmt", "%N%n%O%n%A%n%Z%n%C%n%S",
70                "lfmt", "%N%n%O%n%A%n%Z%n%C%n%S",
71        }),
72        AN(new String[]{
73                "name", "NETHERLANDS ANTILLES",
74        }),
75        AO(new String[]{
76                "name", "ANGOLA",
77        }),
78        AQ(new String[]{
79                "name", "ANTARCTICA",
80        }),
81        AR(new String[]{
82                "name", "ARGENTINA",
83                "lang", "es",
84                "languages", "es",
85                "fmt", "%N%n%O%n%A%n%Z %C%n%S",
86                "upper", "ACZ",
87                "state_name_type", "state",
88        }),
89        AS(new String[]{
90                "name", "AMERICAN SAMOA",
91                "fmt", "%N%n%O%n%A%n%C %S %Z",
92                "require", "ACSZ",
93                "upper", "ACNOS",
94                "zip_name_type", "zip",
95                "state_name_type", "state",
96        }),
97        AT(new String[]{
98                "name", "AUSTRIA",
99                "fmt", "%O%n%N%n%A%n%Z %C",
100                "require", "ACZ",
101        }),
102        AU(new String[]{
103                "name", "AUSTRALIA",
104                "lang", "en",
105                "languages", "en",
106                "fmt", "%O%n%N%n%A%n%C %S %Z",
107                "require", "ACSZ",
108                "upper", "CS",
109                "state_name_type", "state",
110        }),
111        AW(new String[]{
112                "name", "ARUBA",
113        }),
114        AX(new String[]{
115                "name", "FINLAND",
116                "fmt", "%O%n%N%n%A%nAX-%Z %C%n\u00C5LAND",
117                "require", "ACZ",
118                "postprefix", "AX-",
119        }),
120        AZ(new String[]{
121                "name", "AZERBAIJAN",
122                "fmt", "%N%n%O%n%A%nAZ %Z %C",
123                "postprefix", "AZ ",
124        }),
125        BA(new String[]{
126                "name", "BOSNIA AND HERZEGOVINA",
127                "fmt", "%N%n%O%n%A%n%Z %C",
128        }),
129        BB(new String[]{
130                "name", "BARBADOS",
131                "state_name_type", "parish",
132        }),
133        BD(new String[]{
134                "name", "BANGLADESH",
135                "fmt", "%N%n%O%n%A%n%C - %Z",
136        }),
137        BE(new String[]{
138                "name", "BELGIUM",
139                "fmt", "%O%n%N%n%A%n%Z %C",
140                "require", "ACZ",
141        }),
142        BF(new String[]{
143                "name", "BURKINA FASO",
144                "fmt", "%N%n%O%n%A%n%C %X",
145        }),
146        BG(new String[]{
147                "name", "BULGARIA (REP.)",
148                "fmt", "%N%n%O%n%A%n%Z %C",
149        }),
150        BH(new String[]{
151                "name", "BAHRAIN",
152                "fmt", "%N%n%O%n%A%n%C %Z",
153        }),
154        BI(new String[]{
155                "name", "BURUNDI",
156        }),
157        BJ(new String[]{
158                "name", "BENIN",
159                "upper", "AC",
160        }),
161        BL(new String[]{
162                "name", "SAINT BARTHELEMY",
163                "fmt", "%O%n%N%n%A%n%Z %C %X",
164                "upper", "ACX",
165                "require", "ACZ",
166        }),
167        BM(new String[]{
168                "name", "BERMUDA",
169                "fmt", "%N%n%O%n%A%n%C %Z",
170        }),
171        BN(new String[]{
172                "name", "BRUNEI DARUSSALAM",
173                "fmt", "%N%n%O%n%A%n%C %Z",
174        }),
175        BO(new String[]{
176                "name", "BOLIVIA",
177                "upper", "AC",
178        }),
179        BR(new String[]{
180                "name", "BRAZIL",
181                "lang", "pt",
182                "languages", "pt",
183                "fmt", "%O%n%N%n%A%n%C-%S%n%Z",
184                "require", "ASCZ",
185                "upper", "CS",
186                "state_name_type", "state",
187        }),
188        BS(new String[]{
189                "name", "BAHAMAS",
190                "lang", "en",
191                "languages", "en",
192                "fmt", "%N%n%O%n%A%n%C, %S",
193                "state_name_type", "island",
194        }),
195        BT(new String[]{
196                "name", "BHUTAN",
197        }),
198        BV(new String[]{
199                "name", "BOUVET ISLAND",
200        }),
201        BW(new String[]{
202                "name", "BOTSWANA",
203        }),
204        BY(new String[]{
205                "name", "BELARUS",
206                "fmt", "%S%n%Z %C %X%n%A%n%O%n%N",
207        }),
208        BZ(new String[]{
209                "name", "BELIZE",
210        }),
211        CA(new String[]{
212                "name", "CANADA",
213                "lang", "en",
214                "languages", "en~fr",
215                "fmt", "%N%n%O%n%A%n%C %S %Z",
216                "require", "ACSZ",
217                "upper", "ACNOSZ",
218        }),
219        CC(new String[]{
220                "name", "COCOS (KEELING) ISLANDS",
221                "fmt", "%O%n%N%n%A%n%C %S %Z",
222                "upper", "CS",
223        }),
224        CD(new String[]{
225                "name", "CONGO (DEM. REP.)",
226                "fmt", "%N%n%O%n%A%n%C %X",
227        }),
228        CF(new String[]{
229                "name", "CENTRAL AFRICAN REPUBLIC",
230        }),
231        CG(new String[]{
232                "name", "CONGO (REP.)",
233        }),
234        CH(new String[]{
235                "name", "SWITZERLAND",
236                "lang", "de",
237                "languages", "de~fr~it",
238                "fmt", "%O%n%N%n%A%nCH-%Z %C",
239                "require", "ACZ",
240                "upper", "",
241                "postprefix", "CH-",
242        }),
243        CI(new String[]{
244                "name", "COTE D'IVOIRE",
245                "fmt", "%N%n%O%n%X %A %C %X",
246        }),
247        CK(new String[]{
248                "name", "COOK ISLANDS",
249                "fmt", "%N%n%O%n%A%n%C %Z",
250        }),
251        CL(new String[]{
252                "name", "CHILE",
253                "lang", "es",
254                "languages", "es",
255                "fmt", "%N%n%O%n%A%n%Z %C%n%S",
256                "state_name_type", "state",
257        }),
258        CM(new String[]{
259                "name", "CAMEROON",
260        }),
261        CN(new String[]{
262                "name", "P.R. CHINA",
263                "lang", "zh-hans",
264                "languages", "zh-hans",
265                "fmt", "%Z%n%S%C%D%n%A%n%O%n%N",
266                "lfmt", "%N%n%O%n%A%n%D%n%C%n%S, %Z",
267                "require", "ACSZ",
268                "upper", "S",
269        }),
270        CO(new String[]{
271                "name", "COLOMBIA",
272                "fmt", "%N%n%O%n%A%n%C, %S",
273        }),
274        CR(new String[]{
275                "name", "COSTA RICA",
276                "fmt", "%N%n%O%n%A%n%Z %C",
277        }),
278        CS(new String[]{
279                "name", "SERBIA AND MONTENEGRO",
280                "fmt", "%N%n%O%n%A%n%Z %C",
281        }),
282        CV(new String[]{
283                "name", "CAPE VERDE",
284                "lang", "pt",
285                "languages", "pt",
286                "fmt", "%N%n%O%n%A%n%Z %C%n%S",
287                "state_name_type", "island",
288        }),
289        CX(new String[]{
290                "name", "CHRISTMAS ISLAND",
291                "fmt", "%O%n%N%n%A%n%C %S %Z",
292                "upper", "CS",
293        }),
294        CY(new String[]{
295                "name", "CYPRUS",
296                "fmt", "%N%n%O%n%A%n%Z %C",
297        }),
298        CZ(new String[]{
299                "name", "CZECH REP.",
300                "fmt", "%N%n%O%n%A%n%Z %C",
301        }),
302        DE(new String[]{
303                "name", "GERMANY",
304                "fmt", "%N%n%O%n%A%n%Z %C",
305                "require", "ACZ",
306        }),
307        DJ(new String[]{
308                "name", "DJIBOUTI",
309        }),
310        DK(new String[]{
311                "name", "DENMARK",
312                "fmt", "%N%n%O%n%A%n%Z %C",
313                "require", "ACZ",
314        }),
315        DM(new String[]{
316                "name", "DOMINICA",
317        }),
318        DO(new String[]{
319                "name", "DOMINICAN REP.",
320                "fmt", "%N%n%O%n%A%n%Z %C",
321        }),
322        DZ(new String[]{
323                "name", "ALGERIA",
324                "fmt", "%N%n%O%n%A%n%Z %C",
325        }),
326        EC(new String[]{
327                "name", "ECUADOR",
328                "fmt", "%N%n%O%n%A%n%Z%n%C",
329                "upper", "CZ",
330        }),
331        EE(new String[]{
332                "name", "ESTONIA",
333                "fmt", "%N%n%O%n%A%n%Z %C",
334        }),
335        EG(new String[]{
336                "name", "EGYPT",
337                "fmt", "%N%n%O%n%A%n%C%n%S%n%Z",
338                "lfmt", "%N%n%O%n%A%n%C%n%S%n%Z",
339        }),
340        EH(new String[]{
341                "name", "WESTERN SAHARA",
342        }),
343        ER(new String[]{
344                "name", "ERITREA",
345        }),
346        ES(new String[]{
347                "name", "SPAIN",
348                "lang", "es",
349                "languages", "es",
350                "fmt", "%N%n%O%n%A%n%Z %C %S",
351                "require", "ACSZ",
352                "upper", "CS",
353        }),
354        ET(new String[]{
355                "name", "ETHIOPIA",
356                "fmt", "%N%n%O%n%A%n%Z %C",
357        }),
358        FI(new String[]{
359                "name", "FINLAND",
360                "fmt", "%O%n%N%n%A%nFI-%Z %C",
361                "require", "ACZ",
362                "postprefix", "FI-",
363        }),
364        FJ(new String[]{
365                "name", "FIJI",
366        }),
367        FK(new String[]{
368                "name", "FALKLAND ISLANDS (MALVINAS)",
369                "fmt", "%N%n%O%n%A%n%X%n%C%n%Z",
370                "require", "ACZ",
371                "upper", "CZ",
372        }),
373        FM(new String[]{
374                "name", "MICRONESIA (Federated State of)",
375                "fmt", "%N%n%O%n%A%n%C %S %Z",
376                "require", "ACSZ",
377                "upper", "ACNOS",
378                "zip_name_type", "zip",
379                "state_name_type", "state",
380        }),
381        FO(new String[]{
382                "name", "FAROE ISLANDS",
383                "fmt", "%N%n%O%n%A%nFO%Z %C",
384                "postprefix", "FO",
385        }),
386        FR(new String[]{
387                "name", "FRANCE",
388                "fmt", "%O%n%N%n%A%n%Z %C %X",
389                "require", "ACZ",
390                "upper", "CX",
391        }),
392        GA(new String[]{
393                "name", "GABON",
394        }),
395        GB(new String[]{
396                "name", "UNITED KINGDOM",
397                "fmt", "%N%n%O%n%A%n%C%n%S%n%Z",
398                "require", "ACZ",
399                "upper", "CZ",
400                "state_name_type", "county",
401        }),
402        GD(new String[]{
403                "name", "GRENADA (WEST INDIES)",
404        }),
405        GE(new String[]{
406                "name", "GEORGIA",
407                "fmt", "%N%n%O%n%A%n%Z %C",
408        }),
409        GF(new String[]{
410                "name", "FRENCH GUIANA",
411                "fmt", "%O%n%N%n%A%n%Z %C %X",
412                "require", "ACZ",
413                "upper", "ACX",
414        }),
415        GG(new String[]{
416                "name", "CHANNEL ISLANDS",
417                "fmt", "%N%n%O%n%A%n%X%n%C%nGUERNSEY%n%Z",
418                "require", "ACZ",
419                "upper", "CZ",
420        }),
421        GH(new String[]{
422                "name", "GHANA",
423        }),
424        GI(new String[]{
425                "name", "GIBRALTAR",
426                "fmt", "%N%n%O%n%A",
427                "require", "A",
428        }),
429        GL(new String[]{
430                "name", "GREENLAND",
431                "fmt", "%N%n%O%n%A%n%Z %C",
432                "require", "ACZ",
433        }),
434        GM(new String[]{
435                "name", "GAMBIA",
436        }),
437        GN(new String[]{
438                "name", "GUINEA",
439                "fmt", "%N%n%O%n%Z %A %C",
440        }),
441        GP(new String[]{
442                "name", "GUADELOUPE",
443                "fmt", "%O%n%N%n%A%n%Z %C %X",
444                "require", "ACZ",
445                "upper", "ACX",
446        }),
447        GQ(new String[]{
448                "name", "EQUATORIAL GUINEA",
449        }),
450        GR(new String[]{
451                "name", "GREECE",
452                "fmt", "%N%n%O%n%A%n%Z %C",
453                "require", "ACZ",
454        }),
455        GS(new String[]{
456                "name", "SOUTH GEORGIA",
457                "fmt", "%N%n%O%n%A%n%X%n%C%n%Z",
458                "require", "ACZ",
459                "upper", "CZ",
460        }),
461        GT(new String[]{
462                "name", "GUATEMALA",
463                "fmt", "%N%n%O%n%A%n%Z- %C",
464        }),
465        GU(new String[]{
466                "name", "GUAM",
467                "fmt", "%N%n%O%n%A%n%C %S %Z",
468                "require", "ACSZ",
469                "upper", "ACNOS",
470                "zip_name_type", "zip",
471                "state_name_type", "state",
472        }),
473        GW(new String[]{
474                "name", "GUINEA-BISSAU",
475                "fmt", "%N%n%O%n%A%n%Z %C",
476        }),
477        GY(new String[]{
478                "name", "GUYANA",
479        }),
480        HK(new String[]{
481                "name", "HONG KONG",
482                "lang", "zh",
483                "languages", "zh",
484                "fmt", "%S%n%A%n%O%n%N",
485                "lfmt", "%N%n%O%n%A%n%S",
486                "require", "AS",
487                "upper", "S",
488                "state_name_type", "area",
489        }),
490        HM(new String[]{
491                "name", "HEARD AND MCDONALD ISLANDS",
492                "fmt", "%O%n%N%n%A%n%C %S %Z",
493                "upper", "CS",
494        }),
495        HN(new String[]{
496                "name", "HONDURAS",
497                "fmt", "%N%n%O%n%A%n%C, %S%n%Z",
498                "require", "ACS",
499        }),
500        HR(new String[]{
501                "name", "CROATIA",
502                "fmt", "%N%n%O%n%A%nHR-%Z %C",
503                "postprefix", "HR-",
504        }),
505        HT(new String[]{
506                "name", "HAITI",
507                "fmt", "%N%n%O%n%A%nHT%Z %C %X",
508                "postprefix", "HT",
509        }),
510        HU(new String[]{
511                "name", "HUNGARY (Rep.)",
512                "fmt", "%N%n%O%n%C%n%A%n%Z",
513                "upper", "ACNO",
514        }),
515        ID(new String[]{
516                "name", "INDONESIA",
517                "fmt", "%N%n%O%n%A%n%C %Z%n%S",
518        }),
519        IE(new String[]{
520                "name", "IRELAND",
521                "lang", "en",
522                "languages", "en",
523                "fmt", "%N%n%O%n%A%n%C%n%S",
524                "state_name_type", "county",
525        }),
526        IL(new String[]{
527                "name", "ISRAEL",
528                "fmt", "%N%n%O%n%A%n%C %Z",
529        }),
530        IM(new String[]{
531                "name", "ISLE OF MAN",
532                "fmt", "%N%n%O%n%A%n%X%n%C%n%Z",
533                "require", "ACZ",
534                "upper", "CZ",
535        }),
536        IN(new String[]{
537                "name", "INDIA",
538                "lang", "en",
539                "languages", "en",
540                "fmt", "%N%n%O%n%A%n%C %Z%n%S",
541                "require", "ACSZ",
542                "state_name_type", "state",
543        }),
544        IO(new String[]{
545                "name", "BRITISH INDIAN OCEAN TERRITORY",
546                "fmt", "%N%n%O%n%A%n%X%n%C%n%Z",
547                "require", "ACZ",
548                "upper", "CZ",
549        }),
550        IQ(new String[]{
551                "name", "IRAQ",
552                "fmt", "%O%n%N%n%A%n%C, %S%n%Z",
553                "require", "ACS",
554                "upper", "CS",
555        }),
556        IS(new String[]{
557                "name", "ICELAND",
558                "fmt", "%N%n%O%n%A%n%Z %C",
559        }),
560        IT(new String[]{
561                "name", "ITALY",
562                "lang", "it",
563                "languages", "it",
564                "fmt", "%N%n%O%n%A%n%Z %C %S",
565                "require", "ACSZ",
566                "upper", "CS",
567        }),
568        JE(new String[]{
569                "name", "CHANNEL ISLANDS",
570                "fmt", "%N%n%O%n%A%n%X%n%C%nJERSEY%n%Z",
571                "require", "ACZ",
572                "upper", "CZ",
573        }),
574        JM(new String[]{
575                "name", "JAMAICA",
576                "lang", "en",
577                "languages", "en",
578                "fmt", "%N%n%O%n%A%n%C%n%S %X",
579                "require", "ACS",
580                "state_name_type", "parish",
581        }),
582        JO(new String[]{
583                "name", "JORDAN",
584                "fmt", "%N%n%O%n%A%n%C %Z",
585        }),
586        JP(new String[]{
587                "name", "JAPAN",
588                "lang", "ja",
589                "languages", "ja",
590                "fmt", "\u3012%Z%n%S%C%n%A%n%O%n%N",
591                "lfmt", "%N%n%O%n%A%n%C, %S%n%Z",
592                "require", "ACSZ",
593                "upper", "S",
594                "state_name_type", "prefecture",
595        }),
596        KE(new String[]{
597                "name", "KENYA",
598                "fmt", "%N%n%O%n%A%n%C%n%Z",
599        }),
600        KG(new String[]{
601                "name", "KYRGYZSTAN",
602                "fmt", "%Z %C %X%n%A%n%O%n%N",
603        }),
604        KH(new String[]{
605                "name", "CAMBODIA",
606                "fmt", "%N%n%O%n%A%n%C %Z",
607        }),
608        KI(new String[]{
609                "name", "KIRIBATI",
610                "fmt", "%N%n%O%n%A%n%S%n%C",
611                "upper", "ACNOS",
612                "state_name_type", "island",
613        }),
614        KM(new String[]{
615                "name", "COMOROS",
616                "upper", "AC",
617        }),
618        KN(new String[]{
619                "name", "SAINT KITTS AND NEVIS",
620                "lang", "en",
621                "languages", "en",
622                "fmt", "%N%n%O%n%A%n%C, %S",
623                "require", "ACS",
624                "state_name_type", "island",
625        }),
626        KR(new String[]{
627                "name", "KOREA (REP.)",
628                "lang", "ko",
629                "languages", "ko",
630                "fmt", "%S %C%D%n%A%n%O%n%N%nSEOUL %Z",
631                "lfmt", "%N%n%O%n%A%n%D%n%C%n%S%nSEOUL %Z",
632                "require", "ACSZ",
633                "upper", "Z",
634                "state_name_type", "do_si",
635        }),
636        KW(new String[]{
637                "name", "KUWAIT",
638                "fmt", "%N%n%O%n%A%n%Z %C",
639        }),
640        KY(new String[]{
641                "name", "CAYMAN ISLANDS",
642                "lang", "en",
643                "languages", "en",
644                "fmt", "%N%n%O%n%A%n%S",
645                "require", "AS",
646                "state_name_type", "island",
647        }),
648        KZ(new String[]{
649                "name", "KAZAKHSTAN",
650                "fmt", "%Z%n%S%n%C%n%A%n%O%n%N",
651        }),
652        LA(new String[]{
653                "name", "LAO (PEOPLE'S DEM. REP.)",
654                "fmt", "%N%n%O%n%A%n%Z %C",
655        }),
656        LB(new String[]{
657                "name", "LEBANON",
658                "fmt", "%N%n%O%n%A%n%C %Z",
659        }),
660        LC(new String[]{
661                "name", "SAINT LUCIA",
662        }),
663        LI(new String[]{
664                "name", "LIECHTENSTEIN",
665                "fmt", "%O%n%N%n%A%nFL-%Z %C",
666                "require", "ACZ",
667                "postprefix", "FL-",
668        }),
669        LK(new String[]{
670                "name", "SRI LANKA",
671                "fmt", "%N%n%O%n%A%n%C%n%Z",
672        }),
673        LR(new String[]{
674                "name", "LIBERIA",
675                "fmt", "%N%n%O%n%A%n%Z %C %X",
676        }),
677        LS(new String[]{
678                "name", "LESOTHO",
679                "fmt", "%N%n%O%n%A%n%C %Z",
680        }),
681        LT(new String[]{
682                "name", "LITHUANIA",
683                "fmt", "%O%n%N%n%A%nLT-%Z %C",
684                "postprefix", "LT-",
685        }),
686        LU(new String[]{
687                "name", "LUXEMBOURG",
688                "fmt", "%O%n%N%n%A%nL-%Z %C",
689                "require", "ACZ",
690                "postprefix", "L-",
691        }),
692        LV(new String[]{
693                "name", "LATVIA",
694                "fmt", "%N%n%O%n%A%n%C, %Z",
695        }),
696        LY(new String[]{
697                "name", "LIBYA",
698        }),
699        MA(new String[]{
700                "name", "MOROCCO",
701                "fmt", "%N%n%O%n%A%n%Z %C",
702        }),
703        MC(new String[]{
704                "name", "MONACO",
705                "fmt", "%N%n%O%n%A%nMC-%Z %C %X",
706                "postprefix", "MC-",
707        }),
708        MD(new String[]{
709                "name", "Rep. MOLDOVA",
710                "fmt", "%N%n%O%n%A%nMD-%Z %C",
711                "postprefix", "MD-",
712        }),
713        ME(new String[]{
714                "name", "MONTENEGRO",
715                "fmt", "%N%n%O%n%A%n%Z %C",
716        }),
717        MF(new String[]{
718                "name", "SAINT MARTIN",
719                "fmt", "%O%n%N%n%A%n%Z %C %X",
720                "upper", "ACX",
721                "require", "ACZ",
722        }),
723        MG(new String[]{
724                "name", "MADAGASCAR",
725                "fmt", "%N%n%O%n%A%n%Z %C",
726        }),
727        MH(new String[]{
728                "name", "MARSHALL ISLANDS",
729                "fmt", "%N%n%O%n%A%n%C %S %Z",
730                "require", "ACSZ",
731                "upper", "ACNOS",
732                "zip_name_type", "zip",
733                "state_name_type", "state",
734        }),
735        MK(new String[]{
736                "name", "MACEDONIA",
737                "fmt", "%N%n%O%n%A%n%Z %C",
738        }),
739        ML(new String[]{
740                "name", "MALI",
741        }),
742        MN(new String[]{
743                "name", "MONGOLIA",
744                "fmt", "%N%n%O%n%A%n%S %C-%X%n%Z",
745        }),
746        MO(new String[]{
747                "name", "MACAO",
748                "lang", "zh-hant",
749                "languages", "zh-hant",
750                "fmt", "%A%n%O%n%N",
751                "lfmt", "%N%n%O%n%A",
752                "require", "A",
753        }),
754        MP(new String[]{
755                "name", "NORTHERN MARIANA ISLANDS",
756                "fmt", "%N%n%O%n%A%n%C %S %Z",
757                "require", "ACSZ",
758                "upper", "ACNOS",
759                "zip_name_type", "zip",
760                "state_name_type", "state",
761        }),
762        MQ(new String[]{
763                "name", "MARTINIQUE",
764                "fmt", "%O%n%N%n%A%n%Z %C %X",
765                "require", "ACZ",
766                "upper", "ACX",
767        }),
768        MR(new String[]{
769                "name", "MAURITANIA",
770                "upper", "AC",
771        }),
772        MS(new String[]{
773                "name", "MONTSERRAT",
774        }),
775        MT(new String[]{
776                "name", "MALTA",
777                "fmt", "%N%n%O%n%A%n%C %Z",
778                "upper", "CZ",
779        }),
780        MU(new String[]{
781                "name", "MAURITIUS",
782                "fmt", "%N%n%O%n%A%n%Z%n%C",
783                "upper", "CZ",
784        }),
785        MV(new String[]{
786                "name", "MALDIVES",
787                "fmt", "%N%n%O%n%A%n%C %Z",
788        }),
789        MW(new String[]{
790                "name", "MALAWI",
791                "fmt", "%N%n%O%n%A%n%C %X",
792        }),
793        MX(new String[]{
794                "name", "MEXICO",
795                "lang", "es",
796                "languages", "es",
797                "fmt", "%N%n%O%n%A%n%Z %C, %S",
798                "require", "ACZ",
799                "upper", "CSZ",
800                "state_name_type", "state",
801        }),
802        MY(new String[]{
803                "name", "MALAYSIA",
804                "lang", "ms",
805                "languages", "ms",
806                "fmt", "%N%n%O%n%A%n%Z %C, %S",
807                "require", "ACZ",
808                "upper", "CS",
809                "state_name_type", "state",
810        }),
811        MZ(new String[]{
812                "name", "MOZAMBIQUE",
813                "fmt", "%N%n%O%n%A%n%C",
814        }),
815        NA(new String[]{
816                "name", "NAMIBIA",
817        }),
818        NC(new String[]{
819                "name", "NEW CALEDONIA",
820                "fmt", "%O%n%N%n%A%n%Z %C %X",
821                "require", "ACZ",
822                "upper", "ACX",
823        }),
824        NE(new String[]{
825                "name", "NIGER",
826                "fmt", "%N%n%O%n%A%n%Z %C",
827        }),
828        NF(new String[]{
829                "name", "NORFOLK ISLAND",
830                "fmt", "%O%n%N%n%A%n%C %S %Z",
831                "upper", "CS",
832        }),
833        NG(new String[]{
834                "name", "NIGERIA",
835                "lang", "fr",
836                "languages", "fr",
837                "fmt", "%N%n%O%n%A%n%C %Z%n%S",
838                "upper", "CS",
839                "state_name_type", "state",
840        }),
841        NI(new String[]{
842                "name", "NICARAGUA",
843                "lang", "es",
844                "languages", "es",
845                "fmt", "%N%n%O%n%A%n%Z%n%C, %S",
846                "upper", "CS",
847                "state_name_type", "department",
848        }),
849        NL(new String[]{
850                "name", "NETHERLANDS",
851                "fmt", "%O%n%N%n%A%n%Z %C",
852                "require", "ACZ",
853        }),
854        NO(new String[]{
855                "name", "NORWAY",
856                "fmt", "%N%n%O%n%A%n%Z %C",
857                "require", "ACZ",
858        }),
859        NP(new String[]{
860                "name", "NEPAL",
861                "fmt", "%N%n%O%n%A%n%C %Z",
862        }),
863        NR(new String[]{
864                "name", "NAURU CENTRAL PACIFIC",
865                "lang", "en",
866                "languages", "en",
867                "fmt", "%N%n%O%n%A%n%S",
868                "require", "AS",
869                "state_name_type", "district",
870        }),
871        NU(new String[]{
872                "name", "NIUE",
873        }),
874        NZ(new String[]{
875                "name", "NEW ZEALAND",
876                "fmt", "%N%n%O%n%A%n%C %Z",
877                "require", "ACZ",
878        }),
879        OM(new String[]{
880                "name", "OMAN",
881                "fmt", "%N%n%O%n%A%n%Z%n%C",
882        }),
883        PA(new String[]{
884                "name", "PANAMA (REP.)",
885                "fmt", "%N%n%O%n%A%n%C%n%S",
886                "upper", "CS",
887        }),
888        PE(new String[]{
889                "name", "PERU",
890        }),
891        PF(new String[]{
892                "name", "FRENCH POLYNESIA",
893                "fmt", "%N%n%O%n%A%n%Z %C %S",
894                "require", "ACSZ",
895                "upper", "CS",
896                "state_name_type", "island",
897        }),
898        PG(new String[]{
899                "name", "PAPUA NEW GUINEA",
900                "fmt", "%N%n%O%n%A%n%C %Z %S",
901                "require", "ACS",
902        }),
903        PH(new String[]{
904                "name", "PHILIPPINES",
905                "fmt", "%N%n%O%n%A%n%Z %C%n%S",
906                "require", "AC",
907        }),
908        PK(new String[]{
909                "name", "PAKISTAN",
910                "fmt", "%N%n%O%n%A%n%C-%Z",
911        }),
912        PL(new String[]{
913                "name", "POLAND",
914                "fmt", "%N%n%O%n%A%n%Z %C",
915                "require", "ACZ",
916        }),
917        PM(new String[]{
918                "name", "ST. PIERRE AND MIQUELON",
919                "fmt", "%O%n%N%n%A%n%Z %C %X",
920                "require", "ACZ",
921                "upper", "ACX",
922        }),
923        PN(new String[]{
924                "name", "PITCAIRN",
925                "fmt", "%N%n%O%n%A%n%X%n%C%n%Z",
926                "require", "ACZ",
927                "upper", "CZ",
928        }),
929        PR(new String[]{
930                "name", "PUERTO RICO",
931                "fmt", "%N%n%O%n%A%n%C PR %Z",
932                "require", "ACZ",
933                "upper", "ACNO",
934                "zip_name_type", "zip",
935                "postprefix", "PR",
936        }),
937        PS(new String[]{
938                "name", "PALESTINIAN TERRITORY",
939        }),
940        PT(new String[]{
941                "name", "PORTUGAL",
942                "fmt", "%N%n%O%n%A%n%Z %C",
943                "require", "ACZ",
944        }),
945        PW(new String[]{
946                "name", "PALAU",
947                "fmt", "%N%n%O%n%A%n%C %S %Z",
948                "require", "ACSZ",
949                "upper", "ACNOS",
950                "zip_name_type", "zip",
951                "state_name_type", "state",
952        }),
953        PY(new String[]{
954                "name", "PARAGUAY",
955                "fmt", "%N%n%O%n%A%n%Z %C",
956        }),
957        QA(new String[]{
958                "name", "QATAR",
959                "upper", "AC",
960        }),
961        RE(new String[]{
962                "name", "REUNION",
963                "fmt", "%O%n%N%n%A%n%Z %C %X",
964                "require", "ACZ",
965                "upper", "ACX",
966        }),
967        RO(new String[]{
968                "name", "ROMANIA",
969                "fmt", "%N%n%O%n%A%n%Z %C",
970                "upper", "AC",
971        }),
972        RS(new String[]{
973                "name", "REPUBLIC OF SERBIA",
974                "fmt", "%N%n%O%n%A%n%Z %C",
975        }),
976        RU(new String[]{
977                "name", "RUSSIAN FEDERATION",
978                "fmt", "%N%n%O%n%A%n%C%n%S%n%Z",
979                "require", "ACZ",
980                "state_name_type", "oblast",
981                "upper", "AC",
982        }),
983        RW(new String[]{
984                "name", "RWANDA",
985                "upper", "AC",
986        }),
987        SA(new String[]{
988                "name", "SAUDI ARABIA",
989                "fmt", "%N%n%O%n%A%n%C %Z",
990        }),
991        SB(new String[]{
992                "name", "SOLOMON ISLANDS",
993        }),
994        SC(new String[]{
995                "name", "SEYCHELLES",
996                "fmt", "%N%n%O%n%A%n%C%n%S",
997                "upper", "S",
998                "state_name_type", "island",
999        }),
1000        SE(new String[]{
1001                "name", "SWEDEN",
1002                "fmt", "%O%n%N%n%A%nSE-%Z %C",
1003                "require", "ACZ",
1004                "postprefix", "SE-",
1005        }),
1006        SG(new String[]{
1007                "name", "REP. OF SINGAPORE",
1008                "fmt", "%N%n%O%n%A%nSINGAPORE %Z",
1009                "require", "AZ",
1010        }),
1011        SH(new String[]{
1012                "name", "SAINT HELENA",
1013                "fmt", "%N%n%O%n%A%n%X%n%C%n%Z",
1014                "require", "ACZ",
1015                "upper", "CZ",
1016        }),
1017        SI(new String[]{
1018                "name", "SLOVENIA",
1019                "fmt", "%N%n%O%n%A%nSI- %Z %C",
1020                "postprefix", "SI-",
1021        }),
1022        SJ(new String[]{
1023                "name", "SVALBARD AND JAN MAYEN ISLANDS",
1024                "fmt", "%N%n%O%n%A%n%Z %C",
1025                "require", "ACZ",
1026        }),
1027        SK(new String[]{
1028                "name", "SLOVAKIA",
1029                "fmt", "%N%n%O%n%A%n%Z %C",
1030        }),
1031        SL(new String[]{
1032                "name", "SIERRA LEONE",
1033        }),
1034        SM(new String[]{
1035                "name", "SAN MARINO",
1036                "fmt", "%N%n%O%n%A%n%Z %C",
1037                "require", "AZ",
1038        }),
1039        SN(new String[]{
1040                "name", "SENEGAL",
1041                "fmt", "%N%n%O%n%A%n%Z %C",
1042        }),
1043        SO(new String[]{
1044                "name", "SOMALIA",
1045                "lang", "so",
1046                "languages", "so",
1047                "fmt", "%N%n%O%n%A%n%C, %S %Z",
1048                "require", "ACS",
1049                "upper", "ACS",
1050        }),
1051        SR(new String[]{
1052                "name", "SURINAME",
1053                "lang", "nl",
1054                "languages", "nl",
1055                "fmt", "%N%n%O%n%A%n%C %X%n%S",
1056                "upper", "AS",
1057        }),
1058        ST(new String[]{
1059                "name", "SAO TOME AND PRINCIPE",
1060                "fmt", "%N%n%O%n%A%n%C %X",
1061        }),
1062        SV(new String[]{
1063                "name", "EL SALVADOR",
1064                "lang", "es",
1065                "languages", "es",
1066                "fmt", "%N%n%O%n%A%n%Z-%C%n%S",
1067                "require", "ACS",
1068                "upper", "CSZ",
1069        }),
1070        SZ(new String[]{
1071                "name", "SWAZILAND",
1072                "fmt", "%N%n%O%n%A%n%C%n%Z",
1073                "upper", "ACZ",
1074        }),
1075        TA(new String[]{
1076                "name", "TRISTAN DA CUNHA",
1077        }),
1078        TC(new String[]{
1079                "name", "TURKS AND CAICOS ISLANDS",
1080                "fmt", "%N%n%O%n%A%n%X%n%C%n%Z",
1081                "require", "ACZ",
1082                "upper", "CZ",
1083        }),
1084        TD(new String[]{
1085                "name", "CHAD",
1086        }),
1087        TF(new String[]{
1088                "name", "FRENCH SOUTHERN TERRITORIES",
1089        }),
1090        TG(new String[]{
1091                "name", "TOGO",
1092        }),
1093        TH(new String[]{
1094                "name", "THAILAND",
1095                "lang", "th",
1096                "languages", "th",
1097                "fmt", "%N%n%O%n%A%n%D %C%n%S %Z",
1098                "lfmt", "%N%n%O%n%A%n%D, %C%n%S %Z",
1099                "upper", "S",
1100        }),
1101        TJ(new String[]{
1102                "name", "TAJIKISTAN",
1103                "fmt", "%N%n%O%n%A%n%Z %C",
1104        }),
1105        TK(new String[]{
1106                "name", "TOKELAU",
1107        }),
1108        TL(new String[]{
1109                "name", "TIMOR-LESTE",
1110        }),
1111        TM(new String[]{
1112                "name", "TURKMENISTAN",
1113                "fmt", "%N%n%O%n%A%n%Z %C",
1114        }),
1115        TN(new String[]{
1116                "name", "TUNISIA",
1117                "fmt", "%N%n%O%n%A%n%Z %C",
1118        }),
1119        TO(new String[]{
1120                "name", "TONGA",
1121        }),
1122        TR(new String[]{
1123                "name", "TURKEY",
1124                "fmt", "%N%n%O%n%A%n%Z %C/%S",
1125                "require", "ACZ",
1126                "locality_name_type", "district",
1127        }),
1128        TT(new String[]{
1129                "name", "TRINIDAD AND TOBAGO",
1130        }),
1131        TV(new String[]{
1132                "name", "TUVALU",
1133                "lang", "tyv",
1134                "languages", "tyv",
1135                "fmt", "%N%n%O%n%A%n%X%n%C%n%S",
1136                "upper", "ACS",
1137                "state_name_type", "island",
1138        }),
1139        TW(new String[]{
1140                "name", "TAIWAN",
1141                "lang", "zh-hant",
1142                "languages", "zh-hant",
1143                "fmt", "%Z%n%S%C%n%A%n%O%n%N",
1144                "lfmt", "%N%n%O%n%A%n%C, %S %Z",
1145                "require", "ACSZ",
1146                "state_name_type", "county",
1147        }),
1148        TZ(new String[]{
1149                "name", "TANZANIA (UNITED REP.)",
1150        }),
1151        UA(new String[]{
1152                "name", "UKRAINE",
1153                "fmt", "%Z %C%n%A%n%O%n%N",
1154        }),
1155        UG(new String[]{
1156                "name", "UGANDA",
1157        }),
1158        UM(new String[]{
1159                "name", "UNITED STATES MINOR OUTLYING ISLANDS",
1160                "fmt", "%N%n%O%n%A%n%C %S %Z",
1161                "require", "ACS",
1162                "upper", "ACNOS",
1163                "zip_name_type", "zip",
1164                "state_name_type", "state",
1165        }),
1166        US(new String[]{
1167                "name", "UNITED STATES",
1168                "lang", "en",
1169                "languages", "en",
1170                "fmt", "%N%n%O%n%A%n%C, %S %Z",
1171                "require", "ACSZ",
1172                "upper", "CS",
1173                "zip_name_type", "zip",
1174                "state_name_type", "state",
1175        }),
1176        UY(new String[]{
1177                "name", "URUGUAY",
1178                "lang", "es",
1179                "languages", "es",
1180                "fmt", "%N%n%O%n%A%n%Z %C %S",
1181                "upper", "CS",
1182        }),
1183        UZ(new String[]{
1184                "name", "UZBEKISTAN",
1185                "fmt", "%N%n%O%n%A%n%Z %C%n%S",
1186                "upper", "CS",
1187        }),
1188        VA(new String[]{
1189                "name", "VATICAN",
1190                "fmt", "%N%n%O%n%A%n%Z %C",
1191        }),
1192        VC(new String[]{
1193                "name", "SAINT VINCENT AND THE GRENADINES (ANTILLES)",
1194        }),
1195        VE(new String[]{
1196                "name", "VENEZUELA",
1197                "lang", "es",
1198                "languages", "es",
1199                "fmt", "%N%n%O%n%A%n%C %Z, %S",
1200                "require", "ACS",
1201                "upper", "CS",
1202        }),
1203        VG(new String[]{
1204                "name", "VIRGIN ISLANDS (BRITISH)",
1205                "require", "A",
1206        }),
1207        VI(new String[]{
1208                "name", "VIRGIN ISLANDS (U.S.)",
1209                "fmt", "%N%n%O%n%A%n%C %S %Z",
1210                "require", "ACSZ",
1211                "upper", "ACNOS",
1212                "zip_name_type", "zip",
1213                "state_name_type", "state",
1214        }),
1215        VN(new String[]{
1216                "name", "VIET NAM",
1217                "lang", "vi",
1218                "languages", "vi",
1219                "fmt", "%N%n%O%n%A%n%C%n%S",
1220                "lfmt", "%N%n%O%n%A%n%C%n%S",
1221                "require", "AC",
1222        }),
1223        VU(new String[]{
1224                "name", "VANUATU",
1225        }),
1226        WF(new String[]{
1227                "name", "WALLIS AND FUTUNA ISLANDS",
1228                "fmt", "%O%n%N%n%A%n%Z %C %X",
1229                "require", "ACZ",
1230                "upper", "ACX",
1231        }),
1232        WS(new String[]{
1233                "name", "SAMOA",
1234        }),
1235        XK(new String[]{
1236                "name", "KOSOVO",
1237                "fmt", "%N%n%O%n%A%n%Z %C"
1238        }),
1239        YE(new String[]{
1240                "name", "YEMEN",
1241                "require", "AC",
1242        }),
1243        YT(new String[]{
1244                "name", "MAYOTTE",
1245                "fmt", "%O%n%N%n%A%n%Z %C %X",
1246                "require", "ACZ",
1247                "upper", "ACX",
1248        }),
1249        YU(new String[]{
1250                "name", "SERBIA AND MONTENEGRO",
1251                "fmt", "%N%n%O%n%A%n%Z %C",
1252        }),
1253        ZA(new String[]{
1254                "name", "SOUTH AFRICA",
1255                "fmt", "%N%n%O%n%A%n%C%n%Z",
1256                "require", "ACZ",
1257        }),
1258        ZM(new String[]{
1259                "name", "ZAMBIA",
1260                "fmt", "%N%n%O%n%A%n%Z %C",
1261                "require", "AC",
1262        }),
1263        ZW(new String[]{
1264                "name", "ZIMBABWE",
1265        }),
1266        ZZ(new String[]{
1267                "fmt", "%N%n%O%n%A%n%C",
1268                "require", "AC",
1269                "upper", "C",
1270                "zip_name_type", "postal",
1271                "state_name_type", "province",
1272                "locality_name_type", "city",
1273        });
1274
1275        private String jsonString;
1276
1277        private RegionDataEnum(String[] inputArray) {
1278            jsonString = convertArrayToJsonString(inputArray);
1279        }
1280
1281        String getJsonString() {
1282            return jsonString;
1283        }
1284    }
1285
1286    static {
1287        for (RegionDataEnum region : RegionDataEnum.values()) {
1288            COUNTRY_FORMAT_MAP.put(region.toString(), region.getJsonString());
1289        }
1290    }
1291
1292    static Map<String, String> getCountryFormatMap() {
1293        return COUNTRY_FORMAT_MAP;
1294    }
1295
1296    /**
1297     * Assumes the array is a well-formed array - i.e., there are no unmatched keys in the input.
1298     * Package-private so it can be accessed by tests.
1299     */
1300    static String convertArrayToJsonString(String[] input) {
1301        JSONObject object = new JSONObject();
1302        for (int i = 0; i < input.length; i += 2) {
1303            try {
1304                object.put(input[i], input[i + 1]);
1305            } catch (JSONException e) {
1306                // Ignore for now.
1307            }
1308        }
1309        return object.toString();
1310    }
1311}
1312