aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/t9write/plugin/t9writeinputmethod.cpp
diff options
context:
space:
mode:
authorJarkko Koivikko <jarkko.koivikko@code-q.fi>2018-10-08 20:55:36 +0300
committerJarkko Koivikko <jarkko.koivikko@code-q.fi>2018-10-11 08:26:45 +0000
commitca5ee85100306bbfe5746d0dc56e07c534884666 (patch)
tree9bd77d7874a489d6c1c7f5d74e90736aef97032f /src/plugins/t9write/plugin/t9writeinputmethod.cpp
parent6bcc33aea90d5d725a08b51eda7374a50408ee07 (diff)
t9write: Add Thai handwriting recognition
[ChangeLog] Added Thai handwriting recognition (T9 Write). Change-Id: Idb34fcf07d0318bbca6e6573e5859edb375f205f Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/plugins/t9write/plugin/t9writeinputmethod.cpp')
-rw-r--r--src/plugins/t9write/plugin/t9writeinputmethod.cpp54
1 files changed, 44 insertions, 10 deletions
diff --git a/src/plugins/t9write/plugin/t9writeinputmethod.cpp b/src/plugins/t9write/plugin/t9writeinputmethod.cpp
index 5ea1fd42..03658ea7 100644
--- a/src/plugins/t9write/plugin/t9writeinputmethod.cpp
+++ b/src/plugins/t9write/plugin/t9writeinputmethod.cpp
@@ -188,6 +188,7 @@ public:
case T9WriteInputMethod::EngineMode::Alphabetic:
case T9WriteInputMethod::EngineMode::Arabic:
case T9WriteInputMethod::EngineMode::Hebrew:
+ case T9WriteInputMethod::EngineMode::Thai:
cjk = false;
break;
case T9WriteInputMethod::EngineMode::SimplifiedChinese:
@@ -317,6 +318,13 @@ public:
hwrDbPath.append(QLatin1String("hebrew/_databas_le.bin"));
#endif
break;
+ case T9WriteInputMethod::EngineMode::Thai:
+#if T9WRITEAPIMAJORVERNUM >= 21
+ hwrDbPath.append(QLatin1String("thai/hwrDB_le.bin"));
+#else
+ hwrDbPath.append(QLatin1String("thai/_databas_le.bin"));
+#endif
+ break;
case T9WriteInputMethod::EngineMode::SimplifiedChinese:
hwrDbPath.append(QLatin1String("cjk_S_gb18030_le.hdb"));
break;
@@ -349,13 +357,20 @@ public:
QStringList languageCountry = locale.name().split(QLatin1String("_"));
if (languageCountry.length() != 2)
return QString();
+ const QString language = languageCountry[0].toUpper();
QString dictionary;
QDirIterator it(dir, QDirIterator::NoIteratorFlags);
while (it.hasNext()) {
QString fileEntry = it.next();
+ const QFileInfo fileInfo(fileEntry);
+
+ if (fileInfo.isDir())
+ continue;
- if (!fileEntry.contains(QLatin1String("_") + languageCountry[0].toUpper()))
+ const QString fileName(fileInfo.fileName());
+ if (!fileName.startsWith(language) &&
+ !fileName.startsWith(QLatin1String("zzEval_") + language))
continue;
if (fileEntry.endsWith(QLatin1String(".ldb"))) {
@@ -419,15 +434,15 @@ public:
finishRecognition();
- if (!initEngine(mapLocaleToEngineMode(locale)))
- return false;
-
DECUMA_UINT32 language = mapToDecumaLanguage(locale, inputMode);
if (language == DECUMA_LANG_GSMDEFAULT) {
qCCritical(lcT9Write) << "Language is not supported" << locale.name();
return false;
}
+ if (!initEngine(mapLocaleToEngineMode(locale, language)))
+ return false;
+
int isLanguageSupported = 0;
DECUMA_API(DatabaseIsLanguageSupported)(sessionSettings.pStaticDB, language, &isLanguageSupported);
if (!isLanguageSupported) {
@@ -477,7 +492,7 @@ public:
return status == decumaNoError;
}
- T9WriteInputMethod::EngineMode mapLocaleToEngineMode(const QLocale &locale)
+ T9WriteInputMethod::EngineMode mapLocaleToEngineMode(const QLocale &locale, DECUMA_UINT32 language = 0)
{
#ifdef HAVE_T9WRITE_CJK
switch (locale.language()) {
@@ -497,6 +512,7 @@ public:
}
#else
Q_UNUSED(locale)
+ Q_UNUSED(language)
#endif
#ifdef HAVE_T9WRITE_ALPHABETIC
@@ -505,6 +521,9 @@ public:
return T9WriteInputMethod::EngineMode::Arabic;
case QLocale::HebrewScript:
return T9WriteInputMethod::EngineMode::Hebrew;
+ case QLocale::ThaiScript:
+ return language == DECUMA_LANG_EN ? T9WriteInputMethod::EngineMode::Alphabetic
+ : T9WriteInputMethod::EngineMode::Thai;
default:
return T9WriteInputMethod::EngineMode::Alphabetic;
}
@@ -677,6 +696,9 @@ public:
} else if (language == DECUMA_LANG_IW) {
if (inputMode != QVirtualKeyboardInputEngine::InputMode::Hebrew)
language = DECUMA_LANG_EN;
+ } else if (language == DECUMA_LANG_TH) {
+ if (inputMode != QVirtualKeyboardInputEngine::InputMode::Thai)
+ language = DECUMA_LANG_EN;
}
return language;
@@ -813,6 +835,11 @@ public:
leftToRightGestures = false;
break;
+ case QVirtualKeyboardInputEngine::InputMode::Thai:
+ symbolCategories.append(DECUMA_CATEGORY_THAI_BASE);
+ symbolCategories.append(DECUMA_CATEGORY_THAI_NON_BASE);
+ break;
+
default:
qCCritical(lcT9Write) << "Invalid input mode" << inputMode;
return false;
@@ -1101,7 +1128,7 @@ public:
QVirtualKeyboardTrace *trace = new QVirtualKeyboardTrace();
#ifdef QT_VIRTUALKEYBOARD_RECORD_TRACE_INPUT
- trace->setChannels(QStringList("t"));
+ trace->setChannels(QStringList(QLatin1String("t")));
#endif
traceList.append(trace);
@@ -1154,9 +1181,7 @@ public:
qCDebug(lcT9Write) << "T9WriteInputMethodPrivate::noteSelected():" << index;
Q_ASSERT(index >= 0 && index < wordCandidatesHwrResultIndex.length());
int resultIndex = wordCandidatesHwrResultIndex[index];
- DECUMA_STATUS status = DECUMA_API(NoteSelectedCandidate)(decumaSession, resultIndex);
- Q_UNUSED(status)
- Q_ASSERT(status == decumaNoError);
+ DECUMA_API(NoteSelectedCandidate)(decumaSession, resultIndex);
}
void restartRecognition()
@@ -1283,7 +1308,7 @@ public:
if (!ch.isLetter() || (ch.isUpper() == (textCase == QVirtualKeyboardInputEngine::TextCase::Upper))) {
QStringList homeLocations = QStandardPaths::standardLocations(QStandardPaths::HomeLocation);
if (!homeLocations.isEmpty()) {
- unipenTrace->setDirectory(QStringLiteral("%1/%2").arg(homeLocations.at(0)).arg("VIRTUAL_KEYBOARD_TRACES"));
+ unipenTrace->setDirectory(QStringLiteral("%1/%2").arg(homeLocations.at(0)).arg(QLatin1String("VIRTUAL_KEYBOARD_TRACES")));
unipenTrace->record(traceList);
unipenTrace->save(ch.unicode(), 100);
}
@@ -1706,6 +1731,9 @@ QList<QVirtualKeyboardInputEngine::InputMode> T9WriteInputMethod::inputModes(con
case QLocale::CyrillicScript:
availableInputModes.append(QVirtualKeyboardInputEngine::InputMode::Cyrillic);
break;
+ case QLocale::ThaiScript:
+ availableInputModes.append(QVirtualKeyboardInputEngine::InputMode::Thai);
+ break;
default:
break;
}
@@ -1724,6 +1752,12 @@ QList<QVirtualKeyboardInputEngine::InputMode> T9WriteInputMethod::inputModes(con
if (!(inputMethodHints & (Qt::ImhDialableCharactersOnly | Qt::ImhFormattedNumbersOnly | Qt::ImhDigitsOnly | Qt::ImhLatinOnly)))
availableInputModes.append(QVirtualKeyboardInputEngine::InputMode::Hebrew);
break;
+ case T9WriteInputMethod::EngineMode::Thai:
+ if (d->findHwrDb(T9WriteInputMethod::EngineMode::Thai, d->defaultHwrDbPath).isEmpty())
+ return availableInputModes;
+ if (!(inputMethodHints & (Qt::ImhDialableCharactersOnly | Qt::ImhFormattedNumbersOnly | Qt::ImhDigitsOnly | Qt::ImhLatinOnly)))
+ availableInputModes.append(QVirtualKeyboardInputEngine::InputMode::Thai);
+ break;
#endif
#ifdef HAVE_T9WRITE_CJK
case T9WriteInputMethod::EngineMode::SimplifiedChinese: