diff --git a/coding/string_utf8_multilang.cpp b/coding/string_utf8_multilang.cpp index f9638e7972..8639542a9f 100644 --- a/coding/string_utf8_multilang.cpp +++ b/coding/string_utf8_multilang.cpp @@ -55,22 +55,22 @@ array co {"ro", "Română", ""}, {"sq", "Shqip", ""}, {"am", "አማርኛ", "Amharic-Latin/BGN"}, - {"no", "Norsk", ""}, // Was "fy" before December 2018. + {"no", "Norsk", ""}, // Was "fy" before December 2018. {"cs", "Čeština", ""}, - {"id", "Bahasa Indonesia", ""}, // Was "gd" before December 2018. + {"id", "Bahasa Indonesia", ""}, // Was "gd" before December 2018. {"sk", "Slovenčina", ""}, {"af", "Afrikaans", ""}, {"ja_kana", "日本語(カタカナ)", "Katakana-Latin"}, {StringUtf8Multilang::kReservedLang /* lb */, "", ""}, {"pt", "Português", ""}, {"hr", "Hrvatski", ""}, - {"da", "Dansk", ""}, // Was "fur" before December 2018. + {"da", "Dansk", ""}, // Was "fur" before December 2018. {"vi", "Tiếng Việt", ""}, {"tr", "Türkçe", ""}, {"bg", "Български", "Bulgarian-Latin/BGN"}, - {StringUtf8Multilang::kReservedLang /* eo */, "", ""}, + {"alt_name", "Alternative name", "Any-Latin"}, // Was "eo" before December 2018. {"lt", "Lietuvių", ""}, - {StringUtf8Multilang::kReservedLang /* la */, "", ""}, + {"old_name", "Old/Previous name", "Any-Latin"}, // Was "la" before December 2018. {"kk", "Қазақ", "Kazakh-Latin/BGN"}, {StringUtf8Multilang::kReservedLang /* gsw */, "", ""}, {"et", "Eesti", ""}, diff --git a/generator/generator_tests/osm_type_test.cpp b/generator/generator_tests/osm_type_test.cpp index 4df0807102..62103ed2bb 100644 --- a/generator/generator_tests/osm_type_test.cpp +++ b/generator/generator_tests/osm_type_test.cpp @@ -871,6 +871,44 @@ UNIT_CLASS_TEST(TestWithClassificator, OsmType_Hotel) } } +UNIT_CLASS_TEST(TestWithClassificator, OsmType_OldName) +{ + { + Tags const tags = { + {"highway", "residential"}, + {"name", "Улица Веткина"}, + {"old_name", "Царская Ветка"} + }; + + auto const params = GetFeatureBuilderParams(tags); + + std::string s; + params.name.GetString(StringUtf8Multilang::kDefaultCode, s); + TEST_EQUAL(s, "Улица Веткина", ()); + params.name.GetString(StringUtf8Multilang::GetLangIndex("old_name"), s); + TEST_EQUAL(s, "Царская Ветка", ()); + } +} + +UNIT_CLASS_TEST(TestWithClassificator, OsmType_AltName) +{ + { + Tags const tags = { + {"tourism", "museum"}, + {"name", "Московский музей современного искусства"}, + {"alt_name", "MMOMA"} + }; + + auto const params = GetFeatureBuilderParams(tags); + + std::string s; + params.name.GetString(StringUtf8Multilang::kDefaultCode, s); + TEST_EQUAL(s, "Московский музей современного искусства", ()); + params.name.GetString(StringUtf8Multilang::GetLangIndex("alt_name"), s); + TEST_EQUAL(s, "MMOMA", ()); + } +} + UNIT_CLASS_TEST(TestWithClassificator, OsmType_MergeTags) { { diff --git a/generator/osm2type.cpp b/generator/osm2type.cpp index f2bf1dd028..6da26b786f 100644 --- a/generator/osm2type.cpp +++ b/generator/osm2type.cpp @@ -46,8 +46,8 @@ public: if (!token) return false; - // Is this an international (latin) name. - if (*token == "int_name") + // Is this an international (latin) / old / alternative name. + if (*token == "int_name" || *token == "old_name" || *token == "alt_name") { lang = *token; return m_savedNames.insert(lang).second; diff --git a/generator/osm_element.cpp b/generator/osm_element.cpp index 177a050973..2446f6c3ed 100644 --- a/generator/osm_element.cpp +++ b/generator/osm_element.cpp @@ -59,8 +59,6 @@ void OsmElement::AddTag(char const * key, char const * value) SKIP_KEY_BY_PREFIX("whitewater"); // https://wiki.openstreetmap.org/wiki/Whitewater_sports // In future we can use this tags for improve our search - SKIP_KEY_BY_PREFIX("old_name"); - SKIP_KEY_BY_PREFIX("alt_name"); SKIP_KEY_BY_PREFIX("nat_name"); SKIP_KEY_BY_PREFIX("reg_name"); SKIP_KEY_BY_PREFIX("loc_name"); diff --git a/generator/relation_tags.cpp b/generator/relation_tags.cpp index cdf3186bd5..9de17c4f72 100644 --- a/generator/relation_tags.cpp +++ b/generator/relation_tags.cpp @@ -122,8 +122,11 @@ void RelationTagsWay::Process(RelationElement const & e) Base::AddCustomTag({"addr:street", p.second}); // All "name" tags should be skipped. - if (strings::StartsWith(p.first, "name") || p.first == "int_name") + if (strings::StartsWith(p.first, "name") || p.first == "int_name" || p.first == "old_name" || + p.first == "alt_name") + { continue; + } if (!isBoundary && p.first == "boundary") continue;