summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShaopeng Jia <shaopengjia@google.com>2010-09-06 08:55:10 +0200
committerShaopeng Jia <shaopengjia@google.com>2010-09-06 10:13:06 +0200
commitb2697412130f6d087dde01fb1a978f7e5840a5fa (patch)
tree800c67209cd125bda25c47c66ce7c1cd2e56da35
parent82a6d29f88ade70200c5532cca207d8b46c92d74 (diff)
downloadlibphonenumber-b2697412130f6d087dde01fb1a978f7e5840a5fa.tar.gz
This change:
- Code improvement: * Added new phone number type: pager * Refactored BuildMetadataProtoFromXml.java into BuildMetadataFromXml.java and BuildMetadataProtoFromXml.java * Refactored CountryCodeToRegionCodeMap and CountryCodeToRegionCodeMapForTesting into separate files. - Bug fixes: * ArrayOutOfBoundException in AsYouTypeFormatter.getRememberedPosition() * AsYouTypeFormatter for UK childline number - Metadata improvements: * update to existing country: GG, IM, JE, RS, RU Change-Id: I19a335cf40cb93a91bfbe449309300f0388682f1
-rw-r--r--README.android2
-rw-r--r--java/release_notes.txt22
-rw-r--r--java/resources/com/google/i18n/phonenumbers/BuildMetadataFromXml.java307
-rw-r--r--java/resources/com/google/i18n/phonenumbers/BuildMetadataJsonFromXml.java384
-rw-r--r--java/resources/com/google/i18n/phonenumbers/BuildMetadataProtoFromXml.java373
-rw-r--r--java/resources/com/google/i18n/phonenumbers/JSArrayBuilder.java135
-rw-r--r--java/resources/com/google/i18n/phonenumbers/proto/phonemetadata.proto1
-rw-r--r--java/resources/com/google/i18n/phonenumbers/src/PhoneNumberMetaData.xml30
-rw-r--r--java/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java6
-rw-r--r--java/src/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMap.java889
-rw-r--r--java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java880
-rw-r--r--java/src/com/google/i18n/phonenumbers/Phonemetadata.java24
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ADbin315 -> 327 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AEbin539 -> 551 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AFbin279 -> 291 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AGbin366 -> 378 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AIbin333 -> 345 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ALbin670 -> 682 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AMbin485 -> 497 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ANbin517 -> 529 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AObin251 -> 266 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ARbin2075 -> 2087 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ASbin315 -> 327 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ATbin990 -> 1002 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AUbin722 -> 734 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AWbin330 -> 342 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AZbin478 -> 490 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BAbin328 -> 340 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BBbin311 -> 323 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BDbin995 -> 1007 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BEbin631 -> 643 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BFbin329 -> 341 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BGbin569 -> 581 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BHbin328 -> 340 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BIbin280 -> 292 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJbin352 -> 364 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BLbin233 -> 245 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BMbin349 -> 361 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BNbin235 -> 247 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BObin122 -> 134 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BRbin647 -> 659 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BSbin491 -> 503 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BTbin344 -> 356 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BWbin476 -> 488 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BYbin555 -> 567 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BZbin116 -> 128 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CAbin559 -> 571 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CDbin322 -> 334 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CFbin265 -> 277 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CGbin231 -> 243 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CHbin464 -> 476 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CIbin344 -> 356 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CKbin118 -> 130 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CLbin832 -> 844 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CMbin345 -> 357 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CNbin2543 -> 2555 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CObin135 -> 147 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CRbin225 -> 237 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CUbin117 -> 129 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CVbin280 -> 292 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CYbin309 -> 321 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CZbin377 -> 389 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DEbin1477 -> 1489 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DJbin252 -> 267 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DKbin368 -> 380 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DMbin358 -> 370 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DObin299 -> 311 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DZbin553 -> 565 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ECbin116 -> 128 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EEbin655 -> 667 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EGbin557 -> 569 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ERbin281 -> 293 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ESbin339 -> 351 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ETbin1037 -> 1049 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FIbin665 -> 677 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FJbin110 -> 122 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FKbin116 -> 128 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FMbin110 -> 122 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FObin110 -> 122 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FRbin458 -> 470 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GAbin509 -> 521 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GBbin1717 -> 1755 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GDbin408 -> 420 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GEbin616 -> 628 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GFbin110 -> 122 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GGbin383 -> 395 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GHbin400 -> 412 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GIbin110 -> 122 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GLbin301 -> 313 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GMbin315 -> 327 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GNbin341 -> 353 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GPbin337 -> 349 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GQbin391 -> 403 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GRbin790 -> 802 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GTbin110 -> 122 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GUbin368 -> 380 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GWbin259 -> 274 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GYbin117 -> 129 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HKbin434 -> 446 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HNbin116 -> 128 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HRbin848 -> 860 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HTbin116 -> 128 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HUbin449 -> 461 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IDbin1019 -> 1031 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IEbin1041 -> 1053 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ILbin687 -> 699 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IMbin376 -> 388 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_INbin2843 -> 2855 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IObin110 -> 122 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IQbin405 -> 417 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IRbin327 -> 339 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ISbin539 -> 551 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ITbin814 -> 826 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JEbin390 -> 402 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JMbin453 -> 465 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JObin505 -> 517 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JPbin4345 -> 4357 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KEbin415 -> 427 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KGbin562 -> 574 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KHbin468 -> 480 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KIbin116 -> 128 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KMbin243 -> 255 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KNbin342 -> 354 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KPbin116 -> 128 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KRbin1284 -> 1299 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KWbin321 -> 333 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KYbin441 -> 453 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KZbin371 -> 383 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LAbin422 -> 434 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LBbin457 -> 469 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LCbin386 -> 398 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LIbin711 -> 723 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LKbin116 -> 128 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LRbin334 -> 346 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LSbin240 -> 252 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LTbin491 -> 503 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LUbin110 -> 122 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LVbin265 -> 277 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LYbin116 -> 128 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MAbin672 -> 684 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MCbin116 -> 128 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MDbin514 -> 526 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MEbin116 -> 128 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MFbin239 -> 251 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MGbin333 -> 345 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MHbin117 -> 129 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MKbin452 -> 464 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MLbin379 -> 391 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MMbin548 -> 560 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MNbin529 -> 541 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MObin246 -> 258 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MPbin386 -> 398 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MQbin116 -> 128 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MRbin315 -> 327 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MSbin282 -> 294 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MTbin118 -> 130 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MUbin388 -> 400 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MVbin117 -> 129 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MWbin472 -> 484 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MXbin1731 -> 1743 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MYbin602 -> 614 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MZbin342 -> 354 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NAbin866 -> 878 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NCbin116 -> 128 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NEbin419 -> 431 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NFbin110 -> 122 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NGbin879 -> 891 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NIbin116 -> 128 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NLbin585 -> 597 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NObin529 -> 541 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NPbin469 -> 481 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NRbin116 -> 128 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NUbin116 -> 128 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZbin671 -> 683 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_OMbin365 -> 377 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PAbin116 -> 128 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PEbin522 -> 534 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PFbin110 -> 122 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PGbin408 -> 420 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PHbin917 -> 929 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PKbin1692 -> 1704 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PLbin549 -> 561 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PMbin116 -> 128 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PRbin306 -> 318 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PSbin116 -> 128 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PTbin407 -> 419 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PWbin111 -> 123 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PYbin117 -> 129 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_QAbin307 -> 319 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_REbin366 -> 378 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RObin417 -> 429 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RSbin511 -> 525 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RUbin526 -> 541 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RWbin343 -> 355 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SAbin565 -> 577 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SBbin110 -> 122 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SCbin505 -> 517 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SDbin116 -> 128 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SEbin1548 -> 1560 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SGbin407 -> 419 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SHbin110 -> 122 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SIbin619 -> 631 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SKbin514 -> 526 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SLbin285 -> 297 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SMbin116 -> 128 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SNbin424 -> 436 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SObin298 -> 310 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SRbin110 -> 122 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_STbin214 -> 226 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SVbin110 -> 122 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SYbin397 -> 409 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SZbin412 -> 424 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TCbin375 -> 387 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TDbin307 -> 319 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TFbin116 -> 128 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TGbin277 -> 289 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_THbin501 -> 513 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TJbin550 -> 562 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TKbin110 -> 122 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TLbin295 -> 307 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TMbin273 -> 285 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TNbin269 -> 281 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TObin110 -> 122 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TRbin307 -> 319 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TTbin418 -> 430 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TVbin110 -> 122 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TWbin376 -> 388 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TZbin473 -> 485 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UAbin1013 -> 1025 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UGbin488 -> 500 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_USbin1485 -> 1497 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UYbin116 -> 128 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UZbin284 -> 296 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VAbin209 -> 221 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VCbin428 -> 440 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VEbin356 -> 368 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VGbin413 -> 425 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VIbin433 -> 445 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VNbin920 -> 932 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VUbin110 -> 122 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WFbin110 -> 122 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WSbin339 -> 351 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YEbin386 -> 398 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YTbin224 -> 236 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZAbin358 -> 370 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZMbin326 -> 338 bytes
-rw-r--r--java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZWbin1366 -> 1378 bytes
-rw-r--r--java/test/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMapForTesting.java104
-rw-r--r--java/test/com/google/i18n/phonenumbers/ExampleNumbersTest.java7
-rw-r--r--java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java75
-rw-r--r--java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_ADbin110 -> 122 bytes
-rw-r--r--java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AObin261 -> 276 bytes
-rw-r--r--java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_ARbin798 -> 810 bytes
-rw-r--r--java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AUbin322 -> 334 bytes
-rw-r--r--java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_BSbin335 -> 347 bytes
-rw-r--r--java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_DEbin603 -> 615 bytes
-rw-r--r--java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_GBbin482 -> 494 bytes
-rw-r--r--java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_ITbin418 -> 430 bytes
-rw-r--r--java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_JPbin399 -> 411 bytes
-rw-r--r--java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_KRbin1524 -> 1536 bytes
-rw-r--r--java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_MXbin903 -> 915 bytes
-rw-r--r--java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_NZbin487 -> 499 bytes
-rw-r--r--java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_PLbin271 -> 283 bytes
-rw-r--r--java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_REbin353 -> 365 bytes
-rw-r--r--java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_SGbin356 -> 368 bytes
-rw-r--r--java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_USbin451 -> 463 bytes
-rw-r--r--java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_YTbin225 -> 237 bytes
267 files changed, 2046 insertions, 1193 deletions
diff --git a/README.android b/README.android
index 350186bb..88feefd2 100644
--- a/README.android
+++ b/README.android
@@ -1,4 +1,4 @@
URL: http://code.google.com/p/libphonenumber/
-Version: r52
+Version: r56
License: Apache 2
Description: Google Phone Number Library.
diff --git a/java/release_notes.txt b/java/release_notes.txt
index 22f95b79..c51499dd 100644
--- a/java/release_notes.txt
+++ b/java/release_notes.txt
@@ -1,3 +1,23 @@
+September 4th, 2010
+* Code improvement:
+ - Added new phone number type: pager
+* Metadata change:
+ - update to existing country: GG, IM, JE, RS, RU
+* Bug fixes:
+ - ArrayOutOfBoundException in AsYouTypeFormatter.getRememberedPosition()
+ - AsYouTypeFormatter for UK childline number
+
+September 1st, 2010
+* Bug fix on KZ metadata.
+
+August 17th, 2010
+* Code improvement:
+ - Refactored BuildMetadataProtoFromXml.java into BuildMetadataFromXml.java and
+ BuildMetadataProtoFromXml.java
+ - Added BuildMetadataProtoFromXml.java and JSArrayBuilder.java
+ - Refactored CountryCodeToRegionCodeMap and CountryCodeToRegionCodeMapForTesting into separate
+ files.
+
August 16th, 2010
* Bug fixes
- AsYouTypeFormatter for formatting Chinese geographical numbers entered in national format.
@@ -8,7 +28,6 @@ August 16th, 2010
- update to existing countries: BF, FR, UK, PK, RE
August 4th, 2010
-
* Further improve startup performance
- Preload no country specific metadata at startup.
- Stop creating the file containing mapping from country calling code to region code
@@ -24,7 +43,6 @@ July 31th, 2010
- Same change also applied to unittests
July 30th, 2010
-
* Metadata change:
- new country: TL
- update to existing country: AZ, CN, FR, GH, JO, LA, PG, PK, QA, SZ, UA, VN
diff --git a/java/resources/com/google/i18n/phonenumbers/BuildMetadataFromXml.java b/java/resources/com/google/i18n/phonenumbers/BuildMetadataFromXml.java
new file mode 100644
index 00000000..a33e1122
--- /dev/null
+++ b/java/resources/com/google/i18n/phonenumbers/BuildMetadataFromXml.java
@@ -0,0 +1,307 @@
+/*
+ * Copyright (C) 2009 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.i18n.phonenumbers;
+
+import com.google.i18n.phonenumbers.Phonemetadata.NumberFormat;
+import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
+import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadataCollection;
+import com.google.i18n.phonenumbers.Phonemetadata.PhoneNumberDesc;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import java.util.regex.Pattern;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+/**
+ * Library to build phone number metadata from the XML format.
+ *
+ * @author Shaopeng Jia
+ */
+public class BuildMetadataFromXml {
+ private static final Logger LOGGER = Logger.getLogger(BuildMetadataFromXml.class.getName());
+ private static Boolean liteBuild;
+
+ // Build the PhoneMetadataCollection from the input XML file.
+ public static PhoneMetadataCollection buildPhoneMetadataCollection(String inputXmlFile,
+ boolean liteBuild) throws Exception {
+ BuildMetadataFromXml.liteBuild = liteBuild;
+ DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
+ DocumentBuilder builder = builderFactory.newDocumentBuilder();
+ File xmlFile = new File(inputXmlFile);
+ Document document = builder.parse(xmlFile);
+ document.getDocumentElement().normalize();
+ Element rootElement = document.getDocumentElement();
+ NodeList territory = rootElement.getElementsByTagName("territory");
+ PhoneMetadataCollection metadataCollection = new PhoneMetadataCollection();
+ int numOfTerritories = territory.getLength();
+ for (int i = 0; i < numOfTerritories; i++) {
+ Element territoryElement = (Element) territory.item(i);
+ String regionCode = territoryElement.getAttribute("id");
+ PhoneMetadata metadata = loadCountryMetadata(regionCode, territoryElement);
+ metadataCollection.addMetadata(metadata);
+ }
+ return metadataCollection;
+ }
+
+ // Build a mapping from a country calling code to the region codes which denote the country/region
+ // represented by that country code. In the case of multiple countries sharing a calling code,
+ // such as the NANPA countries, the one indicated with "isMainCountryForCode" in the metadata
+ // should be first.
+ public static Map<Integer, List<String>> buildCountryCodeToRegionCodeMap(
+ PhoneMetadataCollection metadataCollection) {
+ Map<Integer, List<String>> countryCodeToRegionCodeMap =
+ new TreeMap<Integer, List<String>>();
+ for (PhoneMetadata metadata : metadataCollection.getMetadataList()) {
+ String regionCode = metadata.getId();
+ int countryCode = metadata.getCountryCode();
+ if (countryCodeToRegionCodeMap.containsKey(countryCode)) {
+ if (metadata.getMainCountryForCode()) {
+ countryCodeToRegionCodeMap.get(countryCode).add(0, regionCode);
+ } else {
+ countryCodeToRegionCodeMap.get(countryCode).add(regionCode);
+ }
+ } else {
+ // For most countries, there will be only one region code for the country calling code.
+ List<String> listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add(regionCode);
+ countryCodeToRegionCodeMap.put(countryCode, listWithRegionCode);
+ }
+ }
+ return countryCodeToRegionCodeMap;
+ }
+
+ private static String validateRE(String regex) {
+ Pattern.compile(regex);
+ // return regex itself if it is of correct regex syntax
+ // i.e. compile did not fail with a PatternSyntaxException.
+ return regex;
+ }
+
+ private static PhoneMetadata loadCountryMetadata(String regionCode, Element element) {
+ PhoneMetadata metadata = new PhoneMetadata();
+ metadata.setId(regionCode);
+ metadata.setCountryCode(Integer.parseInt(element.getAttribute("countryCode")));
+ if (element.hasAttribute("leadingDigits")) {
+ metadata.setLeadingDigits(validateRE(element.getAttribute("leadingDigits")));
+ }
+ metadata.setInternationalPrefix(validateRE(element.getAttribute("internationalPrefix")));
+ if (element.hasAttribute("preferredInternationalPrefix")) {
+ String preferredInternationalPrefix = element.getAttribute("preferredInternationalPrefix");
+ metadata.setPreferredInternationalPrefix(preferredInternationalPrefix);
+ }
+ String nationalPrefix = "";
+ String nationalPrefixFormattingRule = "";
+ String carrierCodeFormattingRule = "";
+ if (element.hasAttribute("nationalPrefix")) {
+ nationalPrefix = element.getAttribute("nationalPrefix");
+ metadata.setNationalPrefix(nationalPrefix);
+ nationalPrefixFormattingRule =
+ validateRE(getNationalPrefixFormattingRuleFromElement(element, nationalPrefix));
+
+ if (element.hasAttribute("nationalPrefixForParsing")) {
+ metadata.setNationalPrefixForParsing(
+ validateRE(element.getAttribute("nationalPrefixForParsing")));
+ if (element.hasAttribute("nationalPrefixTransformRule")) {
+ metadata.setNationalPrefixTransformRule(
+ validateRE(element.getAttribute("nationalPrefixTransformRule")));
+ }
+ } else {
+ metadata.setNationalPrefixForParsing(nationalPrefix);
+ }
+ }
+ if (element.hasAttribute("preferredExtnPrefix")) {
+ metadata.setPreferredExtnPrefix(element.getAttribute("preferredExtnPrefix"));
+ }
+ if (element.hasAttribute("mainCountryForCode")) {
+ metadata.setMainCountryForCode(true);
+ }
+
+ // Extract availableFormats
+ NodeList numberFormatElements = element.getElementsByTagName("numberFormat");
+ int numOfFormatElements = numberFormatElements.getLength();
+ if (numOfFormatElements > 0) {
+ for (int i = 0; i < numOfFormatElements; i++) {
+ Element numberFormatElement = (Element) numberFormatElements.item(i);
+ NumberFormat format = new NumberFormat();
+ if (numberFormatElement.hasAttribute("nationalPrefixFormattingRule")) {
+ format.setNationalPrefixFormattingRule(validateRE(
+ getNationalPrefixFormattingRuleFromElement(numberFormatElement, nationalPrefix)));
+ } else {
+ format.setNationalPrefixFormattingRule(nationalPrefixFormattingRule);
+ }
+ if (numberFormatElement.hasAttribute("carrierCodeFormattingRule")) {
+ format.setDomesticCarrierCodeFormattingRule(validateRE(
+ getDomesticCarrierCodeFormattingRuleFromElement(numberFormatElement,
+ nationalPrefix)));
+ } else {
+ format.setDomesticCarrierCodeFormattingRule(carrierCodeFormattingRule);
+ }
+ setLeadingDigitsPatterns(numberFormatElement, format);
+ format.setPattern(validateRE(numberFormatElement.getAttribute("pattern")));
+ NodeList formatPattern = numberFormatElement.getElementsByTagName("format");
+ if (formatPattern.getLength() != 1) {
+ LOGGER.log(Level.SEVERE,
+ "Only one format pattern for a numberFormat element should be defined.");
+ throw new RuntimeException("Invalid number of format patterns for country: " +
+ regionCode);
+ }
+ format.setFormat(validateRE(formatPattern.item(0).getFirstChild().getNodeValue()));
+ metadata.addNumberFormat(format);
+ }
+ }
+
+ NodeList intlNumberFormatElements = element.getElementsByTagName("intlNumberFormat");
+ int numOfIntlFormatElements = intlNumberFormatElements.getLength();
+ if (numOfIntlFormatElements > 0) {
+ for (int i = 0; i < numOfIntlFormatElements; i++) {
+ Element numberFormatElement = (Element) intlNumberFormatElements.item(i);
+ NumberFormat format = new NumberFormat();
+ setLeadingDigitsPatterns(numberFormatElement, format);
+ format.setPattern(validateRE(numberFormatElement.getAttribute("pattern")));
+ NodeList formatPattern = numberFormatElement.getElementsByTagName("format");
+ if (formatPattern.getLength() != 1) {
+ LOGGER.log(Level.SEVERE,
+ "Only one format pattern for a numberFormat element should be defined.");
+ throw new RuntimeException("Invalid number of format patterns for country: " +
+ regionCode);
+ }
+ format.setFormat(validateRE(formatPattern.item(0).getFirstChild().getNodeValue()));
+ if (numberFormatElement.hasAttribute("carrierCodeFormattingRule")) {
+ format.setDomesticCarrierCodeFormattingRule(validateRE(
+ getDomesticCarrierCodeFormattingRuleFromElement(numberFormatElement,
+ nationalPrefix)));
+ } else {
+ format.setDomesticCarrierCodeFormattingRule(carrierCodeFormattingRule);
+ }
+ metadata.addIntlNumberFormat(format);
+ }
+ }
+
+ PhoneNumberDesc generalDesc = new PhoneNumberDesc();
+ generalDesc = processPhoneNumberDescElement(generalDesc, element, "generalDesc");
+ metadata.setGeneralDesc(generalDesc);
+ metadata.setFixedLine(processPhoneNumberDescElement(generalDesc, element, "fixedLine"));
+ metadata.setMobile(processPhoneNumberDescElement(generalDesc, element, "mobile"));
+ metadata.setTollFree(processPhoneNumberDescElement(generalDesc, element, "tollFree"));
+ metadata.setPremiumRate(processPhoneNumberDescElement(generalDesc, element, "premiumRate"));
+ metadata.setSharedCost(processPhoneNumberDescElement(generalDesc, element, "sharedCost"));
+ metadata.setVoip(processPhoneNumberDescElement(generalDesc, element, "voip"));
+ metadata.setPersonalNumber(processPhoneNumberDescElement(generalDesc, element,
+ "personalNumber"));
+ metadata.setPager(processPhoneNumberDescElement(generalDesc, element, "pager"));
+
+ if (metadata.getMobile().getNationalNumberPattern().equals(
+ metadata.getFixedLine().getNationalNumberPattern())) {
+ metadata.setSameMobileAndFixedLinePattern(true);
+ }
+ return metadata;
+ }
+
+ private static void setLeadingDigitsPatterns(Element numberFormatElement, NumberFormat format) {
+ NodeList leadingDigitsPatternNodes = numberFormatElement.getElementsByTagName("leadingDigits");
+ int numOfLeadingDigitsPatterns = leadingDigitsPatternNodes.getLength();
+ if (numOfLeadingDigitsPatterns > 0) {
+ for (int i = 0; i < numOfLeadingDigitsPatterns; i++) {
+ format.addLeadingDigitsPattern(
+ validateRE((leadingDigitsPatternNodes.item(i)).getFirstChild().getNodeValue()));
+ }
+ }
+ }
+
+ private static String getNationalPrefixFormattingRuleFromElement(Element element,
+ String nationalPrefix) {
+ String nationalPrefixFormattingRule = element.getAttribute("nationalPrefixFormattingRule");
+ // Replace $NP with national prefix and $FG with the first group ($1).
+ nationalPrefixFormattingRule =
+ nationalPrefixFormattingRule.replaceFirst("\\$NP", nationalPrefix)
+ .replaceFirst("\\$FG", "\\$1");
+ return nationalPrefixFormattingRule;
+ }
+
+ private static String getDomesticCarrierCodeFormattingRuleFromElement(Element element,
+ String nationalPrefix) {
+ String carrierCodeFormattingRule = element.getAttribute("carrierCodeFormattingRule");
+ // Replace $FG with the first group ($1) and $NP with the national prefix.
+ carrierCodeFormattingRule = carrierCodeFormattingRule.replaceFirst("\\$FG", "\\$1")
+ .replaceFirst("\\$NP", nationalPrefix);
+ return carrierCodeFormattingRule;
+ }
+
+ /**
+ * Processes a phone number description element from the XML file and returns it as a
+ * PhoneNumberDesc. If the description element is a fixed line or mobile number, the general
+ * description will be used to fill in the whole element if necessary, or any components that are
+ * missing. For all other types, the general description will only be used to fill in missing
+ * components if the type has a partial definition. For example, if no "tollFree" element exists,
+ * we assume there are no toll free numbers for that locale, and return a phone number description
+ * with "NA" for both the national and possible number patterns.
+ *
+ * @param generalDesc a generic phone number description that will be used to fill in missing
+ * parts of the description
+ * @param countryElement the XML element representing all the country information
+ * @param numberType the name of the number type, corresponding to the appropriate tag in the XML
+ * file with information about that type
+ * @return complete description of that phone number type
+ */
+ private static PhoneNumberDesc processPhoneNumberDescElement(PhoneNumberDesc generalDesc,
+ Element countryElement,
+ String numberType) {
+ NodeList phoneNumberDescList = countryElement.getElementsByTagName(numberType);
+ PhoneNumberDesc numberDesc = new PhoneNumberDesc();
+ if (phoneNumberDescList.getLength() == 0 &&
+ (!numberType.equals("fixedLine") && !numberType.equals("mobile") &&
+ !numberType.equals("generalDesc"))) {
+ numberDesc.setNationalNumberPattern("NA");
+ numberDesc.setPossibleNumberPattern("NA");
+ return numberDesc;
+ }
+ numberDesc.mergeFrom(generalDesc);
+ if (phoneNumberDescList.getLength() > 0) {
+ Element element = (Element) phoneNumberDescList.item(0);
+ NodeList possiblePattern = element.getElementsByTagName("possibleNumberPattern");
+ if (possiblePattern.getLength() > 0) {
+ numberDesc.setPossibleNumberPattern(
+ validateRE(possiblePattern.item(0).getFirstChild().getNodeValue()));
+ }
+
+ NodeList validPattern = element.getElementsByTagName("nationalNumberPattern");
+ if (validPattern.getLength() > 0) {
+ numberDesc.setNationalNumberPattern(
+ validateRE(validPattern.item(0).getFirstChild().getNodeValue()));
+ }
+
+ if (!liteBuild) {
+ NodeList exampleNumber = element.getElementsByTagName("exampleNumber");
+ if (exampleNumber.getLength() > 0) {
+ numberDesc.setExampleNumber(exampleNumber.item(0).getFirstChild().getNodeValue());
+ }
+ }
+ }
+ return numberDesc;
+ }
+}
diff --git a/java/resources/com/google/i18n/phonenumbers/BuildMetadataJsonFromXml.java b/java/resources/com/google/i18n/phonenumbers/BuildMetadataJsonFromXml.java
new file mode 100644
index 00000000..95952a71
--- /dev/null
+++ b/java/resources/com/google/i18n/phonenumbers/BuildMetadataJsonFromXml.java
@@ -0,0 +1,384 @@
+/*
+ * Copyright (C) 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.i18n.phonenumbers;
+
+import com.google.i18n.phonenumbers.Phonemetadata.NumberFormat;
+import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
+import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadataCollection;
+import com.google.i18n.phonenumbers.Phonemetadata.PhoneNumberDesc;
+
+import java.io.BufferedWriter;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.Formatter;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Tool to convert phone number metadata from the XML format to JSON format.
+ *
+ * @author Nikolaos Trogkanis
+ */
+public class BuildMetadataJsonFromXml {
+ private static final String NAMESPACE = "i18n.phonenumbers.metadata";
+
+ private static final String HELP_MESSAGE =
+ "Usage:\n" +
+ "BuildMetadataJsonFromXml <inputFile> <outputFile> [<liteBuild>]\n" +
+ "\n" +
+ "where:\n" +
+ " inputFile The input file containing phone number metadata in XML format.\n" +
+ " outputFile The output file to contain phone number metadata in JSON format.\n" +
+ " liteBuild Whether to generate the lite-version of the metadata (default:\n" +
+ " false). When set to true certain metadata will be omitted.\n" +
+ " At this moment, example numbers information is omitted.\n" +
+ "\n" +
+ "Example command line invocation:\n" +
+ "BuildMetadataJsonFromXml PhoneNumberMetadata.xml metadatalite.js true\n";
+
+ static final String COPYRIGHT_NOTICE =
+ "/*\n" +
+ " * @license\n" +
+ " * Copyright (C) 2010 Google Inc.\n" +
+ " *\n" +
+ " * Licensed under the Apache License, Version 2.0 (the \"License\");\n" +
+ " * you may not use this file except in compliance with the License.\n" +
+ " * You may obtain a copy of the License at\n" +
+ " *\n" +
+ " * http://www.apache.org/licenses/LICENSE-2.0\n" +
+ " *\n" +
+ " * Unless required by applicable law or agreed to in writing, software\n" +
+ " * distributed under the License is distributed on an \"AS IS\" BASIS,\n" +
+ " * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" +
+ " * See the License for the specific language governing permissions and\n" +
+ " * limitations under the License.\n" +
+ " */\n\n";
+
+ private static final String FILE_OVERVIEW =
+ "/**\n" +
+ " * @fileoverview Generated metadata for file\n" +
+ " * %s\n" +
+ " * @author Nikolaos Trogkanis\n" +
+ " */\n\n";
+
+ private static final String COUNTRY_CODE_TO_REGION_CODE_MAP_COMMENT =
+ "/**\n" +
+ " * A mapping from a country code to the region codes which denote the\n" +
+ " * country/region represented by that country code. In the case of multiple\n" +
+ " * countries sharing a calling code, such as the NANPA countries, the one\n" +
+ " * indicated with \"isMainCountryForCode\" in the metadata should be first.\n" +
+ " * @type {Object.<number, Array.<string>>}\n" +
+ " */\n";
+
+ private static final String COUNTRY_TO_METADATA_COMMENT =
+ "/**\n" +
+ " * A mapping from a region code to the PhoneMetadata for that region.\n" +
+ " * @type {Object.<string, Array>}\n" +
+ " */\n";
+
+ public static void main(String[] args) throws Exception {
+ if (args.length != 2 && args.length != 3) {
+ System.err.println(HELP_MESSAGE);
+ System.exit(1);
+ }
+ String inputFile = args[0];
+ String outputFile = args[1];
+ boolean liteBuild = args.length > 2 && args[2].equals("true");
+
+ PhoneMetadataCollection metadataCollection =
+ BuildMetadataFromXml.buildPhoneMetadataCollection(inputFile, liteBuild);
+ Map<Integer, List<String>> countryCodeToRegionCodeMap =
+ BuildMetadataFromXml.buildCountryCodeToRegionCodeMap(metadataCollection);
+
+ BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile));
+
+ writer.write(COPYRIGHT_NOTICE);
+ Formatter formatter = new Formatter(writer);
+ formatter.format(FILE_OVERVIEW, inputFile);
+
+ writer.write("goog.provide('" + NAMESPACE + "');\n\n");
+
+ writer.write(COUNTRY_CODE_TO_REGION_CODE_MAP_COMMENT);
+ writer.write(NAMESPACE + ".countryCodeToRegionCodeMap = ");
+ writeCountryCodeCodeToRegionCodeMap(countryCodeToRegionCodeMap, writer);
+ writer.write(";\n\n");
+
+ writer.write(COUNTRY_TO_METADATA_COMMENT);
+ writer.write(NAMESPACE + ".countryToMetadata = ");
+ writeCountryToMetadataMap(metadataCollection, writer);
+ writer.write(";\n");
+
+ writer.flush();
+ writer.close();
+ }
+
+ // Writes a PhoneMetadataCollection in JSON format.
+ private static void writeCountryToMetadataMap(PhoneMetadataCollection metadataCollection,
+ BufferedWriter writer) throws IOException {
+ writer.write("{\n");
+ boolean isFirstTimeInLoop = true;
+ for (PhoneMetadata metadata : metadataCollection.getMetadataList()) {
+ if (isFirstTimeInLoop) {
+ isFirstTimeInLoop = false;
+ } else {
+ writer.write(",");
+ }
+ String regionCode = metadata.getId();
+ JSArrayBuilder jsArrayBuilder = new JSArrayBuilder();
+ toJsArray(metadata, jsArrayBuilder);
+ writer.write("\"");
+ writer.write(regionCode);
+ writer.write("\":");
+ writer.write(jsArrayBuilder.toString());
+ }
+ writer.write("}");
+ }
+
+ // Writes a Map<Integer, List<String>> in JSON format.
+ private static void writeCountryCodeCodeToRegionCodeMap(
+ Map<Integer, List<String>> countryCodeToRegionCodeMap,
+ BufferedWriter writer) throws IOException {
+ writer.write("{\n");
+ boolean isFirstTimeInLoop = true;
+ for (Map.Entry<Integer, List<String>> entry : countryCodeToRegionCodeMap.entrySet()) {
+ if (isFirstTimeInLoop) {
+ isFirstTimeInLoop = false;
+ } else {
+ writer.write(",");
+ }
+ writer.write(Integer.toString(entry.getKey()));
+ writer.write(":");
+ JSArrayBuilder jsArrayBuilder = new JSArrayBuilder();
+ jsArrayBuilder.beginArray();
+ jsArrayBuilder.appendIterator(entry.getValue().iterator());
+ jsArrayBuilder.endArray();
+ writer.write(jsArrayBuilder.toString());
+ }
+ writer.write("}");
+ }
+
+ // Converts NumberFormat to JSArray.
+ private static void toJsArray(NumberFormat format, JSArrayBuilder jsArrayBuilder) {
+ jsArrayBuilder.beginArray();
+
+ // missing 0
+ jsArrayBuilder.append(null);
+ // required string pattern = 1;
+ jsArrayBuilder.append(format.getPattern());
+ // required string format = 2;
+ jsArrayBuilder.append(format.getFormat());
+ // repeated string leading_digits_pattern = 3;
+ int leadingDigitsPatternSize = format.getLeadingDigitsPatternCount();
+ if (leadingDigitsPatternSize > 0) {
+ jsArrayBuilder.beginArray();
+ for (int i = 0; i < leadingDigitsPatternSize; i++) {
+ jsArrayBuilder.append(format.getLeadingDigitsPattern(i));
+ }
+ jsArrayBuilder.endArray();
+ } else {
+ jsArrayBuilder.append(null);
+ }
+ // optional string national_prefix_formatting_rule = 4;
+ if (format.hasNationalPrefixFormattingRule()) {
+ jsArrayBuilder.append(format.getNationalPrefixFormattingRule());
+ } else {
+ jsArrayBuilder.append(null);
+ }
+ // optional string domestic_carrier_code_formatting_rule = 5;
+ if (format.hasDomesticCarrierCodeFormattingRule()) {
+ jsArrayBuilder.append(format.getDomesticCarrierCodeFormattingRule());
+ } else {
+ jsArrayBuilder.append(null);
+ }
+
+ jsArrayBuilder.endArray();
+ }
+
+ // Converts PhoneNumberDesc to JSArray.
+ private static void toJsArray(PhoneNumberDesc desc, JSArrayBuilder jsArrayBuilder) {
+ jsArrayBuilder.beginArray();
+
+ // missing 0
+ jsArrayBuilder.append(null);
+ // missing 1
+ jsArrayBuilder.append(null);
+ // optional string national_number_pattern = 2;
+ if (desc.hasNationalNumberPattern()) {
+ jsArrayBuilder.append(desc.getNationalNumberPattern());
+ } else {
+ jsArrayBuilder.append(null);
+ }
+ // optional string possible_number_pattern = 3;
+ if (desc.hasPossibleNumberPattern()) {
+ jsArrayBuilder.append(desc.getPossibleNumberPattern());
+ } else {
+ jsArrayBuilder.append(null);
+ }
+ // missing 4
+ jsArrayBuilder.append(null);
+ // missing 5
+ jsArrayBuilder.append(null);
+ // optional string example_number = 6;
+ if (desc.hasExampleNumber()) {
+ jsArrayBuilder.append(desc.getExampleNumber());
+ } else {
+ jsArrayBuilder.append(null);
+ }
+
+ jsArrayBuilder.endArray();
+ }
+
+ // Converts PhoneMetadata to JSArray.
+ private static void toJsArray(PhoneMetadata metadata, JSArrayBuilder jsArrayBuilder) {
+ jsArrayBuilder.beginArray();
+
+ // missing 0
+ jsArrayBuilder.append(null);
+ // required PhoneNumberDesc general_desc = 1;
+ if (metadata.hasGeneralDesc()) {
+ toJsArray(metadata.getGeneralDesc(), jsArrayBuilder);
+ } else {
+ jsArrayBuilder.append(null);
+ }
+ // required PhoneNumberDesc fixed_line = 2;
+ if (metadata.hasFixedLine()) {
+ toJsArray(metadata.getFixedLine(), jsArrayBuilder);
+ } else {
+ jsArrayBuilder.append(null);
+ }
+ // required PhoneNumberDesc mobile = 3;
+ if (metadata.hasMobile()) {
+ toJsArray(metadata.getMobile(), jsArrayBuilder);
+ } else {
+ jsArrayBuilder.append(null);
+ }
+ // required PhoneNumberDesc toll_free = 4;
+ if (metadata.hasTollFree()) {
+ toJsArray(metadata.getTollFree(), jsArrayBuilder);
+ } else {
+ jsArrayBuilder.append(null);
+ }
+ // required PhoneNumberDesc premium_rate = 5;
+ if (metadata.hasPremiumRate()) {
+ toJsArray(metadata.getPremiumRate(), jsArrayBuilder);
+ } else {
+ jsArrayBuilder.append(null);
+ }
+ // required PhoneNumberDesc shared_cost = 6;
+ if (metadata.hasSharedCost()) {
+ toJsArray(metadata.getSharedCost(), jsArrayBuilder);
+ } else {
+ jsArrayBuilder.append(null);
+ }
+ // required PhoneNumberDesc personal_number = 7;
+ if (metadata.hasPersonalNumber()) {
+ toJsArray(metadata.getPersonalNumber(), jsArrayBuilder);
+ } else {
+ jsArrayBuilder.append(null);
+ }
+ // required PhoneNumberDesc voip = 8;
+ if (metadata.hasVoip()) {
+ toJsArray(metadata.getVoip(), jsArrayBuilder);
+ } else {
+ jsArrayBuilder.append(null);
+ }
+
+ // required string id = 9;
+ jsArrayBuilder.append(metadata.getId());
+ // required int32 country_code = 10;
+ jsArrayBuilder.append(metadata.getCountryCode());
+ // required string international_prefix = 11;
+ jsArrayBuilder.append(metadata.getInternationalPrefix());
+
+ // optional string national_prefix = 12;
+ if (metadata.hasNationalPrefix()) {
+ jsArrayBuilder.append(metadata.getNationalPrefix());
+ } else {
+ jsArrayBuilder.append(null);
+ }
+ // optional string preferred_extn_prefix = 13;
+ if (metadata.hasPreferredExtnPrefix()) {
+ jsArrayBuilder.append(metadata.getPreferredExtnPrefix());
+ } else {
+ jsArrayBuilder.append(null);
+ }
+ // missing 14
+ jsArrayBuilder.append(null);
+ // optional string national_prefix_for_parsing = 15;
+ if (metadata.hasNationalPrefixForParsing()) {
+ jsArrayBuilder.append(metadata.getNationalPrefixForParsing());
+ } else {
+ jsArrayBuilder.append(null);
+ }
+ // optional string national_prefix_transform_rule = 16;
+ if (metadata.hasNationalPrefixTransformRule()) {
+ jsArrayBuilder.append(metadata.getNationalPrefixTransformRule());
+ } else {
+ jsArrayBuilder.append(null);
+ }
+ // optional string preferred_international_prefix = 17;
+ if (metadata.hasPreferredInternationalPrefix()) {
+ jsArrayBuilder.append(metadata.getPreferredInternationalPrefix());
+ } else {
+ jsArrayBuilder.append(null);
+ }
+ // optional bool same_mobile_and_fixed_line_pattern = 18 [default=false];
+ if (metadata.getSameMobileAndFixedLinePattern()) {
+ jsArrayBuilder.append(1);
+ } else {
+ jsArrayBuilder.append(null);
+ }
+ // repeated NumberFormat number_format = 19;
+ int numberFormatSize = metadata.getNumberFormatCount();
+ if (numberFormatSize > 0) {
+ jsArrayBuilder.beginArray();
+ for (int i = 0; i < numberFormatSize; i++) {
+ toJsArray(metadata.getNumberFormat(i), jsArrayBuilder);
+ }
+ jsArrayBuilder.endArray();
+ } else {
+ jsArrayBuilder.append(null);
+ }
+ // repeated NumberFormat intl_number_format = 20;
+ int intlNumberFormatSize = metadata.getIntlNumberFormatCount();
+ if (intlNumberFormatSize > 0) {
+ jsArrayBuilder.beginArray();
+ for (int i = 0; i < intlNumberFormatSize; i++) {
+ toJsArray(metadata.getIntlNumberFormat(i), jsArrayBuilder);
+ }
+ jsArrayBuilder.endArray();
+ } else {
+ jsArrayBuilder.append(null);
+ }
+ // missing 21
+ jsArrayBuilder.append(null);
+ // optional bool main_country_for_code = 22 [default=false];
+ if (metadata.getMainCountryForCode()) {
+ jsArrayBuilder.append(1);
+ } else {
+ jsArrayBuilder.append(null);
+ }
+ // optional string leading_digits = 23;
+ if (metadata.hasLeadingDigits()) {
+ jsArrayBuilder.append(metadata.getLeadingDigits());
+ } else {
+ jsArrayBuilder.append(null);
+ }
+
+ jsArrayBuilder.endArray();
+ }
+}
diff --git a/java/resources/com/google/i18n/phonenumbers/BuildMetadataProtoFromXml.java b/java/resources/com/google/i18n/phonenumbers/BuildMetadataProtoFromXml.java
index 7e3bcc18..6fa91245 100644
--- a/java/resources/com/google/i18n/phonenumbers/BuildMetadataProtoFromXml.java
+++ b/java/resources/com/google/i18n/phonenumbers/BuildMetadataProtoFromXml.java
@@ -16,275 +16,168 @@
package com.google.i18n.phonenumbers;
-import com.google.i18n.phonenumbers.Phonemetadata.NumberFormat;
import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadata;
import com.google.i18n.phonenumbers.Phonemetadata.PhoneMetadataCollection;
-import com.google.i18n.phonenumbers.Phonemetadata.PhoneNumberDesc;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-import java.io.File;
+import java.io.BufferedWriter;
import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
import java.io.ObjectOutputStream;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import java.util.regex.Pattern;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
+import java.util.Formatter;
+import java.util.List;
+import java.util.Map;
/**
- * Tool to convert phone number metadata from the XML format to protocol buffer format. It is
- * wrapped in the genrule of the BUILD file and run as a preprocessing step when building the
- * phone number library. Example command line invocation:
- *
- * ./BuildMetadataProtoFromXml PhoneNumberMetadata.xml PhoneNumberMetadataProto true
- *
- * When liteBuild flag is set to true, the outputFile generated omits certain metadata which is not
- * needed for clients using liteBuild. At this moment, example numbers information is omitted.
+ * Tool to convert phone number metadata from the XML format to protocol buffer format.
*
* @author Shaopeng Jia
*/
public class BuildMetadataProtoFromXml {
- private BuildMetadataProtoFromXml() {
- }
- private static final Logger LOGGER = Logger.getLogger(BuildMetadataProtoFromXml.class.getName());
- private static Boolean liteBuild;
+ private static final String PACKAGE_NAME = PhoneNumberUtil.class.getPackage().getName();
+
+ private static final String HELP_MESSAGE =
+ "Usage:\n" +
+ "BuildMetadataProtoFromXml <inputFile> <outputDir> <forTesting> [<liteBuild>]\n" +
+ "\n" +
+ "where:\n" +
+ " inputFile The input file containing phone number metadata in XML format.\n" +
+ " outputDir The output directory to store phone number metadata in proto\n" +
+ " format (one file per region) and the country code to region code\n" +
+ " mapping file.\n" +
+ " forTesting Flag whether to generate metadata for testing purposes or not.\n" +
+ " liteBuild Whether to generate the lite-version of the metadata (default:\n" +
+ " false). When set to true certain metadata will be omitted.\n" +
+ " At this moment, example numbers information is omitted.\n" +
+ "\n" +
+ "Metadata will be stored in:\n" +
+ " <outputDir>" + PhoneNumberUtil.META_DATA_FILE_PREFIX + "_*\n" +
+ "Mapping file will be stored in:\n" +
+ " <outputDir>/" + PACKAGE_NAME.replaceAll("\\.", "/") + "/" +
+ PhoneNumberUtil.COUNTRY_CODE_TO_REGION_CODE_MAP_CLASS_NAME + ".java\n" +
+ "\n" +
+ "Example command line invocation:\n" +
+ "BuildMetadataProtoFromXml PhoneNumberMetadata.xml src false false\n";
public static void main(String[] args) throws Exception {
+ if (args.length != 3 && args.length != 4) {
+ System.err.println(HELP_MESSAGE);
+ System.exit(1);
+ }
String inputFile = args[0];
- String filePrefix = args[1];
- liteBuild = args.length > 2 && Boolean.getBoolean(args[2]);
- File xmlFile = new File(inputFile);
+ String outputDir = args[1];
+ boolean forTesting = args[2].equals("true");
+ boolean liteBuild = args.length > 3 && args[3].equals("true");
+
+ String filePrefix;
+ if (forTesting) {
+ filePrefix = outputDir + PhoneNumberUtilTest.TEST_META_DATA_FILE_PREFIX;
+ } else {
+ filePrefix = outputDir + PhoneNumberUtil.META_DATA_FILE_PREFIX;
+ }
+
+ PhoneMetadataCollection metadataCollection =
+ BuildMetadataFromXml.buildPhoneMetadataCollection(inputFile, liteBuild);
- DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
- DocumentBuilder builder = builderFactory.newDocumentBuilder();
- Document document = builder.parse(xmlFile);
- document.getDocumentElement().normalize();
- Element rootElement = document.getDocumentElement();
- NodeList territory = rootElement.getElementsByTagName("territory");
- PhoneMetadataCollection metadataCollection = new PhoneMetadataCollection();
- int numOfTerritories = territory.getLength();
- for (int i = 0; i < numOfTerritories; i++) {
- Element territoryElement = (Element) territory.item(i);
- String regionCode = territoryElement.getAttribute("id");
- PhoneMetadata metadata = loadCountryMetadata(regionCode, territoryElement);
- metadataCollection.addMetadata(metadata);
+ for (PhoneMetadata metadata : metadataCollection.getMetadataList()) {
+ String regionCode = metadata.getId();
+ PhoneMetadataCollection outMetadataCollection = new PhoneMetadataCollection();
+ outMetadataCollection.addMetadata(metadata);
FileOutputStream outputForRegion = new FileOutputStream(filePrefix + "_" + regionCode);
ObjectOutputStream out = new ObjectOutputStream(outputForRegion);
- metadataCollection.writeExternal(out);
+ outMetadataCollection.writeExternal(out);
out.close();
- metadataCollection.clear();
- }
- }
-
- private static String validateRE(String regex) {
- Pattern.compile(regex);
- // return regex itself if it is of correct regex syntax
- return regex;
- }
-
- private static PhoneMetadata loadCountryMetadata(String regionCode, Element element) {
- PhoneMetadata metadata = new PhoneMetadata();
- metadata.setId(regionCode);
- metadata.setCountryCode(Integer.parseInt(element.getAttribute("countryCode")));
- if (element.hasAttribute("leadingDigits")) {
- metadata.setLeadingDigits(validateRE(element.getAttribute("leadingDigits")));
}
- metadata.setInternationalPrefix(validateRE(element.getAttribute("internationalPrefix")));
- if (element.hasAttribute("preferredInternationalPrefix")) {
- String preferredInternationalPrefix = element.getAttribute("preferredInternationalPrefix");
- metadata.setPreferredInternationalPrefix(preferredInternationalPrefix);
- }
- String nationalPrefix = "";
- String nationalPrefixFormattingRule = "";
- String carrierCodeFormattingRule = "";
- if (element.hasAttribute("nationalPrefix")) {
- nationalPrefix = element.getAttribute("nationalPrefix");
- metadata.setNationalPrefix(nationalPrefix);
- nationalPrefixFormattingRule =
- validateRE(getNationalPrefixFormattingRuleFromElement(element, nationalPrefix));
- if (element.hasAttribute("nationalPrefixForParsing")) {
- metadata.setNationalPrefixForParsing(
- validateRE(element.getAttribute("nationalPrefixForParsing")));
- if (element.hasAttribute("nationalPrefixTransformRule")) {
- metadata.setNationalPrefixTransformRule(
- element.getAttribute("nationalPrefixTransformRule"));
- }
- } else {
- metadata.setNationalPrefixForParsing(nationalPrefix);
- }
- }
- if (element.hasAttribute("preferredExtnPrefix")) {
- metadata.setPreferredExtnPrefix(element.getAttribute("preferredExtnPrefix"));
- }
-
- if (element.hasAttribute("mainCountryForCode")) {
- metadata.setMainCountryForCode(true);
- }
+ Map<Integer, List<String>> countryCodeToRegionCodeMap =
+ BuildMetadataFromXml.buildCountryCodeToRegionCodeMap(metadataCollection);
- // Extract availableFormats
- NodeList numberFormatElements = element.getElementsByTagName("numberFormat");
- int numOfFormatElements = numberFormatElements.getLength();
- if (numOfFormatElements > 0) {
- for (int i = 0; i < numOfFormatElements; i++) {
- Element numberFormatElement = (Element) numberFormatElements.item(i);
- NumberFormat format = new NumberFormat();
- if (numberFormatElement.hasAttribute("nationalPrefixFormattingRule")) {
- format.setNationalPrefixFormattingRule(validateRE(
- getNationalPrefixFormattingRuleFromElement(numberFormatElement, nationalPrefix)));
- } else {
- format.setNationalPrefixFormattingRule(nationalPrefixFormattingRule);
- }
- if (numberFormatElement.hasAttribute("carrierCodeFormattingRule")) {
- format.setDomesticCarrierCodeFormattingRule(validateRE(
- getDomesticCarrierCodeFormattingRuleFromElement(numberFormatElement,
- nationalPrefix)));
- } else {
- format.setDomesticCarrierCodeFormattingRule(carrierCodeFormattingRule);
- }
- setLeadingDigitsPatterns(numberFormatElement, format);
- format.setPattern(validateRE(numberFormatElement.getAttribute("pattern")));
- NodeList formatPattern = numberFormatElement.getElementsByTagName("format");
- if (formatPattern.getLength() != 1) {
- LOGGER.log(Level.SEVERE,
- "Only one format pattern for a numberFormat element should be defined.");
- throw new RuntimeException("Invalid number of format patterns for country: " +
- regionCode);
- }
- format.setFormat(validateRE(formatPattern.item(0).getFirstChild().getNodeValue()));
- metadata.addNumberFormat(format);
- }
- }
-
- NodeList intlNumberFormatElements = element.getElementsByTagName("intlNumberFormat");
- int numOfIntlFormatElements = intlNumberFormatElements.getLength();
- if (numOfIntlFormatElements > 0) {
- for (int i = 0; i < numOfIntlFormatElements; i++) {
- Element numberFormatElement = (Element) intlNumberFormatElements.item(i);
- NumberFormat format = new NumberFormat();
- setLeadingDigitsPatterns(numberFormatElement, format);
- format.setPattern(validateRE(numberFormatElement.getAttribute("pattern")));
- NodeList formatPattern = numberFormatElement.getElementsByTagName("format");
- if (formatPattern.getLength() != 1) {
- LOGGER.log(Level.SEVERE,
- "Only one format pattern for a numberFormat element should be defined.");
- throw new RuntimeException("Invalid number of format patterns for country: " +
- regionCode);
- }
- format.setFormat(validateRE(formatPattern.item(0).getFirstChild().getNodeValue()));
- if (numberFormatElement.hasAttribute("carrierCodeFormattingRule")) {
- format.setDomesticCarrierCodeFormattingRule(validateRE(
- getDomesticCarrierCodeFormattingRuleFromElement(numberFormatElement,
- nationalPrefix)));
- } else {
- format.setDomesticCarrierCodeFormattingRule(carrierCodeFormattingRule);
- }
- metadata.addIntlNumberFormat(format);
- }
- }
-
- PhoneNumberDesc generalDesc =
- processPhoneNumberDescElement(new PhoneNumberDesc(), element, "generalDesc");
- metadata.setGeneralDesc(generalDesc);
- metadata.setFixedLine(processPhoneNumberDescElement(generalDesc, element, "fixedLine"));
- metadata.setMobile(processPhoneNumberDescElement(generalDesc, element, "mobile"));
- metadata.setTollFree(processPhoneNumberDescElement(generalDesc, element, "tollFree"));
- metadata.setPremiumRate(processPhoneNumberDescElement(generalDesc, element, "premiumRate"));
- metadata.setSharedCost(processPhoneNumberDescElement(generalDesc, element, "sharedCost"));
- metadata.setVoip(processPhoneNumberDescElement(generalDesc, element, "voip"));
- metadata.setPersonalNumber(processPhoneNumberDescElement(generalDesc, element,
- "personalNumber"));
-
- if (metadata.getMobile().getNationalNumberPattern().equals(
- metadata.getFixedLine().getNationalNumberPattern())) {
- metadata.setSameMobileAndFixedLinePattern(true);
- }
- return metadata;
+ writeCountryCallingCodeMappingToJavaFile(countryCodeToRegionCodeMap, outputDir, forTesting);
}
- private static void setLeadingDigitsPatterns(Element numberFormatElement, NumberFormat format) {
- NodeList leadingDigitsPatternNodes = numberFormatElement.getElementsByTagName("leadingDigits");
- int numOfLeadingDigitsPatterns = leadingDigitsPatternNodes.getLength();
- if (numOfLeadingDigitsPatterns > 0) {
- for (int i = 0; i < numOfLeadingDigitsPatterns; i++) {
- format.addLeadingDigitsPattern(
- validateRE((leadingDigitsPatternNodes.item(i)).getFirstChild().getNodeValue()));
- }
+ static final String COPYRIGHT_NOTICE =
+ "/*\n" +
+ " * Copyright (C) 2010 Google Inc.\n" +
+ " *\n" +
+ " * Licensed under the Apache License, Version 2.0 (the \"License\");\n" +
+ " * you may not use this file except in compliance with the License.\n" +
+ " * You may obtain a copy of the License at\n" +
+ " *\n" +
+ " * http://www.apache.org/licenses/LICENSE-2.0\n" +
+ " *\n" +
+ " * Unless required by applicable law or agreed to in writing, software\n" +
+ " * distributed under the License is distributed on an \"AS IS\" BASIS,\n" +
+ " * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" +
+ " * See the License for the specific language governing permissions and\n" +
+ " * limitations under the License.\n" +
+ " *\n" +
+ " * This file is automatically generated by BuildMetadataProtoFromXml. Please\n" +
+ " * don't modify directly.\n" +
+ " */\n\n";
+ private static final String MAPPING_IMPORTS =
+ "import java.util.ArrayList;\n" +
+ "import java.util.HashMap;\n" +
+ "import java.util.List;\n" +
+ "import java.util.Map;\n";
+ private static final String MAPPING_COMMENT =
+ " // A mapping from a country code to the region codes which denote the\n" +
+ " // country/region represented by that country code. In the case of multiple\n" +
+ " // countries sharing a calling code, such as the NANPA countries, the one\n" +
+ " // indicated with \"isMainCountryForCode\" in the metadata should be first.\n";
+ private static final double MAPPING_LOAD_FACTOR = 0.75;
+ private static final String MAPPING_COMMENT_2 =
+ " // The capacity is set to %d as there are %d different country codes,\n" +
+ " // and this offers a load factor of roughly " + MAPPING_LOAD_FACTOR + ".\n";
+
+ private static void writeCountryCallingCodeMappingToJavaFile(
+ Map<Integer, List<String>> countryCodeToRegionCodeMap,
+ String outputDir, boolean forTesting) throws IOException {
+ String mappingClassName;
+ if (forTesting) {
+ mappingClassName = PhoneNumberUtilTest.TEST_COUNTRY_CODE_TO_REGION_CODE_MAP_CLASS_NAME;
+ } else {
+ mappingClassName = PhoneNumberUtil.COUNTRY_CODE_TO_REGION_CODE_MAP_CLASS_NAME;
}
- }
-
- private static String getNationalPrefixFormattingRuleFromElement(Element element,
- String nationalPrefix) {
- String nationalPrefixFormattingRule = element.getAttribute("nationalPrefixFormattingRule");
- // Replace $NP with national prefix and $FG with the first group ($1).
- nationalPrefixFormattingRule =
- nationalPrefixFormattingRule.replaceFirst("\\$NP", nationalPrefix)
- .replaceFirst("\\$FG", "\\$1");
- return nationalPrefixFormattingRule;
- }
+ String mappingFile =
+ outputDir + "/" + PACKAGE_NAME.replaceAll("\\.", "/") + "/" + mappingClassName + ".java";
+ int capacity = (int) (countryCodeToRegionCodeMap.size() / MAPPING_LOAD_FACTOR);
- private static String getDomesticCarrierCodeFormattingRuleFromElement(Element element,
- String nationalPrefix) {
- String carrierCodeFormattingRule = element.getAttribute("carrierCodeFormattingRule");
- // Replace $FG with the first group ($1) and $NP with the national prefix.
- carrierCodeFormattingRule = carrierCodeFormattingRule.replaceFirst("\\$FG", "\\$1")
- .replaceFirst("\\$NP", nationalPrefix);
- return carrierCodeFormattingRule;
- }
+ BufferedWriter writer = new BufferedWriter(new FileWriter(mappingFile));
- /**
- * Processes a phone number description element from the XML file and returns it as a
- * PhoneNumberDesc. If the description element is a fixed line or mobile number, the general
- * description will be used to fill in the whole element if necessary, or any components that are
- * missing. For all other types, the general description will only be used to fill in missing
- * components if the type has a partial definition. For example, if no "tollFree" element exists,
- * we assume there are no toll free numbers for that locale, and return a phone number description
- * with "NA" for both the national and possible number patterns.
- *
- * @param generalDesc a generic phone number description that will be used to fill in missing
- * parts of the description
- * @param countryElement the XML element representing all the country information
- * @param numberType the name of the number type, corresponding to the appropriate tag in the XML
- * file with information about that type
- * @return complete description of that phone number type
- */
- private static PhoneNumberDesc processPhoneNumberDescElement(PhoneNumberDesc generalDesc,
- Element countryElement,
- String numberType) {
- NodeList phoneNumberDescList = countryElement.getElementsByTagName(numberType);
- PhoneNumberDesc numberDesc = new PhoneNumberDesc();
- if (phoneNumberDescList.getLength() == 0 &&
- (!numberType.equals("fixedLine") && !numberType.equals("mobile") &&
- !numberType.equals("generalDesc"))) {
- numberDesc.setNationalNumberPattern("NA");
- numberDesc.setPossibleNumberPattern("NA");
- return numberDesc;
+ writer.write(COPYRIGHT_NOTICE);
+ if (PACKAGE_NAME.length() > 0) {
+ writer.write("package " + PACKAGE_NAME + ";\n\n");
}
- numberDesc.mergeFrom(generalDesc);
- if (phoneNumberDescList.getLength() > 0) {
- Element element = (Element) phoneNumberDescList.item(0);
- NodeList possiblePattern = element.getElementsByTagName("possibleNumberPattern");
- if (possiblePattern.getLength() > 0) {
- numberDesc.setPossibleNumberPattern(
- validateRE(possiblePattern.item(0).getFirstChild().getNodeValue()));
+ writer.write(MAPPING_IMPORTS);
+ writer.write("\n");
+ writer.write("public class " + mappingClassName + " {\n");
+ writer.write(MAPPING_COMMENT);
+ writer.write(" static Map<Integer, List<String>> getCountryCodeToRegionCodeMap() {\n");
+ Formatter formatter = new Formatter(writer);
+ formatter.format(MAPPING_COMMENT_2, capacity, countryCodeToRegionCodeMap.size());
+ writer.write(" Map<Integer, List<String>> countryCodeToRegionCodeMap =\n");
+ writer.write(" new HashMap<Integer, List<String>>(" + capacity + ");\n");
+ writer.write("\n");
+ writer.write(" ArrayList<String> listWithRegionCode;\n");
+ writer.write("\n");
+
+ for (Map.Entry<Integer, List<String>> entry : countryCodeToRegionCodeMap.entrySet()) {
+ int countryCallingCode = entry.getKey();
+ List<String> regionCodes = entry.getValue();
+ writer.write(" listWithRegionCode = new ArrayList<String>(" + regionCodes.size() + ");\n");
+ for (String regionCode : regionCodes) {
+ writer.write(" listWithRegionCode.add(\"" + regionCode + "\");\n");
}
+ writer.write(" countryCodeToRegionCodeMap.put(" + countryCallingCode +
+ ", listWithRegionCode);\n");
+ writer.write("\n");
+ }
- NodeList validPattern = element.getElementsByTagName("nationalNumberPattern");
- if (validPattern.getLength() > 0) {
- numberDesc.setNationalNumberPattern(
- validateRE(validPattern.item(0).getFirstChild().getNodeValue()));
- }
+ writer.write(" return countryCodeToRegionCodeMap;\n");
+ writer.write(" }\n");
+ writer.write("}\n");
- if (!liteBuild) {
- NodeList exampleNumber = element.getElementsByTagName("exampleNumber");
- if (exampleNumber.getLength() > 0) {
- numberDesc.setExampleNumber(exampleNumber.item(0).getFirstChild().getNodeValue());
- }
- }
- }
- return numberDesc;
+ writer.flush();
+ writer.close();
}
}
diff --git a/java/resources/com/google/i18n/phonenumbers/JSArrayBuilder.java b/java/resources/com/google/i18n/phonenumbers/JSArrayBuilder.java
new file mode 100644
index 00000000..9998f639
--- /dev/null
+++ b/java/resources/com/google/i18n/phonenumbers/JSArrayBuilder.java
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.i18n.phonenumbers;
+
+import java.util.Iterator;
+
+/**
+ * A sequence of elements representing a JavaScript Array. The principal operation on a
+ * JSArrayBuilder is the append method that appends an element to the array. To facilitate nesting
+ * beginArray and endArray are also supported. Example of a JSArray: ["a", ["b', "c"]].
+ *
+ * @author Nikolaos Trogkanis
+ */
+public class JSArrayBuilder implements CharSequence {
+ // Internal representation.
+ private StringBuilder data = new StringBuilder();
+ // Flag that keeps track whether the element being added to the array is the first element.
+ private boolean isFirstElement = true;
+
+ /**
+ * Begin a new element.
+ */
+ private void beginElement() {
+ if (!isFirstElement) {
+ data.append(',');
+ }
+ isFirstElement = false;
+ }
+
+ /**
+ * Begin a new array.
+ */
+ public JSArrayBuilder beginArray() {
+ beginElement();
+ data.append('[');
+ isFirstElement = true;
+ return this;
+ }
+
+ /**
+ * End an array.
+ */
+ public JSArrayBuilder endArray() {
+ trimTrailingCommas();
+ data.append("]\n");
+ isFirstElement = false;
+ return this;
+ }
+
+ /**
+ * Add a number to the array.
+ */
+ public JSArrayBuilder append(int number) {
+ return append(Integer.toString(number), false);
+ }
+
+ /**
+ * Add a string to the array.
+ */
+ public JSArrayBuilder append(String string) {
+ return append(string, true);
+ }
+
+ /**
+ * Add a collection of strings to the array.
+ */
+ public final JSArrayBuilder appendIterator(Iterator<String> iterator) {
+ while (iterator.hasNext()) {
+ append(iterator.next());
+ }
+ return this;
+ }
+
+ // Adds a string to the array with an option to escape the string or not.
+ private JSArrayBuilder append(String string, boolean escapeString) {
+ beginElement();
+ if (string != null) {
+ if (escapeString) {
+ escape(string, data);
+ } else {
+ data.append(string);
+ }
+ }
+ return this;
+ }
+
+ // Returns a string representing the data in this JSArray.
+ @Override public String toString() {
+ return data.toString();
+ }
+
+ // Double quotes a string and replaces "\" with "\\".
+ private static void escape(String str, StringBuilder out) {
+ out.append('"');
+ out.append(str.replaceAll("\\\\", "\\\\\\\\"));
+ out.append('"');
+ }
+
+ // Trims trailing commas.
+ private void trimTrailingCommas() {
+ int i = data.length();
+ while (i > 0 && data.charAt(i - 1) == ',') {
+ i--;
+ }
+ if (i < data.length()) {
+ data.delete(i, data.length());
+ }
+ }
+
+ @Override public char charAt(int index) {
+ return data.charAt(index);
+ }
+
+ @Override public int length() {
+ return data.length();
+ }
+
+ @Override public CharSequence subSequence(int start, int end) {
+ return data.subSequence(start, end);
+ }
+}
diff --git a/java/resources/com/google/i18n/phonenumbers/proto/phonemetadata.proto b/java/resources/com/google/i18n/phonenumbers/proto/phonemetadata.proto
index b3486abf..7968feb2 100644
--- a/java/resources/com/google/i18n/phonenumbers/proto/phonemetadata.proto
+++ b/java/resources/com/google/i18n/phonenumbers/proto/phonemetadata.proto
@@ -117,6 +117,7 @@ message PhoneMetadata {
required PhoneNumberDesc shared_cost = 6;
required PhoneNumberDesc personal_number = 7;
required PhoneNumberDesc voip = 8;
+ required PhoneNumberDesc pager = 21;
// The ISO 3166-1 alpha-2 representation of a country/region
required string id = 9;
diff --git a/java/resources/com/google/i18n/phonenumbers/src/PhoneNumberMetaData.xml b/java/resources/com/google/i18n/phonenumbers/src/PhoneNumberMetaData.xml
index f35e4f93..d94e95f8 100644
--- a/java/resources/com/google/i18n/phonenumbers/src/PhoneNumberMetaData.xml
+++ b/java/resources/com/google/i18n/phonenumbers/src/PhoneNumberMetaData.xml
@@ -35,7 +35,7 @@
<!ELEMENT phoneNumberMetadata (territories)>
<!ELEMENT territories (territory+)>
<!ELEMENT territory (availableFormats?, generalDesc?, fixedLine?, mobile?, tollFree?,
- premiumRate?, sharedCost?, personalNumber?, voip?)>
+ premiumRate?, sharedCost?, personalNumber?, voip?, pager?)>
<!ELEMENT generalDesc (nationalNumberPattern, possibleNumberPattern, exampleNumber?)>
<!ELEMENT fixedLine (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
<!ELEMENT mobile (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
@@ -44,6 +44,7 @@
<!ELEMENT sharedCost (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
<!ELEMENT personalNumber (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
<!ELEMENT voip (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
+ <!ELEMENT pager (nationalNumberPattern?, possibleNumberPattern?, exampleNumber?)>
<!ELEMENT availableFormats (numberFormat+, intlNumberFormat*)>
<!ELEMENT nationalNumberPattern (#PCDATA)>
<!ELEMENT possibleNumberPattern (#PCDATA)>
@@ -2659,13 +2660,16 @@
<format>$1 $2</format>
</numberFormat>
<!-- UK child line -->
- <numberFormat pattern="(800)(1111)">
+ <numberFormat pattern="(800)(\d{4})">
<leadingDigits>800</leadingDigits>
<leadingDigits>8001</leadingDigits>
+ <leadingDigits>80011</leadingDigits>
+ <leadingDigits>800111</leadingDigits>
+ <leadingDigits>8001111</leadingDigits>
<format>$1 $2</format>
</numberFormat>
<numberFormat pattern="(8\d{2})(\d{3})(\d{3,4})">
- <leadingDigits>8(?:0|4[3-5]|7[01])</leadingDigits>
+ <leadingDigits>8(?:0|4[3-5]|7[0-3])</leadingDigits>
<format>$1 $2 $3</format>
</numberFormat>
</availableFormats>
@@ -2818,7 +2822,7 @@
</generalDesc>
<fixedLine>
<nationalNumberPattern>1481\d{6}</nationalNumberPattern>
- <exampleNumber>1481123456</exampleNumber>
+ <exampleNumber>1481223456</exampleNumber>
</fixedLine>
<mobile>
<nationalNumberPattern>7(?:781|839|911)\d{6}</nationalNumberPattern>
@@ -2829,7 +2833,7 @@
<tollFree>
<nationalNumberPattern>80(?:01111|\d{7,8})|500\d{6}</nationalNumberPattern>
<possibleNumberPattern>\d{7,10}</possibleNumberPattern>
- <exampleNumber>8012345678</exampleNumber>
+ <exampleNumber>8001234567</exampleNumber>
</tollFree>
<premiumRate>
<nationalNumberPattern>(?:9[018]\d|87[1-3])\d{7}</nationalNumberPattern>
@@ -3585,7 +3589,7 @@
</generalDesc>
<fixedLine>
<nationalNumberPattern>1624\d{6}</nationalNumberPattern>
- <exampleNumber>1624123456</exampleNumber>
+ <exampleNumber>1624223456</exampleNumber>
</fixedLine>
<mobile>
<nationalNumberPattern>7[69]24\d{6}</nationalNumberPattern>
@@ -3595,7 +3599,7 @@
<tollFree>
<nationalNumberPattern>80(?:01111|\d{7,8})|500\d{6}</nationalNumberPattern>
<possibleNumberPattern>\d{7,10}</possibleNumberPattern>
- <exampleNumber>8012345678</exampleNumber>
+ <exampleNumber>8001234567</exampleNumber>
</tollFree>
<premiumRate>
<nationalNumberPattern>(?:9[018]\d|87[1-3])\d{7}</nationalNumberPattern>
@@ -3941,7 +3945,7 @@
</generalDesc>
<fixedLine>
<nationalNumberPattern>1534\d{6}</nationalNumberPattern>
- <exampleNumber>1534123456</exampleNumber>
+ <exampleNumber>1534223456</exampleNumber>
</fixedLine>
<mobile>
<nationalNumberPattern>7(?:7(?:00|97)|829|937)\d{6}</nationalNumberPattern>
@@ -3952,7 +3956,7 @@
<tollFree>
<nationalNumberPattern>80(?:01111|\d{7,8})|500\d{6}</nationalNumberPattern>
<possibleNumberPattern>\d{7,10}</possibleNumberPattern>
- <exampleNumber>8012345678</exampleNumber>
+ <exampleNumber>8001234567</exampleNumber>
</tollFree>
<premiumRate>
<nationalNumberPattern>(?:9[018]\d|87[1-3])\d{7}</nationalNumberPattern>
@@ -6575,7 +6579,7 @@
<leadingDigits>6</leadingDigits>
<format>$1 $2</format>
</numberFormat>
- <numberFormat pattern="([89]0\d)(\d{3,6})">
+ <numberFormat pattern="([89]\d{2})(\d{3,6})">
<leadingDigits>[89]</leadingDigits>
<format>$1 $2</format>
</numberFormat>
@@ -6617,11 +6621,11 @@
as http://www.minjust.ru/ru/structure/contact/. Contains formatting
instructions for Kazakhstan as well. -->
<numberFormat pattern="([34689]\d{2})(\d{3})(\d{2})(\d{2})">
- <leadingDigits>[34689]</leadingDigits>
+ <leadingDigits>[3489]</leadingDigits>
<format>$1 $2-$3-$4</format>
</numberFormat>
- <numberFormat pattern="([7]\d{2})(\d{3})(\d{4})">
- <leadingDigits>7</leadingDigits>
+ <numberFormat pattern="([67]\d{2})(\d{3})(\d{4})">
+ <leadingDigits>[67]</leadingDigits>
<format>$1 $2 $3</format>
</numberFormat>
</availableFormats>
diff --git a/java/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java b/java/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java
index 37e76292..b0e500de 100644
--- a/java/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java
+++ b/java/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java
@@ -323,8 +323,10 @@ public class AsYouTypeFormatter {
if (!ableToFormat) {
return originalPosition;
}
- int accruedInputIndex = 0, currentOutputIndex = 0;
- while (accruedInputIndex < positionToRemember) {
+ int accruedInputIndex = 0;
+ int currentOutputIndex = 0;
+ int currentOutputLength = currentOutput.length();
+ while (accruedInputIndex < positionToRemember && currentOutputIndex < currentOutputLength) {
if (accruedInputWithoutFormatting.charAt(accruedInputIndex) ==
currentOutput.charAt(currentOutputIndex)) {
accruedInputIndex++;
diff --git a/java/src/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMap.java b/java/src/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMap.java
new file mode 100644
index 00000000..86e7f0b1
--- /dev/null
+++ b/java/src/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMap.java
@@ -0,0 +1,889 @@
+/*
+ * Copyright (C) 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * This file is automatically generated by BuildMetadataProtoFromXml. Please
+ * don't modify directly.
+ */
+
+package com.google.i18n.phonenumbers;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class CountryCodeToRegionCodeMap {
+ // A mapping from a country code to the region codes which denote the
+ // country/region represented by that country code. In the case of multiple
+ // countries sharing a calling code, such as the NANPA countries, the one
+ // indicated with "isMainCountryForCode" in the metadata should be first.
+ static Map<Integer, List<String>> getCountryCodeToRegionCodeMap() {
+ // The capacity is set to 272 as there are 204 different country codes,
+ // and this offers a load factor of roughly 0.75.
+ Map<Integer, List<String>> countryCodeToRegionCodeMap =
+ new HashMap<Integer, List<String>>(272);
+
+ ArrayList<String> listWithRegionCode;
+
+ listWithRegionCode = new ArrayList<String>(24);
+ listWithRegionCode.add("US");
+ listWithRegionCode.add("AG");
+ listWithRegionCode.add("AI");
+ listWithRegionCode.add("AS");
+ listWithRegionCode.add("BB");
+ listWithRegionCode.add("BM");
+ listWithRegionCode.add("BS");
+ listWithRegionCode.add("CA");
+ listWithRegionCode.add("DM");
+ listWithRegionCode.add("DO");
+ listWithRegionCode.add("GD");
+ listWithRegionCode.add("GU");
+ listWithRegionCode.add("JM");
+ listWithRegionCode.add("KN");
+ listWithRegionCode.add("KY");
+ listWithRegionCode.add("LC");
+ listWithRegionCode.add("MP");
+ listWithRegionCode.add("MS");
+ listWithRegionCode.add("PR");
+ listWithRegionCode.add("TC");
+ listWithRegionCode.add("TT");
+ listWithRegionCode.add("VC");
+ listWithRegionCode.add("VG");
+ listWithRegionCode.add("VI");
+ countryCodeToRegionCodeMap.put(1, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(2);
+ listWithRegionCode.add("RU");
+ listWithRegionCode.add("KZ");
+ countryCodeToRegionCodeMap.put(7, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("EG");
+ countryCodeToRegionCodeMap.put(20, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("ZA");
+ countryCodeToRegionCodeMap.put(27, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("GR");
+ countryCodeToRegionCodeMap.put(30, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("NL");
+ countryCodeToRegionCodeMap.put(31, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("BE");
+ countryCodeToRegionCodeMap.put(32, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("FR");
+ countryCodeToRegionCodeMap.put(33, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("ES");
+ countryCodeToRegionCodeMap.put(34, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("HU");
+ countryCodeToRegionCodeMap.put(36, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("IT");
+ countryCodeToRegionCodeMap.put(39, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("RO");
+ countryCodeToRegionCodeMap.put(40, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("CH");
+ countryCodeToRegionCodeMap.put(41, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("AT");
+ countryCodeToRegionCodeMap.put(43, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(4);
+ listWithRegionCode.add("GB");
+ listWithRegionCode.add("GG");
+ listWithRegionCode.add("IM");
+ listWithRegionCode.add("JE");
+ countryCodeToRegionCodeMap.put(44, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("DK");
+ countryCodeToRegionCodeMap.put(45, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("SE");
+ countryCodeToRegionCodeMap.put(46, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("NO");
+ countryCodeToRegionCodeMap.put(47, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("PL");
+ countryCodeToRegionCodeMap.put(48, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("DE");
+ countryCodeToRegionCodeMap.put(49, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("PE");
+ countryCodeToRegionCodeMap.put(51, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("MX");
+ countryCodeToRegionCodeMap.put(52, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("CU");
+ countryCodeToRegionCodeMap.put(53, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("AR");
+ countryCodeToRegionCodeMap.put(54, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("BR");
+ countryCodeToRegionCodeMap.put(55, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("CL");
+ countryCodeToRegionCodeMap.put(56, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("CO");
+ countryCodeToRegionCodeMap.put(57, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("VE");
+ countryCodeToRegionCodeMap.put(58, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("MY");
+ countryCodeToRegionCodeMap.put(60, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("AU");
+ countryCodeToRegionCodeMap.put(61, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("ID");
+ countryCodeToRegionCodeMap.put(62, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("PH");
+ countryCodeToRegionCodeMap.put(63, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("NZ");
+ countryCodeToRegionCodeMap.put(64, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("SG");
+ countryCodeToRegionCodeMap.put(65, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("TH");
+ countryCodeToRegionCodeMap.put(66, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("JP");
+ countryCodeToRegionCodeMap.put(81, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("KR");
+ countryCodeToRegionCodeMap.put(82, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("VN");
+ countryCodeToRegionCodeMap.put(84, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("CN");
+ countryCodeToRegionCodeMap.put(86, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("TR");
+ countryCodeToRegionCodeMap.put(90, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("IN");
+ countryCodeToRegionCodeMap.put(91, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("PK");
+ countryCodeToRegionCodeMap.put(92, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("AF");
+ countryCodeToRegionCodeMap.put(93, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("LK");
+ countryCodeToRegionCodeMap.put(94, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("MM");
+ countryCodeToRegionCodeMap.put(95, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("IR");
+ countryCodeToRegionCodeMap.put(98, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("MA");
+ countryCodeToRegionCodeMap.put(212, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("DZ");
+ countryCodeToRegionCodeMap.put(213, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("TN");
+ countryCodeToRegionCodeMap.put(216, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("LY");
+ countryCodeToRegionCodeMap.put(218, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("GM");
+ countryCodeToRegionCodeMap.put(220, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("SN");
+ countryCodeToRegionCodeMap.put(221, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("MR");
+ countryCodeToRegionCodeMap.put(222, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("ML");
+ countryCodeToRegionCodeMap.put(223, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("GN");
+ countryCodeToRegionCodeMap.put(224, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("CI");
+ countryCodeToRegionCodeMap.put(225, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("BF");
+ countryCodeToRegionCodeMap.put(226, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("NE");
+ countryCodeToRegionCodeMap.put(227, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("TG");
+ countryCodeToRegionCodeMap.put(228, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("BJ");
+ countryCodeToRegionCodeMap.put(229, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("MU");
+ countryCodeToRegionCodeMap.put(230, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("LR");
+ countryCodeToRegionCodeMap.put(231, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("SL");
+ countryCodeToRegionCodeMap.put(232, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("GH");
+ countryCodeToRegionCodeMap.put(233, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("NG");
+ countryCodeToRegionCodeMap.put(234, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("TD");
+ countryCodeToRegionCodeMap.put(235, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("CF");
+ countryCodeToRegionCodeMap.put(236, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("CM");
+ countryCodeToRegionCodeMap.put(237, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("CV");
+ countryCodeToRegionCodeMap.put(238, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("ST");
+ countryCodeToRegionCodeMap.put(239, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("GQ");
+ countryCodeToRegionCodeMap.put(240, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("GA");
+ countryCodeToRegionCodeMap.put(241, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("CG");
+ countryCodeToRegionCodeMap.put(242, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("CD");
+ countryCodeToRegionCodeMap.put(243, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("AO");
+ countryCodeToRegionCodeMap.put(244, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("GW");
+ countryCodeToRegionCodeMap.put(245, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("IO");
+ countryCodeToRegionCodeMap.put(246, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("SC");
+ countryCodeToRegionCodeMap.put(248, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("SD");
+ countryCodeToRegionCodeMap.put(249, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("RW");
+ countryCodeToRegionCodeMap.put(250, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("ET");
+ countryCodeToRegionCodeMap.put(251, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("SO");
+ countryCodeToRegionCodeMap.put(252, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("DJ");
+ countryCodeToRegionCodeMap.put(253, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("KE");
+ countryCodeToRegionCodeMap.put(254, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("TZ");
+ countryCodeToRegionCodeMap.put(255, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("UG");
+ countryCodeToRegionCodeMap.put(256, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("BI");
+ countryCodeToRegionCodeMap.put(257, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("MZ");
+ countryCodeToRegionCodeMap.put(258, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("ZM");
+ countryCodeToRegionCodeMap.put(260, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("MG");
+ countryCodeToRegionCodeMap.put(261, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(3);
+ listWithRegionCode.add("RE");
+ listWithRegionCode.add("TF");
+ listWithRegionCode.add("YT");
+ countryCodeToRegionCodeMap.put(262, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("ZW");
+ countryCodeToRegionCodeMap.put(263, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("NA");
+ countryCodeToRegionCodeMap.put(264, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("MW");
+ countryCodeToRegionCodeMap.put(265, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("LS");
+ countryCodeToRegionCodeMap.put(266, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("BW");
+ countryCodeToRegionCodeMap.put(267, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("SZ");
+ countryCodeToRegionCodeMap.put(268, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("KM");
+ countryCodeToRegionCodeMap.put(269, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("SH");
+ countryCodeToRegionCodeMap.put(290, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("ER");
+ countryCodeToRegionCodeMap.put(291, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("AW");
+ countryCodeToRegionCodeMap.put(297, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("FO");
+ countryCodeToRegionCodeMap.put(298, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("GL");
+ countryCodeToRegionCodeMap.put(299, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("GI");
+ countryCodeToRegionCodeMap.put(350, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("PT");
+ countryCodeToRegionCodeMap.put(351, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("LU");
+ countryCodeToRegionCodeMap.put(352, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("IE");
+ countryCodeToRegionCodeMap.put(353, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("IS");
+ countryCodeToRegionCodeMap.put(354, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("AL");
+ countryCodeToRegionCodeMap.put(355, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("MT");
+ countryCodeToRegionCodeMap.put(356, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("CY");
+ countryCodeToRegionCodeMap.put(357, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("FI");
+ countryCodeToRegionCodeMap.put(358, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("BG");
+ countryCodeToRegionCodeMap.put(359, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("LT");
+ countryCodeToRegionCodeMap.put(370, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("LV");
+ countryCodeToRegionCodeMap.put(371, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("EE");
+ countryCodeToRegionCodeMap.put(372, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("MD");
+ countryCodeToRegionCodeMap.put(373, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("AM");
+ countryCodeToRegionCodeMap.put(374, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("BY");
+ countryCodeToRegionCodeMap.put(375, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("AD");
+ countryCodeToRegionCodeMap.put(376, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("MC");
+ countryCodeToRegionCodeMap.put(377, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("SM");
+ countryCodeToRegionCodeMap.put(378, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("VA");
+ countryCodeToRegionCodeMap.put(379, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("UA");
+ countryCodeToRegionCodeMap.put(380, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("RS");
+ countryCodeToRegionCodeMap.put(381, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("ME");
+ countryCodeToRegionCodeMap.put(382, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("HR");
+ countryCodeToRegionCodeMap.put(385, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("SI");
+ countryCodeToRegionCodeMap.put(386, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("BA");
+ countryCodeToRegionCodeMap.put(387, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("MK");
+ countryCodeToRegionCodeMap.put(389, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("CZ");
+ countryCodeToRegionCodeMap.put(420, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("SK");
+ countryCodeToRegionCodeMap.put(421, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("LI");
+ countryCodeToRegionCodeMap.put(423, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("FK");
+ countryCodeToRegionCodeMap.put(500, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("BZ");
+ countryCodeToRegionCodeMap.put(501, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("GT");
+ countryCodeToRegionCodeMap.put(502, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("SV");
+ countryCodeToRegionCodeMap.put(503, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("HN");
+ countryCodeToRegionCodeMap.put(504, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("NI");
+ countryCodeToRegionCodeMap.put(505, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("CR");
+ countryCodeToRegionCodeMap.put(506, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("PA");
+ countryCodeToRegionCodeMap.put(507, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("PM");
+ countryCodeToRegionCodeMap.put(508, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("HT");
+ countryCodeToRegionCodeMap.put(509, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(3);
+ listWithRegionCode.add("GP");
+ listWithRegionCode.add("BL");
+ listWithRegionCode.add("MF");
+ countryCodeToRegionCodeMap.put(590, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("BO");
+ countryCodeToRegionCodeMap.put(591, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("GY");
+ countryCodeToRegionCodeMap.put(592, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("EC");
+ countryCodeToRegionCodeMap.put(593, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("GF");
+ countryCodeToRegionCodeMap.put(594, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("PY");
+ countryCodeToRegionCodeMap.put(595, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("MQ");
+ countryCodeToRegionCodeMap.put(596, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("SR");
+ countryCodeToRegionCodeMap.put(597, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("UY");
+ countryCodeToRegionCodeMap.put(598, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("AN");
+ countryCodeToRegionCodeMap.put(599, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("TL");
+ countryCodeToRegionCodeMap.put(670, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("NF");
+ countryCodeToRegionCodeMap.put(672, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("BN");
+ countryCodeToRegionCodeMap.put(673, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("NR");
+ countryCodeToRegionCodeMap.put(674, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("PG");
+ countryCodeToRegionCodeMap.put(675, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("TO");
+ countryCodeToRegionCodeMap.put(676, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("SB");
+ countryCodeToRegionCodeMap.put(677, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("VU");
+ countryCodeToRegionCodeMap.put(678, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("FJ");
+ countryCodeToRegionCodeMap.put(679, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("PW");
+ countryCodeToRegionCodeMap.put(680, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("WF");
+ countryCodeToRegionCodeMap.put(681, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("CK");
+ countryCodeToRegionCodeMap.put(682, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("NU");
+ countryCodeToRegionCodeMap.put(683, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("WS");
+ countryCodeToRegionCodeMap.put(685, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("KI");
+ countryCodeToRegionCodeMap.put(686, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("NC");
+ countryCodeToRegionCodeMap.put(687, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("TV");
+ countryCodeToRegionCodeMap.put(688, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("PF");
+ countryCodeToRegionCodeMap.put(689, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("TK");
+ countryCodeToRegionCodeMap.put(690, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("FM");
+ countryCodeToRegionCodeMap.put(691, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("MH");
+ countryCodeToRegionCodeMap.put(692, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("KP");
+ countryCodeToRegionCodeMap.put(850, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("HK");
+ countryCodeToRegionCodeMap.put(852, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("MO");
+ countryCodeToRegionCodeMap.put(853, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("KH");
+ countryCodeToRegionCodeMap.put(855, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("LA");
+ countryCodeToRegionCodeMap.put(856, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("BD");
+ countryCodeToRegionCodeMap.put(880, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("TW");
+ countryCodeToRegionCodeMap.put(886, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("MV");
+ countryCodeToRegionCodeMap.put(960, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("LB");
+ countryCodeToRegionCodeMap.put(961, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("JO");
+ countryCodeToRegionCodeMap.put(962, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("SY");
+ countryCodeToRegionCodeMap.put(963, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("IQ");
+ countryCodeToRegionCodeMap.put(964, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("KW");
+ countryCodeToRegionCodeMap.put(965, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("SA");
+ countryCodeToRegionCodeMap.put(966, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("YE");
+ countryCodeToRegionCodeMap.put(967, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("OM");
+ countryCodeToRegionCodeMap.put(968, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("PS");
+ countryCodeToRegionCodeMap.put(970, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("AE");
+ countryCodeToRegionCodeMap.put(971, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("IL");
+ countryCodeToRegionCodeMap.put(972, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("BH");
+ countryCodeToRegionCodeMap.put(973, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("QA");
+ countryCodeToRegionCodeMap.put(974, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("BT");
+ countryCodeToRegionCodeMap.put(975, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("MN");
+ countryCodeToRegionCodeMap.put(976, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("NP");
+ countryCodeToRegionCodeMap.put(977, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("TJ");
+ countryCodeToRegionCodeMap.put(992, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("TM");
+ countryCodeToRegionCodeMap.put(993, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("AZ");
+ countryCodeToRegionCodeMap.put(994, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("GE");
+ countryCodeToRegionCodeMap.put(995, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("KG");
+ countryCodeToRegionCodeMap.put(996, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("UZ");
+ countryCodeToRegionCodeMap.put(998, listWithRegionCode);
+
+ return countryCodeToRegionCodeMap;
+ }
+}
diff --git a/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java b/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java
index 12a51c0e..b51ac673 100644
--- a/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java
+++ b/java/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java
@@ -50,8 +50,10 @@ public class PhoneNumberUtil {
// The minimum and maximum length of the national significant number.
private static final int MIN_LENGTH_FOR_NSN = 3;
private static final int MAX_LENGTH_FOR_NSN = 15;
- private static final String META_DATA_FILE_PREFIX =
+ static final String META_DATA_FILE_PREFIX =
"/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto";
+ static final String COUNTRY_CODE_TO_REGION_CODE_MAP_CLASS_NAME =
+ "CountryCodeToRegionCodeMap";
private String currentFilePrefix = META_DATA_FILE_PREFIX;
private static final Logger LOGGER = Logger.getLogger(PhoneNumberUtil.class.getName());
@@ -59,11 +61,7 @@ public class PhoneNumberUtil {
// represented by that country code. In the case of multiple countries sharing a calling code,
// such as the NANPA countries, the one indicated with "isMainCountryForCode" in the metadata
// should be first.
- // The initial capacity is set to 300 as there are roughly 200 different
- // country codes, and this offers a load factor of roughly 0.75.
-
- private Map<Integer, List<String> > countryCodeToRegionCodeMap =
- new HashMap<Integer, List<String> >(300);
+ private Map<Integer, List<String>> countryCodeToRegionCodeMap = null;
// The set of countries the library supports.
// There are roughly 220 of them and we set the initial capacity of the HashSet to 300 to offer a
@@ -326,6 +324,7 @@ public class PhoneNumberUtil {
// MOBILE or FIXED_LINE number. Some more information can be found here:
// http://en.wikipedia.org/wiki/Personal_Numbers
PERSONAL_NUMBER,
+ PAGER,
// A phone number is of type UNKNOWN when it does not fit any of the known patterns for a
// specific country.
UNKNOWN
@@ -357,860 +356,10 @@ public class PhoneNumberUtil {
private PhoneNumberUtil() {
}
- private void initializeCountryCodeToRegionCodeMap() {
- countryCodeToRegionCodeMap.clear();
- ArrayList<String> listWithRegionCode = new ArrayList<String>(24);
- listWithRegionCode.add("US");
- listWithRegionCode.add("AG");
- listWithRegionCode.add("AI");
- listWithRegionCode.add("AS");
- listWithRegionCode.add("BB");
- listWithRegionCode.add("BM");
- listWithRegionCode.add("BS");
- listWithRegionCode.add("CA");
- listWithRegionCode.add("DM");
- listWithRegionCode.add("DO");
- listWithRegionCode.add("GD");
- listWithRegionCode.add("GU");
- listWithRegionCode.add("JM");
- listWithRegionCode.add("KN");
- listWithRegionCode.add("KY");
- listWithRegionCode.add("LC");
- listWithRegionCode.add("MP");
- listWithRegionCode.add("MS");
- listWithRegionCode.add("PR");
- listWithRegionCode.add("TC");
- listWithRegionCode.add("TT");
- listWithRegionCode.add("VC");
- listWithRegionCode.add("VG");
- listWithRegionCode.add("VI");
- countryCodeToRegionCodeMap.put(1, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(2);
- listWithRegionCode.add("RU");
- listWithRegionCode.add("KZ");
- countryCodeToRegionCodeMap.put(7, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("EG");
- countryCodeToRegionCodeMap.put(20, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("ZA");
- countryCodeToRegionCodeMap.put(27, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("NL");
- countryCodeToRegionCodeMap.put(31, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("GR");
- countryCodeToRegionCodeMap.put(30, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("ES");
- countryCodeToRegionCodeMap.put(34, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("BE");
- countryCodeToRegionCodeMap.put(32, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("FR");
- countryCodeToRegionCodeMap.put(33, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("IT");
- countryCodeToRegionCodeMap.put(39, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("HU");
- countryCodeToRegionCodeMap.put(36, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("AT");
- countryCodeToRegionCodeMap.put(43, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("RO");
- countryCodeToRegionCodeMap.put(40, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("CH");
- countryCodeToRegionCodeMap.put(41, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("SE");
- countryCodeToRegionCodeMap.put(46, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("NO");
- countryCodeToRegionCodeMap.put(47, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(4);
- listWithRegionCode.add("GB");
- listWithRegionCode.add("GG");
- listWithRegionCode.add("IM");
- listWithRegionCode.add("JE");
- countryCodeToRegionCodeMap.put(44, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("DK");
- countryCodeToRegionCodeMap.put(45, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("PE");
- countryCodeToRegionCodeMap.put(51, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("DE");
- countryCodeToRegionCodeMap.put(49, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("PL");
- countryCodeToRegionCodeMap.put(48, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("BR");
- countryCodeToRegionCodeMap.put(55, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("AR");
- countryCodeToRegionCodeMap.put(54, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("CU");
- countryCodeToRegionCodeMap.put(53, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("MX");
- countryCodeToRegionCodeMap.put(52, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("VE");
- countryCodeToRegionCodeMap.put(58, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("CO");
- countryCodeToRegionCodeMap.put(57, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("CL");
- countryCodeToRegionCodeMap.put(56, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("PH");
- countryCodeToRegionCodeMap.put(63, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("ID");
- countryCodeToRegionCodeMap.put(62, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("AU");
- countryCodeToRegionCodeMap.put(61, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("MY");
- countryCodeToRegionCodeMap.put(60, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("NZ");
- countryCodeToRegionCodeMap.put(64, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("SG");
- countryCodeToRegionCodeMap.put(65, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("TH");
- countryCodeToRegionCodeMap.put(66, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("VN");
- countryCodeToRegionCodeMap.put(84, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("CN");
- countryCodeToRegionCodeMap.put(86, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("JP");
- countryCodeToRegionCodeMap.put(81, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("KR");
- countryCodeToRegionCodeMap.put(82, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("AF");
- countryCodeToRegionCodeMap.put(93, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("PK");
- countryCodeToRegionCodeMap.put(92, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("MM");
- countryCodeToRegionCodeMap.put(95, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("LK");
- countryCodeToRegionCodeMap.put(94, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("IN");
- countryCodeToRegionCodeMap.put(91, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("TR");
- countryCodeToRegionCodeMap.put(90, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("IR");
- countryCodeToRegionCodeMap.put(98, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(3);
- listWithRegionCode.add("GP");
- listWithRegionCode.add("BL");
- listWithRegionCode.add("MF");
- countryCodeToRegionCodeMap.put(590, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("BO");
- countryCodeToRegionCodeMap.put(591, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("EC");
- countryCodeToRegionCodeMap.put(593, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("GY");
- countryCodeToRegionCodeMap.put(592, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("PY");
- countryCodeToRegionCodeMap.put(595, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("GF");
- countryCodeToRegionCodeMap.put(594, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("SR");
- countryCodeToRegionCodeMap.put(597, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("MQ");
- countryCodeToRegionCodeMap.put(596, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("AN");
- countryCodeToRegionCodeMap.put(599, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("UY");
- countryCodeToRegionCodeMap.put(598, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("NC");
- countryCodeToRegionCodeMap.put(687, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("KI");
- countryCodeToRegionCodeMap.put(686, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("WS");
- countryCodeToRegionCodeMap.put(685, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("NU");
- countryCodeToRegionCodeMap.put(683, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("CK");
- countryCodeToRegionCodeMap.put(682, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("WF");
- countryCodeToRegionCodeMap.put(681, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("PW");
- countryCodeToRegionCodeMap.put(680, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("FJ");
- countryCodeToRegionCodeMap.put(679, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("VU");
- countryCodeToRegionCodeMap.put(678, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("SB");
- countryCodeToRegionCodeMap.put(677, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("TO");
- countryCodeToRegionCodeMap.put(676, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("PG");
- countryCodeToRegionCodeMap.put(675, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("NR");
- countryCodeToRegionCodeMap.put(674, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("BN");
- countryCodeToRegionCodeMap.put(673, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("NF");
- countryCodeToRegionCodeMap.put(672, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("MH");
- countryCodeToRegionCodeMap.put(692, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("TK");
- countryCodeToRegionCodeMap.put(690, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("FM");
- countryCodeToRegionCodeMap.put(691, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("TV");
- countryCodeToRegionCodeMap.put(688, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("PF");
- countryCodeToRegionCodeMap.put(689, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("TL");
- countryCodeToRegionCodeMap.put(670, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("GM");
- countryCodeToRegionCodeMap.put(220, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("SN");
- countryCodeToRegionCodeMap.put(221, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("MR");
- countryCodeToRegionCodeMap.put(222, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("ML");
- countryCodeToRegionCodeMap.put(223, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("TN");
- countryCodeToRegionCodeMap.put(216, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("LY");
- countryCodeToRegionCodeMap.put(218, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("MA");
- countryCodeToRegionCodeMap.put(212, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("DZ");
- countryCodeToRegionCodeMap.put(213, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("ST");
- countryCodeToRegionCodeMap.put(239, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("CV");
- countryCodeToRegionCodeMap.put(238, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("CM");
- countryCodeToRegionCodeMap.put(237, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("CF");
- countryCodeToRegionCodeMap.put(236, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("TD");
- countryCodeToRegionCodeMap.put(235, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("NG");
- countryCodeToRegionCodeMap.put(234, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("GH");
- countryCodeToRegionCodeMap.put(233, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("SL");
- countryCodeToRegionCodeMap.put(232, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("LR");
- countryCodeToRegionCodeMap.put(231, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("MU");
- countryCodeToRegionCodeMap.put(230, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("BJ");
- countryCodeToRegionCodeMap.put(229, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("TG");
- countryCodeToRegionCodeMap.put(228, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("NE");
- countryCodeToRegionCodeMap.put(227, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("BF");
- countryCodeToRegionCodeMap.put(226, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("CI");
- countryCodeToRegionCodeMap.put(225, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("GN");
- countryCodeToRegionCodeMap.put(224, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("KE");
- countryCodeToRegionCodeMap.put(254, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("TZ");
- countryCodeToRegionCodeMap.put(255, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("SO");
- countryCodeToRegionCodeMap.put(252, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("DJ");
- countryCodeToRegionCodeMap.put(253, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("RW");
- countryCodeToRegionCodeMap.put(250, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("ET");
- countryCodeToRegionCodeMap.put(251, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("SC");
- countryCodeToRegionCodeMap.put(248, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("SD");
- countryCodeToRegionCodeMap.put(249, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("IO");
- countryCodeToRegionCodeMap.put(246, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("AO");
- countryCodeToRegionCodeMap.put(244, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("GW");
- countryCodeToRegionCodeMap.put(245, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("CG");
- countryCodeToRegionCodeMap.put(242, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("CD");
- countryCodeToRegionCodeMap.put(243, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("GQ");
- countryCodeToRegionCodeMap.put(240, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("GA");
- countryCodeToRegionCodeMap.put(241, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("MZ");
- countryCodeToRegionCodeMap.put(258, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("UG");
- countryCodeToRegionCodeMap.put(256, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("BI");
- countryCodeToRegionCodeMap.put(257, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(3);
- listWithRegionCode.add("RE");
- listWithRegionCode.add("TF");
- listWithRegionCode.add("YT");
- countryCodeToRegionCodeMap.put(262, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("ZW");
- countryCodeToRegionCodeMap.put(263, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("ZM");
- countryCodeToRegionCodeMap.put(260, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("MG");
- countryCodeToRegionCodeMap.put(261, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("LS");
- countryCodeToRegionCodeMap.put(266, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("BW");
- countryCodeToRegionCodeMap.put(267, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("NA");
- countryCodeToRegionCodeMap.put(264, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("MW");
- countryCodeToRegionCodeMap.put(265, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("SZ");
- countryCodeToRegionCodeMap.put(268, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("KM");
- countryCodeToRegionCodeMap.put(269, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("SH");
- countryCodeToRegionCodeMap.put(290, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("ER");
- countryCodeToRegionCodeMap.put(291, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("AW");
- countryCodeToRegionCodeMap.put(297, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("FO");
- countryCodeToRegionCodeMap.put(298, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("GL");
- countryCodeToRegionCodeMap.put(299, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("BD");
- countryCodeToRegionCodeMap.put(880, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("TW");
- countryCodeToRegionCodeMap.put(886, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("PT");
- countryCodeToRegionCodeMap.put(351, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("GI");
- countryCodeToRegionCodeMap.put(350, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("MD");
- countryCodeToRegionCodeMap.put(373, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("KP");
- countryCodeToRegionCodeMap.put(850, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("EE");
- countryCodeToRegionCodeMap.put(372, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("BY");
- countryCodeToRegionCodeMap.put(375, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("AM");
- countryCodeToRegionCodeMap.put(374, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("KH");
- countryCodeToRegionCodeMap.put(855, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("MO");
- countryCodeToRegionCodeMap.put(853, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("LV");
- countryCodeToRegionCodeMap.put(371, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("LT");
- countryCodeToRegionCodeMap.put(370, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("HK");
- countryCodeToRegionCodeMap.put(852, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("RS");
- countryCodeToRegionCodeMap.put(381, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("UA");
- countryCodeToRegionCodeMap.put(380, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("ME");
- countryCodeToRegionCodeMap.put(382, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("LA");
- countryCodeToRegionCodeMap.put(856, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("MC");
- countryCodeToRegionCodeMap.put(377, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("AD");
- countryCodeToRegionCodeMap.put(376, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("VA");
- countryCodeToRegionCodeMap.put(379, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("SM");
- countryCodeToRegionCodeMap.put(378, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("MT");
- countryCodeToRegionCodeMap.put(356, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("CY");
- countryCodeToRegionCodeMap.put(357, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("FI");
- countryCodeToRegionCodeMap.put(358, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("BG");
- countryCodeToRegionCodeMap.put(359, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("LU");
- countryCodeToRegionCodeMap.put(352, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("IE");
- countryCodeToRegionCodeMap.put(353, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("IS");
- countryCodeToRegionCodeMap.put(354, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("AL");
- countryCodeToRegionCodeMap.put(355, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("BA");
- countryCodeToRegionCodeMap.put(387, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("SI");
- countryCodeToRegionCodeMap.put(386, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("HR");
- countryCodeToRegionCodeMap.put(385, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("MK");
- countryCodeToRegionCodeMap.put(389, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("SK");
- countryCodeToRegionCodeMap.put(421, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("CZ");
- countryCodeToRegionCodeMap.put(420, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("LI");
- countryCodeToRegionCodeMap.put(423, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("TM");
- countryCodeToRegionCodeMap.put(993, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("TJ");
- countryCodeToRegionCodeMap.put(992, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("GE");
- countryCodeToRegionCodeMap.put(995, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("AZ");
- countryCodeToRegionCodeMap.put(994, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("KG");
- countryCodeToRegionCodeMap.put(996, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("UZ");
- countryCodeToRegionCodeMap.put(998, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("PM");
- countryCodeToRegionCodeMap.put(508, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("HT");
- countryCodeToRegionCodeMap.put(509, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("HN");
- countryCodeToRegionCodeMap.put(504, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("NI");
- countryCodeToRegionCodeMap.put(505, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("CR");
- countryCodeToRegionCodeMap.put(506, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("PA");
- countryCodeToRegionCodeMap.put(507, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("FK");
- countryCodeToRegionCodeMap.put(500, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("BZ");
- countryCodeToRegionCodeMap.put(501, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("MN");
- countryCodeToRegionCodeMap.put(976, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("GT");
- countryCodeToRegionCodeMap.put(502, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("SV");
- countryCodeToRegionCodeMap.put(503, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("NP");
- countryCodeToRegionCodeMap.put(977, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("AE");
- countryCodeToRegionCodeMap.put(971, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("PS");
- countryCodeToRegionCodeMap.put(970, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("OM");
- countryCodeToRegionCodeMap.put(968, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("BT");
- countryCodeToRegionCodeMap.put(975, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("QA");
- countryCodeToRegionCodeMap.put(974, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("BH");
- countryCodeToRegionCodeMap.put(973, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("IL");
- countryCodeToRegionCodeMap.put(972, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("SY");
- countryCodeToRegionCodeMap.put(963, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("JO");
- countryCodeToRegionCodeMap.put(962, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("LB");
- countryCodeToRegionCodeMap.put(961, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("MV");
- countryCodeToRegionCodeMap.put(960, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("YE");
- countryCodeToRegionCodeMap.put(967, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("SA");
- countryCodeToRegionCodeMap.put(966, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("KW");
- countryCodeToRegionCodeMap.put(965, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("IQ");
- countryCodeToRegionCodeMap.put(964, listWithRegionCode);
- }
-
private void init(String filePrefix) {
currentFilePrefix = filePrefix;
- for (Integer countryCallingCode : countryCodeToRegionCodeMap.keySet()) {
- supportedCountries.addAll(countryCodeToRegionCodeMap.get(countryCallingCode));
+ for (List<String> regionCodes : countryCodeToRegionCodeMap.values()) {
+ supportedCountries.addAll(regionCodes);
}
nanpaCountries.addAll(countryCodeToRegionCodeMap.get(NANPA_COUNTRY_CODE));
}
@@ -1347,7 +496,7 @@ public class PhoneNumberUtil {
* be used:
*
* PhoneNumberUtil phoneUtil = PhoneNumberUtil.getInstance();
- * PhoneNumber number = phoneUtil.parse("16502530000", RegionCode.US);
+ * PhoneNumber number = phoneUtil.parse("16502530000", "US");
* String nationalSignificantNumber = PhoneNumberUtil.getNationalSignificantNumber(number);
* String areaCode;
* String subscriberNumber;
@@ -1450,10 +599,9 @@ public class PhoneNumberUtil {
static synchronized PhoneNumberUtil getInstance(
String baseFileLocation,
- Map<Integer, List<String> > countryCodeToRegionCodeMap) {
+ Map<Integer, List<String>> countryCodeToRegionCodeMap) {
if (instance == null) {
instance = new PhoneNumberUtil();
- instance.countryCodeToRegionCodeMap.clear();
instance.countryCodeToRegionCodeMap = countryCodeToRegionCodeMap;
instance.init(baseFileLocation);
}
@@ -1487,9 +635,8 @@ public class PhoneNumberUtil {
*/
public static synchronized PhoneNumberUtil getInstance() {
if (instance == null) {
- instance = new PhoneNumberUtil();
- instance.initializeCountryCodeToRegionCodeMap();
- instance.init(META_DATA_FILE_PREFIX);
+ return getInstance(META_DATA_FILE_PREFIX,
+ CountryCodeToRegionCodeMap.getCountryCodeToRegionCodeMap());
}
return instance;
}
@@ -1920,6 +1067,8 @@ public class PhoneNumberUtil {
return metadata.getVoip();
case PERSONAL_NUMBER:
return metadata.getPersonalNumber();
+ case PAGER:
+ return metadata.getPager();
default:
return metadata.getGeneralDesc();
}
@@ -1962,6 +1111,9 @@ public class PhoneNumberUtil {
if (isNumberMatchingDesc(nationalNumber, metadata.getPersonalNumber())) {
return PhoneNumberType.PERSONAL_NUMBER;
}
+ if (isNumberMatchingDesc(nationalNumber, metadata.getPager())) {
+ return PhoneNumberType.PAGER;
+ }
boolean isFixedLine = isNumberMatchingDesc(nationalNumber, metadata.getFixedLine());
if (isFixedLine) {
diff --git a/java/src/com/google/i18n/phonenumbers/Phonemetadata.java b/java/src/com/google/i18n/phonenumbers/Phonemetadata.java
index 2aadd0cb..0c1aea0b 100644
--- a/java/src/com/google/i18n/phonenumbers/Phonemetadata.java
+++ b/java/src/com/google/i18n/phonenumbers/Phonemetadata.java
@@ -360,6 +360,20 @@ public final class Phonemetadata {
return this;
}
+ // required PhoneNumberDesc pager = 21;
+ private boolean hasPager;
+ private PhoneNumberDesc pager_ = null;
+ public boolean hasPager() { return hasPager; }
+ public PhoneNumberDesc getPager() { return pager_; }
+ public PhoneMetadata setPager(PhoneNumberDesc value) {
+ if (value == null) {
+ throw new NullPointerException();
+ }
+ hasPager = true;
+ pager_ = value;
+ return this;
+ }
+
// required string id = 9;
private boolean hasId;
private String id_ = "";
@@ -550,6 +564,10 @@ public final class Phonemetadata {
if (hasVoip) {
voip_.writeExternal(objectOutput);
}
+ objectOutput.writeBoolean(hasPager);
+ if (hasPager) {
+ pager_.writeExternal(objectOutput);
+ }
objectOutput.writeUTF(id_);
objectOutput.writeInt(countryCode_);
@@ -651,6 +669,12 @@ public final class Phonemetadata {
desc.readExternal(objectInput);
setVoip(desc);
}
+ hasDesc = objectInput.readBoolean();
+ if (hasDesc) {
+ PhoneNumberDesc desc = new PhoneNumberDesc();
+ desc.readExternal(objectInput);
+ setPager(desc);
+ }
setId(objectInput.readUTF());
setCountryCode(objectInput.readInt());
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AD b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AD
index e6c2e2f8..616dae9d 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AD
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AD
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AE
index 3afc1fe1..9ef7920b 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AF b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AF
index 8c8e5d43..cc68781c 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AF
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AF
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG
index 66f24184..d9c73d62 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI
index 9cd89aa5..6306b895 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AL b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AL
index 1684c845..9ace69a2 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AL
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AL
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AM
index 33486f3c..0fc855ad 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AN b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AN
index 9de37b84..f6cca2f0 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AN
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AN
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AO b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AO
index 06a7dee0..83acb24e 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AO
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AO
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR
index 2dc8d463..7c154101 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS
index 0bd9622a..a24dea96 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT
index b7cf2629..54e77bc0 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU
index ef5d35ce..b00eedd3 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AW b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AW
index dbac243d..8eae2ed3 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AW
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AW
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AZ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AZ
index 935a12af..f1d442e8 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AZ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AZ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BA b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BA
index 84613f4c..8517a811 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BA
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BA
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB
index 98f886d8..f569daf6 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BD b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BD
index 35d8bd60..a7d04c2b 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BD
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BD
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE
index ca1deb07..925aa03b 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF
index 3652a996..9f21ab13 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BG
index 680bf3b8..e437c936 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BH b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BH
index c6f3a401..65593320 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BH
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BH
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BI b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BI
index 0b1f30b8..db71deb9 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BI
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BI
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ
index 58c9370c..3ed5c445 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BL b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BL
index 1d9e8707..276bbbc9 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BL
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BL
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM
index 71e0fae6..58e3e3a7 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BN b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BN
index f6da2bf3..2b56da63 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BN
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BN
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BO b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BO
index ff0f394e..04d2f92e 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BO
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BO
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR
index 7a1dfa2c..741d8b73 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS
index 6178a923..2dc1ad3f 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BT b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BT
index 5a3ccafc..c5abdd1d 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BT
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BT
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW
index 7108c195..a88ea9f5 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BY b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BY
index 828b31e5..0ef9b4d1 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BY
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BY
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BZ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BZ
index bcbe4815..a890dcc2 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BZ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BZ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA
index af5d4132..ddb61aee 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CD b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CD
index 8d4aedab..bfdfe3bb 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CD
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CD
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CF b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CF
index 5ec65ace..7ad9c1f2 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CF
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CF
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CG
index 21ccd0c7..0ad281c4 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CH b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CH
index f1a285d1..b9ec90d2 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CH
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CH
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CI b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CI
index 8d83b0d0..728b344a 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CI
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CI
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CK b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CK
index fb27ec29..a02cd7a1 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CK
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CK
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL
index 47f74217..a5068d89 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM
index f3605f62..48d92093 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN
index 1343ba9a..f0e924bb 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO
index 8776ba92..ec43e3ad 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR
index fc19ae8d..699410da 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CU b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CU
index 824175fa..65665632 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CU
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CU
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CV b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CV
index 07e3b7d0..348260b5 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CV
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CV
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CY b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CY
index 527c2515..d59197b3 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CY
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CY
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CZ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CZ
index b3540f28..9fd84fc0 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CZ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CZ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE
index 6c8e2e8c..a2fc820b 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DJ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DJ
index 71f9fc4b..b9e8dc61 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DJ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DJ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DK b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DK
index 69f4e4a9..294013b8 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DK
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DK
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM
index 709a98e6..22327725 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO
index 1edd2e7c..4876adbd 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DZ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DZ
index 4feff2bf..809e4a28 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DZ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DZ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EC b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EC
index 1b17bce8..edb880d8 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EC
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EC
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE
index 6a5d7d2b..dcb5b6c2 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EG
index b4d2578f..dc2b7723 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ER b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ER
index 32e1ba65..5dee5f6a 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ER
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ER
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ES b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ES
index 6d53f2e6..63dacfd9 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ES
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ES
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET
index 8f35d070..45587dff 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FI b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FI
index ab326979..f544b38f 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FI
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FI
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FJ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FJ
index d733826b..9756031d 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FJ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FJ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FK b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FK
index 40e43b5f..b10ad658 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FK
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FK
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FM
index 625e9b33..13fbbace 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FO b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FO
index 96b9722a..b76288c0 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FO
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FO
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR
index e05f4fbe..af320de4 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GA b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GA
index 6e91babe..21886c62 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GA
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GA
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB
index e13dd9b7..1a8b8b8d 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD
index e0bea32c..7324f183 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GE
index 44e2572e..13f26f3f 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF
index 7ad90210..b904357f 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG
index f6edd00e..48a79134 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GH b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GH
index 8107a935..1295bddb 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GH
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GH
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GI b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GI
index 5204a98e..b597b4b6 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GI
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GI
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GL b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GL
index 75374232..a0934bc5 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GL
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GL
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GM
index 0a509069..09f0f45a 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GN b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GN
index a7f580e4..1ffdc7d4 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GN
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GN
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GP b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GP
index e213b75f..e9302aac 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GP
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GP
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GQ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GQ
index a90838db..455e8aef 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GQ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GQ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GR
index 9f7f6b6f..7797c75a 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GT b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GT
index 3949fa20..82c4d1de 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GT
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GT
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU
index c10a5087..321994fc 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GW b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GW
index bbdd17ef..a5c64f69 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GW
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GW
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GY b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GY
index a657bbc8..d11ba6d1 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GY
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GY
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK
index 177c2b0b..aa8066c8 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN
index 49a128ef..305ac3f3 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR
index b39934c1..3a0bbe87 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HT b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HT
index e65f26ad..610a2d4a 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HT
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HT
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HU b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HU
index f9e95e0f..e0b9d9b5 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HU
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HU
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ID b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ID
index aca43aec..704fffee 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ID
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ID
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IE
index 988b47b7..2edbe886 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL
index 49f0abd8..7657febc 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IM
index 8c017cd6..03b7a7dd 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN
index b7db0344..6c8638e8 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IO b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IO
index eaf9bec0..a8da3f4d 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IO
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IO
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IQ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IQ
index 3fc6bbb9..18d3ab2e 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IQ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IQ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR
index cb4811f0..2fbfb2d3 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IS b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IS
index 6d3c9f87..ae9a5c95 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IS
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IS
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT
index fee1f3f4..b3334c6f 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE
index 56ea7e29..15ad12fa 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM
index 6c4efe1b..5cff4281 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JO b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JO
index 13422421..45e54546 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JO
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JO
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP
index d3da419a..f27ef87f 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE
index 0fc18b79..ab8e9877 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG
index 663d063c..a20e18d5 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH
index 19ad37f6..2d186fef 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KI b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KI
index dc2906d3..8370801e 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KI
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KI
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KM
index 3c5ca9f4..2d6fe4fc 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN
index 83569090..e97d2329 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KP b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KP
index 30c2f315..74310f17 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KP
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KP
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR
index 452d730b..8109f816 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW
index 9c2fe3d1..e184ec05 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY
index 0e3ac3e8..2640b9e8 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KZ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KZ
index 0ecf96ee..feec65c0 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KZ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KZ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LA b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LA
index 3ee7f5cb..4d0bedba 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LA
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LA
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB
index 6673fd2c..2d11a0c6 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC
index 8543a6b2..565e3d35 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LI b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LI
index 13ed8a6e..03207a10 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LI
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LI
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LK b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LK
index f40527bc..528b89ac 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LK
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LK
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LR
index 3c8e010b..a6d98d1b 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LS b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LS
index ce20cabf..aaafe00e 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LS
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LS
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LT b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LT
index b82c59a1..47f22282 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LT
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LT
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LU b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LU
index 6d498bde..2b9e4a8d 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LU
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LU
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LV b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LV
index 855793f7..92932980 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LV
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LV
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LY b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LY
index 0c32f609..f0433fd9 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LY
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LY
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA
index 832a1cc1..7781aeb8 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MC b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MC
index 9723714b..66f0d765 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MC
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MC
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MD b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MD
index 49625e42..9b7ff42c 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MD
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MD
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ME b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ME
index 5caf3cdd..80be441b 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ME
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ME
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MF b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MF
index d9f2e5f0..5138d374 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MF
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MF
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MG
index 8400fc55..7b38ca3a 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MH b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MH
index b033f048..b8d3d45d 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MH
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MH
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MK b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MK
index d5f29e00..5401cbb8 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MK
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MK
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ML b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ML
index bcf2319a..73cc6dca 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ML
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ML
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM
index f0425f20..f0be7e4c 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN
index c6de525d..9fe3e04a 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MO b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MO
index d6a981f2..f0fbe002 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MO
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MO
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP
index 2218205f..e50ccebe 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MQ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MQ
index 84ebbf47..c13fbbf4 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MQ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MQ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MR
index 1fb60e6e..e7c1c5de 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS
index 943d6346..a8b0e107 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MT b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MT
index 92b7f186..8bae5e4e 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MT
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MT
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MU b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MU
index 191dfd59..f6ae6ee1 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MU
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MU
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MV b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MV
index 6df01edf..ef2343e2 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MV
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MV
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MW b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MW
index daa030cc..aeb83349 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MW
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MW
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX
index f4328320..c09bbf4b 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY
index e04c636a..9ba15d72 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MZ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MZ
index 74541096..3320fb12 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MZ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MZ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NA b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NA
index da2386e7..b87e997c 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NA
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NA
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC
index 6a9fadad..b5e235af 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NE
index c245a6ba..9654c4d5 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NF b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NF
index 81a971fc..544eef3f 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NF
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NF
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NG
index 88363e5f..ddb825f7 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NI b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NI
index b007153d..42181d37 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NI
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NI
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NL b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NL
index ea0e3427..e85597f2 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NL
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NL
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NO b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NO
index b221c19c..7f32771d 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NO
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NO
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP
index 416eeb4f..fc42a3fe 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NR
index 71630199..1ed47df6 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NU b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NU
index 215ba9dd..fb8ea167 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NU
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NU
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ
index c5076e57..71b1d941 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_OM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_OM
index c33b9527..9f31d3f8 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_OM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_OM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA
index 080d2af8..7a7f1b4c 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PE
index 081c83c4..b368813c 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PF b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PF
index cbe240b1..921e217e 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PF
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PF
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG
index 0aa87ac6..5350b0ce 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PH b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PH
index 30764636..39910ad4 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PH
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PH
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PK b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PK
index f2d41131..ac191776 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PK
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PK
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PL b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PL
index 51260850..1adeefd0 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PL
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PL
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PM
index c3375cb9..f108d308 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR
index 164477d9..b6139f19 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PS b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PS
index 5c9bd81b..dc8b00f8 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PS
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PS
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PT b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PT
index f15b375c..3c4337be 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PT
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PT
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PW b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PW
index 4e81dcb1..f0fbeb9c 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PW
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PW
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PY b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PY
index 310accd0..546d5313 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PY
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PY
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_QA b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_QA
index af78d66d..3415b66f 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_QA
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_QA
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RE
index 73db8fec..3f9a186b 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RO b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RO
index 3ac59908..6f162158 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RO
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RO
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RS b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RS
index ef3697fa..6b0d501f 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RS
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RS
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RU b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RU
index 52cbfd22..e5dde379 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RU
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RU
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RW b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RW
index 1578ca1e..9b9f1d65 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RW
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RW
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SA b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SA
index 47ca9d6a..df752f21 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SA
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SA
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB
index 884aa180..fa3af2f7 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SC b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SC
index 6538bda4..6a0ef37b 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SC
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SC
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SD b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SD
index 44688c8d..05dafe7f 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SD
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SD
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE
index e19bf3b0..addbd0c9 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG
index ebd558c0..399191b7 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SH b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SH
index 3754ba77..df0fa346 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SH
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SH
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SI b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SI
index 35fe0ed0..e592b21b 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SI
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SI
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SK b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SK
index a17a52f4..862ba163 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SK
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SK
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SL b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SL
index d0054b8c..ee6c80fa 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SL
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SL
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SM
index fae460c3..60532b71 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN
index 01883c94..48518c5a 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO
index 276f95e0..c58bcf30 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SR
index ed907c11..1acc4d5b 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ST b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ST
index bd31233f..4cf121b0 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ST
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ST
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SV b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SV
index 8d271ed7..1530fe38 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SV
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SV
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SY b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SY
index 55e16af0..bf871618 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SY
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SY
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SZ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SZ
index ca05ebeb..2d434344 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SZ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SZ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC
index 8334306d..b22f3593 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TD b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TD
index 052bafa6..e37f5ee9 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TD
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TD
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TF b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TF
index 70dbefb6..b434ff29 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TF
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TF
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TG
index bd37702a..473a79cf 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TH b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TH
index dd37ba3c..2148ca08 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TH
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TH
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TJ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TJ
index 49a1150f..f938797e 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TJ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TJ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TK b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TK
index fac004c6..bc3a14c3 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TK
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TK
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TL b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TL
index 6e91c82a..60b6a85e 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TL
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TL
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TM
index 74a5f7d0..fef8dc06 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TN b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TN
index 55c59eb3..fa651eb3 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TN
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TN
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TO b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TO
index fbaa1bc3..5de89154 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TO
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TO
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TR b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TR
index ac898c06..beb21682 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TR
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TR
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT
index dcfe980c..d76362e3 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TV b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TV
index c1472882..bc611bf4 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TV
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TV
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TW b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TW
index e2a9aa2a..e87da477 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TW
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TW
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TZ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TZ
index 1eeeac09..d4bd4d01 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TZ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TZ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UA b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UA
index bdf7e834..9fe9153a 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UA
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UA
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG
index e82ed60d..cddbc4a9 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US
index 013523ad..3be038b4 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UY b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UY
index 0155f566..0160ccfe 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UY
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UY
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UZ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UZ
index a6f951a0..2349b7d2 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UZ
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UZ
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VA b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VA
index f105e014..7da0693a 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VA
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VA
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC
index c3cebe31..ac22b5f4 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VE
index ec87502e..41e1cf69 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG
index c75a2954..b59311cb 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI
index 294281b0..de0ea6fc 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VN b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VN
index 0bde54c5..81fbb02c 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VN
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VN
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VU b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VU
index 7643ede4..d2499c02 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VU
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VU
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WF b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WF
index 19ce6ea3..47b706ed 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WF
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WF
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WS b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WS
index cd472a2a..b4150e81 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WS
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WS
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YE b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YE
index a06ef7de..0858848c 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YE
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YE
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YT b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YT
index 286d4aa5..824eb773 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YT
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YT
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZA b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZA
index 7347bba3..f4a82cc4 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZA
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZA
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZM b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZM
index 3082fcea..addba8da 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZM
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZM
Binary files differ
diff --git a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZW b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZW
index 2e08a234..76cfe3be 100644
--- a/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZW
+++ b/java/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZW
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMapForTesting.java b/java/test/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMapForTesting.java
new file mode 100644
index 00000000..45ef033e
--- /dev/null
+++ b/java/test/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMapForTesting.java
@@ -0,0 +1,104 @@
+/*
+ * Copyright (C) 2010 Google Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * This file is automatically generated by BuildMetadataProtoFromXml. Please
+ * don't modify directly.
+ */
+
+package com.google.i18n.phonenumbers;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class CountryCodeToRegionCodeMapForTesting {
+ // A mapping from a country code to the region codes which denote the
+ // country/region represented by that country code. In the case of multiple
+ // countries sharing a calling code, such as the NANPA countries, the one
+ // indicated with "isMainCountryForCode" in the metadata should be first.
+ static Map<Integer, List<String>> getCountryCodeToRegionCodeMap() {
+ // The capacity is set to 20 as there are 15 different country codes,
+ // and this offers a load factor of roughly 0.75.
+ Map<Integer, List<String>> countryCodeToRegionCodeMap =
+ new HashMap<Integer, List<String>>(20);
+
+ ArrayList<String> listWithRegionCode;
+
+ listWithRegionCode = new ArrayList<String>(2);
+ listWithRegionCode.add("US");
+ listWithRegionCode.add("BS");
+ countryCodeToRegionCodeMap.put(1, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("IT");
+ countryCodeToRegionCodeMap.put(39, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("GB");
+ countryCodeToRegionCodeMap.put(44, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("PL");
+ countryCodeToRegionCodeMap.put(48, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("DE");
+ countryCodeToRegionCodeMap.put(49, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("MX");
+ countryCodeToRegionCodeMap.put(52, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("AR");
+ countryCodeToRegionCodeMap.put(54, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("AU");
+ countryCodeToRegionCodeMap.put(61, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("NZ");
+ countryCodeToRegionCodeMap.put(64, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("SG");
+ countryCodeToRegionCodeMap.put(65, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("JP");
+ countryCodeToRegionCodeMap.put(81, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("KR");
+ countryCodeToRegionCodeMap.put(82, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("AO");
+ countryCodeToRegionCodeMap.put(244, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(2);
+ listWithRegionCode.add("RE");
+ listWithRegionCode.add("YT");
+ countryCodeToRegionCodeMap.put(262, listWithRegionCode);
+
+ listWithRegionCode = new ArrayList<String>(1);
+ listWithRegionCode.add("AD");
+ countryCodeToRegionCodeMap.put(376, listWithRegionCode);
+
+ return countryCodeToRegionCodeMap;
+ }
+}
diff --git a/java/test/com/google/i18n/phonenumbers/ExampleNumbersTest.java b/java/test/com/google/i18n/phonenumbers/ExampleNumbersTest.java
index 667e955e..bfc21329 100644
--- a/java/test/com/google/i18n/phonenumbers/ExampleNumbersTest.java
+++ b/java/test/com/google/i18n/phonenumbers/ExampleNumbersTest.java
@@ -126,6 +126,13 @@ public class ExampleNumbersTest extends TestCase {
assertEquals(0, wrongTypeCases.size());
}
+ public void testPager() throws Exception {
+ Set<PhoneNumberType> voipTypes = EnumSet.of(PhoneNumberType.PAGER);
+ checkNumbersValidAndCorrectType(PhoneNumberType.PAGER, voipTypes);
+ assertEquals(0, invalidCases.size());
+ assertEquals(0, wrongTypeCases.size());
+ }
+
public void testSharedCost() throws Exception {
Set<PhoneNumberType> sharedCostTypes = EnumSet.of(PhoneNumberType.SHARED_COST);
checkNumbersValidAndCorrectType(PhoneNumberType.SHARED_COST, sharedCostTypes);
diff --git a/java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java b/java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java
index e52a9120..4975189d 100644
--- a/java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java
+++ b/java/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java
@@ -24,9 +24,7 @@ import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber.CountryCodeSource;
import junit.framework.TestCase;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import java.util.regex.Pattern;
/**
@@ -41,10 +39,10 @@ import java.util.regex.Pattern;
*/
public class PhoneNumberUtilTest extends TestCase {
private PhoneNumberUtil phoneUtil;
- private static final String TEST_META_DATA_FILE_PREFIX =
+ static final String TEST_META_DATA_FILE_PREFIX =
"/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting";
- private static final Map<Integer, List<String> > COUNTRY_CODE_TO_REGION_CODE_MAP_FOR_TESTING =
- new HashMap<Integer, List<String> >();
+ static final String TEST_COUNTRY_CODE_TO_REGION_CODE_MAP_CLASS_NAME =
+ "CountryCodeToRegionCodeMapForTesting";
public PhoneNumberUtilTest() {
phoneUtil = initilizePhoneUtilForTesting();
@@ -53,72 +51,7 @@ public class PhoneNumberUtilTest extends TestCase {
PhoneNumberUtil initilizePhoneUtilForTesting() {
PhoneNumberUtil.resetInstance();
return PhoneNumberUtil.getInstance(TEST_META_DATA_FILE_PREFIX,
- COUNTRY_CODE_TO_REGION_CODE_MAP_FOR_TESTING);
- }
-
- static {
- COUNTRY_CODE_TO_REGION_CODE_MAP_FOR_TESTING.clear();
- ArrayList<String> listWithRegionCode = new ArrayList<String>(2);
- listWithRegionCode.add("US");
- listWithRegionCode.add("BS");
- COUNTRY_CODE_TO_REGION_CODE_MAP_FOR_TESTING.put(1, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("IT");
- COUNTRY_CODE_TO_REGION_CODE_MAP_FOR_TESTING.put(39, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("GB");
- COUNTRY_CODE_TO_REGION_CODE_MAP_FOR_TESTING.put(44, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("DE");
- COUNTRY_CODE_TO_REGION_CODE_MAP_FOR_TESTING.put(49, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("PL");
- COUNTRY_CODE_TO_REGION_CODE_MAP_FOR_TESTING.put(48, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("AR");
- COUNTRY_CODE_TO_REGION_CODE_MAP_FOR_TESTING.put(54, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("MX");
- COUNTRY_CODE_TO_REGION_CODE_MAP_FOR_TESTING.put(52, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("AU");
- COUNTRY_CODE_TO_REGION_CODE_MAP_FOR_TESTING.put(61, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("NZ");
- COUNTRY_CODE_TO_REGION_CODE_MAP_FOR_TESTING.put(64, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("SG");
- COUNTRY_CODE_TO_REGION_CODE_MAP_FOR_TESTING.put(65, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("JP");
- COUNTRY_CODE_TO_REGION_CODE_MAP_FOR_TESTING.put(81, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("KR");
- COUNTRY_CODE_TO_REGION_CODE_MAP_FOR_TESTING.put(82, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("AO");
- COUNTRY_CODE_TO_REGION_CODE_MAP_FOR_TESTING.put(244, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(2);
- listWithRegionCode.add("RE");
- listWithRegionCode.add("YT");
- COUNTRY_CODE_TO_REGION_CODE_MAP_FOR_TESTING.put(262, listWithRegionCode);
-
- listWithRegionCode = new ArrayList<String>(1);
- listWithRegionCode.add("AD");
- COUNTRY_CODE_TO_REGION_CODE_MAP_FOR_TESTING.put(376, listWithRegionCode);
+ CountryCodeToRegionCodeMapForTesting.getCountryCodeToRegionCodeMap());
}
@Override
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AD b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AD
index 420a09ef..8f72b953 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AD
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AD
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AO b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AO
index 1fe371f1..76203392 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AO
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AO
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AR b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AR
index 879ff1f5..68b25027 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AR
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AR
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AU b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AU
index 1afde804..8a05649f 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AU
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AU
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_BS b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_BS
index 543069b4..f6f9f9cf 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_BS
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_BS
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_DE b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_DE
index e131c667..039192c6 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_DE
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_DE
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_GB b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_GB
index 71e628eb..4a3747bc 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_GB
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_GB
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_IT b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_IT
index 1e3c93f6..48652847 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_IT
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_IT
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_JP b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_JP
index 8666b3a7..43162974 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_JP
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_JP
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_KR b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_KR
index 12d49330..5bad0e2f 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_KR
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_KR
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_MX b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_MX
index eb82cb3d..98c475bc 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_MX
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_MX
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_NZ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_NZ
index aab8cbd8..257c9557 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_NZ
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_NZ
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_PL b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_PL
index 9f561787..c6a0cb6f 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_PL
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_PL
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_RE b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_RE
index c0fb491e..69e0bb7a 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_RE
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_RE
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_SG b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_SG
index 359168d8..bb12d762 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_SG
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_SG
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_US b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_US
index b941f509..6070764a 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_US
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_US
Binary files differ
diff --git a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_YT b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_YT
index 50d8c934..47e6e065 100644
--- a/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_YT
+++ b/java/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_YT
Binary files differ