#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 {
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)) {
}
}
+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