| Index: third_party/libphonenumber/cpp/src/regexp_adapter_re2.cc
 | 
| ===================================================================
 | 
| --- third_party/libphonenumber/cpp/src/regexp_adapter_re2.cc	(revision 0)
 | 
| +++ third_party/libphonenumber/cpp/src/regexp_adapter_re2.cc	(revision 0)
 | 
| @@ -0,0 +1,192 @@
 | 
| +// Copyright (C) 2011 Google Inc.
 | 
| +//
 | 
| +// Licensed under the Apache License, Version 2.0 (the "License");
 | 
| +// you may not use this file except in compliance with the License.
 | 
| +// You may obtain a copy of the License at
 | 
| +//
 | 
| +// http://www.apache.org/licenses/LICENSE-2.0
 | 
| +//
 | 
| +// Unless required by applicable law or agreed to in writing, software
 | 
| +// distributed under the License is distributed on an "AS IS" BASIS,
 | 
| +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
| +// See the License for the specific language governing permissions and
 | 
| +// limitations under the License.
 | 
| +
 | 
| +// Author: George Yakovlev
 | 
| +#include "regexp_adapter.h"
 | 
| +
 | 
| +#include <re2/re2.h>
 | 
| +#include <re2/stringpiece.h>
 | 
| +#include <re2/re2.h>
 | 
| +
 | 
| +namespace {
 | 
| +scoped_ptr<RE2Cache> re2_cache;
 | 
| +}  // namespace
 | 
| +
 | 
| +class RE2RegularExpressionInput : public RegularExpressionInput {
 | 
| + public:
 | 
| +  RE2RegularExpressionInput(const char* utf8_input);
 | 
| +  
 | 
| +  virtual bool ConsumeRegExp(std::string const& reg_exp,
 | 
| +                             bool beginning_only,
 | 
| +                             std::string* matched_string1,
 | 
| +                             std::string* matched_string2);
 | 
| +  virtual std::string ToString() const;
 | 
| + private:
 | 
| +  StringPiece utf8_input_;
 | 
| +};
 | 
| +
 | 
| +
 | 
| +class RE2RegularExpression : public reg_exp::RegularExpression {
 | 
| + public:
 | 
| +  RE2RegularExpression(const char* utf8_regexp);
 | 
| +
 | 
| +  virtual bool Consume(reg_exp::RegularExpressionInput* input_string,
 | 
| +                       bool beginning_only,
 | 
| +                       std::string* matched_string1,
 | 
| +                       std::string* matched_string2,
 | 
| +                       std::string* matched_string3) const;
 | 
| +
 | 
| +  virtual bool Match(const char* input_string,
 | 
| +                     bool full_match,
 | 
| +                     std::string* matched_string) const;
 | 
| +
 | 
| +  virtual bool Replace(std::string* string_to_process,
 | 
| +                       bool global,
 | 
| +                       const char* replacement_string) const;
 | 
| + private:
 | 
| +  RE2 utf8_regexp_;
 | 
| +};
 | 
| +
 | 
| +RE2RegularExpressionInput::RE2RegularExpressionInput(const char* utf8_input)
 | 
| +    : utf8_input_(utf8_input) {
 | 
| +  DCHECK(utf8_input);
 | 
| +}
 | 
| +  
 | 
| +bool RE2RegularExpressionInput::ConsumeRegExp(std::string const& reg_exp,
 | 
| +                                              bool beginning_only,
 | 
| +                                              std::string* matched_string1,
 | 
| +                                              std::string* matched_string2) {
 | 
| +  if (beginning_only) {
 | 
| +    if (matched_string2)
 | 
| +      return RE2::Consume(&utf8_input_,
 | 
| +                          RE2Cache::ScopedAccess(re2_cache.get(), reg_exp),
 | 
| +                          matched_string1, matched_string2);
 | 
| +    else if (matched_string1)
 | 
| +      return RE2::Consume(&utf8_input_,
 | 
| +                          RE2Cache::ScopedAccess(re2_cache.get(), reg_exp),
 | 
| +                          matched_string1);
 | 
| +    else
 | 
| +      return RE2::Consume(&utf8_input_,
 | 
| +                          RE2Cache::ScopedAccess(re2_cache.get(), reg_exp));
 | 
| +  } else {
 | 
| +    if (matched_string2)
 | 
| +      return RE2::FindAndConsume(&utf8_input_,
 | 
| +                                 RE2Cache::ScopedAccess(re2_cache.get(),
 | 
| +                                                        reg_exp),
 | 
| +                                 matched_string1, matched_string2);
 | 
| +    else if (matched_string1)
 | 
| +      return RE2::FindAndConsume(&utf8_input_,
 | 
| +                                 RE2Cache::ScopedAccess(re2_cache.get(),
 | 
| +                                                        reg_exp),
 | 
| +                                 matched_string1);
 | 
| +    else
 | 
| +      return RE2::FindAndConsume(&utf8_input_,
 | 
| +                                 RE2Cache::ScopedAccess(re2_cache.get(),
 | 
| +                                                        reg_exp));
 | 
| +  }
 | 
| +}
 | 
