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