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>2016-11-02 12:43:23 +0300
committerIlya Grechuhin <i.grechuhin@gmail.com>2016-11-11 11:05:56 +0300
commit7bd2eed6a4825cf4036011079fa1c8abb7ef5915 (patch)
treee37ec9364de67211ce0f4745ffd76da48f974114 /indexer/feature_utils.cpp
parent36e7c13457c8850567276c60eb25dabb2c720ea5 (diff)
Naming priority for poi objects was changed
Diffstat (limited to 'indexer/feature_utils.cpp')
-rw-r--r--indexer/feature_utils.cpp121
1 files changed, 56 insertions, 65 deletions
diff --git a/indexer/feature_utils.cpp b/indexer/feature_utils.cpp
index 1da89805d2..a4b94028c3 100644
--- a/indexer/feature_utils.cpp
+++ b/indexer/feature_utils.cpp
@@ -7,8 +7,6 @@
#include "geometry/point2d.hpp"
-#include "platform/preferred_languages.hpp"
-
#include "coding/multilang_utf8_string.hpp"
#include "base/base.hpp"
@@ -17,15 +15,12 @@
namespace
{
-void GetMwmLangName(FeatureID const & id, StringUtf8Multilang const & src, string & out)
-{
- auto const mwmInfo = id.m_mwmId.GetInfo();
-
- if (!mwmInfo)
- return;
+using StrUtf8 = StringUtf8Multilang;
+void GetMwmLangName(feature::RegionData const & regionData, StringUtf8Multilang const & src, string & out)
+{
vector<int8_t> mwmLangCodes;
- mwmInfo->GetRegionData().GetLanguages(mwmLangCodes);
+ regionData.GetLanguages(mwmLangCodes);
for (auto const code : mwmLangCodes)
{
@@ -34,22 +29,9 @@ void GetMwmLangName(FeatureID const & id, StringUtf8Multilang const & src, strin
}
}
-void GetNames(FeatureID const & id, StringUtf8Multilang const & src, string & primary,
- string & secondary)
+void GetBestName(StringUtf8Multilang const & src, vector<int8_t> const & priorityList, string & out)
{
- primary.clear();
- secondary.clear();
-
- if (src.IsEmpty())
- return;
-
- vector<int8_t> primaryCodes = {StringUtf8Multilang::kDefaultCode};
- vector<int8_t> secondaryCodes = {StringUtf8Multilang::GetLangIndex(languages::GetCurrentNorm()),
- StringUtf8Multilang::kInternationalCode,
- StringUtf8Multilang::kEnglishCode};
-
- auto primaryIndex = primaryCodes.size();
- auto secondaryIndex = secondaryCodes.size();
+ auto bestIndex = priorityList.size();
auto const findAndSet = [](vector<int8_t> const & langs, int8_t const code, string const & name,
size_t & bestIndex, string & outName)
@@ -64,23 +46,19 @@ void GetNames(FeatureID const & id, StringUtf8Multilang const & src, string & pr
src.ForEach([&](int8_t code, string const & name)
{
- if (primaryIndex != 0)
- findAndSet(primaryCodes, code, name, primaryIndex, primary);
+ if (bestIndex == 0)
+ return false;
- if (secondaryIndex != 0)
- findAndSet(secondaryCodes, code, name, secondaryIndex, secondary);
+ findAndSet(priorityList, code, name, bestIndex, out);
return true;
});
- if (primary.empty())
- GetMwmLangName(id, src, primary);
-
- if (secondaryIndex < secondaryCodes.size() &&
- secondaryCodes[secondaryIndex] == StringUtf8Multilang::kInternationalCode)
+ // There are many "junk" names in Arabian island.
+ if (bestIndex < priorityList.size() &&
+ priorityList[bestIndex] == StrUtf8::kInternationalCode)
{
- // There are many "junk" names in Arabian island.
- secondary = secondary.substr(0, secondary.find_first_of(','));
+ out = out.substr(0, out.find_first_of(','));
}
}
} // namespace
@@ -225,41 +203,54 @@ int GetFeatureViewportScale(TypesHolder const & types)
return impl::GetFeatureEstimator().GetViewportScale(types);
}
-void GetPreferredNames(FeatureID const & id, StringUtf8Multilang const & src, string & primary,
- string & secondary)
+void GetPreferredNames(RegionData const & regionData, StringUtf8Multilang const & src,
+ int8_t const deviceLang, string & primary, string & secondary)
{
- // Primary name using priority:
- // - default name;
- // - country language name.
- // Secondary name using priority:
- // - device language name;
- // - international name;
- // - english name.
- GetNames(id, src, primary, secondary);
+ primary.clear();
+ secondary.clear();
+
+ if (src.IsEmpty())
+ return;
+
+ vector<int8_t> const primaryCodes = {deviceLang,
+ StrUtf8::kInternationalCode,
+ StrUtf8::kEnglishCode};
+ 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, primaryCodes, primary);
+ GetBestName(src, secondaryCodes, secondary);
if (primary.empty())
- {
- primary.swap(secondary);
- }
- else
- {
- // Filter out similar intName.
- if (!secondary.empty() && primary.find(secondary) != string::npos)
- secondary.clear();
- }
+ primary.swap(secondary);
+ else if (!secondary.empty() && primary.find(secondary) != string::npos)
+ secondary.clear();
}
-void GetReadableName(FeatureID const & id, StringUtf8Multilang const & src, string & out)
+void GetReadableName(RegionData const & regionData, StringUtf8Multilang const & src,
+ int8_t const deviceLang, string & out)
{
- // Names using priority:
- // - device language name;
- // - international name;
- // - english name;
- // - default name;
- // - country language name.
- // Secondary name is preffered to display on the map and place page.
- string primary, secondary;
- GetNames(id, src, primary, secondary);
- out = secondary.empty() ? primary : secondary;
+ out.clear();
+
+ if (src.IsEmpty())
+ return;
+
+ vector<int8_t> codes;
+ // If MWM contains user's language.
+ if (regionData.HasLanguage(deviceLang))
+ codes = {deviceLang, StrUtf8::kDefaultCode, StrUtf8::kInternationalCode, StrUtf8::kEnglishCode};
+ else
+ codes = {deviceLang, StrUtf8::kInternationalCode, StrUtf8::kEnglishCode, StrUtf8::kDefaultCode};
+
+ GetBestName(src, codes, out);
+
+ if (out.empty())
+ GetMwmLangName(regionData, src, out);
}
} // namespace feature