Browse Source

JAVA: libphonenumber v4.9. Patch prepared by davinci.

pull/567/head
Lara Scheidegger 14 years ago
committed by Mihaela Rosca
parent
commit
564a829c2e
33 changed files with 580 additions and 266 deletions
  1. BIN
      java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/221_en
  2. BIN
      java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/224_en
  3. BIN
      java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/226_en
  4. BIN
      java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/242_en
  5. BIN
      java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/244_en
  6. BIN
      java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/244_pt
  7. BIN
      java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/245_en
  8. BIN
      java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/245_pt
  9. BIN
      java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/config
  10. +6
    -2
      java/libphonenumber/src/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMap.java
  11. +57
    -27
      java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java
  12. BIN
      java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_882
  13. BIN
      java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF
  14. BIN
      java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CZ
  15. BIN
      java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ES
  16. BIN
      java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW
  17. +6
    -2
      java/libphonenumber/test/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMapForTesting.java
  18. +2
    -3
      java/libphonenumber/test/com/google/i18n/phonenumbers/ExampleNumbersTest.java
  19. +71
    -17
      java/libphonenumber/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java
  20. BIN
      java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_979
  21. +20
    -1
      java/release_notes.txt
  22. +199
    -44
      resources/PhoneNumberMetaData.xml
  23. +25
    -0
      resources/PhoneNumberMetaDataForTesting.xml
  24. +2
    -2
      resources/geocoding/en/221.txt
  25. +21
    -21
      resources/geocoding/en/224.txt
  26. +33
    -27
      resources/geocoding/en/226.txt
  27. +7
    -7
      resources/geocoding/en/242.txt
  28. +38
    -34
      resources/geocoding/en/244.txt
  29. +20
    -19
      resources/geocoding/en/245.txt
  30. +42
    -35
      resources/geocoding/pt/244.txt
  31. +21
    -20
      resources/geocoding/pt/245.txt
  32. +5
    -1
      resources/phonemetadata.proto
  33. +5
    -4
      tools/java/java-build/src/com/google/i18n/phonenumbers/BuildMetadataJsonFromXml.java

BIN
java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/221_en View File


BIN
java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/224_en View File


BIN
java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/226_en View File


BIN
java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/242_en View File


BIN
java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/244_en View File


BIN
java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/244_pt View File


BIN
java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/245_en View File


BIN
java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/245_pt View File


BIN
java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/config View File


+ 6
- 2
java/libphonenumber/src/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMap.java View File

