phonelib 0.3.6 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (1894) hide show
  1. checksums.yaml +8 -8
  2. data/README.rdoc +11 -0
  3. data/data/extended_data.dat +0 -0
  4. data/data/libphonenumber/AUTHORS +4 -0
  5. data/data/libphonenumber/CONTRIBUTORS +68 -0
  6. data/data/libphonenumber/LICENSE +176 -0
  7. data/data/libphonenumber/LICENSE.Chromium +37 -0
  8. data/data/libphonenumber/README.md +112 -0
  9. data/data/libphonenumber/codereview.settings +4 -0
  10. data/data/libphonenumber/cpp/CMakeLists.txt +573 -0
  11. data/data/libphonenumber/cpp/LICENSE +13 -0
  12. data/data/libphonenumber/cpp/README +284 -0
  13. data/data/libphonenumber/cpp/src/phonenumbers/alternate_format.cc +960 -0
  14. data/data/libphonenumber/cpp/src/phonenumbers/alternate_format.h +29 -0
  15. data/data/libphonenumber/cpp/src/phonenumbers/asyoutypeformatter.cc +774 -0
  16. data/data/libphonenumber/cpp/src/phonenumbers/asyoutypeformatter.h +243 -0
  17. data/data/libphonenumber/cpp/src/phonenumbers/base/basictypes.h +208 -0
  18. data/data/libphonenumber/cpp/src/phonenumbers/base/logging.h +41 -0
  19. data/data/libphonenumber/cpp/src/phonenumbers/base/memory/scoped_ptr.h +450 -0
  20. data/data/libphonenumber/cpp/src/phonenumbers/base/memory/singleton.h +95 -0
  21. data/data/libphonenumber/cpp/src/phonenumbers/base/memory/singleton_posix.h +53 -0
  22. data/data/libphonenumber/cpp/src/phonenumbers/base/strings/string_piece.cc +221 -0
  23. data/data/libphonenumber/cpp/src/phonenumbers/base/strings/string_piece.h +194 -0
  24. data/data/libphonenumber/cpp/src/phonenumbers/base/synchronization/lock.h +89 -0
  25. data/data/libphonenumber/cpp/src/phonenumbers/base/synchronization/lock_posix.h +63 -0
  26. data/data/libphonenumber/cpp/src/phonenumbers/base/template_util.h +108 -0
  27. data/data/libphonenumber/cpp/src/phonenumbers/base/thread_checker.h +70 -0
  28. data/data/libphonenumber/cpp/src/phonenumbers/callback.h +88 -0
  29. data/data/libphonenumber/cpp/src/phonenumbers/default_logger.cc +58 -0
  30. data/data/libphonenumber/cpp/src/phonenumbers/default_logger.h +105 -0
  31. data/data/libphonenumber/cpp/src/phonenumbers/encoding_utils.h +51 -0
  32. data/data/libphonenumber/cpp/src/phonenumbers/geocoding/area_code_map.cc +94 -0
  33. data/data/libphonenumber/cpp/src/phonenumbers/geocoding/area_code_map.h +75 -0
  34. data/data/libphonenumber/cpp/src/phonenumbers/geocoding/default_map_storage.cc +65 -0
  35. data/data/libphonenumber/cpp/src/phonenumbers/geocoding/default_map_storage.h +76 -0
  36. data/data/libphonenumber/cpp/src/phonenumbers/geocoding/geocoding_data.h +77 -0
  37. data/data/libphonenumber/cpp/src/phonenumbers/geocoding/mapping_file_provider.cc +175 -0
  38. data/data/libphonenumber/cpp/src/phonenumbers/geocoding/mapping_file_provider.h +75 -0
  39. data/data/libphonenumber/cpp/src/phonenumbers/geocoding/phonenumber_offline_geocoder.cc +216 -0
  40. data/data/libphonenumber/cpp/src/phonenumbers/geocoding/phonenumber_offline_geocoder.h +165 -0
  41. data/data/libphonenumber/cpp/src/phonenumbers/lite_metadata.cc +11422 -0
  42. data/data/libphonenumber/cpp/src/phonenumbers/logger.cc +27 -0
  43. data/data/libphonenumber/cpp/src/phonenumbers/logger.h +103 -0
  44. data/data/libphonenumber/cpp/src/phonenumbers/matcher_api.h +54 -0
  45. data/data/libphonenumber/cpp/src/phonenumbers/metadata.cc +12330 -0
  46. data/data/libphonenumber/cpp/src/phonenumbers/metadata.h +29 -0
  47. data/data/libphonenumber/cpp/src/phonenumbers/normalize_utf8.h +50 -0
  48. data/data/libphonenumber/cpp/src/phonenumbers/phonenumber.cc +87 -0
  49. data/data/libphonenumber/cpp/src/phonenumbers/phonenumber.h +40 -0
  50. data/data/libphonenumber/cpp/src/phonenumbers/phonenumbermatch.cc +91 -0
  51. data/data/libphonenumber/cpp/src/phonenumbers/phonenumbermatch.h +125 -0
  52. data/data/libphonenumber/cpp/src/phonenumbers/phonenumbermatcher.cc +908 -0
  53. data/data/libphonenumber/cpp/src/phonenumbers/phonenumbermatcher.h +201 -0
  54. data/data/libphonenumber/cpp/src/phonenumbers/phonenumberutil.cc +2799 -0
  55. data/data/libphonenumber/cpp/src/phonenumbers/phonenumberutil.h +826 -0
  56. data/data/libphonenumber/cpp/src/phonenumbers/regex_based_matcher.cc +68 -0
  57. data/data/libphonenumber/cpp/src/phonenumbers/regex_based_matcher.h +61 -0
  58. data/data/libphonenumber/cpp/src/phonenumbers/regexp_adapter.h +168 -0
  59. data/data/libphonenumber/cpp/src/phonenumbers/regexp_adapter_icu.cc +237 -0
  60. data/data/libphonenumber/cpp/src/phonenumbers/regexp_adapter_icu.h +41 -0
  61. data/data/libphonenumber/cpp/src/phonenumbers/regexp_adapter_re2.cc +161 -0
  62. data/data/libphonenumber/cpp/src/phonenumbers/regexp_adapter_re2.h +40 -0
  63. data/data/libphonenumber/cpp/src/phonenumbers/regexp_cache.cc +60 -0
  64. data/data/libphonenumber/cpp/src/phonenumbers/regexp_cache.h +77 -0
  65. data/data/libphonenumber/cpp/src/phonenumbers/regexp_factory.h +44 -0
  66. data/data/libphonenumber/cpp/src/phonenumbers/region_code.h +40 -0
  67. data/data/libphonenumber/cpp/src/phonenumbers/short_metadata.cc +2795 -0
  68. data/data/libphonenumber/cpp/src/phonenumbers/short_metadata.h +29 -0
  69. data/data/libphonenumber/cpp/src/phonenumbers/shortnumberinfo.cc +403 -0
  70. data/data/libphonenumber/cpp/src/phonenumbers/shortnumberinfo.h +237 -0
  71. data/data/libphonenumber/cpp/src/phonenumbers/stl_util.h +51 -0
  72. data/data/libphonenumber/cpp/src/phonenumbers/string_byte_sink.cc +33 -0
  73. data/data/libphonenumber/cpp/src/phonenumbers/string_byte_sink.h +40 -0
  74. data/data/libphonenumber/cpp/src/phonenumbers/stringutil.cc +448 -0
  75. data/data/libphonenumber/cpp/src/phonenumbers/stringutil.h +176 -0
  76. data/data/libphonenumber/cpp/src/phonenumbers/test_metadata.cc +888 -0
  77. data/data/libphonenumber/cpp/src/phonenumbers/unicodestring.cc +114 -0
  78. data/data/libphonenumber/cpp/src/phonenumbers/unicodestring.h +133 -0
  79. data/data/libphonenumber/cpp/src/phonenumbers/utf/README +1 -0
  80. data/data/libphonenumber/cpp/src/phonenumbers/utf/rune.c +358 -0
  81. data/data/libphonenumber/cpp/src/phonenumbers/utf/stringpiece.h +23 -0
  82. data/data/libphonenumber/cpp/src/phonenumbers/utf/stringprintf.h +22 -0
  83. data/data/libphonenumber/cpp/src/phonenumbers/utf/unicodetext.cc +520 -0
  84. data/data/libphonenumber/cpp/src/phonenumbers/utf/unicodetext.h +461 -0
  85. data/data/libphonenumber/cpp/src/phonenumbers/utf/unilib.cc +68 -0
  86. data/data/libphonenumber/cpp/src/phonenumbers/utf/unilib.h +99 -0
  87. data/data/libphonenumber/cpp/src/phonenumbers/utf/utf.h +240 -0
  88. data/data/libphonenumber/cpp/src/phonenumbers/utf/utfdef.h +27 -0
  89. data/data/libphonenumber/cpp/test/phonenumbers/asyoutypeformatter_test.cc +1237 -0
  90. data/data/libphonenumber/cpp/test/phonenumbers/geocoding/area_code_map_test.cc +201 -0
  91. data/data/libphonenumber/cpp/test/phonenumbers/geocoding/geocoding_data_test.cc +176 -0
  92. data/data/libphonenumber/cpp/test/phonenumbers/geocoding/geocoding_test_data.h +50 -0
  93. data/data/libphonenumber/cpp/test/phonenumbers/geocoding/geocoding_test_program.cc +43 -0
  94. data/data/libphonenumber/cpp/test/phonenumbers/geocoding/mapping_file_provider_test.cc +91 -0
  95. data/data/libphonenumber/cpp/test/phonenumbers/geocoding/phonenumber_offline_geocoder_test.cc +205 -0
  96. data/data/libphonenumber/cpp/test/phonenumbers/logger_test.cc +172 -0
  97. data/data/libphonenumber/cpp/test/phonenumbers/phonenumbermatch_test.cc +92 -0
  98. data/data/libphonenumber/cpp/test/phonenumbers/phonenumbermatcher_test.cc +1226 -0
  99. data/data/libphonenumber/cpp/test/phonenumbers/phonenumberutil_test.cc +3915 -0
  100. data/data/libphonenumber/cpp/test/phonenumbers/regexp_adapter_test.cc +322 -0
  101. data/data/libphonenumber/cpp/test/phonenumbers/regexp_cache_test.cc +60 -0
  102. data/data/libphonenumber/cpp/test/phonenumbers/run_tests.cc +21 -0
  103. data/data/libphonenumber/cpp/test/phonenumbers/shortnumberinfo_test.cc +468 -0
  104. data/data/libphonenumber/cpp/test/phonenumbers/stringutil_test.cc +306 -0
  105. data/data/libphonenumber/cpp/test/phonenumbers/test_util.cc +63 -0
  106. data/data/libphonenumber/cpp/test/phonenumbers/test_util.h +199 -0
  107. data/data/libphonenumber/cpp/test/phonenumbers/unicodestring_test.cc +236 -0
  108. data/data/libphonenumber/cpp/test/phonenumbers/utf/unicodetext_test.cc +45 -0
  109. data/data/libphonenumber/debian/README.source +21 -0
  110. data/data/libphonenumber/debian/changelog +5 -0
  111. data/data/libphonenumber/debian/compat +1 -0
  112. data/data/libphonenumber/debian/control +73 -0
  113. data/data/libphonenumber/debian/copyright +74 -0
  114. data/data/libphonenumber/debian/libphonenumber6-dev.install +3 -0
  115. data/data/libphonenumber/debian/libphonenumber6-java.jlibs +1 -0
  116. data/data/libphonenumber/debian/libphonenumber6-java.poms +39 -0
  117. data/data/libphonenumber/debian/libphonenumber6.install +1 -0
  118. data/data/libphonenumber/debian/maven.cleanIgnoreRules +17 -0
  119. data/data/libphonenumber/debian/maven.ignoreRules +23 -0
  120. data/data/libphonenumber/debian/maven.properties +4 -0
  121. data/data/libphonenumber/debian/maven.publishedRules +19 -0
  122. data/data/libphonenumber/debian/maven.rules +31 -0
  123. data/data/libphonenumber/debian/patches/0003-maven-exclude-demo.patch +13 -0
  124. data/data/libphonenumber/debian/patches/series +1 -0
  125. data/data/libphonenumber/debian/rules +89 -0
  126. data/data/libphonenumber/debian/source/format +1 -0
  127. data/data/libphonenumber/debian/watch +3 -0
  128. data/data/libphonenumber/java/build.xml +303 -0
  129. data/data/libphonenumber/java/carrier/pom.xml +46 -0
  130. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/PhoneNumberToCarrierMapper.java +124 -0
  131. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/1242_en +0 -0
  132. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/1246_en +0 -0
  133. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/1264_en +0 -0
  134. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/1441_en +0 -0
  135. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/1473_en +0 -0
  136. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/1649_en +0 -0
  137. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/1671_en +0 -0
  138. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/1684_en +0 -0
  139. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/1758_en +0 -0
  140. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/1767_en +0 -0
  141. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/1784_en +0 -0
  142. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/1787_en +0 -0
  143. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/1809_en +0 -0
  144. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/1868_en +0 -0
  145. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/1869_en +0 -0
  146. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/1939_en +0 -0
  147. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/20_en +0 -0
  148. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/211_en +0 -0
  149. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/212_en +0 -0
  150. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/213_en +0 -0
  151. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/216_en +0 -0
  152. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/220_en +0 -0
  153. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/221_en +0 -0
  154. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/222_en +0 -0
  155. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/223_en +0 -0
  156. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/224_en +0 -0
  157. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/225_en +0 -0
  158. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/226_en +0 -0
  159. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/227_en +0 -0
  160. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/228_en +0 -0
  161. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/229_en +0 -0
  162. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/230_en +0 -0
  163. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/231_en +0 -0
  164. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/232_en +0 -0
  165. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/233_en +0 -0
  166. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/234_en +0 -0
  167. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/235_en +0 -0
  168. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/236_en +0 -0
  169. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/237_en +0 -0
  170. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/238_en +0 -0
  171. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/239_en +0 -0
  172. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/240_en +0 -0
  173. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/241_en +0 -0
  174. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/242_en +0 -0
  175. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/243_en +0 -0
  176. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/244_en +0 -0
  177. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/245_en +0 -0
  178. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/248_en +0 -0
  179. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/249_en +0 -0
  180. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/250_en +0 -0
  181. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/251_en +0 -0
  182. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/252_en +0 -0
  183. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/253_en +0 -0
  184. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/254_en +0 -0
  185. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/255_en +0 -0
  186. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/256_en +0 -0
  187. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/257_en +0 -0
  188. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/258_en +0 -0
  189. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/260_en +0 -0
  190. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/261_en +0 -0
  191. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/263_en +0 -0
  192. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/265_en +0 -0
  193. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/267_en +0 -0
  194. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/268_en +0 -0
  195. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/27_en +0 -0
  196. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/297_en +0 -0
  197. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/298_en +0 -0
  198. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/299_en +0 -0
  199. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/30_en +0 -0
  200. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/31_en +0 -0
  201. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/32_en +0 -0
  202. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/33_en +0 -0
  203. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/350_en +0 -0
  204. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/351_en +0 -0
  205. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/352_en +0 -0
  206. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/353_en +0 -0
  207. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/354_en +0 -0
  208. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/355_en +0 -0
  209. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/356_en +0 -0
  210. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/357_en +0 -0
  211. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/358_en +0 -0
  212. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/359_en +0 -0
  213. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/36_en +0 -0
  214. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/370_en +0 -0
  215. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/372_en +0 -0
  216. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/373_en +0 -0
  217. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/374_en +0 -0
  218. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/375_be +0 -0
  219. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/375_en +0 -0
  220. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/375_ru +0 -0
  221. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/376_en +0 -0
  222. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/380_en +0 -0
  223. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/381_en +0 -0
  224. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/385_en +0 -0
  225. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/386_en +0 -0
  226. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/387_en +0 -0
  227. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/389_en +0 -0
  228. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/39_en +0 -0
  229. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/40_en +0 -0
  230. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/41_en +0 -0
  231. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/420_en +0 -0
  232. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/421_en +0 -0
  233. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/43_en +0 -0
  234. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/45_en +0 -0
  235. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/47_en +0 -0
  236. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/48_en +0 -0
  237. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/49_en +0 -0
  238. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/501_en +0 -0
  239. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/505_en +0 -0
  240. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/506_en +0 -0
  241. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/507_en +0 -0
  242. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/51_en +0 -0
  243. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/53_en +0 -0
  244. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/54_en +0 -0
  245. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/55_en +0 -0
  246. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/56_en +0 -0
  247. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/57_en +0 -0
  248. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/58_en +0 -0
  249. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/591_en +0 -0
  250. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/595_en +0 -0
  251. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/597_en +0 -0
  252. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/598_en +0 -0
  253. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/599_en +0 -0
  254. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/60_en +0 -0
  255. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/61_en +0 -0
  256. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/62_en +0 -0
  257. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/63_en +0 -0
  258. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/64_en +0 -0
  259. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/65_en +0 -0
  260. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/66_en +0 -0
  261. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/670_en +0 -0
  262. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/673_en +0 -0
  263. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/675_en +0 -0
  264. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/676_en +0 -0
  265. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/677_en +0 -0
  266. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/678_en +0 -0
  267. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/679_en +0 -0
  268. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/685_en +0 -0
  269. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/686_en +0 -0
  270. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/7_en +0 -0
  271. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/84_en +0 -0
  272. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/852_en +0 -0
  273. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/855_en +0 -0
  274. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/856_en +0 -0
  275. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/86_en +0 -0
  276. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/880_en +0 -0
  277. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/90_en +0 -0
  278. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/91_en +0 -0
  279. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/92_en +0 -0
  280. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/93_en +0 -0
  281. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/94_en +0 -0
  282. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/95_en +0 -0
  283. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/960_en +0 -0
  284. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/961_en +0 -0
  285. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/962_en +0 -0
  286. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/964_en +0 -0
  287. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/965_ar +0 -0
  288. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/965_en +0 -0
  289. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/966_en +0 -0
  290. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/967_en +0 -0
  291. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/968_en +0 -0
  292. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/970_en +0 -0
  293. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/971_en +0 -0
  294. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/972_en +0 -0
  295. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/973_en +0 -0
  296. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/974_en +0 -0
  297. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/975_en +0 -0
  298. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/977_en +0 -0
  299. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/98_en +0 -0
  300. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/992_en +0 -0
  301. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/993_en +0 -0
  302. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/994_en +0 -0
  303. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/995_en +0 -0
  304. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/996_en +0 -0
  305. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/998_en +0 -0
  306. data/data/libphonenumber/java/carrier/src/com/google/i18n/phonenumbers/carrier/data/config +0 -0
  307. data/data/libphonenumber/java/carrier/test/com/google/i18n/phonenumbers/PhoneNumberToCarrierMapperTest.java +121 -0
  308. data/data/libphonenumber/java/carrier/test/com/google/i18n/phonenumbers/carrier/testing_data/1650_en +0 -0
  309. data/data/libphonenumber/java/carrier/test/com/google/i18n/phonenumbers/carrier/testing_data/244_en +0 -0
  310. data/data/libphonenumber/java/carrier/test/com/google/i18n/phonenumbers/carrier/testing_data/44_en +0 -0
  311. data/data/libphonenumber/java/carrier/test/com/google/i18n/phonenumbers/carrier/testing_data/44_sv +0 -0
  312. data/data/libphonenumber/java/carrier/test/com/google/i18n/phonenumbers/carrier/testing_data/config +0 -0
  313. data/data/libphonenumber/java/demo/README +16 -0
  314. data/data/libphonenumber/java/demo/build.xml +59 -0
  315. data/data/libphonenumber/java/demo/pom.xml +107 -0
  316. data/data/libphonenumber/java/demo/src/com/google/phonenumbers/PhoneNumberParserServlet.java +298 -0
  317. data/data/libphonenumber/java/demo/war/WEB-INF/appengine-web.xml +11 -0
  318. data/data/libphonenumber/java/demo/war/WEB-INF/lib/commons-fileupload-1.2.1.jar +0 -0
  319. data/data/libphonenumber/java/demo/war/WEB-INF/lib/commons-io-1.4.jar +0 -0
  320. data/data/libphonenumber/java/demo/war/WEB-INF/logging.properties +13 -0
  321. data/data/libphonenumber/java/demo/war/WEB-INF/web.xml +18 -0
  322. data/data/libphonenumber/java/demo/war/favicon.ico +0 -0
  323. data/data/libphonenumber/java/demo/war/phonenumberparser.jsp +39 -0
  324. data/data/libphonenumber/java/demo/war/stylesheets/main.css +26 -0
  325. data/data/libphonenumber/java/geocoder/pom.xml +54 -0
  326. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/PhoneNumberToTimeZonesMapper.java +192 -0
  327. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoder.java +228 -0
  328. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1201_en +0 -0
  329. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1202_en +0 -0
  330. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1203_en +0 -0
  331. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1204_en +0 -0
  332. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1205_en +0 -0
  333. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1206_en +0 -0
  334. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1207_en +0 -0
  335. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1208_en +0 -0
  336. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1209_en +0 -0
  337. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1210_en +0 -0
  338. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1212_en +0 -0
  339. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1213_en +0 -0
  340. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1214_en +0 -0
  341. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1215_en +0 -0
  342. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1216_en +0 -0
  343. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1217_en +0 -0
  344. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1218_en +0 -0
  345. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1219_en +0 -0
  346. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1224_en +0 -0
  347. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1225_en +0 -0
  348. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1226_en +0 -0
  349. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1228_en +0 -0
  350. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1229_en +0 -0
  351. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1231_en +0 -0
  352. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1234_en +0 -0
  353. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1236_en +0 -0
  354. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1239_en +0 -0
  355. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1240_en +0 -0
  356. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1242_en +0 -0
  357. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1248_en +0 -0
  358. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1250_en +0 -0
  359. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1251_en +0 -0
  360. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1252_en +0 -0
  361. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1253_en +0 -0
  362. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1254_en +0 -0
  363. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1256_en +0 -0
  364. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1260_en +0 -0
  365. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1262_en +0 -0
  366. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1267_en +0 -0
  367. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1269_en +0 -0
  368. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1270_en +0 -0
  369. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1272_en +0 -0
  370. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1276_en +0 -0
  371. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1281_en +0 -0
  372. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1289_en +0 -0
  373. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1301_en +0 -0
  374. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1302_en +0 -0
  375. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1303_en +0 -0
  376. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1304_en +0 -0
  377. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1305_en +0 -0
  378. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1306_en +0 -0
  379. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1307_en +0 -0
  380. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1308_en +0 -0
  381. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1309_en +0 -0
  382. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1310_en +0 -0
  383. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1312_en +0 -0
  384. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1313_en +0 -0
  385. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1314_en +0 -0
  386. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1315_en +0 -0
  387. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1316_en +0 -0
  388. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1317_en +0 -0
  389. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1318_en +0 -0
  390. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1319_en +0 -0
  391. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1320_en +0 -0
  392. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1321_en +0 -0
  393. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1323_en +0 -0
  394. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1325_en +0 -0
  395. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1330_en +0 -0
  396. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1331_en +0 -0
  397. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1334_en +0 -0
  398. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1336_en +0 -0
  399. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1337_en +0 -0
  400. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1339_en +0 -0
  401. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1345_en +0 -0
  402. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1346_en +0 -0
  403. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1347_en +0 -0
  404. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1351_en +0 -0
  405. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1352_en +0 -0
  406. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1360_en +0 -0
  407. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1361_en +0 -0
  408. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1364_en +0 -0
  409. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1365_en +0 -0
  410. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1385_en +0 -0
  411. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1386_en +0 -0
  412. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1401_en +0 -0
  413. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1402_en +0 -0
  414. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1403_en +0 -0
  415. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1404_en +0 -0
  416. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1405_en +0 -0
  417. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1406_en +0 -0
  418. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1407_en +0 -0
  419. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1408_en +0 -0
  420. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1409_en +0 -0
  421. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1410_en +0 -0
  422. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1412_en +0 -0
  423. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1413_en +0 -0
  424. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1414_en +0 -0
  425. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1415_en +0 -0
  426. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1416_en +0 -0
  427. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1417_en +0 -0
  428. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1418_en +0 -0
  429. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1419_en +0 -0
  430. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1423_en +0 -0
  431. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1424_en +0 -0
  432. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1425_en +0 -0
  433. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1430_en +0 -0
  434. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1431_en +0 -0
  435. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1432_en +0 -0
  436. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1434_en +0 -0
  437. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1435_en +0 -0
  438. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1437_en +0 -0
  439. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1438_en +0 -0
  440. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1440_en +0 -0
  441. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1441_en +0 -0
  442. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1443_en +0 -0
  443. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1450_en +0 -0
  444. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1469_en +0 -0
  445. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1478_en +0 -0
  446. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1479_en +0 -0
  447. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1480_en +0 -0
  448. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1484_en +0 -0
  449. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1501_en +0 -0
  450. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1502_en +0 -0
  451. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1503_en +0 -0
  452. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1504_en +0 -0
  453. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1505_en +0 -0
  454. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1506_en +0 -0
  455. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1507_en +0 -0
  456. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1508_en +0 -0
  457. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1509_en +0 -0
  458. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1510_en +0 -0
  459. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1512_en +0 -0
  460. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1513_en +0 -0
  461. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1514_en +0 -0
  462. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1515_en +0 -0
  463. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1516_en +0 -0
  464. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1517_en +0 -0
  465. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1518_en +0 -0
  466. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1519_en +0 -0
  467. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1520_en +0 -0
  468. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1530_en +0 -0
  469. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1540_en +0 -0
  470. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1541_en +0 -0
  471. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1551_en +0 -0
  472. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1559_en +0 -0
  473. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1561_en +0 -0
  474. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1562_en +0 -0
  475. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1563_en +0 -0
  476. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1567_en +0 -0
  477. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1570_en +0 -0
  478. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1571_en +0 -0
  479. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1573_en +0 -0
  480. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1574_en +0 -0
  481. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1575_en +0 -0
  482. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1580_en +0 -0
  483. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1585_en +0 -0
  484. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1586_en +0 -0
  485. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1587_en +0 -0
  486. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1601_en +0 -0
  487. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1602_en +0 -0
  488. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1603_en +0 -0
  489. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1604_en +0 -0
  490. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1605_en +0 -0
  491. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1606_en +0 -0
  492. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1607_en +0 -0
  493. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1608_en +0 -0
  494. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1609_en +0 -0
  495. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1610_en +0 -0
  496. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1612_en +0 -0
  497. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1613_en +0 -0
  498. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1614_en +0 -0
  499. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1615_en +0 -0
  500. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1616_en +0 -0
  501. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1617_en +0 -0
  502. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1618_en +0 -0
  503. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1619_en +0 -0
  504. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1620_en +0 -0
  505. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1623_en +0 -0
  506. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1626_en +0 -0
  507. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1630_en +0 -0
  508. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1631_en +0 -0
  509. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1636_en +0 -0
  510. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1639_en +0 -0
  511. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1641_en +0 -0
  512. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1646_en +0 -0
  513. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1647_en +0 -0
  514. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1649_en +0 -0
  515. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1650_en +0 -0
  516. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1651_en +0 -0
  517. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1657_en +0 -0
  518. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1660_en +0 -0
  519. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1661_en +0 -0
  520. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1662_en +0 -0
  521. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1667_en +0 -0
  522. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1669_en +0 -0
  523. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1671_en +0 -0
  524. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1678_en +0 -0
  525. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1682_en +0 -0
  526. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1701_en +0 -0
  527. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1702_en +0 -0
  528. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1703_en +0 -0
  529. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1704_en +0 -0
  530. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1705_en +0 -0
  531. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1706_en +0 -0
  532. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1707_en +0 -0
  533. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1708_en +0 -0
  534. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1709_en +0 -0
  535. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1712_en +0 -0
  536. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1713_en +0 -0
  537. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1714_en +0 -0
  538. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1715_en +0 -0
  539. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1716_en +0 -0
  540. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1717_en +0 -0
  541. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1718_en +0 -0
  542. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1719_en +0 -0
  543. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1720_en +0 -0
  544. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1724_en +0 -0
  545. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1725_en +0 -0
  546. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1726_en +0 -0
  547. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1727_en +0 -0
  548. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1730_en +0 -0
  549. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1731_en +0 -0
  550. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1732_en +0 -0
  551. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1734_en +0 -0
  552. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1737_en +0 -0
  553. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1740_en +0 -0
  554. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1754_en +0 -0
  555. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1757_en +0 -0
  556. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1760_en +0 -0
  557. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1763_en +0 -0
  558. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1765_en +0 -0
  559. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1769_en +0 -0
  560. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1770_en +0 -0
  561. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1772_en +0 -0
  562. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1773_en +0 -0
  563. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1774_en +0 -0
  564. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1775_en +0 -0
  565. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1778_en +0 -0
  566. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1779_en +0 -0
  567. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1780_en +0 -0
  568. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1781_en +0 -0
  569. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1782_en +0 -0
  570. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1785_en +0 -0
  571. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1786_en +0 -0
  572. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1801_en +0 -0
  573. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1802_en +0 -0
  574. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1803_en +0 -0
  575. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1804_en +0 -0
  576. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1805_en +0 -0
  577. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1806_en +0 -0
  578. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1807_en +0 -0
  579. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1808_en +0 -0
  580. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1809_en +0 -0
  581. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1810_en +0 -0
  582. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1812_en +0 -0
  583. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1813_en +0 -0
  584. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1814_en +0 -0
  585. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1815_en +0 -0
  586. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1816_en +0 -0
  587. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1817_en +0 -0
  588. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1818_en +0 -0
  589. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1819_en +0 -0
  590. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1828_en +0 -0
  591. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1830_en +0 -0
  592. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1831_en +0 -0
  593. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1832_en +0 -0
  594. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1838_en +0 -0
  595. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1843_en +0 -0
  596. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1845_en +0 -0
  597. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1847_en +0 -0
  598. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1848_en +0 -0
  599. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1850_en +0 -0
  600. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1851_en +0 -0
  601. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1856_en +0 -0
  602. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1857_en +0 -0
  603. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1858_en +0 -0
  604. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1859_en +0 -0
  605. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1860_en +0 -0
  606. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1862_en +0 -0
  607. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1863_en +0 -0
  608. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1864_en +0 -0
  609. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1865_en +0 -0
  610. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1867_en +0 -0
  611. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1870_en +0 -0
  612. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1872_en +0 -0
  613. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1873_en +0 -0
  614. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1876_en +0 -0
  615. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1878_en +0 -0
  616. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1888_en +0 -0
  617. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1901_en +0 -0
  618. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1902_en +0 -0
  619. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1903_en +0 -0
  620. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1904_en +0 -0
  621. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1905_en +0 -0
  622. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1906_en +0 -0
  623. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1907_en +0 -0
  624. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1908_en +0 -0
  625. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1909_en +0 -0
  626. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1910_en +0 -0
  627. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1912_en +0 -0
  628. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1913_en +0 -0
  629. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1914_en +0 -0
  630. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1915_en +0 -0
  631. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1916_en +0 -0
  632. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1917_en +0 -0
  633. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1918_en +0 -0
  634. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1919_en +0 -0
  635. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1920_en +0 -0
  636. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1925_en +0 -0
  637. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1928_en +0 -0
  638. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1929_en +0 -0
  639. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1930_en +0 -0
  640. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1931_en +0 -0
  641. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1936_en +0 -0
  642. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1937_en +0 -0
  643. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1938_en +0 -0
  644. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1940_en +0 -0
  645. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1941_en +0 -0
  646. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1947_en +0 -0
  647. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1949_en +0 -0
  648. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1951_en +0 -0
  649. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1952_en +0 -0
  650. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1954_en +0 -0
  651. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1956_en +0 -0
  652. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1959_en +0 -0
  653. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1970_en +0 -0
  654. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1971_en +0 -0
  655. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1972_en +0 -0
  656. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1973_en +0 -0
  657. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1978_en +0 -0
  658. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1979_en +0 -0
  659. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1980_en +0 -0
  660. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1984_en +0 -0
  661. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1985_en +0 -0
  662. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/1989_en +0 -0
  663. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/20_en +0 -0
  664. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/212_en +0 -0
  665. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/212_fr +0 -0
  666. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/213_en +0 -0
  667. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/216_en +0 -0
  668. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/220_en +0 -0
  669. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/221_en +0 -0
  670. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/222_en +0 -0
  671. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/222_fr +0 -0
  672. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/224_en +0 -0
  673. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/225_en +0 -0
  674. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/225_fr +0 -0
  675. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/226_en +0 -0
  676. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/228_en +0 -0
  677. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/228_es +0 -0
  678. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/228_fr +0 -0
  679. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/229_en +0 -0
  680. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/229_fr +0 -0
  681. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/230_en +0 -0
  682. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/230_es +0 -0
  683. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/230_fr +0 -0
  684. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/232_en +0 -0
  685. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/233_en +0 -0
  686. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/234_en +0 -0
  687. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/237_en +0 -0
  688. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/238_en +0 -0
  689. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/238_pt +0 -0
  690. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/239_en +0 -0
  691. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/239_pt +0 -0
  692. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/241_en +0 -0
  693. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/242_en +0 -0
  694. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/242_fr +0 -0
  695. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/243_en +0 -0
  696. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/243_fr +0 -0
  697. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/244_en +0 -0
  698. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/244_pt +0 -0
  699. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/245_en +0 -0
  700. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/245_pt +0 -0
  701. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/247_en +0 -0
  702. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/249_en +0 -0
  703. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/251_en +0 -0
  704. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/252_en +0 -0
  705. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/254_en +0 -0
  706. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/256_en +0 -0
  707. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/257_en +0 -0
  708. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/258_en +0 -0
  709. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/258_pt +0 -0
  710. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/260_en +0 -0
  711. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/261_en +0 -0
  712. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/263_en +0 -0
  713. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/264_en +0 -0
  714. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/266_en +0 -0
  715. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/267_en +0 -0
  716. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/268_en +0 -0
  717. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/269_en +0 -0
  718. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/269_fr +0 -0
  719. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/27_en +0 -0
  720. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/290_en +0 -0
  721. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/290_fr +0 -0
  722. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/299_en +0 -0
  723. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/30_el +0 -0
  724. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/30_en +0 -0
  725. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/31_en +0 -0
  726. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/31_nl +0 -0
  727. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/32_de +0 -0
  728. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/32_en +0 -0
  729. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/32_fr +0 -0
  730. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/32_nl +0 -0
  731. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/33_en +0 -0
  732. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/33_fr +0 -0
  733. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/34_en +0 -0
  734. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/34_es +0 -0
  735. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/351_en +0 -0
  736. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/351_pt +0 -0
  737. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/352_de +0 -0
  738. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/352_en +0 -0
  739. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/352_fr +0 -0
  740. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/353_en +0 -0
  741. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/354_en +0 -0
  742. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/355_en +0 -0
  743. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/358_en +0 -0
  744. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/358_fi +0 -0
  745. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/358_se +0 -0
  746. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/359_bg +0 -0
  747. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/359_en +0 -0
  748. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/36_en +0 -0
  749. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/36_hu +0 -0
  750. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/370_en +0 -0
  751. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/371_en +0 -0
  752. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/372_en +0 -0
  753. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/373_en +0 -0
  754. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/373_ro +0 -0
  755. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/373_ru +0 -0
  756. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/374_am +0 -0
  757. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/374_en +0 -0
  758. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/374_ru +0 -0
  759. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/375_be +0 -0
  760. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/375_en +0 -0
  761. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/375_ru +0 -0
  762. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/381_en +0 -0
  763. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/381_sr +0 -0
  764. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/389_en +0 -0
  765. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/39_en +0 -0
  766. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/39_it +0 -0
  767. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/40_en +0 -0
  768. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/40_ro +0 -0
  769. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/41_de +0 -0
  770. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/41_en +0 -0
  771. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/41_fr +0 -0
  772. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/41_it +0 -0
  773. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/420_en +0 -0
  774. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/421_en +0 -0
  775. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/43_de +0 -0
  776. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/43_en +0 -0
  777. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/44_en +0 -0
  778. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/46_en +0 -0
  779. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/46_sv +0 -0
  780. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/47_en +0 -0
  781. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/48_en +0 -0
  782. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/48_pl +0 -0
  783. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/49_de +0 -0
  784. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/49_en +0 -0
  785. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/51_en +0 -0
  786. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/53_en +0 -0
  787. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/54_en +0 -0
  788. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/54_es +0 -0
  789. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/55_en +0 -0
  790. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/55_pt +0 -0
  791. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/56_en +0 -0
  792. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/56_es +0 -0
  793. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/57_en +0 -0
  794. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/58_en +0 -0
  795. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/58_es +0 -0
  796. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/599_en +0 -0
  797. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/62_en +0 -0
  798. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/62_id +0 -0
  799. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/66_en +0 -0
  800. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/66_th +0 -0
  801. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/686_en +0 -0
  802. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/7_en +0 -0
  803. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/7_ru +0 -0
  804. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/81_en +0 -0
  805. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/81_ja +0 -0
  806. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/82_ar +0 -0
  807. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/82_cs +0 -0
  808. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/82_en +0 -0
  809. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/82_fr +0 -0
  810. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/82_ko +0 -0
  811. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/82_zh +0 -0
  812. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/82_zh_Hant +0 -0
  813. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/84_en +0 -0
  814. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/84_vi +0 -0
  815. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/86_en +0 -0
  816. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/86_zh +0 -0
  817. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/886_en +0 -0
  818. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/886_zh +0 -0
  819. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/886_zh_Hant +0 -0
  820. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/90_en +0 -0
  821. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/90_tr +0 -0
  822. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/91_en +0 -0
  823. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/94_en +0 -0
  824. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/962_en +0 -0
  825. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/966_ar +0 -0
  826. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/966_en +0 -0
  827. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/98_en +0 -0
  828. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/98_fa +0 -0
  829. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/geocoding/data/config +0 -0
  830. data/data/libphonenumber/java/geocoder/src/com/google/i18n/phonenumbers/timezones/data/map_data +0 -0
  831. data/data/libphonenumber/java/geocoder/test/com/google/i18n/phonenumbers/PhoneNumberToTimeZonesMapperTest.java +136 -0
  832. data/data/libphonenumber/java/geocoder/test/com/google/i18n/phonenumbers/geocoding/PhoneNumberOfflineGeocoderTest.java +163 -0
  833. data/data/libphonenumber/java/geocoder/test/com/google/i18n/phonenumbers/geocoding/testing_data/1201_de +0 -0
  834. data/data/libphonenumber/java/geocoder/test/com/google/i18n/phonenumbers/geocoding/testing_data/1201_en +0 -0
  835. data/data/libphonenumber/java/geocoder/test/com/google/i18n/phonenumbers/geocoding/testing_data/1212_en +0 -0
  836. data/data/libphonenumber/java/geocoder/test/com/google/i18n/phonenumbers/geocoding/testing_data/1617_en +0 -0
  837. data/data/libphonenumber/java/geocoder/test/com/google/i18n/phonenumbers/geocoding/testing_data/1650_de +0 -0
  838. data/data/libphonenumber/java/geocoder/test/com/google/i18n/phonenumbers/geocoding/testing_data/1650_en +0 -0
  839. data/data/libphonenumber/java/geocoder/test/com/google/i18n/phonenumbers/geocoding/testing_data/1989_en +0 -0
  840. data/data/libphonenumber/java/geocoder/test/com/google/i18n/phonenumbers/geocoding/testing_data/54_en +0 -0
  841. data/data/libphonenumber/java/geocoder/test/com/google/i18n/phonenumbers/geocoding/testing_data/82_en +0 -0
  842. data/data/libphonenumber/java/geocoder/test/com/google/i18n/phonenumbers/geocoding/testing_data/82_ko +0 -0
  843. data/data/libphonenumber/java/geocoder/test/com/google/i18n/phonenumbers/geocoding/testing_data/config +0 -0
  844. data/data/libphonenumber/java/geocoder/test/com/google/i18n/phonenumbers/timezones/testing_data/map_data +0 -0
  845. data/data/libphonenumber/java/internal/prefixmapper/pom.xml +36 -0
  846. data/data/libphonenumber/java/internal/prefixmapper/src/com/google/i18n/phonenumbers/prefixmapper/DefaultMapStorage.java +94 -0
  847. data/data/libphonenumber/java/internal/prefixmapper/src/com/google/i18n/phonenumbers/prefixmapper/FlyweightMapStorage.java +263 -0
  848. data/data/libphonenumber/java/internal/prefixmapper/src/com/google/i18n/phonenumbers/prefixmapper/MappingFileProvider.java +229 -0
  849. data/data/libphonenumber/java/internal/prefixmapper/src/com/google/i18n/phonenumbers/prefixmapper/PhonePrefixMap.java +216 -0
  850. data/data/libphonenumber/java/internal/prefixmapper/src/com/google/i18n/phonenumbers/prefixmapper/PhonePrefixMapStorageStrategy.java +108 -0
  851. data/data/libphonenumber/java/internal/prefixmapper/src/com/google/i18n/phonenumbers/prefixmapper/PrefixFileReader.java +143 -0
  852. data/data/libphonenumber/java/internal/prefixmapper/src/com/google/i18n/phonenumbers/prefixmapper/PrefixTimeZonesMap.java +126 -0
  853. data/data/libphonenumber/java/internal/prefixmapper/test/com/google/i18n/phonenumbers/prefixmapper/FlyweightMapStorageTest.java +107 -0
  854. data/data/libphonenumber/java/internal/prefixmapper/test/com/google/i18n/phonenumbers/prefixmapper/MappingFileProviderTest.java +93 -0
  855. data/data/libphonenumber/java/internal/prefixmapper/test/com/google/i18n/phonenumbers/prefixmapper/PhonePrefixMapTest.java +193 -0
  856. data/data/libphonenumber/java/internal/prefixmapper/test/com/google/i18n/phonenumbers/prefixmapper/PrefixFileReaderTest.java +75 -0
  857. data/data/libphonenumber/java/internal/prefixmapper/test/com/google/i18n/phonenumbers/prefixmapper/PrefixTimeZonesMapTest.java +176 -0
  858. data/data/libphonenumber/java/lib/junit-4.8.1.jar +0 -0
  859. data/data/libphonenumber/java/libphonenumber/pom.xml +33 -0
  860. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/AlternateFormatsCountryCodeSet.java +79 -0
  861. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/AsYouTypeFormatter.java +656 -0
  862. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMap.java +941 -0
  863. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/MetadataLoader.java +34 -0
  864. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/MetadataManager.java +138 -0
  865. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/NumberParseException.java +62 -0
  866. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberMatch.java +123 -0
  867. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberMatcher.java +725 -0
  868. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/PhoneNumberUtil.java +3232 -0
  869. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/Phonemetadata.java +1053 -0
  870. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/Phonenumber.java +285 -0
  871. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/RegexCache.java +78 -0
  872. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/ShortNumberInfo.java +587 -0
  873. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/ShortNumberUtil.java +80 -0
  874. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/ShortNumbersRegionCodeSet.java +268 -0
  875. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_255 +0 -0
  876. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_27 +0 -0
  877. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_30 +0 -0
  878. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_31 +0 -0
  879. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_34 +0 -0
  880. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_350 +0 -0
  881. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_351 +0 -0
  882. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_352 +0 -0
  883. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_358 +0 -0
  884. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_359 +0 -0
  885. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_36 +0 -0
  886. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_372 +0 -0
  887. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_373 +0 -0
  888. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_375 +0 -0
  889. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_380 +0 -0
  890. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_381 +0 -0
  891. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_385 +0 -0
  892. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_43 +0 -0
  893. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_44 +0 -0
  894. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_49 +0 -0
  895. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_505 +0 -0
  896. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_506 +0 -0
  897. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_54 +0 -0
  898. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_55 +0 -0
  899. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_58 +0 -0
  900. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_595 +0 -0
  901. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_61 +0 -0
  902. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_62 +0 -0
  903. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_63 +0 -0
  904. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_66 +0 -0
  905. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_675 +0 -0
  906. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_676 +0 -0
  907. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_679 +0 -0
  908. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_7 +0 -0
  909. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_81 +0 -0
  910. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_84 +0 -0
  911. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_855 +0 -0
  912. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_90 +0 -0
  913. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_91 +0 -0
  914. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_94 +0 -0
  915. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_95 +0 -0
  916. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_971 +0 -0
  917. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_972 +0 -0
  918. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberAlternateFormatsProto_995 +0 -0
  919. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_800 +0 -0
  920. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_808 +0 -0
  921. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_870 +0 -0
  922. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_878 +0 -0
  923. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_881 +0 -0
  924. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_882 +0 -0
  925. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_883 +0 -0
  926. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_888 +0 -0
  927. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_979 +0 -0
  928. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AC +0 -0
  929. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AD +0 -0
  930. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AE +0 -0
  931. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AF +0 -0
  932. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AG +0 -0
  933. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AI +0 -0
  934. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AL +0 -0
  935. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AM +0 -0
  936. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AO +0 -0
  937. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AR +0 -0
  938. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AS +0 -0
  939. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AT +0 -0
  940. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AU +0 -0
  941. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AW +0 -0
  942. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AX +0 -0
  943. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_AZ +0 -0
  944. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BA +0 -0
  945. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BB +0 -0
  946. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BD +0 -0
  947. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BE +0 -0
  948. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BF +0 -0
  949. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BG +0 -0
  950. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BH +0 -0
  951. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BI +0 -0
  952. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BJ +0 -0
  953. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BL +0 -0
  954. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BM +0 -0
  955. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BN +0 -0
  956. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BO +0 -0
  957. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BQ +0 -0
  958. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BR +0 -0
  959. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BS +0 -0
  960. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BT +0 -0
  961. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BW +0 -0
  962. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BY +0 -0
  963. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_BZ +0 -0
  964. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CA +0 -0
  965. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CC +0 -0
  966. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CD +0 -0
  967. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CF +0 -0
  968. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CG +0 -0
  969. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CH +0 -0
  970. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CI +0 -0
  971. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CK +0 -0
  972. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CL +0 -0
  973. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CM +0 -0
  974. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CN +0 -0
  975. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CO +0 -0
  976. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CR +0 -0
  977. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CU +0 -0
  978. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CV +0 -0
  979. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CW +0 -0
  980. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CX +0 -0
  981. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CY +0 -0
  982. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_CZ +0 -0
  983. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DE +0 -0
  984. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DJ +0 -0
  985. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DK +0 -0
  986. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DM +0 -0
  987. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DO +0 -0
  988. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_DZ +0 -0
  989. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EC +0 -0
  990. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EE +0 -0
  991. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EG +0 -0
  992. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_EH +0 -0
  993. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ER +0 -0
  994. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ES +0 -0
  995. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ET +0 -0
  996. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FI +0 -0
  997. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FJ +0 -0
  998. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FK +0 -0
  999. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FM +0 -0
  1000. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FO +0 -0
  1001. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_FR +0 -0
  1002. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GA +0 -0
  1003. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GB +0 -0
  1004. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GD +0 -0
  1005. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GE +0 -0
  1006. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GF +0 -0
  1007. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GG +0 -0
  1008. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GH +0 -0
  1009. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GI +0 -0
  1010. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GL +0 -0
  1011. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GM +0 -0
  1012. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GN +0 -0
  1013. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GP +0 -0
  1014. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GQ +0 -0
  1015. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GR +0 -0
  1016. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GT +0 -0
  1017. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GU +0 -0
  1018. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GW +0 -0
  1019. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_GY +0 -0
  1020. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HK +0 -0
  1021. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HN +0 -0
  1022. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HR +0 -0
  1023. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HT +0 -0
  1024. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_HU +0 -0
  1025. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ID +0 -0
  1026. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IE +0 -0
  1027. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IL +0 -0
  1028. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IM +0 -0
  1029. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IN +0 -0
  1030. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IO +0 -0
  1031. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IQ +0 -0
  1032. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IR +0 -0
  1033. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IS +0 -0
  1034. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_IT +0 -0
  1035. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JE +0 -0
  1036. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JM +0 -0
  1037. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JO +0 -0
  1038. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_JP +0 -0
  1039. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KE +0 -0
  1040. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KG +0 -0
  1041. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KH +0 -0
  1042. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KI +0 -0
  1043. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KM +0 -0
  1044. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KN +0 -0
  1045. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KP +0 -0
  1046. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KR +0 -0
  1047. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KW +0 -0
  1048. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KY +0 -0
  1049. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_KZ +0 -0
  1050. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LA +0 -0
  1051. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LB +0 -0
  1052. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LC +0 -0
  1053. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LI +0 -0
  1054. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LK +0 -0
  1055. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LR +0 -0
  1056. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LS +0 -0
  1057. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LT +0 -0
  1058. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LU +0 -0
  1059. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LV +0 -0
  1060. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_LY +0 -0
  1061. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MA +0 -0
  1062. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MC +0 -0
  1063. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MD +0 -0
  1064. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ME +0 -0
  1065. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MF +0 -0
  1066. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MG +0 -0
  1067. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MH +0 -0
  1068. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MK +0 -0
  1069. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ML +0 -0
  1070. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MM +0 -0
  1071. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MN +0 -0
  1072. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MO +0 -0
  1073. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MP +0 -0
  1074. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MQ +0 -0
  1075. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MR +0 -0
  1076. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MS +0 -0
  1077. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MT +0 -0
  1078. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MU +0 -0
  1079. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MV +0 -0
  1080. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MW +0 -0
  1081. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MX +0 -0
  1082. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MY +0 -0
  1083. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_MZ +0 -0
  1084. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NA +0 -0
  1085. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NC +0 -0
  1086. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NE +0 -0
  1087. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NF +0 -0
  1088. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NG +0 -0
  1089. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NI +0 -0
  1090. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NL +0 -0
  1091. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NO +0 -0
  1092. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NP +0 -0
  1093. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NR +0 -0
  1094. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NU +0 -0
  1095. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_NZ +0 -0
  1096. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_OM +0 -0
  1097. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PA +0 -0
  1098. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PE +0 -0
  1099. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PF +0 -0
  1100. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PG +0 -0
  1101. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PH +0 -0
  1102. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PK +0 -0
  1103. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PL +0 -0
  1104. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PM +0 -0
  1105. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PR +0 -0
  1106. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PS +0 -0
  1107. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PT +0 -0
  1108. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PW +0 -0
  1109. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_PY +0 -0
  1110. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_QA +0 -0
  1111. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RE +0 -0
  1112. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RO +0 -0
  1113. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RS +0 -0
  1114. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RU +0 -0
  1115. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_RW +0 -0
  1116. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SA +0 -0
  1117. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SB +0 -0
  1118. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SC +0 -0
  1119. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SD +0 -0
  1120. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SE +0 -0
  1121. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SG +0 -0
  1122. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SH +0 -0
  1123. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SI +0 -0
  1124. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SJ +0 -0
  1125. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SK +0 -0
  1126. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SL +0 -0
  1127. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SM +0 -0
  1128. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SN +0 -0
  1129. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SO +0 -0
  1130. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SR +0 -0
  1131. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SS +0 -0
  1132. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ST +0 -0
  1133. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SV +0 -0
  1134. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SX +0 -0
  1135. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SY +0 -0
  1136. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_SZ +0 -0
  1137. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TA +0 -0
  1138. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TC +0 -0
  1139. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TD +0 -0
  1140. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TG +0 -0
  1141. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TH +0 -0
  1142. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TJ +0 -0
  1143. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TK +0 -0
  1144. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TL +0 -0
  1145. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TM +0 -0
  1146. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TN +0 -0
  1147. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TO +0 -0
  1148. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TR +0 -0
  1149. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TT +0 -0
  1150. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TV +0 -0
  1151. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TW +0 -0
  1152. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_TZ +0 -0
  1153. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UA +0 -0
  1154. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UG +0 -0
  1155. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_US +0 -0
  1156. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UY +0 -0
  1157. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_UZ +0 -0
  1158. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VA +0 -0
  1159. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VC +0 -0
  1160. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VE +0 -0
  1161. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VG +0 -0
  1162. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VI +0 -0
  1163. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VN +0 -0
  1164. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_VU +0 -0
  1165. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WF +0 -0
  1166. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_WS +0 -0
  1167. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YE +0 -0
  1168. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_YT +0 -0
  1169. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZA +0 -0
  1170. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZM +0 -0
  1171. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProto_ZW +0 -0
  1172. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AC +0 -0
  1173. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AD +0 -0
  1174. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AE +0 -0
  1175. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AF +0 -0
  1176. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AG +0 -0
  1177. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AI +0 -0
  1178. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AL +0 -0
  1179. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AM +0 -0
  1180. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AO +0 -0
  1181. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AR +0 -0
  1182. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AS +0 -0
  1183. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AT +0 -0
  1184. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AU +0 -0
  1185. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AW +0 -0
  1186. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AX +0 -0
  1187. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_AZ +0 -0
  1188. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BA +0 -0
  1189. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BB +0 -0
  1190. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BD +0 -0
  1191. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BE +0 -0
  1192. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BF +0 -0
  1193. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BG +0 -0
  1194. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BH +0 -0
  1195. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BI +0 -0
  1196. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BJ +0 -0
  1197. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BL +0 -0
  1198. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BM +0 -0
  1199. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BN +0 -0
  1200. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BO +0 -0
  1201. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BQ +0 -0
  1202. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BR +0 -0
  1203. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BS +0 -0
  1204. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BT +0 -0
  1205. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BW +0 -0
  1206. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BY +0 -0
  1207. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_BZ +0 -0
  1208. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CA +0 -0
  1209. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CC +0 -0
  1210. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CD +0 -0
  1211. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CH +0 -0
  1212. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CI +0 -0
  1213. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CK +0 -0
  1214. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CL +0 -0
  1215. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CM +0 -0
  1216. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CN +0 -0
  1217. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CO +0 -0
  1218. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CR +0 -0
  1219. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CU +0 -0
  1220. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CV +0 -0
  1221. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CW +0 -0
  1222. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CX +0 -0
  1223. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CY +0 -0
  1224. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_CZ +0 -0
  1225. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DE +0 -0
  1226. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DJ +0 -0
  1227. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DK +0 -0
  1228. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DM +0 -0
  1229. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DO +0 -0
  1230. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_DZ +0 -0
  1231. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_EC +0 -0
  1232. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_EE +0 -0
  1233. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_EG +0 -0
  1234. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_EH +0 -0
  1235. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ES +0 -0
  1236. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ET +0 -0
  1237. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FI +0 -0
  1238. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FJ +0 -0
  1239. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FK +0 -0
  1240. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FM +0 -0
  1241. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FO +0 -0
  1242. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_FR +0 -0
  1243. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GA +0 -0
  1244. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GB +0 -0
  1245. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GD +0 -0
  1246. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GE +0 -0
  1247. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GF +0 -0
  1248. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GG +0 -0
  1249. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GH +0 -0
  1250. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GI +0 -0
  1251. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GL +0 -0
  1252. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GM +0 -0
  1253. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GN +0 -0
  1254. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GP +0 -0
  1255. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GR +0 -0
  1256. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GT +0 -0
  1257. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GU +0 -0
  1258. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GW +0 -0
  1259. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_GY +0 -0
  1260. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HK +0 -0
  1261. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HN +0 -0
  1262. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HR +0 -0
  1263. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HT +0 -0
  1264. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_HU +0 -0
  1265. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ID +0 -0
  1266. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IE +0 -0
  1267. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IL +0 -0
  1268. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IM +0 -0
  1269. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IN +0 -0
  1270. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IQ +0 -0
  1271. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IR +0 -0
  1272. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IS +0 -0
  1273. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_IT +0 -0
  1274. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_JE +0 -0
  1275. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_JM +0 -0
  1276. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_JO +0 -0
  1277. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_JP +0 -0
  1278. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KE +0 -0
  1279. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KG +0 -0
  1280. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KH +0 -0
  1281. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KI +0 -0
  1282. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KM +0 -0
  1283. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KN +0 -0
  1284. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KR +0 -0
  1285. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KW +0 -0
  1286. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KY +0 -0
  1287. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_KZ +0 -0
  1288. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LA +0 -0
  1289. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LB +0 -0
  1290. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LC +0 -0
  1291. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LI +0 -0
  1292. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LK +0 -0
  1293. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LR +0 -0
  1294. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LS +0 -0
  1295. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LT +0 -0
  1296. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LU +0 -0
  1297. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LV +0 -0
  1298. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_LY +0 -0
  1299. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MA +0 -0
  1300. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MC +0 -0
  1301. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MD +0 -0
  1302. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ME +0 -0
  1303. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MF +0 -0
  1304. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MG +0 -0
  1305. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MH +0 -0
  1306. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MK +0 -0
  1307. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ML +0 -0
  1308. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MM +0 -0
  1309. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MN +0 -0
  1310. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MO +0 -0
  1311. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MP +0 -0
  1312. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MQ +0 -0
  1313. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MR +0 -0
  1314. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MS +0 -0
  1315. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MT +0 -0
  1316. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MU +0 -0
  1317. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MV +0 -0
  1318. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MW +0 -0
  1319. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MX +0 -0
  1320. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MY +0 -0
  1321. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_MZ +0 -0
  1322. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NA +0 -0
  1323. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NC +0 -0
  1324. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NF +0 -0
  1325. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NG +0 -0
  1326. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NI +0 -0
  1327. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NL +0 -0
  1328. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NO +0 -0
  1329. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NP +0 -0
  1330. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NR +0 -0
  1331. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NU +0 -0
  1332. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_NZ +0 -0
  1333. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_OM +0 -0
  1334. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PA +0 -0
  1335. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PE +0 -0
  1336. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PF +0 -0
  1337. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PG +0 -0
  1338. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PH +0 -0
  1339. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PK +0 -0
  1340. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PL +0 -0
  1341. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PM +0 -0
  1342. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PR +0 -0
  1343. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PT +0 -0
  1344. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PW +0 -0
  1345. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_PY +0 -0
  1346. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_QA +0 -0
  1347. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_RE +0 -0
  1348. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_RO +0 -0
  1349. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_RS +0 -0
  1350. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_RU +0 -0
  1351. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_RW +0 -0
  1352. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SA +0 -0
  1353. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SB +0 -0
  1354. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SC +0 -0
  1355. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SD +0 -0
  1356. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SE +0 -0
  1357. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SG +0 -0
  1358. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SH +0 -0
  1359. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SI +0 -0
  1360. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SJ +0 -0
  1361. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SK +0 -0
  1362. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SL +0 -0
  1363. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SM +0 -0
  1364. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SN +0 -0
  1365. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SR +0 -0
  1366. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ST +0 -0
  1367. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SV +0 -0
  1368. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SX +0 -0
  1369. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SY +0 -0
  1370. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_SZ +0 -0
  1371. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TC +0 -0
  1372. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TD +0 -0
  1373. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TG +0 -0
  1374. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TH +0 -0
  1375. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TJ +0 -0
  1376. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TL +0 -0
  1377. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TM +0 -0
  1378. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TN +0 -0
  1379. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TO +0 -0
  1380. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TR +0 -0
  1381. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TT +0 -0
  1382. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TV +0 -0
  1383. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TW +0 -0
  1384. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_TZ +0 -0
  1385. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_UA +0 -0
  1386. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_UG +0 -0
  1387. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_US +0 -0
  1388. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_UY +0 -0
  1389. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_UZ +0 -0
  1390. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VA +0 -0
  1391. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VC +0 -0
  1392. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VE +0 -0
  1393. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VG +0 -0
  1394. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VI +0 -0
  1395. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VN +0 -0
  1396. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_VU +0 -0
  1397. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_WF +0 -0
  1398. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_WS +0 -0
  1399. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_YE +0 -0
  1400. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_YT +0 -0
  1401. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ZA +0 -0
  1402. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ZM +0 -0
  1403. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/data/ShortNumberMetadataProto_ZW +0 -0
  1404. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/internal/MatcherApi.java +38 -0
  1405. data/data/libphonenumber/java/libphonenumber/src/com/google/i18n/phonenumbers/internal/RegexBasedMatcher.java +52 -0
  1406. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/AsYouTypeFormatterTest.java +1173 -0
  1407. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/CountryCodeToRegionCodeMapForTesting.java +142 -0
  1408. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/ExampleNumbersTest.java +256 -0
  1409. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/MetadataManagerTest.java +51 -0
  1410. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/PhoneNumberMatchTest.java +70 -0
  1411. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/PhoneNumberMatcherTest.java +1090 -0
  1412. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/PhoneNumberUtilTest.java +2570 -0
  1413. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/PhonenumberTest.java +112 -0
  1414. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/RegexCacheTest.java +55 -0
  1415. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/RegionCode.java +61 -0
  1416. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/ShortNumberInfoTest.java +344 -0
  1417. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/ShortNumberUtilTest.java +140 -0
  1418. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/TestMetadataTestCase.java +46 -0
  1419. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_800 +0 -0
  1420. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_979 +0 -0
  1421. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AD +0 -0
  1422. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AE +0 -0
  1423. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AO +0 -0
  1424. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AR +0 -0
  1425. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_AU +0 -0
  1426. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_BB +0 -0
  1427. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_BR +0 -0
  1428. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_BS +0 -0
  1429. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_BY +0 -0
  1430. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_CA +0 -0
  1431. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_CC +0 -0
  1432. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_CN +0 -0
  1433. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_CX +0 -0
  1434. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_DE +0 -0
  1435. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_FR +0 -0
  1436. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_GB +0 -0
  1437. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_GG +0 -0
  1438. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_HU +0 -0
  1439. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_IT +0 -0
  1440. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_JP +0 -0
  1441. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_KR +0 -0
  1442. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_MX +0 -0
  1443. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_NZ +0 -0
  1444. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_PL +0 -0
  1445. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_RE +0 -0
  1446. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_SG +0 -0
  1447. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_US +0 -0
  1448. data/data/libphonenumber/java/libphonenumber/test/com/google/i18n/phonenumbers/data/PhoneNumberMetadataProtoForTesting_YT +0 -0
  1449. data/data/libphonenumber/java/pom.xml +186 -0
  1450. data/data/libphonenumber/java/release_notes.txt +963 -0
  1451. data/data/libphonenumber/javadoc/allclasses-frame.html +49 -0
  1452. data/data/libphonenumber/javadoc/allclasses-noframe.html +49 -0
  1453. data/data/libphonenumber/javadoc/com/google/i18n/phonenumbers/AsYouTypeFormatter.html +302 -0
  1454. data/data/libphonenumber/javadoc/com/google/i18n/phonenumbers/NumberParseException.ErrorType.html +369 -0
  1455. data/data/libphonenumber/javadoc/com/google/i18n/phonenumbers/NumberParseException.html +311 -0
  1456. data/data/libphonenumber/javadoc/com/google/i18n/phonenumbers/PhoneNumberMatch.html +378 -0
  1457. data/data/libphonenumber/javadoc/com/google/i18n/phonenumbers/PhoneNumberUtil.Leniency.html +330 -0
  1458. data/data/libphonenumber/javadoc/com/google/i18n/phonenumbers/PhoneNumberUtil.MatchType.html +373 -0
  1459. data/data/libphonenumber/javadoc/com/google/i18n/phonenumbers/PhoneNumberUtil.PhoneNumberFormat.html +365 -0
  1460. data/data/libphonenumber/javadoc/com/google/i18n/phonenumbers/PhoneNumberUtil.PhoneNumberType.html +469 -0
  1461. data/data/libphonenumber/javadoc/com/google/i18n/phonenumbers/PhoneNumberUtil.ValidationResult.html +357 -0
  1462. data/data/libphonenumber/javadoc/com/google/i18n/phonenumbers/PhoneNumberUtil.html +1405 -0
  1463. data/data/libphonenumber/javadoc/com/google/i18n/phonenumbers/package-frame.html +68 -0
  1464. data/data/libphonenumber/javadoc/com/google/i18n/phonenumbers/package-summary.html +211 -0
  1465. data/data/libphonenumber/javadoc/com/google/i18n/phonenumbers/package-tree.html +161 -0
  1466. data/data/libphonenumber/javadoc/constant-values.html +142 -0
  1467. data/data/libphonenumber/javadoc/deprecated-list.html +142 -0
  1468. data/data/libphonenumber/javadoc/help-doc.html +209 -0
  1469. data/data/libphonenumber/javadoc/index-all.html +413 -0
  1470. data/data/libphonenumber/javadoc/index.html +36 -0
  1471. data/data/libphonenumber/javadoc/overview-tree.html +163 -0
  1472. data/data/libphonenumber/javadoc/package-list +1 -0
  1473. data/data/libphonenumber/javadoc/resources/inherit.gif +0 -0
  1474. data/data/libphonenumber/javadoc/serialized-form.html +184 -0
  1475. data/data/libphonenumber/javadoc/stylesheet.css +29 -0
  1476. data/data/libphonenumber/javascript/README +99 -0
  1477. data/data/libphonenumber/javascript/build.xml +137 -0
  1478. data/data/libphonenumber/javascript/i18n/phonenumbers/asyoutypeformatter.js +1108 -0
  1479. data/data/libphonenumber/javascript/i18n/phonenumbers/asyoutypeformatter_test.html +38 -0
  1480. data/data/libphonenumber/javascript/i18n/phonenumbers/asyoutypeformatter_test.js +1205 -0
  1481. data/data/libphonenumber/javascript/i18n/phonenumbers/demo-compiled.html +53 -0
  1482. data/data/libphonenumber/javascript/i18n/phonenumbers/demo-compiled.js +510 -0
  1483. data/data/libphonenumber/javascript/i18n/phonenumbers/demo.html +62 -0
  1484. data/data/libphonenumber/javascript/i18n/phonenumbers/demo.js +161 -0
  1485. data/data/libphonenumber/javascript/i18n/phonenumbers/metadata.js +5167 -0
  1486. data/data/libphonenumber/javascript/i18n/phonenumbers/metadatafortesting.js +616 -0
  1487. data/data/libphonenumber/javascript/i18n/phonenumbers/metadatalite.js +5167 -0
  1488. data/data/libphonenumber/javascript/i18n/phonenumbers/phonemetadata.pb.js +2283 -0
  1489. data/data/libphonenumber/javascript/i18n/phonenumbers/phonenumber.pb.js +520 -0
  1490. data/data/libphonenumber/javascript/i18n/phonenumbers/phonenumberutil.js +4194 -0
  1491. data/data/libphonenumber/javascript/i18n/phonenumbers/phonenumberutil_test.html +37 -0
  1492. data/data/libphonenumber/javascript/i18n/phonenumbers/phonenumberutil_test.js +3322 -0
  1493. data/data/libphonenumber/javascript/i18n/phonenumbers/regioncodefortesting.js +66 -0
  1494. data/data/libphonenumber/pom.xml +26 -0
  1495. data/data/libphonenumber/resources/PhoneNumberAlternateFormats.xml +1853 -0
  1496. data/data/{PhoneNumberMetaData.xml → libphonenumber/resources/PhoneNumberMetadata.xml} +0 -0
  1497. data/data/libphonenumber/resources/PhoneNumberMetadataForTesting.xml +938 -0
  1498. data/data/libphonenumber/resources/ShortNumberMetadata.xml +8725 -0
  1499. data/data/libphonenumber/resources/carrier/README +2 -0
  1500. data/data/libphonenumber/resources/carrier/ar/965.txt +17 -0
  1501. data/data/libphonenumber/resources/carrier/be/375.txt +28 -0
  1502. data/data/libphonenumber/resources/carrier/en/1.txt +459 -0
  1503. data/data/libphonenumber/resources/carrier/en/20.txt +17 -0
  1504. data/data/libphonenumber/resources/carrier/en/211.txt +18 -0
  1505. data/data/libphonenumber/resources/carrier/en/212.txt +107 -0
  1506. data/data/libphonenumber/resources/carrier/en/213.txt +20 -0
  1507. data/data/libphonenumber/resources/carrier/en/216.txt +26 -0
  1508. data/data/libphonenumber/resources/carrier/en/220.txt +19 -0
  1509. data/data/libphonenumber/resources/carrier/en/221.txt +23 -0
  1510. data/data/libphonenumber/resources/carrier/en/222.txt +19 -0
  1511. data/data/libphonenumber/resources/carrier/en/223.txt +15 -0
  1512. data/data/libphonenumber/resources/carrier/en/224.txt +21 -0
  1513. data/data/libphonenumber/resources/carrier/en/225.txt +52 -0
  1514. data/data/libphonenumber/resources/carrier/en/226.txt +36 -0
  1515. data/data/libphonenumber/resources/carrier/en/227.txt +24 -0
  1516. data/data/libphonenumber/resources/carrier/en/228.txt +16 -0
  1517. data/data/libphonenumber/resources/carrier/en/229.txt +26 -0
  1518. data/data/libphonenumber/resources/carrier/en/230.txt +61 -0
  1519. data/data/libphonenumber/resources/carrier/en/231.txt +19 -0
  1520. data/data/libphonenumber/resources/carrier/en/232.txt +21 -0
  1521. data/data/libphonenumber/resources/carrier/en/233.txt +23 -0
  1522. data/data/libphonenumber/resources/carrier/en/234.txt +245 -0
  1523. data/data/libphonenumber/resources/carrier/en/235.txt +15 -0
  1524. data/data/libphonenumber/resources/carrier/en/236.txt +18 -0
  1525. data/data/libphonenumber/resources/carrier/en/237.txt +27 -0
  1526. data/data/libphonenumber/resources/carrier/en/238.txt +20 -0
  1527. data/data/libphonenumber/resources/carrier/en/239.txt +16 -0
  1528. data/data/libphonenumber/resources/carrier/en/240.txt +17 -0
  1529. data/data/libphonenumber/resources/carrier/en/241.txt +35 -0
  1530. data/data/libphonenumber/resources/carrier/en/242.txt +16 -0
  1531. data/data/libphonenumber/resources/carrier/en/243.txt +23 -0
  1532. data/data/libphonenumber/resources/carrier/en/244.txt +19 -0
  1533. data/data/libphonenumber/resources/carrier/en/245.txt +16 -0
  1534. data/data/libphonenumber/resources/carrier/en/248.txt +16 -0
  1535. data/data/libphonenumber/resources/carrier/en/249.txt +19 -0
  1536. data/data/libphonenumber/resources/carrier/en/250.txt +15 -0
  1537. data/data/libphonenumber/resources/carrier/en/251.txt +15 -0
  1538. data/data/libphonenumber/resources/carrier/en/252.txt +22 -0
  1539. data/data/libphonenumber/resources/carrier/en/253.txt +17 -0
  1540. data/data/libphonenumber/resources/carrier/en/254.txt +44 -0
  1541. data/data/libphonenumber/resources/carrier/en/255.txt +21 -0
  1542. data/data/libphonenumber/resources/carrier/en/256.txt +26 -0
  1543. data/data/libphonenumber/resources/carrier/en/257.txt +25 -0
  1544. data/data/libphonenumber/resources/carrier/en/258.txt +18 -0
  1545. data/data/libphonenumber/resources/carrier/en/260.txt +17 -0
  1546. data/data/libphonenumber/resources/carrier/en/261.txt +18 -0
  1547. data/data/libphonenumber/resources/carrier/en/263.txt +17 -0
  1548. data/data/libphonenumber/resources/carrier/en/265.txt +16 -0
  1549. data/data/libphonenumber/resources/carrier/en/267.txt +54 -0
  1550. data/data/libphonenumber/resources/carrier/en/268.txt +15 -0
  1551. data/data/libphonenumber/resources/carrier/en/27.txt +70 -0
  1552. data/data/libphonenumber/resources/carrier/en/297.txt +29 -0
  1553. data/data/libphonenumber/resources/carrier/en/298.txt +18 -0
  1554. data/data/libphonenumber/resources/carrier/en/299.txt +17 -0
  1555. data/data/libphonenumber/resources/carrier/en/30.txt +20 -0
  1556. data/data/libphonenumber/resources/carrier/en/31.txt +65 -0
  1557. data/data/libphonenumber/resources/carrier/en/32.txt +18 -0
  1558. data/data/libphonenumber/resources/carrier/en/33.txt +72 -0
  1559. data/data/libphonenumber/resources/carrier/en/350.txt +19 -0
  1560. data/data/libphonenumber/resources/carrier/en/351.txt +26 -0
  1561. data/data/libphonenumber/resources/carrier/en/352.txt +23 -0
  1562. data/data/libphonenumber/resources/carrier/en/353.txt +20 -0
  1563. data/data/libphonenumber/resources/carrier/en/354.txt +44 -0
  1564. data/data/libphonenumber/resources/carrier/en/355.txt +18 -0
  1565. data/data/libphonenumber/resources/carrier/en/356.txt +27 -0
  1566. data/data/libphonenumber/resources/carrier/en/357.txt +19 -0
  1567. data/data/libphonenumber/resources/carrier/en/358.txt +44 -0
  1568. data/data/libphonenumber/resources/carrier/en/359.txt +18 -0
  1569. data/data/libphonenumber/resources/carrier/en/36.txt +17 -0
  1570. data/data/libphonenumber/resources/carrier/en/370.txt +50 -0
  1571. data/data/libphonenumber/resources/carrier/en/372.txt +30 -0
  1572. data/data/libphonenumber/resources/carrier/en/373.txt +44 -0
  1573. data/data/libphonenumber/resources/carrier/en/374.txt +29 -0
  1574. data/data/libphonenumber/resources/carrier/en/375.txt +28 -0
  1575. data/data/libphonenumber/resources/carrier/en/376.txt +15 -0
  1576. data/data/libphonenumber/resources/carrier/en/380.txt +15 -0
  1577. data/data/libphonenumber/resources/carrier/en/381.txt +23 -0
  1578. data/data/libphonenumber/resources/carrier/en/385.txt +19 -0
  1579. data/data/libphonenumber/resources/carrier/en/386.txt +23 -0
  1580. data/data/libphonenumber/resources/carrier/en/387.txt +20 -0
  1581. data/data/libphonenumber/resources/carrier/en/389.txt +23 -0
  1582. data/data/libphonenumber/resources/carrier/en/39.txt +23 -0
  1583. data/data/libphonenumber/resources/carrier/en/40.txt +20 -0
  1584. data/data/libphonenumber/resources/carrier/en/41.txt +18 -0
  1585. data/data/libphonenumber/resources/carrier/en/420.txt +32 -0
  1586. data/data/libphonenumber/resources/carrier/en/421.txt +28 -0
  1587. data/data/libphonenumber/resources/carrier/en/43.txt +26 -0
  1588. data/data/libphonenumber/resources/carrier/en/45.txt +364 -0
  1589. data/data/libphonenumber/resources/carrier/en/47.txt +239 -0
  1590. data/data/libphonenumber/resources/carrier/en/48.txt +118 -0
  1591. data/data/libphonenumber/resources/carrier/en/49.txt +44 -0
  1592. data/data/libphonenumber/resources/carrier/en/501.txt +16 -0
  1593. data/data/libphonenumber/resources/carrier/en/505.txt +101 -0
  1594. data/data/libphonenumber/resources/carrier/en/506.txt +49 -0
  1595. data/data/libphonenumber/resources/carrier/en/507.txt +84 -0
  1596. data/data/libphonenumber/resources/carrier/en/51.txt +584 -0
  1597. data/data/libphonenumber/resources/carrier/en/53.txt +15 -0
  1598. data/data/libphonenumber/resources/carrier/en/54.txt +98 -0
  1599. data/data/libphonenumber/resources/carrier/en/55.txt +9479 -0
  1600. data/data/libphonenumber/resources/carrier/en/56.txt +538 -0
  1601. data/data/libphonenumber/resources/carrier/en/57.txt +38 -0
  1602. data/data/libphonenumber/resources/carrier/en/58.txt +18 -0
  1603. data/data/libphonenumber/resources/carrier/en/591.txt +51 -0
  1604. data/data/libphonenumber/resources/carrier/en/595.txt +19 -0
  1605. data/data/libphonenumber/resources/carrier/en/597.txt +33 -0
  1606. data/data/libphonenumber/resources/carrier/en/598.txt +25 -0
  1607. data/data/libphonenumber/resources/carrier/en/599.txt +47 -0
  1608. data/data/libphonenumber/resources/carrier/en/60.txt +113 -0
  1609. data/data/libphonenumber/resources/carrier/en/61.txt +92 -0
  1610. data/data/libphonenumber/resources/carrier/en/62.txt +701 -0
  1611. data/data/libphonenumber/resources/carrier/en/63.txt +53 -0
  1612. data/data/libphonenumber/resources/carrier/en/64.txt +22 -0
  1613. data/data/libphonenumber/resources/carrier/en/65.txt +403 -0
  1614. data/data/libphonenumber/resources/carrier/en/66.txt +47 -0
  1615. data/data/libphonenumber/resources/carrier/en/670.txt +16 -0
  1616. data/data/libphonenumber/resources/carrier/en/673.txt +22 -0
  1617. data/data/libphonenumber/resources/carrier/en/675.txt +29 -0
  1618. data/data/libphonenumber/resources/carrier/en/676.txt +39 -0
  1619. data/data/libphonenumber/resources/carrier/en/677.txt +38 -0
  1620. data/data/libphonenumber/resources/carrier/en/678.txt +31 -0
  1621. data/data/libphonenumber/resources/carrier/en/679.txt +23 -0
  1622. data/data/libphonenumber/resources/carrier/en/685.txt +17 -0
  1623. data/data/libphonenumber/resources/carrier/en/686.txt +20 -0
  1624. data/data/libphonenumber/resources/carrier/en/7.txt +24 -0
  1625. data/data/libphonenumber/resources/carrier/en/84.txt +24 -0
  1626. data/data/libphonenumber/resources/carrier/en/852.txt +282 -0
  1627. data/data/libphonenumber/resources/carrier/en/855.txt +34 -0
  1628. data/data/libphonenumber/resources/carrier/en/856.txt +18 -0
  1629. data/data/libphonenumber/resources/carrier/en/86.txt +43 -0
  1630. data/data/libphonenumber/resources/carrier/en/880.txt +20 -0
  1631. data/data/libphonenumber/resources/carrier/en/90.txt +26 -0
  1632. data/data/libphonenumber/resources/carrier/en/91.txt +1647 -0
  1633. data/data/libphonenumber/resources/carrier/en/92.txt +49 -0
  1634. data/data/libphonenumber/resources/carrier/en/93.txt +27 -0
  1635. data/data/libphonenumber/resources/carrier/en/94.txt +19 -0
  1636. data/data/libphonenumber/resources/carrier/en/95.txt +16 -0
  1637. data/data/libphonenumber/resources/carrier/en/960.txt +16 -0
  1638. data/data/libphonenumber/resources/carrier/en/961.txt +25 -0
  1639. data/data/libphonenumber/resources/carrier/en/962.txt +18 -0
  1640. data/data/libphonenumber/resources/carrier/en/964.txt +19 -0
  1641. data/data/libphonenumber/resources/carrier/en/965.txt +17 -0
  1642. data/data/libphonenumber/resources/carrier/en/966.txt +27 -0
  1643. data/data/libphonenumber/resources/carrier/en/967.txt +21 -0
  1644. data/data/libphonenumber/resources/carrier/en/968.txt +18 -0
  1645. data/data/libphonenumber/resources/carrier/en/970.txt +16 -0
  1646. data/data/libphonenumber/resources/carrier/en/971.txt +18 -0
  1647. data/data/libphonenumber/resources/carrier/en/972.txt +32 -0
  1648. data/data/libphonenumber/resources/carrier/en/973.txt +30 -0
  1649. data/data/libphonenumber/resources/carrier/en/974.txt +18 -0
  1650. data/data/libphonenumber/resources/carrier/en/975.txt +15 -0
  1651. data/data/libphonenumber/resources/carrier/en/977.txt +25 -0
  1652. data/data/libphonenumber/resources/carrier/en/98.txt +29 -0
  1653. data/data/libphonenumber/resources/carrier/en/992.txt +23 -0
  1654. data/data/libphonenumber/resources/carrier/en/993.txt +17 -0
  1655. data/data/libphonenumber/resources/carrier/en/994.txt +20 -0
  1656. data/data/libphonenumber/resources/carrier/en/995.txt +34 -0
  1657. data/data/libphonenumber/resources/carrier/en/996.txt +22 -0
  1658. data/data/libphonenumber/resources/carrier/en/998.txt +33 -0
  1659. data/data/libphonenumber/resources/carrier/ru/375.txt +28 -0
  1660. data/data/libphonenumber/resources/geocoding/am/374.txt +177 -0
  1661. data/data/libphonenumber/resources/geocoding/ar/82.txt +34 -0
  1662. data/data/libphonenumber/resources/geocoding/ar/966.txt +27 -0
  1663. data/data/libphonenumber/resources/geocoding/be/375.txt +144 -0
  1664. data/data/libphonenumber/resources/geocoding/bg/359.txt +2105 -0
  1665. data/data/libphonenumber/resources/geocoding/cs/82.txt +35 -0
  1666. data/data/libphonenumber/resources/geocoding/de/32.txt +59 -0
  1667. data/data/libphonenumber/resources/geocoding/de/352.txt +229 -0
  1668. data/data/libphonenumber/resources/geocoding/de/41.txt +37 -0
  1669. data/data/libphonenumber/resources/geocoding/de/43.txt +1037 -0
  1670. data/data/libphonenumber/resources/geocoding/de/49.txt +5219 -0
  1671. data/data/libphonenumber/resources/geocoding/el/30.txt +259 -0
  1672. data/data/libphonenumber/resources/geocoding/en/1.txt +36228 -0
  1673. data/data/libphonenumber/resources/geocoding/en/20.txt +45 -0
  1674. data/data/libphonenumber/resources/geocoding/en/212.txt +85 -0
  1675. data/data/libphonenumber/resources/geocoding/en/213.txt +30 -0
  1676. data/data/libphonenumber/resources/geocoding/en/216.txt +26 -0
  1677. data/data/libphonenumber/resources/geocoding/en/220.txt +59 -0
  1678. data/data/libphonenumber/resources/geocoding/en/221.txt +19 -0
  1679. data/data/libphonenumber/resources/geocoding/en/222.txt +28 -0
  1680. data/data/libphonenumber/resources/geocoding/en/224.txt +38 -0
  1681. data/data/libphonenumber/resources/geocoding/en/225.txt +28 -0
  1682. data/data/libphonenumber/resources/geocoding/en/226.txt +50 -0
  1683. data/data/libphonenumber/resources/geocoding/en/228.txt +24 -0
  1684. data/data/libphonenumber/resources/geocoding/en/229.txt +52 -0
  1685. data/data/libphonenumber/resources/geocoding/en/230.txt +25 -0
  1686. data/data/libphonenumber/resources/geocoding/en/232.txt +20 -0
  1687. data/data/libphonenumber/resources/geocoding/en/233.txt +86 -0
  1688. data/data/libphonenumber/resources/geocoding/en/234.txt +79 -0
  1689. data/data/libphonenumber/resources/geocoding/en/237.txt +125 -0
  1690. data/data/libphonenumber/resources/geocoding/en/238.txt +54 -0
  1691. data/data/libphonenumber/resources/geocoding/en/239.txt +35 -0
  1692. data/data/libphonenumber/resources/geocoding/en/241.txt +48 -0
  1693. data/data/libphonenumber/resources/geocoding/en/242.txt +23 -0
  1694. data/data/libphonenumber/resources/geocoding/en/243.txt +22 -0
  1695. data/data/libphonenumber/resources/geocoding/en/244.txt +54 -0
  1696. data/data/libphonenumber/resources/geocoding/en/245.txt +36 -0
  1697. data/data/libphonenumber/resources/geocoding/en/247.txt +27 -0
  1698. data/data/libphonenumber/resources/geocoding/en/249.txt +28 -0
  1699. data/data/libphonenumber/resources/geocoding/en/251.txt +385 -0
  1700. data/data/libphonenumber/resources/geocoding/en/252.txt +21 -0
  1701. data/data/libphonenumber/resources/geocoding/en/254.txt +46 -0
  1702. data/data/libphonenumber/resources/geocoding/en/256.txt +30 -0
  1703. data/data/libphonenumber/resources/geocoding/en/257.txt +28 -0
  1704. data/data/libphonenumber/resources/geocoding/en/258.txt +27 -0
  1705. data/data/libphonenumber/resources/geocoding/en/260.txt +26 -0
  1706. data/data/libphonenumber/resources/geocoding/en/261.txt +40 -0
  1707. data/data/libphonenumber/resources/geocoding/en/263.txt +116 -0
  1708. data/data/libphonenumber/resources/geocoding/en/264.txt +1046 -0
  1709. data/data/libphonenumber/resources/geocoding/en/266.txt +18 -0
  1710. data/data/libphonenumber/resources/geocoding/en/267.txt +35 -0
  1711. data/data/libphonenumber/resources/geocoding/en/268.txt +54 -0
  1712. data/data/libphonenumber/resources/geocoding/en/269.txt +32 -0
  1713. data/data/libphonenumber/resources/geocoding/en/27.txt +57 -0
  1714. data/data/libphonenumber/resources/geocoding/en/290.txt +24 -0
  1715. data/data/libphonenumber/resources/geocoding/en/299.txt +43 -0
  1716. data/data/libphonenumber/resources/geocoding/en/30.txt +261 -0
  1717. data/data/libphonenumber/resources/geocoding/en/31.txt +137 -0
  1718. data/data/libphonenumber/resources/geocoding/en/32.txt +59 -0
  1719. data/data/libphonenumber/resources/geocoding/en/33.txt +5592 -0
  1720. data/data/libphonenumber/resources/geocoding/en/34.txt +123 -0
  1721. data/data/libphonenumber/resources/geocoding/en/351.txt +67 -0
  1722. data/data/libphonenumber/resources/geocoding/en/352.txt +228 -0
  1723. data/data/libphonenumber/resources/geocoding/en/353.txt +71 -0
  1724. data/data/libphonenumber/resources/geocoding/en/354.txt +23 -0
  1725. data/data/libphonenumber/resources/geocoding/en/355.txt +188 -0
  1726. data/data/libphonenumber/resources/geocoding/en/358.txt +38 -0
  1727. data/data/libphonenumber/resources/geocoding/en/359.txt +2102 -0
  1728. data/data/libphonenumber/resources/geocoding/en/36.txt +70 -0
  1729. data/data/libphonenumber/resources/geocoding/en/370.txt +64 -0
  1730. data/data/libphonenumber/resources/geocoding/en/371.txt +53 -0
  1731. data/data/libphonenumber/resources/geocoding/en/372.txt +35 -0
  1732. data/data/libphonenumber/resources/geocoding/en/373.txt +62 -0
  1733. data/data/libphonenumber/resources/geocoding/en/374.txt +184 -0
  1734. data/data/libphonenumber/resources/geocoding/en/375.txt +142 -0
  1735. data/data/libphonenumber/resources/geocoding/en/381.txt +50 -0
  1736. data/data/libphonenumber/resources/geocoding/en/389.txt +28 -0
  1737. data/data/libphonenumber/resources/geocoding/en/39.txt +137 -0
  1738. data/data/libphonenumber/resources/geocoding/en/40.txt +98 -0
  1739. data/data/libphonenumber/resources/geocoding/en/41.txt +37 -0
  1740. data/data/libphonenumber/resources/geocoding/en/420.txt +37 -0
  1741. data/data/libphonenumber/resources/geocoding/en/421.txt +42 -0
  1742. data/data/libphonenumber/resources/geocoding/en/43.txt +1036 -0
  1743. data/data/libphonenumber/resources/geocoding/en/44.txt +852 -0
  1744. data/data/libphonenumber/resources/geocoding/en/46.txt +265 -0
  1745. data/data/libphonenumber/resources/geocoding/en/47.txt +49 -0
  1746. data/data/libphonenumber/resources/geocoding/en/48.txt +65 -0
  1747. data/data/libphonenumber/resources/geocoding/en/49.txt +5218 -0
  1748. data/data/libphonenumber/resources/geocoding/en/51.txt +42 -0
  1749. data/data/libphonenumber/resources/geocoding/en/53.txt +33 -0
  1750. data/data/libphonenumber/resources/geocoding/en/54.txt +236 -0
  1751. data/data/libphonenumber/resources/geocoding/en/55.txt +84 -0
  1752. data/data/libphonenumber/resources/geocoding/en/56.txt +40 -0
  1753. data/data/libphonenumber/resources/geocoding/en/57.txt +186 -0
  1754. data/data/libphonenumber/resources/geocoding/en/58.txt +73 -0
  1755. data/data/libphonenumber/resources/geocoding/en/599.txt +22 -0
  1756. data/data/libphonenumber/resources/geocoding/en/62.txt +324 -0
  1757. data/data/libphonenumber/resources/geocoding/en/66.txt +40 -0
  1758. data/data/libphonenumber/resources/geocoding/en/686.txt +50 -0
  1759. data/data/libphonenumber/resources/geocoding/en/7.txt +355 -0
  1760. data/data/libphonenumber/resources/geocoding/en/81.txt +1547 -0
  1761. data/data/libphonenumber/resources/geocoding/en/82.txt +35 -0
  1762. data/data/libphonenumber/resources/geocoding/en/84.txt +80 -0
  1763. data/data/libphonenumber/resources/geocoding/en/86.txt +145812 -0
  1764. data/data/libphonenumber/resources/geocoding/en/886.txt +30 -0
  1765. data/data/libphonenumber/resources/geocoding/en/90.txt +182 -0
  1766. data/data/libphonenumber/resources/geocoding/en/91.txt +2669 -0
  1767. data/data/libphonenumber/resources/geocoding/en/94.txt +46 -0
  1768. data/data/libphonenumber/resources/geocoding/en/962.txt +32 -0
  1769. data/data/libphonenumber/resources/geocoding/en/966.txt +29 -0
  1770. data/data/libphonenumber/resources/geocoding/en/98.txt +53 -0
  1771. data/data/libphonenumber/resources/geocoding/es/228.txt +23 -0
  1772. data/data/libphonenumber/resources/geocoding/es/230.txt +23 -0
  1773. data/data/libphonenumber/resources/geocoding/es/34.txt +124 -0
  1774. data/data/libphonenumber/resources/geocoding/es/54.txt +238 -0
  1775. data/data/libphonenumber/resources/geocoding/es/56.txt +42 -0
  1776. data/data/libphonenumber/resources/geocoding/es/57.txt +186 -0
  1777. data/data/libphonenumber/resources/geocoding/es/58.txt +72 -0
  1778. data/data/libphonenumber/resources/geocoding/fa/98.txt +50 -0
  1779. data/data/libphonenumber/resources/geocoding/fi/358.txt +39 -0
  1780. data/data/libphonenumber/resources/geocoding/fr/212.txt +84 -0
  1781. data/data/libphonenumber/resources/geocoding/fr/222.txt +29 -0
  1782. data/data/libphonenumber/resources/geocoding/fr/225.txt +30 -0
  1783. data/data/libphonenumber/resources/geocoding/fr/228.txt +24 -0
  1784. data/data/libphonenumber/resources/geocoding/fr/229.txt +55 -0
  1785. data/data/libphonenumber/resources/geocoding/fr/230.txt +23 -0
  1786. data/data/libphonenumber/resources/geocoding/fr/242.txt +25 -0
  1787. data/data/libphonenumber/resources/geocoding/fr/243.txt +24 -0
  1788. data/data/libphonenumber/resources/geocoding/fr/269.txt +34 -0
  1789. data/data/libphonenumber/resources/geocoding/fr/290.txt +24 -0
  1790. data/data/libphonenumber/resources/geocoding/fr/32.txt +59 -0
  1791. data/data/libphonenumber/resources/geocoding/fr/33.txt +5593 -0
  1792. data/data/libphonenumber/resources/geocoding/fr/352.txt +231 -0
  1793. data/data/libphonenumber/resources/geocoding/fr/41.txt +37 -0
  1794. data/data/libphonenumber/resources/geocoding/fr/82.txt +33 -0
  1795. data/data/libphonenumber/resources/geocoding/hu/36.txt +71 -0
  1796. data/data/libphonenumber/resources/geocoding/id/62.txt +325 -0
  1797. data/data/libphonenumber/resources/geocoding/it/39.txt +248 -0
  1798. data/data/libphonenumber/resources/geocoding/it/41.txt +37 -0
  1799. data/data/libphonenumber/resources/geocoding/ja/81.txt +1546 -0
  1800. data/data/libphonenumber/resources/geocoding/ko/82.txt +35 -0
  1801. data/data/libphonenumber/resources/geocoding/nl/31.txt +145 -0
  1802. data/data/libphonenumber/resources/geocoding/nl/32.txt +59 -0
  1803. data/data/libphonenumber/resources/geocoding/pl/48.txt +66 -0
  1804. data/data/libphonenumber/resources/geocoding/pt/238.txt +58 -0
  1805. data/data/libphonenumber/resources/geocoding/pt/239.txt +37 -0
  1806. data/data/libphonenumber/resources/geocoding/pt/244.txt +59 -0
  1807. data/data/libphonenumber/resources/geocoding/pt/245.txt +37 -0
  1808. data/data/libphonenumber/resources/geocoding/pt/258.txt +29 -0
  1809. data/data/libphonenumber/resources/geocoding/pt/351.txt +69 -0
  1810. data/data/libphonenumber/resources/geocoding/pt/55.txt +86 -0
  1811. data/data/libphonenumber/resources/geocoding/ro/373.txt +61 -0
  1812. data/data/libphonenumber/resources/geocoding/ro/40.txt +99 -0
  1813. data/data/libphonenumber/resources/geocoding/ru/373.txt +61 -0
  1814. data/data/libphonenumber/resources/geocoding/ru/374.txt +177 -0
  1815. data/data/libphonenumber/resources/geocoding/ru/375.txt +143 -0
  1816. data/data/libphonenumber/resources/geocoding/ru/7.txt +108 -0
  1817. data/data/libphonenumber/resources/geocoding/se/358.txt +38 -0
  1818. data/data/libphonenumber/resources/geocoding/sr/381.txt +51 -0
  1819. data/data/libphonenumber/resources/geocoding/sv/46.txt +266 -0
  1820. data/data/libphonenumber/resources/geocoding/th/66.txt +39 -0
  1821. data/data/libphonenumber/resources/geocoding/tr/90.txt +182 -0
  1822. data/data/libphonenumber/resources/geocoding/vi/84.txt +80 -0
  1823. data/data/libphonenumber/resources/geocoding/zh/82.txt +35 -0
  1824. data/data/libphonenumber/resources/geocoding/zh/86.txt +145812 -0
  1825. data/data/libphonenumber/resources/geocoding/zh/886.txt +30 -0
  1826. data/data/libphonenumber/resources/geocoding/zh_Hant/82.txt +35 -0
  1827. data/data/libphonenumber/resources/geocoding/zh_Hant/886.txt +30 -0
  1828. data/data/libphonenumber/resources/phonemetadata.proto +282 -0
  1829. data/data/libphonenumber/resources/phonenumber.proto +123 -0
  1830. data/data/libphonenumber/resources/test/carrier/en/1.txt +16 -0
  1831. data/data/libphonenumber/resources/test/carrier/en/244.txt +16 -0
  1832. data/data/libphonenumber/resources/test/carrier/en/44.txt +17 -0
  1833. data/data/libphonenumber/resources/test/carrier/sv/44.txt +15 -0
  1834. data/data/libphonenumber/resources/test/geocoding/de/1.txt +16 -0
  1835. data/data/libphonenumber/resources/test/geocoding/en/1.txt +21 -0
  1836. data/data/libphonenumber/resources/test/geocoding/en/54.txt +15 -0
  1837. data/data/libphonenumber/resources/test/geocoding/en/82.txt +30 -0
  1838. data/data/libphonenumber/resources/test/geocoding/ko/82.txt +29 -0
  1839. data/data/libphonenumber/resources/test/timezones/map_data.txt +24 -0
  1840. data/data/libphonenumber/resources/timezones/map_data.txt +1996 -0
  1841. data/data/libphonenumber/tools/cpp/CMakeLists.txt +57 -0
  1842. data/data/libphonenumber/tools/cpp/gtest.cmake +47 -0
  1843. data/data/libphonenumber/tools/cpp/src/base/basictypes.h +312 -0
  1844. data/data/libphonenumber/tools/cpp/src/cpp-build/generate_geocoding_data.cc +654 -0
  1845. data/data/libphonenumber/tools/cpp/src/cpp-build/generate_geocoding_data.h +37 -0
  1846. data/data/libphonenumber/tools/cpp/src/cpp-build/generate_geocoding_data_main.cc +21 -0
  1847. data/data/libphonenumber/tools/cpp/test/cpp-build/generate_geocoding_data_test.cc +39 -0
  1848. data/data/libphonenumber/tools/cpp/test/cpp-build/run_tests.cc +21 -0
  1849. data/data/libphonenumber/tools/java/common/pom.xml +61 -0
  1850. data/data/libphonenumber/tools/java/common/src/com/google/i18n/phonenumbers/BuildMetadataFromXml.java +514 -0
  1851. data/data/libphonenumber/tools/java/common/src/com/google/i18n/phonenumbers/Command.java +51 -0
  1852. data/data/libphonenumber/tools/java/common/src/com/google/i18n/phonenumbers/CommandDispatcher.java +78 -0
  1853. data/data/libphonenumber/tools/java/common/src/com/google/i18n/phonenumbers/CopyrightNotice.java +66 -0
  1854. data/data/libphonenumber/tools/java/common/src/com/google/i18n/phonenumbers/FileUtils.java +52 -0
  1855. data/data/libphonenumber/tools/java/common/test/com/google/i18n/phonenumbers/BuildMetadataFromXmlTest.java +657 -0
  1856. data/data/libphonenumber/tools/java/cpp-build/pom.xml +149 -0
  1857. data/data/libphonenumber/tools/java/cpp-build/src/com/google/i18n/phonenumbers/BuildMetadataCppFromXml.java +219 -0
  1858. data/data/libphonenumber/tools/java/cpp-build/src/com/google/i18n/phonenumbers/CppMetadataGenerator.java +197 -0
  1859. data/data/libphonenumber/tools/java/cpp-build/src/com/google/i18n/phonenumbers/EntryPoint.java +33 -0
  1860. data/data/libphonenumber/tools/java/cpp-build/target/cpp-build-1.0-SNAPSHOT-jar-with-dependencies.jar +0 -0
  1861. data/data/libphonenumber/tools/java/cpp-build/test/com/google/i18n/phonenumbers/BuildMetadataCppFromXmlTest.java +185 -0
  1862. data/data/libphonenumber/tools/java/cpp-build/test/com/google/i18n/phonenumbers/CppMetadataGeneratorTest.java +122 -0
  1863. data/data/libphonenumber/tools/java/data/README +16 -0
  1864. data/data/libphonenumber/tools/java/data/pom.xml +111 -0
  1865. data/data/libphonenumber/tools/java/data/src/com/google/i18n/phonenumbers/CombineGeoData.java +287 -0
  1866. data/data/libphonenumber/tools/java/data/src/com/google/i18n/phonenumbers/CombineGeoDataServlet.java +46 -0
  1867. data/data/libphonenumber/tools/java/data/test/com/google/i18n/phonenumbers/CombineGeoDataTest.java +233 -0
  1868. data/data/libphonenumber/tools/java/data/webapp/WEB-INF/appengine-web.xml +8 -0
  1869. data/data/libphonenumber/tools/java/data/webapp/WEB-INF/logging.properties +13 -0
  1870. data/data/libphonenumber/tools/java/data/webapp/WEB-INF/web.xml +18 -0
  1871. data/data/libphonenumber/tools/java/data/webapp/index.html +22 -0
  1872. data/data/libphonenumber/tools/java/java-build/pom.xml +113 -0
  1873. data/data/libphonenumber/tools/java/java-build/src/com/google/i18n/phonenumbers/BuildMetadataJsonFromXml.java +389 -0
  1874. data/data/libphonenumber/tools/java/java-build/src/com/google/i18n/phonenumbers/BuildMetadataProtoFromXml.java +349 -0
  1875. data/data/libphonenumber/tools/java/java-build/src/com/google/i18n/phonenumbers/EntryPoint.java +39 -0
  1876. data/data/libphonenumber/tools/java/java-build/src/com/google/i18n/phonenumbers/JSArrayBuilder.java +142 -0
  1877. data/data/libphonenumber/tools/java/java-build/src/com/google/i18n/phonenumbers/buildtools/AbstractPhonePrefixDataIOHandler.java +62 -0
  1878. data/data/libphonenumber/tools/java/java-build/src/com/google/i18n/phonenumbers/buildtools/GeneratePhonePrefixData.java +483 -0
  1879. data/data/libphonenumber/tools/java/java-build/src/com/google/i18n/phonenumbers/buildtools/GeneratePhonePrefixDataEntryPoint.java +58 -0
  1880. data/data/libphonenumber/tools/java/java-build/src/com/google/i18n/phonenumbers/buildtools/GenerateTimeZonesMapData.java +143 -0
  1881. data/data/libphonenumber/tools/java/java-build/src/com/google/i18n/phonenumbers/buildtools/GenerateTimeZonesMapDataEntryPoint.java +60 -0
  1882. data/data/libphonenumber/tools/java/java-build/src/com/google/i18n/phonenumbers/buildtools/PhonePrefixDataIOHandler.java +59 -0
  1883. data/data/libphonenumber/tools/java/java-build/target/java-build-1.0-SNAPSHOT-jar-with-dependencies.jar +0 -0
  1884. data/data/libphonenumber/tools/java/java-build/test/com/google/i18n/phonenumbers/buildtools/GeneratePhonePrefixDataTest.java +291 -0
  1885. data/data/libphonenumber/tools/java/java-build/test/com/google/i18n/phonenumbers/buildtools/GenerateTimeZonesMapDataTest.java +136 -0
  1886. data/data/libphonenumber/tools/java/pom.xml +29 -0
  1887. data/data/libphonenumber/tools/script/continuous-integration.sh +96 -0
  1888. data/data/phone_data.dat +0 -0
  1889. data/lib/phonelib/core.rb +36 -1
  1890. data/lib/phonelib/data_importer.rb +268 -0
  1891. data/lib/phonelib/phone.rb +67 -0
  1892. data/lib/phonelib/version.rb +1 -1
  1893. data/lib/tasks/phonelib_tasks.rake +2 -70
  1894. metadata +1892 -7
