forked from organicmaps/organicmaps
[search] If category name starts with digit, it represents a minimal prefix length to start suggest.
This commit is contained in:
parent
6b7c05b913
commit
e1ba349a1f
3 changed files with 50 additions and 22 deletions
|
@ -75,7 +75,23 @@ size_t CategoriesHolder::LoadFromStream(istream & stream)
|
|||
}
|
||||
while (++iter)
|
||||
{
|
||||
cat.m_synonyms.push_back(make_pair(langCode, *iter));
|
||||
Category::Name name;
|
||||
name.m_Lang = langCode;
|
||||
name.m_Name = *iter;
|
||||
|
||||
// ASSERT(name.m_Name.empty(), ());
|
||||
if (name.m_Name.empty())
|
||||
continue;
|
||||
|
||||
if (name.m_Name[0] >= '0' && name.m_Name[0] <= '9')
|
||||
{
|
||||
name.m_prefixLengthToSuggest = name.m_Name[0] - '0';
|
||||
name.m_Name = name.m_Name.substr(1);
|
||||
}
|
||||
else
|
||||
name.m_prefixLengthToSuggest = 10;
|
||||
|
||||
cat.m_synonyms.push_back(name);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
|
||||
#include "../std/vector.hpp"
|
||||
#include "../std/string.hpp"
|
||||
#include "../std/utility.hpp"
|
||||
#include "../std/fstream.hpp"
|
||||
#include "../std/algorithm.hpp"
|
||||
|
||||
|
@ -14,8 +13,16 @@ struct Category
|
|||
{
|
||||
/// Classificator types
|
||||
vector<uint32_t> m_types;
|
||||
|
||||
struct Name
|
||||
{
|
||||
string m_Name;
|
||||
int8_t m_Lang;
|
||||
uint8_t m_prefixLengthToSuggest;
|
||||
};
|
||||
|
||||
/// <language, synonym>
|
||||
vector<pair<int8_t, string> > m_synonyms;
|
||||
vector<Name> m_synonyms;
|
||||
};
|
||||
|
||||
class CategoriesHolder
|
||||
|
|
|
@ -12,12 +12,12 @@
|
|||
#include "../../std/sstream.hpp"
|
||||
|
||||
char const * TEST_STRING = "amenity-bench\n"
|
||||
"en:bench|sit down|to sit\n"
|
||||
"de:bank|auf die strafbank schicken\n"
|
||||
"en:1bench|sit down|to sit\n"
|
||||
"de:0bank|auf die strafbank schicken\n"
|
||||
"\n"
|
||||
"place-village|place-hamlet\n"
|
||||
"en:village\n"
|
||||
"de:dorf|weiler";
|
||||
"de:2dorf|4weiler";
|
||||
|
||||
struct Checker
|
||||
{
|
||||
|
@ -31,16 +31,19 @@ struct Checker
|
|||
{
|
||||
TEST_EQUAL(cat.m_types.size(), 1, ());
|
||||
TEST_EQUAL(cat.m_synonyms.size(), 5, ());
|
||||
TEST_EQUAL(cat.m_synonyms[0].first, StringUtf8Multilang::GetLangIndex("en"), ());
|
||||
TEST_EQUAL(cat.m_synonyms[0].second, "bench", ());
|
||||
TEST_EQUAL(cat.m_synonyms[1].first, StringUtf8Multilang::GetLangIndex("en"), ());
|
||||
TEST_EQUAL(cat.m_synonyms[1].second, "sit down", ());
|
||||
TEST_EQUAL(cat.m_synonyms[2].first, StringUtf8Multilang::GetLangIndex("en"), ());
|
||||
TEST_EQUAL(cat.m_synonyms[2].second, "to sit", ());
|
||||
TEST_EQUAL(cat.m_synonyms[3].first, StringUtf8Multilang::GetLangIndex("de"), ());
|
||||
TEST_EQUAL(cat.m_synonyms[3].second, "bank", ());
|
||||
TEST_EQUAL(cat.m_synonyms[4].first, StringUtf8Multilang::GetLangIndex("de"), ());
|
||||
TEST_EQUAL(cat.m_synonyms[4].second, "auf die strafbank schicken", ());
|
||||
TEST_EQUAL(cat.m_synonyms[0].m_Lang, StringUtf8Multilang::GetLangIndex("en"), ());
|
||||
TEST_EQUAL(cat.m_synonyms[0].m_Name, "bench", ());
|
||||
TEST_EQUAL(cat.m_synonyms[0].m_prefixLengthToSuggest, 1, ());
|
||||
TEST_EQUAL(cat.m_synonyms[1].m_Lang, StringUtf8Multilang::GetLangIndex("en"), ());
|
||||
TEST_EQUAL(cat.m_synonyms[1].m_Name, "sit down", ());
|
||||
TEST_EQUAL(cat.m_synonyms[1].m_prefixLengthToSuggest, 10, ());
|
||||
TEST_EQUAL(cat.m_synonyms[2].m_Lang, StringUtf8Multilang::GetLangIndex("en"), ());
|
||||
TEST_EQUAL(cat.m_synonyms[2].m_Name, "to sit", ());
|
||||
TEST_EQUAL(cat.m_synonyms[3].m_Lang, StringUtf8Multilang::GetLangIndex("de"), ());
|
||||
TEST_EQUAL(cat.m_synonyms[3].m_Name, "bank", ());
|
||||
TEST_EQUAL(cat.m_synonyms[3].m_prefixLengthToSuggest, 0, ());
|
||||
TEST_EQUAL(cat.m_synonyms[4].m_Lang, StringUtf8Multilang::GetLangIndex("de"), ());
|
||||
TEST_EQUAL(cat.m_synonyms[4].m_Name, "auf die strafbank schicken", ());
|
||||
++m_count;
|
||||
}
|
||||
break;
|
||||
|
@ -48,12 +51,14 @@ struct Checker
|
|||
{
|
||||
TEST_EQUAL(cat.m_types.size(), 2, ());
|
||||
TEST_EQUAL(cat.m_synonyms.size(), 3, ());
|
||||
TEST_EQUAL(cat.m_synonyms[0].first, StringUtf8Multilang::GetLangIndex("en"), ());
|
||||
TEST_EQUAL(cat.m_synonyms[0].second, "village", ());
|
||||
TEST_EQUAL(cat.m_synonyms[1].first, StringUtf8Multilang::GetLangIndex("de"), ());
|
||||
TEST_EQUAL(cat.m_synonyms[1].second, "dorf", ());
|
||||
TEST_EQUAL(cat.m_synonyms[2].first, StringUtf8Multilang::GetLangIndex("de"), ());
|
||||
TEST_EQUAL(cat.m_synonyms[2].second, "weiler", ());
|
||||
TEST_EQUAL(cat.m_synonyms[0].m_Lang, StringUtf8Multilang::GetLangIndex("en"), ());
|
||||
TEST_EQUAL(cat.m_synonyms[0].m_Name, "village", ());
|
||||
TEST_EQUAL(cat.m_synonyms[1].m_Lang, StringUtf8Multilang::GetLangIndex("de"), ());
|
||||
TEST_EQUAL(cat.m_synonyms[1].m_Name, "dorf", ());
|
||||
TEST_EQUAL(cat.m_synonyms[1].m_prefixLengthToSuggest, 2, ());
|
||||
TEST_EQUAL(cat.m_synonyms[2].m_Lang, StringUtf8Multilang::GetLangIndex("de"), ());
|
||||
TEST_EQUAL(cat.m_synonyms[2].m_Name, "weiler", ());
|
||||
TEST_EQUAL(cat.m_synonyms[2].m_prefixLengthToSuggest, 4, ());
|
||||
++m_count;
|
||||
}
|
||||
break;
|
||||
|
|
Loading…
Add table
Reference in a new issue