@ -31,10 +31,10 @@ public class CountryCodeToRegionCodeMap {
// 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 285 as there are 214 different country codes,
// The capacity is set to 286 as there are 215 different country codes,
// and this offers a load factor of roughly 0.75.
Map<Integer, List<String>> countryCodeToRegionCodeMap =
new HashMap<Integer, List<String>>(285);
new HashMap<Integer, List<String>>(286);
ArrayList<String> listWithRegionCode;
@ -823,6 +823,10 @@ public class CountryCodeToRegionCodeMap {
listWithRegionCode.add("001");
countryCodeToRegionCodeMap.put(881, listWithRegionCode);
listWithRegionCode = new ArrayList<String>(1);
listWithRegionCode.add("001");
countryCodeToRegionCodeMap.put(882, listWithRegionCode);
listWithRegionCode = new ArrayList<String>(1);
listWithRegionCode.add("001");
countryCodeToRegionCodeMap.put(883, listWithRegionCode);


+ 57
- 27
java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java View File

@ -59,7 +59,7 @@ public class PhoneNumberUtil {
/** Flags to use when compiling regular expressions for phone numbers. */
static final int REGEX_FLAGS = Pattern.UNICODE_CASE | Pattern.CASE_INSENSITIVE;
// The minimum and maximum length of the national significant number.
private static final int MIN_LENGTH_FOR_NSN = 3;
private static final int MIN_LENGTH_FOR_NSN = 2;
// The ITU says the maximum length should be 15, but we have found longer numbers in Germany.
static final int MAX_LENGTH_FOR_NSN = 16;
// The maximum length of the country calling code.
@ -103,9 +103,8 @@ public class PhoneNumberUtil {
private static final String RFC3966_EXTN_PREFIX = ";ext=";
private static final String RFC3966_PREFIX = "tel:";
// We include the "+" here since RFC3966 format specifies that the context must be specified in
// international format.
private static final String RFC3966_PHONE_CONTEXT = ";phone-context=+";
private static final String RFC3966_PHONE_CONTEXT = ";phone-context=";
private static final String RFC3966_ISDN_SUBADDRESS = ";isub=";
// A map that contains characters that are essential when dialling. That means any of the
// characters in this map must not be removed from a number when dialing, otherwise the call will
@ -173,7 +172,7 @@ public class PhoneNumberUtil {
HashMap<Character, Character> diallableCharMap = new HashMap<Character, Character>();
diallableCharMap.putAll(asciiDigitMappings);
diallableCharMap.put('+', '+');
diallableCharMap.put(PLUS_SIGN, PLUS_SIGN);
diallableCharMap.put('*', '*');
DIALLABLE_CHAR_MAPPINGS = Collections.unmodifiableMap(diallableCharMap);
@ -220,7 +219,7 @@ public class PhoneNumberUtil {
// placeholder for carrier information in some phone numbers. Full-width variants are also
// present.
static final String VALID_PUNCTUATION = "-x\u2010-\u2015\u2212\u30FC\uFF0D-\uFF0F " +
"\u00A0\u200B\u2060\u3000()\uFF08\uFF09\uFF3B\uFF3D.\\[\\]/~\u2053\u223C\uFF5E";
"\u00A0\u00AD\u200B\u2060\u3000()\uFF08\uFF09\uFF3B\uFF3D.\\[\\]/~\u2053\u223C\uFF5E";
private static final String DIGITS = "\\p{Nd}";
// We accept alpha characters in phone numbers, ASCII only, upper and lower case.
@ -618,7 +617,7 @@ public class PhoneNumberUtil {
/**
* Checks to see if the string of characters could possibly be a phone number at all. At the
* moment, checks to see that the string begins with at least 3 digits, ignoring any punctuation
* moment, checks to see that the string begins with at least 2 digits, ignoring any punctuation
* commonly found in phone numbers.
* This method does not require the number to be normalized in advance - but does assume that
* leading non-number symbols have been removed, such as by the method extractPossibleNumber.
@ -1342,7 +1341,9 @@ public class PhoneNumberUtil {
// If no digit is inserted/removed/modified as a result of our formatting, we return the
// formatted phone number; otherwise we return the raw input the user entered.
return (formattedNumber != null &&
normalizeDigitsOnly(formattedNumber).equals(normalizeDigitsOnly(rawInput)))
normalizeHelper(formattedNumber, DIALLABLE_CHAR_MAPPINGS, true /* remove non matches */)
.equals(normalizeHelper(
rawInput, DIALLABLE_CHAR_MAPPINGS, true /* remove non matches */)))
? formattedNumber
: rawInput;
}
@ -2273,7 +2274,7 @@ public class PhoneNumberUtil {
phoneNumber.setCountryCodeSource(countryCodeSource);
}
if (countryCodeSource != CountryCodeSource.FROM_DEFAULT_COUNTRY) {
if (fullNumber.length() < MIN_LENGTH_FOR_NSN) {
if (fullNumber.length() <= MIN_LENGTH_FOR_NSN) {
throw new NumberParseException(NumberParseException.ErrorType.TOO_SHORT_AFTER_IDD,
"Phone number had an IDD, but after this was not "
+ "long enough to be a viable phone number.");
@ -2495,7 +2496,8 @@ public class PhoneNumberUtil {
* particular region is not performed. This can be done separately with {@link #isValidNumber}.
*
* @param numberToParse number that we are attempting to parse. This can contain formatting
* such as +, ( and -, as well as a phone number extension.
* such as +, ( and -, as well as a phone number extension. It can also
* be provided in RFC3966 format.
* @param defaultRegion region that we are expecting the number to be from. This is only used
* if the number being parsed is not written in international format.
* The country_code for the number in this case would be stored as that
@ -2614,24 +2616,8 @@ public class PhoneNumberUtil {
"The string supplied was too long to parse.");
}
int indexOfPhoneContext = numberToParse.indexOf(RFC3966_PHONE_CONTEXT);
StringBuilder nationalNumber = new StringBuilder();
if (indexOfPhoneContext > 0) {
// Prefix the number with the phone context. The offset here is because the context we are
// expecting to match should start with a "+" sign, and we want to include this at the start
// of the number.
nationalNumber.append(numberToParse.substring(indexOfPhoneContext +
RFC3966_PHONE_CONTEXT.length() - 1));
// Now append everything between the "tel:" prefix and the phone-context.
nationalNumber.append(numberToParse.substring(
numberToParse.indexOf(RFC3966_PREFIX) + RFC3966_PREFIX.length(), indexOfPhoneContext));
// Note that phone-contexts that are URLs will not be parsed - isViablePhoneNumber will throw
// an exception below.
} else {
// Extract a possible number from the string passed in (this strips leading characters that
// could not be the start of a phone number.)
nationalNumber.append(extractPossibleNumber(numberToParse));
}
buildNationalNumberForParsing(numberToParse, nationalNumber);
if (!isViablePhoneNumber(nationalNumber.toString())) {
throw new NumberParseException(NumberParseException.ErrorType.NOT_A_NUMBER,
@ -2725,6 +2711,50 @@ public class PhoneNumberUtil {
phoneNumber.setNationalNumber(Long.parseLong(normalizedNationalNumber.toString()));
}
/**
* Converts numberToParse to a form that we can parse and write it to nationalNumber if it is
* written in RFC3966; otherwise extract a possible number out of it and write to nationalNumber.
*/
private void buildNationalNumberForParsing(String numberToParse, StringBuilder nationalNumber) {
int indexOfPhoneContext = numberToParse.indexOf(RFC3966_PHONE_CONTEXT);
if (indexOfPhoneContext > 0) {
int phoneContextStart = indexOfPhoneContext + RFC3966_PHONE_CONTEXT.length();
// If the phone context contains a phone number prefix, we need to capture it, whereas domains
// will be ignored.
if (numberToParse.charAt(phoneContextStart) == PLUS_SIGN) {
// Additional parameters might follow the phone context. If so, we will remove them here
// because the parameters after phone context are not important for parsing the
// phone number.
int phoneContextEnd = numberToParse.indexOf(';', phoneContextStart);
if (phoneContextEnd > 0) {
nationalNumber.append(numberToParse.substring(phoneContextStart, phoneContextEnd));
} else {
nationalNumber.append(numberToParse.substring(phoneContextStart));
}
}
// Now append everything between the "tel:" prefix and the phone-context. This should include
// the national number, an optional extension or isdn-subaddress component.
nationalNumber.append(numberToParse.substring(
numberToParse.indexOf(RFC3966_PREFIX) + RFC3966_PREFIX.length(), indexOfPhoneContext));
} else {
// Extract a possible number from the string passed in (this strips leading characters that
// could not be the start of a phone number.)
nationalNumber.append(extractPossibleNumber(numberToParse));
}
// Delete the isdn-subaddress and everything after it if it is present. Note extension won't
// appear at the same time with isdn-subaddress according to paragraph 5.3 of the RFC3966 spec,
int indexOfIsdn = nationalNumber.indexOf(RFC3966_ISDN_SUBADDRESS);
if (indexOfIsdn > 0) {
nationalNumber.delete(indexOfIsdn, nationalNumber.length());
}
// If both phone context and isdn-subaddress are absent but other parameters are present, the
// parameters are left in nationalNumber. This is because we are concerned about deleting
// content from a potential number string when there is no strong evidence that the number is
// actually written in RFC3966.
}
/**
* Takes two phone numbers and compares them for equality.
*


BIN
java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_882 View File


BIN
java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF View File


BIN
java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CZ View File


BIN
java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ES View File


BIN
java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW View File


+ 6
- 2
java/libphonenumber/test/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMapForTesting.java View File

@ -31,10 +31,10 @@ public class CountryCodeToRegionCodeMapForTesting {
// 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 22 as there are 17 different country codes,
// The capacity is set to 24 as there are 18 different country codes,
// and this offers a load factor of roughly 0.75.
Map<Integer, List<String>> countryCodeToRegionCodeMap =
new HashMap<Integer, List<String>>(22);
new HashMap<Integer, List<String>>(24);
ArrayList<String> listWithRegionCode;
@ -108,6 +108,10 @@ public class CountryCodeToRegionCodeMapForTesting {
listWithRegionCode.add("001");
countryCodeToRegionCodeMap.put(800, listWithRegionCode);
listWithRegionCode = new ArrayList<String>(1);
listWithRegionCode.add("001");
countryCodeToRegionCodeMap.put(979, listWithRegionCode);
return countryCodeToRegionCodeMap;
}
}

+ 2
- 3
java/libphonenumber/test/com/google/i18n/phonenumbers/ExampleNumbersTest.java View File

@ -176,9 +176,8 @@ public class ExampleNumbersTest extends TestCase {
assertEquals(0, wrongTypeCases.size());
}
// TODO: Update this to use connectsToEmergencyNumber or similar once that is
// implemented.
public void testEmergency() throws Exception {
ShortNumberUtil shortUtil = new ShortNumberUtil(phoneNumberUtil);
int wrongTypeCounter = 0;
for (String regionCode : phoneNumberUtil.getSupportedRegions()) {
PhoneNumberDesc desc =
@ -186,7 +185,7 @@ public class ExampleNumbersTest extends TestCase {
if (desc.hasExampleNumber()) {
String exampleNumber = desc.getExampleNumber();
if (!exampleNumber.matches(desc.getPossibleNumberPattern()) ||
!exampleNumber.matches(desc.getNationalNumberPattern())) {
!shortUtil.isEmergencyNumber(exampleNumber, regionCode)) {
wrongTypeCounter++;
LOGGER.log(Level.SEVERE, "Emergency example number test failed for " + regionCode);
}


+ 71
- 17
java/libphonenumber/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java View File

@ -99,8 +99,13 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
.setRawInput("000-000-0000");
private static final PhoneNumber INTERNATIONAL_TOLL_FREE =
new PhoneNumber().setCountryCode(800).setNationalNumber(12345678L);
// We set this to be the same length as numbers for the other non-geographical country prefix that
// we have in our test metadata. However, this is not considered valid because they differ in
// their country calling code.
private static final PhoneNumber INTERNATIONAL_TOLL_FREE_TOO_LONG =
new PhoneNumber().setCountryCode(800).setNationalNumber(1234567890L);
new PhoneNumber().setCountryCode(800).setNationalNumber(123456789L);
private static final PhoneNumber UNIVERSAL_PREMIUM_RATE =
new PhoneNumber().setCountryCode(979).setNationalNumber(123456789L);
public void testGetSupportedRegions() {
assertTrue(phoneUtil.getSupportedRegions().size() > 0);
@ -286,6 +291,7 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
public void testGetExampleNumberForNonGeoEntity() {
assertEquals(INTERNATIONAL_TOLL_FREE, phoneUtil.getExampleNumberForNonGeoEntity(800));
assertEquals(UNIVERSAL_PREMIUM_RATE, phoneUtil.getExampleNumberForNonGeoEntity(979));
}
public void testConvertAlphaCharactersInNumber() {
@ -296,7 +302,7 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
}
public void testNormaliseRemovePunctuation() {
String inputNumber = "034-56&+#234";
String inputNumber = "034-56&+#2\u00AD34";
String expectedOutput = "03456234";
assertEquals("Conversion did not correctly remove punctuation",
expectedOutput,
@ -868,6 +874,12 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
phoneUtil.parseAndKeepRawInput("0011 16502530000", RegionCode.AU);
assertEquals("0011 1 650 253 0000",
phoneUtil.formatInOriginalFormat(outOfCountryNumberFromAU2, RegionCode.AU));
// Test the star sign is not removed from or added to the original input by this method.
PhoneNumber starNumber = phoneUtil.parseAndKeepRawInput("*1234", RegionCode.JP);
assertEquals("*1234", phoneUtil.formatInOriginalFormat(starNumber, RegionCode.JP));
PhoneNumber numberWithoutStar = phoneUtil.parseAndKeepRawInput("1234", RegionCode.JP);
assertEquals("1234", phoneUtil.formatInOriginalFormat(numberWithoutStar, RegionCode.JP));
}
public void testIsPremiumRate() {
@ -892,6 +904,9 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
premiumRateNumber.setCountryCode(49).setNationalNumber(90091234567L);
assertEquals(PhoneNumberUtil.PhoneNumberType.PREMIUM_RATE,
phoneUtil.getNumberType(premiumRateNumber));
assertEquals(PhoneNumberUtil.PhoneNumberType.PREMIUM_RATE,
phoneUtil.getNumberType(UNIVERSAL_PREMIUM_RATE));
}
public void testIsTollFree() {
@ -977,6 +992,7 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
assertTrue(phoneUtil.isValidNumber(IT_NUMBER));
assertTrue(phoneUtil.isValidNumber(GB_MOBILE));
assertTrue(phoneUtil.isValidNumber(INTERNATIONAL_TOLL_FREE));
assertTrue(phoneUtil.isValidNumber(UNIVERSAL_PREMIUM_RATE));
PhoneNumber nzNumber = new PhoneNumber().setCountryCode(64).setNationalNumber(21387835L);
assertTrue(phoneUtil.isValidNumber(nzNumber));
@ -1061,6 +1077,7 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
assertEquals(RegionCode.GB, phoneUtil.getRegionCodeForCountryCode(44));
assertEquals(RegionCode.DE, phoneUtil.getRegionCodeForCountryCode(49));
assertEquals(RegionCode.UN001, phoneUtil.getRegionCodeForCountryCode(800));
assertEquals(RegionCode.UN001, phoneUtil.getRegionCodeForCountryCode(979));
}
public void testGetRegionCodeForNumber() {
@ -1068,6 +1085,7 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
assertEquals(RegionCode.US, phoneUtil.getRegionCodeForNumber(US_NUMBER));
assertEquals(RegionCode.GB, phoneUtil.getRegionCodeForNumber(GB_MOBILE));
assertEquals(RegionCode.UN001, phoneUtil.getRegionCodeForNumber(INTERNATIONAL_TOLL_FREE));
assertEquals(RegionCode.UN001, phoneUtil.getRegionCodeForNumber(UNIVERSAL_PREMIUM_RATE));
}
public void testGetCountryCodeForRegion() {
@ -1158,7 +1176,7 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
adNumber.setCountryCode(376).setNationalNumber(12345L);
assertEquals(PhoneNumberUtil.ValidationResult.IS_POSSIBLE,
phoneUtil.isPossibleNumberWithReason(adNumber));
adNumber.setCountryCode(376).setNationalNumber(13L);
adNumber.setCountryCode(376).setNationalNumber(1L);
assertEquals(PhoneNumberUtil.ValidationResult.TOO_SHORT,
phoneUtil.isPossibleNumberWithReason(adNumber));
adNumber.setCountryCode(376).setNationalNumber(12345678901234567L);
@ -1535,7 +1553,14 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
assertEquals(NZ_NUMBER, phoneUtil.parse("tel:03-331-6005;phone-context=+64", RegionCode.NZ));
assertEquals(NZ_NUMBER, phoneUtil.parse("tel:331-6005;phone-context=+64-3", RegionCode.NZ));
assertEquals(NZ_NUMBER, phoneUtil.parse("tel:331-6005;phone-context=+64-3", RegionCode.US));
// Test parsing RFC3966 format with optional user-defined parameters. The parameters will appear
// after the context if present.
assertEquals(NZ_NUMBER, phoneUtil.parse("tel:03-331-6005;phone-context=+64;a=%A1",
RegionCode.NZ));
// Test parsing RFC3966 with an ISDN subaddress.
assertEquals(NZ_NUMBER, phoneUtil.parse("tel:03-331-6005;isub=12345;phone-context=+64",
RegionCode.NZ));
assertEquals(NZ_NUMBER, phoneUtil.parse("tel:+64-3-331-6005;isub=12345", RegionCode.NZ));
// Testing international prefixes.
// Should strip country calling code.
assertEquals(NZ_NUMBER, phoneUtil.parse("0064 3 331 6005", RegionCode.NZ));
@ -1549,6 +1574,17 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
assertEquals(NZ_NUMBER, phoneUtil.parse("+0064 3 331 6005", RegionCode.NZ));
assertEquals(NZ_NUMBER, phoneUtil.parse("+ 00 64 3 331 6005", RegionCode.NZ));
assertEquals(US_LOCAL_NUMBER,
phoneUtil.parse("tel:253-0000;phone-context=www.google.com", RegionCode.US));
assertEquals(US_LOCAL_NUMBER,
phoneUtil.parse("tel:253-0000;isub=12345;phone-context=www.google.com", RegionCode.US));
// This is invalid because no "+" sign is present as part of phone-context. The phone context
// is simply ignored in this case just as if it contains a domain.
assertEquals(US_LOCAL_NUMBER,
phoneUtil.parse("tel:2530000;isub=12345;phone-context=1-650", RegionCode.US));
assertEquals(US_LOCAL_NUMBER,
phoneUtil.parse("tel:2530000;isub=12345;phone-context=1234.com", RegionCode.US));
PhoneNumber nzNumber = new PhoneNumber();
nzNumber.setCountryCode(64).setNationalNumber(64123456L);
assertEquals(nzNumber, phoneUtil.parse("64(0)64123456", RegionCode.NZ));
@ -1633,6 +1669,8 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
public void testParseNonAscii() throws Exception {
// Using a full-width plus sign.
assertEquals(US_NUMBER, phoneUtil.parse("\uFF0B1 (650) 253-0000", RegionCode.SG));
// Using a soft hyphen U+00AD.
assertEquals(US_NUMBER, phoneUtil.parse("1 (650) 253\u00AD-0000", RegionCode.US));
// The whole number, including punctuation, is here represented in full-width form.
assertEquals(US_NUMBER, phoneUtil.parse("\uFF0B\uFF11\u3000\uFF08\uFF16\uFF15\uFF10\uFF09" +
"\u3000\uFF12\uFF15\uFF13\uFF0D\uFF10\uFF10\uFF10" +
@ -1904,31 +1942,26 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
fail("Null string - but should not throw a null pointer exception.");
}
try {
String domainRfcPhoneContext = "tel:555-1234;phone-context:www.google.com";
phoneUtil.parse(domainRfcPhoneContext, RegionCode.US);
fail("Domain provided for phone context - should fail.");
String domainRfcPhoneContext = "tel:555-1234;phone-context=www.google.com";
phoneUtil.parse(domainRfcPhoneContext, RegionCode.ZZ);
fail("'Unknown' region code not allowed: should fail.");
} catch (NumberParseException e) {
// Expected this exception.
assertEquals("Wrong error type stored in exception.",
NumberParseException.ErrorType.NOT_A_NUMBER,
NumberParseException.ErrorType.INVALID_COUNTRY_CODE,
e.getErrorType());
} catch (NullPointerException e) {
fail("Domain provided for phone context - but should not throw a null pointer exception.");
}
try {
// This is invalid because no "+" sign is present as part of phone-context. This should not
// succeed in being parsed.
String invalidRfcPhoneContext = "tel:555-1234;phone-context:1-331";
phoneUtil.parse(invalidRfcPhoneContext, RegionCode.US);
fail("No leading plus provided in phone context - should fail.");
String invalidRfcPhoneContext = "tel:555-1234;phone-context=1-331";
phoneUtil.parse(invalidRfcPhoneContext, RegionCode.ZZ);
fail("'Unknown' region code not allowed: should fail.");
} catch (NumberParseException e) {
// Expected this exception.
assertEquals("Wrong error type stored in exception.",
NumberParseException.ErrorType.NOT_A_NUMBER,
NumberParseException.ErrorType.INVALID_COUNTRY_CODE,
e.getErrorType());
} catch (NullPointerException e) {
fail("No leading plus provided in phone context - but should not throw a null pointer " +
"exception.");
}
}
@ -1942,10 +1975,13 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
assertEquals(NZ_NUMBER, phoneUtil.parse("Tel: +64 3 331 6005", RegionCode.ZZ));
assertEquals(NZ_NUMBER, phoneUtil.parse("+64 3 331 6005", null));
assertEquals(INTERNATIONAL_TOLL_FREE, phoneUtil.parse("+800 1234 5678", null));
assertEquals(UNIVERSAL_PREMIUM_RATE, phoneUtil.parse("+979 123 456 789", null));
// Test parsing RFC3966 format with a phone context.
assertEquals(NZ_NUMBER, phoneUtil.parse("tel:03-331-6005;phone-context=+64", RegionCode.ZZ));
assertEquals(NZ_NUMBER, phoneUtil.parse(" tel:03-331-6005;phone-context=+64", RegionCode.ZZ));
assertEquals(NZ_NUMBER, phoneUtil.parse("tel:03-331-6005;isub=12345;phone-context=+64",
RegionCode.ZZ));
// It is important that we set the carrier code to an empty string, since we used
// ParseAndKeepRawInput and no carrier code was found.
@ -2112,6 +2148,8 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
phoneUtil.isNumberMatch("+643 331-6005", "+6433316005"));
assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH,
phoneUtil.isNumberMatch("+64 3 331-6005", "+6433316005"));
assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH,
phoneUtil.isNumberMatch("+64 3 331-6005", "tel:+64-3-331-6005;isub=123"));
// Test alpha numbers.
assertEquals(PhoneNumberUtil.MatchType.EXACT_MATCH,
phoneUtil.isNumberMatch("+1800 siX-Flags", "+1 800 7493 5247"));
@ -2162,6 +2200,9 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
// Extension different, all else the same.
assertEquals(PhoneNumberUtil.MatchType.NO_MATCH,
phoneUtil.isNumberMatch("+64 3 331-6005 extn 1234", "0116433316005#1235"));
assertEquals(PhoneNumberUtil.MatchType.NO_MATCH,
phoneUtil.isNumberMatch(
"+64 3 331-6005 extn 1234", "tel:+64-3-331-6005;ext=1235"));
// NSN matches, but extension is different - not the same number.
assertEquals(PhoneNumberUtil.MatchType.NO_MATCH,
phoneUtil.isNumberMatch("+64 3 331-6005 ext.1235", "3 331 6005#1234"));
@ -2181,6 +2222,9 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
// NSN matches.
assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH,
phoneUtil.isNumberMatch("+64 3 331-6005", "03 331 6005"));
assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH,
phoneUtil.isNumberMatch(
"+64 3 331-6005", "tel:03-331-6005;isub=1234;phone-context=abc.nz"));
assertEquals(PhoneNumberUtil.MatchType.NSN_MATCH,
phoneUtil.isNumberMatch(NZ_NUMBER, "03 331 6005"));
// Here the second number possibly starts with the country calling code for New Zealand,
@ -2215,12 +2259,22 @@ public class PhoneNumberUtilTest extends TestMetadataTestCase {
// Short NSN matches with the country not specified for either one or both numbers.
assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH,
phoneUtil.isNumberMatch("+64 3 331-6005", "331 6005"));
assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH,
phoneUtil.isNumberMatch("+64 3 331-6005", "tel:331-6005;phone-context=abc.nz"));
assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH,
phoneUtil.isNumberMatch("+64 3 331-6005",
"tel:331-6005;isub=1234;phone-context=abc.nz"));
assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH,
phoneUtil.isNumberMatch("+64 3 331-6005",
"tel:331-6005;isub=1234;phone-context=abc.nz;a=%A1"));
// We did not know that the "0" was a national prefix since neither number has a country code,
// so this is considered a SHORT_NSN_MATCH.
assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH,
phoneUtil.isNumberMatch("3 331-6005", "03 331 6005"));
assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH,
phoneUtil.isNumberMatch("3 331-6005", "331 6005"));
assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH,
phoneUtil.isNumberMatch("3 331-6005", "tel:331-6005;phone-context=abc.nz"));
assertEquals(PhoneNumberUtil.MatchType.SHORT_NSN_MATCH,
phoneUtil.isNumberMatch("3 331-6005", "+64 331 6005"));
// Short NSN match with the country specified.


BIN
java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_979 View File


+ 20
- 1
java/release_notes.txt View File

@ -1,8 +1,27 @@
June 21st, 2012: libphonenumber-4.9
* Bug fix
- formatInOriginalFormat fixed not to add a star sign if it was not present
originally.
* Metadata changes
- BF, CZ, ES, KW
- Non-geographical entities with calling code 882 (BebbiCell, Maritime
Communications, Oration Technologies, Telespazio and Thuraya)
- Geocoding data updates for country calling codes 221, 224, 226, 242, 244, 245
* Functionality changes:
- Minimum allowed length for a national significant number (NSN) when parsing
changed from 3 to 2.
- Support parsing of RFC3966-formatted strings with an isdn-subaddress or extra
parameters specified.
- Allow soft hyphen to appear in phone numbers (\u00AD)
* Testing changes:
- Add extra unit tests for non-geographical phone number entities
- ExampleNumbersTest testEmergency tests now uses ShortNumberUtil
June 14th, 2012: libphonenumber-4.8.5
* Metadata update only:
- AC, CR, DE, DK, IL, IN, IS, KH, LI, LR, MA, MD, MK, PA, SA, SG, SS
June 5th, 2012: libphonenumber-4.8.4
June 6th, 2012: libphonenumber-4.8.4
* Metadata update only:
- AE, RO
- Non-geographical entity with calling code 881 (Iridium)


+ 199
- 44
resources/PhoneNumberMetaData.xml View File

@ -2433,8 +2433,9 @@
<nationalNumberPattern>
(?:
6(?:
0[0-5]|
[68]0
0[0-7]|
6[0-2]|
8[01]
)|
7(?:
[02-68]\d|
@ -5169,12 +5170,27 @@
<territory id="CZ" countryCode="420" internationalPrefix="00">
<availableFormats>
<numberFormat pattern="([2-9]\d{2})(\d{3})(\d{3})">
<leadingDigits>
[2-8]|
9[015-7]
</leadingDigits>
<format>$1 $2 $3</format>
</numberFormat>
<numberFormat pattern="(96\d)(\d{3})(\d{3})(\d{3})">
<leadingDigits>96</leadingDigits>
<format>$1 $2 $3 $4</format>
</numberFormat>
<numberFormat pattern="(9\d)(\d{3})(\d{3})(\d{3})">
<leadingDigits>9[36]</leadingDigits>
<format>$1 $2 $3 $4</format>
</numberFormat>
</availableFormats>
<generalDesc>
<nationalNumberPattern>[2-9]\d{8}</nationalNumberPattern>
<possibleNumberPattern>\d{9}</possibleNumberPattern>
<nationalNumberPattern>
[2-8]\d{8}|
9\d{8,11}
</nationalNumberPattern>
<possibleNumberPattern>\d{9,12}</possibleNumberPattern>
</generalDesc>
<fixedLine>
<nationalNumberPattern>
@ -5192,7 +5208,7 @@
(?:
60[1-8]|
7(?:
0[25]|
0[2-5]|
[2379]\d
)
)\d{6}
@ -5229,7 +5245,7 @@
<!-- Numbers belonging to private communication networks are included here. These are
classified as Institutional networks, belonging to institutions like the police, armed
forces and railways, along with a couple of formerly government-owned banks. These
numbers are reachable by the public. -->
numbers are reachable by the public. -->
<nationalNumberPattern>
9(?:
5[056]|
@ -5238,6 +5254,32 @@
</nationalNumberPattern>
<exampleNumber>972123456</exampleNumber>
</uan>
<voicemail>
<nationalNumberPattern>
9(?:
3\d{9}|
6\d{7,10}
)
</nationalNumberPattern>
<possibleNumberPattern>\d{9,12}</possibleNumberPattern>
<exampleNumber>93123456789</exampleNumber>
</voicemail>
<shortCode>
<nationalNumberPattern>
1(?:
1(?:
6\d{3}|
8\d
)|
2\d{2,3}|
3\d{3,4}|
4\d{3}|
99
)
</nationalNumberPattern>
<possibleNumberPattern>\d{4,6}</possibleNumberPattern>
<exampleNumber>116123</exampleNumber>
</shortCode>
<emergency>
<nationalNumberPattern>
1(?:
@ -6332,31 +6374,61 @@
<nationalNumberPattern>[5-9]\d{8}</nationalNumberPattern>
<possibleNumberPattern>\d{9}</possibleNumberPattern>
</generalDesc>
<!-- The pattern is complex because the Lleida Networks mobile ranges are inside the
fixed-line ranges. -->
<fixedLine>
<nationalNumberPattern>
(?:
8(?:
[13]0|
[28][0-8]|
[47][1-9]|
5[01346-9]|
6[0457-9]
8(?:
[13]0|
[28][0-8]|
[47][1-9]|
5[01346-9]|
6[0457-9]
)\d{6}|
9(?:
[1238][0-8]\d{6}|
4[1-9]\d{6}|
5\d{7}|
6(?:
[0-8]\d{6}|
9(?:
0(?:
[0-57-9]\d{4}|
6(?:
0[0-8]|
1[1-9]|
[2-9]\d
)\d{2}
)|
[1-9]\d{5}
)
)|
9(?:
[1238][0-8]|
[47][1-9]|
[56]\d
)
)\d{6}
7(?:
[124-9]\d{2}|
3(?:
[0-8]\d|
9[1-9]
)
)\d{4}
)
</nationalNumberPattern>
<exampleNumber>810123456</exampleNumber>
</fixedLine>
<!-- The ranges 969060900 to 969061099 and 973900000 to 973909999 are mobile according to
information received from Lleida Networks. -->
<mobile>
<nationalNumberPattern>
(?:
6\d|
7[1-4]
)\d{7}
6\d{6}|
7[1-4]\d{5}|
9(?:
6906(?:
09|
10
)|
7390\d{2}
)
)\d{2}
</nationalNumberPattern>
<exampleNumber>612345678</exampleNumber>
</mobile>
@ -13585,21 +13657,16 @@
<leadingDigits>[1269]</leadingDigits>
<format>$1 $2</format>
</numberFormat>
<numberFormat pattern="(5[05]\d)(\d{5})">
<numberFormat pattern="(5[015]\d)(\d{5})">
<leadingDigits>5</leadingDigits>
<format>$1 $2</format>
</numberFormat>
<numberFormat pattern="(65816)(\d{6})">
<leadingDigits>65816</leadingDigits>
<format>$1 $2</format>
</numberFormat>
</availableFormats>
<generalDesc>
<nationalNumberPattern>
[12569]\d{6,7}|
65816\d{6}
[12569]\d{6,7}
</nationalNumberPattern>
<possibleNumberPattern>\d{7,8}|\d{11}</possibleNumberPattern>
<possibleNumberPattern>\d{7,8}</possibleNumberPattern>
</generalDesc>
<fixedLine>
<nationalNumberPattern>
@ -13607,7 +13674,10 @@
18\d|
2(?:
[23]\d{2}|
4[1-35-9]\d|
4(?:
[1-35-9]\d|
44
)|
5(?:
0[034]|
[2-46]\d|
@ -13625,17 +13695,12 @@
(?:
5(?:
0[0-2568]|
11|
5\d
)|
6(?:
0[034679]|
5(?:
[015-79]|
8(?:
[02-9]|
1[0-57-9]
)
)|
5[015-9]|
6\d|
7[067]|
9[069]
@ -13652,12 +13717,6 @@
<exampleNumber>50012345</exampleNumber>
</mobile>
<!-- No tollFree or premiumRate information can be found. -->
<voicemail>
<!-- Wataniya Telecom -->
<nationalNumberPattern>65816\d{6}</nationalNumberPattern>
<possibleNumberPattern>\d{11}</possibleNumberPattern>
<exampleNumber>65816123456</exampleNumber>
</voicemail>
<shortCode>
<nationalNumberPattern>
1(?:
@ -24815,6 +24874,102 @@
</mobile>
</territory>
<!-- BebbiCell (Formerly Global Networks Switzerland AG) +88234 -->
<!-- http://www.itu.int/oth/T0202000054/en -->
<!-- http://www.gsm.aq/numberplan.php -->
<!-- http://www.global.aq -->
<!-- Maritime Communications Partner (MCP) +88232 -->
<!-- http://www.itu.int/oth/T02020000F4/en -->
<!-- Oration Technologies +88237 -->
<!-- http://www.itu.int/oth/T02020000A0/en -->
<!-- Telespazio S.p.A. +88213 -->
<!-- http://www.itu.int/oth/T02020000CC/en -->
<!-- Thuraya +88216 -->
<!-- http://www.itu.int/oth/T02020000CF/en -->
<territory id="001" countryCode="882">
<availableFormats>
<numberFormat pattern="(\d{2})(\d{4})(\d{3})">
<leadingDigits>3[23]</leadingDigits>
<format>$1 $2 $3</format>
</numberFormat>
<numberFormat pattern="(\d{2})(\d{5})">
<leadingDigits>
16|
342
</leadingDigits>
<format>$1 $2</format>
</numberFormat>
<numberFormat pattern="(\d{2})(\d{4})(\d{4})">
<leadingDigits>34[57]</leadingDigits>
<format>$1 $2 $3</format>
</numberFormat>
<numberFormat pattern="(\d{3})(\d{4})(\d{4})">
<leadingDigits>348</leadingDigits>
<format>$1 $2 $3</format>
</numberFormat>
<numberFormat pattern="(\d{2})(\d{2})(\d{4})">
<leadingDigits>1</leadingDigits>
<format>$1 $2 $3</format>
</numberFormat>
<numberFormat pattern="(\d{2})(\d{3,4})(\d{4})">
<leadingDigits>16</leadingDigits>
<format>$1 $2 $3</format>
</numberFormat>
<numberFormat pattern="(\d{2})(\d{4,5})(\d{5})">
<leadingDigits>16</leadingDigits>
<format>$1 $2 $3</format>
</numberFormat>
</availableFormats>
<generalDesc>
<nationalNumberPattern>[13]\d{6,11}</nationalNumberPattern>
<possibleNumberPattern>\d{7,12}</possibleNumberPattern>
<exampleNumber>32123456</exampleNumber>
</generalDesc>
<fixedLine>
<nationalNumberPattern>NA</nationalNumberPattern>
<possibleNumberPattern>NA</possibleNumberPattern>
</fixedLine>
<mobile>
<!-- Bebbicell Mobile numbers, MCP & Oration. We are guessing the number length for
Oration based on numbers found online. -->
<nationalNumberPattern>
3(?:
2\d{3}|
37\d{2}|
4(?:
2|
7\d{3}
)
)\d{4}
</nationalNumberPattern>
<possibleNumberPattern>\d{7,10}</possibleNumberPattern>
</mobile>
<voip>
<!-- Telespazio S.p.A., Thuraya and Bebbicell VOIP numbers. -->
<nationalNumberPattern>
1(?:
3(?:
0[0347]|
[13][0139]|
2[035]|
4[013568]|
6[0459]|
7[06]|
8[15678]|
9[0689]
)\d{4}|
6\d{5,10}
)|
345\d{7}
</nationalNumberPattern>
<possibleNumberPattern>\d{7,12}</possibleNumberPattern>
</voip>
<voicemail>
<nationalNumberPattern>348[57]\d{7}</nationalNumberPattern>
<possibleNumberPattern>\d{11}</possibleNumberPattern>
</voicemail>
</territory>
<!-- http://www.itu.int/oth/T02020000F3/en -->
<!-- http://www.republicwireless.com/world-wi-fi-number -->
<territory id="001" countryCode="883">


+ 25
- 0
resources/PhoneNumberMetaDataForTesting.xml View File

@ -791,5 +791,30 @@
<nationalNumberPattern>\d{8}</nationalNumberPattern>
</tollFree>
</territory>
<!-- Universal International Premium Rate Number -->
<territory id="001" countryCode="979">
<availableFormats>
<numberFormat pattern="(\d)(\d{4})(\d{4})">
<format>$1 $2 $3</format>
</numberFormat>
</availableFormats>
<generalDesc>
<nationalNumberPattern>\d{9}</nationalNumberPattern>
<possibleNumberPattern>\d{9}</possibleNumberPattern>
<exampleNumber>123456789</exampleNumber>
</generalDesc>
<fixedLine>
<nationalNumberPattern>NA</nationalNumberPattern>
<possibleNumberPattern>NA</possibleNumberPattern>
</fixedLine>
<mobile>
<nationalNumberPattern>NA</nationalNumberPattern>
<possibleNumberPattern>NA</possibleNumberPattern>
</mobile>
<premiumRate>
<nationalNumberPattern>\d{9}</nationalNumberPattern>
</premiumRate>
</territory>
</territories>
</phoneNumberMetadata>

+ 2
- 2
resources/geocoding/en/221.txt View File

@ -15,5 +15,5 @@
# Generated from:
# http://en.wikipedia.org/wiki/+221 [373996724]
2218|Dakar
2219|Outside Dakar
221338|Dakar
221339|Outside Dakar

+ 21
- 21
resources/geocoding/en/224.txt View File

@ -15,24 +15,24 @@
# Generated from:
# http://en.wikipedia.org/wiki/+224 [373997051]
22424|Fria
22431|Boké
22432|Kamsar
22441|Conakry
22442|Sangoya
22443|Conakry
22445|Conakry
22446|Boussoura
22447|Conakry
22451|Labé
22453|Pita
22461|Kindia
224613|Télimélé
22468|Mamou
22469|Dalaba
22471|Kankan
22481|Faranah
22491|N'Zérékoré
22494|Macenta
22497|Guéckédou
22498|Kissidougou
2243024|Fria
2243031|Boké
2243032|Kamsar
2243041|Conakry
2243042|Conakry
2243043|Conakry
2243045|Conakry
2243046|Boussoura
2243047|Conakry
2243051|Labé
2243053|Pita
2243061|Kindia
22430613|Télimélé
2243068|Mamou
2243069|Dalaba
2243071|Kankan
2243081|Faranah
2243091|N'Zérékoré
2243094|Macenta
2243097|Guéckédou
2243098|Kissidougou

+ 33
- 27
resources/geocoding/en/226.txt View File

@ -13,31 +13,37 @@
# limitations under the License.
# Generated from:
# http://en.wikipedia.org/wiki/+226 [374115628]
# http://en.wikipedia.org/wiki/+226 [482669671] Except where overruled by
# http://www.onatel.bf/onatelsa/plandenumerotation_burkina.pdf
# Where there are many cities for a prefix, we only kept the more significant
# ones.
22630|Ouagadougou
22631|Ouagadougou
22632|Ouagadougou
22633|Ouagadougou
22634|Ouagadougou
22635|Ouagadougou
22636|Ouagadougou
22637|Ouagadougou
22638|Ouagadougou
22644|Koudougou
22645|Kaya
22649|Kaya
22652|Dédougou
22653|Tougan
22654|Tougan
22655|Ouahigouya
22656|Ouahigouya
22666|Dori
22670|Koupéla
22671|Tenkodogo
22677|Fada
22679|Kantchari
22686|Diébougou
22687|Gaoua
22688|Banfora
22696|Orodara
2262049|Kaya
2262052|Dédougou
2262053|Boromo/Djibasso/Nouna
2262090|Gaoua
2262091|Banfora
2262096|Orodara
2262097|Bobo-Dioulasso
2262098|Bobo-Dioulasso
2262099|Béréba/Fo/Houndé
2264045|Kaya
2264046|Falagountou/Dori
2264054|Yako
2264055|Ouahigouya
2264056|Djibo
2264070|Pouytenga/Koupéla
2264071|Tenkodogo
2264077|Fada/Diabo
2264079|Kantchari
226503|Ouagadougou
2265040|Pô/Kombissiri/Koubri
2265041|Léo/Sapouy
2265042|Ouagadougou
2265043|Ouagadougou
2265044|Koudougou
2265045|Ouagadougou
2265046|Ouagadougou
2265047|Ouagadougou
2265048|Ouagadougou
2265049|Ouagadougou

+ 7
- 7
resources/geocoding/en/242.txt View File

@ -14,10 +14,10 @@
# Translated from fr/242.txt using Freebase and Wikipedia.
24221|Cuvette
24222|Likouala/Sangha
24223|Pool
24224|Plateaux
24225|Bouenza/Lekoumou/Niari
24228|Brazzaville
24229|Pointe-Noire
2422221|Cuvette
2422222|Likouala/Sangha
2422223|Pool
2422224|Plateaux
2422225|Bouenza/Lekoumou/Niari
2422228|Brazzaville
2422229|Pointe-Noire

+ 38
- 34
resources/geocoding/en/244.txt View File

@ -14,37 +14,41 @@
# Translated from pt/244.txt using Freebase and Wikipedia.
24431|Cabinda
24432|Zaire
244321|Soyo
24433|Uige
24434|Bengo
244348|Caxito
24435|Cuanza Norte
244358|N'Dalatando
24436|Cuanza Sul
244363|Sumbe
244364|Porto Amboim
24441|Huambo
24448|Bie
244485|Kuito
24449|Cuando Cubango
24451|Malange
244526|Dundo
24453|Lunda Sul
244535|Saurimo
24454|Moxico
244546|Luena
24461|Huila
244612|Lubango
24464|Namibe
244643|Tombua
24465|Cunene
244652|St. Clara/Cunene
244655|Ondjiva
24472|Benguela
244722|Lobito
244726|Bela Vista
244728|Baia Farta
244729|Catumbela
244777|Dama Universal
24422|Luanda
244231|Cabinda
244232|Zaire
2442321|Soyo
244233|Uige
244234|Bengo
2442348|Caxito
244235|Cuanza Norte
2442358|N'Dalatando
244236|Cuanza Sul
2442363|Sumbe
2442364|Porto Amboim
244241|Huambo
244248|Bie
2442485|Kuito
244249|Cuando Cubango
2442498|Menongue
244251|Malange
244252|Lunda Norte
2442524|Lucapa
2442526|Dundo
244253|Lunda Sul
2442535|Saurimo
244254|Moxico
2442546|Luena
244261|Huila
2442612|Lubango
244264|Namibe
2442643|Tombua
244265|Cunene
2442652|Kuroka
2442655|Ondjiva
244272|Benguela
2442722|Lobito
2442726|Bela Vista
2442728|Baia Farta
2442729|Catumbela
2442777|Dama Universal

+ 20
- 19
resources/geocoding/en/245.txt View File

@ -14,22 +14,23 @@
# Translated from pt/245.txt using Freebase and Wikipedia.
24522|S. Luzia
24525|Brá
24531|Mansoa/Manssabá
24532|Bigene/Bissorã
24533|Bula/Ingore
24535|Farim
24541|Bafatá/Bambadinca
24551|Gabú
24552|Sonaco
24553|Pirada
24561|Bedanda/Buba/Cacine/Catio/Fulacunda/Tite
24562|Quebo
24581|Bolama
24582|Bubaque
24583|Caravela
24584|Uno
24591|Canchungo
24592|Cacheu
24593|S. Domingos
245320|Bissau
245321|Bissau
245322|St. Luzia
245325|Brá
245331|Mansôa
245332|Bigene/Bissora
245334|Mansaba
245335|Farim
245341|Bafatá
245342|Bambadinca
245351|Gabu
245352|Sonaco
245353|Pirada
245354|Pitche
245370|Buba
245391|Canchungo
245392|Cacheu
245393|S. Domingos
245394|Bula
245396|Ingoré

+ 42
- 35
resources/geocoding/pt/244.txt View File

@ -13,40 +13,47 @@
# limitations under the License.
# Generated from:
# http://www.angolatelecom.com/AngolaTelecom/PT/telList/natIndicative/c (2011-07-22)
# http://www.angolatelecom.com/AngolaTelecom/PT/telList/natIndicative/c (2012-06-20)
# http://en.wikipedia.org/wiki/+244 [440874733]
# Names were then checked on Portuguese wikipedia to find the most common
# Portuguese spelling: http://pt.wikipedia.org/wiki/Prov%C3%ADncias_de_Angola.
# St. Clara has apparently been renamed as Curoca.
24431|Cabinda
24432|Zaire
244321|Soyo
24433|Uige
24434|Bengo
244348|Caxito
24435|Kuanza Norte
244358|N'Dalatando
24436|Kuanza Sul
244363|Sumbe
244364|Porto Amboim
24441|Huambo
24448|Bie
244485|Kuito
24449|Kuando Kubango
24451|Malange
244526|Dundo
24453|Lunda Sul
244535|Saurimo
24454|Moxico
244546|Luena
24461|Huila
244612|Lubango
24464|Namibe
244643|Tombua
24465|Cunene
244652|St. Clara/Cunene
244655|Ondjiva
24472|Benguela
244722|Lobito
244726|Bela Vista
244728|Baia Farta
244729|Catumbela
244777|Dama Universal
24422|Luanda
244231|Cabinda
244232|Zaire
2442321|Soyo
244233|Uíge
244234|Bengo
2442348|Caxito
244235|Kwanza-Norte
2442358|N'Dalatando
244236|Kwanza-Sul
2442363|Sumbe
2442364|Porto Amboim
244241|Huambo
244248|Bié
2442485|Kuito
244249|Cuando-Cubango
2442498|Menongue
244251|Malanje
244252|Lunda-Norte
2442524|Lucapa
2442526|Dundo
244253|Lunda-Sul
2442535|Saurimo
244254|Moxico
2442546|Luena
244261|Huíla
2442612|Lubango
244264|Namibe
2442643|Tombua
244265|Cunene
2442652|Curoca
2442655|Ondjiva
244272|Benguela
2442722|Lobito
2442726|Bela Vista
2442728|Baía Farta
2442729|Catumbela
2442777|Dama Universal

+ 21
- 20
resources/geocoding/pt/245.txt View File

@ -13,24 +13,25 @@
# limitations under the License.
# Generated from:
# http://en.wikipedia.org/wiki/+245 [374256913]
# http://www.itu.int/oth/T020200005C/en
24522|S. Luzia
24525|Brá
24531|Mansoa/Manssabá
24532|Bigene/Bissorã
24533|Bula/Ingore
24535|Farim
24541|Bafatá/Bambadinca
24551|Gabú
24552|Sonaco
24553|Pirada
24561|Bedanda/Buba/Cacine/Catio/Fulacunda/Tite
24562|Quebo
24581|Bolama
24582|Bubaque
24583|Caravela
24584|Uno
24591|Canchungo
24592|Cacheu
24593|S. Domingos
245320|Bissau
245321|Bissau
245322|Sta. Luzia
245325|Brá
245331|Mansôa
245332|Bigene/Bissorã
245334|Mansaba
245335|Farim
245341|Bafatá
245342|Bambadinca
245351|Gabú
245352|Sonaco
245353|Pirada
245354|Pitche
245370|Buba
245391|Canchungo
245392|Cacheu
245393|S. Domingos
245394|Bula
245396|Ingoré

+ 5
- 1
resources/phonemetadata.proto View File

@ -138,7 +138,11 @@ message PhoneMetadata {
// nationally.
required PhoneNumberDesc no_international_dialling = 24;
// The ISO 3166-1 alpha-2 representation of a country/region
// The ISO 3166-1 alpha-2 representation of a country/region, with the
// exception of "country calling codes" used for non-geographical entities,
// such as Universal International Toll Free Number (+800). These are all
// given the ID "001", since this is the numeric region code for the world
// according to UN M.49: http://en.wikipedia.org/wiki/UN_M.49
required string id = 9;
// The country calling code that one would dial from overseas when trying to


+ 5
- 4
tools/java/java-build/src/com/google/i18n/phonenumbers/BuildMetadataJsonFromXml.java View File

@ -117,6 +117,7 @@ public class BuildMetadataJsonFromXml extends Command {
writer.flush();
writer.close();
formatter.close()
} catch (Exception e) {
e.printStackTrace();
return false;
@ -135,16 +136,16 @@ public class BuildMetadataJsonFromXml extends Command {
} else {
writer.write(",");
}
String regionCode = metadata.getId();
String key = metadata.getId();
// For non-geographical country calling codes (e.g. +800), use the country calling codes
// instead of the region code as key in the map.
if (regionCode.equals("001")) {
regionCode = Integer.toString(metadata.getCountryCode());
if (key.equals("001")) {
key = Integer.toString(metadata.getCountryCode());
}
JSArrayBuilder jsArrayBuilder = new JSArrayBuilder();
toJsArray(metadata, jsArrayBuilder);
writer.write("\"");
writer.write(regionCode);
writer.write(key);
writer.write("\":");
writer.write(jsArrayBuilder.toString());
}


Loading…
Cancel
Save