// Copyright 2016 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef COMPONENTS_AUTOFILL_CORE_BROWSER_ADDRESS_REWRITER_H_ #define COMPONENTS_AUTOFILL_CORE_BROWSER_ADDRESS_REWRITER_H_ #include "base/strings/string16.h" #include "base/strings/string_piece.h" #include "base/strings/string_util.h" namespace autofill { // A class to apply address normalization rewriting rules to strings. This // class is a wrapper to a handle for a set of cached rules. As such, it is // copyable, movable, and passable by value. class AddressRewriter { public: // Get an AddressRewrite instance which applies the rules for |country_code|. static AddressRewriter ForCountryCode(const base::string16& country_code); // Apply the rewrite rules to |text| and return the result. base::string16 Rewrite(const base::string16& text) const; private: // A handle to the internal rewrite rules this instance is using. const void* impl_ = nullptr; }; // Implementation details follow. Not part of the public interface. namespace internal { // The structure used to statically define a rule. struct Rule { const char* pattern; const char* rewrite; }; // The structure used to statically define a set of rules for a region. struct RegionInfo { const char* region; const Rule* rules; size_t num_rules; bool operator<(const base::StringPiece& region) const { return base::CompareCaseInsensitiveASCII(this->region, region) < 0; } bool operator==(const base::StringPiece& region) const { return base::EqualsCaseInsensitiveASCII(this->region, region); } }; // The statically defined rule table, sorted by region. extern const internal::RegionInfo kRuleTable[]; // The size (in records) of the statically defined rule table. extern const size_t kRuleTableSize; } // namespace internal } // namespace autofill #endif // COMPONENTS_AUTOFILL_CORE_BROWSER_ADDRESS_REWRITER_H_