Chromium Code Reviews| Index: components/autofill/core/browser/address_rewriter.h |
| diff --git a/components/autofill/core/browser/address_rewriter.h b/components/autofill/core/browser/address_rewriter.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..7d94499f2a3e41bd56328ac89c50d1b1c6711507 |
| --- /dev/null |
| +++ b/components/autofill/core/browser/address_rewriter.h |
| @@ -0,0 +1,64 @@ |
| +// 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 defined a set of rules for a region. |
|
Mathieu
2016/07/06 17:50:46
nit: define
Roger McFarlane (Chromium)
2016/07/06 21:28:38
Done.
|
| +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_ |