diff options
Diffstat (limited to 'shortnumberutil.cc')
-rw-r--r-- | shortnumberutil.cc | 48 |
1 files changed, 6 insertions, 42 deletions
diff --git a/shortnumberutil.cc b/shortnumberutil.cc index acd5c82..0e693b1 100644 --- a/shortnumberutil.cc +++ b/shortnumberutil.cc @@ -16,62 +16,26 @@ #include "phonenumbers/shortnumberutil.h" -#include "phonenumbers/base/memory/scoped_ptr.h" -#include "phonenumbers/phonemetadata.pb.h" -#include "phonenumbers/phonenumberutil.h" -#include "phonenumbers/regexp_adapter.h" -#include "phonenumbers/regexp_factory.h" +#include "phonenumbers/shortnumberinfo.h" namespace i18n { namespace phonenumbers { using std::string; -ShortNumberUtil::ShortNumberUtil() - : phone_util_(*PhoneNumberUtil::GetInstance()) { +ShortNumberUtil::ShortNumberUtil() { } bool ShortNumberUtil::ConnectsToEmergencyNumber(const string& number, const string& region_code) const { - return MatchesEmergencyNumberHelper(number, region_code, - true /* allows prefix match */); + ShortNumberInfo short_info; + return short_info.ConnectsToEmergencyNumber(number, region_code); } bool ShortNumberUtil::IsEmergencyNumber(const string& number, const string& region_code) const { - return MatchesEmergencyNumberHelper(number, region_code, - false /* doesn't allow prefix match */); -} - -bool ShortNumberUtil::MatchesEmergencyNumberHelper(const string& number, - const string& region_code, bool allow_prefix_match) const { - string extracted_number; - phone_util_.ExtractPossibleNumber(number, &extracted_number); - if (phone_util_.StartsWithPlusCharsPattern(extracted_number)) { - // Returns false if the number starts with a plus sign. We don't believe - // dialing the country code before emergency numbers (e.g. +1911) works, - // but later, if that proves to work, we can add additional logic here to - // handle it. - return false; - } - const PhoneMetadata* metadata = phone_util_.GetMetadataForRegion(region_code); - if (!metadata || !metadata->has_emergency()) { - return false; - } - const scoped_ptr<const AbstractRegExpFactory> regexp_factory( - new RegExpFactory()); - const scoped_ptr<const RegExp> emergency_number_pattern( - regexp_factory->CreateRegExp( - metadata->emergency().national_number_pattern())); - phone_util_.NormalizeDigitsOnly(&extracted_number); - const scoped_ptr<RegExpInput> normalized_number_input( - regexp_factory->CreateInput(extracted_number)); - - // In Brazil, emergency numbers don't work when additional digits are - // appended. - return (!allow_prefix_match || region_code == "BR") - ? emergency_number_pattern->FullMatch(extracted_number) - : emergency_number_pattern->Consume(normalized_number_input.get()); + ShortNumberInfo short_info; + return short_info.IsEmergencyNumber(number, region_code); } } // namespace phonenumbers |