| 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..bc44415323e810e27f22f230620b77099384f556
|
| --- /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 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_
|
|
|