Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArsentiy Milchakov <milcars@mapswithme.com>2017-04-27 15:29:25 +0300
committerr.kuznetsov <r.kuznetsov@corp.mail.ru>2017-05-19 15:15:41 +0300
commitab0718d981292bf92173f93eabb1a31da82e82e1 (patch)
tree2a6ce4ec65a5a09a00c132f456f2d0f42e7b0374 /indexer/feature_utils.cpp
parent8503501a5b22fd5b4ab5690d1e8ae113704cda05 (diff)
poi naming fix
Diffstat (limited to 'indexer/feature_utils.cpp')
-rw-r--r--indexer/feature_utils.cpp91
1 files changed, 44 insertions, 47 deletions
diff --git a/indexer/feature_utils.cpp b/indexer/feature_utils.cpp
index 1a968d5e9f..ac59409894 100644
--- a/indexer/feature_utils.cpp
+++ b/indexer/feature_utils.cpp
@@ -12,9 +12,9 @@
#include "base/base.hpp"
-#include "std/vector.hpp"
#include "std/unordered_map.hpp"
#include "std/utility.hpp"
+#include "std/vector.hpp"
namespace
{
@@ -25,10 +25,10 @@ int8_t GetIndex(string const & lang)
return StrUtf8::GetLangIndex(lang);
}
-unordered_map<int8_t, vector<int8_t>> const kExtendedDeviceLang =
+unordered_map<int8_t, vector<int8_t>> const kSimilarToDeviceLanguages =
{
- {GetIndex("be"), {GetIndex("be"), GetIndex("ru")}},
- {GetIndex("ru"), {GetIndex("ru"), GetIndex("be")}}
+ {GetIndex("be"), {GetIndex("ru")}},
+ {GetIndex("ru"), {GetIndex("be")}}
};
void GetMwmLangName(feature::RegionData const & regionData, StringUtf8Multilang const & src, string & out)
@@ -94,36 +94,48 @@ bool GetBestName(StringUtf8Multilang const & src, vector<int8_t> const & priorit
return bestIndex < priorityList.size();
}
-vector<int8_t> GetExtendedDeviceLanguages(int8_t deviceLang)
-{
- vector<int8_t> result;
-
- auto const it = kExtendedDeviceLang.find(deviceLang);
- if (it != kExtendedDeviceLang.cend())
- result = it->second;
- else
- result.push_back(deviceLang);
+vector<int8_t> GetSimilarToDeviceLanguages(int8_t deviceLang)
+{
+ auto const it = kSimilarToDeviceLanguages.find(deviceLang);
+ if (it != kSimilarToDeviceLanguages.cend())
+ return it->second;
- return result;
+ return {};
}
-void GetReadableNameImpl(feature::RegionData const & regionData, StringUtf8Multilang const & src,
- vector<int8_t> deviceLangs, bool preferDefault, bool allowTranslit,
- string & out)
+bool IsNativeLang(feature::RegionData const & regionData, int8_t deviceLang)
{
- ASSERT(!deviceLangs.empty(), ());
+ if (regionData.HasLanguage(deviceLang))
+ return true;
- if (preferDefault)
- {
- deviceLangs.insert(deviceLangs.cend(), {StrUtf8::kDefaultCode, StrUtf8::kInternationalCode,
- StrUtf8::kEnglishCode});
- }
- else
+ for (auto const lang : GetSimilarToDeviceLanguages(deviceLang))
{
- deviceLangs.insert(deviceLangs.cend(), {StrUtf8::kInternationalCode, StrUtf8::kEnglishCode});
+ if (regionData.HasLanguage(lang))
+ return true;
}
- if (GetBestName(src, deviceLangs, out))
+ return false;
+}
+
+vector<int8_t> MakePrimaryNamePriorityList(int8_t deviceLang, bool preferDefault)
+{
+ vector<int8_t> langPriority = {deviceLang};
+ if (preferDefault)
+ langPriority.push_back(StrUtf8::kDefaultCode);
+
+ auto const similarLangs = GetSimilarToDeviceLanguages(deviceLang);
+ langPriority.insert(langPriority.cend(), similarLangs.cbegin(), similarLangs.cend());
+ langPriority.insert(langPriority.cend(), {StrUtf8::kInternationalCode, StrUtf8::kEnglishCode});
+
+ return langPriority;
+}
+
+void GetReadableNameImpl(feature::RegionData const & regionData, StringUtf8Multilang const & src,
+ int8_t deviceLang, bool preferDefault, bool allowTranslit, string & out)
+{
+ vector<int8_t> langPriority = MakePrimaryNamePriorityList(deviceLang, preferDefault);
+
+ if (GetBestName(src, langPriority, out))
return;
if (allowTranslit && GetTransliteratedName(regionData, src, out))
@@ -288,17 +300,12 @@ void GetPreferredNames(RegionData const & regionData, StringUtf8Multilang const
if (src.IsEmpty())
return;
- vector<int8_t> primaryCodes = GetExtendedDeviceLanguages(deviceLang);
-
// When the language of the user is equal to one of the languages of the MWM
- // only single name scheme is used.
- for (auto const code : primaryCodes)
- {
- if (regionData.HasLanguage(code))
- return GetReadableNameImpl(regionData, src, move(primaryCodes), true, allowTranslit, primary);
- }
+ // (or similar languages) only single name scheme is used.
+ if (IsNativeLang(regionData, deviceLang))
+ return GetReadableNameImpl(regionData, src, deviceLang, true, allowTranslit, primary);
- primaryCodes.insert(primaryCodes.cend(), {StrUtf8::kInternationalCode, StrUtf8::kEnglishCode});
+ vector<int8_t> primaryCodes = MakePrimaryNamePriorityList(deviceLang, false);
if (!GetBestName(src, primaryCodes, primary) && allowTranslit)
GetTransliteratedName(regionData, src, primary);
@@ -327,20 +334,10 @@ void GetReadableName(RegionData const & regionData, StringUtf8Multilang const &
if (src.IsEmpty())
return;
- vector<int8_t> deviceLangs = GetExtendedDeviceLanguages(deviceLang);
-
// If MWM contains user's language.
- bool preferDefault = false;
- for (auto const lang : deviceLangs)
- {
- if (regionData.HasLanguage(lang))
- {
- preferDefault = true;
- break;
- }
- }
+ bool const preferDefault = IsNativeLang(regionData, deviceLang);
- GetReadableNameImpl(regionData, src, move(deviceLangs), preferDefault, allowTranslit, out);
+ GetReadableNameImpl(regionData, src, deviceLang, preferDefault, allowTranslit, out);
}
int8_t GetNameForSearchOnBooking(RegionData const & regionData, StringUtf8Multilang const & src,