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:
authorAlex Zolotarev <deathbaba@gmail.com>2011-05-11 23:35:48 +0400
committerAlex Zolotarev <alex@maps.me>2015-09-23 01:17:14 +0300
commit932eb8340b49303f1f96ddbced549c0b8f0a1651 (patch)
treef3a7d628922ed349ee43a7f84051c7f9381681f0 /coding/multilang_utf8_string.cpp
parent85d29433d58af14bc4ad3fbbf0fc995da460e3a9 (diff)
Added language preferences support for displayed text
Diffstat (limited to 'coding/multilang_utf8_string.cpp')
-rw-r--r--coding/multilang_utf8_string.cpp54
1 files changed, 51 insertions, 3 deletions
diff --git a/coding/multilang_utf8_string.cpp b/coding/multilang_utf8_string.cpp
index 297d2c22d8..0a7a1d844e 100644
--- a/coding/multilang_utf8_string.cpp
+++ b/coding/multilang_utf8_string.cpp
@@ -1,10 +1,16 @@
#include "multilang_utf8_string.hpp"
+char StringUtf8Multilang::m_priorities[] =
+{
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
+ 61, 62, 63
+};
-
-char StringUtf8Multilang::GetLangIndex(string const & lang) const
+char StringUtf8Multilang::GetLangIndex(string const & lang)
{
- char const * arr[] = { "def",
+ static char const * arr[] = { "default",
"en", "ja", "fr", "ko_rm", "ar", "de", "ru", "sv", "zh", "fi",
"ko", "ka", "he", "be", "nl", "ga", "ja_rm", "el", "it", "es",
"th", "zh_pinyin", "ca", "cy", "hu", "hsb", "sr", "fa", "eu", "pl",
@@ -75,3 +81,45 @@ bool StringUtf8Multilang::GetString(char lang, string & utf8s) const
return false;
}
+
+void StringUtf8Multilang::SetPreferableLanguages(vector<string> const & langCodes)
+{
+ CHECK_EQUAL(langCodes.size(), 64, ());
+ for (size_t i = 0; i < langCodes.size(); ++i)
+ {
+ char index = GetLangIndex(langCodes[i]);
+ if (index >= 0)
+ m_priorities[static_cast<size_t>(index)] = i;
+ else
+ {
+ ASSERT(false, ("Invalid language code"));
+ }
+ CHECK_GREATER_OR_EQUAL(m_priorities[i], 0, ("Unsupported language", langCodes[i]));
+ }
+}
+
+void StringUtf8Multilang::GetPreferableString(string & utf8s) const
+{
+ size_t i = 0;
+ size_t const sz = m_s.size();
+
+ int currPriority = 256;
+ while (i < sz)
+ {
+ size_t const next = GetNextIndex(i);
+
+ int p = m_priorities[m_s[i] & 0x3F];
+ if (p < currPriority)
+ {
+ ++i;
+
+ currPriority = p;
+ utf8s.assign(m_s.c_str() + i, next - i);
+
+ if (p == 0)
+ return;
+ }
+
+ i = next;
+ }
+}