| +
 | 
| +std::string RE2RegularExpressionInput::ToString() const {
 | 
| +  utf8_input_.ToString();
 | 
| +}
 | 
| +
 | 
| +RE2RegularExpression::RE2RegularExpression(const char* utf8_regexp)
 | 
| +    : utf8_regexp_(utf8_regexp) {
 | 
| +  DCHECK(utf8_regexp);
 | 
| +}
 | 
| +
 | 
| +bool RE2RegularExpression::Consume(RegularExpressionInput* input_string,
 | 
| +                                   bool beginning_only,
 | 
| +                                   std::string* matched_string1,
 | 
| +                                   std::string* matched_string2,
 | 
| +                                   std::string* matched_string3) const {
 | 
| +  DCHECK(input_string);
 | 
| +  // matched_string1 may be NULL
 | 
| +  // matched_string2 may be NULL
 | 
| +  if (beginning_only) {
 | 
| +    if (matched_string3) {
 | 
| +      return RE2::Consume(input_string, utf8_regexp_,
 | 
| +                          matched_string1, matched_string2, matched_string3);
 | 
| +    } else if (matched_string2) {
 | 
| +      return RE2::Consume(input_string, utf8_regexp_,
 | 
| +                          matched_string1, matched_string2);
 | 
| +    } else if (matched_string1) {
 | 
| +      return RE2::Consume(input_string, utf8_regexp_, matched_string1);
 | 
| +    } else {
 | 
| +      return RE2::Consume(input_string, utf8_regexp_);
 | 
| +    }
 | 
| +  } else {
 | 
| +    if (matched_string3) {
 | 
| +      return RE2::FindAndConsume(input_string, utf8_regexp_,
 | 
| +                                 matched_string1, matched_string2,
 | 
| +                                 matched_string3);
 | 
| +    } else if (matched_string2) {
 | 
| +      return RE2::FindAndConsume(input_string, utf8_regexp_,
 | 
| +                                 matched_string1, matched_string2);
 | 
| +    } else if (matched_string1) {
 | 
| +      return RE2::FindAndConsume(input_string, utf8_regexp_, matched_string1);
 | 
| +    } else {
 | 
| +      return RE2::FindAndConsume(input_string, utf8_regexp_);
 | 
| +    }
 | 
| +  }
 | 
| +}
 | 
| +
 | 
| +bool RE2RegularExpression::Match(const char* input_string,
 | 
| +                                 bool full_match,
 | 
| +                                 std::string* matched_string) const {
 | 
| +  DCHECK(input_string);
 | 
| +  // matched_string may be NULL
 | 
| +  if (full_match) {
 | 
| +    if (matched_string)
 | 
| +      return RE2::FullMatch(input_string, matched_string);
 | 
| +    else
 | 
| +      return RE2::FullMatch(input_string);
 | 
| +  } else {
 | 
| +    if (matched_string)
 | 
| +      return RE2::PartialMatch(input_string, matched_string);
 | 
| +    else
 | 
| +      return RE2::PartialMatch(input_string);
 | 
| +  }
 | 
| +}
 | 
| +
 | 
| +bool RE2RegularExpression::Replace(std::string* string_to_process,
 | 
| +                                   bool global,
 | 
| +                                   const char* replacement_string) const {
 | 
| +  DCHECK(string_to_process);
 | 
| +  DCHECK(replacement_string);
 | 
| +  if (global) {
 | 
| +    StringPiece str(replacement_string);
 | 
| +    return RE2::GlobalReplace(string_to_process, str);
 | 
| +  } else {
 | 
| +    return RE2::Replace(string_to_process, replacement_string);
 | 
| +  }
 | 
| +}
 | 
| +
 | 
| +
 | 
| +namespace reg_exp {
 | 
| +
 | 
| +RegularExpressionInput* CreateRegularExpressionInput(const char* utf8_input) {
 | 
| +  if (!re2_cache.get())
 | 
| +    re2_cache.reset(new RE2Cache(64));
 | 
| +  return new RE2RegularExpressionInput(utf8_input);
 | 
| +}
 | 
| +
 | 
| +RegularExpression* CreateRegularExpression(const char* utf8_regexp) {
 | 
| +  if (!re2_cache.get())
 | 
| +    re2_cache.reset(new RE2Cache(64));
 | 
| +  return new RE2RegularExpression(utf8_regexp);
 | 
| +}
 | 
| +
 | 
| +}  // namespace reg_exp
 | 
| +
 | 
| 
 | 
| Property changes on: third_party\libphonenumber\cpp\src\regexp_adapter_re2.cc
 | 
| ___________________________________________________________________
 | 
| Added: svn:eol-style
 | 
|    + LF
 | 
| 
 | 
| 
 |