Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / third_party / libaddressinput / chromium / cpp / src / rule.cc
index 9fb5c12..b3f9feb 100644 (file)
@@ -26,6 +26,7 @@
 #include "grit/libaddressinput_strings.h"
 #include "region_data_constants.h"
 #include "util/json.h"
+#include "util/string_compare.h"
 #include "util/string_split.h"
 
 namespace i18n {
@@ -276,16 +277,26 @@ void Rule::ParseJsonRule(const Json& json_rule) {
     SplitString(value, kSeparator, &sub_keys_);
   }
 
+  if (json_rule.GetStringValueForKey("sub_names", &value)) {
+    SplitString(value, kSeparator, &sub_names_);
+    assert(sub_names_.size() == sub_keys_.size());
+  }
+
+  if (json_rule.GetStringValueForKey("sub_lnames", &value)) {
+    SplitString(value, kSeparator, &sub_lnames_);
+    assert(sub_lnames_.size() == sub_keys_.size());
+  }
+
   if (json_rule.GetStringValueForKey("languages", &value)) {
     SplitString(value, kSeparator, &languages_);
   }
 
   if (json_rule.GetStringValueForKey("lang", &value)) {
-    language_ = value;
+    language_.swap(value);
   }
 
   if (json_rule.GetStringValueForKey("zip", &value)) {
-    postal_code_format_ = value;
+    postal_code_format_.swap(value);
   }
 
   if (json_rule.GetStringValueForKey("state_name_type", &value)) {
@@ -314,5 +325,29 @@ int Rule::GetInvalidFieldMessageId(AddressField field) const {
   }
 }
 
+bool Rule::CanonicalizeSubKey(const std::string& user_input,
+                              std::string* sub_key) const {
+  if (sub_keys_.empty()) {
+    *sub_key = user_input;
+    return true;
+  }
+
+  return GetMatchingSubKey(user_input, sub_keys_, sub_key) ||
+      GetMatchingSubKey(user_input, sub_names_, sub_key) ||
+      GetMatchingSubKey(user_input, sub_lnames_, sub_key);
+}
+
+bool Rule::GetMatchingSubKey(const std::string& target,
+                             const std::vector<std::string>& values,
+                             std::string* sub_key) const {
+  for (size_t i = 0; i < values.size(); ++i) {
+    if (LooseStringCompare(values[i], target)) {
+      *sub_key = sub_keys_[i];
+      return true;
+    }
+  }
+  return false;
+}
+
 }  // namespace addressinput
 }  // namespace i18n