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

cuisines.cpp « indexer - github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: 6b62af7a184142c0957b0e11e853f79fd586e0ad (plain)
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
#include "indexer/cuisines.hpp"

#include "base/stl_add.hpp"
#include "base/string_utils.hpp"

#include "std/utility.hpp"

namespace osm
{
// static
Cuisines & Cuisines::Instance()
{
  static Cuisines instance;
  return instance;
}

namespace
{
void InitializeCuisinesForLocale(platform::TGetTextByIdPtr & ptr, string const & lang)
{
  if (!ptr || ptr->GetLocale() != lang)
    ptr = GetTextByIdFactory(platform::TextSource::Cuisines, lang);
  CHECK(ptr, ("Error loading cuisines translations for", lang, "language."));
}

string TranslateImpl(platform::TGetTextByIdPtr const & ptr, string const & key)
{
  ASSERT(ptr, ("ptr should be initialized before calling this function."));
  return ptr->operator()(key);
}
}  // namespace

void Cuisines::Parse(string const & osmRawCuisinesTagValue, vector<string> & outCuisines)
{
  strings::Tokenize(osmRawCuisinesTagValue, ";", MakeBackInsertFunctor(outCuisines));
}

void Cuisines::ParseAndLocalize(string const & osmRawCuisinesTagValue, vector<string> & outCuisines,
                                string const & lang)
{
  Parse(osmRawCuisinesTagValue, outCuisines);
  InitializeCuisinesForLocale(m_translations, lang);
  for (auto & cuisine : outCuisines)
  {
    string tr = TranslateImpl(m_translations, cuisine);
    if (!tr.empty())
      cuisine = move(tr);
  }
}

string Cuisines::Translate(string const & singleOsmCuisine, string const & lang)
{
  ASSERT(singleOsmCuisine.find(';') == string::npos,
         ("Please call Parse method for raw OSM cuisine string."));
  InitializeCuisinesForLocale(m_translations, lang);
  return TranslateImpl(m_translations, singleOsmCuisine);
}

TAllCuisines Cuisines::AllSupportedCuisines() { return m_translations->GetAllSortedTranslations(); }
}  // namespace osm