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