@@ -0,0 +1,201 @@
1
+ // Copyright (C) 2011 The Libphonenumber Authors
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+ // Author: Lara Rennie
16
+ // Author: Tao Huang
17
+ //
18
+ // This is a direct port from PhoneNumberMatcher.java.
19
+ // Changes to this class should also happen to the Java version, whenever it
20
+ // makes sense.
21
+
22
+ #ifndef I18N_PHONENUMBERS_PHONENUMBERMATCHER_H_
23
+ #define I18N_PHONENUMBERS_PHONENUMBERMATCHER_H_
24
+
25
+ #include <string>
26
+ #include <vector>
27
+
28
+ #include "phonenumbers/base/basictypes.h"
29
+ #include "phonenumbers/base/memory/scoped_ptr.h"
30
+ #include "phonenumbers/callback.h"
31
+ #include "phonenumbers/regexp_adapter.h"
32
+
33
+ namespace i18n {
34
+ namespace phonenumbers {
35
+
36
+ template <class R, class A1, class A2, class A3, class A4>
37
+ class ResultCallback4;
38
+
39
+ using std::string;
40
+ using std::vector;
41
+
42
+ class AlternateFormats;
43
+ class NumberFormat;
44
+ class PhoneNumber;
45
+ class PhoneNumberMatch;
46
+ class PhoneNumberMatcherRegExps;
47
+ class PhoneNumberUtil;
48
+
49
+ class PhoneNumberMatcher {
50
+ friend class PhoneNumberMatcherTest;
51
+ public:
52
+ // Leniency when finding potential phone numbers in text segments. The levels
53
+ // here are ordered in increasing strictness.
54
+ enum Leniency {
55
+ // Phone numbers accepted are possible, but not necessarily valid.
56
+ POSSIBLE,
57
+ // Phone numbers accepted are possible and valid.
58
+ VALID,
59
+ // Phone numbers accepted are valid and are grouped in a possible way for
60
+ // this locale. For example, a US number written as "65 02 53 00 00" is not
61
+ // accepted at this leniency level, whereas "650 253 0000" or "6502530000"
62
+ // are. Numbers with more than one '/' symbol are also dropped at this
63
+ // level.
64
+ // Warning: The next two levels might result in lower coverage especially
65
+ // for regions outside of country code "+1". If you are not sure about which
66
+ // level to use, you can send an e-mail to the discussion group
67
+ // http://groups.google.com/group/libphonenumber-discuss/
68
+ STRICT_GROUPING,
69
+ // Phone numbers accepted are valid and are grouped in the same way that we
70
+ // would have formatted it, or as a single block. For example, a US number
71
+ // written as "650 2530000" is not accepted at this leniency level, whereas
72
+ // "650 253 0000" or "6502530000" are.
73
+ EXACT_GROUPING,
74
+ };
75
+
76
+ // Constructs a phone number matcher.
77
+ PhoneNumberMatcher(const PhoneNumberUtil& util,
78
+ const string& text,
79
+ const string& region_code,
80
+ Leniency leniency,
81
+ int max_tries);
82
+
83
+ // Wrapper to construct a phone number matcher, with no limitation on the
84
+ // number of retries and VALID Leniency.
85
+ PhoneNumberMatcher(const string& text,
86
+ const string& region_code);
87
+
88
+ ~PhoneNumberMatcher();
89
+
90
+ // Returns true if the text sequence has another match.
91
+ bool HasNext();
92
+
93
+ // Gets next match from text sequence.
94
+ bool Next(PhoneNumberMatch* match);
95
+
96
+ private:
97
+ // The potential states of a PhoneNumberMatcher.
98
+ enum State {
99
+ NOT_READY,
100
+ READY,
101
+ DONE,
102
+ };
103
+
104
+ // Attempts to extract a match from a candidate string. Returns true if a
105
+ // match is found, otherwise returns false. The value "offset" refers to the
106
+ // start index of the candidate string within the overall text.
107
+ bool Find(int index, PhoneNumberMatch* match);
108
+
109
+ // Checks a number was formatted with a national prefix, if the number was
110
+ // found in national format, and a national prefix is required for that
111
+ // number. Returns false if the number needed to have a national prefix and
112
+ // none was found.
113
+ bool IsNationalPrefixPresentIfRequired(const PhoneNumber& number) const;
114
+
115
+ // Attempts to extract a match from candidate. Returns true if the match was
116
+ // found, otherwise returns false.
117
+ bool ExtractMatch(const string& candidate, int offset,
118
+ PhoneNumberMatch* match);
119
+
120
+ // Attempts to extract a match from a candidate string if the whole candidate
121
+ // does not qualify as a match. Returns true if a match is found, otherwise
122
+ // returns false.
123
+ bool ExtractInnerMatch(const string& candidate, int offset,
124
+ PhoneNumberMatch* match);
125
+
126
+ // Parses a phone number from the candidate using PhoneNumberUtil::Parse() and
127
+ // verifies it matches the requested leniency. If parsing and verification
128
+ // succeed, returns true, otherwise this method returns false;
129
+ bool ParseAndVerify(const string& candidate, int offset,
130
+ PhoneNumberMatch* match);
131
+
132
+ bool CheckNumberGroupingIsValid(
133
+ const PhoneNumber& phone_number,
134
+ const string& candidate,
135
+ ResultCallback4<bool, const PhoneNumberUtil&, const PhoneNumber&,
136
+ const string&, const vector<string>&>* checker) const;
137
+
138
+ void GetNationalNumberGroups(
139
+ const PhoneNumber& number,
140
+ const NumberFormat* formatting_pattern,
141
+ vector<string>* digit_blocks) const;
142
+
143
+ bool AllNumberGroupsAreExactlyPresent(
144
+ const PhoneNumberUtil& util,
145
+ const PhoneNumber& phone_number,
146
+ const string& normalized_candidate,
147
+ const vector<string>& formatted_number_groups) const;
148
+
149
+ bool VerifyAccordingToLeniency(Leniency leniency, const PhoneNumber& number,
150
+ const string& candidate) const;
151
+
152
+ // In interface for testing purposes.
153
+ static bool ContainsMoreThanOneSlashInNationalNumber(
154
+ const PhoneNumber& number,
155
+ const string& candidate,
156
+ const PhoneNumberUtil& util);
157
+
158
+ // Helper method to determine if a character is a Latin-script letter or not.
159
+ // For our purposes, combining marks should also return true since we assume
160
+ // they have been added to a preceding Latin character.
161
+ static bool IsLatinLetter(char32 letter);
162
+
163
+ // Helper class holding useful regular expressions.
164
+ const PhoneNumberMatcherRegExps* reg_exps_;
165
+
166
+ // Helper class holding loaded data containing alternate ways phone numbers
167
+ // might be formatted for certain regions.
168
+ const AlternateFormats* alternate_formats_;
169
+
170
+ // The phone number utility;
171
+ const PhoneNumberUtil& phone_util_;
172
+
173
+ // The text searched for phone numbers;
174
+ const string text_;
175
+
176
+ // The region(country) to assume for phone numbers without an international
177
+ // prefix.
178
+ const string preferred_region_;
179
+
180
+ // The degree of validation requested.
181
+ Leniency leniency_;
182
+
183
+ // The maximum number of retries after matching an invalid number.
184
+ int max_tries_;
185
+
186
+ // The iteration tristate.
187
+ State state_;
188
+
189
+ // The last successful match, NULL unless in State.READY.
190
+ scoped_ptr<PhoneNumberMatch> last_match_;
191
+
192
+ // The next index to start searching at. Undefined in State.DONE.
193
+ int search_index_;
194
+
195
+ DISALLOW_COPY_AND_ASSIGN(PhoneNumberMatcher);
196
+ };
197
+
198
+ } // namespace phonenumbers
199
+ } // namespace i18n
200
+
201
+ #endif // I18N_PHONENUMBERS_PHONENUMBERMATCHER_H_
@@ -0,0 +1,2799 @@
1
+ // Copyright (C) 2009 The Libphonenumber Authors
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ // Author: Shaopeng Jia
16
+ // Open-sourced by: Philippe Liard
17
+
18
+ #include "phonenumbers/phonenumberutil.h"
19
+
20
+ #include <string.h>
21
+ #include <algorithm>
22
+ #include <cctype>
23
+ #include <iterator>
24
+ #include <map>
25
+ #include <utility>
26
+ #include <vector>
27
+
28
+ #include <google/protobuf/message_lite.h>
29
+ #include <unicode/uchar.h>
30
+ #include <unicode/utf8.h>
31
+
32
+ #include "phonenumbers/asyoutypeformatter.h"
33
+ #include "phonenumbers/base/basictypes.h"
34
+ #include "phonenumbers/base/logging.h"
35
+ #include "phonenumbers/base/memory/singleton.h"
36
+ #include "phonenumbers/default_logger.h"
37
+ #include "phonenumbers/encoding_utils.h"
38
+ #include "phonenumbers/metadata.h"
39
+ #include "phonenumbers/normalize_utf8.h"
40
+ #include "phonenumbers/phonemetadata.pb.h"
41
+ #include "phonenumbers/phonenumber.h"
42
+ #include "phonenumbers/phonenumber.pb.h"
43
+ #include "phonenumbers/regexp_adapter.h"
44
+ #include "phonenumbers/regexp_cache.h"
45
+ #include "phonenumbers/regexp_factory.h"
46
+ #include "phonenumbers/region_code.h"
47
+ #include "phonenumbers/stl_util.h"
48
+ #include "phonenumbers/stringutil.h"
49
+ #include "phonenumbers/utf/unicodetext.h"
50
+ #include "phonenumbers/utf/utf.h"
51
+
52
+ namespace i18n {
53
+ namespace phonenumbers {
54
+
55
+ using std::make_pair;
56
+ using std::sort;
57
+
58
+ using google::protobuf::RepeatedPtrField;
59
+
60
+ // static constants
61
+ const size_t PhoneNumberUtil::kMinLengthForNsn;
62
+ const size_t PhoneNumberUtil::kMaxLengthForNsn;
63
+ const size_t PhoneNumberUtil::kMaxLengthCountryCode;
64
+ const int PhoneNumberUtil::kNanpaCountryCode;
65
+
66
+ // static
67
+ const char PhoneNumberUtil::kPlusChars[] = "+\xEF\xBC\x8B"; /* "++" */
68
+ // To find out the unicode code-point of the characters below in vim, highlight
69
+ // the character and type 'ga'. Note that the - is used to express ranges of
70
+ // full-width punctuation below, as well as being present in the expression
71
+ // itself. In emacs, you can use M-x unicode-what to query information about the
72
+ // unicode character.
73
+ // static
74
+ const char PhoneNumberUtil::kValidPunctuation[] =
75
+ /* "-x‐-―−ー--/  ­<U+200B><U+2060> ()()[].\\[\\]/~⁓∼" */
76
+ "-x\xE2\x80\x90-\xE2\x80\x95\xE2\x88\x92\xE3\x83\xBC\xEF\xBC\x8D-\xEF\xBC"
77
+ "\x8F \xC2\xA0\xC2\xAD\xE2\x80\x8B\xE2\x81\xA0\xE3\x80\x80()\xEF\xBC\x88"
78
+ "\xEF\xBC\x89\xEF\xBC\xBB\xEF\xBC\xBD.\\[\\]/~\xE2\x81\x93\xE2\x88\xBC";
79
+
80
+ // static
81
+ const char PhoneNumberUtil::kCaptureUpToSecondNumberStart[] = "(.*)[\\\\/] *x";
82
+
83
+ // static
84
+ const char PhoneNumberUtil::kRegionCodeForNonGeoEntity[] = "001";
85
+
86
+ namespace {
87
+
88
+ // The prefix that needs to be inserted in front of a Colombian landline
89
+ // number when dialed from a mobile phone in Colombia.
90
+ const char kColombiaMobileToFixedLinePrefix[] = "3";
91
+
92
+ // The kPlusSign signifies the international prefix.
93
+ const char kPlusSign[] = "+";
94
+
95
+ const char kStarSign[] = "*";
96
+
97
+ const char kRfc3966ExtnPrefix[] = ";ext=";
98
+ const char kRfc3966Prefix[] = "tel:";
99
+ const char kRfc3966PhoneContext[] = ";phone-context=";
100
+ const char kRfc3966IsdnSubaddress[] = ";isub=";
101
+
102
+ const char kDigits[] = "\\p{Nd}";
103
+ // We accept alpha characters in phone numbers, ASCII only. We store lower-case
104
+ // here only since our regular expressions are case-insensitive.
105
+ const char kValidAlpha[] = "a-z";
106
+
107
+ // Default extension prefix to use when formatting. This will be put in front of
108
+ // any extension component of the number, after the main national number is
109
+ // formatted. For example, if you wish the default extension formatting to be "
110
+ // extn: 3456", then you should specify " extn: " here as the default extension
111
+ // prefix. This can be overridden by region-specific preferences.
112
+ const char kDefaultExtnPrefix[] = " ext. ";
113
+
114
+ // One-character symbols that can be used to indicate an extension.
115
+ const char kSingleExtnSymbolsForMatching[] =
116
+ "x\xEF\xBD\x98#\xEF\xBC\x83~\xEF\xBD\x9E";
117
+
118
+ bool LoadCompiledInMetadata(PhoneMetadataCollection* metadata) {
119
+ if (!metadata->ParseFromArray(metadata_get(), metadata_size())) {
120
+ LOG(ERROR) << "Could not parse binary data.";
121
+ return false;
122
+ }
123
+ return true;
124
+ }
125
+
126
+ // Returns a pointer to the description inside the metadata of the appropriate
127
+ // type.
128
+ const PhoneNumberDesc* GetNumberDescByType(
129
+ const PhoneMetadata& metadata,
130
+ PhoneNumberUtil::PhoneNumberType type) {
131
+ switch (type) {
132
+ case PhoneNumberUtil::PREMIUM_RATE:
133
+ return &metadata.premium_rate();
134
+ case PhoneNumberUtil::TOLL_FREE:
135
+ return &metadata.toll_free();
136
+ case PhoneNumberUtil::MOBILE:
137
+ return &metadata.mobile();
138
+ case PhoneNumberUtil::FIXED_LINE:
139
+ case PhoneNumberUtil::FIXED_LINE_OR_MOBILE:
140
+ return &metadata.fixed_line();
141
+ case PhoneNumberUtil::SHARED_COST:
142
+ return &metadata.shared_cost();
143
+ case PhoneNumberUtil::VOIP:
144
+ return &metadata.voip();
145
+ case PhoneNumberUtil::PERSONAL_NUMBER:
146
+ return &metadata.personal_number();
147
+ case PhoneNumberUtil::PAGER:
148
+ return &metadata.pager();
149
+ case PhoneNumberUtil::UAN:
150
+ return &metadata.uan();
151
+ case PhoneNumberUtil::VOICEMAIL:
152
+ return &metadata.voicemail();
153
+ default:
154
+ return &metadata.general_desc();
155
+ }
156
+ }
157
+
158
+ // A helper function that is used by Format and FormatByPattern.
159
+ void PrefixNumberWithCountryCallingCode(
160
+ int country_calling_code,
161
+ PhoneNumberUtil::PhoneNumberFormat number_format,
162
+ string* formatted_number) {
163
+ switch (number_format) {
164
+ case PhoneNumberUtil::E164:
165
+ formatted_number->insert(0, StrCat(kPlusSign, country_calling_code));
166
+ return;
167
+ case PhoneNumberUtil::INTERNATIONAL:
168
+ formatted_number->insert(0, StrCat(kPlusSign, country_calling_code, " "));
169
+ return;
170
+ case PhoneNumberUtil::RFC3966:
171
+ formatted_number->insert(0, StrCat(kRfc3966Prefix, kPlusSign,
172
+ country_calling_code, "-"));
173
+ return;
174
+ case PhoneNumberUtil::NATIONAL:
175
+ default:
176
+ // Do nothing.
177
+ return;
178
+ }
179
+ }
180
+
181
+ // Returns true when one national number is the suffix of the other or both are
182
+ // the same.
183
+ bool IsNationalNumberSuffixOfTheOther(const PhoneNumber& first_number,
184
+ const PhoneNumber& second_number) {
185
+ const string& first_number_national_number =
186
+ SimpleItoa(static_cast<uint64>(first_number.national_number()));
187
+ const string& second_number_national_number =
188
+ SimpleItoa(static_cast<uint64>(second_number.national_number()));
189
+ // Note that HasSuffixString returns true if the numbers are equal.
190
+ return HasSuffixString(first_number_national_number,
191
+ second_number_national_number) ||
192
+ HasSuffixString(second_number_national_number,
193
+ first_number_national_number);
194
+ }
195
+
196
+ char32 ToUnicodeCodepoint(const char* unicode_char) {
197
+ char32 codepoint;
198
+ EncodingUtils::DecodeUTF8Char(unicode_char, &codepoint);
199
+ return codepoint;
200
+ }
201
+
202
+ // Helper initialiser method to create the regular-expression pattern to match
203
+ // extensions, allowing the one-codepoint extension symbols provided by
204
+ // single_extn_symbols.
205
+ // Note that there are currently three capturing groups for the extension itself
206
+ // - if this number is changed, MaybeStripExtension needs to be updated.
207
+ string CreateExtnPattern(const string& single_extn_symbols) {
208
+ static const string capturing_extn_digits = StrCat("([", kDigits, "]{1,7})");
209
+ // The first regular expression covers RFC 3966 format, where the extension is
210
+ // added using ";ext=". The second more generic one starts with optional white
211
+ // space and ends with an optional full stop (.), followed by zero or more
212
+ // spaces/tabs and then the numbers themselves. The third one covers the
213
+ // special case of American numbers where the extension is written with a hash
214
+ // at the end, such as "- 503#".
215
+ // Note that the only capturing groups should be around the digits that you
216
+ // want to capture as part of the extension, or else parsing will fail!
217
+ // Canonical-equivalence doesn't seem to be an option with RE2, so we allow
218
+ // two options for representing the ó - the character itself, and one in the
219
+ // unicode decomposed form with the combining acute accent.
220
+ return (StrCat(
221
+ kRfc3966ExtnPrefix, capturing_extn_digits, "|"
222
+ /* "[  \\t,]*(?:e?xt(?:ensi(?:ó?|ó))?n?|e?xtn?|single_extn_symbols|"
223
+ "int|int|anexo)"
224
+ "[:\\..]?[  \\t,-]*", capturing_extn_digits, "#?|" */
225
+ "[ \xC2\xA0\\t,]*(?:e?xt(?:ensi(?:o\xCC\x81?|\xC3\xB3))?n?|"
226
+ "(?:\xEF\xBD\x85)?\xEF\xBD\x98\xEF\xBD\x94(?:\xEF\xBD\x8E)?|"
227
+ "[", single_extn_symbols, "]|int|"
228
+ "\xEF\xBD\x89\xEF\xBD\x8E\xEF\xBD\x94|anexo)"
229
+ "[:\\.\xEF\xBC\x8E]?[ \xC2\xA0\\t,-]*", capturing_extn_digits,
230
+ "#?|[- ]+([", kDigits, "]{1,5})#"));
231
+ }
232
+
233
+ // Normalizes a string of characters representing a phone number by replacing
234
+ // all characters found in the accompanying map with the values therein, and
235
+ // stripping all other characters if remove_non_matches is true.
236
+ // Parameters:
237
+ // number - a pointer to a string of characters representing a phone number to
238
+ // be normalized.
239
+ // normalization_replacements - a mapping of characters to what they should be
240
+ // replaced by in the normalized version of the phone number
241
+ // remove_non_matches - indicates whether characters that are not able to be
242
+ // replaced should be stripped from the number. If this is false, they will be
243
+ // left unchanged in the number.
244
+ void NormalizeHelper(const map<char32, char>& normalization_replacements,
245
+ bool remove_non_matches,
246
+ string* number) {
247
+ DCHECK(number);
248
+ UnicodeText number_as_unicode;
249
+ number_as_unicode.PointToUTF8(number->data(), number->size());
250
+ string normalized_number;
251
+ char unicode_char[5];
252
+ for (UnicodeText::const_iterator it = number_as_unicode.begin();
253
+ it != number_as_unicode.end();
254
+ ++it) {
255
+ map<char32, char>::const_iterator found_glyph_pair =
256
+ normalization_replacements.find(*it);
257
+ if (found_glyph_pair != normalization_replacements.end()) {
258
+ normalized_number.push_back(found_glyph_pair->second);
259
+ } else if (!remove_non_matches) {
260
+ // Find out how long this unicode char is so we can append it all.
261
+ int char_len = it.get_utf8(unicode_char);
262
+ normalized_number.append(unicode_char, char_len);
263
+ }
264
+ // If neither of the above are true, we remove this character.
265
+ }
266
+ number->assign(normalized_number);
267
+ }
268
+
269
+ PhoneNumberUtil::ValidationResult TestNumberLengthAgainstPattern(
270
+ const RegExp& number_pattern, const string& number) {
271
+ string extracted_number;
272
+ if (number_pattern.FullMatch(number, &extracted_number)) {
273
+ return PhoneNumberUtil::IS_POSSIBLE;
274
+ }
275
+ if (number_pattern.PartialMatch(number, &extracted_number)) {
276
+ return PhoneNumberUtil::TOO_LONG;
277
+ } else {
278
+ return PhoneNumberUtil::TOO_SHORT;
279
+ }
280
+ }
281
+
282
+ } // namespace
283
+
284
+ void PhoneNumberUtil::SetLogger(Logger* logger) {
285
+ logger_.reset(logger);
286
+ Logger::set_logger_impl(logger_.get());
287
+ }
288
+
289
+ class PhoneNumberRegExpsAndMappings {
290
+ private:
291
+ void InitializeMapsAndSets() {
292
+ diallable_char_mappings_.insert(make_pair('+', '+'));
293
+ diallable_char_mappings_.insert(make_pair('*', '*'));
294
+ // Here we insert all punctuation symbols that we wish to respect when
295
+ // formatting alpha numbers, as they show the intended number groupings.
296
+ all_plus_number_grouping_symbols_.insert(
297
+ make_pair(ToUnicodeCodepoint("-"), '-'));
298
+ all_plus_number_grouping_symbols_.insert(
299
+ make_pair(ToUnicodeCodepoint("\xEF\xBC\x8D" /* "-" */), '-'));
300
+ all_plus_number_grouping_symbols_.insert(
301
+ make_pair(ToUnicodeCodepoint("\xE2\x80\x90" /* "‐" */), '-'));
302
+ all_plus_number_grouping_symbols_.insert(
303
+ make_pair(ToUnicodeCodepoint("\xE2\x80\x91" /* "‑" */), '-'));
304
+ all_plus_number_grouping_symbols_.insert(
305
+ make_pair(ToUnicodeCodepoint("\xE2\x80\x92" /* "‒" */), '-'));
306
+ all_plus_number_grouping_symbols_.insert(
307
+ make_pair(ToUnicodeCodepoint("\xE2\x80\x93" /* "–" */), '-'));
308
+ all_plus_number_grouping_symbols_.insert(
309
+ make_pair(ToUnicodeCodepoint("\xE2\x80\x94" /* "—" */), '-'));
310
+ all_plus_number_grouping_symbols_.insert(
311
+ make_pair(ToUnicodeCodepoint("\xE2\x80\x95" /* "―" */), '-'));
312
+ all_plus_number_grouping_symbols_.insert(
313
+ make_pair(ToUnicodeCodepoint("\xE2\x88\x92" /* "−" */), '-'));
314
+ all_plus_number_grouping_symbols_.insert(
315
+ make_pair(ToUnicodeCodepoint("/"), '/'));
316
+ all_plus_number_grouping_symbols_.insert(
317
+ make_pair(ToUnicodeCodepoint("\xEF\xBC\x8F" /* "/" */), '/'));
318
+ all_plus_number_grouping_symbols_.insert(
319
+ make_pair(ToUnicodeCodepoint(" "), ' '));
320
+ all_plus_number_grouping_symbols_.insert(
321
+ make_pair(ToUnicodeCodepoint("\xE3\x80\x80" /* " " */), ' '));
322
+ all_plus_number_grouping_symbols_.insert(
323
+ make_pair(ToUnicodeCodepoint("\xE2\x81\xA0"), ' '));
324
+ all_plus_number_grouping_symbols_.insert(
325
+ make_pair(ToUnicodeCodepoint("."), '.'));
326
+ all_plus_number_grouping_symbols_.insert(
327
+ make_pair(ToUnicodeCodepoint("\xEF\xBC\x8E" /* "." */), '.'));
328
+ // Only the upper-case letters are added here - the lower-case versions are
329
+ // added programmatically.
330
+ alpha_mappings_.insert(make_pair(ToUnicodeCodepoint("A"), '2'));
331
+ alpha_mappings_.insert(make_pair(ToUnicodeCodepoint("B"), '2'));
332
+ alpha_mappings_.insert(make_pair(ToUnicodeCodepoint("C"), '2'));
333
+ alpha_mappings_.insert(make_pair(ToUnicodeCodepoint("D"), '3'));
334
+ alpha_mappings_.insert(make_pair(ToUnicodeCodepoint("E"), '3'));
335
+ alpha_mappings_.insert(make_pair(ToUnicodeCodepoint("F"), '3'));
336
+ alpha_mappings_.insert(make_pair(ToUnicodeCodepoint("G"), '4'));
337
+ alpha_mappings_.insert(make_pair(ToUnicodeCodepoint("H"), '4'));
338
+ alpha_mappings_.insert(make_pair(ToUnicodeCodepoint("I"), '4'));
339
+ alpha_mappings_.insert(make_pair(ToUnicodeCodepoint("J"), '5'));
340
+ alpha_mappings_.insert(make_pair(ToUnicodeCodepoint("K"), '5'));
341
+ alpha_mappings_.insert(make_pair(ToUnicodeCodepoint("L"), '5'));
342
+ alpha_mappings_.insert(make_pair(ToUnicodeCodepoint("M"), '6'));
343
+ alpha_mappings_.insert(make_pair(ToUnicodeCodepoint("N"), '6'));
344
+ alpha_mappings_.insert(make_pair(ToUnicodeCodepoint("O"), '6'));
345
+ alpha_mappings_.insert(make_pair(ToUnicodeCodepoint("P"), '7'));
346
+ alpha_mappings_.insert(make_pair(ToUnicodeCodepoint("Q"), '7'));
347
+ alpha_mappings_.insert(make_pair(ToUnicodeCodepoint("R"), '7'));
348
+ alpha_mappings_.insert(make_pair(ToUnicodeCodepoint("S"), '7'));
349
+ alpha_mappings_.insert(make_pair(ToUnicodeCodepoint("T"), '8'));
350
+ alpha_mappings_.insert(make_pair(ToUnicodeCodepoint("U"), '8'));
351
+ alpha_mappings_.insert(make_pair(ToUnicodeCodepoint("V"), '8'));
352
+ alpha_mappings_.insert(make_pair(ToUnicodeCodepoint("W"), '9'));
353
+ alpha_mappings_.insert(make_pair(ToUnicodeCodepoint("X"), '9'));
354
+ alpha_mappings_.insert(make_pair(ToUnicodeCodepoint("Y"), '9'));
355
+ alpha_mappings_.insert(make_pair(ToUnicodeCodepoint("Z"), '9'));
356
+ map<char32, char> lower_case_mappings;
357
+ map<char32, char> alpha_letters;
358
+ for (map<char32, char>::const_iterator it = alpha_mappings_.begin();
359
+ it != alpha_mappings_.end();
360
+ ++it) {
361
+ // Convert all the upper-case ASCII letters to lower-case.
362
+ if (it->first < 128) {
363
+ char letter_as_upper = static_cast<char>(it->first);
364
+ char32 letter_as_lower = static_cast<char32>(tolower(letter_as_upper));
365
+ lower_case_mappings.insert(make_pair(letter_as_lower, it->second));
366
+ // Add the letters in both variants to the alpha_letters map. This just
367
+ // pairs each letter with its upper-case representation so that it can
368
+ // be retained when normalising alpha numbers.
369
+ alpha_letters.insert(make_pair(letter_as_lower, letter_as_upper));
370
+ alpha_letters.insert(make_pair(it->first, letter_as_upper));
371
+ }
372
+ }
373
+ // In the Java version we don't insert the lower-case mappings in the map,
374
+ // because we convert to upper case on the fly. Doing this here would
375
+ // involve pulling in all of ICU, which we don't want to do if we don't have
376
+ // to.
377
+ alpha_mappings_.insert(lower_case_mappings.begin(),
378
+ lower_case_mappings.end());
379
+ alpha_phone_mappings_.insert(alpha_mappings_.begin(),
380
+ alpha_mappings_.end());
381
+ all_plus_number_grouping_symbols_.insert(alpha_letters.begin(),
382
+ alpha_letters.end());
383
+ // Add the ASCII digits so that they don't get deleted by NormalizeHelper().
384
+ for (char c = '0'; c <= '9'; ++c) {
385
+ diallable_char_mappings_.insert(make_pair(c, c));
386
+ alpha_phone_mappings_.insert(make_pair(c, c));
387
+ all_plus_number_grouping_symbols_.insert(make_pair(c, c));
388
+ }
389
+
390
+ mobile_token_mappings_.insert(make_pair(52, '1'));
391
+ mobile_token_mappings_.insert(make_pair(54, '9'));
392
+ }
393
+
394
+ // Small string helpers since StrCat has a maximum number of arguments. These
395
+ // are both used to build valid_phone_number_.
396
+ const string punctuation_and_star_sign_;
397
+ const string min_length_phone_number_pattern_;
398
+
399
+ // Regular expression of viable phone numbers. This is location independent.
400
+ // Checks we have at least three leading digits, and only valid punctuation,
401
+ // alpha characters and digits in the phone number. Does not include extension
402
+ // data. The symbol 'x' is allowed here as valid punctuation since it is often
403
+ // used as a placeholder for carrier codes, for example in Brazilian phone
404
+ // numbers. We also allow multiple plus-signs at the start.
405
+ // Corresponds to the following:
406
+ // [digits]{minLengthNsn}|
407
+ // plus_sign*(([punctuation]|[star])*[digits]){3,}
408
+ // ([punctuation]|[star]|[digits]|[alpha])*
409
+ //
410
+ // The first reg-ex is to allow short numbers (two digits long) to be parsed
411
+ // if they are entered as "15" etc, but only if there is no punctuation in
412
+ // them. The second expression restricts the number of digits to three or
413
+ // more, but then allows them to be in international form, and to have
414
+ // alpha-characters and punctuation.
415
+ const string valid_phone_number_;
416
+
417
+ // Regexp of all possible ways to write extensions, for use when parsing. This
418
+ // will be run as a case-insensitive regexp match. Wide character versions are
419
+ // also provided after each ASCII version.
420
+ // For parsing, we are slightly more lenient in our interpretation than for
421
+ // matching. Here we allow a "comma" as a possible extension indicator. When
422
+ // matching, this is hardly ever used to indicate this.
423
+ const string extn_patterns_for_parsing_;
424
+
425
+ public:
426
+ scoped_ptr<const AbstractRegExpFactory> regexp_factory_;
427
+ scoped_ptr<RegExpCache> regexp_cache_;
428
+
429
+ // A map that contains characters that are essential when dialling. That means
430
+ // any of the characters in this map must not be removed from a number when
431
+ // dialing, otherwise the call will not reach the intended destination.
432
+ map<char32, char> diallable_char_mappings_;
433
+ // These mappings map a character (key) to a specific digit that should
434
+ // replace it for normalization purposes.
435
+ map<char32, char> alpha_mappings_;
436
+ // For performance reasons, store a map of combining alpha_mappings with ASCII
437
+ // digits.
438
+ map<char32, char> alpha_phone_mappings_;
439
+
440
+ // Separate map of all symbols that we wish to retain when formatting alpha
441
+ // numbers. This includes digits, ascii letters and number grouping symbols
442
+ // such as "-" and " ".
443
+ map<char32, char> all_plus_number_grouping_symbols_;
444
+
445
+ // Map of country calling codes that use a mobile token before the area code.
446
+ // One example of when this is relevant is when determining the length of the
447
+ // national destination code, which should be the length of the area code plus
448
+ // the length of the mobile token.
449
+ map<int, char> mobile_token_mappings_;
450
+
451
+ // Pattern that makes it easy to distinguish whether a region has a unique
452
+ // international dialing prefix or not. If a region has a unique international
453
+ // prefix (e.g. 011 in USA), it will be represented as a string that contains
454
+ // a sequence of ASCII digits. If there are multiple available international
455
+ // prefixes in a region, they will be represented as a regex string that
456
+ // always contains character(s) other than ASCII digits.
457
+ // Note this regex also includes tilde, which signals waiting for the tone.
458
+ scoped_ptr<const RegExp> unique_international_prefix_;
459
+
460
+ scoped_ptr<const RegExp> digits_pattern_;
461
+ scoped_ptr<const RegExp> capturing_digit_pattern_;
462
+ scoped_ptr<const RegExp> capturing_ascii_digits_pattern_;
463
+
464
+ // Regular expression of acceptable characters that may start a phone number
465
+ // for the purposes of parsing. This allows us to strip away meaningless
466
+ // prefixes to phone numbers that may be mistakenly given to us. This consists
467
+ // of digits, the plus symbol and arabic-indic digits. This does not contain
468
+ // alpha characters, although they may be used later in the number. It also
469
+ // does not include other punctuation, as this will be stripped later during
470
+ // parsing and is of no information value when parsing a number. The string
471
+ // starting with this valid character is captured.
472
+ // This corresponds to VALID_START_CHAR in the java version.
473
+ scoped_ptr<const RegExp> valid_start_char_pattern_;
474
+
475
+ // Regular expression of valid characters before a marker that might indicate
476
+ // a second number.
477
+ scoped_ptr<const RegExp> capture_up_to_second_number_start_pattern_;
478
+
479
+ // Regular expression of trailing characters that we want to remove. We remove
480
+ // all characters that are not alpha or numerical characters. The hash
481
+ // character is retained here, as it may signify the previous block was an
482
+ // extension. Note the capturing block at the start to capture the rest of the
483
+ // number if this was a match.
484
+ // This corresponds to UNWANTED_END_CHAR_PATTERN in the java version.
485
+ scoped_ptr<const RegExp> unwanted_end_char_pattern_;
486
+
487
+ // Regular expression of groups of valid punctuation characters.
488
+ scoped_ptr<const RegExp> separator_pattern_;
489
+
490
+ // Regexp of all possible ways to write extensions, for use when finding phone
491
+ // numbers in text. This will be run as a case-insensitive regexp match. Wide
492
+ // character versions are also provided after each ASCII version.
493
+ const string extn_patterns_for_matching_;
494
+
495
+ // Regexp of all known extension prefixes used by different regions followed
496
+ // by 1 or more valid digits, for use when parsing.
497
+ scoped_ptr<const RegExp> extn_pattern_;
498
+
499
+ // We append optionally the extension pattern to the end here, as a valid
500
+ // phone number may have an extension prefix appended, followed by 1 or more
501
+ // digits.
502
+ scoped_ptr<const RegExp> valid_phone_number_pattern_;
503
+
504
+ // We use this pattern to check if the phone number has at least three letters
505
+ // in it - if so, then we treat it as a number where some phone-number digits
506
+ // are represented by letters.
507
+ scoped_ptr<const RegExp> valid_alpha_phone_pattern_;
508
+
509
+ scoped_ptr<const RegExp> first_group_capturing_pattern_;
510
+
511
+ scoped_ptr<const RegExp> carrier_code_pattern_;
512
+
513
+ scoped_ptr<const RegExp> plus_chars_pattern_;
514
+
515
+ PhoneNumberRegExpsAndMappings()
516
+ : punctuation_and_star_sign_(StrCat(PhoneNumberUtil::kValidPunctuation,
517
+ kStarSign)),
518
+ min_length_phone_number_pattern_(
519
+ StrCat(kDigits, "{", PhoneNumberUtil::kMinLengthForNsn, "}")),
520
+ valid_phone_number_(
521
+ StrCat(min_length_phone_number_pattern_, "|[",
522
+ PhoneNumberUtil::kPlusChars, "]*(?:[",
523
+ punctuation_and_star_sign_, "]*",
524
+ kDigits, "){3,}[", kValidAlpha,
525
+ punctuation_and_star_sign_, kDigits,
526
+ "]*")),
527
+ extn_patterns_for_parsing_(
528
+ CreateExtnPattern(StrCat(",", kSingleExtnSymbolsForMatching))),
529
+ regexp_factory_(new RegExpFactory()),
530
+ regexp_cache_(new RegExpCache(*regexp_factory_.get(), 128)),
531
+ diallable_char_mappings_(),
532
+ alpha_mappings_(),
533
+ alpha_phone_mappings_(),
534
+ all_plus_number_grouping_symbols_(),
535
+ mobile_token_mappings_(),
536
+ unique_international_prefix_(regexp_factory_->CreateRegExp(
537
+ /* "[\\d]+(?:[~⁓∼~][\\d]+)?" */
538
+ "[\\d]+(?:[~\xE2\x81\x93\xE2\x88\xBC\xEF\xBD\x9E][\\d]+)?")),
539
+ digits_pattern_(
540
+ regexp_factory_->CreateRegExp(StrCat("[", kDigits, "]*"))),
541
+ capturing_digit_pattern_(
542
+ regexp_factory_->CreateRegExp(StrCat("([", kDigits, "])"))),
543
+ capturing_ascii_digits_pattern_(
544
+ regexp_factory_->CreateRegExp("(\\d+)")),
545
+ valid_start_char_pattern_(regexp_factory_->CreateRegExp(
546
+ StrCat("[", PhoneNumberUtil::kPlusChars, kDigits, "]"))),
547
+ capture_up_to_second_number_start_pattern_(
548
+ regexp_factory_->CreateRegExp(
549
+ PhoneNumberUtil::kCaptureUpToSecondNumberStart)),
550
+ unwanted_end_char_pattern_(
551
+ regexp_factory_->CreateRegExp("[^\\p{N}\\p{L}#]")),
552
+ separator_pattern_(
553
+ regexp_factory_->CreateRegExp(
554
+ StrCat("[", PhoneNumberUtil::kValidPunctuation, "]+"))),
555
+ extn_patterns_for_matching_(
556
+ CreateExtnPattern(kSingleExtnSymbolsForMatching)),
557
+ extn_pattern_(regexp_factory_->CreateRegExp(
558
+ StrCat("(?i)(?:", extn_patterns_for_parsing_, ")$"))),
559
+ valid_phone_number_pattern_(regexp_factory_->CreateRegExp(
560
+ StrCat("(?i)", valid_phone_number_,
561
+ "(?:", extn_patterns_for_parsing_, ")?"))),
562
+ valid_alpha_phone_pattern_(regexp_factory_->CreateRegExp(
563
+ StrCat("(?i)(?:.*?[", kValidAlpha, "]){3}"))),
564
+ // The first_group_capturing_pattern was originally set to $1 but there
565
+ // are some countries for which the first group is not used in the
566
+ // national pattern (e.g. Argentina) so the $1 group does not match
567
+ // correctly. Therefore, we use \d, so that the first group actually
568
+ // used in the pattern will be matched.
569
+ first_group_capturing_pattern_(
570
+ regexp_factory_->CreateRegExp("(\\$\\d)")),
571
+ carrier_code_pattern_(regexp_factory_->CreateRegExp("\\$CC")),
572
+ plus_chars_pattern_(
573
+ regexp_factory_->CreateRegExp(
574
+ StrCat("[", PhoneNumberUtil::kPlusChars, "]+"))) {
575
+ InitializeMapsAndSets();
576
+ }
577
+
578
+ private:
579
+ DISALLOW_COPY_AND_ASSIGN(PhoneNumberRegExpsAndMappings);
580
+ };
581
+
582
+ // Private constructor. Also takes care of initialisation.
583
+ PhoneNumberUtil::PhoneNumberUtil()
584
+ : logger_(Logger::set_logger_impl(new NullLogger())),
585
+ reg_exps_(new PhoneNumberRegExpsAndMappings),
586
+ country_calling_code_to_region_code_map_(new vector<IntRegionsPair>()),
587
+ nanpa_regions_(new set<string>()),
588
+ region_to_metadata_map_(new map<string, PhoneMetadata>()),
589
+ country_code_to_non_geographical_metadata_map_(
590
+ new map<int, PhoneMetadata>) {
591
+ Logger::set_logger_impl(logger_.get());
592
+ // TODO: Update the java version to put the contents of the init
593
+ // method inside the constructor as well to keep both in sync.
594
+ PhoneMetadataCollection metadata_collection;
595
+ if (!LoadCompiledInMetadata(&metadata_collection)) {
596
+ LOG(DFATAL) << "Could not parse compiled-in metadata.";
597
+ return;
598
+ }
599
+ // Storing data in a temporary map to make it easier to find other regions
600
+ // that share a country calling code when inserting data.
601
+ map<int, list<string>* > country_calling_code_to_region_map;
602
+ for (RepeatedPtrField<PhoneMetadata>::const_iterator it =
603
+ metadata_collection.metadata().begin();
604
+ it != metadata_collection.metadata().end();
605
+ ++it) {
606
+ const string& region_code = it->id();
607
+ if (region_code == RegionCode::GetUnknown()) {
608
+ continue;
609
+ }
610
+
611
+ int country_calling_code = it->country_code();
612
+ if (kRegionCodeForNonGeoEntity == region_code) {
613
+ country_code_to_non_geographical_metadata_map_->insert(
614
+ make_pair(country_calling_code, *it));
615
+ } else {
616
+ region_to_metadata_map_->insert(make_pair(region_code, *it));
617
+ }
618
+ map<int, list<string>* >::iterator calling_code_in_map =
619
+ country_calling_code_to_region_map.find(country_calling_code);
620
+ if (calling_code_in_map != country_calling_code_to_region_map.end()) {
621
+ if (it->main_country_for_code()) {
622
+ calling_code_in_map->second->push_front(region_code);
623
+ } else {
624
+ calling_code_in_map->second->push_back(region_code);
625
+ }
626
+ } else {
627
+ // For most country calling codes, there will be only one region code.
628
+ list<string>* list_with_region_code = new list<string>();
629
+ list_with_region_code->push_back(region_code);
630
+ country_calling_code_to_region_map.insert(
631
+ make_pair(country_calling_code, list_with_region_code));
632
+ }
633
+ if (country_calling_code == kNanpaCountryCode) {
634
+ nanpa_regions_->insert(region_code);
635
+ }
636
+ }
637
+
638
+ country_calling_code_to_region_code_map_->insert(
639
+ country_calling_code_to_region_code_map_->begin(),
640
+ country_calling_code_to_region_map.begin(),
641
+ country_calling_code_to_region_map.end());
642
+ // Sort all the pairs in ascending order according to country calling code.
643
+ sort(country_calling_code_to_region_code_map_->begin(),
644
+ country_calling_code_to_region_code_map_->end(),
645
+ OrderByFirst());
646
+ }
647
+
648
+ PhoneNumberUtil::~PhoneNumberUtil() {
649
+ STLDeleteContainerPairSecondPointers(
650
+ country_calling_code_to_region_code_map_->begin(),
651
+ country_calling_code_to_region_code_map_->end());
652
+ }
653
+
654
+ void PhoneNumberUtil::GetSupportedRegions(set<string>* regions) const {
655
+ DCHECK(regions);
656
+ for (map<string, PhoneMetadata>::const_iterator it =
657
+ region_to_metadata_map_->begin(); it != region_to_metadata_map_->end();
658
+ ++it) {
659
+ regions->insert(it->first);
660
+ }
661
+ }
662
+
663
+ void PhoneNumberUtil::GetSupportedGlobalNetworkCallingCodes(
664
+ set<int>* calling_codes) const {
665
+ DCHECK(calling_codes);
666
+ for (map<int, PhoneMetadata>::const_iterator it =
667
+ country_code_to_non_geographical_metadata_map_->begin();
668
+ it != country_code_to_non_geographical_metadata_map_->end(); ++it) {
669
+ calling_codes->insert(it->first);
670
+ }
671
+ }
672
+
673
+ // Public wrapper function to get a PhoneNumberUtil instance with the default
674
+ // metadata file.
675
+ // static
676
+ PhoneNumberUtil* PhoneNumberUtil::GetInstance() {
677
+ return Singleton<PhoneNumberUtil>::GetInstance();
678
+ }
679
+
680
+ const string& PhoneNumberUtil::GetExtnPatternsForMatching() const {
681
+ return reg_exps_->extn_patterns_for_matching_;
682
+ }
683
+
684
+ bool PhoneNumberUtil::StartsWithPlusCharsPattern(const string& number)
685
+ const {
686
+ const scoped_ptr<RegExpInput> number_string_piece(
687
+ reg_exps_->regexp_factory_->CreateInput(number));
688
+ return reg_exps_->plus_chars_pattern_->Consume(number_string_piece.get());
689
+ }
690
+
691
+ bool PhoneNumberUtil::ContainsOnlyValidDigits(const string& s) const {
692
+ return reg_exps_->digits_pattern_->FullMatch(s);
693
+ }
694
+
695
+ void PhoneNumberUtil::TrimUnwantedEndChars(string* number) const {
696
+ DCHECK(number);
697
+ UnicodeText number_as_unicode;
698
+ number_as_unicode.PointToUTF8(number->data(), number->size());
699
+ char current_char[5];
700
+ int len;
701
+ UnicodeText::const_reverse_iterator reverse_it(number_as_unicode.end());
702
+ for (; reverse_it.base() != number_as_unicode.begin(); ++reverse_it) {
703
+ len = reverse_it.get_utf8(current_char);
704
+ current_char[len] = '\0';
705
+ if (!reg_exps_->unwanted_end_char_pattern_->FullMatch(current_char)) {
706
+ break;
707
+ }
708
+ }
709
+
710
+ number->assign(UnicodeText::UTF8Substring(number_as_unicode.begin(),
711
+ reverse_it.base()));
712
+ }
713
+
714
+ bool PhoneNumberUtil::IsFormatEligibleForAsYouTypeFormatter(
715
+ const string& format) const {
716
+ // A pattern that is used to determine if a numberFormat under
717
+ // availableFormats is eligible to be used by the AYTF. It is eligible when
718
+ // the format element under numberFormat contains groups of the dollar sign
719
+ // followed by a single digit, separated by valid phone number punctuation.
720
+ // This prevents invalid punctuation (such as the star sign in Israeli star
721
+ // numbers) getting into the output of the AYTF.
722
+ const RegExp& eligible_format_pattern = reg_exps_->regexp_cache_->GetRegExp(
723
+ StrCat("[", kValidPunctuation, "]*", "(\\$\\d", "[",
724
+ kValidPunctuation, "]*)+"));
725
+ return eligible_format_pattern.FullMatch(format);
726
+ }
727
+
728
+ bool PhoneNumberUtil::FormattingRuleHasFirstGroupOnly(
729
+ const string& national_prefix_formatting_rule) const {
730
+ // A pattern that is used to determine if the national prefix formatting rule
731
+ // has the first group only, i.e., does not start with the national prefix.
732
+ // Note that the pattern explicitly allows for unbalanced parentheses.
733
+ const RegExp& first_group_only_prefix_pattern =
734
+ reg_exps_->regexp_cache_->GetRegExp("\\(?\\$1\\)?");
735
+ return national_prefix_formatting_rule.empty() ||
736
+ first_group_only_prefix_pattern.FullMatch(
737
+ national_prefix_formatting_rule);
738
+ }
739
+
740
+ void PhoneNumberUtil::GetNddPrefixForRegion(const string& region_code,
741
+ bool strip_non_digits,
742
+ string* national_prefix) const {
743
+ DCHECK(national_prefix);
744
+ const PhoneMetadata* metadata = GetMetadataForRegion(region_code);
745
+ if (!metadata) {
746
+ LOG(WARNING) << "Invalid or unknown region code (" << region_code
747
+ << ") provided.";
748
+ return;
749
+ }
750
+ national_prefix->assign(metadata->national_prefix());
751
+ if (strip_non_digits) {
752
+ // Note: if any other non-numeric symbols are ever used in national
753
+ // prefixes, these would have to be removed here as well.
754
+ strrmm(national_prefix, "~");
755
+ }
756
+ }
757
+
758
+ bool PhoneNumberUtil::IsValidRegionCode(const string& region_code) const {
759
+ return (region_to_metadata_map_->find(region_code) !=
760
+ region_to_metadata_map_->end());
761
+ }
762
+
763
+ bool PhoneNumberUtil::HasValidCountryCallingCode(
764
+ int country_calling_code) const {
765
+ // Create an IntRegionsPair with the country_code passed in, and use it to
766
+ // locate the pair with the same country_code in the sorted vector.
767
+ IntRegionsPair target_pair;
768
+ target_pair.first = country_calling_code;
769
+ return (binary_search(country_calling_code_to_region_code_map_->begin(),
770
+ country_calling_code_to_region_code_map_->end(),
771
+ target_pair, OrderByFirst()));
772
+ }
773
+
774
+ // Returns a pointer to the phone metadata for the appropriate region or NULL
775
+ // if the region code is invalid or unknown.
776
+ const PhoneMetadata* PhoneNumberUtil::GetMetadataForRegion(
777
+ const string& region_code) const {
778
+ map<string, PhoneMetadata>::const_iterator it =
779
+ region_to_metadata_map_->find(region_code);
780
+ if (it != region_to_metadata_map_->end()) {
781
+ return &it->second;
782
+ }
783
+ return NULL;
784
+ }
785
+
786
+ const PhoneMetadata* PhoneNumberUtil::GetMetadataForNonGeographicalRegion(
787
+ int country_calling_code) const {
788
+ map<int, PhoneMetadata>::const_iterator it =
789
+ country_code_to_non_geographical_metadata_map_->find(
790
+ country_calling_code);
791
+ if (it != country_code_to_non_geographical_metadata_map_->end()) {
792
+ return &it->second;
793
+ }
794
+ return NULL;
795
+ }
796
+
797
+ void PhoneNumberUtil::Format(const PhoneNumber& number,
798
+ PhoneNumberFormat number_format,
799
+ string* formatted_number) const {
800
+ DCHECK(formatted_number);
801
+ if (number.national_number() == 0) {
802
+ const string& raw_input = number.raw_input();
803
+ if (!raw_input.empty()) {
804
+ // Unparseable numbers that kept their raw input just use that.
805
+ // This is the only case where a number can be formatted as E164 without a
806
+ // leading '+' symbol (but the original number wasn't parseable anyway).
807
+ // TODO: Consider removing the 'if' above so that unparseable
808
+ // strings without raw input format to the empty string instead of "+00".
809
+ formatted_number->assign(raw_input);
810
+ return;
811
+ }
812
+ }
813
+ int country_calling_code = number.country_code();
814
+ string national_significant_number;
815
+ GetNationalSignificantNumber(number, &national_significant_number);
816
+ if (number_format == E164) {
817
+ // Early exit for E164 case (even if the country calling code is invalid)
818
+ // since no formatting of the national number needs to be applied.
819
+ // Extensions are not formatted.
820
+ formatted_number->assign(national_significant_number);
821
+ PrefixNumberWithCountryCallingCode(country_calling_code, E164,
822
+ formatted_number);
823
+ return;
824
+ }
825
+ if (!HasValidCountryCallingCode(country_calling_code)) {
826
+ formatted_number->assign(national_significant_number);
827
+ return;
828
+ }
829
+ // Note here that all NANPA formatting rules are contained by US, so we use
830
+ // that to format NANPA numbers. The same applies to Russian Fed regions -
831
+ // rules are contained by Russia. French Indian Ocean country rules are
832
+ // contained by Réunion.
833
+ string region_code;
834
+ GetRegionCodeForCountryCode(country_calling_code, &region_code);
835
+ // Metadata cannot be NULL because the country calling code is valid (which
836
+ // means that the region code cannot be ZZ and must be one of our supported
837
+ // region codes).
838
+ const PhoneMetadata* metadata =
839
+ GetMetadataForRegionOrCallingCode(country_calling_code, region_code);
840
+ FormatNsn(national_significant_number, *metadata, number_format,
841
+ formatted_number);
842
+ MaybeAppendFormattedExtension(number, *metadata, number_format,
843
+ formatted_number);
844
+ PrefixNumberWithCountryCallingCode(country_calling_code, number_format,
845
+ formatted_number);
846
+ }
847
+
848
+ void PhoneNumberUtil::FormatByPattern(
849
+ const PhoneNumber& number,
850
+ PhoneNumberFormat number_format,
851
+ const RepeatedPtrField<NumberFormat>& user_defined_formats,
852
+ string* formatted_number) const {
853
+ DCHECK(formatted_number);
854
+ int country_calling_code = number.country_code();
855
+ // Note GetRegionCodeForCountryCode() is used because formatting information
856
+ // for regions which share a country calling code is contained by only one
857
+ // region for performance reasons. For example, for NANPA regions it will be
858
+ // contained in the metadata for US.
859
+ string national_significant_number;
860
+ GetNationalSignificantNumber(number, &national_significant_number);
861
+ if (!HasValidCountryCallingCode(country_calling_code)) {
862
+ formatted_number->assign(national_significant_number);
863
+ return;
864
+ }
865
+ string region_code;
866
+ GetRegionCodeForCountryCode(country_calling_code, &region_code);
867
+ // Metadata cannot be NULL because the country calling code is valid.
868
+ const PhoneMetadata* metadata =
869
+ GetMetadataForRegionOrCallingCode(country_calling_code, region_code);
870
+ const NumberFormat* formatting_pattern =
871
+ ChooseFormattingPatternForNumber(user_defined_formats,
872
+ national_significant_number);
873
+ if (!formatting_pattern) {
874
+ // If no pattern above is matched, we format the number as a whole.
875
+ formatted_number->assign(national_significant_number);
876
+ } else {
877
+ NumberFormat num_format_copy;
878
+ // Before we do a replacement of the national prefix pattern $NP with the
879
+ // national prefix, we need to copy the rule so that subsequent replacements
880
+ // for different numbers have the appropriate national prefix.
881
+ num_format_copy.MergeFrom(*formatting_pattern);
882
+ string national_prefix_formatting_rule(
883
+ formatting_pattern->national_prefix_formatting_rule());
884
+ if (!national_prefix_formatting_rule.empty()) {
885
+ const string& national_prefix = metadata->national_prefix();
886
+ if (!national_prefix.empty()) {
887
+ // Replace $NP with national prefix and $FG with the first group ($1).
888
+ GlobalReplaceSubstring("$NP", national_prefix,
889
+ &national_prefix_formatting_rule);
890
+ GlobalReplaceSubstring("$FG", "$1",
891
+ &national_prefix_formatting_rule);
892
+ num_format_copy.set_national_prefix_formatting_rule(
893
+ national_prefix_formatting_rule);
894
+ } else {
895
+ // We don't want to have a rule for how to format the national prefix if
896
+ // there isn't one.
897
+ num_format_copy.clear_national_prefix_formatting_rule();
898
+ }
899
+ }
900
+ FormatNsnUsingPattern(national_significant_number, num_format_copy,
901
+ number_format, formatted_number);
902
+ }
903
+ MaybeAppendFormattedExtension(number, *metadata, NATIONAL, formatted_number);
904
+ PrefixNumberWithCountryCallingCode(country_calling_code, number_format,
905
+ formatted_number);
906
+ }
907
+
908
+ void PhoneNumberUtil::FormatNationalNumberWithCarrierCode(
909
+ const PhoneNumber& number,
910
+ const string& carrier_code,
911
+ string* formatted_number) const {
912
+ int country_calling_code = number.country_code();
913
+ string national_significant_number;
914
+ GetNationalSignificantNumber(number, &national_significant_number);
915
+ if (!HasValidCountryCallingCode(country_calling_code)) {
916
+ formatted_number->assign(national_significant_number);
917
+ return;
918
+ }
919
+
920
+ // Note GetRegionCodeForCountryCode() is used because formatting information
921
+ // for regions which share a country calling code is contained by only one
922
+ // region for performance reasons. For example, for NANPA regions it will be
923
+ // contained in the metadata for US.
924
+ string region_code;
925
+ GetRegionCodeForCountryCode(country_calling_code, &region_code);
926
+ // Metadata cannot be NULL because the country calling code is valid.
927
+ const PhoneMetadata* metadata =
928
+ GetMetadataForRegionOrCallingCode(country_calling_code, region_code);
929
+ FormatNsnWithCarrier(national_significant_number, *metadata, NATIONAL,
930
+ carrier_code, formatted_number);
931
+ MaybeAppendFormattedExtension(number, *metadata, NATIONAL, formatted_number);
932
+ PrefixNumberWithCountryCallingCode(country_calling_code, NATIONAL,
933
+ formatted_number);
934
+ }
935
+
936
+ const PhoneMetadata* PhoneNumberUtil::GetMetadataForRegionOrCallingCode(
937
+ int country_calling_code, const string& region_code) const {
938
+ return kRegionCodeForNonGeoEntity == region_code
939
+ ? GetMetadataForNonGeographicalRegion(country_calling_code)
940
+ : GetMetadataForRegion(region_code);
941
+ }
942
+
943
+ void PhoneNumberUtil::FormatNationalNumberWithPreferredCarrierCode(
944
+ const PhoneNumber& number,
945
+ const string& fallback_carrier_code,
946
+ string* formatted_number) const {
947
+ FormatNationalNumberWithCarrierCode(
948
+ number,
949
+ number.has_preferred_domestic_carrier_code()
950
+ ? number.preferred_domestic_carrier_code()
951
+ : fallback_carrier_code,
952
+ formatted_number);
953
+ }
954
+
955
+ void PhoneNumberUtil::FormatNumberForMobileDialing(
956
+ const PhoneNumber& number,
957
+ const string& calling_from,
958
+ bool with_formatting,
959
+ string* formatted_number) const {
960
+ int country_calling_code = number.country_code();
961
+ if (!HasValidCountryCallingCode(country_calling_code)) {
962
+ formatted_number->assign(number.has_raw_input() ? number.raw_input() : "");
963
+ return;
964
+ }
965
+
966
+ formatted_number->assign("");
967
+ // Clear the extension, as that part cannot normally be dialed together with
968
+ // the main number.
969
+ PhoneNumber number_no_extension(number);
970
+ number_no_extension.clear_extension();
971
+ string region_code;
972
+ GetRegionCodeForCountryCode(country_calling_code, &region_code);
973
+ PhoneNumberType number_type = GetNumberType(number_no_extension);
974
+ bool is_valid_number = (number_type != UNKNOWN);
975
+ if (calling_from == region_code) {
976
+ bool is_fixed_line_or_mobile =
977
+ (number_type == FIXED_LINE) || (number_type == MOBILE) ||
978
+ (number_type == FIXED_LINE_OR_MOBILE);
979
+ // Carrier codes may be needed in some countries. We handle this here.
980
+ if ((region_code == "CO") && (number_type == FIXED_LINE)) {
981
+ FormatNationalNumberWithCarrierCode(
982
+ number_no_extension, kColombiaMobileToFixedLinePrefix,
983
+ formatted_number);
984
+ } else if ((region_code == "BR") && (is_fixed_line_or_mobile)) {
985
+ if (number_no_extension.has_preferred_domestic_carrier_code()) {
986
+ FormatNationalNumberWithPreferredCarrierCode(number_no_extension, "",
987
+ formatted_number);
988
+ } else {
989
+ // Brazilian fixed line and mobile numbers need to be dialed with a
990
+ // carrier code when called within Brazil. Without that, most of the
991
+ // carriers won't connect the call. Because of that, we return an empty
992
+ // string here.
993
+ formatted_number->assign("");
994
+ }
995
+ } else if (is_valid_number && region_code == "HU") {
996
+ // The national format for HU numbers doesn't contain the national prefix,
997
+ // because that is how numbers are normally written down. However, the
998
+ // national prefix is obligatory when dialing from a mobile phone, except
999
+ // for short numbers. As a result, we add it back here if it is a valid
1000
+ // regular length phone number.
1001
+ Format(number_no_extension, NATIONAL, formatted_number);
1002
+ string hu_national_prefix;
1003
+ GetNddPrefixForRegion(region_code, true /* strip non-digits */,
1004
+ &hu_national_prefix);
1005
+ formatted_number->assign(
1006
+ StrCat(hu_national_prefix, " ", *formatted_number));
1007
+ } else if (country_calling_code == kNanpaCountryCode) {
1008
+ // For NANPA countries, we output international format for numbers that
1009
+ // can be dialed internationally, since that always works, except for
1010
+ // numbers which might potentially be short numbers, which are always
1011
+ // dialled in national format.
1012
+ const PhoneMetadata* region_metadata = GetMetadataForRegion(calling_from);
1013
+ string national_number;
1014
+ GetNationalSignificantNumber(number_no_extension, &national_number);
1015
+ if (CanBeInternationallyDialled(number_no_extension) &&
1016
+ !IsShorterThanPossibleNormalNumber(region_metadata,
1017
+ national_number)) {
1018
+ Format(number_no_extension, INTERNATIONAL, formatted_number);
1019
+ } else {
1020
+ Format(number_no_extension, NATIONAL, formatted_number);
1021
+ }
1022
+ } else {
1023
+ // For non-geographical countries, and Mexican and Chilean fixed line and
1024
+ // mobile numbers, we output international format for numbers that can be
1025
+ // dialed internationally as that always works.
1026
+ if ((region_code == kRegionCodeForNonGeoEntity ||
1027
+ // MX fixed line and mobile numbers should always be formatted in
1028
+ // international format, even when dialed within MX. For national
1029
+ // format to work, a carrier code needs to be used, and the correct
1030
+ // carrier code depends on if the caller and callee are from the same
1031
+ // local area. It is trickier to get that to work correctly than
1032
+ // using international format, which is tested to work fine on all
1033
+ // carriers.
1034
+ // CL fixed line numbers need the national prefix when dialing in the
1035
+ // national format, but don't have it when used for display. The
1036
+ // reverse is true for mobile numbers. As a result, we output them in
1037
+ // the international format to make it work.
1038
+ ((region_code == "MX" || region_code == "CL") &&
1039
+ is_fixed_line_or_mobile)) &&
1040
+ CanBeInternationallyDialled(number_no_extension)) {
1041
+ Format(number_no_extension, INTERNATIONAL, formatted_number);
1042
+ } else {
1043
+ Format(number_no_extension, NATIONAL, formatted_number);
1044
+ }
1045
+ }
1046
+ } else if (is_valid_number &&
1047
+ CanBeInternationallyDialled(number_no_extension)) {
1048
+ // We assume that short numbers are not diallable from outside their
1049
+ // region, so if a number is not a valid regular length phone number, we
1050
+ // treat it as if it cannot be internationally dialled.
1051
+ with_formatting
1052
+ ? Format(number_no_extension, INTERNATIONAL, formatted_number)
1053
+ : Format(number_no_extension, E164, formatted_number);
1054
+ return;
1055
+ }
1056
+ if (!with_formatting) {
1057
+ NormalizeDiallableCharsOnly(formatted_number);
1058
+ }
1059
+ }
1060
+
1061
+ void PhoneNumberUtil::FormatOutOfCountryCallingNumber(
1062
+ const PhoneNumber& number,
1063
+ const string& calling_from,
1064
+ string* formatted_number) const {
1065
+ DCHECK(formatted_number);
1066
+ if (!IsValidRegionCode(calling_from)) {
1067
+ LOG(WARNING) << "Trying to format number from invalid region "
1068
+ << calling_from
1069
+ << ". International formatting applied.";
1070
+ Format(number, INTERNATIONAL, formatted_number);
1071
+ return;
1072
+ }
1073
+ int country_code = number.country_code();
1074
+ string national_significant_number;
1075
+ GetNationalSignificantNumber(number, &national_significant_number);
1076
+ if (!HasValidCountryCallingCode(country_code)) {
1077
+ formatted_number->assign(national_significant_number);
1078
+ return;
1079
+ }
1080
+ if (country_code == kNanpaCountryCode) {
1081
+ if (IsNANPACountry(calling_from)) {
1082
+ // For NANPA regions, return the national format for these regions but
1083
+ // prefix it with the country calling code.
1084
+ Format(number, NATIONAL, formatted_number);
1085
+ formatted_number->insert(0, StrCat(country_code, " "));
1086
+ return;
1087
+ }
1088
+ } else if (country_code == GetCountryCodeForValidRegion(calling_from)) {
1089
+ // If neither region is a NANPA region, then we check to see if the
1090
+ // country calling code of the number and the country calling code of the
1091
+ // region we are calling from are the same.
1092
+ // For regions that share a country calling code, the country calling code
1093
+ // need not be dialled. This also applies when dialling within a region, so
1094
+ // this if clause covers both these cases.
1095
+ // Technically this is the case for dialling from la Réunion to other
1096
+ // overseas departments of France (French Guiana, Martinique, Guadeloupe),
1097
+ // but not vice versa - so we don't cover this edge case for now and for
1098
+ // those cases return the version including country calling code.
1099
+ // Details here:
1100
+ // http://www.petitfute.com/voyage/225-info-pratiques-reunion
1101
+ Format(number, NATIONAL, formatted_number);
1102
+ return;
1103
+ }
1104
+ // Metadata cannot be NULL because we checked 'IsValidRegionCode()' above.
1105
+ const PhoneMetadata* metadata_calling_from =
1106
+ GetMetadataForRegion(calling_from);
1107
+ const string& international_prefix =
1108
+ metadata_calling_from->international_prefix();
1109
+
1110
+ // For regions that have multiple international prefixes, the international
1111
+ // format of the number is returned, unless there is a preferred international
1112
+ // prefix.
1113
+ const string international_prefix_for_formatting(
1114
+ reg_exps_->unique_international_prefix_->FullMatch(international_prefix)
1115
+ ? international_prefix
1116
+ : metadata_calling_from->preferred_international_prefix());
1117
+
1118
+ string region_code;
1119
+ GetRegionCodeForCountryCode(country_code, &region_code);
1120
+ // Metadata cannot be NULL because the country_code is valid.
1121
+ const PhoneMetadata* metadata_for_region =
1122
+ GetMetadataForRegionOrCallingCode(country_code, region_code);
1123
+ FormatNsn(national_significant_number, *metadata_for_region, INTERNATIONAL,
1124
+ formatted_number);
1125
+ MaybeAppendFormattedExtension(number, *metadata_for_region, INTERNATIONAL,
1126
+ formatted_number);
1127
+ if (!international_prefix_for_formatting.empty()) {
1128
+ formatted_number->insert(
1129
+ 0, StrCat(international_prefix_for_formatting, " ", country_code, " "));
1130
+ } else {
1131
+ PrefixNumberWithCountryCallingCode(country_code, INTERNATIONAL,
1132
+ formatted_number);
1133
+ }
1134
+ }
1135
+
1136
+ void PhoneNumberUtil::FormatInOriginalFormat(const PhoneNumber& number,
1137
+ const string& region_calling_from,
1138
+ string* formatted_number) const {
1139
+ DCHECK(formatted_number);
1140
+
1141
+ if (number.has_raw_input() &&
1142
+ (HasUnexpectedItalianLeadingZero(number) ||
1143
+ !HasFormattingPatternForNumber(number))) {
1144
+ // We check if we have the formatting pattern because without that, we might
1145
+ // format the number as a group without national prefix.
1146
+ formatted_number->assign(number.raw_input());
1147
+ return;
1148
+ }
1149
+ if (!number.has_country_code_source()) {
1150
+ Format(number, NATIONAL, formatted_number);
1151
+ return;
1152
+ }
1153
+ switch (number.country_code_source()) {
1154
+ case PhoneNumber::FROM_NUMBER_WITH_PLUS_SIGN:
1155
+ Format(number, INTERNATIONAL, formatted_number);
1156
+ break;
1157
+ case PhoneNumber::FROM_NUMBER_WITH_IDD:
1158
+ FormatOutOfCountryCallingNumber(number, region_calling_from,
1159
+ formatted_number);
1160
+ break;
1161
+ case PhoneNumber::FROM_NUMBER_WITHOUT_PLUS_SIGN:
1162
+ Format(number, INTERNATIONAL, formatted_number);
1163
+ formatted_number->erase(formatted_number->begin());
1164
+ break;
1165
+ case PhoneNumber::FROM_DEFAULT_COUNTRY:
1166
+ // Fall-through to default case.
1167
+ default:
1168
+ string region_code;
1169
+ GetRegionCodeForCountryCode(number.country_code(), &region_code);
1170
+ // We strip non-digits from the NDD here, and from the raw input later, so
1171
+ // that we can compare them easily.
1172
+ string national_prefix;
1173
+ GetNddPrefixForRegion(region_code, true /* strip non-digits */,
1174
+ &national_prefix);
1175
+ if (national_prefix.empty()) {
1176
+ // If the region doesn't have a national prefix at all, we can safely
1177
+ // return the national format without worrying about a national prefix
1178
+ // being added.
1179
+ Format(number, NATIONAL, formatted_number);
1180
+ break;
1181
+ }
1182
+ // Otherwise, we check if the original number was entered with a national
1183
+ // prefix.
1184
+ if (RawInputContainsNationalPrefix(number.raw_input(), national_prefix,
1185
+ region_code)) {
1186
+ // If so, we can safely return the national format.
1187
+ Format(number, NATIONAL, formatted_number);
1188
+ break;
1189
+ }
1190
+ // Metadata cannot be NULL here because GetNddPrefixForRegion() (above)
1191
+ // leaves the prefix empty if there is no metadata for the region.
1192
+ const PhoneMetadata* metadata = GetMetadataForRegion(region_code);
1193
+ string national_number;
1194
+ GetNationalSignificantNumber(number, &national_number);
1195
+ // This shouldn't be NULL, because we have checked that above with
1196
+ // HasFormattingPatternForNumber.
1197
+ const NumberFormat* format_rule =
1198
+ ChooseFormattingPatternForNumber(metadata->number_format(),
1199
+ national_number);
1200
+ // The format rule could still be NULL here if the national number was 0
1201
+ // and there was no raw input (this should not be possible for numbers
1202
+ // generated by the phonenumber library as they would also not have a
1203
+ // country calling code and we would have exited earlier).
1204
+ if (!format_rule) {
1205
+ Format(number, NATIONAL, formatted_number);
1206
+ break;
1207
+ }
1208
+ // When the format we apply to this number doesn't contain national
1209
+ // prefix, we can just return the national format.
1210
+ // TODO: Refactor the code below with the code in
1211
+ // IsNationalPrefixPresentIfRequired.
1212
+ string candidate_national_prefix_rule(
1213
+ format_rule->national_prefix_formatting_rule());
1214
+ // We assume that the first-group symbol will never be _before_ the
1215
+ // national prefix.
1216
+ if (!candidate_national_prefix_rule.empty()) {
1217
+ candidate_national_prefix_rule.erase(
1218
+ candidate_national_prefix_rule.find("$1"));
1219
+ NormalizeDigitsOnly(&candidate_national_prefix_rule);
1220
+ }
1221
+ if (candidate_national_prefix_rule.empty()) {
1222
+ // National prefix not used when formatting this number.
1223
+ Format(number, NATIONAL, formatted_number);
1224
+ break;
1225
+ }
1226
+ // Otherwise, we need to remove the national prefix from our output.
1227
+ RepeatedPtrField<NumberFormat> number_formats;
1228
+ NumberFormat* number_format = number_formats.Add();
1229
+ number_format->MergeFrom(*format_rule);
1230
+ number_format->clear_national_prefix_formatting_rule();
1231
+ FormatByPattern(number, NATIONAL, number_formats, formatted_number);
1232
+ break;
1233
+ }
1234
+ // If no digit is inserted/removed/modified as a result of our formatting, we
1235
+ // return the formatted phone number; otherwise we return the raw input the
1236
+ // user entered.
1237
+ if (!formatted_number->empty() && !number.raw_input().empty()) {
1238
+ string normalized_formatted_number(*formatted_number);
1239
+ NormalizeDiallableCharsOnly(&normalized_formatted_number);
1240
+ string normalized_raw_input(number.raw_input());
1241
+ NormalizeDiallableCharsOnly(&normalized_raw_input);
1242
+ if (normalized_formatted_number != normalized_raw_input) {
1243
+ formatted_number->assign(number.raw_input());
1244
+ }
1245
+ }
1246
+ }
1247
+
1248
+ // Check if raw_input, which is assumed to be in the national format, has a
1249
+ // national prefix. The national prefix is assumed to be in digits-only form.
1250
+ bool PhoneNumberUtil::RawInputContainsNationalPrefix(
1251
+ const string& raw_input,
1252
+ const string& national_prefix,
1253
+ const string& region_code) const {
1254
+ string normalized_national_number(raw_input);
1255
+ NormalizeDigitsOnly(&normalized_national_number);
1256
+ if (HasPrefixString(normalized_national_number, national_prefix)) {
1257
+ // Some Japanese numbers (e.g. 00777123) might be mistaken to contain
1258
+ // the national prefix when written without it (e.g. 0777123) if we just
1259
+ // do prefix matching. To tackle that, we check the validity of the
1260
+ // number if the assumed national prefix is removed (777123 won't be
1261
+ // valid in Japan).
1262
+ PhoneNumber number_without_national_prefix;
1263
+ if (Parse(normalized_national_number.substr(national_prefix.length()),
1264
+ region_code, &number_without_national_prefix)
1265
+ == NO_PARSING_ERROR) {
1266
+ return IsValidNumber(number_without_national_prefix);
1267
+ }
1268
+ }
1269
+ return false;
1270
+ }
1271
+
1272
+ bool PhoneNumberUtil::HasUnexpectedItalianLeadingZero(
1273
+ const PhoneNumber& number) const {
1274
+ return number.has_italian_leading_zero() &&
1275
+ !IsLeadingZeroPossible(number.country_code());
1276
+ }
1277
+
1278
+ bool PhoneNumberUtil::HasFormattingPatternForNumber(
1279
+ const PhoneNumber& number) const {
1280
+ int country_calling_code = number.country_code();
1281
+ string region_code;
1282
+ GetRegionCodeForCountryCode(country_calling_code, &region_code);
1283
+ const PhoneMetadata* metadata =
1284
+ GetMetadataForRegionOrCallingCode(country_calling_code, region_code);
1285
+ if (!metadata) {
1286
+ return false;
1287
+ }
1288
+ string national_number;
1289
+ GetNationalSignificantNumber(number, &national_number);
1290
+ const NumberFormat* format_rule =
1291
+ ChooseFormattingPatternForNumber(metadata->number_format(),
1292
+ national_number);
1293
+ return format_rule;
1294
+ }
1295
+
1296
+ void PhoneNumberUtil::FormatOutOfCountryKeepingAlphaChars(
1297
+ const PhoneNumber& number,
1298
+ const string& calling_from,
1299
+ string* formatted_number) const {
1300
+ // If there is no raw input, then we can't keep alpha characters because there
1301
+ // aren't any. In this case, we return FormatOutOfCountryCallingNumber.
1302
+ if (number.raw_input().empty()) {
1303
+ FormatOutOfCountryCallingNumber(number, calling_from, formatted_number);
1304
+ return;
1305
+ }
1306
+ int country_code = number.country_code();
1307
+ if (!HasValidCountryCallingCode(country_code)) {
1308
+ formatted_number->assign(number.raw_input());
1309
+ return;
1310
+ }
1311
+ // Strip any prefix such as country calling code, IDD, that was present. We do
1312
+ // this by comparing the number in raw_input with the parsed number.
1313
+ string raw_input_copy(number.raw_input());
1314
+ // Normalize punctuation. We retain number grouping symbols such as " " only.
1315
+ NormalizeHelper(reg_exps_->all_plus_number_grouping_symbols_, true,
1316
+ &raw_input_copy);
1317
+ // Now we trim everything before the first three digits in the parsed number.
1318
+ // We choose three because all valid alpha numbers have 3 digits at the start
1319
+ // - if it does not, then we don't trim anything at all. Similarly, if the
1320
+ // national number was less than three digits, we don't trim anything at all.
1321
+ string national_number;
1322
+ GetNationalSignificantNumber(number, &national_number);
1323
+ if (national_number.length() > 3) {
1324
+ size_t first_national_number_digit =
1325
+ raw_input_copy.find(national_number.substr(0, 3));
1326
+ if (first_national_number_digit != string::npos) {
1327
+ raw_input_copy = raw_input_copy.substr(first_national_number_digit);
1328
+ }
1329
+ }
1330
+ const PhoneMetadata* metadata = GetMetadataForRegion(calling_from);
1331
+ if (country_code == kNanpaCountryCode) {
1332
+ if (IsNANPACountry(calling_from)) {
1333
+ StrAppend(formatted_number, country_code, " ", raw_input_copy);
1334
+ return;
1335
+ }
1336
+ } else if (metadata &&
1337
+ country_code == GetCountryCodeForValidRegion(calling_from)) {
1338
+ const NumberFormat* formatting_pattern =
1339
+ ChooseFormattingPatternForNumber(metadata->number_format(),
1340
+ national_number);
1341
+ if (!formatting_pattern) {
1342
+ // If no pattern above is matched, we format the original input.
1343
+ formatted_number->assign(raw_input_copy);
1344
+ return;
1345
+ }
1346
+ NumberFormat new_format;
1347
+ new_format.MergeFrom(*formatting_pattern);
1348
+ // The first group is the first group of digits that the user wrote
1349
+ // together.
1350
+ new_format.set_pattern("(\\d+)(.*)");
1351
+ // Here we just concatenate them back together after the national prefix
1352
+ // has been fixed.
1353
+ new_format.set_format("$1$2");
1354
+ // Now we format using this pattern instead of the default pattern, but
1355
+ // with the national prefix prefixed if necessary.
1356
+ // This will not work in the cases where the pattern (and not the
1357
+ // leading digits) decide whether a national prefix needs to be used, since
1358
+ // we have overridden the pattern to match anything, but that is not the
1359
+ // case in the metadata to date.
1360
+ FormatNsnUsingPattern(raw_input_copy, new_format, NATIONAL,
1361
+ formatted_number);
1362
+ return;
1363
+ }
1364
+
1365
+ string international_prefix_for_formatting;
1366
+ // If an unsupported region-calling-from is entered, or a country with
1367
+ // multiple international prefixes, the international format of the number is
1368
+ // returned, unless there is a preferred international prefix.
1369
+ if (metadata) {
1370
+ const string& international_prefix = metadata->international_prefix();
1371
+ international_prefix_for_formatting =
1372
+ reg_exps_->unique_international_prefix_->FullMatch(international_prefix)
1373
+ ? international_prefix
1374
+ : metadata->preferred_international_prefix();
1375
+ }
1376
+ if (!international_prefix_for_formatting.empty()) {
1377
+ StrAppend(formatted_number, international_prefix_for_formatting, " ",
1378
+ country_code, " ", raw_input_copy);
1379
+ } else {
1380
+ // Invalid region entered as country-calling-from (so no metadata was found
1381
+ // for it) or the region chosen has multiple international dialling
1382
+ // prefixes.
1383
+ LOG(WARNING) << "Trying to format number from invalid region "
1384
+ << calling_from
1385
+ << ". International formatting applied.";
1386
+ formatted_number->assign(raw_input_copy);
1387
+ PrefixNumberWithCountryCallingCode(country_code, INTERNATIONAL,
1388
+ formatted_number);
1389
+ }
1390
+ }
1391
+
1392
+ const NumberFormat* PhoneNumberUtil::ChooseFormattingPatternForNumber(
1393
+ const RepeatedPtrField<NumberFormat>& available_formats,
1394
+ const string& national_number) const {
1395
+ for (RepeatedPtrField<NumberFormat>::const_iterator
1396
+ it = available_formats.begin(); it != available_formats.end(); ++it) {
1397
+ int size = it->leading_digits_pattern_size();
1398
+ if (size > 0) {
1399
+ const scoped_ptr<RegExpInput> number_copy(
1400
+ reg_exps_->regexp_factory_->CreateInput(national_number));
1401
+ // We always use the last leading_digits_pattern, as it is the most
1402
+ // detailed.
1403
+ if (!reg_exps_->regexp_cache_->GetRegExp(
1404
+ it->leading_digits_pattern(size - 1)).Consume(
1405
+ number_copy.get())) {
1406
+ continue;
1407
+ }
1408
+ }
1409
+ const RegExp& pattern_to_match(
1410
+ reg_exps_->regexp_cache_->GetRegExp(it->pattern()));
1411
+ if (pattern_to_match.FullMatch(national_number)) {
1412
+ return &(*it);
1413
+ }
1414
+ }
1415
+ return NULL;
1416
+ }
1417
+
1418
+ // Note that carrier_code is optional - if an empty string, no carrier code
1419
+ // replacement will take place.
1420
+ void PhoneNumberUtil::FormatNsnUsingPatternWithCarrier(
1421
+ const string& national_number,
1422
+ const NumberFormat& formatting_pattern,
1423
+ PhoneNumberUtil::PhoneNumberFormat number_format,
1424
+ const string& carrier_code,
1425
+ string* formatted_number) const {
1426
+ DCHECK(formatted_number);
1427
+ string number_format_rule(formatting_pattern.format());
1428
+ if (number_format == PhoneNumberUtil::NATIONAL &&
1429
+ carrier_code.length() > 0 &&
1430
+ formatting_pattern.domestic_carrier_code_formatting_rule().length() > 0) {
1431
+ // Replace the $CC in the formatting rule with the desired carrier code.
1432
+ string carrier_code_formatting_rule =
1433
+ formatting_pattern.domestic_carrier_code_formatting_rule();
1434
+ reg_exps_->carrier_code_pattern_->Replace(&carrier_code_formatting_rule,
1435
+ carrier_code);
1436
+ reg_exps_->first_group_capturing_pattern_->
1437
+ Replace(&number_format_rule, carrier_code_formatting_rule);
1438
+ } else {
1439
+ // Use the national prefix formatting rule instead.
1440
+ string national_prefix_formatting_rule =
1441
+ formatting_pattern.national_prefix_formatting_rule();
1442
+ if (number_format == PhoneNumberUtil::NATIONAL &&
1443
+ national_prefix_formatting_rule.length() > 0) {
1444
+ // Apply the national_prefix_formatting_rule as the formatting_pattern
1445
+ // contains only information on how the national significant number
1446
+ // should be formatted at this point.
1447
+ reg_exps_->first_group_capturing_pattern_->Replace(
1448
+ &number_format_rule, national_prefix_formatting_rule);
1449
+ }
1450
+ }
1451
+ formatted_number->assign(national_number);
1452
+
1453
+ const RegExp& pattern_to_match(
1454
+ reg_exps_->regexp_cache_->GetRegExp(formatting_pattern.pattern()));
1455
+ pattern_to_match.GlobalReplace(formatted_number, number_format_rule);
1456
+
1457
+ if (number_format == RFC3966) {
1458
+ // First consume any leading punctuation, if any was present.
1459
+ const scoped_ptr<RegExpInput> number(
1460
+ reg_exps_->regexp_factory_->CreateInput(*formatted_number));
1461
+ if (reg_exps_->separator_pattern_->Consume(number.get())) {
1462
+ formatted_number->assign(number->ToString());
1463
+ }
1464
+ // Then replace all separators with a "-".
1465
+ reg_exps_->separator_pattern_->GlobalReplace(formatted_number, "-");
1466
+ }
1467
+ }
1468
+
1469
+ // Simple wrapper of FormatNsnUsingPatternWithCarrier for the common case of
1470
+ // no carrier code.
1471
+ void PhoneNumberUtil::FormatNsnUsingPattern(
1472
+ const string& national_number,
1473
+ const NumberFormat& formatting_pattern,
1474
+ PhoneNumberUtil::PhoneNumberFormat number_format,
1475
+ string* formatted_number) const {
1476
+ DCHECK(formatted_number);
1477
+ FormatNsnUsingPatternWithCarrier(national_number, formatting_pattern,
1478
+ number_format, "", formatted_number);
1479
+ }
1480
+
1481
+ void PhoneNumberUtil::FormatNsn(const string& number,
1482
+ const PhoneMetadata& metadata,
1483
+ PhoneNumberFormat number_format,
1484
+ string* formatted_number) const {
1485
+ DCHECK(formatted_number);
1486
+ FormatNsnWithCarrier(number, metadata, number_format, "", formatted_number);
1487
+ }
1488
+
1489
+ // Note in some regions, the national number can be written in two completely
1490
+ // different ways depending on whether it forms part of the NATIONAL format or
1491
+ // INTERNATIONAL format. The number_format parameter here is used to specify
1492
+ // which format to use for those cases. If a carrier_code is specified, this
1493
+ // will be inserted into the formatted string to replace $CC.
1494
+ void PhoneNumberUtil::FormatNsnWithCarrier(const string& number,
1495
+ const PhoneMetadata& metadata,
1496
+ PhoneNumberFormat number_format,
1497
+ const string& carrier_code,
1498
+ string* formatted_number) const {
1499
+ DCHECK(formatted_number);
1500
+ // When the intl_number_formats exists, we use that to format national number
1501
+ // for the INTERNATIONAL format instead of using the number_formats.
1502
+ const RepeatedPtrField<NumberFormat> available_formats =
1503
+ (metadata.intl_number_format_size() == 0 || number_format == NATIONAL)
1504
+ ? metadata.number_format()
1505
+ : metadata.intl_number_format();
1506
+ const NumberFormat* formatting_pattern =
1507
+ ChooseFormattingPatternForNumber(available_formats, number);
1508
+ if (!formatting_pattern) {
1509
+ formatted_number->assign(number);
1510
+ } else {
1511
+ FormatNsnUsingPatternWithCarrier(number, *formatting_pattern, number_format,
1512
+ carrier_code, formatted_number);
1513
+ }
1514
+ }
1515
+
1516
+ // Appends the formatted extension of a phone number, if the phone number had an
1517
+ // extension specified.
1518
+ void PhoneNumberUtil::MaybeAppendFormattedExtension(
1519
+ const PhoneNumber& number,
1520
+ const PhoneMetadata& metadata,
1521
+ PhoneNumberFormat number_format,
1522
+ string* formatted_number) const {
1523
+ DCHECK(formatted_number);
1524
+ if (number.has_extension() && number.extension().length() > 0) {
1525
+ if (number_format == RFC3966) {
1526
+ StrAppend(formatted_number, kRfc3966ExtnPrefix, number.extension());
1527
+ } else {
1528
+ if (metadata.has_preferred_extn_prefix()) {
1529
+ StrAppend(formatted_number, metadata.preferred_extn_prefix(),
1530
+ number.extension());
1531
+ } else {
1532
+ StrAppend(formatted_number, kDefaultExtnPrefix, number.extension());
1533
+ }
1534
+ }
1535
+ }
1536
+ }
1537
+
1538
+ bool PhoneNumberUtil::IsNANPACountry(const string& region_code) const {
1539
+ return nanpa_regions_->find(region_code) != nanpa_regions_->end();
1540
+ }
1541
+
1542
+ // Returns the region codes that matches the specific country calling code. In
1543
+ // the case of no region code being found, region_codes will be left empty.
1544
+ void PhoneNumberUtil::GetRegionCodesForCountryCallingCode(
1545
+ int country_calling_code,
1546
+ list<string>* region_codes) const {
1547
+ DCHECK(region_codes);
1548
+ // Create a IntRegionsPair with the country_code passed in, and use it to
1549
+ // locate the pair with the same country_code in the sorted vector.
1550
+ IntRegionsPair target_pair;
1551
+ target_pair.first = country_calling_code;
1552
+ typedef vector<IntRegionsPair>::const_iterator ConstIterator;
1553
+ pair<ConstIterator, ConstIterator> range = equal_range(
1554
+ country_calling_code_to_region_code_map_->begin(),
1555
+ country_calling_code_to_region_code_map_->end(),
1556
+ target_pair, OrderByFirst());
1557
+ if (range.first != range.second) {
1558
+ region_codes->insert(region_codes->begin(),
1559
+ range.first->second->begin(),
1560
+ range.first->second->end());
1561
+ }
1562
+ }
1563
+
1564
+ // Returns the region code that matches the specific country calling code. In
1565
+ // the case of no region code being found, the unknown region code will be
1566
+ // returned.
1567
+ void PhoneNumberUtil::GetRegionCodeForCountryCode(
1568
+ int country_calling_code,
1569
+ string* region_code) const {
1570
+ DCHECK(region_code);
1571
+ list<string> region_codes;
1572
+
1573
+ GetRegionCodesForCountryCallingCode(country_calling_code, &region_codes);
1574
+ *region_code = (region_codes.size() > 0) ?
1575
+ region_codes.front() : RegionCode::GetUnknown();
1576
+ }
1577
+
1578
+ void PhoneNumberUtil::GetRegionCodeForNumber(const PhoneNumber& number,
1579
+ string* region_code) const {
1580
+ DCHECK(region_code);
1581
+ int country_calling_code = number.country_code();
1582
+ list<string> region_codes;
1583
+ GetRegionCodesForCountryCallingCode(country_calling_code, &region_codes);
1584
+ if (region_codes.size() == 0) {
1585
+ string number_string;
1586
+ GetNationalSignificantNumber(number, &number_string);
1587
+ LOG(WARNING) << "Missing/invalid country calling code ("
1588
+ << country_calling_code
1589
+ << ") for number " << number_string;
1590
+ *region_code = RegionCode::GetUnknown();
1591
+ return;
1592
+ }
1593
+ if (region_codes.size() == 1) {
1594
+ *region_code = region_codes.front();
1595
+ } else {
1596
+ GetRegionCodeForNumberFromRegionList(number, region_codes, region_code);
1597
+ }
1598
+ }
1599
+
1600
+ void PhoneNumberUtil::GetRegionCodeForNumberFromRegionList(
1601
+ const PhoneNumber& number, const list<string>& region_codes,
1602
+ string* region_code) const {
1603
+ DCHECK(region_code);
1604
+ string national_number;
1605
+ GetNationalSignificantNumber(number, &national_number);
1606
+ for (list<string>::const_iterator it = region_codes.begin();
1607
+ it != region_codes.end(); ++it) {
1608
+ // Metadata cannot be NULL because the region codes come from the country
1609
+ // calling code map.
1610
+ const PhoneMetadata* metadata = GetMetadataForRegion(*it);
1611
+ if (metadata->has_leading_digits()) {
1612
+ const scoped_ptr<RegExpInput> number(
1613
+ reg_exps_->regexp_factory_->CreateInput(national_number));
1614
+ if (reg_exps_->regexp_cache_->
1615
+ GetRegExp(metadata->leading_digits()).Consume(number.get())) {
1616
+ *region_code = *it;
1617
+ return;
1618
+ }
1619
+ } else if (GetNumberTypeHelper(national_number, *metadata) != UNKNOWN) {
1620
+ *region_code = *it;
1621
+ return;
1622
+ }
1623
+ }
1624
+ *region_code = RegionCode::GetUnknown();
1625
+ }
1626
+
1627
+ int PhoneNumberUtil::GetCountryCodeForRegion(const string& region_code) const {
1628
+ if (!IsValidRegionCode(region_code)) {
1629
+ LOG(WARNING) << "Invalid or unknown region code (" << region_code
1630
+ << ") provided.";
1631
+ return 0;
1632
+ }
1633
+ return GetCountryCodeForValidRegion(region_code);
1634
+ }
1635
+
1636
+ int PhoneNumberUtil::GetCountryCodeForValidRegion(
1637
+ const string& region_code) const {
1638
+ const PhoneMetadata* metadata = GetMetadataForRegion(region_code);
1639
+ return metadata->country_code();
1640
+ }
1641
+
1642
+ // Gets a valid fixed-line number for the specified region_code. Returns false
1643
+ // if the region was unknown or 001 (representing non-geographical regions), or
1644
+ // if no number exists.
1645
+ bool PhoneNumberUtil::GetExampleNumber(const string& region_code,
1646
+ PhoneNumber* number) const {
1647
+ DCHECK(number);
1648
+ return GetExampleNumberForType(region_code, FIXED_LINE, number);
1649
+ }
1650
+
1651
+ // Gets a valid number for the specified region_code and type. Returns false if
1652
+ // the country was unknown or 001 (representing non-geographical regions), or if
1653
+ // no number exists.
1654
+ bool PhoneNumberUtil::GetExampleNumberForType(
1655
+ const string& region_code,
1656
+ PhoneNumberUtil::PhoneNumberType type,
1657
+ PhoneNumber* number) const {
1658
+ DCHECK(number);
1659
+ if (!IsValidRegionCode(region_code)) {
1660
+ LOG(WARNING) << "Invalid or unknown region code (" << region_code
1661
+ << ") provided.";
1662
+ return false;
1663
+ }
1664
+ const PhoneMetadata* region_metadata = GetMetadataForRegion(region_code);
1665
+ const PhoneNumberDesc* desc = GetNumberDescByType(*region_metadata, type);
1666
+ if (desc && desc->has_example_number()) {
1667
+ ErrorType success = Parse(desc->example_number(), region_code, number);
1668
+ if (success == NO_PARSING_ERROR) {
1669
+ return true;
1670
+ } else {
1671
+ LOG(ERROR) << "Error parsing example number ("
1672
+ << static_cast<int>(success) << ")";
1673
+ }
1674
+ }
1675
+ return false;
1676
+ }
1677
+
1678
+ bool PhoneNumberUtil::GetExampleNumberForNonGeoEntity(
1679
+ int country_calling_code, PhoneNumber* number) const {
1680
+ DCHECK(number);
1681
+ const PhoneMetadata* metadata =
1682
+ GetMetadataForNonGeographicalRegion(country_calling_code);
1683
+ if (metadata) {
1684
+ const PhoneNumberDesc& desc = metadata->general_desc();
1685
+ if (desc.has_example_number()) {
1686
+ ErrorType success = Parse(StrCat(kPlusSign,
1687
+ SimpleItoa(country_calling_code),
1688
+ desc.example_number()),
1689
+ RegionCode::ZZ(), number);
1690
+ if (success == NO_PARSING_ERROR) {
1691
+ return true;
1692
+ } else {
1693
+ LOG(ERROR) << "Error parsing example number ("
1694
+ << static_cast<int>(success) << ")";
1695
+ }
1696
+ }
1697
+ } else {
1698
+ LOG(WARNING) << "Invalid or unknown country calling code provided: "
1699
+ << country_calling_code;
1700
+ }
1701
+ return false;
1702
+ }
1703
+
1704
+ PhoneNumberUtil::ErrorType PhoneNumberUtil::Parse(const string& number_to_parse,
1705
+ const string& default_region,
1706
+ PhoneNumber* number) const {
1707
+ DCHECK(number);
1708
+ return ParseHelper(number_to_parse, default_region, false, true, number);
1709
+ }
1710
+
1711
+ PhoneNumberUtil::ErrorType PhoneNumberUtil::ParseAndKeepRawInput(
1712
+ const string& number_to_parse,
1713
+ const string& default_region,
1714
+ PhoneNumber* number) const {
1715
+ DCHECK(number);
1716
+ return ParseHelper(number_to_parse, default_region, true, true, number);
1717
+ }
1718
+
1719
+ // Checks to see that the region code used is valid, or if it is not valid, that
1720
+ // the number to parse starts with a + symbol so that we can attempt to infer
1721
+ // the country from the number. Returns false if it cannot use the region
1722
+ // provided and the region cannot be inferred.
1723
+ bool PhoneNumberUtil::CheckRegionForParsing(
1724
+ const string& number_to_parse,
1725
+ const string& default_region) const {
1726
+ if (!IsValidRegionCode(default_region) && !number_to_parse.empty()) {
1727
+ const scoped_ptr<RegExpInput> number(
1728
+ reg_exps_->regexp_factory_->CreateInput(number_to_parse));
1729
+ if (!reg_exps_->plus_chars_pattern_->Consume(number.get())) {
1730
+ return false;
1731
+ }
1732
+ }
1733
+ return true;
1734
+ }
1735
+
1736
+ // Converts number_to_parse to a form that we can parse and write it to
1737
+ // national_number if it is written in RFC3966; otherwise extract a possible
1738
+ // number out of it and write to national_number.
1739
+ void PhoneNumberUtil::BuildNationalNumberForParsing(
1740
+ const string& number_to_parse, string* national_number) const {
1741
+ size_t index_of_phone_context = number_to_parse.find(kRfc3966PhoneContext);
1742
+ if (index_of_phone_context != string::npos) {
1743
+ int phone_context_start =
1744
+ index_of_phone_context + strlen(kRfc3966PhoneContext);
1745
+ // If the phone context contains a phone number prefix, we need to capture
1746
+ // it, whereas domains will be ignored.
1747
+ if (number_to_parse.at(phone_context_start) == kPlusSign[0]) {
1748
+ // Additional parameters might follow the phone context. If so, we will
1749
+ // remove them here because the parameters after phone context are not
1750
+ // important for parsing the phone number.
1751
+ size_t phone_context_end = number_to_parse.find(';', phone_context_start);
1752
+ if (phone_context_end != string::npos) {
1753
+ StrAppend(
1754
+ national_number, number_to_parse.substr(
1755
+ phone_context_start, phone_context_end - phone_context_start));
1756
+ } else {
1757
+ StrAppend(national_number, number_to_parse.substr(phone_context_start));
1758
+ }
1759
+ }
1760
+
1761
+ // Now append everything between the "tel:" prefix and the phone-context.
1762
+ // This should include the national number, an optional extension or
1763
+ // isdn-subaddress component. Note we also handle the case when "tel:" is
1764
+ // missing, as we have seen in some of the phone number inputs. In that
1765
+ // case, we append everything from the beginning.
1766
+ size_t index_of_rfc_prefix = number_to_parse.find(kRfc3966Prefix);
1767
+ int index_of_national_number = (index_of_rfc_prefix != string::npos) ?
1768
+ index_of_rfc_prefix + strlen(kRfc3966Prefix) : 0;
1769
+ StrAppend(
1770
+ national_number,
1771
+ number_to_parse.substr(
1772
+ index_of_national_number,
1773
+ index_of_phone_context - index_of_national_number));
1774
+ } else {
1775
+ // Extract a possible number from the string passed in (this strips leading
1776
+ // characters that could not be the start of a phone number.)
1777
+ ExtractPossibleNumber(number_to_parse, national_number);
1778
+ }
1779
+
1780
+ // Delete the isdn-subaddress and everything after it if it is present. Note
1781
+ // extension won't appear at the same time with isdn-subaddress according to
1782
+ // paragraph 5.3 of the RFC3966 spec.
1783
+ size_t index_of_isdn = national_number->find(kRfc3966IsdnSubaddress);
1784
+ if (index_of_isdn != string::npos) {
1785
+ national_number->erase(index_of_isdn);
1786
+ }
1787
+ // If both phone context and isdn-subaddress are absent but other parameters
1788
+ // are present, the parameters are left in nationalNumber. This is because
1789
+ // we are concerned about deleting content from a potential number string
1790
+ // when there is no strong evidence that the number is actually written in
1791
+ // RFC3966.
1792
+ }
1793
+
1794
+ PhoneNumberUtil::ErrorType PhoneNumberUtil::ParseHelper(
1795
+ const string& number_to_parse,
1796
+ const string& default_region,
1797
+ bool keep_raw_input,
1798
+ bool check_region,
1799
+ PhoneNumber* phone_number) const {
1800
+ DCHECK(phone_number);
1801
+
1802
+ string national_number;
1803
+ BuildNationalNumberForParsing(number_to_parse, &national_number);
1804
+
1805
+ if (!IsViablePhoneNumber(national_number)) {
1806
+ VLOG(2) << "The string supplied did not seem to be a phone number.";
1807
+ return NOT_A_NUMBER;
1808
+ }
1809
+
1810
+ if (check_region &&
1811
+ !CheckRegionForParsing(national_number, default_region)) {
1812
+ VLOG(1) << "Missing or invalid default country.";
1813
+ return INVALID_COUNTRY_CODE_ERROR;
1814
+ }
1815
+ PhoneNumber temp_number;
1816
+ if (keep_raw_input) {
1817
+ temp_number.set_raw_input(number_to_parse);
1818
+ }
1819
+ // Attempt to parse extension first, since it doesn't require country-specific
1820
+ // data and we want to have the non-normalised number here.
1821
+ string extension;
1822
+ MaybeStripExtension(&national_number, &extension);
1823
+ if (!extension.empty()) {
1824
+ temp_number.set_extension(extension);
1825
+ }
1826
+ const PhoneMetadata* country_metadata = GetMetadataForRegion(default_region);
1827
+ // Check to see if the number is given in international format so we know
1828
+ // whether this number is from the default country or not.
1829
+ string normalized_national_number(national_number);
1830
+ ErrorType country_code_error =
1831
+ MaybeExtractCountryCode(country_metadata, keep_raw_input,
1832
+ &normalized_national_number, &temp_number);
1833
+ if (country_code_error != NO_PARSING_ERROR) {
1834
+ const scoped_ptr<RegExpInput> number_string_piece(
1835
+ reg_exps_->regexp_factory_->CreateInput(national_number));
1836
+ if ((country_code_error == INVALID_COUNTRY_CODE_ERROR) &&
1837
+ (reg_exps_->plus_chars_pattern_->Consume(number_string_piece.get()))) {
1838
+ normalized_national_number.assign(number_string_piece->ToString());
1839
+ // Strip the plus-char, and try again.
1840
+ MaybeExtractCountryCode(country_metadata,
1841
+ keep_raw_input,
1842
+ &normalized_national_number,
1843
+ &temp_number);
1844
+ if (temp_number.country_code() == 0) {
1845
+ return INVALID_COUNTRY_CODE_ERROR;
1846
+ }
1847
+ } else {
1848
+ return country_code_error;
1849
+ }
1850
+ }
1851
+ int country_code = temp_number.country_code();
1852
+ if (country_code != 0) {
1853
+ string phone_number_region;
1854
+ GetRegionCodeForCountryCode(country_code, &phone_number_region);
1855
+ if (phone_number_region != default_region) {
1856
+ country_metadata =
1857
+ GetMetadataForRegionOrCallingCode(country_code, phone_number_region);
1858
+ }
1859
+ } else if (country_metadata) {
1860
+ // If no extracted country calling code, use the region supplied instead.
1861
+ // Note that the national number was already normalized by
1862
+ // MaybeExtractCountryCode.
1863
+ country_code = country_metadata->country_code();
1864
+ }
1865
+ if (normalized_national_number.length() < kMinLengthForNsn) {
1866
+ VLOG(2) << "The string supplied is too short to be a phone number.";
1867
+ return TOO_SHORT_NSN;
1868
+ }
1869
+ if (country_metadata) {
1870
+ string carrier_code;
1871
+ string potential_national_number(normalized_national_number);
1872
+ MaybeStripNationalPrefixAndCarrierCode(*country_metadata,
1873
+ &potential_national_number,
1874
+ &carrier_code);
1875
+ // We require that the NSN remaining after stripping the national prefix
1876
+ // and carrier code be of a possible length for the region. Otherwise, we
1877
+ // don't do the stripping, since the original number could be a valid short
1878
+ // number.
1879
+ if (!IsShorterThanPossibleNormalNumber(country_metadata,
1880
+ potential_national_number)) {
1881
+ normalized_national_number.assign(potential_national_number);
1882
+ if (keep_raw_input) {
1883
+ temp_number.set_preferred_domestic_carrier_code(carrier_code);
1884
+ }
1885
+ }
1886
+ }
1887
+ size_t normalized_national_number_length =
1888
+ normalized_national_number.length();
1889
+ if (normalized_national_number_length < kMinLengthForNsn) {
1890
+ VLOG(2) << "The string supplied is too short to be a phone number.";
1891
+ return TOO_SHORT_NSN;
1892
+ }
1893
+ if (normalized_national_number_length > kMaxLengthForNsn) {
1894
+ VLOG(2) << "The string supplied is too long to be a phone number.";
1895
+ return TOO_LONG_NSN;
1896
+ }
1897
+ temp_number.set_country_code(country_code);
1898
+ SetItalianLeadingZerosForPhoneNumber(normalized_national_number,
1899
+ &temp_number);
1900
+ uint64 number_as_int;
1901
+ safe_strtou64(normalized_national_number, &number_as_int);
1902
+ temp_number.set_national_number(number_as_int);
1903
+ phone_number->Swap(&temp_number);
1904
+ return NO_PARSING_ERROR;
1905
+ }
1906
+
1907
+ // Attempts to extract a possible number from the string passed in. This
1908
+ // currently strips all leading characters that could not be used to start a
1909
+ // phone number. Characters that can be used to start a phone number are
1910
+ // defined in the valid_start_char_pattern. If none of these characters are
1911
+ // found in the number passed in, an empty string is returned. This function
1912
+ // also attempts to strip off any alternative extensions or endings if two or
1913
+ // more are present, such as in the case of: (530) 583-6985 x302/x2303. The
1914
+ // second extension here makes this actually two phone numbers, (530) 583-6985
1915
+ // x302 and (530) 583-6985 x2303. We remove the second extension so that the
1916
+ // first number is parsed correctly.
1917
+ void PhoneNumberUtil::ExtractPossibleNumber(const string& number,
1918
+ string* extracted_number) const {
1919
+ DCHECK(extracted_number);
1920
+
1921
+ UnicodeText number_as_unicode;
1922
+ number_as_unicode.PointToUTF8(number.data(), number.size());
1923
+ char current_char[5];
1924
+ int len;
1925
+ UnicodeText::const_iterator it;
1926
+ for (it = number_as_unicode.begin(); it != number_as_unicode.end(); ++it) {
1927
+ len = it.get_utf8(current_char);
1928
+ current_char[len] = '\0';
1929
+ if (reg_exps_->valid_start_char_pattern_->FullMatch(current_char)) {
1930
+ break;
1931
+ }
1932
+ }
1933
+
1934
+ if (it == number_as_unicode.end()) {
1935
+ // No valid start character was found. extracted_number should be set to
1936
+ // empty string.
1937
+ extracted_number->assign("");
1938
+ return;
1939
+ }
1940
+
1941
+ extracted_number->assign(
1942
+ UnicodeText::UTF8Substring(it, number_as_unicode.end()));
1943
+ TrimUnwantedEndChars(extracted_number);
1944
+ if (extracted_number->length() == 0) {
1945
+ return;
1946
+ }
1947
+
1948
+ VLOG(3) << "After stripping starting and trailing characters, left with: "
1949
+ << *extracted_number;
1950
+
1951
+ // Now remove any extra numbers at the end.
1952
+ reg_exps_->capture_up_to_second_number_start_pattern_->
1953
+ PartialMatch(*extracted_number, extracted_number);
1954
+ }
1955
+
1956
+ bool PhoneNumberUtil::IsPossibleNumber(const PhoneNumber& number) const {
1957
+ return IsPossibleNumberWithReason(number) == IS_POSSIBLE;
1958
+ }
1959
+
1960
+ bool PhoneNumberUtil::IsPossibleNumberForString(
1961
+ const string& number,
1962
+ const string& region_dialing_from) const {
1963
+ PhoneNumber number_proto;
1964
+ if (Parse(number, region_dialing_from, &number_proto) == NO_PARSING_ERROR) {
1965
+ return IsPossibleNumber(number_proto);
1966
+ } else {
1967
+ return false;
1968
+ }
1969
+ }
1970
+
1971
+ PhoneNumberUtil::ValidationResult PhoneNumberUtil::IsPossibleNumberWithReason(
1972
+ const PhoneNumber& number) const {
1973
+ string national_number;
1974
+ GetNationalSignificantNumber(number, &national_number);
1975
+ int country_code = number.country_code();
1976
+ // Note: For Russian Fed and NANPA numbers, we just use the rules from the
1977
+ // default region (US or Russia) since the GetRegionCodeForNumber will not
1978
+ // work if the number is possible but not valid. This would need to be
1979
+ // revisited if the possible number pattern ever differed between various
1980
+ // regions within those plans.
1981
+ if (!HasValidCountryCallingCode(country_code)) {
1982
+ return INVALID_COUNTRY_CODE;
1983
+ }
1984
+ string region_code;
1985
+ GetRegionCodeForCountryCode(country_code, &region_code);
1986
+ // Metadata cannot be NULL because the country calling code is valid.
1987
+ const PhoneMetadata* metadata =
1988
+ GetMetadataForRegionOrCallingCode(country_code, region_code);
1989
+ const RegExp& possible_number_pattern = reg_exps_->regexp_cache_->GetRegExp(
1990
+ StrCat("(", metadata->general_desc().possible_number_pattern(), ")"));
1991
+ return TestNumberLengthAgainstPattern(possible_number_pattern,
1992
+ national_number);
1993
+ }
1994
+
1995
+ bool PhoneNumberUtil::TruncateTooLongNumber(PhoneNumber* number) const {
1996
+ if (IsValidNumber(*number)) {
1997
+ return true;
1998
+ }
1999
+ PhoneNumber number_copy(*number);
2000
+ uint64 national_number = number->national_number();
2001
+ do {
2002
+ national_number /= 10;
2003
+ number_copy.set_national_number(national_number);
2004
+ if (IsPossibleNumberWithReason(number_copy) == TOO_SHORT ||
2005
+ national_number == 0) {
2006
+ return false;
2007
+ }
2008
+ } while (!IsValidNumber(number_copy));
2009
+ number->set_national_number(national_number);
2010
+ return true;
2011
+ }
2012
+
2013
+ PhoneNumberUtil::PhoneNumberType PhoneNumberUtil::GetNumberType(
2014
+ const PhoneNumber& number) const {
2015
+ string region_code;
2016
+ GetRegionCodeForNumber(number, &region_code);
2017
+ const PhoneMetadata* metadata =
2018
+ GetMetadataForRegionOrCallingCode(number.country_code(), region_code);
2019
+ if (!metadata) {
2020
+ return UNKNOWN;
2021
+ }
2022
+ string national_significant_number;
2023
+ GetNationalSignificantNumber(number, &national_significant_number);
2024
+ return GetNumberTypeHelper(national_significant_number, *metadata);
2025
+ }
2026
+
2027
+ bool PhoneNumberUtil::IsValidNumber(const PhoneNumber& number) const {
2028
+ string region_code;
2029
+ GetRegionCodeForNumber(number, &region_code);
2030
+ return IsValidNumberForRegion(number, region_code);
2031
+ }
2032
+
2033
+ bool PhoneNumberUtil::IsValidNumberForRegion(const PhoneNumber& number,
2034
+ const string& region_code) const {
2035
+ int country_code = number.country_code();
2036
+ const PhoneMetadata* metadata =
2037
+ GetMetadataForRegionOrCallingCode(country_code, region_code);
2038
+ if (!metadata ||
2039
+ ((kRegionCodeForNonGeoEntity != region_code) &&
2040
+ country_code != GetCountryCodeForValidRegion(region_code))) {
2041
+ // Either the region code was invalid, or the country calling code for this
2042
+ // number does not match that of the region code.
2043
+ return false;
2044
+ }
2045
+ string national_number;
2046
+ GetNationalSignificantNumber(number, &national_number);
2047
+
2048
+ return GetNumberTypeHelper(national_number, *metadata) != UNKNOWN;
2049
+ }
2050
+
2051
+ bool PhoneNumberUtil::IsNumberGeographical(
2052
+ const PhoneNumber& phone_number) const {
2053
+ PhoneNumberType number_type = GetNumberType(phone_number);
2054
+ // TODO: Include mobile phone numbers from countries like
2055
+ // Indonesia, which has some mobile numbers that are geographical.
2056
+ return number_type == PhoneNumberUtil::FIXED_LINE ||
2057
+ number_type == PhoneNumberUtil::FIXED_LINE_OR_MOBILE;
2058
+ }
2059
+
2060
+ bool PhoneNumberUtil::IsLeadingZeroPossible(int country_calling_code) const {
2061
+ string region_code;
2062
+ GetRegionCodeForCountryCode(country_calling_code, &region_code);
2063
+ const PhoneMetadata* main_metadata_for_calling_code =
2064
+ GetMetadataForRegionOrCallingCode(country_calling_code, region_code);
2065
+ if (!main_metadata_for_calling_code) return false;
2066
+ return main_metadata_for_calling_code->leading_zero_possible();
2067
+ }
2068
+
2069
+ // A helper function to set the values related to leading zeros in a
2070
+ // PhoneNumber.
2071
+ void PhoneNumberUtil::SetItalianLeadingZerosForPhoneNumber(
2072
+ const string& national_number, PhoneNumber* phone_number) const {
2073
+ if (national_number.length() > 1 && national_number[0] == '0') {
2074
+ phone_number->set_italian_leading_zero(true);
2075
+ size_t number_of_leading_zeros = 1;
2076
+ // Note that if the national number is all "0"s, the last "0" is not
2077
+ // counted as a leading zero.
2078
+ while (number_of_leading_zeros < national_number.length() - 1 &&
2079
+ national_number[number_of_leading_zeros] == '0') {
2080
+ number_of_leading_zeros++;
2081
+ }
2082
+ if (number_of_leading_zeros != 1) {
2083
+ phone_number->set_number_of_leading_zeros(number_of_leading_zeros);
2084
+ }
2085
+ }
2086
+ }
2087
+
2088
+ bool PhoneNumberUtil::IsNumberPossibleForDesc(
2089
+ const string& national_number, const PhoneNumberDesc& number_desc) const {
2090
+ return reg_exps_->regexp_cache_.get()->
2091
+ GetRegExp(number_desc.possible_number_pattern())
2092
+ .FullMatch(national_number);
2093
+ }
2094
+
2095
+ bool PhoneNumberUtil::IsNumberMatchingDesc(
2096
+ const string& national_number, const PhoneNumberDesc& number_desc) const {
2097
+ return IsNumberPossibleForDesc(national_number, number_desc) &&
2098
+ reg_exps_->regexp_cache_.get()->
2099
+ GetRegExp(number_desc.national_number_pattern())
2100
+ .FullMatch(national_number);
2101
+ }
2102
+
2103
+ PhoneNumberUtil::PhoneNumberType PhoneNumberUtil::GetNumberTypeHelper(
2104
+ const string& national_number, const PhoneMetadata& metadata) const {
2105
+ if (!IsNumberMatchingDesc(national_number, metadata.general_desc())) {
2106
+ VLOG(4) << "Number type unknown - doesn't match general national number"
2107
+ << " pattern.";
2108
+ return PhoneNumberUtil::UNKNOWN;
2109
+ }
2110
+ if (IsNumberMatchingDesc(national_number, metadata.premium_rate())) {
2111
+ VLOG(4) << "Number is a premium number.";
2112
+ return PhoneNumberUtil::PREMIUM_RATE;
2113
+ }
2114
+ if (IsNumberMatchingDesc(national_number, metadata.toll_free())) {
2115
+ VLOG(4) << "Number is a toll-free number.";
2116
+ return PhoneNumberUtil::TOLL_FREE;
2117
+ }
2118
+ if (IsNumberMatchingDesc(national_number, metadata.shared_cost())) {
2119
+ VLOG(4) << "Number is a shared cost number.";
2120
+ return PhoneNumberUtil::SHARED_COST;
2121
+ }
2122
+ if (IsNumberMatchingDesc(national_number, metadata.voip())) {
2123
+ VLOG(4) << "Number is a VOIP (Voice over IP) number.";
2124
+ return PhoneNumberUtil::VOIP;
2125
+ }
2126
+ if (IsNumberMatchingDesc(national_number, metadata.personal_number())) {
2127
+ VLOG(4) << "Number is a personal number.";
2128
+ return PhoneNumberUtil::PERSONAL_NUMBER;
2129
+ }
2130
+ if (IsNumberMatchingDesc(national_number, metadata.pager())) {
2131
+ VLOG(4) << "Number is a pager number.";
2132
+ return PhoneNumberUtil::PAGER;
2133
+ }
2134
+ if (IsNumberMatchingDesc(national_number, metadata.uan())) {
2135
+ VLOG(4) << "Number is a UAN.";
2136
+ return PhoneNumberUtil::UAN;
2137
+ }
2138
+ if (IsNumberMatchingDesc(national_number, metadata.voicemail())) {
2139
+ VLOG(4) << "Number is a voicemail number.";
2140
+ return PhoneNumberUtil::VOICEMAIL;
2141
+ }
2142
+
2143
+ bool is_fixed_line =
2144
+ IsNumberMatchingDesc(national_number, metadata.fixed_line());
2145
+ if (is_fixed_line) {
2146
+ if (metadata.same_mobile_and_fixed_line_pattern()) {
2147
+ VLOG(4) << "Fixed-line and mobile patterns equal, number is fixed-line"
2148
+ << " or mobile";
2149
+ return PhoneNumberUtil::FIXED_LINE_OR_MOBILE;
2150
+ } else if (IsNumberMatchingDesc(national_number, metadata.mobile())) {
2151
+ VLOG(4) << "Fixed-line and mobile patterns differ, but number is "
2152
+ << "still fixed-line or mobile";
2153
+ return PhoneNumberUtil::FIXED_LINE_OR_MOBILE;
2154
+ }
2155
+ VLOG(4) << "Number is a fixed line number.";
2156
+ return PhoneNumberUtil::FIXED_LINE;
2157
+ }
2158
+ // Otherwise, test to see if the number is mobile. Only do this if certain
2159
+ // that the patterns for mobile and fixed line aren't the same.
2160
+ if (!metadata.same_mobile_and_fixed_line_pattern() &&
2161
+ IsNumberMatchingDesc(national_number, metadata.mobile())) {
2162
+ VLOG(4) << "Number is a mobile number.";
2163
+ return PhoneNumberUtil::MOBILE;
2164
+ }
2165
+ VLOG(4) << "Number type unknown - doesn\'t match any specific number type"
2166
+ << " pattern.";
2167
+ return PhoneNumberUtil::UNKNOWN;
2168
+ }
2169
+
2170
+ void PhoneNumberUtil::GetNationalSignificantNumber(
2171
+ const PhoneNumber& number,
2172
+ string* national_number) const {
2173
+ DCHECK(national_number);
2174
+ // If leading zero(s) have been set, we prefix this now. Note this is not a
2175
+ // national prefix.
2176
+ StrAppend(national_number, number.italian_leading_zero() ?
2177
+ string(number.number_of_leading_zeros(), '0') : "");
2178
+ StrAppend(national_number, number.national_number());
2179
+ }
2180
+
2181
+ int PhoneNumberUtil::GetLengthOfGeographicalAreaCode(
2182
+ const PhoneNumber& number) const {
2183
+ string region_code;
2184
+ GetRegionCodeForNumber(number, &region_code);
2185
+ const PhoneMetadata* metadata = GetMetadataForRegion(region_code);
2186
+ if (!metadata) {
2187
+ return 0;
2188
+ }
2189
+ // If a country doesn't use a national prefix, and this number doesn't have an
2190
+ // Italian leading zero, we assume it is a closed dialling plan with no area
2191
+ // codes.
2192
+ if (!metadata->has_national_prefix() && !number.italian_leading_zero()) {
2193
+ return 0;
2194
+ }
2195
+
2196
+ if (!IsNumberGeographical(number)) {
2197
+ return 0;
2198
+ }
2199
+
2200
+ return GetLengthOfNationalDestinationCode(number);
2201
+ }
2202
+
2203
+ int PhoneNumberUtil::GetLengthOfNationalDestinationCode(
2204
+ const PhoneNumber& number) const {
2205
+ PhoneNumber copied_proto(number);
2206
+ if (number.has_extension()) {
2207
+ // Clear the extension so it's not included when formatting.
2208
+ copied_proto.clear_extension();
2209
+ }
2210
+
2211
+ string formatted_number;
2212
+ Format(copied_proto, INTERNATIONAL, &formatted_number);
2213
+ const scoped_ptr<RegExpInput> i18n_number(
2214
+ reg_exps_->regexp_factory_->CreateInput(formatted_number));
2215
+ string digit_group;
2216
+ string ndc;
2217
+ string third_group;
2218
+ for (int i = 0; i < 3; ++i) {
2219
+ if (!reg_exps_->capturing_ascii_digits_pattern_->FindAndConsume(
2220
+ i18n_number.get(), &digit_group)) {
2221
+ // We should find at least three groups.
2222
+ return 0;
2223
+ }
2224
+ if (i == 1) {
2225
+ ndc = digit_group;
2226
+ } else if (i == 2) {
2227
+ third_group = digit_group;
2228
+ }
2229
+ }
2230
+
2231
+ if (GetNumberType(number) == MOBILE) {
2232
+ // For example Argentinian mobile numbers, when formatted in the
2233
+ // international format, are in the form of +54 9 NDC XXXX.... As a result,
2234
+ // we take the length of the third group (NDC) and add the length of the
2235
+ // mobile token, which also forms part of the national significant number.
2236
+ // This assumes that the mobile token is always formatted separately from
2237
+ // the rest of the phone number.
2238
+ string mobile_token;
2239
+ GetCountryMobileToken(number.country_code(), &mobile_token);
2240
+ if (!mobile_token.empty()) {
2241
+ return third_group.size() + mobile_token.size();
2242
+ }
2243
+ }
2244
+ return ndc.size();
2245
+ }
2246
+
2247
+ void PhoneNumberUtil::GetCountryMobileToken(int country_calling_code,
2248
+ string* mobile_token) const {
2249
+ DCHECK(mobile_token);
2250
+ map<int, char>::iterator it = reg_exps_->mobile_token_mappings_.find(
2251
+ country_calling_code);
2252
+ if (it != reg_exps_->mobile_token_mappings_.end()) {
2253
+ *mobile_token = it->second;
2254
+ } else {
2255
+ mobile_token->assign("");
2256
+ }
2257
+ }
2258
+
2259
+ void PhoneNumberUtil::NormalizeDigitsOnly(string* number) const {
2260
+ DCHECK(number);
2261
+ const RegExp& non_digits_pattern = reg_exps_->regexp_cache_->GetRegExp(
2262
+ StrCat("[^", kDigits, "]"));
2263
+ // Delete everything that isn't valid digits.
2264
+ non_digits_pattern.GlobalReplace(number, "");
2265
+ // Normalize all decimal digits to ASCII digits.
2266
+ number->assign(NormalizeUTF8::NormalizeDecimalDigits(*number));
2267
+ }
2268
+
2269
+ void PhoneNumberUtil::NormalizeDiallableCharsOnly(string* number) const {
2270
+ DCHECK(number);
2271
+ NormalizeHelper(reg_exps_->diallable_char_mappings_,
2272
+ true /* remove non matches */, number);
2273
+ }
2274
+
2275
+ bool PhoneNumberUtil::IsAlphaNumber(const string& number) const {
2276
+ if (!IsViablePhoneNumber(number)) {
2277
+ // Number is too short, or doesn't match the basic phone number pattern.
2278
+ return false;
2279
+ }
2280
+ // Copy the number, since we are going to try and strip the extension from it.
2281
+ string number_copy(number);
2282
+ string extension;
2283
+ MaybeStripExtension(&number_copy, &extension);
2284
+ return reg_exps_->valid_alpha_phone_pattern_->FullMatch(number_copy);
2285
+ }
2286
+
2287
+ void PhoneNumberUtil::ConvertAlphaCharactersInNumber(string* number) const {
2288
+ DCHECK(number);
2289
+ NormalizeHelper(reg_exps_->alpha_phone_mappings_, false, number);
2290
+ }
2291
+
2292
+ // Normalizes a string of characters representing a phone number. This performs
2293
+ // the following conversions:
2294
+ // - Punctuation is stripped.
2295
+ // For ALPHA/VANITY numbers:
2296
+ // - Letters are converted to their numeric representation on a telephone
2297
+ // keypad. The keypad used here is the one defined in ITU Recommendation
2298
+ // E.161. This is only done if there are 3 or more letters in the number, to
2299
+ // lessen the risk that such letters are typos.
2300
+ // For other numbers:
2301
+ // - Wide-ascii digits are converted to normal ASCII (European) digits.
2302
+ // - Arabic-Indic numerals are converted to European numerals.
2303
+ // - Spurious alpha characters are stripped.
2304
+ void PhoneNumberUtil::Normalize(string* number) const {
2305
+ DCHECK(number);
2306
+ if (reg_exps_->valid_alpha_phone_pattern_->PartialMatch(*number)) {
2307
+ NormalizeHelper(reg_exps_->alpha_phone_mappings_, true, number);
2308
+ }
2309
+ NormalizeDigitsOnly(number);
2310
+ }
2311
+
2312
+ // Checks to see if the string of characters could possibly be a phone number at
2313
+ // all. At the moment, checks to see that the string begins with at least 3
2314
+ // digits, ignoring any punctuation commonly found in phone numbers. This
2315
+ // method does not require the number to be normalized in advance - but does
2316
+ // assume that leading non-number symbols have been removed, such as by the
2317
+ // method ExtractPossibleNumber.
2318
+ bool PhoneNumberUtil::IsViablePhoneNumber(const string& number) const {
2319
+ if (number.length() < kMinLengthForNsn) {
2320
+ VLOG(2) << "Number too short to be viable:" << number;
2321
+ return false;
2322
+ }
2323
+ return reg_exps_->valid_phone_number_pattern_->FullMatch(number);
2324
+ }
2325
+
2326
+ // Strips the IDD from the start of the number if present. Helper function used
2327
+ // by MaybeStripInternationalPrefixAndNormalize.
2328
+ bool PhoneNumberUtil::ParsePrefixAsIdd(const RegExp& idd_pattern,
2329
+ string* number) const {
2330
+ DCHECK(number);
2331
+ const scoped_ptr<RegExpInput> number_copy(
2332
+ reg_exps_->regexp_factory_->CreateInput(*number));
2333
+ // First attempt to strip the idd_pattern at the start, if present. We make a
2334
+ // copy so that we can revert to the original string if necessary.
2335
+ if (idd_pattern.Consume(number_copy.get())) {
2336
+ // Only strip this if the first digit after the match is not a 0, since
2337
+ // country calling codes cannot begin with 0.
2338
+ string extracted_digit;
2339
+ if (reg_exps_->capturing_digit_pattern_->PartialMatch(
2340
+ number_copy->ToString(), &extracted_digit)) {
2341
+ NormalizeDigitsOnly(&extracted_digit);
2342
+ if (extracted_digit == "0") {
2343
+ return false;
2344
+ }
2345
+ }
2346
+ number->assign(number_copy->ToString());
2347
+ return true;
2348
+ }
2349
+ return false;
2350
+ }
2351
+
2352
+ // Strips any international prefix (such as +, 00, 011) present in the number
2353
+ // provided, normalizes the resulting number, and indicates if an international
2354
+ // prefix was present.
2355
+ //
2356
+ // possible_idd_prefix represents the international direct dialing prefix from
2357
+ // the region we think this number may be dialed in.
2358
+ // Returns true if an international dialing prefix could be removed from the
2359
+ // number, otherwise false if the number did not seem to be in international
2360
+ // format.
2361
+ PhoneNumber::CountryCodeSource
2362
+ PhoneNumberUtil::MaybeStripInternationalPrefixAndNormalize(
2363
+ const string& possible_idd_prefix,
2364
+ string* number) const {
2365
+ DCHECK(number);
2366
+ if (number->empty()) {
2367
+ return PhoneNumber::FROM_DEFAULT_COUNTRY;
2368
+ }
2369
+ const scoped_ptr<RegExpInput> number_string_piece(
2370
+ reg_exps_->regexp_factory_->CreateInput(*number));
2371
+ if (reg_exps_->plus_chars_pattern_->Consume(number_string_piece.get())) {
2372
+ number->assign(number_string_piece->ToString());
2373
+ // Can now normalize the rest of the number since we've consumed the "+"
2374
+ // sign at the start.
2375
+ Normalize(number);
2376
+ return PhoneNumber::FROM_NUMBER_WITH_PLUS_SIGN;
2377
+ }
2378
+ // Attempt to parse the first digits as an international prefix.
2379
+ const RegExp& idd_pattern =
2380
+ reg_exps_->regexp_cache_->GetRegExp(possible_idd_prefix);
2381
+ Normalize(number);
2382
+ return ParsePrefixAsIdd(idd_pattern, number)
2383
+ ? PhoneNumber::FROM_NUMBER_WITH_IDD
2384
+ : PhoneNumber::FROM_DEFAULT_COUNTRY;
2385
+ }
2386
+
2387
+ // Strips any national prefix (such as 0, 1) present in the number provided.
2388
+ // The number passed in should be the normalized telephone number that we wish
2389
+ // to strip any national dialing prefix from. The metadata should be for the
2390
+ // region that we think this number is from. Returns true if a national prefix
2391
+ // and/or carrier code was stripped.
2392
+ bool PhoneNumberUtil::MaybeStripNationalPrefixAndCarrierCode(
2393
+ const PhoneMetadata& metadata,
2394
+ string* number,
2395
+ string* carrier_code) const {
2396
+ DCHECK(number);
2397
+ string carrier_code_temp;
2398
+ const string& possible_national_prefix =
2399
+ metadata.national_prefix_for_parsing();
2400
+ if (number->empty() || possible_national_prefix.empty()) {
2401
+ // Early return for numbers of zero length or with no national prefix
2402
+ // possible.
2403
+ return false;
2404
+ }
2405
+ // We use two copies here since Consume modifies the phone number, and if the
2406
+ // first if-clause fails the number will already be changed.
2407
+ const scoped_ptr<RegExpInput> number_copy(
2408
+ reg_exps_->regexp_factory_->CreateInput(*number));
2409
+ const scoped_ptr<RegExpInput> number_copy_without_transform(
2410
+ reg_exps_->regexp_factory_->CreateInput(*number));
2411
+ string number_string_copy(*number);
2412
+ string captured_part_of_prefix;
2413
+ const RegExp& national_number_rule = reg_exps_->regexp_cache_->GetRegExp(
2414
+ metadata.general_desc().national_number_pattern());
2415
+ // Check if the original number is viable.
2416
+ bool is_viable_original_number = national_number_rule.FullMatch(*number);
2417
+ // Attempt to parse the first digits as a national prefix. We make a
2418
+ // copy so that we can revert to the original string if necessary.
2419
+ const string& transform_rule = metadata.national_prefix_transform_rule();
2420
+ const RegExp& possible_national_prefix_pattern =
2421
+ reg_exps_->regexp_cache_->GetRegExp(possible_national_prefix);
2422
+ if (!transform_rule.empty() &&
2423
+ (possible_national_prefix_pattern.Consume(
2424
+ number_copy.get(), &carrier_code_temp, &captured_part_of_prefix) ||
2425
+ possible_national_prefix_pattern.Consume(
2426
+ number_copy.get(), &captured_part_of_prefix)) &&
2427
+ !captured_part_of_prefix.empty()) {
2428
+ // If this succeeded, then we must have had a transform rule and there must
2429
+ // have been some part of the prefix that we captured.
2430
+ // We make the transformation and check that the resultant number is still
2431
+ // viable. If so, replace the number and return.
2432
+ possible_national_prefix_pattern.Replace(&number_string_copy,
2433
+ transform_rule);
2434
+ if (is_viable_original_number &&
2435
+ !national_number_rule.FullMatch(number_string_copy)) {
2436
+ return false;
2437
+ }
2438
+ number->assign(number_string_copy);
2439
+ if (carrier_code) {
2440
+ carrier_code->assign(carrier_code_temp);
2441
+ }
2442
+ } else if (possible_national_prefix_pattern.Consume(
2443
+ number_copy_without_transform.get(), &carrier_code_temp) ||
2444
+ possible_national_prefix_pattern.Consume(
2445
+ number_copy_without_transform.get())) {
2446
+ VLOG(4) << "Parsed the first digits as a national prefix.";
2447
+ // If captured_part_of_prefix is empty, this implies nothing was captured by
2448
+ // the capturing groups in possible_national_prefix; therefore, no
2449
+ // transformation is necessary, and we just remove the national prefix.
2450
+ const string number_copy_as_string =
2451
+ number_copy_without_transform->ToString();
2452
+ if (is_viable_original_number &&
2453
+ !national_number_rule.FullMatch(number_copy_as_string)) {
2454
+ return false;
2455
+ }
2456
+ number->assign(number_copy_as_string);
2457
+ if (carrier_code) {
2458
+ carrier_code->assign(carrier_code_temp);
2459
+ }
2460
+ } else {
2461
+ return false;
2462
+ VLOG(4) << "The first digits did not match the national prefix.";
2463
+ }
2464
+ return true;
2465
+ }
2466
+
2467
+ // Strips any extension (as in, the part of the number dialled after the call is
2468
+ // connected, usually indicated with extn, ext, x or similar) from the end of
2469
+ // the number, and returns it. The number passed in should be non-normalized.
2470
+ bool PhoneNumberUtil::MaybeStripExtension(string* number, string* extension)
2471
+ const {
2472
+ DCHECK(number);
2473
+ DCHECK(extension);
2474
+ // There are three extension capturing groups in the regular expression.
2475
+ string possible_extension_one;
2476
+ string possible_extension_two;
2477
+ string possible_extension_three;
2478
+ string number_copy(*number);
2479
+ const scoped_ptr<RegExpInput> number_copy_as_regexp_input(
2480
+ reg_exps_->regexp_factory_->CreateInput(number_copy));
2481
+ if (reg_exps_->extn_pattern_->Consume(number_copy_as_regexp_input.get(),
2482
+ false,
2483
+ &possible_extension_one,
2484
+ &possible_extension_two,
2485
+ &possible_extension_three)) {
2486
+ // Replace the extensions in the original string here.
2487
+ reg_exps_->extn_pattern_->Replace(&number_copy, "");
2488
+ VLOG(4) << "Found an extension. Possible extension one: "
2489
+ << possible_extension_one
2490
+ << ". Possible extension two: " << possible_extension_two
2491
+ << ". Possible extension three: " << possible_extension_three
2492
+ << ". Remaining number: " << number_copy;
2493
+ // If we find a potential extension, and the number preceding this is a
2494
+ // viable number, we assume it is an extension.
2495
+ if ((!possible_extension_one.empty() || !possible_extension_two.empty() ||
2496
+ !possible_extension_three.empty()) &&
2497
+ IsViablePhoneNumber(number_copy)) {
2498
+ number->assign(number_copy);
2499
+ if (!possible_extension_one.empty()) {
2500
+ extension->assign(possible_extension_one);
2501
+ } else if (!possible_extension_two.empty()) {
2502
+ extension->assign(possible_extension_two);
2503
+ } else if (!possible_extension_three.empty()) {
2504
+ extension->assign(possible_extension_three);
2505
+ }
2506
+ return true;
2507
+ }
2508
+ }
2509
+ return false;
2510
+ }
2511
+
2512
+ // Extracts country calling code from national_number, and returns it. It
2513
+ // assumes that the leading plus sign or IDD has already been removed. Returns 0
2514
+ // if national_number doesn't start with a valid country calling code, and
2515
+ // leaves national_number unmodified. Assumes the national_number is at least 3
2516
+ // characters long.
2517
+ int PhoneNumberUtil::ExtractCountryCode(string* national_number) const {
2518
+ int potential_country_code;
2519
+ if (national_number->empty() || (national_number->at(0) == '0')) {
2520
+ // Country codes do not begin with a '0'.
2521
+ return 0;
2522
+ }
2523
+ for (size_t i = 1; i <= kMaxLengthCountryCode; ++i) {
2524
+ safe_strto32(national_number->substr(0, i), &potential_country_code);
2525
+ string region_code;
2526
+ GetRegionCodeForCountryCode(potential_country_code, &region_code);
2527
+ if (region_code != RegionCode::GetUnknown()) {
2528
+ national_number->erase(0, i);
2529
+ return potential_country_code;
2530
+ }
2531
+ }
2532
+ return 0;
2533
+ }
2534
+
2535
+ // Tries to extract a country calling code from a number. Country calling codes
2536
+ // are extracted in the following ways:
2537
+ // - by stripping the international dialing prefix of the region the person
2538
+ // is dialing from, if this is present in the number, and looking at the next
2539
+ // digits
2540
+ // - by stripping the '+' sign if present and then looking at the next digits
2541
+ // - by comparing the start of the number and the country calling code of the
2542
+ // default region. If the number is not considered possible for the numbering
2543
+ // plan of the default region initially, but starts with the country calling
2544
+ // code of this region, validation will be reattempted after stripping this
2545
+ // country calling code. If this number is considered a possible number, then
2546
+ // the first digits will be considered the country calling code and removed as
2547
+ // such.
2548
+ //
2549
+ // Returns NO_PARSING_ERROR if a country calling code was successfully
2550
+ // extracted or none was present, or the appropriate error otherwise, such as
2551
+ // if a + was present but it was not followed by a valid country calling code.
2552
+ // If NO_PARSING_ERROR is returned, the national_number without the country
2553
+ // calling code is populated, and the country_code of the phone_number passed
2554
+ // in is set to the country calling code if found, otherwise to 0.
2555
+ PhoneNumberUtil::ErrorType PhoneNumberUtil::MaybeExtractCountryCode(
2556
+ const PhoneMetadata* default_region_metadata,
2557
+ bool keep_raw_input,
2558
+ string* national_number,
2559
+ PhoneNumber* phone_number) const {
2560
+ DCHECK(national_number);
2561
+ DCHECK(phone_number);
2562
+ // Set the default prefix to be something that will never match if there is no
2563
+ // default region.
2564
+ string possible_country_idd_prefix = default_region_metadata
2565
+ ? default_region_metadata->international_prefix()
2566
+ : "NonMatch";
2567
+ PhoneNumber::CountryCodeSource country_code_source =
2568
+ MaybeStripInternationalPrefixAndNormalize(possible_country_idd_prefix,
2569
+ national_number);
2570
+ if (keep_raw_input) {
2571
+ phone_number->set_country_code_source(country_code_source);
2572
+ }
2573
+ if (country_code_source != PhoneNumber::FROM_DEFAULT_COUNTRY) {
2574
+ if (national_number->length() <= kMinLengthForNsn) {
2575
+ VLOG(2) << "Phone number had an IDD, but after this was not "
2576
+ << "long enough to be a viable phone number.";
2577
+ return TOO_SHORT_AFTER_IDD;
2578
+ }
2579
+ int potential_country_code = ExtractCountryCode(national_number);
2580
+ if (potential_country_code != 0) {
2581
+ phone_number->set_country_code(potential_country_code);
2582
+ return NO_PARSING_ERROR;
2583
+ }
2584
+ // If this fails, they must be using a strange country calling code that we
2585
+ // don't recognize, or that doesn't exist.
2586
+ return INVALID_COUNTRY_CODE_ERROR;
2587
+ } else if (default_region_metadata) {
2588
+ // Check to see if the number starts with the country calling code for the
2589
+ // default region. If so, we remove the country calling code, and do some
2590
+ // checks on the validity of the number before and after.
2591
+ int default_country_code = default_region_metadata->country_code();
2592
+ string default_country_code_string(SimpleItoa(default_country_code));
2593
+ VLOG(4) << "Possible country calling code: " << default_country_code_string;
2594
+ string potential_national_number;
2595
+ if (TryStripPrefixString(*national_number,
2596
+ default_country_code_string,
2597
+ &potential_national_number)) {
2598
+ const PhoneNumberDesc& general_num_desc =
2599
+ default_region_metadata->general_desc();
2600
+ const RegExp& valid_number_pattern =
2601
+ reg_exps_->regexp_cache_->GetRegExp(
2602
+ general_num_desc.national_number_pattern());
2603
+ MaybeStripNationalPrefixAndCarrierCode(*default_region_metadata,
2604
+ &potential_national_number,
2605
+ NULL);
2606
+ VLOG(4) << "Number without country calling code prefix: "
2607
+ << potential_national_number;
2608
+ const RegExp& possible_number_pattern =
2609
+ reg_exps_->regexp_cache_->GetRegExp(
2610
+ StrCat("(", general_num_desc.possible_number_pattern(), ")"));
2611
+ // If the number was not valid before but is valid now, or if it was too
2612
+ // long before, we consider the number with the country code stripped to
2613
+ // be a better result and keep that instead.
2614
+ if ((!valid_number_pattern.FullMatch(*national_number) &&
2615
+ valid_number_pattern.FullMatch(potential_national_number)) ||
2616
+ TestNumberLengthAgainstPattern(possible_number_pattern,
2617
+ *national_number) == TOO_LONG) {
2618
+ national_number->assign(potential_national_number);
2619
+ if (keep_raw_input) {
2620
+ phone_number->set_country_code_source(
2621
+ PhoneNumber::FROM_NUMBER_WITHOUT_PLUS_SIGN);
2622
+ }
2623
+ phone_number->set_country_code(default_country_code);
2624
+ return NO_PARSING_ERROR;
2625
+ }
2626
+ }
2627
+ }
2628
+ // No country calling code present. Set the country_code to 0.
2629
+ phone_number->set_country_code(0);
2630
+ return NO_PARSING_ERROR;
2631
+ }
2632
+
2633
+ PhoneNumberUtil::MatchType PhoneNumberUtil::IsNumberMatch(
2634
+ const PhoneNumber& first_number_in,
2635
+ const PhoneNumber& second_number_in) const {
2636
+ // Make copies of the phone number so that the numbers passed in are not
2637
+ // edited.
2638
+ PhoneNumber first_number(first_number_in);
2639
+ PhoneNumber second_number(second_number_in);
2640
+ // First clear raw_input and country_code_source and
2641
+ // preferred_domestic_carrier_code fields and any empty-string extensions so
2642
+ // that we can use the proto-buffer equality method.
2643
+ first_number.clear_raw_input();
2644
+ first_number.clear_country_code_source();
2645
+ first_number.clear_preferred_domestic_carrier_code();
2646
+ second_number.clear_raw_input();
2647
+ second_number.clear_country_code_source();
2648
+ second_number.clear_preferred_domestic_carrier_code();
2649
+ if (first_number.extension().empty()) {
2650
+ first_number.clear_extension();
2651
+ }
2652
+ if (second_number.extension().empty()) {
2653
+ second_number.clear_extension();
2654
+ }
2655
+ // Early exit if both had extensions and these are different.
2656
+ if (first_number.has_extension() && second_number.has_extension() &&
2657
+ first_number.extension() != second_number.extension()) {
2658
+ return NO_MATCH;
2659
+ }
2660
+ int first_number_country_code = first_number.country_code();
2661
+ int second_number_country_code = second_number.country_code();
2662
+ // Both had country calling code specified.
2663
+ if (first_number_country_code != 0 && second_number_country_code != 0) {
2664
+ if (ExactlySameAs(first_number, second_number)) {
2665
+ return EXACT_MATCH;
2666
+ } else if (first_number_country_code == second_number_country_code &&
2667
+ IsNationalNumberSuffixOfTheOther(first_number, second_number)) {
2668
+ // A SHORT_NSN_MATCH occurs if there is a difference because of the
2669
+ // presence or absence of an 'Italian leading zero', the presence or
2670
+ // absence of an extension, or one NSN being a shorter variant of the
2671
+ // other.
2672
+ return SHORT_NSN_MATCH;
2673
+ }
2674
+ // This is not a match.
2675
+ return NO_MATCH;
2676
+ }
2677
+ // Checks cases where one or both country calling codes were not specified. To
2678
+ // make equality checks easier, we first set the country_code fields to be
2679
+ // equal.
2680
+ first_number.set_country_code(second_number_country_code);
2681
+ // If all else was the same, then this is an NSN_MATCH.
2682
+ if (ExactlySameAs(first_number, second_number)) {
2683
+ return NSN_MATCH;
2684
+ }
2685
+ if (IsNationalNumberSuffixOfTheOther(first_number, second_number)) {
2686
+ return SHORT_NSN_MATCH;
2687
+ }
2688
+ return NO_MATCH;
2689
+ }
2690
+
2691
+ PhoneNumberUtil::MatchType PhoneNumberUtil::IsNumberMatchWithTwoStrings(
2692
+ const string& first_number,
2693
+ const string& second_number) const {
2694
+ PhoneNumber first_number_as_proto;
2695
+ ErrorType error_type =
2696
+ Parse(first_number, RegionCode::GetUnknown(), &first_number_as_proto);
2697
+ if (error_type == NO_PARSING_ERROR) {
2698
+ return IsNumberMatchWithOneString(first_number_as_proto, second_number);
2699
+ }
2700
+ if (error_type == INVALID_COUNTRY_CODE_ERROR) {
2701
+ PhoneNumber second_number_as_proto;
2702
+ ErrorType error_type = Parse(second_number, RegionCode::GetUnknown(),
2703
+ &second_number_as_proto);
2704
+ if (error_type == NO_PARSING_ERROR) {
2705
+ return IsNumberMatchWithOneString(second_number_as_proto, first_number);
2706
+ }
2707
+ if (error_type == INVALID_COUNTRY_CODE_ERROR) {
2708
+ error_type = ParseHelper(first_number, RegionCode::GetUnknown(), false,
2709
+ false, &first_number_as_proto);
2710
+ if (error_type == NO_PARSING_ERROR) {
2711
+ error_type = ParseHelper(second_number, RegionCode::GetUnknown(), false,
2712
+ false, &second_number_as_proto);
2713
+ if (error_type == NO_PARSING_ERROR) {
2714
+ return IsNumberMatch(first_number_as_proto, second_number_as_proto);
2715
+ }
2716
+ }
2717
+ }
2718
+ }
2719
+ // One or more of the phone numbers we are trying to match is not a viable
2720
+ // phone number.
2721
+ return INVALID_NUMBER;
2722
+ }
2723
+
2724
+ PhoneNumberUtil::MatchType PhoneNumberUtil::IsNumberMatchWithOneString(
2725
+ const PhoneNumber& first_number,
2726
+ const string& second_number) const {
2727
+ // First see if the second number has an implicit country calling code, by
2728
+ // attempting to parse it.
2729
+ PhoneNumber second_number_as_proto;
2730
+ ErrorType error_type =
2731
+ Parse(second_number, RegionCode::GetUnknown(), &second_number_as_proto);
2732
+ if (error_type == NO_PARSING_ERROR) {
2733
+ return IsNumberMatch(first_number, second_number_as_proto);
2734
+ }
2735
+ if (error_type == INVALID_COUNTRY_CODE_ERROR) {
2736
+ // The second number has no country calling code. EXACT_MATCH is no longer
2737
+ // possible. We parse it as if the region was the same as that for the
2738
+ // first number, and if EXACT_MATCH is returned, we replace this with
2739
+ // NSN_MATCH.
2740
+ string first_number_region;
2741
+ GetRegionCodeForCountryCode(first_number.country_code(),
2742
+ &first_number_region);
2743
+ if (first_number_region != RegionCode::GetUnknown()) {
2744
+ PhoneNumber second_number_with_first_number_region;
2745
+ Parse(second_number, first_number_region,
2746
+ &second_number_with_first_number_region);
2747
+ MatchType match = IsNumberMatch(first_number,
2748
+ second_number_with_first_number_region);
2749
+ if (match == EXACT_MATCH) {
2750
+ return NSN_MATCH;
2751
+ }
2752
+ return match;
2753
+ } else {
2754
+ // If the first number didn't have a valid country calling code, then we
2755
+ // parse the second number without one as well.
2756
+ error_type = ParseHelper(second_number, RegionCode::GetUnknown(), false,
2757
+ false, &second_number_as_proto);
2758
+ if (error_type == NO_PARSING_ERROR) {
2759
+ return IsNumberMatch(first_number, second_number_as_proto);
2760
+ }
2761
+ }
2762
+ }
2763
+ // One or more of the phone numbers we are trying to match is not a viable
2764
+ // phone number.
2765
+ return INVALID_NUMBER;
2766
+ }
2767
+
2768
+ AsYouTypeFormatter* PhoneNumberUtil::GetAsYouTypeFormatter(
2769
+ const string& region_code) const {
2770
+ return new AsYouTypeFormatter(region_code);
2771
+ }
2772
+
2773
+ bool PhoneNumberUtil::IsShorterThanPossibleNormalNumber(
2774
+ const PhoneMetadata* country_metadata, const string& number) const {
2775
+ const RegExp& possible_number_pattern =
2776
+ reg_exps_->regexp_cache_->GetRegExp(StrCat("(",
2777
+ country_metadata->general_desc().possible_number_pattern(), ")"));
2778
+ return TestNumberLengthAgainstPattern(possible_number_pattern, number) ==
2779
+ PhoneNumberUtil::TOO_SHORT;
2780
+ }
2781
+
2782
+ bool PhoneNumberUtil::CanBeInternationallyDialled(
2783
+ const PhoneNumber& number) const {
2784
+ string region_code;
2785
+ GetRegionCodeForNumber(number, &region_code);
2786
+ const PhoneMetadata* metadata = GetMetadataForRegion(region_code);
2787
+ if (!metadata) {
2788
+ // Note numbers belonging to non-geographical entities (e.g. +800 numbers)
2789
+ // are always internationally diallable, and will be caught here.
2790
+ return true;
2791
+ }
2792
+ string national_significant_number;
2793
+ GetNationalSignificantNumber(number, &national_significant_number);
2794
+ return !IsNumberMatchingDesc(
2795
+ national_significant_number, metadata->no_international_dialling());
2796
+ }
2797
+
2798
+ } // namespace phonenumbers
2799
+ } // namespace i18n