1b9056914e2627627ffdd615e078a9b6020ab1cf2philip.liard@gmail.com// Copyright (C) 2011 The Libphonenumber Authors 21ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// 31ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// Licensed under the Apache License, Version 2.0 (the "License"); 41ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// you may not use this file except in compliance with the License. 51ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// You may obtain a copy of the License at 61ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// 71ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// http://www.apache.org/licenses/LICENSE-2.0 81ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// 91ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// Unless required by applicable law or agreed to in writing, software 101ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// distributed under the License is distributed on an "AS IS" BASIS, 111ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 121ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// See the License for the specific language governing permissions and 131ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com// limitations under the License. 141ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 151ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com#include <string> 161ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 171ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com#include "phonenumbers/utf/unicodetext.h" 181ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 191ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comnamespace i18n { 201ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comnamespace phonenumbers { 211ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 221ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comusing std::string; 231ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 241ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.comstruct NormalizeUTF8 { 251ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com // Put a UTF-8 string in ASCII digits: All decimal digits (Nd) replaced by 261ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com // their ASCII counterparts; all other characters are copied from input to 271ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com // output. 281ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com static string NormalizeDecimalDigits(const string& number) { 291ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com string normalized; 301ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com UnicodeText number_as_unicode; 311ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com number_as_unicode.PointToUTF8(number.data(), number.size()); 321ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com for (UnicodeText::const_iterator it = number_as_unicode.begin(); 331ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com it != number_as_unicode.end(); 341ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com ++it) { 351ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com int32_t digitValue = u_charDigitValue(*it); 361ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com if (digitValue == -1) { 371ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com // Not a decimal digit. 381ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com char utf8[4]; 391ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com int len = it.get_utf8(utf8); 401ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com normalized.append(utf8, len); 411ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com } else { 421ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com normalized.push_back('0' + digitValue); 431ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com } 441ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com } 451ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com return normalized; 461ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com } 471ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com}; 481ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com 491ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} // namespace phonenumbers 501ad5e5bc944bfb46689d87ace2773109cb54f5ephilip.liard@gmail.com} // namespace i18n 51