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:
authorDaria Volvenkova <d.volvenkova@corp.mail.ru>2017-03-28 15:16:47 +0300
committerDaria Volvenkova <d.volvenkova@corp.mail.ru>2017-03-30 14:54:36 +0300
commit8c3d4f78c7df9ae3fcb0fa912f9ea18803dd7e40 (patch)
treebb1016f27e80664676e8f11db6d06db8972e1e2b /indexer/feature_utils.cpp
parent2d5a2fd236c095bc1053a12fa4f4862e4b3693a6 (diff)
Corrected priority of transliteration.
Diffstat (limited to 'indexer/feature_utils.cpp')
-rw-r--r--indexer/feature_utils.cpp57
1 files changed, 30 insertions, 27 deletions
diff --git a/indexer/feature_utils.cpp b/indexer/feature_utils.cpp
index ef36b6fa47..6cc905e586 100644
--- a/indexer/feature_utils.cpp
+++ b/indexer/feature_utils.cpp
@@ -30,7 +30,7 @@ void GetMwmLangName(feature::RegionData const & regionData, StringUtf8Multilang
}
}
-void GetTransliteratedName(feature::RegionData const & regionData, StringUtf8Multilang const & src, string & out)
+bool GetTransliteratedName(feature::RegionData const & regionData, StringUtf8Multilang const & src, string & out)
{
vector<int8_t> mwmLangCodes;
regionData.GetLanguages(mwmLangCodes);
@@ -42,15 +42,17 @@ void GetTransliteratedName(feature::RegionData const & regionData, StringUtf8Mul
{
out = Transliteration::GetInstance().Transliterate(srcName, code);
if (!out.empty())
- return;
+ return true;
}
}
if (!mwmLangCodes.empty() && src.GetString(StringUtf8Multilang::kDefaultCode, srcName))
out = Transliteration::GetInstance().Transliterate(srcName, mwmLangCodes[0]);
+ return !out.empty();
}
-void GetBestName(StringUtf8Multilang const & src, vector<int8_t> const & priorityList, string & out)
+bool GetBestName(StringUtf8Multilang const & src, vector<int8_t> const & priorityList, string & out)
{
+ out.clear();
auto bestIndex = priorityList.size();
auto const findAndSet = [](vector<int8_t> const & langs, int8_t const code, string const & name,
@@ -80,6 +82,8 @@ void GetBestName(StringUtf8Multilang const & src, vector<int8_t> const & priorit
{
out = out.substr(0, out.find_first_of(','));
}
+
+ return !out.empty();
}
} // namespace
@@ -224,7 +228,7 @@ int GetFeatureViewportScale(TypesHolder const & types)
}
void GetPreferredNames(RegionData const & regionData, StringUtf8Multilang const & src,
- int8_t const deviceLang, string & primary, string & secondary)
+ int8_t const deviceLang, bool allowTranslit, string & primary, string & secondary)
{
primary.clear();
secondary.clear();
@@ -232,31 +236,31 @@ void GetPreferredNames(RegionData const & regionData, StringUtf8Multilang const
if (src.IsEmpty())
return;
- GetBestName(src, {deviceLang, StrUtf8::kInternationalCode}, primary);
- if (primary.empty())
+ if (!GetBestName(src, {deviceLang, StrUtf8::kInternationalCode, StrUtf8::kEnglishCode}, primary) &&
+ allowTranslit)
{
GetTransliteratedName(regionData, src, primary);
- if (primary.empty())
- GetBestName(src, {StrUtf8::kEnglishCode}, primary);
}
- vector<int8_t> mwmLangCodes;
- regionData.GetLanguages(mwmLangCodes);
vector<int8_t> secondaryCodes = {StrUtf8::kDefaultCode,
StrUtf8::kInternationalCode};
+
+ vector<int8_t> mwmLangCodes;
+ regionData.GetLanguages(mwmLangCodes);
secondaryCodes.insert(secondaryCodes.end(), mwmLangCodes.begin(), mwmLangCodes.end());
+
secondaryCodes.push_back(StrUtf8::kEnglishCode);
GetBestName(src, secondaryCodes, secondary);
if (primary.empty())
- primary.swap(secondary);
+ primary.swap(secondary);
else if (!secondary.empty() && primary.find(secondary) != string::npos)
secondary.clear();
}
void GetReadableName(RegionData const & regionData, StringUtf8Multilang const & src,
- int8_t const deviceLang, string & out)
+ int8_t const deviceLang, bool allowTranslit, string & out)
{
out.clear();
@@ -267,25 +271,24 @@ void GetReadableName(RegionData const & regionData, StringUtf8Multilang const &
// If MWM contains user's language.
bool const preferDefault = regionData.HasLanguage(deviceLang);
if (preferDefault)
- codes = {deviceLang, StrUtf8::kDefaultCode, StrUtf8::kInternationalCode};
+ codes = {deviceLang, StrUtf8::kDefaultCode, StrUtf8::kInternationalCode, StrUtf8::kEnglishCode};
else
- codes = {deviceLang, StrUtf8::kInternationalCode};
+ codes = {deviceLang, StrUtf8::kInternationalCode, StrUtf8::kEnglishCode};
+
+ if (GetBestName(src, codes, out))
+ return;
+
+ if (allowTranslit && GetTransliteratedName(regionData, src, out))
+ return;
- GetBestName(src, codes, out);
- if (out.empty())
+ if (!preferDefault)
{
- GetTransliteratedName(regionData, src, out);
- if (out.empty())
- {
- if (preferDefault)
- codes = {StrUtf8::kEnglishCode};
- else
- codes = {StrUtf8::kEnglishCode, StrUtf8::kDefaultCode};
- GetBestName(src, codes, out);
- if (out.empty())
- GetMwmLangName(regionData, src, out);
- }
+ codes = {StrUtf8::kDefaultCode};
+ if (GetBestName(src, codes, out))
+ return;
}
+
+ GetMwmLangName(regionData, src, out);
}
} // namespace feature