// static void EditableMapObject::RemoveFakeNames(FakeNames const & fakeNames, StringUtf8Multilang & name) { if (fakeNames.m_names.empty()) return; int8_t newDefaultNameCode = StringUtf8Multilang::kUnsupportedLanguageCode; size_t changedCount = 0; string defaultName; name.GetString(StringUtf8Multilang::kDefaultCode, defaultName); // New default name calculation priority: 1. name on mwm language, 2. english name. for (auto it = fakeNames.m_names.rbegin(); it != fakeNames.m_names.rend(); ++it) { string tempName; if (!name.GetString(it->m_code, tempName)) continue; if (tempName != it->m_filledName) { if (!tempName.empty()) newDefaultNameCode = it->m_code; ++changedCount; } } // If all previously filled fake names were changed - try to change the default name. if (changedCount == fakeNames.m_names.size()) { if (!TryToFillDefaultNameFromCode(newDefaultNameCode, name)) TryToFillDefaultNameFromAnyLanguage(name); } RemoveFakesFromName(fakeNames, name); }
void TestMultilangString(lang_string const * arr, size_t count) { StringUtf8Multilang s; for (size_t i = 0; i < count; ++i) { string src(arr[i].m_str); TEST(utf8::is_valid(src.begin(), src.end()), ()); s.AddString(arr[i].m_lang, src); string comp; TEST(s.GetString(arr[i].m_lang, comp), ()); TEST_EQUAL(src, comp, ()); } for (size_t i = 0; i < count; ++i) { string comp; TEST(s.GetString(arr[i].m_lang, comp), ()); TEST_EQUAL(arr[i].m_str, comp, ()); } string test; TEST(!s.GetString("xxx", test), ()); }