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