Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Unified Diff: third_party/libaddressinput/chromium/cpp/src/address_ui.cc

Issue 131223004: [rac] Format an address for display. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge. Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/libaddressinput/chromium/cpp/src/address_ui.cc
diff --git a/third_party/libaddressinput/chromium/cpp/src/address_ui.cc b/third_party/libaddressinput/chromium/cpp/src/address_ui.cc
index d833a08a9cf56ab5d54131a6f1920714ae0c8139..7d184529fd9fcb76ec6818e68dc10857cf42a30f 100644
--- a/third_party/libaddressinput/chromium/cpp/src/address_ui.cc
+++ b/third_party/libaddressinput/chromium/cpp/src/address_ui.cc
@@ -17,6 +17,8 @@
#include <libaddressinput/address_field.h>
#include <libaddressinput/address_ui_component.h>
+#include <algorithm>
+#include <set>
#include <string>
#include <vector>
@@ -74,19 +76,41 @@ std::vector<AddressUiComponent> BuildComponents(
return result;
}
- for (std::vector<std::vector<AddressField> >::const_iterator
- line_it = rule.GetFormat().begin();
+ // For avoiding showing an input field twice, when the field is displayed
+ // twice on an envelope.
+ std::set<AddressField> fields;
+
+ for (std::vector<std::vector<FormatElement> >::const_iterator
+ line_it = rule.GetFormat().begin();
line_it != rule.GetFormat().end();
++line_it) {
- for (std::vector<AddressField>::const_iterator field_it = line_it->begin();
- field_it != line_it->end(); ++field_it) {
+ int num_fields_this_row = 0;
+ for (std::vector<FormatElement>::const_iterator element_it =
+ line_it->begin();
+ element_it != line_it->end();
+ ++element_it) {
+ if (element_it->IsField()) {
+ ++num_fields_this_row;
+ }
+ }
+
+ for (std::vector<FormatElement>::const_iterator element_it =
+ line_it->begin();
+ element_it != line_it->end();
+ ++element_it) {
+ AddressField field = element_it->field;
+ if (!element_it->IsField() || fields.find(field) != fields.end()) {
+ continue;
+ }
+ fields.insert(field);
+
AddressUiComponent component;
component.length_hint =
- line_it->size() == 1 ? AddressUiComponent::HINT_LONG
- : AddressUiComponent::HINT_SHORT;
- component.field = *field_it;
+ num_fields_this_row == 1 ? AddressUiComponent::HINT_LONG
+ : AddressUiComponent::HINT_SHORT;
+ component.field = field;
component.name_id =
- GetMessageIdForField(*field_it,
+ GetMessageIdForField(field,
rule.GetAdminAreaNameMessageId(),
rule.GetPostalCodeNameMessageId());
result.push_back(component);
@@ -96,5 +120,31 @@ std::vector<AddressUiComponent> BuildComponents(
return result;
}
+const std::string& GetCompactAddressLinesSeparator(
+ const std::string& language_code,
+ const std::string& country_code) {
+ Rule rule;
+ rule.CopyFrom(Rule::GetDefault());
+ if (!rule.ParseSerializedRule(
+ RegionDataConstants::GetRegionData(country_code))) {
+ return RegionDataConstants::GetLanguageCompactLineSeparator(language_code);
+ }
+
+ std::vector<std::string>::const_iterator lang_it =
+ std::find(rule.GetLanguages().begin(),
+ rule.GetLanguages().end(),
+ language_code);
+ if (lang_it != rule.GetLanguages().end()) {
+ return RegionDataConstants::GetLanguageCompactLineSeparator(*lang_it);
+ }
+
+ if (!rule.GetLanguage().empty()) {
+ return RegionDataConstants::GetLanguageCompactLineSeparator(
+ rule.GetLanguage());
+ }
+
+ return RegionDataConstants::GetCountryCompactLineSeparator(country_code);
+}
+
} // namespace addressinput
} // namespace i18n

Powered by Google App Engine
This is Rietveld 408576698