Merge pull request #6132 from darina/translit-setting-master

Translit setting master
This commit is contained in:
Roman Kuznetsov 2017-05-26 13:31:43 +03:00 committed by GitHub
commit e218cec70a
5 changed files with 79 additions and 5 deletions

View file

@ -12,7 +12,6 @@
#include "std/unique_ptr.hpp"
#include <atomic>
#include <cstring>
#include <mutex>
@ -27,6 +26,10 @@ struct Transliteration::TransliteratorInfo
std::unique_ptr<Transliterator> m_transliterator;
};
Transliteration::Transliteration()
: m_mode(Mode::Enabled)
{}
Transliteration::~Transliteration()
{
// The use of u_cleanup() just before an application terminates is optional,
@ -59,8 +62,16 @@ void Transliteration::Init(std::string const & icuDataDir)
}
}
void Transliteration::SetMode(Transliteration::Mode mode)
{
m_mode = mode;
}
bool Transliteration::Transliterate(std::string const & str, int8_t langCode, std::string & out) const
{
if (m_mode != Mode::Enabled)
return false;
if (str.empty() || strings::IsASCIIString(str))
return false;

View file

@ -1,5 +1,6 @@
#pragma once
#include <atomic>
#include <map>
#include <memory>
#include <string>
@ -7,16 +8,25 @@
class Transliteration
{
public:
enum class Mode
{
Enabled,
Disabled
};
~Transliteration();
static Transliteration & Instance();
void Init(std::string const & icuDataDir);
void SetMode(Mode mode);
bool Transliterate(std::string const & str, int8_t langCode, std::string & out) const;
private:
Transliteration() = default;
Transliteration();
std::atomic<Mode> m_mode;
struct TransliteratorInfo;
std::map<std::string, std::unique_ptr<TransliteratorInfo>> m_transliterators;

View file

@ -134,6 +134,7 @@ char const kAllowAutoZoom[] = "AutoZoom";
char const kTrafficEnabledKey[] = "TrafficEnabled";
char const kTrafficSimplifiedColorsKey[] = "TrafficSimplifiedColors";
char const kLargeFontsSize[] = "LargeFontsSize";
char const kTranslitMode[] = "TransliterationMode";
#if defined(OMIM_OS_ANDROID)
char const kICUDataFile[] = "icudt57l.dat";
@ -1485,6 +1486,9 @@ void Framework::InitTransliteration()
#else
Transliteration::Instance().Init(GetPlatform().ResourcesDir());
#endif
if (!LoadTransliteration())
Transliteration::Instance().SetMode(Transliteration::Mode::Disabled);
}
storage::TCountryId Framework::GetCountryIndex(m2::PointD const & pt) const
@ -2911,6 +2915,27 @@ void Framework::SetRouteFinishPoint(m2::PointD const & pt, bool isValid)
m_drapeEngine->SetRoutePoint(pt, false /* isStart */, isValid);
}
void Framework::AllowTransliteration(bool allowTranslit)
{
Transliteration::Instance().SetMode(allowTranslit ? Transliteration::Mode::Enabled
: Transliteration::Mode::Disabled);
InvalidateRect(GetCurrentViewport());
}
bool Framework::LoadTransliteration()
{
Transliteration::Mode mode;
if (settings::Get(kTranslitMode, mode))
return mode == Transliteration::Mode::Enabled;
return true;
}
void Framework::SaveTransliteration(bool allowTranslit)
{
settings::Set(kTranslitMode, allowTranslit ? Transliteration::Mode::Enabled
: Transliteration::Mode::Disabled);
}
void Framework::Allow3dMode(bool allow3d, bool allow3dBuildings)
{
CallDrapeFunction(bind(&df::DrapeEngine::Allow3dMode, _1, allow3d, allow3dBuildings));

View file

@ -814,6 +814,10 @@ public:
void SetRouteStartPoint(m2::PointD const & pt, bool isValid);
void SetRouteFinishPoint(m2::PointD const & pt, bool isValid);
void AllowTransliteration(bool allowTranslit);
bool LoadTransliteration();
void SaveTransliteration(bool allowTranslit);
void Allow3dMode(bool allow3d, bool allow3dBuildings);
void Save3dMode(bool allow3d, bool allow3dBuildings);
void Load3dMode(bool & allow3d, bool & allow3dBuildings);

View file

@ -4,12 +4,13 @@
#include "defines.hpp"
#include "coding/reader_streambuf.hpp"
#include "coding/file_writer.hpp"
#include "coding/file_reader.hpp"
#include "coding/file_writer.hpp"
#include "coding/reader_streambuf.hpp"
#include "coding/transliteration.hpp"
#include "geometry/rect2d.hpp"
#include "geometry/any_rect2d.hpp"
#include "geometry/rect2d.hpp"
#include "base/logging.hpp"
@ -327,6 +328,29 @@ bool FromString<location::EMyPositionMode>(string const & s, location::EMyPositi
return true;
}
template <>
string ToString<Transliteration::Mode>(Transliteration::Mode const & mode)
{
switch (mode)
{
case Transliteration::Mode::Enabled: return "Enabled";
case Transliteration::Mode::Disabled: return "Disabled";
}
}
template <>
bool FromString<Transliteration::Mode>(string const & s, Transliteration::Mode & mode)
{
if (s == "Enabled")
mode = Transliteration::Mode::Enabled;
else if (s == "Disabled")
mode = Transliteration::Mode::Disabled;
else
return false;
return true;
}
bool IsFirstLaunchForDate(int date)
{
constexpr char const * kFirstLaunchKey = "FirstLaunchOnDate";