• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
17 package com.android.i18n.addressinput;
18 
19 import org.json.JSONException;
20 import org.json.JSONObject;
21 
22 import java.util.HashMap;
23 import 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  */
30 class 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 
RegionDataEnum(String[] inputArray)1277         private RegionDataEnum(String[] inputArray) {
1278             jsonString = convertArrayToJsonString(inputArray);
1279         }
1280 
getJsonString()1281         String getJsonString() {
1282             return jsonString;
1283         }
1284     }
1285 
1286     static {
1287         for (RegionDataEnum region : RegionDataEnum.values()) {
region.toString()1288             COUNTRY_FORMAT_MAP.put(region.toString(), region.getJsonString());
1289         }
1290     }
1291 
getCountryFormatMap()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      */
convertArrayToJsonString(String[] input)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