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 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 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 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