• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "components/autofill/core/browser/state_names.h"
6 
7 #include "base/basictypes.h"
8 #include "base/strings/string_util.h"
9 #include "base/strings/utf_string_conversions.h"
10 
11 namespace autofill {
12 namespace state_names {
13 
14 namespace {
15 
16 // TODO(jhawkins): Add more states/provinces.  See http://crbug.com/45039.
17 
18 struct StateData {
19   const char* const name;
20   const char abbreviation[3];
21 };
22 
23 StateData kStateData[] = {
24   { "alabama", "al" },
25   { "alaska", "ak" },
26   { "arizona", "az" },
27   { "arkansas", "ar" },
28   { "california", "ca" },
29   { "colorado", "co" },
30   { "connecticut", "ct" },
31   { "delaware", "de" },
32   { "district of columbia", "dc" },
33   { "florida", "fl" },
34   { "georgia", "ga" },
35   { "hawaii", "hi" },
36   { "idaho", "id" },
37   { "illinois", "il" },
38   { "indiana", "in" },
39   { "iowa", "ia" },
40   { "kansas", "ks" },
41   { "kentucky", "ky" },
42   { "louisiana", "la" },
43   { "maine", "me" },
44   { "maryland", "md" },
45   { "massachusetts", "ma" },
46   { "michigan", "mi" },
47   { "minnesota", "mn" },
48   { "mississippi", "ms" },
49   { "missouri", "mo" },
50   { "montana", "mt" },
51   { "nebraska", "ne" },
52   { "nevada", "nv" },
53   { "new hampshire", "nh" },
54   { "new jersey", "nj" },
55   { "new mexico", "nm" },
56   { "new york", "ny" },
57   { "north carolina", "nc" },
58   { "north dakota", "nd" },
59   { "ohio", "oh" },
60   { "oklahoma", "ok" },
61   { "oregon", "or" },
62   { "pennsylvania", "pa" },
63   { "puerto rico", "pr" },
64   { "rhode island", "ri" },
65   { "south carolina", "sc" },
66   { "south dakota", "sd" },
67   { "tennessee", "tn" },
68   { "texas", "tx" },
69   { "utah", "ut" },
70   { "vermont", "vt" },
71   { "virginia", "va" },
72   { "washington", "wa" },
73   { "west virginia", "wv" },
74   { "wisconsin", "wi" },
75   { "wyoming", "wy" },
76 };
77 
78 }  // namespace
79 
GetAbbreviationForName(const base::string16 & name)80 base::string16 GetAbbreviationForName(const base::string16& name) {
81   for (size_t i = 0; i < arraysize(kStateData); ++i) {
82     const StateData& state = kStateData[i];
83     if (LowerCaseEqualsASCII(name, state.name))
84       return base::ASCIIToUTF16(state.abbreviation);
85   }
86   return base::string16();
87 }
88 
GetNameForAbbreviation(const base::string16 & abbreviation)89 base::string16 GetNameForAbbreviation(const base::string16& abbreviation) {
90   for (size_t i = 0; i < arraysize(kStateData); ++i) {
91     const StateData& state = kStateData[i];
92     if (LowerCaseEqualsASCII(abbreviation, state.abbreviation))
93       return base::ASCIIToUTF16(state.name);
94   }
95   return base::string16();
96 }
97 
GetNameAndAbbreviation(const base::string16 & value,base::string16 * name,base::string16 * abbreviation)98 void GetNameAndAbbreviation(const base::string16& value,
99                             base::string16* name,
100                             base::string16* abbreviation) {
101   base::string16 full = GetNameForAbbreviation(value);
102   base::string16 abbr = value;
103   if (full.empty()) {
104     abbr = GetAbbreviationForName(value);
105     full = value;
106   }
107 
108   if (name)
109     name->swap(full);
110   if (abbreviation)
111     abbreviation->swap(abbr);
112 }
113 
114 }  // namespace state_names
115 }  // namespace autofill
116