diff options
175 files changed, 37482 insertions, 1091 deletions
diff --git a/.qmake.conf b/.qmake.conf index 2108ac6f..138038d5 100644 --- a/.qmake.conf +++ b/.qmake.conf @@ -1,3 +1,3 @@ load(qt_build_config) -MODULE_VERSION = 5.9.3 +MODULE_VERSION = 5.10.0 diff --git a/dist/changes-5.10.0 b/dist/changes-5.10.0 new file mode 100644 index 00000000..129c8255 --- /dev/null +++ b/dist/changes-5.10.0 @@ -0,0 +1,56 @@ +Qt 5.10 introduces many new features and improvements as well as bugfixes +over the 5.9.x series. For more details, refer to the online documentation +included in this distribution. The documentation is also available online: + +http://doc.qt.io/qt-5/index.html + +The Qt version 5.10 series is binary compatible with the 5.9.x series. +Applications compiled for 5.9 will continue to run with 5.10. + +Some of the changes listed in this file include issue tracking numbers +corresponding to tasks in the Qt Bug Tracker: + +https://bugreports.qt.io/ + +Each of these identifiers can be entered in the bug tracker to obtain more +information about a particular change. + +**************************************************************************** +* Qt 5.10.0 Changes * +**************************************************************************** + +New Features +------------ + + - Added new component (InputModeKey) for input mode switch. + +New Keyboard Layouts +-------------------- + + - Added Bulgarian keyboard layout. + - Added Croatian keyboard layout. + - Added Czech keyboard layout. + - Added Dutch keyboard layout. + - Added Estonian keyboard layout. + - Added Greek keyboard layout. + - Added Hebrew keyboard layout. + - Added Hungarian keyboard layout. + - Added Serbian keyboard layout. + + Handwriting Recognition + ----------------------- + + - Added Arabic handwriting recognition. + - Added Farsi handwriting recognition. + - Added support for CJK (Chinese/Japanese/Korean) handwriting + via T9 Write. + + Important Behavior Changes +-------------------------- + + - Ensure the default value of Key.key property is uppercase. + +OpenWNN +------- + + - Fixed and optimized OpenWNN engine (Japanese keyboard input) diff --git a/src/config.pri b/src/config.pri index 11ae1c0b..21ba6842 100644 --- a/src/config.pri +++ b/src/config.pri @@ -4,6 +4,11 @@ handwriting:!lipi-toolkit:!t9write { equals(T9WRITE_FOUND, 1): CONFIG += t9write else: CONFIG += lipi-toolkit } +t9write { + !handwriting: include(virtualkeyboard/3rdparty/t9write/t9write-build.pri) + equals(T9WRITE_CJK_FOUND, 1): CONFIG += t9write-cjk + equals(T9WRITE_ALPHABETIC_FOUND, 1): CONFIG += t9write-alphabetic +} # Disable built-in layouts disable-layouts { @@ -27,22 +32,31 @@ disable-layouts { # Flag for activating all languages lang-all: CONFIG += \ lang-ar_AR \ + lang-bg_BG \ + lang-cs_CZ \ lang-da_DK \ lang-de_DE \ + lang-el_GR \ lang-en_GB \ lang-es_ES \ + lang-et_EE \ lang-fa_FA \ lang-fi_FI \ lang-fr_FR \ + lang-he_IL \ lang-hi_IN \ + lang-hr_HR \ + lang-hu_HU \ lang-it_IT \ lang-ja_JP \ lang-ko_KR \ lang-nb_NO \ + lang-nl_NL \ lang-pl_PL \ lang-pt_PT \ lang-ro_RO \ lang-ru_RU \ + lang-sr_SP \ lang-sv_SE \ lang-zh_CN \ lang-zh_TW diff --git a/src/virtualkeyboard/3rdparty/openwnn/wnnEngine/composingtext.cpp b/src/virtualkeyboard/3rdparty/openwnn/wnnEngine/composingtext.cpp index e299c6db..82022c8e 100644 --- a/src/virtualkeyboard/3rdparty/openwnn/wnnEngine/composingtext.cpp +++ b/src/virtualkeyboard/3rdparty/openwnn/wnnEngine/composingtext.cpp @@ -22,7 +22,6 @@ #include "composingtext.h" #include <QtCore/private/qobject_p.h> -#include <QDebug> class ComposingTextPrivate : public QObjectPrivate { @@ -208,14 +207,11 @@ void ComposingText::debugout() const { Q_D(const ComposingText); for (int i = LAYER0; i < MAX_LAYER; i++) { - qDebug() << QString("ComposingText[%1]").arg(i); - qDebug() << " cur =" << d->mCursor[i]; QString tmp; for (QList<StrSegment>::ConstIterator it = d->mStringLayer[i].constBegin(); it != d->mStringLayer[i].constEnd(); it++) { tmp += QString("(%1,%2,%3)").arg(it->string).arg(it->from).arg(it->to); } - qDebug() << " str =" << tmp; } } diff --git a/src/virtualkeyboard/3rdparty/t9write/t9write-build.pri b/src/virtualkeyboard/3rdparty/t9write/t9write-build.pri index ab519b90..f810badf 100644 --- a/src/virtualkeyboard/3rdparty/t9write/t9write-build.pri +++ b/src/virtualkeyboard/3rdparty/t9write/t9write-build.pri @@ -1,25 +1,83 @@ # # Automatically detects the T9Write build directory and sets the following variables: # -# T9WRITE_BUILD_DIR: A base directory for the architecture specific build directory -# T9WRITE_ALPHABETIC_OBJ: Absolute path to the target object file +# T9WRITE_FOUND: 0/1 T9Write SDK found +# T9WRITE_BUILD_STATIC: 0/1 Static libraries found (0 == shared libraries) +# T9WRITE_ALPHABETIC_FOUND: 0/1 T9 Write Alphabetic API header found +# T9WRITE_CJK_FOUND: 0/1 T9 Write CJK API header found +# T9WRITE_INCLUDE_DIRS: T9 Write include directories +# T9WRITE_ALPHABETIC_LIBS: Absolute path to the target library file +# T9WRITE_ALPHABETIC_BINS: Absolute path to the target binary file (shared library) +# T9WRITE_CJK_LIBS: Absolute path to the target library file +# T9WRITE_CJK_BINS: Absolute path to the target binary file (shared library) # +T9WRITE_FOUND = 0 +T9WRITE_ALPHABETIC_FOUND = 0 +T9WRITE_CJK_FOUND = 0 +T9WRITE_INCLUDE_DIRS = $$PWD/api contains(QT_ARCH, arm) { - T9WRITE_BUILD_DIR = $$files(build_Android_ARM*) + T9WRITE_BUILD_SHARED_DIR = lib/arm/shared + T9WRITE_BUILD_STATIC_DIR = lib/arm/static } else:linux { - T9WRITE_BUILD_DIR = $$files(build_Android_x86*) + T9WRITE_BUILD_SHARED_DIR = lib/linux-x86/shared + T9WRITE_BUILD_STATIC_DIR = lib/linux-x86/static } else:win32 { - T9WRITE_BUILD_DIR = $$files(build_VC*) + T9WRITE_BUILD_SHARED_DIR = lib/win32/shared + T9WRITE_BUILD_STATIC_DIR = lib/win32/static } -count(T9WRITE_BUILD_DIR, 1) { - T9WRITE_FOUND = 1 - T9WRITE_INCLUDE_DIRS = \ - $$PWD/$$T9WRITE_BUILD_DIR/api \ - $$PWD/$$T9WRITE_BUILD_DIR/public - T9WRITE_ALPHABETIC_LIBS = \ - $$PWD/$$files($$T9WRITE_BUILD_DIR/objects/t9write_alphabetic*.o*) -} else { - T9WRITE_FOUND = 0 +defineReplace(findStaticLibrary) { + win32 { + result = $$files($$1/*.obj) + isEmpty(result): result = $$files($$1/*.lib) + } else { + result = $$files($$1/*.o) + isEmpty(result): result = $$files($$1/*.a) + } + return($$result) +} + +defineReplace(findSharedLibrary) { + win32 { + result = $$files($$1/*.lib) + } else { + result = $$files($$1/*.so) + } + return($$result) +} + +defineReplace(findSharedBinary) { + win32 { + result = $$files($$1/*.dll) + } else { + result = $$files($$1/*.so) + } + return($$result) +} + +for(include_dir, T9WRITE_INCLUDE_DIRS) { + exists($${include_dir}/decuma_hwr.h): T9WRITE_ALPHABETIC_FOUND = 1 + exists($${include_dir}/decuma_hwr_cjk.h): T9WRITE_CJK_FOUND = 1 +} + +equals(T9WRITE_ALPHABETIC_FOUND, 1)|equals(T9WRITE_CJK_FOUND, 1) { + equals(T9WRITE_ALPHABETIC_FOUND, 1) { + T9WRITE_ALPHABETIC_LIBS = $$findSharedLibrary($$PWD/$$T9WRITE_BUILD_SHARED_DIR/alphabetic) + !isEmpty(T9WRITE_ALPHABETIC_LIBS) { + T9WRITE_ALPHABETIC_BINS = $$findSharedBinary($$PWD/$$T9WRITE_BUILD_SHARED_DIR/alphabetic) + } else { + T9WRITE_ALPHABETIC_LIBS = $$findStaticLibrary($$PWD/$$T9WRITE_BUILD_STATIC_DIR/alphabetic) + } + } + equals(T9WRITE_CJK_FOUND, 1) { + T9WRITE_CJK_LIBS = $$findSharedLibrary($$PWD/$$T9WRITE_BUILD_SHARED_DIR/cjk) + !isEmpty(T9WRITE_CJK_LIBS) { + T9WRITE_CJK_BINS = $$findSharedBinary($$PWD/$$T9WRITE_BUILD_SHARED_DIR/cjk) + } else { + T9WRITE_CJK_LIBS = $$findStaticLibrary($$PWD/$$T9WRITE_BUILD_STATIC_DIR/cjk) + } + } + equals(T9WRITE_ALPHABETIC_FOUND, 1):!isEmpty(T9WRITE_ALPHABETIC_LIBS): T9WRITE_FOUND = 1 + equals(T9WRITE_CJK_FOUND, 1):!isEmpty(T9WRITE_CJK_LIBS): T9WRITE_FOUND = 1 } diff --git a/src/virtualkeyboard/3rdparty/t9write/t9write.pro b/src/virtualkeyboard/3rdparty/t9write/t9write.pro index 05f723a7..d64f831d 100644 --- a/src/virtualkeyboard/3rdparty/t9write/t9write.pro +++ b/src/virtualkeyboard/3rdparty/t9write/t9write.pro @@ -2,18 +2,21 @@ TARGET = qtt9write_db CONFIG += static -T9WRITE_LDBS = $$files(databases/XT9_LDBs/*.ldb) - T9WRITE_RESOURCE_FILES = \ - databases/HWR_LatinCG/_databas_le.bin \ - $$T9WRITE_LDBS + $$files(data/arabic/*.bin) \ + $$files(data/hebrew/*.bin) \ + $$files(data/*.bin) \ + $$files(data/*.ldb) \ + $$files(data/*.hdb) \ + $$files(data/*.phd) # Note: Compression is disabled, because the resource is accessed directly from the memory QMAKE_RESOURCE_FLAGS += -no-compress +CONFIG += resources_big include(../../generateresource.pri) -RESOURCES += $$generate_resource(t9write_db.qrc, $$T9WRITE_RESOURCE_FILES) +RESOURCES += $$generate_resource(t9write_db.qrc, $$T9WRITE_RESOURCE_FILES, /QtQuick/VirtualKeyboard/T9Write) load(qt_helper_lib) diff --git a/src/virtualkeyboard/3rdparty/t9write/unpack.py b/src/virtualkeyboard/3rdparty/t9write/unpack.py new file mode 100644 index 00000000..e6a3e7a1 --- /dev/null +++ b/src/virtualkeyboard/3rdparty/t9write/unpack.py @@ -0,0 +1,274 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +############################################################################# +## +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ +## +## This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +## +## $QT_BEGIN_LICENSE:GPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. +## +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 or (at your option) any later version +## approved by the KDE Free Qt Foundation. The licenses are as published by +## the Free Software Foundation and appearing in the file LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ +## +############################################################################# + +import os +import sys +import zipfile +import tempfile +import shutil +import fnmatch + +# +# This utility script unpacks the T9 Write SDK to appropriate directory +# structure for Qt Virtual Keyboard. +# +# Usage: unpack.py <filename.zip> <target dir> +# unpack.py <input dir> <target dir> +# +# The script will happily overwrite existing files, so be careful. +# + +# +# Unpack rule list +# +# Each list entry is a dictionary consisting of target directory as +# key and matching pattern as value. The dictionary can be defined in +# the following ways: +# +# Note: The rules within the dictionary are executed in arbitrary order. +# Add a new list entry if the order is significant. +# +# Format: +# 1. { 'target dir 1': [ 'pattern1', 'pattern2', ... ], 'target dir 2': ... } +# - Each pattern is matched against the zip file contents. The file is +# copied to target dir if the pattern matches. Each pattern is handled +# independent of each other. +# +# 2. { 'target dir 1': [ [ 'file group pattern', 'sub pattern1', ... ] ], 'target dir 2': ... } +# - First the file group pattern is matched against the zip file contents. +# Then all the sub patterns are matched in the sub directory specified by +# the first match. If all the sub patterns match, then first match from +# file group pattern and all the matching files from sub pattterns are copied. +# The purpose of this option is to copy coupled files, e.g. DLL and LIB +# files found in the same directory. +# + +UNPACK_RULES = [ +{ # Header files +'api': [ + '*/decuma_hwr.h', + '*/decuma_hwr_cjk.h', + '*/decuma_hwr_types.h', + '*/decuma_point.h', + '*/decumaBasicTypes.h', + '*/decumaBasicTypesMinMax.h', + '*/decumaCharacterSetType.h', + '*/decumaCurve.h', + '*/decumaFunctionalSupport.h', + '*/decumaFunctionalSupportCheck.h', + '*/decumaLanguages.h', + '*/decumaLiteFunctionalSupport.h', + '*/decumaRuntimeMallocData.h', + '*/decumaStatus.h', + '*/decumaStorageSpecifiers.h', + '*/decumaSymbolCategories.h', + '*/decumaUnicodeTypes.h', + '*/t9write_alpha_version.h', + '*/t9write_api_version.h', + '*/t9write_cjk_version.h', + '*/xxt9wApiOem.h', + '*/xxt9wOem.h', +], +}, { # Data: Arabic and Hebrew database must be copied first (the file name collides with Alphabetic database) +'data/arabic': [ + '*/Arabic/*_le.bin', +], +'data/hebrew': [ + '*/Hebrew/*_le.bin', +], +}, { # Data: Alphabetic and CJK databases +'data': [ + '*/*_le.bin', + '*/*.hdb', + '*/*.phd', + '*/*.ldb', +], +}, { # Libraries +'lib/arm/static/alphabetic': [ + '*T9Write_Alpha*/*Android_ARM*/*.a', + '*T9Write_Alpha*/*Android_ARM*/*.o', +], +'lib/arm/shared/alphabetic': [ + '*T9Write_Alpha*/*Android_ARM*/*.so', +], +'lib/arm/static/cjk': [ + '*T9Write_CJK*/*Android_ARM*/*.a', + '*T9Write_CJK*/*Android_ARM*/*.o', +], +'lib/arm/shared/cjk': [ + '*T9Write_CJK*/*Android_ARM*/*.so', +], +'lib/linux/static/alphabetic': [ + '*T9Write_Alpha*/*Android_x86*/*.a', + '*T9Write_Alpha*/*Android_x86*/*.o', +], +'lib/linux/shared/alphabetic': [ + '*T9Write_Alpha*/*Android_x86*/*.so', +], +'lib/linux/static/cjk': [ + '*T9Write_CJK*/*Android_x86*/*.a', + '*T9Write_CJK*/*Android_x86*/*.o', +], +'lib/linux/shared/cjk': [ + '*T9Write_CJK*/*Android_x86*/*.so', +], +'lib/win32/static/alphabetic': [ + '*T9Write_Alpha*/*.obj', +], +'lib/win32/shared/alphabetic': [ + [ '*T9Write_Alpha*/*.dll', '*.lib' ], +], +'lib/win32/static/cjk': [ + '*T9Write_CJK*/*.obj', +], +'lib/win32/shared/cjk': [ + [ '*T9Write_CJK*/*.dll', '*.lib' ], +], +'lib/win32/shared/alphabetic': [ + [ '*T9Write_Alpha*/*.dll', '*.lib' ], +], +} +] + +# +# Blacklist +# +# File matching rules for blacklisted items. Matched before UNPACK_RULES. +# + +BLACKLIST_RULES = [ +'*__MACOSX*', +'*/.DS_Store', +] + +def blacklist(file_list): + result = [] + for file_name in file_list: + match = False + for blacklist_rule in BLACKLIST_RULES: + match = fnmatch.fnmatch(file_name, blacklist_rule) + if match: + break + if not match: + result.append(file_name) + return result + +def unzip(zip_file, target_dir): + zip_list = [] + if os.path.isdir(zip_file): + base_dir, sdk_dir = os.path.split(zip_file.replace('\\', '/').rstrip('/')) + base_dir_length = len(base_dir) + 1 if base_dir else 0 + if not 'T9Write' in sdk_dir: + print("Error: The input directory name '" + sdk_dir + "' does not contain 'T9Write'.") + print("Please unzip the file to a directory named after the zip file and try again.") + return zip_list + for root, dirs, files in os.walk(zip_file): + for file_name in files: + sub_dir = root[base_dir_length:] + dst_dir = os.path.join(target_dir, sub_dir) + if not os.path.exists(dst_dir): + os.makedirs(dst_dir) + shutil.copy2(os.path.join(root, file_name), dst_dir) + os.chmod(os.path.join(dst_dir, file_name), 0o644) + zip_list.append(os.path.join(sub_dir, file_name).replace('\\', '/')) + return zip_list + with zipfile.ZipFile(zip_file, 'r') as z: + zip_list = sorted(blacklist(z.namelist())) + zip_basename = os.path.splitext(os.path.basename(zip_file))[0] + if zip_list and zip_basename in zip_list[0]: + zip_basename = '' + zip_list = [os.path.join(zip_basename, zip_name).replace('\\', '/') for zip_name in zip_list] + z.extractall(os.path.join(target_dir, zip_basename)) + return zip_list + +def match_file_list(file_list, base_dir, fnpattern): + return [file_name for file_name in file_list \ + if fnmatch.fnmatch(file_name, fnpattern) and \ + os.path.isfile(os.path.join(base_dir, file_name))] + +def unpack(zip_list, zip_dir, out_dir): + if not zip_list: + return + + for unpack_rules in UNPACK_RULES: + process_unpack_rules(zip_list, zip_dir, out_dir, unpack_rules) + +def process_unpack_rules(zip_list, zip_dir, out_dir, unpack_rules): + for (target_dir, match_rules) in unpack_rules.items(): + for match_rule in match_rules: + # Match + match_rule_group = match_rule if isinstance(match_rule, list) else [match_rule] + match_group_candidates = [match_file_list(zip_list, zip_dir, match_rule_group[0])] + if len(match_rule_group) > 1: + while len(match_group_candidates[0]) > 0: + match_group0_candidate = match_group_candidates[0][0] + all_sub_groups_match = True + for sub_group_rule in match_rule_group[1:]: + fnpattern = os.path.join(os.path.dirname(match_group0_candidate), sub_group_rule).replace('\\', '/') + sub_group_candidates = match_file_list(zip_list, zip_dir, fnpattern) + if not sub_group_candidates: + all_sub_groups_match = False + break + match_group_candidates.append(sub_group_candidates) + if all_sub_groups_match: + match_group_candidates[0] = [match_group0_candidate] + break + else: + match_group_candidates = [match_group_candidates[0][1:]] + + # Copy + if match_group_candidates: + for match_group_candidate in match_group_candidates: + for zip_name in match_group_candidate: + dst_dir = os.path.join(out_dir, target_dir) + if not os.path.exists(dst_dir): + os.makedirs(dst_dir) + src = os.path.join(zip_dir, zip_name).replace('\\', '/') + dst = os.path.join(dst_dir, os.path.basename(zip_name)).replace('\\', '/') + print(zip_name + ' -> ' + dst) + shutil.copy2(src, dst) + zip_list.remove(zip_name) + +if __name__ == '__main__': + if len(sys.argv) != 3: + print("Usage: %s <filename.zip> <target dir>" % os.path.basename(__file__)) + exit() + + out_dir = sys.argv[2] + zip_dir = tempfile.mkdtemp() + + try: + unpack(unzip(sys.argv[1], zip_dir), zip_dir, out_dir) + except Exception as e: + print(e) + finally: + shutil.rmtree(zip_dir) diff --git a/src/virtualkeyboard/content/components/BaseKey.qml b/src/virtualkeyboard/content/components/BaseKey.qml index 5c686adf..ae3b530f 100644 --- a/src/virtualkeyboard/content/components/BaseKey.qml +++ b/src/virtualkeyboard/content/components/BaseKey.qml @@ -79,7 +79,7 @@ Item { The default value based on the default item in the effective alternative keys. */ - property string smallText: effectiveAlternativeKeysHighlightIndex !== -1 ? effectiveAlternativeKeys[effectiveAlternativeKeysHighlightIndex] : "" + property string smallText: effectiveAlternativeKeys && effectiveAlternativeKeysHighlightIndex !== -1 ? effectiveAlternativeKeys[effectiveAlternativeKeysHighlightIndex] : "" /*! \since QtQuick.VirtualKeyboard 2.0 diff --git a/src/virtualkeyboard/content/components/CharacterPreviewBubble.qml b/src/virtualkeyboard/content/components/CharacterPreviewBubble.qml index 1f9a05a2..ee70e110 100644 --- a/src/virtualkeyboard/content/components/CharacterPreviewBubble.qml +++ b/src/virtualkeyboard/content/components/CharacterPreviewBubble.qml @@ -45,7 +45,7 @@ Item { onActiveKeyChanged: { if (activeKey && characterPreview.item !== null) { - characterPreview.item.text = InputContext.uppercase ? activeKey.text.toUpperCase() : activeKey.text + characterPreview.item.text = InputContext.uppercase ? activeKey.displayText.toUpperCase() : activeKey.displayText width = activeKey.width height = activeKey.height var position = keyboard.mapFromItem(activeKey, 0, 0) diff --git a/src/virtualkeyboard/content/components/HandwritingModeKey.qml b/src/virtualkeyboard/content/components/HandwritingModeKey.qml index b07cdcd6..815d89db 100644 --- a/src/virtualkeyboard/content/components/HandwritingModeKey.qml +++ b/src/virtualkeyboard/content/components/HandwritingModeKey.qml @@ -49,6 +49,6 @@ Key { displayText: "HWR" functionKey: true visible: keyboard.isHandwritingAvailable() - onClicked: keyboard.handwritingMode = !keyboard.handwritingMode + onClicked: keyboard.setHandwritingMode(!keyboard.handwritingMode) keyPanelDelegate: keyboard.style ? keyboard.style.handwritingKeyPanel : undefined } diff --git a/src/virtualkeyboard/content/components/InputModeKey.qml b/src/virtualkeyboard/content/components/InputModeKey.qml new file mode 100644 index 00000000..c4463a8e --- /dev/null +++ b/src/virtualkeyboard/content/components/InputModeKey.qml @@ -0,0 +1,122 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.VirtualKeyboard 2.3 + +/*! + \qmltype InputModeKey + \inqmlmodule QtQuick.VirtualKeyboard + \ingroup qtvirtualkeyboard-qml + \inherits Key + \since QtQuick.VirtualKeyboard 2.3 + + \brief Input mode key for keyboard layouts. + + This key toggles between available \l {InputEngine::inputModes} {InputEngine.inputModes}. +*/ + +Key { + key: Qt.Key_Mode_switch + noKeyEvent: true + functionKey: true + text: InputContext.inputEngine.inputMode < inputModeNameList.length ? + inputModeNameList[InputContext.inputEngine.inputMode] : "ABC" + onClicked: InputContext.inputEngine.inputMode = __nextInputMode(InputContext.inputEngine.inputMode) + keyPanelDelegate: keyboard.style ? keyboard.style.symbolKeyPanel : undefined + enabled: inputModeCount > 1 + + /*! + List of input mode names. + + The default list contains all known input modes for \l {InputEngine::inputMode} {InputEngine.inputMode}. + */ + property var inputModeNameList: [ + "ABC", // InputEngine.Latin + "123", // InputEngine.Numeric + "123", // InputEngine.Dialable + "拼音", // InputEngine.Pinyin + "倉頡", // InputEngine.Cangjie + "注音", // InputEngine.Zhuyin + "한글", // InputEngine.Hangul + "あ", // InputEngine.Hiragana + "カ", // InputEngine.Katakana + "全角", // InputEngine.FullwidthLatin + "ΑΒΓ", // InputEngine.Greek + "АБВ", // InputEngine.Cyrillic + "\u0623\u200C\u0628\u200C\u062C", // InputEngine.Arabic + "\u05D0\u05D1\u05D2", // InputEngine.Hebrew + "中文", // InputEngine.ChineseHandwriting + "日本語", // InputEngine.JapaneseHandwriting + "한국어", // InputEngine.KoreanHandwriting + ] + + /*! + List of input modes to toggle. + + This property allows to define a custom list of input modes to + toggle. + + The default list contains all the available input modes. + */ + property var inputModes: InputContext.inputEngine.inputModes + + /*! + This read-only property reflects the actual number of input modes + the user can cycle through this key. + */ + readonly property int inputModeCount: __inputModes !== undefined ? __inputModes.length : 0 + + property var __inputModes: __filterInputModes([].concat(InputContext.inputEngine.inputModes), inputModes) + + onInputModesChanged: { + // Check that the current input mode is included in our list + if (keyboard.active && InputContext.inputEngine.inputMode !== -1 && + __inputModes !== undefined && __inputModes.length > 0 && + __inputModes.indexOf(InputContext.inputEngine.inputMode) === -1) + InputContext.inputEngine.inputMode = __inputModes[0] + } + + function __nextInputMode(inputMode) { + if (!enabled) + return inputMode + var inputModeIndex = __inputModes.indexOf(inputMode) + 1 + if (inputModeIndex >= __inputModes.length) + inputModeIndex = 0 + return __inputModes[inputModeIndex] + } + + function __filterInputModes(inputModes, filter) { + for (var i = 0; i < inputModes.length; i++) { + if (filter.indexOf(inputModes[i]) === -1) + inputModes.splice(i, 1) + } + return inputModes + } +} diff --git a/src/virtualkeyboard/content/components/Key.qml b/src/virtualkeyboard/content/components/Key.qml index 620a3a7b..5a376310 100644 --- a/src/virtualkeyboard/content/components/Key.qml +++ b/src/virtualkeyboard/content/components/Key.qml @@ -42,6 +42,6 @@ import QtQuick 2.0 BaseKey { id: keyItem - key: !functionKey && text.length > 0 ? text.charCodeAt(0) : Qt.Key_unknown + key: !functionKey && text.length > 0 ? text.toUpperCase().charCodeAt(0) : Qt.Key_unknown keyPanelDelegate: keyboard.style ? keyboard.style.keyPanel : undefined } diff --git a/src/virtualkeyboard/content/components/Keyboard.qml b/src/virtualkeyboard/content/components/Keyboard.qml index 2bd2ff2e..22378b44 100644 --- a/src/virtualkeyboard/content/components/Keyboard.qml +++ b/src/virtualkeyboard/content/components/Keyboard.qml @@ -48,14 +48,17 @@ Item { property string locale: localeIndex >= 0 && localeIndex < layoutsModel.count ? layoutsModel.get(localeIndex, "fileName") : "" property string inputLocale property int defaultLocaleIndex: -1 - property bool latinOnly: InputContext.inputMethodHints & Qt.ImhLatinOnly - property bool preferNumbers: InputContext.inputMethodHints & Qt.ImhPreferNumbers + readonly property bool latinOnly: InputContext.inputMethodHints & (Qt.ImhLatinOnly | Qt.ImhEmailCharactersOnly | Qt.ImhUrlCharactersOnly) + readonly property bool preferNumbers: InputContext.inputMethodHints & Qt.ImhPreferNumbers + readonly property bool dialableCharactersOnly: InputContext.inputMethodHints & Qt.ImhDialableCharactersOnly + readonly property bool formattedNumbersOnly: InputContext.inputMethodHints & Qt.ImhFormattedNumbersOnly + readonly property bool digitsOnly: InputContext.inputMethodHints & Qt.ImhDigitsOnly property string layout property string layoutType: { if (keyboard.handwritingMode) return "handwriting" - if (InputContext.inputMethodHints & Qt.ImhDialableCharactersOnly) return "dialpad" - if (InputContext.inputMethodHints & Qt.ImhFormattedNumbersOnly) return "numbers" - if (InputContext.inputMethodHints & Qt.ImhDigitsOnly) return "digits" + if (keyboard.dialableCharactersOnly) return "dialpad" + if (keyboard.formattedNumbersOnly) return "numbers" + if (keyboard.digitsOnly) return "digits" if (keyboard.symbolMode) return "symbols" return "main" } @@ -128,17 +131,14 @@ Item { updateAvailableLocaleIndices() updateLayout() } - onLatinOnlyChanged: { - if (!latinOnly) - inputModeNeedsReset = true - updateInputMethod() - } + onLatinOnlyChanged: inputModeNeedsReset = true onPreferNumbersChanged: { keyboard.symbolMode = !keyboard.handwritingMode && preferNumbers - if (!preferNumbers) - inputModeNeedsReset = true - updateInputMethod() + inputModeNeedsReset = true } + onDialableCharactersOnlyChanged: inputModeNeedsReset = true + onFormattedNumbersOnlyChanged: inputModeNeedsReset = true + onDigitsOnlyChanged: inputModeNeedsReset = true onHandwritingModeChanged: if (!keyboard.handwritingMode) keyboard.fullScreenHandwritingMode = false onFullScreenHandwritingModeChanged: if (keyboard.fullScreenHandwritingMode) keyboard.handwritingMode = true onLanguagePopupListActiveChanged: { @@ -751,6 +751,12 @@ Item { when: keyboard.layout.length > 0 } + onItemChanged: { + // Reset input mode if the new layout wants to override it + if (item && item.inputMode !== -1) + inputModeNeedsReset = true + } + MultiPointTouchArea { id: keyboardInputArea objectName: "keyboardInputArea" @@ -1139,29 +1145,30 @@ Item { var inputModes = InputContext.inputEngine.inputModes if (inputModes.length > 0) { // Reset to default input mode if the input locale has changed - if (inputModeNeedsReset) + if (inputModeNeedsReset) { inputMode = inputModes[0] - // Check the current layout for input mode override - if (keyboardLayoutLoader.item.inputMode !== -1) - inputMode = keyboardLayoutLoader.item.inputMode + // Check the current layout for input mode override + if (keyboardLayoutLoader.item.inputMode !== -1) + inputMode = keyboardLayoutLoader.item.inputMode + + // Update input mode automatically in handwriting mode + if (keyboard.handwritingMode) { + if (keyboard.dialableCharactersOnly && inputModes.indexOf(InputEngine.Dialable) !== -1) + inputMode = InputEngine.Dialable + else if ((keyboard.formattedNumbersOnly || keyboard.digitsOnly) && inputModes.indexOf(InputEngine.Numeric) !== -1) + inputMode = InputEngine.Numeric + else if (keyboardLayoutLoader.item.inputMode === -1) + inputMode = inputModes[0] + } - // Update input mode automatically in handwriting mode - if (keyboard.handwritingMode) { - if ((InputContext.inputMethodHints & Qt.ImhDialableCharactersOnly) && inputModes.indexOf(InputEngine.Dialable) !== -1) - inputMode = InputEngine.Dialable - else if ((InputContext.inputMethodHints & (Qt.ImhFormattedNumbersOnly | Qt.ImhDigitsOnly)) && inputModes.indexOf(InputEngine.Numeric) !== -1) + // Check the input method hints for input mode overrides + if (latinOnly) + inputMode = InputEngine.Latin + if (preferNumbers) inputMode = InputEngine.Numeric - else - inputMode = inputModes[0] } - // Check the input method hints for input mode overrides - if (latinOnly) - inputMode = InputEngine.Latin - if (preferNumbers) - inputMode = InputEngine.Numeric - // Make sure the input mode is supported by the current input method if (inputModes.indexOf(inputMode) === -1) inputMode = inputModes[0] @@ -1172,6 +1179,9 @@ Item { inputModeNeedsReset = false } } + + // Clear the toggle shift timer + InputContext.shiftHandler.clearToggleShiftTimer() } function updateLayout() { @@ -1349,4 +1359,10 @@ Item { function isHandwritingAvailable() { return VirtualKeyboardInputMethods.indexOf("HandwritingInputMethod") !== -1 && layoutExists(locale, "handwriting") } + + function setHandwritingMode(enabled, resetInputMode) { + if (enabled && resetInputMode) + inputModeNeedsReset = true + handwritingMode = enabled + } } diff --git a/src/virtualkeyboard/content/components/SelectionControl.qml b/src/virtualkeyboard/content/components/SelectionControl.qml index 125a8eb7..16961c23 100644 --- a/src/virtualkeyboard/content/components/SelectionControl.qml +++ b/src/virtualkeyboard/content/components/SelectionControl.qml @@ -45,7 +45,7 @@ Item { Behavior on opacity { NumberAnimation { duration: 200 } } - opacity: inputContext.anchorRectIntersectsClipRect ? 1.0 : 0.0 + opacity: inputContext !== null && inputContext.anchorRectIntersectsClipRect ? 1.0 : 0.0 MouseArea { width: parent.width * 2 @@ -77,7 +77,7 @@ Item { Behavior on opacity { NumberAnimation { duration: 200 } } - opacity: inputContext.cursorRectIntersectsClipRect ? 1.0 : 0.0 + opacity: inputContext !== null && inputContext.cursorRectIntersectsClipRect ? 1.0 : 0.0 MouseArea { width: parent.width * 2 diff --git a/src/virtualkeyboard/content/content.qrc b/src/virtualkeyboard/content/content.qrc index 431e4205..d29dbe33 100644 --- a/src/virtualkeyboard/content/content.qrc +++ b/src/virtualkeyboard/content/content.qrc @@ -30,5 +30,6 @@ <file>components/LanguagePopupList.qml</file> <file>components/SelectionControl.qml</file> <file>components/ShadowInputControl.qml</file> + <file>components/InputModeKey.qml</file> </qresource> </RCC> diff --git a/src/virtualkeyboard/content/layouts/ar_AR/handwriting.qml b/src/virtualkeyboard/content/layouts/ar_AR/handwriting.qml new file mode 100644 index 00000000..f84d47dc --- /dev/null +++ b/src/virtualkeyboard/content/layouts/ar_AR/handwriting.qml @@ -0,0 +1,116 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Layouts 1.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayout { + function createInputMethod() { + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) + } + sharedLayouts: ['symbols'] + inputMode: InputEngine.Arabic + readonly property bool alphabeticInputMode: [InputEngine.Latin, InputEngine.Dialable].indexOf(InputContext.inputEngine.inputMode) !== -1 + + KeyboardRow { + Layout.preferredHeight: 3 + KeyboardColumn { + Layout.preferredWidth: bottomRow.width - hideKeyboardKey.width + KeyboardRow { + TraceInputKey { + objectName: "hwrInputArea" + patternRecognitionMode: InputEngine.HandwritingRecoginition + horizontalRulers: + alphabeticInputMode ? [] : + [Math.round(boundingBox.height / 4), Math.round(boundingBox.height / 4) * 2, Math.round(boundingBox.height / 4) * 3] + } + } + } + KeyboardColumn { + Layout.preferredWidth: hideKeyboardKey.width + KeyboardRow { + BackspaceKey {} + } + KeyboardRow { + EnterKey {} + } + KeyboardRow { + ShiftKey { } + } + } + } + KeyboardRow { + id: bottomRow + Layout.preferredHeight: 1 + keyWeight: 154 + InputModeKey { + weight: 217 + inputModeNameList: [ + "ABC", // InputEngine.Latin + "\u0660\u0661\u0662", // InputEngine.Numeric + "123", // InputEngine.Dialable + "", // InputEngine.Pinyin + "", // InputEngine.Cangjie + "", // InputEngine.Zhuyin + "", // InputEngine.Hangul + "", // InputEngine.Hiragana + "", // InputEngine.Katakana + "", // InputEngine.FullwidthLatin + "", // InputEngine.Greek + "", // InputEngine.Cyrillic + "\u0623\u200C\u0628\u200C\u062C", // InputEngine.Arabic + ] + } + ChangeLanguageKey { + weight: 154 + customLayoutsOnly: true + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: alphabeticInputMode ? Qt.Key_Apostrophe : 0x060C + text: alphabeticInputMode ? "'" : "\u060C" + alternativeKeys: alphabeticInputMode ? "<>()#%&*/\\\"'=+-_" : "\"\u060C\u066B\u066C\u066D" + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: alphabeticInputMode ? ":;,.?!" : ":\u061B.\u061F!" + } + HideKeyboardKey { + id: hideKeyboardKey + weight: 204 + } + } +} diff --git a/src/virtualkeyboard/content/layouts/ar_AR/main.qml b/src/virtualkeyboard/content/layouts/ar_AR/main.qml index 9e53caca..e79847ec 100644 --- a/src/virtualkeyboard/content/layouts/ar_AR/main.qml +++ b/src/virtualkeyboard/content/layouts/ar_AR/main.qml @@ -28,10 +28,10 @@ ****************************************************************************/ import QtQuick 2.0 -import QtQuick.VirtualKeyboard 2.1 +import QtQuick.VirtualKeyboard 2.3 KeyboardLayoutLoader { - inputMode: InputEngine.Latin + inputMode: InputEngine.Arabic sourceComponent: InputContext.shift ? page2 : page1 Component { id: page1 @@ -163,13 +163,16 @@ KeyboardLayoutLoader { ChangeLanguageKey { weight: 154 } + HandwritingModeKey { + weight: 154 + } SpaceKey { weight: 864 } Key { key: 0x060C text: "\u060C" - alternativeKeys: ".,\u060C\u061F" + alternativeKeys: "\"\u061F\u060C.!:\u061B\u066B\u066C\u066D" } Key { key: 0xE000 @@ -312,6 +315,9 @@ KeyboardLayoutLoader { ChangeLanguageKey { weight: 154 } + HandwritingModeKey { + weight: 154 + } SpaceKey { weight: 864 } diff --git a/src/virtualkeyboard/content/layouts/bg_BG/handwriting.qml b/src/virtualkeyboard/content/layouts/bg_BG/handwriting.qml new file mode 100644 index 00000000..782f3217 --- /dev/null +++ b/src/virtualkeyboard/content/layouts/bg_BG/handwriting.qml @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Layouts 1.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayout { + function createInputMethod() { + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) + } + sharedLayouts: ['symbols'] + + KeyboardRow { + Layout.preferredHeight: 3 + KeyboardColumn { + Layout.preferredWidth: bottomRow.width - hideKeyboardKey.width + KeyboardRow { + TraceInputKey { + objectName: "hwrInputArea" + patternRecognitionMode: InputEngine.HandwritingRecoginition + horizontalRulers: + InputContext.inputEngine.inputMode !== InputEngine.Cyrillic ? [] : + [Math.round(boundingBox.height / 4), Math.round(boundingBox.height / 4) * 2, Math.round(boundingBox.height / 4) * 3] + } + } + } + KeyboardColumn { + Layout.preferredWidth: hideKeyboardKey.width + KeyboardRow { + BackspaceKey {} + } + KeyboardRow { + EnterKey {} + } + KeyboardRow { + ShiftKey { } + } + } + } + KeyboardRow { + id: bottomRow + Layout.preferredHeight: 1 + keyWeight: 154 + InputModeKey { + weight: 217 + } + ChangeLanguageKey { + weight: 154 + customLayoutsOnly: true + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Apostrophe + text: "'" + alternativeKeys: "<>()#%&*/\\\"'=+-_" + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: "!,.;:?" + } + HideKeyboardKey { + id: hideKeyboardKey + weight: 204 + } + } +} diff --git a/src/virtualkeyboard/content/layouts/bg_BG/main.qml b/src/virtualkeyboard/content/layouts/bg_BG/main.qml new file mode 100644 index 00000000..f9dad187 --- /dev/null +++ b/src/virtualkeyboard/content/layouts/bg_BG/main.qml @@ -0,0 +1,370 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayoutLoader { + sharedLayouts: ['symbols'] + sourceComponent: InputContext.inputEngine.inputMode === InputEngine.Cyrillic ? cyrillicLayout : latinLayout + Component { + id: cyrillicLayout + KeyboardLayout { + keyWeight: 160 + KeyboardRow { + Key { + text: "я" + } + Key { + text: "в" + } + Key { + text: "е" + } + Key { + text: "р" + } + Key { + text: "т" + } + Key { + text: "ъ" + } + Key { + text: "у" + } + Key { + text: "и" + } + Key { + text: "о" + } + Key { + text: "п" + } + Key { + text: "ч" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + text: "а" + } + Key { + text: "с" + } + Key { + text: "д" + } + Key { + text: "ф" + } + Key { + text: "г" + } + Key { + text: "х" + } + Key { + text: "й" + } + Key { + text: "к" + } + Key { + text: "л" + } + Key { + text: "ш" + } + Key { + text: "щ" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + InputModeKey { + inputModes: [InputEngine.Cyrillic, InputEngine.Latin] + } + Key { + text: "з" + } + Key { + text: "ь" + } + Key { + text: "ц" + } + Key { + text: "ж" + } + Key { + text: "б" + } + Key { + text: "н" + } + Key { + text: "м" + } + Key { + text: "ю" + } + Key { + key: Qt.Key_Comma + text: "," + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: "!.;?" + } + ShiftKey { + weight: 204 + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + } + ChangeLanguageKey { + weight: 154 + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Apostrophe + text: "'" + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } + } + } + Component { + id: latinLayout + KeyboardLayout { + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_Q + text: "q" + } + Key { + key: Qt.Key_W + text: "w" + } + Key { + key: Qt.Key_E + text: "e" + alternativeKeys: "êeëèé" + } + Key { + key: Qt.Key_R + text: "r" + alternativeKeys: "ŕrř" + } + Key { + key: Qt.Key_T + text: "t" + alternativeKeys: "ţtŧť" + } + Key { + key: Qt.Key_Y + text: "y" + alternativeKeys: "ÿyýŷ" + } + Key { + key: Qt.Key_U + text: "u" + alternativeKeys: "űūũûüuùú" + } + Key { + key: Qt.Key_I + text: "i" + alternativeKeys: "îïīĩiìí" + } + Key { + key: Qt.Key_O + text: "o" + alternativeKeys: "œøõôöòóo" + } + Key { + key: Qt.Key_P + text: "p" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + key: Qt.Key_A + text: "a" + alternativeKeys: (InputContext.inputMethodHints & (Qt.ImhEmailCharactersOnly | Qt.ImhUrlCharactersOnly)) ? "a@äåãâàá" : "aäåãâàá" + smallTextVisible: (InputContext.inputMethodHints & (Qt.ImhEmailCharactersOnly | Qt.ImhUrlCharactersOnly)) + } + Key { + key: Qt.Key_S + text: "s" + alternativeKeys: "šsşś" + } + Key { + key: Qt.Key_D + text: "d" + alternativeKeys: "dđď" + } + Key { + key: Qt.Key_F + text: "f" + } + Key { + key: Qt.Key_G + text: "g" + alternativeKeys: "ġgģĝğ" + } + Key { + key: Qt.Key_H + text: "h" + } + Key { + key: Qt.Key_J + text: "j" + } + Key { + key: Qt.Key_K + text: "k" + } + Key { + key: Qt.Key_L + text: "l" + alternativeKeys: "ĺŀłļľl" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + InputModeKey { + enabled: !(InputContext.inputMethodHints & Qt.ImhLatinOnly) && inputModeCount > 1 + inputModes: [InputEngine.Cyrillic, InputEngine.Latin] + } + Key { + key: Qt.Key_Z + text: "z" + alternativeKeys: "zžż" + } + Key { + key: Qt.Key_X + text: "x" + } + Key { + key: Qt.Key_C + text: "c" + alternativeKeys: "çcċčć" + } + Key { + key: Qt.Key_V + text: "v" + } + Key { + key: Qt.Key_B + text: "b" + } + Key { + key: Qt.Key_N + text: "n" + alternativeKeys: "ņńnň" + } + Key { + key: Qt.Key_M + text: "m" + } + Key { + key: Qt.Key_Comma + text: "," + } + Key { + key: Qt.Key_Period + text: "." + } + ShiftKey { + weight: 204 + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + } + ChangeLanguageKey { + weight: 154 + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Apostrophe + text: "'" + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } + } + } +} diff --git a/src/virtualkeyboard/content/layouts/bg_BG/symbols.qml b/src/virtualkeyboard/content/layouts/bg_BG/symbols.qml new file mode 100644 index 00000000..a649017b --- /dev/null +++ b/src/virtualkeyboard/content/layouts/bg_BG/symbols.qml @@ -0,0 +1,376 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Layouts 1.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayoutLoader { + property bool secondPage + onVisibleChanged: if (!visible) secondPage = false + sourceComponent: secondPage ? page2 : page1 + Component { + id: page1 + KeyboardLayout { + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_1 + text: "1" + } + Key { + key: Qt.Key_2 + text: "2" + } + Key { + key: Qt.Key_3 + text: "3" + } + Key { + key: Qt.Key_4 + text: "4" + } + Key { + key: Qt.Key_5 + text: "5" + } + Key { + key: Qt.Key_6 + text: "6" + } + Key { + key: Qt.Key_7 + text: "7" + } + Key { + key: Qt.Key_8 + text: "8" + } + Key { + key: Qt.Key_9 + text: "9" + } + Key { + key: Qt.Key_0 + text: "0" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + key: Qt.Key_At + text: "@" + } + Key { + key: Qt.Key_NumberSign + text: "#" + } + Key { + key: Qt.Key_Percent + text: "%" + } + Key { + key: Qt.Key_Ampersand + text: "&" + } + Key { + key: Qt.Key_Asterisk + text: "*" + } + Key { + key: Qt.Key_Minus + text: "-" + } + Key { + key: Qt.Key_Plus + text: "+" + } + Key { + key: Qt.Key_ParenLeft + text: "(" + } + Key { + key: Qt.Key_ParenRight + text: ")" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + Key { + displayText: "1/2" + functionKey: true + onClicked: secondPage = !secondPage + } + Key { + key: Qt.Key_Exclam + text: "!" + } + Key { + key: Qt.Key_QuoteDbl + text: '"' + } + Key { + key: Qt.Key_Less + text: "<" + } + Key { + key: Qt.Key_Greater + text: ">" + } + Key { + key: Qt.Key_Apostrophe + text: "'" + } + Key { + key: Qt.Key_Colon + text: ":" + } + Key { + key: Qt.Key_Semicolon + text: ";" + } + Key { + key: Qt.Key_Slash + text: "/" + } + Key { + key: Qt.Key_Question + text: "?" + } + Key { + weight: 204 + displayText: "1/2" + functionKey: true + onClicked: secondPage = !secondPage + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + displayText: InputContext.inputEngine.inputMode === InputEngine.Cyrillic ? "АБВ" : "ABC" + } + ChangeLanguageKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: ".," + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } + } + } + Component { + id: page2 + KeyboardLayout { + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_AsciiTilde + text: "~" + } + Key { + key: Qt.Key_Agrave + text: "`" + } + Key { + key: Qt.Key_Bar + text: "|" + } + Key { + key: 0x7B + text: "·" + } + Key { + key: 0x221A + text: "√" + } + Key { + key: Qt.Key_division + text: "÷" + } + Key { + key: Qt.Key_multiply + text: "×" + } + Key { + key: Qt.Key_onehalf + text: "½" + alternativeKeys: "¼⅓½¾⅞" + } + Key { + key: Qt.Key_BraceLeft + text: "{" + } + Key { + key: Qt.Key_BraceRight + text: "}" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + key: Qt.Key_Dollar + text: "$" + } + Key { + key: 0x20AC + text: "€" + } + Key { + key: 0xC2 + text: "£" + } + Key { + key: 0xA2 + text: "¢" + } + Key { + key: 0xA5 + text: "¥" + } + Key { + key: Qt.Key_Equal + text: "=" + } + Key { + key: Qt.Key_section + text: "§" + } + Key { + key: Qt.Key_BracketLeft + text: "[" + } + Key { + key: Qt.Key_BracketRight + text: "]" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + Key { + displayText: "2/2" + functionKey: true + onClicked: secondPage = !secondPage + } + Key { + key: Qt.Key_Underscore + text: "_" + } + Key { + key: 0x2122 + text: '™' + } + Key { + key: 0x00AE + text: '®' + } + Key { + key: Qt.Key_guillemotleft + text: '«' + } + Key { + key: Qt.Key_guillemotright + text: '»' + } + Key { + key: 0x201C + text: '“' + } + Key { + key: 0x201D + text: '”' + } + Key { + key: Qt.Key_Backslash + text: "\\" + } + Key { + key: Qt.Key_AsciiCircum + text: "^" + } + Key { + weight: 204 + displayText: "2/2" + functionKey: true + onClicked: secondPage = !secondPage + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + displayText: InputContext.inputEngine.inputMode === InputEngine.Cyrillic ? "АБВ" : "ABC" + } + ChangeLanguageKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: 0x2026 + text: "\u2026" + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } + } + } +} diff --git a/src/virtualkeyboard/content/layouts/cs_CZ/handwriting.qml b/src/virtualkeyboard/content/layouts/cs_CZ/handwriting.qml new file mode 100644 index 00000000..a8d3b59b --- /dev/null +++ b/src/virtualkeyboard/content/layouts/cs_CZ/handwriting.qml @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Layouts 1.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayout { + function createInputMethod() { + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) + } + sharedLayouts: ['symbols'] + inputMode: InputEngine.Latin + + KeyboardRow { + Layout.preferredHeight: 3 + KeyboardColumn { + Layout.preferredWidth: bottomRow.width - hideKeyboardKey.width + KeyboardRow { + TraceInputKey { + objectName: "hwrInputArea" + patternRecognitionMode: InputEngine.HandwritingRecoginition + } + } + } + KeyboardColumn { + Layout.preferredWidth: hideKeyboardKey.width + KeyboardRow { + BackspaceKey {} + } + KeyboardRow { + EnterKey {} + } + KeyboardRow { + ShiftKey { } + } + } + } + KeyboardRow { + id: bottomRow + Layout.preferredHeight: 1 + keyWeight: 154 + InputModeKey { + weight: 217 + } + ChangeLanguageKey { + weight: 154 + customLayoutsOnly: true + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Minus + text: "-" + alternativeKeys: "<>()#%&*/\\\"'=+-_" + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: ":;,.?!" + } + HideKeyboardKey { + id: hideKeyboardKey + weight: 204 + } + } +} diff --git a/src/virtualkeyboard/content/layouts/cs_CZ/main.qml b/src/virtualkeyboard/content/layouts/cs_CZ/main.qml new file mode 100644 index 00000000..1a4057e8 --- /dev/null +++ b/src/virtualkeyboard/content/layouts/cs_CZ/main.qml @@ -0,0 +1,207 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayout { + inputMode: InputEngine.Latin + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_Q + text: "q" + } + Key { + key: Qt.Key_W + text: "w" + } + Key { + key: Qt.Key_E + text: "e" + alternativeKeys: "eéě" + } + Key { + key: Qt.Key_R + text: "r" + alternativeKeys: "rř" + } + Key { + key: Qt.Key_T + text: "t" + alternativeKeys: "tť" + } + Key { + key: Qt.Key_Z + text: "z" + alternativeKeys: "zž" + } + Key { + key: Qt.Key_U + text: "u" + alternativeKeys: "uúů" + } + Key { + key: Qt.Key_I + text: "i" + alternativeKeys: "ií" + } + Key { + key: Qt.Key_O + text: "o" + alternativeKeys: "oóö" + } + Key { + key: Qt.Key_P + text: "p" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + key: Qt.Key_A + text: "a" + alternativeKeys: "aåäá" + } + Key { + key: Qt.Key_S + text: "s" + alternativeKeys: "sš" + } + Key { + key: Qt.Key_D + text: "d" + alternativeKeys: "dď" + } + Key { + key: Qt.Key_F + text: "f" + } + Key { + key: Qt.Key_G + text: "g" + } + Key { + key: Qt.Key_H + text: "h" + } + Key { + key: Qt.Key_J + text: "j" + } + Key { + key: Qt.Key_K + text: "k" + } + Key { + key: Qt.Key_L + text: "l" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + ShiftKey {} + Key { + key: Qt.Key_Y + text: "y" + alternativeKeys: "yý" + } + Key { + key: Qt.Key_X + text: "x" + } + Key { + key: Qt.Key_C + text: "c" + alternativeKeys: "cćč" + } + Key { + key: Qt.Key_V + text: "v" + } + Key { + key: Qt.Key_B + text: "b" + } + Key { + key: Qt.Key_N + text: "n" + alternativeKeys: "nń" + } + Key { + key: Qt.Key_M + text: "m" + } + Key { + key: Qt.Key_Comma + text: "," + } + Key { + key: Qt.Key_Period + text: "." + } + ShiftKey { + weight: 204 + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + } + ChangeLanguageKey { + weight: 154 + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Minus + text: "-" + alternativeKeys: "-\"'" + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } +} diff --git a/src/virtualkeyboard/content/layouts/cs_CZ/symbols.qml b/src/virtualkeyboard/content/layouts/cs_CZ/symbols.qml new file mode 100644 index 00000000..76c06493 --- /dev/null +++ b/src/virtualkeyboard/content/layouts/cs_CZ/symbols.qml @@ -0,0 +1,376 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Layouts 1.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayoutLoader { + property bool secondPage + onVisibleChanged: if (!visible) secondPage = false + sourceComponent: secondPage ? page2 : page1 + Component { + id: page1 + KeyboardLayout { + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_1 + text: "1" + } + Key { + key: Qt.Key_2 + text: "2" + } + Key { + key: Qt.Key_3 + text: "3" + } + Key { + key: Qt.Key_4 + text: "4" + } + Key { + key: Qt.Key_5 + text: "5" + } + Key { + key: Qt.Key_6 + text: "6" + } + Key { + key: Qt.Key_7 + text: "7" + } + Key { + key: Qt.Key_8 + text: "8" + } + Key { + key: Qt.Key_9 + text: "9" + } + Key { + key: Qt.Key_0 + text: "0" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + key: Qt.Key_At + text: "@" + } + Key { + key: Qt.Key_NumberSign + text: "#" + } + Key { + key: Qt.Key_Percent + text: "%" + } + Key { + key: Qt.Key_Ampersand + text: "&" + } + Key { + key: Qt.Key_Asterisk + text: "*" + } + Key { + key: Qt.Key_Minus + text: "-" + } + Key { + key: Qt.Key_Plus + text: "+" + } + Key { + key: Qt.Key_ParenLeft + text: "(" + } + Key { + key: Qt.Key_ParenRight + text: ")" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + Key { + displayText: "1/2" + functionKey: true + onClicked: secondPage = !secondPage + } + Key { + key: Qt.Key_Exclam + text: "!" + } + Key { + key: Qt.Key_QuoteDbl + text: '"' + } + Key { + key: Qt.Key_Apostrophe + text: "'" + } + Key { + key: Qt.Key_Less + text: "<" + } + Key { + key: Qt.Key_Greater + text: ">" + } + Key { + key: Qt.Key_Colon + text: ":" + } + Key { + key: Qt.Key_Semicolon + text: ";" + } + Key { + key: Qt.Key_Slash + text: "/" + } + Key { + key: Qt.Key_Question + text: "?" + } + Key { + weight: 204 + displayText: "1/2" + functionKey: true + onClicked: secondPage = !secondPage + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + displayText: "ABC" + } + ChangeLanguageKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: ".," + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } + } + } + Component { + id: page2 + KeyboardLayout { + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_AsciiTilde + text: "~" + } + Key { + key: Qt.Key_Agrave + text: "`" + } + Key { + key: Qt.Key_Bar + text: "|" + } + Key { + key: 0x7B + text: "·" + } + Key { + key: 0x221A + text: "√" + } + Key { + key: Qt.Key_division + text: "÷" + } + Key { + key: Qt.Key_multiply + text: "×" + } + Key { + key: Qt.Key_onehalf + text: "½" + alternativeKeys: "¼⅓½¾⅞" + } + Key { + key: Qt.Key_BraceLeft + text: "{" + } + Key { + key: Qt.Key_BraceRight + text: "}" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + key: Qt.Key_Dollar + text: "$" + } + Key { + key: 0x20AC + text: "€" + } + Key { + key: 0xC2 + text: "£" + } + Key { + key: 0xA2 + text: "¢" + } + Key { + key: 0xA5 + text: "¥" + } + Key { + key: Qt.Key_Equal + text: "=" + } + Key { + key: Qt.Key_section + text: "§" + } + Key { + key: Qt.Key_BracketLeft + text: "[" + } + Key { + key: Qt.Key_BracketRight + text: "]" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + Key { + displayText: "2/2" + functionKey: true + onClicked: secondPage = !secondPage + } + Key { + key: Qt.Key_Underscore + text: "_" + } + Key { + key: 0x2122 + text: '™' + } + Key { + key: 0x00AE + text: '®' + } + Key { + key: Qt.Key_guillemotleft + text: '«' + } + Key { + key: Qt.Key_guillemotright + text: '»' + } + Key { + key: 0x201C + text: '“' + } + Key { + key: 0x201D + text: '”' + } + Key { + key: Qt.Key_Backslash + text: "\\" + } + Key { + key: Qt.Key_AsciiCircum + text: "^" + } + Key { + weight: 204 + displayText: "2/2" + functionKey: true + onClicked: secondPage = !secondPage + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + displayText: "ABC" + } + ChangeLanguageKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: 0x2026 + text: "\u2026" + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } + } + } +} diff --git a/src/virtualkeyboard/content/layouts/da_DK/handwriting.qml b/src/virtualkeyboard/content/layouts/da_DK/handwriting.qml index 8f3672c9..d42de535 100644 --- a/src/virtualkeyboard/content/layouts/da_DK/handwriting.qml +++ b/src/virtualkeyboard/content/layouts/da_DK/handwriting.qml @@ -29,11 +29,11 @@ import QtQuick 2.0 import QtQuick.Layouts 1.0 -import QtQuick.VirtualKeyboard 2.1 +import QtQuick.VirtualKeyboard 2.3 KeyboardLayout { function createInputMethod() { - return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.1; HandwritingInputMethod {}', parent) + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) } sharedLayouts: ['symbols'] inputMode: InputEngine.Latin @@ -66,15 +66,8 @@ KeyboardLayout { id: bottomRow Layout.preferredHeight: 1 keyWeight: 154 - Key { + InputModeKey { weight: 217 - key: Qt.Key_Mode_switch - noKeyEvent: true - functionKey: true - text: InputContext.inputEngine.inputMode === InputEngine.Latin ? "123" : "ABC" - onClicked: InputContext.inputEngine.inputMode = InputContext.inputEngine.inputMode === InputEngine.Latin ? InputEngine.Numeric : InputEngine.Latin - enabled: !(InputContext.inputMethodHints & (Qt.ImhDialableCharactersOnly | Qt.ImhFormattedNumbersOnly | Qt.ImhDigitsOnly)) - keyPanelDelegate: keyboard.style ? keyboard.style.symbolKeyPanel : undefined } ChangeLanguageKey { weight: 154 diff --git a/src/virtualkeyboard/content/layouts/de_DE/handwriting.qml b/src/virtualkeyboard/content/layouts/de_DE/handwriting.qml index 8f3672c9..d42de535 100644 --- a/src/virtualkeyboard/content/layouts/de_DE/handwriting.qml +++ b/src/virtualkeyboard/content/layouts/de_DE/handwriting.qml @@ -29,11 +29,11 @@ import QtQuick 2.0 import QtQuick.Layouts 1.0 -import QtQuick.VirtualKeyboard 2.1 +import QtQuick.VirtualKeyboard 2.3 KeyboardLayout { function createInputMethod() { - return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.1; HandwritingInputMethod {}', parent) + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) } sharedLayouts: ['symbols'] inputMode: InputEngine.Latin @@ -66,15 +66,8 @@ KeyboardLayout { id: bottomRow Layout.preferredHeight: 1 keyWeight: 154 - Key { + InputModeKey { weight: 217 - key: Qt.Key_Mode_switch - noKeyEvent: true - functionKey: true - text: InputContext.inputEngine.inputMode === InputEngine.Latin ? "123" : "ABC" - onClicked: InputContext.inputEngine.inputMode = InputContext.inputEngine.inputMode === InputEngine.Latin ? InputEngine.Numeric : InputEngine.Latin - enabled: !(InputContext.inputMethodHints & (Qt.ImhDialableCharactersOnly | Qt.ImhFormattedNumbersOnly | Qt.ImhDigitsOnly)) - keyPanelDelegate: keyboard.style ? keyboard.style.symbolKeyPanel : undefined } ChangeLanguageKey { weight: 154 diff --git a/src/virtualkeyboard/content/layouts/el_GR/handwriting.qml b/src/virtualkeyboard/content/layouts/el_GR/handwriting.qml new file mode 100644 index 00000000..03747a85 --- /dev/null +++ b/src/virtualkeyboard/content/layouts/el_GR/handwriting.qml @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Layouts 1.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayout { + function createInputMethod() { + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) + } + sharedLayouts: ['symbols'] + + KeyboardRow { + Layout.preferredHeight: 3 + KeyboardColumn { + Layout.preferredWidth: bottomRow.width - hideKeyboardKey.width + KeyboardRow { + TraceInputKey { + objectName: "hwrInputArea" + patternRecognitionMode: InputEngine.HandwritingRecoginition + horizontalRulers: + InputContext.inputEngine.inputMode !== InputEngine.Greek ? [] : + [Math.round(boundingBox.height / 4), Math.round(boundingBox.height / 4) * 2, Math.round(boundingBox.height / 4) * 3] + } + } + } + KeyboardColumn { + Layout.preferredWidth: hideKeyboardKey.width + KeyboardRow { + BackspaceKey {} + } + KeyboardRow { + EnterKey {} + } + KeyboardRow { + ShiftKey { } + } + } + } + KeyboardRow { + id: bottomRow + Layout.preferredHeight: 1 + keyWeight: 154 + InputModeKey { + weight: 217 + } + ChangeLanguageKey { + weight: 154 + customLayoutsOnly: true + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Apostrophe + text: "'" + alternativeKeys: "<>()#%&*/\\\"'=+-_" + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: "!,.;:?" + } + HideKeyboardKey { + id: hideKeyboardKey + weight: 204 + } + } +} diff --git a/src/virtualkeyboard/content/layouts/el_GR/main.qml b/src/virtualkeyboard/content/layouts/el_GR/main.qml new file mode 100644 index 00000000..50b5fec1 --- /dev/null +++ b/src/virtualkeyboard/content/layouts/el_GR/main.qml @@ -0,0 +1,364 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayoutLoader { + sharedLayouts: ['symbols'] + sourceComponent: InputContext.inputEngine.inputMode === InputEngine.Greek ? greekLayout : latinLayout + Component { + id: greekLayout + KeyboardLayout { + keyWeight: 160 + KeyboardRow { + Key { + text: "ς" + } + Key { + text: "ε" + alternativeKeys: "εέ" + } + Key { + text: "ρ" + } + Key { + text: "τ" + } + Key { + text: "ψ" + } + Key { + text: "υ" + alternativeKeys: "υύϋΰ" + } + Key { + text: "θ" + } + Key { + text: "ι" + alternativeKeys: "ιίϊΐ" + } + Key { + text: "ο" + alternativeKeys: "οό" + } + Key { + text: "π" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + text: "α" + alternativeKeys: "αά" + } + Key { + text: "σ" + } + Key { + text: "δ" + } + Key { + text: "φ" + } + Key { + text: "γ" + } + Key { + text: "η" + alternativeKeys: "ηή" + } + Key { + text: "ξ" + } + Key { + text: "κ" + } + Key { + text: "λ" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + InputModeKey { + inputModes: [InputEngine.Greek, InputEngine.Latin] + } + Key { + text: "ζ" + } + Key { + text: "χ" + } + Key { + text: "ψ" + } + Key { + text: "ω" + alternativeKeys: "ωώ" + } + Key { + text: "β" + } + Key { + text: "ν" + } + Key { + text: "μ" + } + Key { + key: Qt.Key_Comma + text: "," + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: "!.;?" + } + ShiftKey { + weight: 204 + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + } + ChangeLanguageKey { + weight: 154 + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Apostrophe + text: "'" + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } + } + } + Component { + id: latinLayout + KeyboardLayout { + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_Q + text: "q" + } + Key { + key: Qt.Key_W + text: "w" + } + Key { + key: Qt.Key_E + text: "e" + alternativeKeys: "êeëèé" + } + Key { + key: Qt.Key_R + text: "r" + alternativeKeys: "ŕrř" + } + Key { + key: Qt.Key_T + text: "t" + alternativeKeys: "ţtŧť" + } + Key { + key: Qt.Key_Y + text: "y" + alternativeKeys: "ÿyýŷ" + } + Key { + key: Qt.Key_U + text: "u" + alternativeKeys: "űūũûüuùú" + } + Key { + key: Qt.Key_I + text: "i" + alternativeKeys: "îïīĩiìí" + } + Key { + key: Qt.Key_O + text: "o" + alternativeKeys: "œøõôöòóo" + } + Key { + key: Qt.Key_P + text: "p" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + key: Qt.Key_A + text: "a" + alternativeKeys: (InputContext.inputMethodHints & (Qt.ImhEmailCharactersOnly | Qt.ImhUrlCharactersOnly)) ? "a@äåãâàá" : "aäåãâàá" + smallTextVisible: (InputContext.inputMethodHints & (Qt.ImhEmailCharactersOnly | Qt.ImhUrlCharactersOnly)) + } + Key { + key: Qt.Key_S + text: "s" + alternativeKeys: "šsşś" + } + Key { + key: Qt.Key_D + text: "d" + alternativeKeys: "dđď" + } + Key { + key: Qt.Key_F + text: "f" + } + Key { + key: Qt.Key_G + text: "g" + alternativeKeys: "ġgģĝğ" + } + Key { + key: Qt.Key_H + text: "h" + } + Key { + key: Qt.Key_J + text: "j" + } + Key { + key: Qt.Key_K + text: "k" + } + Key { + key: Qt.Key_L + text: "l" + alternativeKeys: "ĺŀłļľl" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + InputModeKey { + inputModes: [InputEngine.Greek, InputEngine.Latin] + } + Key { + key: Qt.Key_Z + text: "z" + alternativeKeys: "zžż" + } + Key { + key: Qt.Key_X + text: "x" + } + Key { + key: Qt.Key_C + text: "c" + alternativeKeys: "çcċčć" + } + Key { + key: Qt.Key_V + text: "v" + } + Key { + key: Qt.Key_B + text: "b" + } + Key { + key: Qt.Key_N + text: "n" + alternativeKeys: "ņńnň" + } + Key { + key: Qt.Key_M + text: "m" + } + Key { + key: Qt.Key_Comma + text: "," + } + Key { + key: Qt.Key_Period + text: "." + } + ShiftKey { + weight: 204 + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + } + ChangeLanguageKey { + weight: 154 + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Apostrophe + text: "'" + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } + } + } +} diff --git a/src/virtualkeyboard/content/layouts/el_GR/symbols.qml b/src/virtualkeyboard/content/layouts/el_GR/symbols.qml new file mode 100644 index 00000000..b5eda063 --- /dev/null +++ b/src/virtualkeyboard/content/layouts/el_GR/symbols.qml @@ -0,0 +1,376 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Layouts 1.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayoutLoader { + property bool secondPage + onVisibleChanged: if (!visible) secondPage = false + sourceComponent: secondPage ? page2 : page1 + Component { + id: page1 + KeyboardLayout { + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_1 + text: "1" + } + Key { + key: Qt.Key_2 + text: "2" + } + Key { + key: Qt.Key_3 + text: "3" + } + Key { + key: Qt.Key_4 + text: "4" + } + Key { + key: Qt.Key_5 + text: "5" + } + Key { + key: Qt.Key_6 + text: "6" + } + Key { + key: Qt.Key_7 + text: "7" + } + Key { + key: Qt.Key_8 + text: "8" + } + Key { + key: Qt.Key_9 + text: "9" + } + Key { + key: Qt.Key_0 + text: "0" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + key: Qt.Key_At + text: "@" + } + Key { + key: Qt.Key_NumberSign + text: "#" + } + Key { + key: Qt.Key_Percent + text: "%" + } + Key { + key: Qt.Key_Ampersand + text: "&" + } + Key { + key: Qt.Key_Asterisk + text: "*" + } + Key { + key: Qt.Key_Minus + text: "-" + } + Key { + key: Qt.Key_Plus + text: "+" + } + Key { + key: Qt.Key_ParenLeft + text: "(" + } + Key { + key: Qt.Key_ParenRight + text: ")" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + Key { + displayText: "1/2" + functionKey: true + onClicked: secondPage = !secondPage + } + Key { + key: Qt.Key_Exclam + text: "!" + } + Key { + key: Qt.Key_QuoteDbl + text: '"' + } + Key { + key: Qt.Key_Less + text: "<" + } + Key { + key: Qt.Key_Greater + text: ">" + } + Key { + key: Qt.Key_Apostrophe + text: "'" + } + Key { + key: Qt.Key_Colon + text: ":" + } + Key { + key: Qt.Key_Semicolon + text: ";" + } + Key { + key: Qt.Key_Slash + text: "/" + } + Key { + key: Qt.Key_Question + text: "?" + } + Key { + weight: 204 + displayText: "1/2" + functionKey: true + onClicked: secondPage = !secondPage + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + displayText: InputContext.inputEngine.inputMode === InputEngine.Greek ? "ΑΒΓ" : "ABC" + } + ChangeLanguageKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: ".," + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } + } + } + Component { + id: page2 + KeyboardLayout { + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_AsciiTilde + text: "~" + } + Key { + key: Qt.Key_Agrave + text: "`" + } + Key { + key: Qt.Key_Bar + text: "|" + } + Key { + key: 0x7B + text: "·" + } + Key { + key: 0x221A + text: "√" + } + Key { + key: Qt.Key_division + text: "÷" + } + Key { + key: Qt.Key_multiply + text: "×" + } + Key { + key: Qt.Key_onehalf + text: "½" + alternativeKeys: "¼⅓½¾⅞" + } + Key { + key: Qt.Key_BraceLeft + text: "{" + } + Key { + key: Qt.Key_BraceRight + text: "}" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + key: Qt.Key_Dollar + text: "$" + } + Key { + key: 0x20AC + text: "€" + } + Key { + key: 0xC2 + text: "£" + } + Key { + key: 0xA2 + text: "¢" + } + Key { + key: 0xA5 + text: "¥" + } + Key { + key: Qt.Key_Equal + text: "=" + } + Key { + key: Qt.Key_section + text: "§" + } + Key { + key: Qt.Key_BracketLeft + text: "[" + } + Key { + key: Qt.Key_BracketRight + text: "]" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + Key { + displayText: "2/2" + functionKey: true + onClicked: secondPage = !secondPage + } + Key { + key: Qt.Key_Underscore + text: "_" + } + Key { + key: 0x2122 + text: '™' + } + Key { + key: 0x00AE + text: '®' + } + Key { + key: Qt.Key_guillemotleft + text: '«' + } + Key { + key: Qt.Key_guillemotright + text: '»' + } + Key { + key: 0x201C + text: '“' + } + Key { + key: 0x201D + text: '”' + } + Key { + key: Qt.Key_Backslash + text: "\\" + } + Key { + key: Qt.Key_AsciiCircum + text: "^" + } + Key { + weight: 204 + displayText: "2/2" + functionKey: true + onClicked: secondPage = !secondPage + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + displayText: InputContext.inputEngine.inputMode === InputEngine.Greek ? "ΑΒΓ" : "ABC" + } + ChangeLanguageKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: 0x2026 + text: "\u2026" + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } + } + } +} diff --git a/src/virtualkeyboard/content/layouts/en_GB/handwriting.qml b/src/virtualkeyboard/content/layouts/en_GB/handwriting.qml index 8f3672c9..d42de535 100644 --- a/src/virtualkeyboard/content/layouts/en_GB/handwriting.qml +++ b/src/virtualkeyboard/content/layouts/en_GB/handwriting.qml @@ -29,11 +29,11 @@ import QtQuick 2.0 import QtQuick.Layouts 1.0 -import QtQuick.VirtualKeyboard 2.1 +import QtQuick.VirtualKeyboard 2.3 KeyboardLayout { function createInputMethod() { - return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.1; HandwritingInputMethod {}', parent) + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) } sharedLayouts: ['symbols'] inputMode: InputEngine.Latin @@ -66,15 +66,8 @@ KeyboardLayout { id: bottomRow Layout.preferredHeight: 1 keyWeight: 154 - Key { + InputModeKey { weight: 217 - key: Qt.Key_Mode_switch - noKeyEvent: true - functionKey: true - text: InputContext.inputEngine.inputMode === InputEngine.Latin ? "123" : "ABC" - onClicked: InputContext.inputEngine.inputMode = InputContext.inputEngine.inputMode === InputEngine.Latin ? InputEngine.Numeric : InputEngine.Latin - enabled: !(InputContext.inputMethodHints & (Qt.ImhDialableCharactersOnly | Qt.ImhFormattedNumbersOnly | Qt.ImhDigitsOnly)) - keyPanelDelegate: keyboard.style ? keyboard.style.symbolKeyPanel : undefined } ChangeLanguageKey { weight: 154 diff --git a/src/virtualkeyboard/content/layouts/es_ES/handwriting.qml b/src/virtualkeyboard/content/layouts/es_ES/handwriting.qml index bbf77c10..0b929162 100644 --- a/src/virtualkeyboard/content/layouts/es_ES/handwriting.qml +++ b/src/virtualkeyboard/content/layouts/es_ES/handwriting.qml @@ -29,11 +29,11 @@ import QtQuick 2.0 import QtQuick.Layouts 1.0 -import QtQuick.VirtualKeyboard 2.1 +import QtQuick.VirtualKeyboard 2.3 KeyboardLayout { function createInputMethod() { - return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.1; HandwritingInputMethod {}', parent) + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) } sharedLayouts: ['symbols'] inputMode: InputEngine.Latin @@ -66,15 +66,8 @@ KeyboardLayout { id: bottomRow Layout.preferredHeight: 1 keyWeight: 154 - Key { + InputModeKey { weight: 217 - key: Qt.Key_Mode_switch - noKeyEvent: true - functionKey: true - text: InputContext.inputEngine.inputMode === InputEngine.Latin ? "123" : "ABC" - onClicked: InputContext.inputEngine.inputMode = InputContext.inputEngine.inputMode === InputEngine.Latin ? InputEngine.Numeric : InputEngine.Latin - enabled: !(InputContext.inputMethodHints & (Qt.ImhDialableCharactersOnly | Qt.ImhFormattedNumbersOnly | Qt.ImhDigitsOnly)) - keyPanelDelegate: keyboard.style ? keyboard.style.symbolKeyPanel : undefined } ChangeLanguageKey { weight: 154 diff --git a/src/virtualkeyboard/content/layouts/et_EE/handwriting.qml b/src/virtualkeyboard/content/layouts/et_EE/handwriting.qml new file mode 100644 index 00000000..d42de535 --- /dev/null +++ b/src/virtualkeyboard/content/layouts/et_EE/handwriting.qml @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Layouts 1.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayout { + function createInputMethod() { + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) + } + sharedLayouts: ['symbols'] + inputMode: InputEngine.Latin + + KeyboardRow { + Layout.preferredHeight: 3 + KeyboardColumn { + Layout.preferredWidth: bottomRow.width - hideKeyboardKey.width + KeyboardRow { + TraceInputKey { + objectName: "hwrInputArea" + patternRecognitionMode: InputEngine.HandwritingRecoginition + } + } + } + KeyboardColumn { + Layout.preferredWidth: hideKeyboardKey.width + KeyboardRow { + BackspaceKey {} + } + KeyboardRow { + EnterKey {} + } + KeyboardRow { + ShiftKey { } + } + } + } + KeyboardRow { + id: bottomRow + Layout.preferredHeight: 1 + keyWeight: 154 + InputModeKey { + weight: 217 + } + ChangeLanguageKey { + weight: 154 + customLayoutsOnly: true + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Apostrophe + text: "'" + alternativeKeys: "<>()#%&*/\\\"'=+-_" + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: ":;,.?!" + } + HideKeyboardKey { + id: hideKeyboardKey + weight: 204 + } + } +} diff --git a/src/virtualkeyboard/content/layouts/et_EE/main.qml b/src/virtualkeyboard/content/layouts/et_EE/main.qml new file mode 100644 index 00000000..0deff352 --- /dev/null +++ b/src/virtualkeyboard/content/layouts/et_EE/main.qml @@ -0,0 +1,215 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.VirtualKeyboard 2.1 + +KeyboardLayout { + inputMode: InputEngine.Latin + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_Q + text: "q" + } + Key { + key: Qt.Key_W + text: "w" + } + Key { + key: Qt.Key_E + text: "e" + } + Key { + key: Qt.Key_R + text: "r" + } + Key { + key: Qt.Key_T + text: "t" + } + Key { + key: Qt.Key_Y + text: "y" + } + Key { + key: Qt.Key_U + text: "u" + } + Key { + key: Qt.Key_I + text: "i" + } + Key { + key: Qt.Key_O + text: "o" + } + Key { + key: Qt.Key_P + text: "p" + } + Key { + key: Qt.Key_Udiaeresis + text: "ü" + } + Key { + key: Qt.Key_Otilde + text: "õ" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 66 + } + Key { + key: Qt.Key_A + text: "a" + } + Key { + key: Qt.Key_S + text: "s" + alternativeKeys: "sš" + } + Key { + key: Qt.Key_D + text: "d" + } + Key { + key: Qt.Key_F + text: "f" + } + Key { + key: Qt.Key_G + text: "g" + } + Key { + key: Qt.Key_H + text: "h" + } + Key { + key: Qt.Key_J + text: "j" + } + Key { + key: Qt.Key_K + text: "k" + } + Key { + key: Qt.Key_L + text: "l" + } + Key { + key: Qt.Key_Odiaeresis + text: "ö" + } + Key { + key: Qt.Key_Adiaeresis + text: "ä" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + ShiftKey { } + Key { + key: Qt.Key_Z + text: "z" + alternativeKeys: "zž" + } + Key { + key: Qt.Key_X + text: "x" + } + Key { + key: Qt.Key_C + text: "c" + } + Key { + key: Qt.Key_V + text: "v" + } + Key { + key: Qt.Key_B + text: "b" + } + Key { + key: Qt.Key_N + text: "n" + } + Key { + key: Qt.Key_M + text: "m" + } + Key { + key: Qt.Key_Comma + text: "," + } + Key { + key: Qt.Key_Period + text: "." + } + Key { + key: Qt.Key_Minus + text: "-" + } + ShiftKey { + weight: 264 + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + } + ChangeLanguageKey { + weight: 154 + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Apostrophe + text: "'" + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } +} diff --git a/src/virtualkeyboard/content/layouts/et_EE/symbols.qml b/src/virtualkeyboard/content/layouts/et_EE/symbols.qml new file mode 100644 index 00000000..49f6e709 --- /dev/null +++ b/src/virtualkeyboard/content/layouts/et_EE/symbols.qml @@ -0,0 +1,376 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Layouts 1.0 +import QtQuick.VirtualKeyboard 2.1 + +KeyboardLayoutLoader { + property bool secondPage + onVisibleChanged: if (!visible) secondPage = false + sourceComponent: secondPage ? page2 : page1 + Component { + id: page1 + KeyboardLayout { + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_1 + text: "1" + } + Key { + key: Qt.Key_2 + text: "2" + } + Key { + key: Qt.Key_3 + text: "3" + } + Key { + key: Qt.Key_4 + text: "4" + } + Key { + key: Qt.Key_5 + text: "5" + } + Key { + key: Qt.Key_6 + text: "6" + } + Key { + key: Qt.Key_7 + text: "7" + } + Key { + key: Qt.Key_8 + text: "8" + } + Key { + key: Qt.Key_9 + text: "9" + } + Key { + key: Qt.Key_0 + text: "0" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + key: Qt.Key_At + text: "@" + } + Key { + key: Qt.Key_NumberSign + text: "#" + } + Key { + key: Qt.Key_Percent + text: "%" + } + Key { + key: Qt.Key_Ampersand + text: "&" + } + Key { + key: Qt.Key_Asterisk + text: "*" + } + Key { + key: Qt.Key_Minus + text: "-" + } + Key { + key: Qt.Key_Plus + text: "+" + } + Key { + key: Qt.Key_ParenLeft + text: "(" + } + Key { + key: Qt.Key_ParenRight + text: ")" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + Key { + displayText: "1/2" + functionKey: true + onClicked: secondPage = !secondPage + } + Key { + key: Qt.Key_Exclam + text: "!" + } + Key { + key: Qt.Key_QuoteDbl + text: '"' + } + Key { + key: Qt.Key_Less + text: "<" + } + Key { + key: Qt.Key_Greater + text: ">" + } + Key { + key: Qt.Key_Apostrophe + text: "'" + } + Key { + key: Qt.Key_Colon + text: ":" + } + Key { + key: Qt.Key_Semicolon + text: ";" + } + Key { + key: Qt.Key_Slash + text: "/" + } + Key { + key: Qt.Key_Question + text: "?" + } + Key { + weight: 204 + displayText: "1/2" + functionKey: true + onClicked: secondPage = !secondPage + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + displayText: "ABC" + } + ChangeLanguageKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: ".," + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } + } + } + Component { + id: page2 + KeyboardLayout { + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_AsciiTilde + text: "~" + } + Key { + key: Qt.Key_Agrave + text: "`" + } + Key { + key: Qt.Key_Bar + text: "|" + } + Key { + key: 0x7B + text: "·" + } + Key { + key: 0x221A + text: "√" + } + Key { + key: Qt.Key_division + text: "÷" + } + Key { + key: Qt.Key_multiply + text: "×" + } + Key { + key: Qt.Key_onehalf + text: "½" + alternativeKeys: "¼⅓½¾⅞" + } + Key { + key: Qt.Key_BraceLeft + text: "{" + } + Key { + key: Qt.Key_BraceRight + text: "}" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + key: Qt.Key_Dollar + text: "$" + } + Key { + key: 0x20AC + text: "€" + } + Key { + key: 0xC2 + text: "£" + } + Key { + key: 0xA2 + text: "¢" + } + Key { + key: 0xA5 + text: "¥" + } + Key { + key: Qt.Key_Equal + text: "=" + } + Key { + key: Qt.Key_section + text: "§" + } + Key { + key: Qt.Key_BracketLeft + text: "[" + } + Key { + key: Qt.Key_BracketRight + text: "]" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + Key { + displayText: "2/2" + functionKey: true + onClicked: secondPage = !secondPage + } + Key { + key: Qt.Key_Underscore + text: "_" + } + Key { + key: 0x2122 + text: '™' + } + Key { + key: 0x00AE + text: '®' + } + Key { + key: Qt.Key_guillemotleft + text: '«' + } + Key { + key: Qt.Key_guillemotright + text: '»' + } + Key { + key: 0x201C + text: '“' + } + Key { + key: 0x201D + text: '”' + } + Key { + key: Qt.Key_Backslash + text: "\\" + } + Key { + key: Qt.Key_AsciiCircum + text: "^" + } + Key { + weight: 204 + displayText: "2/2" + functionKey: true + onClicked: secondPage = !secondPage + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + displayText: "ABC" + } + ChangeLanguageKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: 0x2026 + text: "\u2026" + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } + } + } +} diff --git a/src/virtualkeyboard/content/layouts/fa_FA/handwriting.qml b/src/virtualkeyboard/content/layouts/fa_FA/handwriting.qml new file mode 100644 index 00000000..006df195 --- /dev/null +++ b/src/virtualkeyboard/content/layouts/fa_FA/handwriting.qml @@ -0,0 +1,116 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Layouts 1.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayout { + function createInputMethod() { + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) + } + sharedLayouts: ['symbols'] + inputMode: InputEngine.Arabic + readonly property bool alphabeticInputMode: [InputEngine.Latin, InputEngine.Dialable].indexOf(InputContext.inputEngine.inputMode) !== -1 + + KeyboardRow { + Layout.preferredHeight: 3 + KeyboardColumn { + Layout.preferredWidth: bottomRow.width - hideKeyboardKey.width + KeyboardRow { + TraceInputKey { + objectName: "hwrInputArea" + patternRecognitionMode: InputEngine.HandwritingRecoginition + horizontalRulers: + alphabeticInputMode ? [] : + [Math.round(boundingBox.height / 4), Math.round(boundingBox.height / 4) * 2, Math.round(boundingBox.height / 4) * 3] + } + } + } + KeyboardColumn { + Layout.preferredWidth: hideKeyboardKey.width + KeyboardRow { + BackspaceKey {} + } + KeyboardRow { + EnterKey {} + } + KeyboardRow { + ShiftKey { } + } + } + } + KeyboardRow { + id: bottomRow + Layout.preferredHeight: 1 + keyWeight: 154 + InputModeKey { + weight: 217 + inputModeNameList: [ + "ABC", // InputEngine.Latin + "\u0660\u0661\u0662", // InputEngine.Numeric + "123", // InputEngine.Dialable + "", // InputEngine.Pinyin + "", // InputEngine.Cangjie + "", // InputEngine.Zhuyin + "", // InputEngine.Hangul + "", // InputEngine.Hiragana + "", // InputEngine.Katakana + "", // InputEngine.FullwidthLatin + "", // InputEngine.Greek + "", // InputEngine.Cyrillic + "\u0627\u200C\u0628\u200C\u067E", // InputEngine.Arabic + ] + } + ChangeLanguageKey { + weight: 154 + customLayoutsOnly: true + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: alphabeticInputMode ? Qt.Key_Apostrophe : 0x060C + text: alphabeticInputMode ? "'" : "\u060C" + alternativeKeys: alphabeticInputMode ? "<>()#%&*/\\\"'=+-_" : "\"\u060C\u066B\u066C\u066D" + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: alphabeticInputMode ? ":;,.?!" : ":\u061B.\u061F!" + } + HideKeyboardKey { + id: hideKeyboardKey + weight: 204 + } + } +} diff --git a/src/virtualkeyboard/content/layouts/fa_FA/main.qml b/src/virtualkeyboard/content/layouts/fa_FA/main.qml index 3681dd2b..e73665a8 100644 --- a/src/virtualkeyboard/content/layouts/fa_FA/main.qml +++ b/src/virtualkeyboard/content/layouts/fa_FA/main.qml @@ -28,10 +28,10 @@ ****************************************************************************/ import QtQuick 2.0 -import QtQuick.VirtualKeyboard 2.1 +import QtQuick.VirtualKeyboard 2.3 KeyboardLayoutLoader { - inputMode: InputEngine.Latin + inputMode: InputEngine.Arabic sourceComponent: InputContext.shift ? page2 : page1 Component { id: page1 @@ -166,6 +166,9 @@ KeyboardLayoutLoader { ChangeLanguageKey { weight: 154 } + HandwritingModeKey { + weight: 154 + } SpaceKey { weight: 864 } @@ -317,6 +320,9 @@ KeyboardLayoutLoader { ChangeLanguageKey { weight: 154 } + HandwritingModeKey { + weight: 154 + } SpaceKey { weight: 864 } diff --git a/src/virtualkeyboard/content/layouts/fi_FI/handwriting.qml b/src/virtualkeyboard/content/layouts/fi_FI/handwriting.qml index 8f3672c9..d42de535 100644 --- a/src/virtualkeyboard/content/layouts/fi_FI/handwriting.qml +++ b/src/virtualkeyboard/content/layouts/fi_FI/handwriting.qml @@ -29,11 +29,11 @@ import QtQuick 2.0 import QtQuick.Layouts 1.0 -import QtQuick.VirtualKeyboard 2.1 +import QtQuick.VirtualKeyboard 2.3 KeyboardLayout { function createInputMethod() { - return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.1; HandwritingInputMethod {}', parent) + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) } sharedLayouts: ['symbols'] inputMode: InputEngine.Latin @@ -66,15 +66,8 @@ KeyboardLayout { id: bottomRow Layout.preferredHeight: 1 keyWeight: 154 - Key { + InputModeKey { weight: 217 - key: Qt.Key_Mode_switch - noKeyEvent: true - functionKey: true - text: InputContext.inputEngine.inputMode === InputEngine.Latin ? "123" : "ABC" - onClicked: InputContext.inputEngine.inputMode = InputContext.inputEngine.inputMode === InputEngine.Latin ? InputEngine.Numeric : InputEngine.Latin - enabled: !(InputContext.inputMethodHints & (Qt.ImhDialableCharactersOnly | Qt.ImhFormattedNumbersOnly | Qt.ImhDigitsOnly)) - keyPanelDelegate: keyboard.style ? keyboard.style.symbolKeyPanel : undefined } ChangeLanguageKey { weight: 154 diff --git a/src/virtualkeyboard/content/layouts/fr_FR/handwriting.qml b/src/virtualkeyboard/content/layouts/fr_FR/handwriting.qml index 8f3672c9..d42de535 100644 --- a/src/virtualkeyboard/content/layouts/fr_FR/handwriting.qml +++ b/src/virtualkeyboard/content/layouts/fr_FR/handwriting.qml @@ -29,11 +29,11 @@ import QtQuick 2.0 import QtQuick.Layouts 1.0 -import QtQuick.VirtualKeyboard 2.1 +import QtQuick.VirtualKeyboard 2.3 KeyboardLayout { function createInputMethod() { - return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.1; HandwritingInputMethod {}', parent) + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) } sharedLayouts: ['symbols'] inputMode: InputEngine.Latin @@ -66,15 +66,8 @@ KeyboardLayout { id: bottomRow Layout.preferredHeight: 1 keyWeight: 154 - Key { + InputModeKey { weight: 217 - key: Qt.Key_Mode_switch - noKeyEvent: true - functionKey: true - text: InputContext.inputEngine.inputMode === InputEngine.Latin ? "123" : "ABC" - onClicked: InputContext.inputEngine.inputMode = InputContext.inputEngine.inputMode === InputEngine.Latin ? InputEngine.Numeric : InputEngine.Latin - enabled: !(InputContext.inputMethodHints & (Qt.ImhDialableCharactersOnly | Qt.ImhFormattedNumbersOnly | Qt.ImhDigitsOnly)) - keyPanelDelegate: keyboard.style ? keyboard.style.symbolKeyPanel : undefined } ChangeLanguageKey { weight: 154 diff --git a/src/virtualkeyboard/content/layouts/he_IL/handwriting.qml b/src/virtualkeyboard/content/layouts/he_IL/handwriting.qml new file mode 100644 index 00000000..321fbd42 --- /dev/null +++ b/src/virtualkeyboard/content/layouts/he_IL/handwriting.qml @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Layouts 1.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayout { + function createInputMethod() { + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) + } + sharedLayouts: ['symbols'] + + KeyboardRow { + Layout.preferredHeight: 3 + KeyboardColumn { + Layout.preferredWidth: bottomRow.width - hideKeyboardKey.width + KeyboardRow { + TraceInputKey { + objectName: "hwrInputArea" + patternRecognitionMode: InputEngine.HandwritingRecoginition + horizontalRulers: + InputContext.inputEngine.inputMode !== InputEngine.Hebrew ? [] : + [Math.round(boundingBox.height / 4), Math.round(boundingBox.height / 4) * 2, Math.round(boundingBox.height / 4) * 3] + } + } + } + KeyboardColumn { + Layout.preferredWidth: hideKeyboardKey.width + KeyboardRow { + BackspaceKey {} + } + KeyboardRow { + EnterKey {} + } + KeyboardRow { + ShiftKey { } + } + } + } + KeyboardRow { + id: bottomRow + Layout.preferredHeight: 1 + keyWeight: 154 + InputModeKey { + weight: 217 + } + ChangeLanguageKey { + weight: 154 + customLayoutsOnly: true + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Apostrophe + text: "'" + alternativeKeys: "<>()#%&*/\\'\"=+-_" + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: ":;,.?!" + } + HideKeyboardKey { + id: hideKeyboardKey + weight: 204 + } + } +} diff --git a/src/virtualkeyboard/content/layouts/he_IL/main.qml b/src/virtualkeyboard/content/layouts/he_IL/main.qml new file mode 100644 index 00000000..fde3cb4b --- /dev/null +++ b/src/virtualkeyboard/content/layouts/he_IL/main.qml @@ -0,0 +1,381 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayoutLoader { + sharedLayouts: ['symbols'] + sourceComponent: InputContext.inputEngine.inputMode === InputEngine.Hebrew ? hebrewLayout : latinLayout + Component { + id: hebrewLayout + KeyboardLayout { + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_Apostrophe + text: "'" + alternativeKeys: "'\"" + } + Key { + key: Qt.Key_Minus + text: "-" + } + Key { + text: "\u05E7" + alternativeKeys: "\u05B3\u05E7\u05B8\u05BB" + } + Key { + text: "\u05E8" + } + Key { + text: "\u05D0" + } + Key { + text: "\u05D8" + } + Key { + text: "\u05D5" + alternativeKeys: [ "\u05D5", "\u05D5\u05B9", "\u05D5\u05BC" ] + } + Key { + text: "\u05DF" + } + Key { + text: "\u05DD" + } + Key { + text: "\u05E4" + alternativeKeys: "\u05B2\u05B7\u05E4" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + text: "\u05E9" + alternativeKeys: [ "\u05E9", "\u05B0", "\u05E9\u05C2", "\u05E9\u05C1" ] + } + Key { + text: "\u05D3" + alternativeKeys: "\u05D3\u05BC" + } + Key { + text: "\u05D2" + alternativeKeys: [ "\u05D2", "\u05D2\u05F3" ] + } + Key { + text: "\u05DB" + } + Key { + text: "\u05E2" + } + Key { + text: "\u05D9" + alternativeKeys: [ "\u05D9", "\u05F2\u05B7" ] + } + Key { + text: "\u05D7" + alternativeKeys: [ "\u05B9", "\u05D7", "\u05D7\u05F3", "\u05B4" ] + } + Key { + text: "\u05DC" + } + Key { + text: "\u05DA" + } + Key { + text: "\u05E3" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + InputModeKey { + inputModes: [InputEngine.Hebrew, InputEngine.Latin] + } + Key { + text: "\u05D6" + alternativeKeys: [ "\u05D6", "\u05D6\u05F3" ] + } + Key { + text: "\u05E1" + alternativeKeys: "\u05E1\u05B6\u05B1" + } + Key { + text: "\u05D1" + } + Key { + text: "\u05D4" + } + Key { + text: "\u05E0" + } + Key { + text: "\u05DE" + } + Key { + text: "\u05E6" + alternativeKeys: [ "\u05E6", "\u05E6\u05F3", "\u05B5" ] + } + Key { + text: "\u05EA" + alternativeKeys: [ "\u05EA", "\u05EA\u05F3" ] + } + Key { + text: "\u05E5" + alternativeKeys: [ "\u05E5", "\u05E5\u05F3" ] + } + Key { + key: Qt.Key_Comma + text: "," + alternativeKeys: ":,;" + } + ShiftKey { + weight: 204 + enabled: false + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + } + ChangeLanguageKey { + weight: 154 + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: "!.?" + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } + } + } + Component { + id: latinLayout + KeyboardLayout { + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_Q + text: "q" + } + Key { + key: Qt.Key_W + text: "w" + } + Key { + key: Qt.Key_E + text: "e" + alternativeKeys: "êeëèé" + } + Key { + key: Qt.Key_R + text: "r" + alternativeKeys: "ŕrř" + } + Key { + key: Qt.Key_T + text: "t" + alternativeKeys: "ţtŧť" + } + Key { + key: Qt.Key_Y + text: "y" + alternativeKeys: "ÿyýŷ" + } + Key { + key: Qt.Key_U + text: "u" + alternativeKeys: "űūũûüuùú" + } + Key { + key: Qt.Key_I + text: "i" + alternativeKeys: "îïīĩiìí" + } + Key { + key: Qt.Key_O + text: "o" + alternativeKeys: "œøõôöòóo" + } + Key { + key: Qt.Key_P + text: "p" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + key: Qt.Key_A + text: "a" + alternativeKeys: "aäåãâàá" + } + Key { + key: Qt.Key_S + text: "s" + alternativeKeys: "šsşś" + } + Key { + key: Qt.Key_D + text: "d" + alternativeKeys: "dđď" + } + Key { + key: Qt.Key_F + text: "f" + } + Key { + key: Qt.Key_G + text: "g" + alternativeKeys: "ġgģĝğ" + } + Key { + key: Qt.Key_H + text: "h" + } + Key { + key: Qt.Key_J + text: "j" + } + Key { + key: Qt.Key_K + text: "k" + } + Key { + key: Qt.Key_L + text: "l" + alternativeKeys: "ĺŀłļľl" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + InputModeKey { + inputModes: [InputEngine.Hebrew, InputEngine.Latin] + } + Key { + key: Qt.Key_Z + text: "z" + alternativeKeys: "zžż" + } + Key { + key: Qt.Key_X + text: "x" + } + Key { + key: Qt.Key_C + text: "c" + alternativeKeys: "çcċčć" + } + Key { + key: Qt.Key_V + text: "v" + } + Key { + key: Qt.Key_B + text: "b" + } + Key { + key: Qt.Key_N + text: "n" + alternativeKeys: "ņńnň" + } + Key { + key: Qt.Key_M + text: "m" + } + Key { + key: Qt.Key_Comma + text: "," + alternativeKeys: ":,;" + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: "!.?" + } + ShiftKey { + weight: 204 + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + } + ChangeLanguageKey { + weight: 154 + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Apostrophe + text: "'" + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } + } + } +} diff --git a/src/virtualkeyboard/content/layouts/he_IL/symbols.qml b/src/virtualkeyboard/content/layouts/he_IL/symbols.qml new file mode 100644 index 00000000..866a91a7 --- /dev/null +++ b/src/virtualkeyboard/content/layouts/he_IL/symbols.qml @@ -0,0 +1,376 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Layouts 1.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayoutLoader { + property bool secondPage + onVisibleChanged: if (!visible) secondPage = false + sourceComponent: secondPage ? page2 : page1 + Component { + id: page1 + KeyboardLayout { + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_1 + text: "1" + } + Key { + key: Qt.Key_2 + text: "2" + } + Key { + key: Qt.Key_3 + text: "3" + } + Key { + key: Qt.Key_4 + text: "4" + } + Key { + key: Qt.Key_5 + text: "5" + } + Key { + key: Qt.Key_6 + text: "6" + } + Key { + key: Qt.Key_7 + text: "7" + } + Key { + key: Qt.Key_8 + text: "8" + } + Key { + key: Qt.Key_9 + text: "9" + } + Key { + key: Qt.Key_0 + text: "0" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + key: Qt.Key_At + text: "@" + } + Key { + key: Qt.Key_NumberSign + text: "#" + } + Key { + key: Qt.Key_Percent + text: "%" + } + Key { + key: Qt.Key_Ampersand + text: "&" + } + Key { + key: Qt.Key_Asterisk + text: "*" + } + Key { + key: Qt.Key_Minus + text: "-" + } + Key { + key: Qt.Key_Plus + text: "+" + } + Key { + key: Qt.Key_ParenLeft + text: "(" + } + Key { + key: Qt.Key_ParenRight + text: ")" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + Key { + displayText: "1/2" + functionKey: true + onClicked: secondPage = !secondPage + } + Key { + key: Qt.Key_Exclam + text: "!" + } + Key { + key: Qt.Key_QuoteDbl + text: '"' + } + Key { + key: Qt.Key_Less + text: "<" + } + Key { + key: Qt.Key_Greater + text: ">" + } + Key { + key: Qt.Key_Apostrophe + text: "'" + } + Key { + key: Qt.Key_Colon + text: ":" + } + Key { + key: Qt.Key_Semicolon + text: ";" + } + Key { + key: Qt.Key_Slash + text: "/" + } + Key { + key: Qt.Key_Question + text: "?" + } + Key { + weight: 204 + displayText: "1/2" + functionKey: true + onClicked: secondPage = !secondPage + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + displayText: InputContext.inputEngine.inputMode === InputEngine.Hebrew ? "\u05D0\u05D1\u05D2" : "ABC" + } + ChangeLanguageKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: ".," + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } + } + } + Component { + id: page2 + KeyboardLayout { + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_AsciiTilde + text: "~" + } + Key { + key: Qt.Key_Agrave + text: "`" + } + Key { + key: Qt.Key_Bar + text: "|" + } + Key { + key: 0x7B + text: "·" + } + Key { + key: 0x221A + text: "√" + } + Key { + key: Qt.Key_division + text: "÷" + } + Key { + key: Qt.Key_multiply + text: "×" + } + Key { + key: Qt.Key_onehalf + text: "½" + alternativeKeys: "¼⅓½¾⅞" + } + Key { + key: Qt.Key_BraceLeft + text: "{" + } + Key { + key: Qt.Key_BraceRight + text: "}" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + key: Qt.Key_Dollar + text: "$" + alternativeKeys: "$¢" + } + Key { + key: 0x20AC + text: "€" + } + Key { + key: 0xC2 + text: "£" + } + Key { + text: "₪" + } + Key { + key: 0xA5 + text: "¥" + } + Key { + key: Qt.Key_Equal + text: "=" + } + Key { + key: Qt.Key_section + text: "§" + } + Key { + key: Qt.Key_BracketLeft + text: "[" + } + Key { + key: Qt.Key_BracketRight + text: "]" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + Key { + displayText: "2/2" + functionKey: true + onClicked: secondPage = !secondPage + } + Key { + key: Qt.Key_Underscore + text: "_" + } + Key { + key: 0x2122 + text: '™' + } + Key { + key: 0x00AE + text: '®' + } + Key { + key: Qt.Key_guillemotleft + text: '«' + } + Key { + key: Qt.Key_guillemotright + text: '»' + } + Key { + key: 0x201C + text: '“' + } + Key { + key: 0x201D + text: '”' + } + Key { + key: Qt.Key_Backslash + text: "\\" + } + Key { + key: Qt.Key_AsciiCircum + text: "^" + } + Key { + weight: 204 + displayText: "2/2" + functionKey: true + onClicked: secondPage = !secondPage + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + displayText: InputContext.inputEngine.inputMode === InputEngine.Hebrew ? "\u05D0\u05D1\u05D2" : "ABC" + } + ChangeLanguageKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: 0x2026 + text: "\u2026" + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } + } + } +} diff --git a/src/virtualkeyboard/content/layouts/hr_HR/handwriting.qml b/src/virtualkeyboard/content/layouts/hr_HR/handwriting.qml new file mode 100644 index 00000000..6f43e6de --- /dev/null +++ b/src/virtualkeyboard/content/layouts/hr_HR/handwriting.qml @@ -0,0 +1,102 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Layouts 1.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayout { + function createInputMethod() { + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) + } + sharedLayouts: ['symbols'] + inputMode: InputEngine.Latin + + KeyboardRow { + Layout.preferredHeight: 3 + KeyboardColumn { + Layout.preferredWidth: bottomRow.width - hideKeyboardKey.width + KeyboardRow { + TraceInputKey { + objectName: "hwrInputArea" + patternRecognitionMode: InputEngine.HandwritingRecoginition + } + } + } + KeyboardColumn { + Layout.preferredWidth: hideKeyboardKey.width + KeyboardRow { + BackspaceKey {} + } + KeyboardRow { + EnterKey {} + } + KeyboardRow { + ShiftKey { } + } + } + } + KeyboardRow { + id: bottomRow + Layout.preferredHeight: 1 + keyWeight: 154 + InputModeKey { + weight: 217 + } + ChangeLanguageKey { + weight: 154 + customLayoutsOnly: true + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Minus + text: "-" + alternativeKeys: "<>()#%&*/\\\"'=+-_" + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: ":;,.?!" + } + Key { + key: 0x102 + text: "ă" + alternativeKeys: "ăîâșț" + } + HideKeyboardKey { + id: hideKeyboardKey + weight: 204 + } + } +} diff --git a/src/virtualkeyboard/content/layouts/hr_HR/main.qml b/src/virtualkeyboard/content/layouts/hr_HR/main.qml new file mode 100644 index 00000000..6c4c306c --- /dev/null +++ b/src/virtualkeyboard/content/layouts/hr_HR/main.qml @@ -0,0 +1,218 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayout { + inputMode: InputEngine.Latin + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_Q + text: "q" + } + Key { + key: Qt.Key_W + text: "w" + } + Key { + key: Qt.Key_E + text: "e" + } + Key { + key: Qt.Key_R + text: "r" + } + Key { + key: Qt.Key_T + text: "t" + } + Key { + key: Qt.Key_Z + text: "z" + } + Key { + key: Qt.Key_U + text: "u" + } + Key { + key: Qt.Key_I + text: "i" + } + Key { + key: Qt.Key_O + text: "o" + alternativeKeys: "oö" + } + Key { + key: Qt.Key_P + text: "p" + } + Key { + key: 0x160 + text: "š" + } + Key { + key: 0x110 + text: "đ" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + key: Qt.Key_A + text: "a" + alternativeKeys: "aåä" + } + Key { + key: Qt.Key_S + text: "s" + } + Key { + key: Qt.Key_D + text: "d" + } + Key { + key: Qt.Key_F + text: "f" + } + Key { + key: Qt.Key_G + text: "g" + } + Key { + key: Qt.Key_H + text: "h" + } + Key { + key: Qt.Key_J + text: "j" + } + Key { + key: Qt.Key_K + text: "k" + } + Key { + key: Qt.Key_L + text: "l" + } + Key { + key: 0x10C + text: "č" + } + Key { + key: 0x106 + text: "ć" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + ShiftKey { + weight: 166 + } + Key { + key: Qt.Key_Y + text: "y" + } + Key { + key: Qt.Key_X + text: "x" + } + Key { + key: Qt.Key_C + text: "c" + } + Key { + key: Qt.Key_V + text: "v" + } + Key { + key: Qt.Key_B + text: "b" + } + Key { + key: Qt.Key_N + text: "n" + } + Key { + key: Qt.Key_M + text: "m" + } + Key { + key: 0x17D + text: "ž" + } + Key { + key: Qt.Key_Comma + text: "," + } + Key { + key: Qt.Key_Period + text: "." + } + ShiftKey { + weight: 234 + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + } + ChangeLanguageKey { + weight: 154 + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Minus + text: "-" + alternativeKeys: [ "-", "\"", "'" ] + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } +} diff --git a/src/virtualkeyboard/content/layouts/hr_HR/symbols.qml b/src/virtualkeyboard/content/layouts/hr_HR/symbols.qml new file mode 100644 index 00000000..76c06493 --- /dev/null +++ b/src/virtualkeyboard/content/layouts/hr_HR/symbols.qml @@ -0,0 +1,376 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Layouts 1.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayoutLoader { + property bool secondPage + onVisibleChanged: if (!visible) secondPage = false + sourceComponent: secondPage ? page2 : page1 + Component { + id: page1 + KeyboardLayout { + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_1 + text: "1" + } + Key { + key: Qt.Key_2 + text: "2" + } + Key { + key: Qt.Key_3 + text: "3" + } + Key { + key: Qt.Key_4 + text: "4" + } + Key { + key: Qt.Key_5 + text: "5" + } + Key { + key: Qt.Key_6 + text: "6" + } + Key { + key: Qt.Key_7 + text: "7" + } + Key { + key: Qt.Key_8 + text: "8" + } + Key { + key: Qt.Key_9 + text: "9" + } + Key { + key: Qt.Key_0 + text: "0" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + key: Qt.Key_At + text: "@" + } + Key { + key: Qt.Key_NumberSign + text: "#" + } + Key { + key: Qt.Key_Percent + text: "%" + } + Key { + key: Qt.Key_Ampersand + text: "&" + } + Key { + key: Qt.Key_Asterisk + text: "*" + } + Key { + key: Qt.Key_Minus + text: "-" + } + Key { + key: Qt.Key_Plus + text: "+" + } + Key { + key: Qt.Key_ParenLeft + text: "(" + } + Key { + key: Qt.Key_ParenRight + text: ")" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + Key { + displayText: "1/2" + functionKey: true + onClicked: secondPage = !secondPage + } + Key { + key: Qt.Key_Exclam + text: "!" + } + Key { + key: Qt.Key_QuoteDbl + text: '"' + } + Key { + key: Qt.Key_Apostrophe + text: "'" + } + Key { + key: Qt.Key_Less + text: "<" + } + Key { + key: Qt.Key_Greater + text: ">" + } + Key { + key: Qt.Key_Colon + text: ":" + } + Key { + key: Qt.Key_Semicolon + text: ";" + } + Key { + key: Qt.Key_Slash + text: "/" + } + Key { + key: Qt.Key_Question + text: "?" + } + Key { + weight: 204 + displayText: "1/2" + functionKey: true + onClicked: secondPage = !secondPage + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + displayText: "ABC" + } + ChangeLanguageKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: ".," + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } + } + } + Component { + id: page2 + KeyboardLayout { + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_AsciiTilde + text: "~" + } + Key { + key: Qt.Key_Agrave + text: "`" + } + Key { + key: Qt.Key_Bar + text: "|" + } + Key { + key: 0x7B + text: "·" + } + Key { + key: 0x221A + text: "√" + } + Key { + key: Qt.Key_division + text: "÷" + } + Key { + key: Qt.Key_multiply + text: "×" + } + Key { + key: Qt.Key_onehalf + text: "½" + alternativeKeys: "¼⅓½¾⅞" + } + Key { + key: Qt.Key_BraceLeft + text: "{" + } + Key { + key: Qt.Key_BraceRight + text: "}" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + key: Qt.Key_Dollar + text: "$" + } + Key { + key: 0x20AC + text: "€" + } + Key { + key: 0xC2 + text: "£" + } + Key { + key: 0xA2 + text: "¢" + } + Key { + key: 0xA5 + text: "¥" + } + Key { + key: Qt.Key_Equal + text: "=" + } + Key { + key: Qt.Key_section + text: "§" + } + Key { + key: Qt.Key_BracketLeft + text: "[" + } + Key { + key: Qt.Key_BracketRight + text: "]" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + Key { + displayText: "2/2" + functionKey: true + onClicked: secondPage = !secondPage + } + Key { + key: Qt.Key_Underscore + text: "_" + } + Key { + key: 0x2122 + text: '™' + } + Key { + key: 0x00AE + text: '®' + } + Key { + key: Qt.Key_guillemotleft + text: '«' + } + Key { + key: Qt.Key_guillemotright + text: '»' + } + Key { + key: 0x201C + text: '“' + } + Key { + key: 0x201D + text: '”' + } + Key { + key: Qt.Key_Backslash + text: "\\" + } + Key { + key: Qt.Key_AsciiCircum + text: "^" + } + Key { + weight: 204 + displayText: "2/2" + functionKey: true + onClicked: secondPage = !secondPage + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + displayText: "ABC" + } + ChangeLanguageKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: 0x2026 + text: "\u2026" + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } + } + } +} diff --git a/src/virtualkeyboard/content/layouts/hu_HU/handwriting.qml b/src/virtualkeyboard/content/layouts/hu_HU/handwriting.qml new file mode 100644 index 00000000..a8d3b59b --- /dev/null +++ b/src/virtualkeyboard/content/layouts/hu_HU/handwriting.qml @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Layouts 1.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayout { + function createInputMethod() { + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) + } + sharedLayouts: ['symbols'] + inputMode: InputEngine.Latin + + KeyboardRow { + Layout.preferredHeight: 3 + KeyboardColumn { + Layout.preferredWidth: bottomRow.width - hideKeyboardKey.width + KeyboardRow { + TraceInputKey { + objectName: "hwrInputArea" + patternRecognitionMode: InputEngine.HandwritingRecoginition + } + } + } + KeyboardColumn { + Layout.preferredWidth: hideKeyboardKey.width + KeyboardRow { + BackspaceKey {} + } + KeyboardRow { + EnterKey {} + } + KeyboardRow { + ShiftKey { } + } + } + } + KeyboardRow { + id: bottomRow + Layout.preferredHeight: 1 + keyWeight: 154 + InputModeKey { + weight: 217 + } + ChangeLanguageKey { + weight: 154 + customLayoutsOnly: true + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Minus + text: "-" + alternativeKeys: "<>()#%&*/\\\"'=+-_" + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: ":;,.?!" + } + HideKeyboardKey { + id: hideKeyboardKey + weight: 204 + } + } +} diff --git a/src/virtualkeyboard/content/layouts/hu_HU/main.qml b/src/virtualkeyboard/content/layouts/hu_HU/main.qml new file mode 100644 index 00000000..21a513a3 --- /dev/null +++ b/src/virtualkeyboard/content/layouts/hu_HU/main.qml @@ -0,0 +1,201 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayout { + inputMode: InputEngine.Latin + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_Q + text: "q" + } + Key { + key: Qt.Key_W + text: "w" + } + Key { + key: Qt.Key_E + text: "e" + alternativeKeys: "eé" + } + Key { + key: Qt.Key_R + text: "r" + } + Key { + key: Qt.Key_T + text: "t" + } + Key { + key: Qt.Key_Z + text: "z" + alternativeKeys: "zž" + } + Key { + key: Qt.Key_U + text: "u" + alternativeKeys: "úűuü" + } + Key { + key: Qt.Key_I + text: "i" + alternativeKeys: "ií" + } + Key { + key: Qt.Key_O + text: "o" + alternativeKeys: "óőoö" + } + Key { + key: Qt.Key_P + text: "p" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + key: Qt.Key_A + text: "a" + alternativeKeys: "aåäá" + } + Key { + key: Qt.Key_S + text: "s" + alternativeKeys: "sš" + } + Key { + key: Qt.Key_D + text: "d" + } + Key { + key: Qt.Key_F + text: "f" + } + Key { + key: Qt.Key_G + text: "g" + } + Key { + key: Qt.Key_H + text: "h" + } + Key { + key: Qt.Key_J + text: "j" + } + Key { + key: Qt.Key_K + text: "k" + } + Key { + key: Qt.Key_L + text: "l" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + ShiftKey {} + Key { + key: Qt.Key_Y + text: "y" + } + Key { + key: Qt.Key_X + text: "x" + } + Key { + key: Qt.Key_C + text: "c" + } + Key { + key: Qt.Key_V + text: "v" + } + Key { + key: Qt.Key_B + text: "b" + } + Key { + key: Qt.Key_N + text: "n" + } + Key { + key: Qt.Key_M + text: "m" + } + Key { + key: Qt.Key_Comma + text: "," + } + Key { + key: Qt.Key_Period + text: "." + } + ShiftKey { + weight: 204 + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + } + ChangeLanguageKey { + weight: 154 + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Minus + text: "-" + alternativeKeys: "-\"'" + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } +} diff --git a/src/virtualkeyboard/content/layouts/hu_HU/symbols.qml b/src/virtualkeyboard/content/layouts/hu_HU/symbols.qml new file mode 100644 index 00000000..76c06493 --- /dev/null +++ b/src/virtualkeyboard/content/layouts/hu_HU/symbols.qml @@ -0,0 +1,376 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Layouts 1.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayoutLoader { + property bool secondPage + onVisibleChanged: if (!visible) secondPage = false + sourceComponent: secondPage ? page2 : page1 + Component { + id: page1 + KeyboardLayout { + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_1 + text: "1" + } + Key { + key: Qt.Key_2 + text: "2" + } + Key { + key: Qt.Key_3 + text: "3" + } + Key { + key: Qt.Key_4 + text: "4" + } + Key { + key: Qt.Key_5 + text: "5" + } + Key { + key: Qt.Key_6 + text: "6" + } + Key { + key: Qt.Key_7 + text: "7" + } + Key { + key: Qt.Key_8 + text: "8" + } + Key { + key: Qt.Key_9 + text: "9" + } + Key { + key: Qt.Key_0 + text: "0" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + key: Qt.Key_At + text: "@" + } + Key { + key: Qt.Key_NumberSign + text: "#" + } + Key { + key: Qt.Key_Percent + text: "%" + } + Key { + key: Qt.Key_Ampersand + text: "&" + } + Key { + key: Qt.Key_Asterisk + text: "*" + } + Key { + key: Qt.Key_Minus + text: "-" + } + Key { + key: Qt.Key_Plus + text: "+" + } + Key { + key: Qt.Key_ParenLeft + text: "(" + } + Key { + key: Qt.Key_ParenRight + text: ")" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + Key { + displayText: "1/2" + functionKey: true + onClicked: secondPage = !secondPage + } + Key { + key: Qt.Key_Exclam + text: "!" + } + Key { + key: Qt.Key_QuoteDbl + text: '"' + } + Key { + key: Qt.Key_Apostrophe + text: "'" + } + Key { + key: Qt.Key_Less + text: "<" + } + Key { + key: Qt.Key_Greater + text: ">" + } + Key { + key: Qt.Key_Colon + text: ":" + } + Key { + key: Qt.Key_Semicolon + text: ";" + } + Key { + key: Qt.Key_Slash + text: "/" + } + Key { + key: Qt.Key_Question + text: "?" + } + Key { + weight: 204 + displayText: "1/2" + functionKey: true + onClicked: secondPage = !secondPage + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + displayText: "ABC" + } + ChangeLanguageKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: ".," + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } + } + } + Component { + id: page2 + KeyboardLayout { + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_AsciiTilde + text: "~" + } + Key { + key: Qt.Key_Agrave + text: "`" + } + Key { + key: Qt.Key_Bar + text: "|" + } + Key { + key: 0x7B + text: "·" + } + Key { + key: 0x221A + text: "√" + } + Key { + key: Qt.Key_division + text: "÷" + } + Key { + key: Qt.Key_multiply + text: "×" + } + Key { + key: Qt.Key_onehalf + text: "½" + alternativeKeys: "¼⅓½¾⅞" + } + Key { + key: Qt.Key_BraceLeft + text: "{" + } + Key { + key: Qt.Key_BraceRight + text: "}" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + key: Qt.Key_Dollar + text: "$" + } + Key { + key: 0x20AC + text: "€" + } + Key { + key: 0xC2 + text: "£" + } + Key { + key: 0xA2 + text: "¢" + } + Key { + key: 0xA5 + text: "¥" + } + Key { + key: Qt.Key_Equal + text: "=" + } + Key { + key: Qt.Key_section + text: "§" + } + Key { + key: Qt.Key_BracketLeft + text: "[" + } + Key { + key: Qt.Key_BracketRight + text: "]" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + Key { + displayText: "2/2" + functionKey: true + onClicked: secondPage = !secondPage + } + Key { + key: Qt.Key_Underscore + text: "_" + } + Key { + key: 0x2122 + text: '™' + } + Key { + key: 0x00AE + text: '®' + } + Key { + key: Qt.Key_guillemotleft + text: '«' + } + Key { + key: Qt.Key_guillemotright + text: '»' + } + Key { + key: 0x201C + text: '“' + } + Key { + key: 0x201D + text: '”' + } + Key { + key: Qt.Key_Backslash + text: "\\" + } + Key { + key: Qt.Key_AsciiCircum + text: "^" + } + Key { + weight: 204 + displayText: "2/2" + functionKey: true + onClicked: secondPage = !secondPage + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + displayText: "ABC" + } + ChangeLanguageKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: 0x2026 + text: "\u2026" + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } + } + } +} diff --git a/src/virtualkeyboard/content/layouts/it_IT/handwriting.qml b/src/virtualkeyboard/content/layouts/it_IT/handwriting.qml index 8f3672c9..d42de535 100644 --- a/src/virtualkeyboard/content/layouts/it_IT/handwriting.qml +++ b/src/virtualkeyboard/content/layouts/it_IT/handwriting.qml @@ -29,11 +29,11 @@ import QtQuick 2.0 import QtQuick.Layouts 1.0 -import QtQuick.VirtualKeyboard 2.1 +import QtQuick.VirtualKeyboard 2.3 KeyboardLayout { function createInputMethod() { - return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.1; HandwritingInputMethod {}', parent) + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) } sharedLayouts: ['symbols'] inputMode: InputEngine.Latin @@ -66,15 +66,8 @@ KeyboardLayout { id: bottomRow Layout.preferredHeight: 1 keyWeight: 154 - Key { + InputModeKey { weight: 217 - key: Qt.Key_Mode_switch - noKeyEvent: true - functionKey: true - text: InputContext.inputEngine.inputMode === InputEngine.Latin ? "123" : "ABC" - onClicked: InputContext.inputEngine.inputMode = InputContext.inputEngine.inputMode === InputEngine.Latin ? InputEngine.Numeric : InputEngine.Latin - enabled: !(InputContext.inputMethodHints & (Qt.ImhDialableCharactersOnly | Qt.ImhFormattedNumbersOnly | Qt.ImhDigitsOnly)) - keyPanelDelegate: keyboard.style ? keyboard.style.symbolKeyPanel : undefined } ChangeLanguageKey { weight: 154 diff --git a/src/virtualkeyboard/content/layouts/ja_JP/handwriting.qml b/src/virtualkeyboard/content/layouts/ja_JP/handwriting.qml new file mode 100644 index 00000000..9fe3b191 --- /dev/null +++ b/src/virtualkeyboard/content/layouts/ja_JP/handwriting.qml @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Layouts 1.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayout { + function createInputMethod() { + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) + } + sharedLayouts: ['symbols'] + KeyboardRow { + Layout.preferredHeight: 3 + KeyboardColumn { + Layout.preferredWidth: bottomRow.width - hideKeyboardKey.width + KeyboardRow { + TraceInputKey { + objectName: "hwrInputArea" + patternRecognitionMode: InputEngine.HandwritingRecoginition + horizontalRulers: + InputContext.inputEngine.inputMode !== InputEngine.JapaneseHandwriting ? [] : + [Math.round(boundingBox.height / 4), Math.round(boundingBox.height / 4) * 2, Math.round(boundingBox.height / 4) * 3] + + } + } + } + KeyboardColumn { + Layout.preferredWidth: hideKeyboardKey.width + KeyboardRow { + BackspaceKey {} + } + KeyboardRow { + EnterKey {} + } + KeyboardRow { + ShiftKey { } + } + } + } + KeyboardRow { + id: bottomRow + Layout.preferredHeight: 1 + keyWeight: 154 + InputModeKey { + weight: 217 + } + ChangeLanguageKey { + weight: 154 + customLayoutsOnly: true + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Apostrophe + text: "‘" + alternativeKeys: "《》〈〉•…々〆‘’“”「」¥" + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: ":;,.、。?!" + } + HideKeyboardKey { + id: hideKeyboardKey + weight: 204 + } + } +} diff --git a/src/virtualkeyboard/content/layouts/ja_JP/main.qml b/src/virtualkeyboard/content/layouts/ja_JP/main.qml index 84baba97..2d765d36 100644 --- a/src/virtualkeyboard/content/layouts/ja_JP/main.qml +++ b/src/virtualkeyboard/content/layouts/ja_JP/main.qml @@ -28,11 +28,11 @@ ****************************************************************************/ import QtQuick 2.0 -import QtQuick.VirtualKeyboard 2.1 +import QtQuick.VirtualKeyboard 2.3 KeyboardLayoutLoader { function createInputMethod() { - return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.1; JapaneseInputMethod {}', parent, "japaneseInputMethod") + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; JapaneseInputMethod {}', parent, "japaneseInputMethod") } sharedLayouts: ['symbols'] sourceComponent: InputContext.inputEngine.inputMode === InputEngine.FullwidthLatin ? page2 : page1 @@ -129,38 +129,20 @@ KeyboardLayoutLoader { } KeyboardRow { keyWeight: 156 - Key { - key: Qt.Key_Mode_switch - noKeyEvent: true - functionKey: true - enabled: !(InputContext.inputMethodHints & Qt.ImhLatinOnly) - displayText: { - switch (InputContext.inputEngine.inputMode) { - case InputEngine.Latin: - return "\u534A\u89D2" - case InputEngine.Hiragana: - return "\u3042" - case InputEngine.Katakana: - return "\u30AB" - default: - return "" - } - } - onClicked: { - switch (InputContext.inputEngine.inputMode) { - case InputEngine.Latin: - InputContext.inputEngine.inputMode = InputEngine.FullwidthLatin - break - case InputEngine.Hiragana: - InputContext.inputEngine.inputMode = InputEngine.Katakana - break - case InputEngine.Katakana: - InputContext.inputEngine.inputMode = InputEngine.Latin - break - default: - break - } - } + InputModeKey { + enabled: !(InputContext.inputMethodHints & Qt.ImhLatinOnly) && inputModeCount > 1 + inputModeNameList: [ + "半角", // InputEngine.Latin + "", // InputEngine.Numeric + "", // InputEngine.Dialable + "", // InputEngine.Pinyin + "", // InputEngine.Cangjie + "", // InputEngine.Zhuyin + "", // InputEngine.Hangul + "あ", // InputEngine.Hiragana + "カ", // InputEngine.Katakana + "全角", // InputEngine.FullwidthLatin + ] } Key { key: Qt.Key_Z @@ -207,10 +189,11 @@ KeyboardLayoutLoader { KeyboardRow { keyWeight: 154 SymbolModeKey { - weight: 217 + weight: 194 } ChangeLanguageKey { - weight: 174 + } + HandwritingModeKey { } Key { key: Qt.Key_Left @@ -349,12 +332,7 @@ KeyboardLayoutLoader { } KeyboardRow { keyWeight: 156 - Key { - key: Qt.Key_Mode_switch - noKeyEvent: true - functionKey: true - displayText: "\u5168\u89D2" - onClicked: InputContext.inputEngine.inputMode = InputEngine.Hiragana + InputModeKey { } Key { key: Qt.Key_Z @@ -401,10 +379,11 @@ KeyboardLayoutLoader { KeyboardRow { keyWeight: 154 SymbolModeKey { - weight: 217 + weight: 194 } ChangeLanguageKey { - weight: 174 + } + HandwritingModeKey { } Key { key: Qt.Key_Left diff --git a/src/virtualkeyboard/content/layouts/ko_KR/handwriting.qml b/src/virtualkeyboard/content/layouts/ko_KR/handwriting.qml new file mode 100644 index 00000000..58fb566b --- /dev/null +++ b/src/virtualkeyboard/content/layouts/ko_KR/handwriting.qml @@ -0,0 +1,118 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Layouts 1.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayout { + function createInputMethod() { + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) + } + sharedLayouts: ['symbols'] + inputMode: preferredInputMode() + + Connections { + target: InputContext + onInputMethodHintsChanged: { + var newInputMode = preferredInputMode() + if (InputContext.inputEngine.inputModes.indexOf(newInputMode) !== -1) + InputContext.inputEngine.inputMode = newInputMode + } + } + + function preferredInputMode() { + return InputContext.inputMethodHints & + (Qt.ImhPreferLatin | Qt.ImhEmailCharactersOnly | Qt.ImhUrlCharactersOnly | + Qt.ImhLatinOnly) ? InputEngine.Latin : InputEngine.KoreanHandwriting + } + + KeyboardRow { + Layout.preferredHeight: 3 + KeyboardColumn { + Layout.preferredWidth: bottomRow.width - hideKeyboardKey.width + KeyboardRow { + TraceInputKey { + objectName: "hwrInputArea" + patternRecognitionMode: InputEngine.HandwritingRecoginition + horizontalRulers: + InputContext.inputEngine.inputMode !== InputEngine.KoreanHandwriting ? [] : + [Math.round(boundingBox.height / 4), Math.round(boundingBox.height / 4) * 2, Math.round(boundingBox.height / 4) * 3] + + } + } + } + KeyboardColumn { + Layout.preferredWidth: hideKeyboardKey.width + KeyboardRow { + BackspaceKey {} + } + KeyboardRow { + EnterKey {} + } + KeyboardRow { + ShiftKey { + enabled: InputContext.inputEngine.inputMode !== InputEngine.KoreanHandwriting + } + } + } + } + KeyboardRow { + id: bottomRow + Layout.preferredHeight: 1 + keyWeight: 154 + InputModeKey { + weight: 217 + } + ChangeLanguageKey { + weight: 154 + customLayoutsOnly: true + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Apostrophe + text: "'" + alternativeKeys: "<>()#%&*/\\\"'=+-_" + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: ":;,.?!" + } + HideKeyboardKey { + id: hideKeyboardKey + weight: 204 + } + } +} diff --git a/src/virtualkeyboard/content/layouts/ko_KR/main.qml b/src/virtualkeyboard/content/layouts/ko_KR/main.qml index 8c9e6fcb..525a0392 100644 --- a/src/virtualkeyboard/content/layouts/ko_KR/main.qml +++ b/src/virtualkeyboard/content/layouts/ko_KR/main.qml @@ -152,6 +152,9 @@ KeyboardLayoutLoader { ChangeLanguageKey { weight: 154 } + HandwritingModeKey { + weight: 154 + } SpaceKey { weight: 864 } @@ -286,6 +289,9 @@ KeyboardLayoutLoader { ChangeLanguageKey { weight: 154 } + HandwritingModeKey { + weight: 154 + } SpaceKey { weight: 864 } diff --git a/src/virtualkeyboard/content/layouts/nb_NO/handwriting.qml b/src/virtualkeyboard/content/layouts/nb_NO/handwriting.qml index 8f3672c9..d42de535 100644 --- a/src/virtualkeyboard/content/layouts/nb_NO/handwriting.qml +++ b/src/virtualkeyboard/content/layouts/nb_NO/handwriting.qml @@ -29,11 +29,11 @@ import QtQuick 2.0 import QtQuick.Layouts 1.0 -import QtQuick.VirtualKeyboard 2.1 +import QtQuick.VirtualKeyboard 2.3 KeyboardLayout { function createInputMethod() { - return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.1; HandwritingInputMethod {}', parent) + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) } sharedLayouts: ['symbols'] inputMode: InputEngine.Latin @@ -66,15 +66,8 @@ KeyboardLayout { id: bottomRow Layout.preferredHeight: 1 keyWeight: 154 - Key { + InputModeKey { weight: 217 - key: Qt.Key_Mode_switch - noKeyEvent: true - functionKey: true - text: InputContext.inputEngine.inputMode === InputEngine.Latin ? "123" : "ABC" - onClicked: InputContext.inputEngine.inputMode = InputContext.inputEngine.inputMode === InputEngine.Latin ? InputEngine.Numeric : InputEngine.Latin - enabled: !(InputContext.inputMethodHints & (Qt.ImhDialableCharactersOnly | Qt.ImhFormattedNumbersOnly | Qt.ImhDigitsOnly)) - keyPanelDelegate: keyboard.style ? keyboard.style.symbolKeyPanel : undefined } ChangeLanguageKey { weight: 154 diff --git a/src/virtualkeyboard/content/layouts/nl_NL/handwriting.qml b/src/virtualkeyboard/content/layouts/nl_NL/handwriting.qml new file mode 100644 index 00000000..d42de535 --- /dev/null +++ b/src/virtualkeyboard/content/layouts/nl_NL/handwriting.qml @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Layouts 1.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayout { + function createInputMethod() { + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) + } + sharedLayouts: ['symbols'] + inputMode: InputEngine.Latin + + KeyboardRow { + Layout.preferredHeight: 3 + KeyboardColumn { + Layout.preferredWidth: bottomRow.width - hideKeyboardKey.width + KeyboardRow { + TraceInputKey { + objectName: "hwrInputArea" + patternRecognitionMode: InputEngine.HandwritingRecoginition + } + } + } + KeyboardColumn { + Layout.preferredWidth: hideKeyboardKey.width + KeyboardRow { + BackspaceKey {} + } + KeyboardRow { + EnterKey {} + } + KeyboardRow { + ShiftKey { } + } + } + } + KeyboardRow { + id: bottomRow + Layout.preferredHeight: 1 + keyWeight: 154 + InputModeKey { + weight: 217 + } + ChangeLanguageKey { + weight: 154 + customLayoutsOnly: true + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Apostrophe + text: "'" + alternativeKeys: "<>()#%&*/\\\"'=+-_" + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: ":;,.?!" + } + HideKeyboardKey { + id: hideKeyboardKey + weight: 204 + } + } +} diff --git a/src/virtualkeyboard/content/layouts/nl_NL/main.qml b/src/virtualkeyboard/content/layouts/nl_NL/main.qml new file mode 100644 index 00000000..1deb766a --- /dev/null +++ b/src/virtualkeyboard/content/layouts/nl_NL/main.qml @@ -0,0 +1,199 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.VirtualKeyboard 2.1 + +KeyboardLayout { + inputMode: InputEngine.Latin + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_Q + text: "q" + } + Key { + key: Qt.Key_W + text: "w" + } + Key { + key: Qt.Key_E + text: "e" + alternativeKeys: "êeëèé" + } + Key { + key: Qt.Key_R + text: "r" + } + Key { + key: Qt.Key_T + text: "t" + } + Key { + key: Qt.Key_Y + text: "y" + alternativeKeys: "yijÿýŷ" + } + Key { + key: Qt.Key_U + text: "u" + alternativeKeys: "űūũûüuùú" + } + Key { + key: Qt.Key_I + text: "i" + alternativeKeys: "îïīĩiìí" + } + Key { + key: Qt.Key_O + text: "o" + alternativeKeys: "œøõôöòóo" + } + Key { + key: Qt.Key_P + text: "p" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + key: Qt.Key_A + text: "a" + alternativeKeys: "aäåãâàá" + } + Key { + key: Qt.Key_S + text: "s" + } + Key { + key: Qt.Key_D + text: "d" + } + Key { + key: Qt.Key_F + text: "f" + } + Key { + key: Qt.Key_G + text: "g" + } + Key { + key: Qt.Key_H + text: "h" + } + Key { + key: Qt.Key_J + text: "j" + } + Key { + key: Qt.Key_K + text: "k" + } + Key { + key: Qt.Key_L + text: "l" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + ShiftKey {} + Key { + key: Qt.Key_Z + text: "z" + } + Key { + key: Qt.Key_X + text: "x" + } + Key { + key: Qt.Key_C + text: "c" + } + Key { + key: Qt.Key_V + text: "v" + } + Key { + key: Qt.Key_B + text: "b" + } + Key { + key: Qt.Key_N + text: "n" + } + Key { + key: Qt.Key_M + text: "m" + } + Key { + key: Qt.Key_Comma + text: "," + } + Key { + key: Qt.Key_Period + text: "." + } + ShiftKey { + weight: 204 + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + } + ChangeLanguageKey { + weight: 154 + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Apostrophe + text: "'" + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } +} diff --git a/src/virtualkeyboard/content/layouts/nl_NL/symbols.qml b/src/virtualkeyboard/content/layouts/nl_NL/symbols.qml new file mode 100644 index 00000000..49f6e709 --- /dev/null +++ b/src/virtualkeyboard/content/layouts/nl_NL/symbols.qml @@ -0,0 +1,376 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Layouts 1.0 +import QtQuick.VirtualKeyboard 2.1 + +KeyboardLayoutLoader { + property bool secondPage + onVisibleChanged: if (!visible) secondPage = false + sourceComponent: secondPage ? page2 : page1 + Component { + id: page1 + KeyboardLayout { + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_1 + text: "1" + } + Key { + key: Qt.Key_2 + text: "2" + } + Key { + key: Qt.Key_3 + text: "3" + } + Key { + key: Qt.Key_4 + text: "4" + } + Key { + key: Qt.Key_5 + text: "5" + } + Key { + key: Qt.Key_6 + text: "6" + } + Key { + key: Qt.Key_7 + text: "7" + } + Key { + key: Qt.Key_8 + text: "8" + } + Key { + key: Qt.Key_9 + text: "9" + } + Key { + key: Qt.Key_0 + text: "0" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + key: Qt.Key_At + text: "@" + } + Key { + key: Qt.Key_NumberSign + text: "#" + } + Key { + key: Qt.Key_Percent + text: "%" + } + Key { + key: Qt.Key_Ampersand + text: "&" + } + Key { + key: Qt.Key_Asterisk + text: "*" + } + Key { + key: Qt.Key_Minus + text: "-" + } + Key { + key: Qt.Key_Plus + text: "+" + } + Key { + key: Qt.Key_ParenLeft + text: "(" + } + Key { + key: Qt.Key_ParenRight + text: ")" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + Key { + displayText: "1/2" + functionKey: true + onClicked: secondPage = !secondPage + } + Key { + key: Qt.Key_Exclam + text: "!" + } + Key { + key: Qt.Key_QuoteDbl + text: '"' + } + Key { + key: Qt.Key_Less + text: "<" + } + Key { + key: Qt.Key_Greater + text: ">" + } + Key { + key: Qt.Key_Apostrophe + text: "'" + } + Key { + key: Qt.Key_Colon + text: ":" + } + Key { + key: Qt.Key_Semicolon + text: ";" + } + Key { + key: Qt.Key_Slash + text: "/" + } + Key { + key: Qt.Key_Question + text: "?" + } + Key { + weight: 204 + displayText: "1/2" + functionKey: true + onClicked: secondPage = !secondPage + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + displayText: "ABC" + } + ChangeLanguageKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: ".," + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } + } + } + Component { + id: page2 + KeyboardLayout { + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_AsciiTilde + text: "~" + } + Key { + key: Qt.Key_Agrave + text: "`" + } + Key { + key: Qt.Key_Bar + text: "|" + } + Key { + key: 0x7B + text: "·" + } + Key { + key: 0x221A + text: "√" + } + Key { + key: Qt.Key_division + text: "÷" + } + Key { + key: Qt.Key_multiply + text: "×" + } + Key { + key: Qt.Key_onehalf + text: "½" + alternativeKeys: "¼⅓½¾⅞" + } + Key { + key: Qt.Key_BraceLeft + text: "{" + } + Key { + key: Qt.Key_BraceRight + text: "}" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + key: Qt.Key_Dollar + text: "$" + } + Key { + key: 0x20AC + text: "€" + } + Key { + key: 0xC2 + text: "£" + } + Key { + key: 0xA2 + text: "¢" + } + Key { + key: 0xA5 + text: "¥" + } + Key { + key: Qt.Key_Equal + text: "=" + } + Key { + key: Qt.Key_section + text: "§" + } + Key { + key: Qt.Key_BracketLeft + text: "[" + } + Key { + key: Qt.Key_BracketRight + text: "]" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + Key { + displayText: "2/2" + functionKey: true + onClicked: secondPage = !secondPage + } + Key { + key: Qt.Key_Underscore + text: "_" + } + Key { + key: 0x2122 + text: '™' + } + Key { + key: 0x00AE + text: '®' + } + Key { + key: Qt.Key_guillemotleft + text: '«' + } + Key { + key: Qt.Key_guillemotright + text: '»' + } + Key { + key: 0x201C + text: '“' + } + Key { + key: 0x201D + text: '”' + } + Key { + key: Qt.Key_Backslash + text: "\\" + } + Key { + key: Qt.Key_AsciiCircum + text: "^" + } + Key { + weight: 204 + displayText: "2/2" + functionKey: true + onClicked: secondPage = !secondPage + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + displayText: "ABC" + } + ChangeLanguageKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: 0x2026 + text: "\u2026" + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } + } + } +} diff --git a/src/virtualkeyboard/content/layouts/pl_PL/handwriting.qml b/src/virtualkeyboard/content/layouts/pl_PL/handwriting.qml index 8f3672c9..d42de535 100644 --- a/src/virtualkeyboard/content/layouts/pl_PL/handwriting.qml +++ b/src/virtualkeyboard/content/layouts/pl_PL/handwriting.qml @@ -29,11 +29,11 @@ import QtQuick 2.0 import QtQuick.Layouts 1.0 -import QtQuick.VirtualKeyboard 2.1 +import QtQuick.VirtualKeyboard 2.3 KeyboardLayout { function createInputMethod() { - return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.1; HandwritingInputMethod {}', parent) + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) } sharedLayouts: ['symbols'] inputMode: InputEngine.Latin @@ -66,15 +66,8 @@ KeyboardLayout { id: bottomRow Layout.preferredHeight: 1 keyWeight: 154 - Key { + InputModeKey { weight: 217 - key: Qt.Key_Mode_switch - noKeyEvent: true - functionKey: true - text: InputContext.inputEngine.inputMode === InputEngine.Latin ? "123" : "ABC" - onClicked: InputContext.inputEngine.inputMode = InputContext.inputEngine.inputMode === InputEngine.Latin ? InputEngine.Numeric : InputEngine.Latin - enabled: !(InputContext.inputMethodHints & (Qt.ImhDialableCharactersOnly | Qt.ImhFormattedNumbersOnly | Qt.ImhDigitsOnly)) - keyPanelDelegate: keyboard.style ? keyboard.style.symbolKeyPanel : undefined } ChangeLanguageKey { weight: 154 diff --git a/src/virtualkeyboard/content/layouts/pt_PT/handwriting.qml b/src/virtualkeyboard/content/layouts/pt_PT/handwriting.qml index 8f3672c9..d42de535 100644 --- a/src/virtualkeyboard/content/layouts/pt_PT/handwriting.qml +++ b/src/virtualkeyboard/content/layouts/pt_PT/handwriting.qml @@ -29,11 +29,11 @@ import QtQuick 2.0 import QtQuick.Layouts 1.0 -import QtQuick.VirtualKeyboard 2.1 +import QtQuick.VirtualKeyboard 2.3 KeyboardLayout { function createInputMethod() { - return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.1; HandwritingInputMethod {}', parent) + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) } sharedLayouts: ['symbols'] inputMode: InputEngine.Latin @@ -66,15 +66,8 @@ KeyboardLayout { id: bottomRow Layout.preferredHeight: 1 keyWeight: 154 - Key { + InputModeKey { weight: 217 - key: Qt.Key_Mode_switch - noKeyEvent: true - functionKey: true - text: InputContext.inputEngine.inputMode === InputEngine.Latin ? "123" : "ABC" - onClicked: InputContext.inputEngine.inputMode = InputContext.inputEngine.inputMode === InputEngine.Latin ? InputEngine.Numeric : InputEngine.Latin - enabled: !(InputContext.inputMethodHints & (Qt.ImhDialableCharactersOnly | Qt.ImhFormattedNumbersOnly | Qt.ImhDigitsOnly)) - keyPanelDelegate: keyboard.style ? keyboard.style.symbolKeyPanel : undefined } ChangeLanguageKey { weight: 154 diff --git a/src/virtualkeyboard/content/layouts/ro_RO/handwriting.qml b/src/virtualkeyboard/content/layouts/ro_RO/handwriting.qml index ab2600f5..7826b542 100644 --- a/src/virtualkeyboard/content/layouts/ro_RO/handwriting.qml +++ b/src/virtualkeyboard/content/layouts/ro_RO/handwriting.qml @@ -29,11 +29,11 @@ import QtQuick 2.0 import QtQuick.Layouts 1.0 -import QtQuick.VirtualKeyboard 2.1 +import QtQuick.VirtualKeyboard 2.3 KeyboardLayout { function createInputMethod() { - return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.1; HandwritingInputMethod {}', parent) + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) } sharedLayouts: ['symbols'] inputMode: InputEngine.Latin @@ -66,15 +66,8 @@ KeyboardLayout { id: bottomRow Layout.preferredHeight: 1 keyWeight: 154 - Key { + InputModeKey { weight: 217 - key: Qt.Key_Mode_switch - noKeyEvent: true - functionKey: true - text: InputContext.inputEngine.inputMode === InputEngine.Latin ? "123" : "ABC" - onClicked: InputContext.inputEngine.inputMode = InputContext.inputEngine.inputMode === InputEngine.Latin ? InputEngine.Numeric : InputEngine.Latin - enabled: !(InputContext.inputMethodHints & (Qt.ImhDialableCharactersOnly | Qt.ImhFormattedNumbersOnly | Qt.ImhDigitsOnly)) - keyPanelDelegate: keyboard.style ? keyboard.style.symbolKeyPanel : undefined } ChangeLanguageKey { weight: 154 diff --git a/src/virtualkeyboard/content/layouts/ru_RU/handwriting.qml b/src/virtualkeyboard/content/layouts/ru_RU/handwriting.qml index 8f3672c9..d42de535 100644 --- a/src/virtualkeyboard/content/layouts/ru_RU/handwriting.qml +++ b/src/virtualkeyboard/content/layouts/ru_RU/handwriting.qml @@ -29,11 +29,11 @@ import QtQuick 2.0 import QtQuick.Layouts 1.0 -import QtQuick.VirtualKeyboard 2.1 +import QtQuick.VirtualKeyboard 2.3 KeyboardLayout { function createInputMethod() { - return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.1; HandwritingInputMethod {}', parent) + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) } sharedLayouts: ['symbols'] inputMode: InputEngine.Latin @@ -66,15 +66,8 @@ KeyboardLayout { id: bottomRow Layout.preferredHeight: 1 keyWeight: 154 - Key { + InputModeKey { weight: 217 - key: Qt.Key_Mode_switch - noKeyEvent: true - functionKey: true - text: InputContext.inputEngine.inputMode === InputEngine.Latin ? "123" : "ABC" - onClicked: InputContext.inputEngine.inputMode = InputContext.inputEngine.inputMode === InputEngine.Latin ? InputEngine.Numeric : InputEngine.Latin - enabled: !(InputContext.inputMethodHints & (Qt.ImhDialableCharactersOnly | Qt.ImhFormattedNumbersOnly | Qt.ImhDigitsOnly)) - keyPanelDelegate: keyboard.style ? keyboard.style.symbolKeyPanel : undefined } ChangeLanguageKey { weight: 154 diff --git a/src/virtualkeyboard/content/layouts/sr_SP/handwriting.qml b/src/virtualkeyboard/content/layouts/sr_SP/handwriting.qml new file mode 100644 index 00000000..7781e455 --- /dev/null +++ b/src/virtualkeyboard/content/layouts/sr_SP/handwriting.qml @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Layouts 1.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayout { + function createInputMethod() { + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) + } + sharedLayouts: ['symbols'] + + KeyboardRow { + Layout.preferredHeight: 3 + KeyboardColumn { + Layout.preferredWidth: bottomRow.width - hideKeyboardKey.width + KeyboardRow { + TraceInputKey { + objectName: "hwrInputArea" + patternRecognitionMode: InputEngine.HandwritingRecoginition + horizontalRulers: + InputContext.inputEngine.inputMode !== InputEngine.Cyrillic ? [] : + [Math.round(boundingBox.height / 4), Math.round(boundingBox.height / 4) * 2, Math.round(boundingBox.height / 4) * 3] + } + } + } + KeyboardColumn { + Layout.preferredWidth: hideKeyboardKey.width + KeyboardRow { + BackspaceKey {} + } + KeyboardRow { + EnterKey {} + } + KeyboardRow { + ShiftKey { } + } + } + } + KeyboardRow { + id: bottomRow + Layout.preferredHeight: 1 + keyWeight: 154 + InputModeKey { + weight: 217 + } + ChangeLanguageKey { + weight: 154 + customLayoutsOnly: true + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Minus + text: "-" + alternativeKeys: "<>()#%&*/\\\"'=+-_" + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: ":;,.?!" + } + HideKeyboardKey { + id: hideKeyboardKey + weight: 204 + } + } +} diff --git a/src/virtualkeyboard/content/layouts/sr_SP/main.qml b/src/virtualkeyboard/content/layouts/sr_SP/main.qml new file mode 100644 index 00000000..d739e79c --- /dev/null +++ b/src/virtualkeyboard/content/layouts/sr_SP/main.qml @@ -0,0 +1,363 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayoutLoader { + sharedLayouts: ['symbols'] + sourceComponent: InputContext.inputEngine.inputMode === InputEngine.Cyrillic ? cyrillicLayout : latinLayout + Component { + id: cyrillicLayout + KeyboardLayout { + keyWeight: 160 + KeyboardRow { + Key { + text: "љ" + } + Key { + text: "њ" + } + Key { + text: "е" + } + Key { + text: "р" + } + Key { + text: "т" + } + Key { + text: "з" + } + Key { + text: "у" + } + Key { + text: "и" + } + Key { + text: "о" + } + Key { + text: "п" + } + Key { + text: "ш" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + text: "а" + } + Key { + text: "с" + } + Key { + text: "д" + } + Key { + text: "ф" + } + Key { + text: "г" + } + Key { + text: "х" + } + Key { + text: "ј" + } + Key { + text: "к" + } + Key { + text: "л" + } + Key { + text: "ч" + } + Key { + text: "ћ" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + InputModeKey { + inputModes: [InputEngine.Cyrillic, InputEngine.Latin] + } + Key { + text: "ѕ" + } + Key { + text: "џ" + } + Key { + text: "ц" + } + Key { + text: "в" + } + Key { + text: "б" + } + Key { + text: "н" + } + Key { + text: "м" + } + Key { + text: "ђ" + } + Key { + text: "ж" + } + Key { + key: Qt.Key_Comma + text: "," + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: "!.;?" + } + ShiftKey { + weight: 204 + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + } + ChangeLanguageKey { + weight: 154 + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Apostrophe + text: "'" + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } + } + } + Component { + id: latinLayout + KeyboardLayout { + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_Q + text: "q" + } + Key { + key: Qt.Key_W + text: "w" + } + Key { + key: Qt.Key_E + text: "e" + } + Key { + key: Qt.Key_R + text: "r" + } + Key { + key: Qt.Key_T + text: "t" + } + Key { + key: Qt.Key_Z + text: "z" + alternativeKeys: "zž" + } + Key { + key: Qt.Key_U + text: "u" + } + Key { + key: Qt.Key_I + text: "i" + } + Key { + key: Qt.Key_O + text: "o" + alternativeKeys: "oö" + } + Key { + key: Qt.Key_P + text: "p" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + key: Qt.Key_A + text: "a" + alternativeKeys: "aåä" + } + Key { + key: Qt.Key_S + text: "s" + alternativeKeys: "sš" + } + Key { + key: Qt.Key_D + text: "d" + alternativeKeys: "dđ" + } + Key { + key: Qt.Key_F + text: "f" + } + Key { + key: Qt.Key_G + text: "g" + } + Key { + key: Qt.Key_H + text: "h" + } + Key { + key: Qt.Key_J + text: "j" + } + Key { + key: Qt.Key_K + text: "k" + } + Key { + key: Qt.Key_L + text: "l" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + InputModeKey { + inputModes: [InputEngine.Cyrillic, InputEngine.Latin] + } + Key { + key: Qt.Key_Y + text: "y" + } + Key { + key: Qt.Key_X + text: "x" + } + Key { + key: Qt.Key_C + text: "c" + alternativeKeys: "ćcč" + } + Key { + key: Qt.Key_V + text: "v" + } + Key { + key: Qt.Key_B + text: "b" + } + Key { + key: Qt.Key_N + text: "n" + } + Key { + key: Qt.Key_M + text: "m" + } + Key { + key: Qt.Key_Comma + text: "," + } + Key { + key: Qt.Key_Period + text: "." + } + ShiftKey { + weight: 204 + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + } + ChangeLanguageKey { + weight: 154 + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Minus + text: "-" + alternativeKeys: "-\"'" + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } + } + } +} diff --git a/src/virtualkeyboard/content/layouts/sr_SP/symbols.qml b/src/virtualkeyboard/content/layouts/sr_SP/symbols.qml new file mode 100644 index 00000000..42f8f3b6 --- /dev/null +++ b/src/virtualkeyboard/content/layouts/sr_SP/symbols.qml @@ -0,0 +1,376 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Layouts 1.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayoutLoader { + property bool secondPage + onVisibleChanged: if (!visible) secondPage = false + sourceComponent: secondPage ? page2 : page1 + Component { + id: page1 + KeyboardLayout { + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_1 + text: "1" + } + Key { + key: Qt.Key_2 + text: "2" + } + Key { + key: Qt.Key_3 + text: "3" + } + Key { + key: Qt.Key_4 + text: "4" + } + Key { + key: Qt.Key_5 + text: "5" + } + Key { + key: Qt.Key_6 + text: "6" + } + Key { + key: Qt.Key_7 + text: "7" + } + Key { + key: Qt.Key_8 + text: "8" + } + Key { + key: Qt.Key_9 + text: "9" + } + Key { + key: Qt.Key_0 + text: "0" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + key: Qt.Key_At + text: "@" + } + Key { + key: Qt.Key_NumberSign + text: "#" + } + Key { + key: Qt.Key_Percent + text: "%" + } + Key { + key: Qt.Key_Ampersand + text: "&" + } + Key { + key: Qt.Key_Asterisk + text: "*" + } + Key { + key: Qt.Key_Minus + text: "-" + } + Key { + key: Qt.Key_Plus + text: "+" + } + Key { + key: Qt.Key_ParenLeft + text: "(" + } + Key { + key: Qt.Key_ParenRight + text: ")" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + Key { + displayText: "1/2" + functionKey: true + onClicked: secondPage = !secondPage + } + Key { + key: Qt.Key_Exclam + text: "!" + } + Key { + key: Qt.Key_QuoteDbl + text: '"' + } + Key { + key: Qt.Key_Apostrophe + text: "'" + } + Key { + key: Qt.Key_Less + text: "<" + } + Key { + key: Qt.Key_Greater + text: ">" + } + Key { + key: Qt.Key_Colon + text: ":" + } + Key { + key: Qt.Key_Semicolon + text: ";" + } + Key { + key: Qt.Key_Slash + text: "/" + } + Key { + key: Qt.Key_Question + text: "?" + } + Key { + weight: 204 + displayText: "1/2" + functionKey: true + onClicked: secondPage = !secondPage + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + displayText: InputContext.inputEngine.inputMode === InputEngine.Cyrillic ? "АБВ" : "ABC" + } + ChangeLanguageKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: ".," + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } + } + } + Component { + id: page2 + KeyboardLayout { + keyWeight: 160 + KeyboardRow { + Key { + key: Qt.Key_AsciiTilde + text: "~" + } + Key { + key: Qt.Key_Agrave + text: "`" + } + Key { + key: Qt.Key_Bar + text: "|" + } + Key { + key: 0x7B + text: "·" + } + Key { + key: 0x221A + text: "√" + } + Key { + key: Qt.Key_division + text: "÷" + } + Key { + key: Qt.Key_multiply + text: "×" + } + Key { + key: Qt.Key_onehalf + text: "½" + alternativeKeys: "¼⅓½¾⅞" + } + Key { + key: Qt.Key_BraceLeft + text: "{" + } + Key { + key: Qt.Key_BraceRight + text: "}" + } + BackspaceKey {} + } + KeyboardRow { + FillerKey { + weight: 56 + } + Key { + key: Qt.Key_Dollar + text: "$" + } + Key { + key: 0x20AC + text: "€" + } + Key { + key: 0xC2 + text: "£" + } + Key { + key: 0xA2 + text: "¢" + } + Key { + key: 0xA5 + text: "¥" + } + Key { + key: Qt.Key_Equal + text: "=" + } + Key { + key: Qt.Key_section + text: "§" + } + Key { + key: Qt.Key_BracketLeft + text: "[" + } + Key { + key: Qt.Key_BracketRight + text: "]" + } + EnterKey { + weight: 283 + } + } + KeyboardRow { + keyWeight: 156 + Key { + displayText: "2/2" + functionKey: true + onClicked: secondPage = !secondPage + } + Key { + key: Qt.Key_Underscore + text: "_" + } + Key { + key: 0x2122 + text: '™' + } + Key { + key: 0x00AE + text: '®' + } + Key { + key: Qt.Key_guillemotleft + text: '«' + } + Key { + key: Qt.Key_guillemotright + text: '»' + } + Key { + key: 0x201C + text: '“' + } + Key { + key: 0x201D + text: '”' + } + Key { + key: Qt.Key_Backslash + text: "\\" + } + Key { + key: Qt.Key_AsciiCircum + text: "^" + } + Key { + weight: 204 + displayText: "2/2" + functionKey: true + onClicked: secondPage = !secondPage + } + } + KeyboardRow { + keyWeight: 154 + SymbolModeKey { + weight: 217 + displayText: InputContext.inputEngine.inputMode === InputEngine.Cyrillic ? "АБВ" : "ABC" + } + ChangeLanguageKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: 0x2026 + text: "\u2026" + } + Key { + key: 0xE000 + text: ":-)" + alternativeKeys: [ ";-)", ":-)", ":-D", ":-(", "<3" ] + } + HideKeyboardKey { + weight: 204 + } + } + } + } +} diff --git a/src/virtualkeyboard/content/layouts/sv_SE/handwriting.qml b/src/virtualkeyboard/content/layouts/sv_SE/handwriting.qml index 8f3672c9..d42de535 100644 --- a/src/virtualkeyboard/content/layouts/sv_SE/handwriting.qml +++ b/src/virtualkeyboard/content/layouts/sv_SE/handwriting.qml @@ -29,11 +29,11 @@ import QtQuick 2.0 import QtQuick.Layouts 1.0 -import QtQuick.VirtualKeyboard 2.1 +import QtQuick.VirtualKeyboard 2.3 KeyboardLayout { function createInputMethod() { - return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.1; HandwritingInputMethod {}', parent) + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) } sharedLayouts: ['symbols'] inputMode: InputEngine.Latin @@ -66,15 +66,8 @@ KeyboardLayout { id: bottomRow Layout.preferredHeight: 1 keyWeight: 154 - Key { + InputModeKey { weight: 217 - key: Qt.Key_Mode_switch - noKeyEvent: true - functionKey: true - text: InputContext.inputEngine.inputMode === InputEngine.Latin ? "123" : "ABC" - onClicked: InputContext.inputEngine.inputMode = InputContext.inputEngine.inputMode === InputEngine.Latin ? InputEngine.Numeric : InputEngine.Latin - enabled: !(InputContext.inputMethodHints & (Qt.ImhDialableCharactersOnly | Qt.ImhFormattedNumbersOnly | Qt.ImhDigitsOnly)) - keyPanelDelegate: keyboard.style ? keyboard.style.symbolKeyPanel : undefined } ChangeLanguageKey { weight: 154 diff --git a/src/virtualkeyboard/content/layouts/zh_CN/handwriting.qml b/src/virtualkeyboard/content/layouts/zh_CN/handwriting.qml new file mode 100644 index 00000000..598980d1 --- /dev/null +++ b/src/virtualkeyboard/content/layouts/zh_CN/handwriting.qml @@ -0,0 +1,116 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Layouts 1.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayout { + function createInputMethod() { + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) + } + sharedLayouts: ['symbols'] + inputMode: preferredInputMode() + + Connections { + target: InputContext + onInputMethodHintsChanged: { + var newInputMode = preferredInputMode() + if (InputContext.inputEngine.inputModes.indexOf(newInputMode) !== -1) + InputContext.inputEngine.inputMode = newInputMode + } + } + + function preferredInputMode() { + return InputContext.inputMethodHints & + (Qt.ImhPreferLatin | Qt.ImhEmailCharactersOnly | Qt.ImhUrlCharactersOnly | + Qt.ImhLatinOnly) ? InputEngine.Latin : InputEngine.ChineseHandwriting + } + + KeyboardRow { + Layout.preferredHeight: 3 + KeyboardColumn { + Layout.preferredWidth: bottomRow.width - hideKeyboardKey.width + KeyboardRow { + TraceInputKey { + objectName: "hwrInputArea" + patternRecognitionMode: InputEngine.HandwritingRecoginition + horizontalRulers: + InputContext.inputEngine.inputMode !== InputEngine.ChineseHandwriting ? [] : + [Math.round(boundingBox.height / 4), Math.round(boundingBox.height / 4) * 2, Math.round(boundingBox.height / 4) * 3] + + } + } + } + KeyboardColumn { + Layout.preferredWidth: hideKeyboardKey.width + KeyboardRow { + BackspaceKey {} + } + KeyboardRow { + EnterKey {} + } + KeyboardRow { + ShiftKey { } + } + } + } + KeyboardRow { + id: bottomRow + Layout.preferredHeight: 1 + keyWeight: 154 + InputModeKey { + weight: 217 + } + ChangeLanguageKey { + weight: 154 + customLayoutsOnly: true + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Apostrophe + text: "‘" + alternativeKeys: "《》〈〉•…々〆‘’“”「」¥" + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: ":;,.、。?!" + } + HideKeyboardKey { + id: hideKeyboardKey + weight: 204 + } + } +} diff --git a/src/virtualkeyboard/content/layouts/zh_CN/main.qml b/src/virtualkeyboard/content/layouts/zh_CN/main.qml index c8e21c84..44b0ceb7 100644 --- a/src/virtualkeyboard/content/layouts/zh_CN/main.qml +++ b/src/virtualkeyboard/content/layouts/zh_CN/main.qml @@ -181,6 +181,9 @@ KeyboardLayout { ChangeLanguageKey { weight: 154 } + HandwritingModeKey { + weight: 154 + } SpaceKey { weight: 864 } diff --git a/src/virtualkeyboard/content/layouts/zh_TW/handwriting.qml b/src/virtualkeyboard/content/layouts/zh_TW/handwriting.qml new file mode 100644 index 00000000..598980d1 --- /dev/null +++ b/src/virtualkeyboard/content/layouts/zh_TW/handwriting.qml @@ -0,0 +1,116 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.0 +import QtQuick.Layouts 1.0 +import QtQuick.VirtualKeyboard 2.3 + +KeyboardLayout { + function createInputMethod() { + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; HandwritingInputMethod {}', parent) + } + sharedLayouts: ['symbols'] + inputMode: preferredInputMode() + + Connections { + target: InputContext + onInputMethodHintsChanged: { + var newInputMode = preferredInputMode() + if (InputContext.inputEngine.inputModes.indexOf(newInputMode) !== -1) + InputContext.inputEngine.inputMode = newInputMode + } + } + + function preferredInputMode() { + return InputContext.inputMethodHints & + (Qt.ImhPreferLatin | Qt.ImhEmailCharactersOnly | Qt.ImhUrlCharactersOnly | + Qt.ImhLatinOnly) ? InputEngine.Latin : InputEngine.ChineseHandwriting + } + + KeyboardRow { + Layout.preferredHeight: 3 + KeyboardColumn { + Layout.preferredWidth: bottomRow.width - hideKeyboardKey.width + KeyboardRow { + TraceInputKey { + objectName: "hwrInputArea" + patternRecognitionMode: InputEngine.HandwritingRecoginition + horizontalRulers: + InputContext.inputEngine.inputMode !== InputEngine.ChineseHandwriting ? [] : + [Math.round(boundingBox.height / 4), Math.round(boundingBox.height / 4) * 2, Math.round(boundingBox.height / 4) * 3] + + } + } + } + KeyboardColumn { + Layout.preferredWidth: hideKeyboardKey.width + KeyboardRow { + BackspaceKey {} + } + KeyboardRow { + EnterKey {} + } + KeyboardRow { + ShiftKey { } + } + } + } + KeyboardRow { + id: bottomRow + Layout.preferredHeight: 1 + keyWeight: 154 + InputModeKey { + weight: 217 + } + ChangeLanguageKey { + weight: 154 + customLayoutsOnly: true + } + HandwritingModeKey { + weight: 154 + } + SpaceKey { + weight: 864 + } + Key { + key: Qt.Key_Apostrophe + text: "‘" + alternativeKeys: "《》〈〉•…々〆‘’“”「」¥" + } + Key { + key: Qt.Key_Period + text: "." + alternativeKeys: ":;,.、。?!" + } + HideKeyboardKey { + id: hideKeyboardKey + weight: 204 + } + } +} diff --git a/src/virtualkeyboard/content/layouts/zh_TW/main.qml b/src/virtualkeyboard/content/layouts/zh_TW/main.qml index a71a27c5..7c5728c7 100644 --- a/src/virtualkeyboard/content/layouts/zh_TW/main.qml +++ b/src/virtualkeyboard/content/layouts/zh_TW/main.qml @@ -29,11 +29,11 @@ import QtQuick 2.0 import QtQuick.Layouts 1.0 -import QtQuick.VirtualKeyboard 2.1 +import QtQuick.VirtualKeyboard 2.3 KeyboardLayoutLoader { function createInputMethod() { - return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.1; TCInputMethod {}', parent, "tcInputMethod") + return Qt.createQmlObject('import QtQuick 2.0; import QtQuick.VirtualKeyboard 2.3; TCInputMethod {}', parent, "tcInputMethod") } sharedLayouts: ['symbols'] sourceComponent: InputContext.inputEngine.inputMode === InputEngine.Cangjie ? pageCangjie : pageZhuyin @@ -197,11 +197,11 @@ KeyboardLayoutLoader { ChangeLanguageKey { weight: 154 } - ModeKey { + HandwritingModeKey { + weight: 154 + } + InputModeKey { visible: InputContext.inputEngine.inputModes.indexOf(InputEngine.Zhuyin) !== -1 - // Cangjie - displayText: "\u5009\u9821" - onClicked: InputContext.inputEngine.inputMode = InputEngine.Zhuyin } SpaceKey { weight: 864 @@ -246,7 +246,8 @@ KeyboardLayoutLoader { } Key { text: "\u02CB" - alternativeKeys: "\u02CB4" + alternativeKeys: "4" + displayText: "`" } Key { text: "\u3113" @@ -254,7 +255,8 @@ KeyboardLayoutLoader { } Key { text: "\u02CA" - alternativeKeys: "\u02CA6" + alternativeKeys: "6" + displayText: "´" } Key { text: "\u02D9" @@ -423,11 +425,11 @@ KeyboardLayoutLoader { ChangeLanguageKey { weight: 154 } - ModeKey { + HandwritingModeKey { + weight: 154 + } + InputModeKey { visible: InputContext.inputEngine.inputModes.indexOf(InputEngine.Cangjie) !== -1 - // Zhuyin - displayText: "\u6CE8\u97F3" - onClicked: InputContext.inputEngine.inputMode = InputEngine.Cangjie } SpaceKey { weight: 864 diff --git a/src/virtualkeyboard/content/styles/default/style.qml b/src/virtualkeyboard/content/styles/default/style.qml index 1440f008..6c49ee67 100644 --- a/src/virtualkeyboard/content/styles/default/style.qml +++ b/src/virtualkeyboard/content/styles/default/style.qml @@ -92,9 +92,9 @@ KeyboardStyle { verticalAlignment: Text.AlignVCenter anchors.fill: parent anchors.leftMargin: keyContentMargin - anchors.topMargin: control.smallTextVisible ? keyContentMargin * 1.2 : keyContentMargin + anchors.topMargin: keyContentMargin anchors.rightMargin: keyContentMargin - anchors.bottomMargin: control.smallTextVisible ? keyContentMargin * 0.8 : keyContentMargin + anchors.bottomMargin: keyContentMargin font { family: fontFamily weight: Font.Normal @@ -757,7 +757,34 @@ KeyboardStyle { Text { id: hwrInputModeIndicator visible: control.patternRecognitionMode === InputEngine.HandwritingRecoginition - text: InputContext.inputEngine.inputMode === InputEngine.Latin ? "Abc" : "123" + text: { + switch (InputContext.inputEngine.inputMode) { + case InputEngine.Numeric: + if (["ar", "fa"].indexOf(InputContext.locale.substring(0, 2)) !== -1) + return "\u0660\u0661\u0662" + // Fallthrough + case InputEngine.Dialable: + return "123" + case InputEngine.Greek: + return "ΑΒΓ" + case InputEngine.Cyrillic: + return "АБВ" + case InputEngine.Arabic: + if (InputContext.locale.substring(0, 2) === "fa") + return "\u0627\u200C\u0628\u200C\u067E" + return "\u0623\u200C\u0628\u200C\u062C" + case InputEngine.Hebrew: + return "\u05D0\u05D1\u05D2" + case InputEngine.ChineseHandwriting: + return "中文" + case InputEngine.JapaneseHandwriting: + return "日本語" + case InputEngine.KoreanHandwriting: + return "한국어" + default: + return "Abc" + } + } color: "white" anchors.left: parent.left anchors.top: parent.top @@ -786,23 +813,42 @@ KeyboardStyle { ctx.strokeStyle = Qt.rgba(0xFF, 0xFF, 0xFF) ctx.clearRect(0, 0, width, height) var i + var margin = Math.round(30 * scaleHint) if (control.horizontalRulers) { for (i = 0; i < control.horizontalRulers.length; i++) { ctx.beginPath() - ctx.moveTo(0, control.horizontalRulers[i]) - ctx.lineTo(width, control.horizontalRulers[i]) + var y = Math.round(control.horizontalRulers[i]) + var rightMargin = Math.round(width - margin) + if (i + 1 === control.horizontalRulers.length) { + ctx.moveTo(margin, y) + ctx.lineTo(rightMargin, y) + } else { + var dashLen = Math.round(20 * scaleHint) + for (var dash = margin, dashCount = 0; + dash < rightMargin; dash += dashLen, dashCount++) { + if ((dashCount & 1) === 0) { + ctx.moveTo(dash, y) + ctx.lineTo(Math.min(dash + dashLen, rightMargin), y) + } + } + } ctx.stroke() } } if (control.verticalRulers) { for (i = 0; i < control.verticalRulers.length; i++) { ctx.beginPath() - ctx.moveTo(control.verticalRulers[i], 0) - ctx.lineTo(control.verticalRulers[i], height) + ctx.moveTo(control.verticalRulers[i], margin) + ctx.lineTo(control.verticalRulers[i], Math.round(height - margin)) ctx.stroke() } } } + Connections { + target: control + onHorizontalRulersChanged: traceInputKeyGuideLines.requestPaint() + onVerticalRulersChanged: traceInputKeyGuideLines.requestPaint() + } } } diff --git a/src/virtualkeyboard/content/styles/retro/style.qml b/src/virtualkeyboard/content/styles/retro/style.qml index 0ed184b7..c22338ba 100644 --- a/src/virtualkeyboard/content/styles/retro/style.qml +++ b/src/virtualkeyboard/content/styles/retro/style.qml @@ -871,7 +871,34 @@ KeyboardStyle { Text { id: hwrInputModeIndicator visible: control.patternRecognitionMode === InputEngine.HandwritingRecoginition - text: InputContext.inputEngine.inputMode === InputEngine.Latin ? "Abc" : "123" + text: { + switch (InputContext.inputEngine.inputMode) { + case InputEngine.Numeric: + if (["ar", "fa"].indexOf(InputContext.locale.substring(0, 2)) !== -1) + return "\u0660\u0661\u0662" + // Fallthrough + case InputEngine.Dialable: + return "123" + case InputEngine.Greek: + return "ΑΒΓ" + case InputEngine.Cyrillic: + return "АБВ" + case InputEngine.Arabic: + if (InputContext.locale.substring(0, 2) === "fa") + return "\u0627\u200C\u0628\u200C\u067E" + return "\u0623\u200C\u0628\u200C\u062C" + case InputEngine.Hebrew: + return "\u05D0\u05D1\u05D2" + case InputEngine.ChineseHandwriting: + return "中文" + case InputEngine.JapaneseHandwriting: + return "日本語" + case InputEngine.KoreanHandwriting: + return "한국어" + default: + return "Abc" + } + } color: "black" anchors.left: parent.left anchors.top: parent.top @@ -892,18 +919,32 @@ KeyboardStyle { Canvas { id: traceInputKeyGuideLines anchors.fill: traceInputKeyPanelBackground - opacity: 0.1 + opacity: 0.4 onPaint: { var ctx = getContext("2d") ctx.lineWidth = 1 - ctx.strokeStyle = Qt.rgba(0xFF, 0xFF, 0xFF) + ctx.strokeStyle = Qt.rgba(0, 0, 0) ctx.clearRect(0, 0, width, height) var i + var margin = Math.round(30 * scaleHint) if (control.horizontalRulers) { for (i = 0; i < control.horizontalRulers.length; i++) { ctx.beginPath() - ctx.moveTo(0, control.horizontalRulers[i]) - ctx.lineTo(width, control.horizontalRulers[i]) + var y = Math.round(control.horizontalRulers[i]) + var rightMargin = Math.round(width - margin) + if (i + 1 === control.horizontalRulers.length) { + ctx.moveTo(margin, y) + ctx.lineTo(rightMargin, y) + } else { + var dashLen = Math.round(20 * scaleHint) + for (var dash = margin, dashCount = 0; + dash < rightMargin; dash += dashLen, dashCount++) { + if ((dashCount & 1) === 0) { + ctx.moveTo(dash, y) + ctx.lineTo(Math.min(dash + dashLen, rightMargin), y) + } + } + } ctx.stroke() } } @@ -916,6 +957,11 @@ KeyboardStyle { } } } + Connections { + target: control + onHorizontalRulersChanged: traceInputKeyGuideLines.requestPaint() + onVerticalRulersChanged: traceInputKeyGuideLines.requestPaint() + } } } diff --git a/src/virtualkeyboard/doc/qtvirtualkeyboard.qdocconf b/src/virtualkeyboard/doc/qtvirtualkeyboard.qdocconf index 2698378e..fbb0d465 100644 --- a/src/virtualkeyboard/doc/qtvirtualkeyboard.qdocconf +++ b/src/virtualkeyboard/doc/qtvirtualkeyboard.qdocconf @@ -13,6 +13,9 @@ excludedirs += ../content/layouts \ exampledirs += ../../../examples/virtualkeyboard \ snippets examplesinstallpath = virtualkeyboard + +manifestmeta.highlighted.names = "QtVirtualKeyboard/Qt Quick Virtual Keyboard - Basic Example" + imagedirs += images depends += qtdoc qtcore qtgui qtqml qtquick diff --git a/src/virtualkeyboard/doc/src/build.qdoc b/src/virtualkeyboard/doc/src/build.qdoc index 3d9d9eac..a858cdea 100644 --- a/src/virtualkeyboard/doc/src/build.qdoc +++ b/src/virtualkeyboard/doc/src/build.qdoc @@ -281,6 +281,140 @@ Hunspell sources and dictionary files is listed below: (etc.) \endcode +\section2 T9 Write Integration + +T9 Write integration supports the T9 Write Alphabetic and T9 Write CJK engines. Both +engines are integrated via T9WriteInputMethod. The input method can be initialized +with either of the engines at runtime. The engine selection happens automatically +based on input locale and input mode from the keyboard. + +\section3 T9 Write Compatibility + +Qt Virtual Keyboard is compatible with T9 Write v7.5.0 onward. + +The latest tested version is v7.8.1. + +\section3 T9 Write Build Preparations + +The contents of the SDK must be either manually copied to the directory structure +described below, or by using the \e unpack.py script found in the t9write directory. + +To unpack the SDK using the script: + +\badcode +$ cd src/virtualkeyboard/3rdparty/t9write/ +$ python unpack.py T9Write_Alpha_v7-8-0_SDK.zip . +\endcode + +\badcode +3rdparty +└── t9write + ├─── api + │ ├─── decuma*.h + │ ├─── t9write*.h + │ └─── xxt9w*.h + ├─── data + │ ├─── arabic + │ │ └─── *.bin [T9 Write Arabic] + │ ├─── hebrew + │ │ └─── *.bin [T9 Write Hebrew] + │ ├─── *.bin [T9 Write Alphabetic] + │ ├─── *.hdb + │ ├─── *.phd + │ └─── *.ldb [T9 Write v7.5] + └─── lib + ├─── arm + │ ├─── shared + │ │ ├─── alphabetic + │ │ │ └─── *.so + │ │ └─── cjk + │ │ └─── *.so + │ └─── static + │ ├─── alphabetic + │ │ └─── *.a / *.o + │ └─── cjk + │ └─── *.a / *.o + ├─── linux-x86 + │ ├─── shared + │ │ ├─── alphabetic + │ │ │ └─── *.so + │ │ └─── cjk + │ │ └─── *.so + │ └─── static + │ ├─── alphabetic + │ │ └─── *.a / *.o + │ └─── cjk + │ └─── *.a / *.o + └─── win32 + ├─── shared + │ ├─── alphabetic + │ │ ├─── *.dll + │ │ └─── *.lib + │ └─── cjk + │ ├─── *.dll + │ └─── *.lib + └─── static + ├─── alphabetic + │ └─── *.lib / *.obj + └─── cjk + └─── *.lib / *.obj +\endcode + +\note The above files are from the T9 Write demo SDK for Windows; the contents may vary for other + platforms. + +Where the contents of each directory are: + +\table +\header + \li Directory + \li Description + \li Remarks +\row + \li \e api + \li This directory should contain all of the API files + \li The API files usually located in the "api" and "public" directories + of the SDK, but sometimes in the "demo" directory. + + When using both Alphabetic and CJK engines at the same time, any + overlapping files can be copied from either SDK. +\row + \li \e data + \li This directory should contain all HWR databases and optionally + XT9 databases. + \li HWR database for the T9 Write Alphabetic: + \list + \li \e _databas_le.bin + \endlist + + HWR database for the T9 Write CJK: + \list + \li \e cjk_HK_std_le.hdb HongKong Chinese + \li \e cjk_J_std_le.hdb Japanese + \li \e cjk_K_mkt_le.hdb Korean + \li \e cjk_S_gb18030_le.hdb Simplified Chinese + \li \e cjk_T_std_le.hdb Traditional Chinese + \endlist + + Language database: + \list + \li File extension is either \e .ldb or \e .phd + \endlist +\row + \li \e lib/<target>/<linkage>/<engine-variant> + \li Directory structure holding supported target builds. + \li These directories should hold the desired target libraries. + If both shared and static libraries are found, shared libraries + are preferred. + + For example, to enable a static win32 build, copy + \e t9write_alphabetic_rel.obj to \e lib/win32/static/alphabetic + directory. +\endtable + +Finally, the SDK is included in the build by adding CONFIG+=t9write to the +qmake command line. + \section2 Static builds The virtual keyboard can be built and linked statically against the application. diff --git a/src/virtualkeyboard/doc/src/qtvirtualkeyboard-examples.qdoc b/src/virtualkeyboard/doc/src/qtvirtualkeyboard-examples.qdoc index 61b11d26..ef2bf69f 100644 --- a/src/virtualkeyboard/doc/src/qtvirtualkeyboard-examples.qdoc +++ b/src/virtualkeyboard/doc/src/qtvirtualkeyboard-examples.qdoc @@ -40,7 +40,44 @@ \ingroup qtvirtualkeyboard-examples \image basic-example.png - The example shows how to build a virtual keyboard UI with support for - multiple keyboard layouts using QML, and a QPlatformInputContext bridge - for communicating between the keyboard and focused text editor in C++. + The example has two implementations: one for the desktop + platforms and another for the embedded platforms. The former version + enables text input into several text fields using the virtual keyboard, + whereas the latter version uses the same UI but with a custom virtual + keyboard InputPanel. The following snippet from + \c basic.pro shows how the qmake project is set up to choose the + appropriate implementation based on the CONFIG options: + + \quotefromfile basic/basic.pro + \skipto android-embedded + \printuntil /^\}$/ + + The example enables the virtual keyboard by setting the \c QT_IM_MODULE + environment variable before loading the \c .qml file: + + \quotefromfile basic/main.cpp + \skipto #include + \printuntil } + + Besides this, it uses custom TextField and TextArea items to configure the + \e[ENTER] key behavior using the EnterKeyAction attached property. + + \quotefromfile basic/Basic.qml + \skipto import + \printuntil Rectangle + \dots + \skipto TextField + \printuntil } + \dots + \skipto TextArea + \printuntil } + \skipto /^\}$/ + \printuntil } + + The TextField and TextArea are inherited from the TextBase custom type, + which has \c enterKeyEnabled, \c enterKeyText, and \c enterKeyAction + properties. The TextField and TextArea instances in the snippet can + set these properties to change the default behavior. + + \include examples-run.qdocinc */ diff --git a/src/virtualkeyboard/doc/src/qtvirtualkeyboard-index.qdoc b/src/virtualkeyboard/doc/src/qtvirtualkeyboard-index.qdoc index 91373b23..21be028c 100644 --- a/src/virtualkeyboard/doc/src/qtvirtualkeyboard-index.qdoc +++ b/src/virtualkeyboard/doc/src/qtvirtualkeyboard-index.qdoc @@ -50,7 +50,7 @@ \li Automatic capitalization and space insertion. \li Scalability to different resolutions. \li Support for different character sets (Latin, Simplified/Traditional Chinese, - Hindi, Japanese, Arabic, Korean, and others). + Hindi, Japanese, Arabic, Hebrew, Korean, and others). \li Support for most common input \l {Supported Languages}{languages}, with possibility to easily extend the language support. \li Left-to-right and right-to-left input. @@ -66,12 +66,20 @@ \list \li Arabic + \li Bulgarian + \li Croatian + \li Czech \li Danish + \li Dutch \li English + \li Estonian \li Finnish \li French \li German + \li Greek + \li Hebrew \li Hindi + \li Hungarian \li Italian \li Japanese \li Korean @@ -81,6 +89,7 @@ \li Portugese \li Romanian \li Russian + \li Serbian \li Simplified Chinese \li Traditional Chinese \li Spanish @@ -124,7 +133,7 @@ */ /*! -\qmlmodule QtQuick.VirtualKeyboard 2.2 +\qmlmodule QtQuick.VirtualKeyboard 2.3 \title Qt Virtual Keyboard QML Types \ingroup qmlmodules \brief Provides QML types for an input framework and a reference keyboard front @@ -134,7 +143,7 @@ end. import statements in your .qml file: \code - import QtQuick.VirtualKeyboard 2.2 + import QtQuick.VirtualKeyboard 2.3 import QtQuick.VirtualKeyboard.Styles 2.2 import QtQuick.VirtualKeyboard.Settings 2.2 \endcode diff --git a/src/virtualkeyboard/gesturerecognizer.cpp b/src/virtualkeyboard/gesturerecognizer.cpp new file mode 100644 index 00000000..09db68a5 --- /dev/null +++ b/src/virtualkeyboard/gesturerecognizer.cpp @@ -0,0 +1,39 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "gesturerecognizer.h" + +namespace QtVirtualKeyboard { + +GestureRecognizer::GestureRecognizer(QObject *parent) : + QObject(parent) +{ +} + +} diff --git a/src/virtualkeyboard/gesturerecognizer.h b/src/virtualkeyboard/gesturerecognizer.h new file mode 100644 index 00000000..f1636609 --- /dev/null +++ b/src/virtualkeyboard/gesturerecognizer.h @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef GESTURERECOGNIZER_H +#define GESTURERECOGNIZER_H + +#include <QObject> +#include <QVariantMap> +#include "trace.h" + +namespace QtVirtualKeyboard { + +class GestureRecognizer : public QObject +{ + Q_OBJECT +public: + explicit GestureRecognizer(QObject *parent = 0); + + virtual QVariantMap recognize(const QList<Trace *> traceList) = 0; +}; + +} // namespace QtVirtualKeyboard + +#endif // GESTURERECOGNIZER_H diff --git a/src/virtualkeyboard/handwritinggesturerecognizer.cpp b/src/virtualkeyboard/handwritinggesturerecognizer.cpp new file mode 100644 index 00000000..23ac63e9 --- /dev/null +++ b/src/virtualkeyboard/handwritinggesturerecognizer.cpp @@ -0,0 +1,204 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "handwritinggesturerecognizer.h" + +#include <QtCore/qmath.h> +#include <QVector2D> + +namespace QtVirtualKeyboard { + +HandwritingGestureRecognizer::HandwritingGestureRecognizer(QObject *parent) : + GestureRecognizer(parent), + m_dpi(96) +{ +} + +void HandwritingGestureRecognizer::setDpi(int value) +{ + m_dpi = value >= 0 ? value : 96; +} + +int HandwritingGestureRecognizer::dpi() const +{ + return m_dpi; +} + +QVariantMap HandwritingGestureRecognizer::recognize(const QList<Trace *> traceList) +{ + if (traceList.count() > 0 && traceList.count() < 3) { + + // Swipe gesture detection + // ======================= + // + // The following algorithm is based on the assumption that a + // vector composed of two arbitrary selected, but consecutive + // measuring points, and a vector composed of the first and last + // of the measuring points, are approximately in the same angle. + // + // If the measuring points are located very close to each other, + // the angle can fluctuate a lot. This has been taken into account + // by setting a minimum Euclidean distance between the measuring + // points. + // + + // Minimum euclidean distance of a segment (in millimeters) + static const int MINIMUM_EUCLIDEAN_DISTANCE = 8; + + // Maximum theta variance (in degrees) + static const qreal THETA_THRESHOLD = 25.0; + + // Maximum width variance in multitouch swipe (+- in percent) + static const int MAXIMUM_WIDTH_VARIANCE = 20; + + const qreal minimumEuclideanDistance = MINIMUM_EUCLIDEAN_DISTANCE / 25.4 * m_dpi; + static const qreal thetaThreshold = qDegreesToRadians(THETA_THRESHOLD); + + QList<QVector2D> swipeVectors; + + int traceIndex; + const int traceCount = traceList.size(); + for (traceIndex = 0; traceIndex < traceCount; ++traceIndex) { + + const Trace *trace = traceList.at(traceIndex); + const QVariantList &points = trace->points(); + QVector2D swipeVector; + const int pointCount = points.count(); + int pointIndex = 0; + if (pointCount >= 2) { + + QPointF startPosition = points.first().toPointF(); + swipeVector = QVector2D(points.last().toPointF() - startPosition); + const qreal swipeLength = swipeVector.length(); + + if (swipeLength >= minimumEuclideanDistance) { + + QPointF previousPosition = startPosition; + qreal euclideanDistance = 0; + for (pointIndex = 1; pointIndex < pointCount; ++pointIndex) { + + QPointF currentPosition(points.at(pointIndex).toPointF()); + + euclideanDistance += QVector2D(currentPosition - previousPosition).length(); + if (euclideanDistance >= minimumEuclideanDistance) { + + // Set the angle (theta) between the sample vector and the swipe vector + const QVector2D sampleVector(currentPosition - startPosition); + const qreal theta = qAcos(QVector2D::dotProduct(swipeVector, sampleVector) / (swipeLength * sampleVector.length())); + + // Rejected when theta above threshold + if (theta >= thetaThreshold) { + swipeVector = QVector2D(); + break; + } + + startPosition = currentPosition; + euclideanDistance = 0; + } + + previousPosition = currentPosition; + } + + if (pointIndex < pointCount) { + swipeVector = QVector2D(); + break; + } + + // Check to see if angle and length matches to existing touch points + if (!swipeVectors.isEmpty()) { + bool matchesToExisting = true; + const qreal minimumSwipeLength = (swipeLength * (100.0 - MAXIMUM_WIDTH_VARIANCE) / 100.0); + const qreal maximumSwipeLength = (swipeLength * (100.0 + MAXIMUM_WIDTH_VARIANCE) / 100.0); + for (const QVector2D &otherSwipeVector : qAsConst(swipeVectors)) { + const qreal otherSwipeLength = otherSwipeVector.length(); + const qreal theta = qAcos(QVector2D::dotProduct(swipeVector, otherSwipeVector) / (swipeLength * otherSwipeLength)); + + if (theta >= thetaThreshold) { + matchesToExisting = false; + break; + } + + if (otherSwipeLength < minimumSwipeLength || otherSwipeLength > maximumSwipeLength) { + matchesToExisting = false; + break; + } + } + + if (!matchesToExisting) { + swipeVector = QVector2D(); + break; + } + } + } else { + swipeVector = QVector2D(); + } + } + + if (swipeVector.isNull()) + break; + + swipeVectors.append(swipeVector); + } + + if (swipeVectors.size() == traceCount) { + + QVariantMap swipeGesture; + + // Get swipe angle from the first vector: + // 0 degrees == right + // 90 degrees == down + // 180 degrees == left + // 270 degrees == up + QList<QVector2D>::ConstIterator swipeVector = swipeVectors.constBegin(); + qreal swipeLength = swipeVector->length(); + qreal swipeAngle = qAcos(swipeVector->x() / swipeLength); + if (swipeVector->y() < 0) + swipeAngle = 2 * M_PI - swipeAngle; + + // Calculate an average length of the vector + ++swipeVector; + for (const auto cend = swipeVectors.cend(); swipeVector != cend; ++swipeVector) + swipeLength += swipeVector->length(); + swipeLength /= traceCount; + + swipeGesture[QLatin1String("type")] = QLatin1String("swipe"); + swipeGesture[QLatin1String("angle")] = swipeAngle; + swipeGesture[QLatin1String("angle_degrees")] = qRadiansToDegrees(swipeAngle); + swipeGesture[QLatin1String("length")] = swipeLength; + swipeGesture[QLatin1String("length_mm")] = swipeLength / m_dpi * 25.4; + swipeGesture[QLatin1String("touch_count")] = traceCount; + + return swipeGesture; + } + } + + return QVariantMap(); +} + +} diff --git a/src/virtualkeyboard/handwritinggesturerecognizer.h b/src/virtualkeyboard/handwritinggesturerecognizer.h new file mode 100644 index 00000000..5ef2ba14 --- /dev/null +++ b/src/virtualkeyboard/handwritinggesturerecognizer.h @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef HANDWRITINGGESTURERECOGNIZER_H +#define HANDWRITINGGESTURERECOGNIZER_H + +#include "gesturerecognizer.h" + +namespace QtVirtualKeyboard { + +class HandwritingGestureRecognizer : public GestureRecognizer +{ + Q_OBJECT +public: + explicit HandwritingGestureRecognizer(QObject *parent = 0); + + void setDpi(int dpi); + int dpi() const; + + QVariantMap recognize(const QList<Trace *> traceList); + +private: + int m_dpi; +}; + +} // namespace QtVirtualKeyboard + +#endif // HANDWRITINGGESTURERECOGNIZER_H diff --git a/src/virtualkeyboard/hunspellinputmethod.cpp b/src/virtualkeyboard/hunspellinputmethod.cpp index 5cd88c2e..76b5f654 100644 --- a/src/virtualkeyboard/hunspellinputmethod.cpp +++ b/src/virtualkeyboard/hunspellinputmethod.cpp @@ -53,8 +53,26 @@ HunspellInputMethod::~HunspellInputMethod() QList<InputEngine::InputMode> HunspellInputMethod::inputModes(const QString &locale) { - Q_UNUSED(locale) - return QList<InputEngine::InputMode>() << InputEngine::Latin << InputEngine::Numeric; + QList<InputEngine::InputMode> result; + switch (QLocale(locale).script()) { + case QLocale::GreekScript: + result.append(InputEngine::Greek); + break; + case QLocale::CyrillicScript: + result.append(InputEngine::Cyrillic); + break; + case QLocale::ArabicScript: + result.append(InputEngine::Arabic); + break; + case QLocale::HebrewScript: + result.append(InputEngine::Hebrew); + break; + default: + break; + } + result.append(InputEngine::Latin); + result.append(InputEngine::Numeric); + return result; } bool HunspellInputMethod::setInputMode(const QString &locale, InputEngine::InputMode inputMode) @@ -163,7 +181,7 @@ QList<SelectionListModel::Type> HunspellInputMethod::selectionLists() { Q_D(const HunspellInputMethod); Qt::InputMethodHints inputMethodHints = inputContext()->inputMethodHints(); - if (d->dictionaryState != HunspellInputMethodPrivate::DictionaryReady || inputMethodHints.testFlag(Qt::ImhNoPredictiveText) || inputMethodHints.testFlag(Qt::ImhHiddenText)) + if (d->dictionaryState == HunspellInputMethodPrivate::DictionaryNotLoaded || inputMethodHints.testFlag(Qt::ImhNoPredictiveText) || inputMethodHints.testFlag(Qt::ImhHiddenText)) return QList<SelectionListModel::Type>(); return QList<SelectionListModel::Type>() << SelectionListModel::WordCandidateList; } diff --git a/src/virtualkeyboard/hunspellinputmethod_p.cpp b/src/virtualkeyboard/hunspellinputmethod_p.cpp index 2512337d..0f4bc25a 100644 --- a/src/virtualkeyboard/hunspellinputmethod_p.cpp +++ b/src/virtualkeyboard/hunspellinputmethod_p.cpp @@ -94,6 +94,7 @@ bool HunspellInputMethodPrivate::createHunspell(const QString &locale) QSharedPointer<HunspellLoadDictionaryTask> loadDictionaryTask(new HunspellLoadDictionaryTask(locale, searchPaths)); QObject::connect(loadDictionaryTask.data(), &HunspellLoadDictionaryTask::completed, q, &HunspellInputMethod::dictionaryLoadCompleted); dictionaryState = HunspellInputMethodPrivate::DictionaryLoading; + emit q->selectionListsChanged(); hunspellWorker->addTask(loadDictionaryTask); this->locale = locale; } @@ -173,7 +174,7 @@ bool HunspellInputMethodPrivate::isAutoSpaceAllowed() const Q_Q(const HunspellInputMethod); if (!autoSpaceAllowed) return false; - if (q->inputEngine()->inputMode() != InputEngine::Latin) + if (q->inputEngine()->inputMode() == InputEngine::Numeric) return false; InputContext *ic = q->inputContext(); if (!ic) diff --git a/src/virtualkeyboard/hunspellworker.cpp b/src/virtualkeyboard/hunspellworker.cpp index 9517ca4b..f2e502ad 100644 --- a/src/virtualkeyboard/hunspellworker.cpp +++ b/src/virtualkeyboard/hunspellworker.cpp @@ -90,7 +90,6 @@ void HunspellLoadDictionaryTask::run() } if (!affPath.isEmpty() && !dicPath.isEmpty()) { - VIRTUALKEYBOARD_DEBUG() << "Hunspell dictionary is missing for the" << locale << "language. Search paths" << searchPaths; *hunspellPtr = Hunspell_create(affPath.toUtf8().constData(), dicPath.toUtf8().constData()); if (*hunspellPtr) { /* Make sure the encoding used by the dictionary is supported @@ -106,6 +105,8 @@ void HunspellLoadDictionaryTask::run() #ifdef QT_VIRTUALKEYBOARD_DEBUG VIRTUALKEYBOARD_DEBUG() << "HunspellLoadDictionaryTask::run(): time:" << perf.elapsed() << "ms"; #endif + } else { + VIRTUALKEYBOARD_DEBUG() << "Hunspell dictionary is missing for" << locale << ". Search paths" << searchPaths; } emit completed(*hunspellPtr != 0); diff --git a/src/virtualkeyboard/import/import.pro b/src/virtualkeyboard/import/import.pro index 301f4f2b..d76bb91e 100644 --- a/src/virtualkeyboard/import/import.pro +++ b/src/virtualkeyboard/import/import.pro @@ -7,6 +7,6 @@ load(qml_module) !cross_compile:if(build_pass|!debug_and_release) { qtPrepareTool(QMLPLUGINDUMP, qmlplugindump) - qmltypes.commands = QT_IM_MODULE=qtvirtualkeyboard $$QMLPLUGINDUMP -defaultplatform -nonrelocatable QtQuick.VirtualKeyboard 2.1 > $$PWD/plugins.qmltypes + qmltypes.commands = QT_IM_MODULE=qtvirtualkeyboard $$QMLPLUGINDUMP -defaultplatform -nonrelocatable QtQuick.VirtualKeyboard 2.3 > $$PWD/plugins.qmltypes QMAKE_EXTRA_TARGETS += qmltypes } diff --git a/src/virtualkeyboard/inputcontext.cpp b/src/virtualkeyboard/inputcontext.cpp index 6d36ae5e..b0a81f32 100644 --- a/src/virtualkeyboard/inputcontext.cpp +++ b/src/virtualkeyboard/inputcontext.cpp @@ -173,7 +173,6 @@ InputContext::InputContext(PlatformInputContext *parent) : if (d->inputContext) { d->inputContext->setInputContext(this); connect(d->inputContext, SIGNAL(focusObjectChanged()), SLOT(onInputItemChanged())); - connect(d->inputContext, SIGNAL(focusObjectChanged()), SIGNAL(inputItemChanged())); } d->inputEngine = new InputEngine(this); d->shiftHandler = new ShiftHandler(this); @@ -650,6 +649,8 @@ void InputContext::onInputItemChanged() d->stateFlags &= ~InputContextPrivate::KeyEventState; } d->stateFlags &= ~InputContextPrivate::InputMethodClickState; + + emit inputItemChanged(); } void InputContext::setFocus(bool enable) diff --git a/src/virtualkeyboard/inputengine.cpp b/src/virtualkeyboard/inputengine.cpp index f15eee26..e825f05b 100644 --- a/src/virtualkeyboard/inputengine.cpp +++ b/src/virtualkeyboard/inputengine.cpp @@ -85,6 +85,7 @@ public: AbstractInputMethod *defaultInputMethod; InputEngine::TextCase textCase; InputEngine::InputMode inputMode; + QList<int> inputModes; QMap<SelectionListModel::Type, SelectionListModel *> selectionListModels; Qt::Key activeKey; QString activeKeyText; @@ -158,6 +159,8 @@ InputEngine::InputEngine(InputContext *parent) : connect(d->inputContext, SIGNAL(shiftChanged()), SLOT(shiftChanged())); connect(d->inputContext, SIGNAL(localeChanged()), SLOT(update())); QObject::connect(d->inputContext, &InputContext::inputMethodHintsChanged, this, &InputEngine::updateSelectionListModels); + QObject::connect(d->inputContext, &InputContext::localeChanged, this, &InputEngine::updateInputModes); + QObject::connect(this, &InputEngine::inputMethodChanged, this, &InputEngine::updateInputModes); } d->defaultInputMethod = new DefaultInputMethod(this); if (d->defaultInputMethod) @@ -378,7 +381,6 @@ void InputEngine::setInputMethod(AbstractInputMethod *inputMethod) } updateSelectionListModels(); emit inputMethodChanged(); - emit inputModesChanged(); emit patternRecognitionModesChanged(); } } @@ -389,18 +391,7 @@ void InputEngine::setInputMethod(AbstractInputMethod *inputMethod) QList<int> InputEngine::inputModes() const { Q_D(const InputEngine); - QList<InputMode> inputModeList; - if (d->inputMethod) { - inputModeList = d->inputMethod->inputModes(d->inputContext->locale()); - } - QList<int> resultList; - if (inputModeList.isEmpty()) { - return resultList; - } - resultList.reserve(inputModeList.size()); - for (const InputMode &inputMode : qAsConst(inputModeList)) - resultList.append(inputMode); - return resultList; + return d->inputModes; } InputEngine::InputMode InputEngine::inputMode() const @@ -414,16 +405,22 @@ void InputEngine::setInputMode(InputEngine::InputMode inputMode) Q_D(InputEngine); VIRTUALKEYBOARD_DEBUG() << "InputEngine::setInputMode():" << inputMode; if (d->inputMethod) { - const QString locale(d->inputContext->locale()); - QList<InputEngine::InputMode> inputModeList(d->inputMethod->inputModes(locale)); - if (inputModeList.contains(inputMode)) { - d->inputMethod->setInputMode(locale, inputMode); +#ifdef QT_DEBUG + // Cached input modes should be in sync with the input method + // If the assert below fails, we have missed an update somewhere + QList<int> cachedInputModes(d->inputModes); + updateInputModes(); + Q_ASSERT(cachedInputModes == d->inputModes); +#endif + if (d->inputModes.contains(inputMode)) { + d->inputMethod->setInputMode(d->inputContext->locale(), inputMode); if (d->inputMode != inputMode) { d->inputMode = inputMode; emit inputModeChanged(); } } else { - qWarning() << "the input mode" << inputMode << "is not valid"; + qWarning() << "Input mode" << inputMode << + "is not in the list of available input modes" << d->inputModes; } } } @@ -580,7 +577,10 @@ void InputEngine::reset() RecursiveMethodGuard guard(d->recursiveMethodLock); if (!guard.locked()) { emit inputMethodReset(); + updateInputModes(); } + } else { + updateInputModes(); } } @@ -654,6 +654,29 @@ void InputEngine::updateSelectionListModels() /*! \internal */ +void InputEngine::updateInputModes() +{ + Q_D(InputEngine); + QList<int> newInputModes; + if (d->inputMethod) { + QList<InputMode> tmpList(d->inputMethod->inputModes(d->inputContext->locale())); + if (!tmpList.isEmpty()) { + std::transform(tmpList.constBegin(), tmpList.constEnd(), + std::back_inserter(newInputModes), + [tmpList] (InputMode inputMode) { + return static_cast<int>(inputMode); + }); + } + } + if (d->inputModes != newInputModes) { + d->inputModes = newInputModes; + emit inputModesChanged(); + } +} + +/*! + \internal +*/ void InputEngine::timerEvent(QTimerEvent *timerEvent) { Q_D(InputEngine); @@ -740,6 +763,13 @@ void InputEngine::timerEvent(QTimerEvent *timerEvent) \li \c InputEngine.Hiragana Hiragana input mode for Japanese. \li \c InputEngine.Katakana Katakana input mode for Japanese. \li \c InputEngine.FullwidthLatin Fullwidth latin input mode for East Asian languages. + \li \c InputEngine.Greek Greek input mode. + \li \c InputEngine.Cyrillic Cyrillic input mode. + \li \c InputEngine.Arabic Arabic input mode. + \li \c InputEngine.Hebrew Hebrew input mode. + \li \c InputEngine.ChineseHandwriting Chinese handwriting. + \li \c InputEngine.JapaneseHandwriting Japanese handwriting. + \li \c InputEngine.KoreanHandwriting Korean handwriting. \endlist */ @@ -807,6 +837,14 @@ void InputEngine::timerEvent(QTimerEvent *timerEvent) Katakana input mode for Japanese. \value FullwidthLatin Fullwidth latin input mode for East Asian languages. + \value Greek + Greek input mode. + \value Cyrillic + Cyrillic input mode. + \value Arabic + Arabic input mode. + \value Hebrew + Hebrew input mode. */ /*! diff --git a/src/virtualkeyboard/inputengine.h b/src/virtualkeyboard/inputengine.h index 784ed91c..66eb2c3d 100644 --- a/src/virtualkeyboard/inputengine.h +++ b/src/virtualkeyboard/inputengine.h @@ -73,7 +73,14 @@ public: Hangul, Hiragana, Katakana, - FullwidthLatin + FullwidthLatin, + Greek, + Cyrillic, + Arabic, + Hebrew, + ChineseHandwriting, + JapaneseHandwriting, + KoreanHandwriting }; enum PatternRecognitionMode { PatternRecognitionDisabled, @@ -138,6 +145,7 @@ private slots: void update(); void shiftChanged(); void updateSelectionListModels(); + void updateInputModes(); protected: void timerEvent(QTimerEvent *timerEvent); diff --git a/src/virtualkeyboard/lipiinputmethod.cpp b/src/virtualkeyboard/lipiinputmethod.cpp index 30ee9ed4..10dcb4ae 100644 --- a/src/virtualkeyboard/lipiinputmethod.cpp +++ b/src/virtualkeyboard/lipiinputmethod.cpp @@ -34,6 +34,7 @@ #include "shifthandler.h" #include "virtualkeyboarddebug.h" #include "trace.h" +#include "handwritinggesturerecognizer.h" #ifdef HAVE_HUNSPELL #include "hunspellinputmethod_p.h" @@ -49,14 +50,11 @@ #include <QCryptographicHash> -#ifdef QT_VIRTUALKEYBOARD_LIPI_RECORD_TRACE_INPUT +#ifdef QT_VIRTUALKEYBOARD_RECORD_TRACE_INPUT +#include "unipentrace.h" #include <QStandardPaths> -#include <QFileInfo> -#include <QDir> #endif -#include <QtCore/qmath.h> - #ifdef HAVE_HUNSPELL #define LipiInputMethodPrivateBase HunspellInputMethodPrivate #else @@ -78,6 +76,9 @@ public: q_ptr(q_ptr), recognizeTimer(0), textCase(InputEngine::Lower) +#ifdef QT_VIRTUALKEYBOARD_RECORD_TRACE_INPUT + , unipenTrace(0) +#endif { } @@ -147,6 +148,8 @@ public: } } + gestureRecognizer.setDpi(deviceInfo->getXDPI()); + currentContext = context; } @@ -165,6 +168,13 @@ public: delayedResult.clear(); } +#ifdef QT_VIRTUALKEYBOARD_RECORD_TRACE_INPUT + if (!unipenTrace) { + Q_Q(LipiInputMethod); + unipenTrace = new UnipenTrace(traceCaptureDeviceInfo, traceScreenInfo, q); + } +#endif + Trace *trace = new Trace(); trace->setChannels(QStringList("t")); traceList.append(trace); @@ -201,7 +211,7 @@ public: if (countActiveTraces() > 0) return; - QVariantMap gesture = detectGesture(); + QVariantMap gesture = gestureRecognizer.recognize(traceList); if (gesture.isEmpty()) return; @@ -227,7 +237,7 @@ public: if (swipeAngle <= 180 + SWIPE_ANGLE_THRESHOLD && swipeAngle >= 180 - SWIPE_ANGLE_THRESHOLD) { if (swipeTouchCount == 1) { // Single swipe: backspace -#ifdef QT_VIRTUALKEYBOARD_LIPI_RECORD_TRACE_INPUT +#ifdef QT_VIRTUALKEYBOARD_RECORD_TRACE_INPUT dumpTraces(); saveTraces(Qt::Key_Backspace, 100); #endif @@ -250,7 +260,7 @@ public: if (swipeAngle <= SWIPE_ANGLE_THRESHOLD || swipeAngle >= 360 - SWIPE_ANGLE_THRESHOLD) { if (swipeTouchCount == 1) { // Single swipe: space -#ifdef QT_VIRTUALKEYBOARD_LIPI_RECORD_TRACE_INPUT +#ifdef QT_VIRTUALKEYBOARD_RECORD_TRACE_INPUT dumpTraces(); saveTraces(Qt::Key_Space, 100); #endif @@ -274,7 +284,7 @@ public: if (swipeAngle <= 270 + SWIPE_ANGLE_THRESHOLD && swipeAngle >= 270 - SWIPE_ANGLE_THRESHOLD) { if (swipeTouchCount == 1) { // Single swipe: toggle input mode -#ifdef QT_VIRTUALKEYBOARD_LIPI_RECORD_TRACE_INPUT +#ifdef QT_VIRTUALKEYBOARD_RECORD_TRACE_INPUT dumpTraces(); saveTraces(Qt::Key_Mode_switch, 100); #endif @@ -296,157 +306,6 @@ public: } } - QVariantMap detectGesture() - { - if (traceList.count() > 0 && traceList.count() < 3) { - - // Swipe gesture detection - // ======================= - // - // The following algorithm is based on the assumption that a - // vector composed of two arbitrary selected, but consecutive - // measuring points, and a vector composed of the first and last - // of the measuring points, are approximately in the same angle. - // - // If the measuring points are located very close to each other, - // the angle can fluctuate a lot. This has been taken into account - // by setting a minimum Euclidean distance between the measuring - // points. - // - - // Minimum euclidean distance of a segment (in millimeters) - static const int MINIMUM_EUCLIDEAN_DISTANCE = 8; - - // Maximum theta variance (in degrees) - static const qreal THETA_THRESHOLD = 25.0; - - // Maximum width variance in multitouch swipe (+- in percent) - static const int MAXIMUM_WIDTH_VARIANCE = 20; - - const int dpi = deviceInfo->getXDPI() >= 0 ? deviceInfo->getXDPI() : 96; - const qreal minimumEuclideanDistance = MINIMUM_EUCLIDEAN_DISTANCE / 25.4 * dpi; - static const qreal thetaThreshold = qDegreesToRadians(THETA_THRESHOLD); - - QList<QVector2D> swipeVectors; - - int traceIndex; - const int traceCount = traceList.size(); - for (traceIndex = 0; traceIndex < traceCount; ++traceIndex) { - - const Trace *trace = traceList.at(traceIndex); - const QVariantList &points = trace->points(); - QVector2D swipeVector; - const int pointCount = points.count(); - int pointIndex = 0; - if (pointCount >= 2) { - - QPointF startPosition = points.first().toPointF(); - swipeVector = QVector2D(points.last().toPointF() - startPosition); - const qreal swipeLength = swipeVector.length(); - - if (swipeLength >= minimumEuclideanDistance) { - - QPointF previousPosition = startPosition; - qreal euclideanDistance = 0; - for (pointIndex = 1; pointIndex < pointCount; ++pointIndex) { - - QPointF currentPosition(points.at(pointIndex).toPointF()); - - euclideanDistance += QVector2D(currentPosition - previousPosition).length(); - if (euclideanDistance >= minimumEuclideanDistance) { - - // Set the angle (theta) between the sample vector and the swipe vector - const QVector2D sampleVector(currentPosition - startPosition); - const qreal theta = qAcos(QVector2D::dotProduct(swipeVector, sampleVector) / (swipeLength * sampleVector.length())); - - // Rejected when theta above threshold - if (theta >= thetaThreshold) { - swipeVector = QVector2D(); - break; - } - - startPosition = currentPosition; - euclideanDistance = 0; - } - - previousPosition = currentPosition; - } - - if (pointIndex < pointCount) { - swipeVector = QVector2D(); - break; - } - - // Check to see if angle and length matches to existing touch points - if (!swipeVectors.isEmpty()) { - bool matchesToExisting = true; - const qreal minimumSwipeLength = (swipeLength * (100.0 - MAXIMUM_WIDTH_VARIANCE) / 100.0); - const qreal maximumSwipeLength = (swipeLength * (100.0 + MAXIMUM_WIDTH_VARIANCE) / 100.0); - for (const QVector2D &otherSwipeVector : qAsConst(swipeVectors)) { - const qreal otherSwipeLength = otherSwipeVector.length(); - const qreal theta = qAcos(QVector2D::dotProduct(swipeVector, otherSwipeVector) / (swipeLength * otherSwipeLength)); - - if (theta >= thetaThreshold) { - matchesToExisting = false; - break; - } - - if (otherSwipeLength < minimumSwipeLength || otherSwipeLength > maximumSwipeLength) { - matchesToExisting = false; - break; - } - } - - if (!matchesToExisting) { - swipeVector = QVector2D(); - break; - } - } - } else { - swipeVector = QVector2D(); - } - } - - if (swipeVector.isNull()) - break; - - swipeVectors.append(swipeVector); - } - - if (swipeVectors.size() == traceCount) { - - QVariantMap swipeGesture; - - // Get swipe angle from the first vector: - // 0 degrees == right - // 90 degrees == down - // 180 degrees == left - // 270 degrees == up - QList<QVector2D>::ConstIterator swipeVector = swipeVectors.constBegin(); - qreal swipeLength = swipeVector->length(); - qreal swipeAngle = qAcos(swipeVector->x() / swipeLength); - if (swipeVector->y() < 0) - swipeAngle = 2 * M_PI - swipeAngle; - - // Calculate an average length of the vector - for (++swipeVector; swipeVector != swipeVectors.end(); ++swipeVector) - swipeLength += swipeVector->length(); - swipeLength /= traceCount; - - swipeGesture[QLatin1String("type")] = QLatin1String("swipe"); - swipeGesture[QLatin1String("angle")] = swipeAngle; - swipeGesture[QLatin1String("angle_degrees")] = qRadiansToDegrees(swipeAngle); - swipeGesture[QLatin1String("length")] = swipeLength; - swipeGesture[QLatin1String("length_mm")] = swipeLength / dpi * 25.4; - swipeGesture[QLatin1String("touch_count")] = traceCount; - - return swipeGesture; - } - } - - return QVariantMap(); - } - void clearTraces() { qDeleteAll(traceList); @@ -484,7 +343,7 @@ public: void finishRecognition() { -#ifdef QT_VIRTUALKEYBOARD_LIPI_RECORD_TRACE_INPUT +#ifdef QT_VIRTUALKEYBOARD_RECORD_TRACE_INPUT dumpTraces(); #endif stopRecognizeTimer(); @@ -553,11 +412,14 @@ public: { const QChar ch = result["unicode"].toChar(); const QChar chUpper = ch.toUpper(); -#ifdef QT_VIRTUALKEYBOARD_LIPI_RECORD_TRACE_INPUT +#ifdef QT_VIRTUALKEYBOARD_RECORD_TRACE_INPUT // In recording mode, the text case must match with the current text case - if (ch.isLetter() && (ch.isUpper() != (textCase == InputEngine::Upper))) - return; - saveTraces(ch.unicode(), qRound(result["confidence"].toDouble() * 100)); + if (unipenTrace) { + if (!ch.isLetter() || (ch.isUpper() == (textCase == InputEngine::Upper))) + saveTraces(ch.unicode(), qRound(result["confidence"].toDouble() * 100)); + delete unipenTrace; + unipenTrace = 0; + } #endif Q_Q(LipiInputMethod); q->inputContext()->inputEngine()->virtualKeyClick((Qt::Key)chUpper.unicode(), @@ -565,72 +427,23 @@ public: Qt::NoModifier); } -#ifdef QT_VIRTUALKEYBOARD_LIPI_RECORD_TRACE_INPUT - QStringList recordedData; - +#ifdef QT_VIRTUALKEYBOARD_RECORD_TRACE_INPUT void dumpTraces() { - recordedData.clear(); - recordedData.append(QStringLiteral(".VERSION 1.0")); - recordedData.append(QStringLiteral(".HIERARCHY CHARACTER")); - recordedData.append(QStringLiteral(".COORD X Y T")); - recordedData.append(QStringLiteral(".SEGMENT CHARACTER")); - recordedData.append(QStringLiteral(".X_DIM %1").arg(qRound(screenContext->getBboxRight()))); - recordedData.append(QStringLiteral(".Y_DIM %1").arg(qRound(screenContext->getBboxBottom()))); - recordedData.append(QStringLiteral(".X_POINTS_PER_INCH %1").arg(deviceInfo->getXDPI())); - recordedData.append(QStringLiteral(".Y_POINTS_PER_INCH %1").arg(deviceInfo->getYDPI())); - recordedData.append(QStringLiteral(".POINTS_PER_SECOND %1").arg(deviceInfo->getSamplingRate())); - - qlonglong t0 = 0; - for (const Trace *trace : qAsConst(traceList)) { - const QVariantList &points = trace->points(); - const bool hasTime = trace->channels().contains("t"); - const QVariantList timeData = hasTime ? trace->channelData("t") : QVariantList(); - QVariantList::ConstIterator t = timeData.constBegin(); - if (t0 == 0 && hasTime) - t0 = t->toLongLong(); - - recordedData.append(QStringLiteral(".PEN_DOWN")); - - for (const QVariant &point : points) { - const QPointF pt(point.toPointF()); - QString pointStr(QStringLiteral("%1 %2 ").arg(qRound(pt.x())).arg(qRound(pt.y()))); - if (hasTime) { - pointStr.append(QString::number(t->toLongLong() - t0)); - t++; - } else { - pointStr.append(QStringLiteral("0")); - } - recordedData.append(pointStr); - } - - recordedData.append(QStringLiteral(".PEN_UP")); - } + if (unipenTrace) + unipenTrace->record(traceList); } void saveTraces(uint unicode, uint confidence) { - QString fileName; + if (!unipenTrace) + return; + QStringList homeLocations = QStandardPaths::standardLocations(QStandardPaths::HomeLocation); if (!homeLocations.isEmpty()) { QString filePath = QStringLiteral("%1/%2").arg(homeLocations.at(0)).arg("VIRTUAL_KEYBOARD_TRACES"); - QDir fileDir(filePath); - if (!fileDir.exists()) - fileDir.mkpath(filePath); - if (fileDir.exists()) { - int fileIndex = 0; - do { - fileName = fileDir.absoluteFilePath(QStringLiteral("%1_%2_%3.txt").arg(unicode).arg(confidence, 3, 10, QLatin1Char('0')).arg(fileIndex++)); - } while (QFileInfo::exists(fileName)); - } - } - QString dataStr(recordedData.join('\n')); - dataStr.append('\n'); - QFile file(fileName); - if (file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)) { - file.write(dataStr.toUtf8().constData()); - } else { - qWarning() << "Cannot open file for writing" << fileName; + unipenTrace->setDirectory(filePath); + unipenTrace->save(unicode, confidence); } } #endif @@ -647,6 +460,10 @@ public: InputEngine::TextCase textCase; vector<int> subsetOfClasses; QVariantMap delayedResult; + HandwritingGestureRecognizer gestureRecognizer; +#ifdef QT_VIRTUALKEYBOARD_RECORD_TRACE_INPUT + UnipenTrace *unipenTrace; +#endif }; /*! @@ -666,10 +483,19 @@ LipiInputMethod::~LipiInputMethod() QList<InputEngine::InputMode> LipiInputMethod::inputModes(const QString &locale) { Q_UNUSED(locale) - return QList<InputEngine::InputMode>() - << InputEngine::Latin - << InputEngine::Numeric - << InputEngine::Dialable; + QList<InputEngine::InputMode> availableInputModes; + const Qt::InputMethodHints inputMethodHints(inputContext()->inputMethodHints()); + + if (inputMethodHints.testFlag(Qt::ImhDialableCharactersOnly) || inputMethodHints.testFlag(Qt::ImhDigitsOnly)) { + availableInputModes.append(InputEngine::Dialable); + } else if (inputMethodHints.testFlag(Qt::ImhFormattedNumbersOnly)) { + availableInputModes.append(InputEngine::Numeric); + } else { + availableInputModes.append(InputEngine::Latin); + availableInputModes.append(InputEngine::Numeric); + } + + return availableInputModes; } bool LipiInputMethod::setInputMode(const QString &locale, InputEngine::InputMode inputMode) diff --git a/src/virtualkeyboard/plaininputmethod.cpp b/src/virtualkeyboard/plaininputmethod.cpp index 29c560da..2ca10cb4 100644 --- a/src/virtualkeyboard/plaininputmethod.cpp +++ b/src/virtualkeyboard/plaininputmethod.cpp @@ -49,13 +49,26 @@ PlainInputMethod::~PlainInputMethod() QList<InputEngine::InputMode> PlainInputMethod::inputModes(const QString &locale) { - Q_UNUSED(locale) - // Supports all input modes - return QList<InputEngine::InputMode>() - << InputEngine::Latin - << InputEngine::Numeric - << InputEngine::Dialable - << InputEngine::Pinyin; + QList<InputEngine::InputMode> result; + switch (QLocale(locale).script()) { + case QLocale::GreekScript: + result.append(InputEngine::Greek); + break; + case QLocale::CyrillicScript: + result.append(InputEngine::Cyrillic); + break; + case QLocale::ArabicScript: + result.append(InputEngine::Arabic); + break; + case QLocale::HebrewScript: + result.append(InputEngine::Hebrew); + break; + default: + break; + } + result.append(InputEngine::Latin); + result.append(InputEngine::Numeric); + return result; } bool PlainInputMethod::setInputMode(const QString &locale, InputEngine::InputMode inputMode) diff --git a/src/virtualkeyboard/plugin.cpp b/src/virtualkeyboard/plugin.cpp index 73ddeabc..136bba80 100644 --- a/src/virtualkeyboard/plugin.cpp +++ b/src/virtualkeyboard/plugin.cpp @@ -199,6 +199,7 @@ QPlatformInputContext *QVirtualKeyboardPlugin::create(const QString &system, con qmlRegisterType(QUrl(path + QLatin1String("InputPanel.qml")), pluginUri, 2, 0, "InputPanel"); qmlRegisterType(QUrl(path + QLatin1String("InputPanel.qml")), pluginUri, 2, 1, "InputPanel"); qmlRegisterType(QUrl(path + QLatin1String("InputPanel.qml")), pluginUri, 2, 2, "InputPanel"); + qmlRegisterType(QUrl(path + QLatin1String("InputPanel.qml")), pluginUri, 2, 3, "InputPanel"); qmlRegisterType(QUrl(path + QLatin1String("HandwritingInputPanel.qml")), pluginUri, 2, 0, "HandwritingInputPanel"); const QString componentsPath = path + QStringLiteral("components/"); qmlRegisterType(QUrl(componentsPath + QLatin1String("AlternativeKeys.qml")), pluginUri, 1, 0, "AlternativeKeys"); @@ -248,6 +249,7 @@ QPlatformInputContext *QVirtualKeyboardPlugin::create(const QString &system, con qmlRegisterType(QUrl(componentsPath + QLatin1String("WordCandidatePopupList.qml")), pluginUri, 2, 0, "WordCandidatePopupList"); qmlRegisterType(QUrl(componentsPath + QLatin1String("LanguagePopupList.qml")), pluginUri, 2, 1, "LanguagePopupList"); qmlRegisterType(QUrl(componentsPath + QLatin1String("SelectionControl.qml")), pluginUri, 2, 1, "SelectionControl"); + qmlRegisterType(QUrl(componentsPath + QLatin1String("InputModeKey.qml")), pluginUri, 2, 3, "InputModeKey"); if (system.compare(system, QLatin1String(pluginName), Qt::CaseInsensitive) == 0) { platformInputContext = new PlatformInputContext(); diff --git a/src/virtualkeyboard/shifthandler.cpp b/src/virtualkeyboard/shifthandler.cpp index 376410e3..8f42a762 100644 --- a/src/virtualkeyboard/shifthandler.cpp +++ b/src/virtualkeyboard/shifthandler.cpp @@ -50,11 +50,10 @@ public: shiftChanged(false), resetWhenVisible(false), manualShiftLanguageFilter(QSet<QLocale::Language>() << QLocale::Arabic << QLocale::Persian << QLocale::Hindi << QLocale::Korean), - manualCapsInputModeFilter(QSet<InputEngine::InputMode>() << InputEngine::Cangjie << InputEngine::Zhuyin), - noAutoUppercaseInputModeFilter(QSet<InputEngine::InputMode>() << InputEngine::FullwidthLatin << InputEngine::Pinyin << InputEngine::Cangjie << InputEngine::Zhuyin), + manualCapsInputModeFilter(QSet<InputEngine::InputMode>() << InputEngine::Cangjie << InputEngine::Zhuyin << InputEngine::Hebrew), + noAutoUppercaseInputModeFilter(QSet<InputEngine::InputMode>() << InputEngine::FullwidthLatin << InputEngine::Pinyin << InputEngine::Cangjie << InputEngine::Zhuyin << InputEngine::ChineseHandwriting << InputEngine::JapaneseHandwriting << InputEngine::KoreanHandwriting), allCapsInputModeFilter(QSet<InputEngine::InputMode>() << InputEngine::Hiragana << InputEngine::Katakana) { - timer.start(); } InputContext *inputContext; @@ -185,7 +184,7 @@ void ShiftHandler::toggleShift() QStyleHints *style = QGuiApplication::styleHints(); - if (d->timer.elapsed() > style->mouseDoubleClickInterval()) { + if (d->timer.isNull() || d->timer.elapsed() > style->mouseDoubleClickInterval()) { d->timer.restart(); } else if (d->timer.elapsed() < style->mouseDoubleClickInterval() && !d->inputContext->capsLock()) { d->inputContext->setCapsLock(!d->inputContext->capsLock() && d->inputContext->shift() && !d->shiftChanged); @@ -196,6 +195,15 @@ void ShiftHandler::toggleShift() } } +/*! Clears the toggle shift timer. + +*/ +void ShiftHandler::clearToggleShiftTimer() +{ + Q_D(ShiftHandler); + d->timer = QTime(); +} + void ShiftHandler::reset() { Q_D(ShiftHandler); diff --git a/src/virtualkeyboard/shifthandler.h b/src/virtualkeyboard/shifthandler.h index c28a9581..93ba3e34 100644 --- a/src/virtualkeyboard/shifthandler.h +++ b/src/virtualkeyboard/shifthandler.h @@ -57,6 +57,7 @@ public: bool toggleShiftEnabled() const; Q_INVOKABLE void toggleShift(); + Q_INVOKABLE void clearToggleShiftTimer(); signals: void sentenceEndingCharactersChanged(); diff --git a/src/virtualkeyboard/t9write.h b/src/virtualkeyboard/t9write.h new file mode 100644 index 00000000..621d2312 --- /dev/null +++ b/src/virtualkeyboard/t9write.h @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef T9WRITE_H +#define T9WRITE_H + +#include "t9write_api_version.h" +#ifdef HAVE_T9WRITE_ALPHABETIC +#include "decuma_hwr.h" +#endif +#ifdef HAVE_T9WRITE_CJK +#include "decuma_hwr_cjk.h" +#endif + +#if defined(HAVE_T9WRITE_CJK) && defined(HAVE_T9WRITE_ALPHABETIC) +#define DECUMA_API(FUNC_NAME) (cjk ? decumaCJK ## FUNC_NAME : decuma ## FUNC_NAME) +#elif defined(HAVE_T9WRITE_CJK) +#define DECUMA_API(FUNC_NAME) (decumaCJK ## FUNC_NAME) +#else // defined(HAVE_T9WRITE_ALPHABETIC) +#define DECUMA_API(FUNC_NAME) (decuma ## FUNC_NAME) +#endif + +#endif // T9WRITE_H diff --git a/src/virtualkeyboard/t9writedictionary.cpp b/src/virtualkeyboard/t9writedictionary.cpp new file mode 100644 index 00000000..d15b16e3 --- /dev/null +++ b/src/virtualkeyboard/t9writedictionary.cpp @@ -0,0 +1,117 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "t9writedictionary.h" +#include "virtualkeyboarddebug.h" + +namespace QtVirtualKeyboard { + +T9WriteDictionary::T9WriteDictionary(DECUMA_SESSION *decumaSession, + const DECUMA_MEM_FUNCTIONS &memFuncs, + bool cjk) : + decumaSession(decumaSession), + memFuncs(memFuncs), + cjk(cjk), + sourceData(0), + sourceSize(0), + convertedData(0), + convertedSize(0) +{ +} + +T9WriteDictionary::~T9WriteDictionary() +{ + if (convertedData) { + DECUMA_STATUS status = DECUMA_API(DestroyConvertedDictionary)(&convertedData, &memFuncs); + Q_ASSERT(status == decumaNoError); + Q_ASSERT(convertedData == 0); + } +} + +bool T9WriteDictionary::load(const QString &fileName) +{ + if (sourceData || convertedData) + return false; + + file.setFileName(fileName); + if (file.open(QIODevice::ReadOnly)) { + sourceSize = file.size(); + sourceData = file.map(0, sourceSize, QFile::NoOptions); + if (!sourceData) { + sourceSize = 0; + qWarning() << "Could not read dictionary file" << fileName; + } + file.close(); + } else { + qWarning() << "Could not open dictionary file" << fileName; + } + + return sourceData != 0; +} + +bool T9WriteDictionary::convert(const DECUMA_SRC_DICTIONARY_INFO &dictionaryInfo) +{ + if (!sourceData || convertedData) + return false; + + DECUMA_STATUS status; + status = DECUMA_API(ConvertDictionary)(&convertedData, sourceData, (DECUMA_UINT32)sourceSize, + &dictionaryInfo, &convertedSize, &memFuncs); + + if (status != decumaNoError) { + qWarning() << "Could not convert dictionary" << file.fileName(); + file.unmap((uchar *)sourceData); + sourceSize = 0; + sourceData = 0; + } + + return status == decumaNoError; +} + +QString T9WriteDictionary::fileName() const +{ + return file.fileName(); +} + +const void *T9WriteDictionary::data() const +{ + return convertedData ? convertedData : sourceData; +} + +qint64 T9WriteDictionary::size() const +{ + return convertedData ? convertedSize : sourceSize; +} + +bool T9WriteDictionary::isConverted() const +{ + return convertedData != 0; +} + +} // namespace QtVirtualKeyboard diff --git a/src/virtualkeyboard/t9writedictionary.h b/src/virtualkeyboard/t9writedictionary.h new file mode 100644 index 00000000..dc2d9475 --- /dev/null +++ b/src/virtualkeyboard/t9writedictionary.h @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef T9WRITEDICTIONARY_H +#define T9WRITEDICTIONARY_H + +#include <QtGlobal> +#include <QFile> +#include "t9write.h" + +namespace QtVirtualKeyboard { + +class T9WriteDictionary +{ + Q_DISABLE_COPY(T9WriteDictionary) +public: + explicit T9WriteDictionary(DECUMA_SESSION *decumaSession, const DECUMA_MEM_FUNCTIONS &memFuncs, bool cjk); + ~T9WriteDictionary(); + + bool load(const QString &fileName); + bool convert(const DECUMA_SRC_DICTIONARY_INFO &dictionaryInfo); + + QString fileName() const; + const void *data() const; + qint64 size() const; + bool isConverted() const; + +private: + QFile file; + DECUMA_SESSION *decumaSession; + const DECUMA_MEM_FUNCTIONS &memFuncs; + bool cjk; + void *sourceData; + qint64 sourceSize; + void *convertedData; + DECUMA_UINT32 convertedSize; +}; + +} + +#endif // T9WRITEDICTIONARY_H diff --git a/src/virtualkeyboard/t9writeinputmethod.cpp b/src/virtualkeyboard/t9writeinputmethod.cpp index eb4cf9fb..14b6508b 100644 --- a/src/virtualkeyboard/t9writeinputmethod.cpp +++ b/src/virtualkeyboard/t9writeinputmethod.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. @@ -34,16 +34,29 @@ #include "t9writeworker.h" #include "virtualkeyboarddebug.h" #include <QDirIterator> +#include <QCryptographicHash> #ifdef QT_VIRTUALKEYBOARD_DEBUG #include <QTime> #endif +#include "handwritinggesturerecognizer.h" +#ifdef QT_VIRTUALKEYBOARD_RECORD_TRACE_INPUT +#include "unipentrace.h" +#include <QStandardPaths> +#endif -#include "decuma_hwr.h" #include "decumaStatus.h" #include "decumaSymbolCategories.h" #include "decumaLanguages.h" #include "xxt9wOem.h" +/* Set to 1 to enable T9 Write log. + + The log is routed to qDebug() and it can be enabled for troubleshooting + and when reporting issues. The log must not to be enabled in production + build. +*/ +#define QT_VIRTUALKEYBOARD_T9WRITE_LOG 0 + namespace QtVirtualKeyboard { class T9WriteCaseFormatter @@ -94,12 +107,28 @@ class T9WriteInputMethodPrivate : public AbstractInputMethodPrivate Q_DECLARE_PUBLIC(T9WriteInputMethod) public: + enum EngineMode { + EngineUninitialized, + Alphabetic, + Arabic, + Hebrew, + SimplifiedChinese, + TraditionalChinese, + HongKongChinese, + Japanese, + Korean + }; + T9WriteInputMethodPrivate(T9WriteInputMethod *q_ptr) : AbstractInputMethodPrivate(), q_ptr(q_ptr), + cjk(false), + engineMode(EngineUninitialized), + defaultHwrDbPath(QLatin1String(":/QtQuick/VirtualKeyboard/T9Write/data/")), + defaultDictionaryDbPath(defaultHwrDbPath), dictionaryLock(QMutex::Recursive), - convertedDictionary(0), attachedDictionary(0), + traceListHardLimit(32), resultId(0), resultTimer(0), decumaSession(0), @@ -107,6 +136,9 @@ public: arcAdditionStarted(false), ignoreUpdate(false), textCase(InputEngine::Lower) +#ifdef QT_VIRTUALKEYBOARD_RECORD_TRACE_INPUT + , unipenTrace() +#endif { } @@ -128,34 +160,76 @@ public: free(ptr); } - void initEngine() +#if QT_VIRTUALKEYBOARD_T9WRITE_LOG + static void decumaLogString(void *pUserData, const char *pLogString, DECUMA_UINT32 nLogStringLength) + { + static QMutex s_logMutex; + static QByteArray s_logString; + Q_UNUSED(pUserData) + Q_UNUSED(nLogStringLength) + QMutexLocker guard(&s_logMutex); + s_logString.append(pLogString, nLogStringLength); + if (s_logString.endsWith('\n')) { + while (s_logString.endsWith('\n')) + s_logString.chop(1); + qDebug() << (const char *)s_logString.constData(); + s_logString.clear(); + } + } +#endif + + bool initEngine(EngineMode newEngineMode) { - VIRTUALKEYBOARD_DEBUG() << "T9WriteInputMethodPrivate::initEngine()"; + if (engineMode == newEngineMode) + return engineMode != EngineUninitialized; + + VIRTUALKEYBOARD_DEBUG() << "T9WriteInputMethodPrivate::initEngine()" << newEngineMode; if (decumaSession) - return; + exitEngine(); - symbolCategories.clear(); - symbolCategories.append(DECUMA_CATEGORY_ANSI); - languageCategories.clear(); - languageCategories.append(DECUMA_LANG_EN); + if (newEngineMode == EngineUninitialized) + return false; + + switch (newEngineMode) { + case Alphabetic: + case Arabic: + case Hebrew: + cjk = false; + break; + case SimplifiedChinese: + case TraditionalChinese: + case HongKongChinese: + case Japanese: + case Korean: + cjk = true; + break; + default: + Q_ASSERT(0 && "Invalid EngineMode!"); + return false; + } + engineMode = newEngineMode; memset(&sessionSettings, 0, sizeof(sessionSettings)); - QString latinDb = findLatinDb(":/databases/HWR_LatinCG/"); - hwrDbFile.setFileName(latinDb); + QString hwrDb = findHwrDb(engineMode, defaultHwrDbPath); + hwrDbFile.setFileName(hwrDb); if (!hwrDbFile.open(QIODevice::ReadOnly)) { - qWarning() << "Could not open hwr database file" << latinDb; - return; + qCritical() << "Could not open HWR database" << hwrDb; + exitEngine(); + return false; } sessionSettings.pStaticDB = (DECUMA_STATIC_DB_PTR)hwrDbFile.map(0, hwrDbFile.size(), QFile::NoOptions); if (!sessionSettings.pStaticDB) { - hwrDbFile.close(); - qWarning() << "Could not map hwr database" << latinDb; - return; + qCritical() << "Could not read HWR database" << hwrDb; + exitEngine(); + return false; } + symbolCategories.append(DECUMA_CATEGORY_ANSI); + languageCategories.append(DECUMA_LANG_EN); + sessionSettings.recognitionMode = mcrMode; sessionSettings.bMinimizeAddArcPreProcessing = 1; sessionSettings.writingDirection = unknownWriting; @@ -164,17 +238,25 @@ public: sessionSettings.charSet.pLanguages = languageCategories.data(); sessionSettings.charSet.nLanguages = languageCategories.size(); - session = QByteArray(decumaGetSessionSize(), 0); + session = QByteArray(DECUMA_API(GetSessionSize)(), 0); decumaSession = (DECUMA_SESSION *)(!session.isEmpty() ? session.data() : 0); - DECUMA_STATUS status = decumaBeginSession(decumaSession, &sessionSettings, &memFuncs); + DECUMA_STATUS status = DECUMA_API(BeginSession)(decumaSession, &sessionSettings, &memFuncs); Q_ASSERT(status == decumaNoError); if (status != decumaNoError) { - qWarning() << "Could not initialize T9Write engine" << status; + qCritical() << "Could not initialize T9Write engine" << status; + exitEngine(); + return false; } - worker.reset(new T9WriteWorker(decumaSession)); +#if QT_VIRTUALKEYBOARD_T9WRITE_LOG + DECUMA_API(StartLogging)(decumaSession, 0, decumaLogString); +#endif + + worker.reset(new T9WriteWorker(decumaSession, cjk)); worker->start(); + + return true; } void exitEngine() @@ -188,36 +270,80 @@ public: hwrDbFile.close(); } - detachDictionary(&attachedDictionary); - destroyConvertedDictionary(&convertedDictionary); + if (attachedDictionary) { + detachDictionary(attachedDictionary); + attachedDictionary.reset(); + } + loadedDictionary.reset(); if (decumaSession) { - decumaEndSession(decumaSession); +#if QT_VIRTUALKEYBOARD_T9WRITE_LOG + DECUMA_API(StopLogging)(decumaSession); +#endif + DECUMA_API(EndSession)(decumaSession); decumaSession = 0; session.clear(); } memset(&sessionSettings, 0, sizeof(sessionSettings)); - } - QString findLatinDb(const QString &dir) - { - QString latinDb; - QDirIterator it(dir, QDirIterator::NoIteratorFlags); - while (it.hasNext()) { - QString fileEntry = it.next(); + symbolCategories.clear(); + languageCategories.clear(); - if (!fileEntry.endsWith(QLatin1String(".bin"))) - continue; + engineMode = EngineUninitialized; + cjk = false; + } - latinDb = fileEntry; + QString findHwrDb(EngineMode mode, const QString &dir) const + { + QString hwrDbPath(dir); + switch (mode) { + case Alphabetic: +#if T9WRITEAPIMAJORVERNUM >= 21 + hwrDbPath.append(QLatin1String("hwrDB_le.bin")); +#else + hwrDbPath.append(QLatin1String("_databas_le.bin")); +#endif + break; + case Arabic: +#if T9WRITEAPIMAJORVERNUM >= 21 + hwrDbPath.append(QLatin1String("arabic/hwrDB_le.bin")); +#else + hwrDbPath.append(QLatin1String("arabic/_databas_le.bin")); +#endif + break; + case Hebrew: +#if T9WRITEAPIMAJORVERNUM >= 21 + hwrDbPath.append(QLatin1String("hebrew/hwrDB_le.bin")); +#else + hwrDbPath.append(QLatin1String("hebrew/_databas_le.bin")); +#endif break; + case SimplifiedChinese: + hwrDbPath.append(QLatin1String("cjk_S_gb18030_le.hdb")); + break; + case TraditionalChinese: + hwrDbPath.append(QLatin1String("cjk_T_std_le.hdb")); + break; + case HongKongChinese: + hwrDbPath.append(QLatin1String("cjk_HK_std_le.hdb")); + break; + case Japanese: + hwrDbPath.append(QLatin1String("cjk_J_std_le.hdb")); + break; + case Korean: + hwrDbPath.append(QLatin1String("cjk_K_mkt_le.hdb")); + break; + default: + return QString(); } - return latinDb; + return QFileInfo::exists(hwrDbPath) ? hwrDbPath : QString(); } - QString findDictionary(const QString &dir, const QLocale &locale) + QString findDictionary(const QString &dir, const QLocale &locale, DECUMA_SRC_DICTIONARY_TYPE &srcType) { + srcType = numberOfSrcDictionaryTypes; + QStringList languageCountry = locale.name().split("_"); if (languageCountry.length() != 2) return QString(); @@ -227,11 +353,27 @@ public: while (it.hasNext()) { QString fileEntry = it.next(); - if (!fileEntry.endsWith(QLatin1String(".ldb"))) + if (!fileEntry.contains("_" + languageCountry[0].toUpper())) continue; - if (!fileEntry.contains("_" + languageCountry[0].toUpper())) + if (fileEntry.endsWith(QLatin1String(".ldb"))) { +#if T9WRITEAPIMAJORVERNUM >= 20 + qCritical() << "Incompatible T9 Write dictionary" << fileEntry; continue; +#else + srcType = decumaXT9LDB; +#endif + } else if (fileEntry.endsWith(QLatin1String(".phd"))) { +#if T9WRITEAPIMAJORVERNUM >= 20 + srcType = decumaPortableHWRDictionary; +#else + qCritical() << "Incompatible T9 Write dictionary" << fileEntry; + continue; +#endif + } else { + qWarning() << "Incompatible T9 Write dictionary" << fileEntry; + continue; + } dictionary = fileEntry; break; @@ -240,201 +382,136 @@ public: return dictionary; } - bool attachDictionary(void *dictionary) + bool attachDictionary(const QSharedPointer<T9WriteDictionary> &dictionary) { - VIRTUALKEYBOARD_DEBUG() << "T9WriteInputMethodPrivate::attachDictionary():" << dictionary; - QMutexLocker dictionaryGuard(&dictionaryLock); Q_ASSERT(decumaSession != 0); Q_ASSERT(dictionary != 0); - - DECUMA_STATUS status = decumaAttachConvertedDictionary(decumaSession, dictionary); - Q_ASSERT(status == decumaNoError); + VIRTUALKEYBOARD_DEBUG() << "T9WriteInputMethodPrivate::attachDictionary():" << dictionary->fileName(); +#if T9WRITEAPIMAJORVERNUM >= 20 + DECUMA_STATUS status = DECUMA_API(AttachDictionary)(decumaSession, dictionary->data(), dictionary->size()); +#else + DECUMA_STATUS status = DECUMA_API(AttachConvertedDictionary)(decumaSession, dictionary->data()); +#endif return status == decumaNoError; } - void detachDictionary(void **dictionary) + void detachDictionary(const QSharedPointer<T9WriteDictionary> &dictionary) { QMutexLocker dictionaryGuard(&dictionaryLock); - Q_ASSERT(decumaSession != 0); - if (!dictionary || !*dictionary) + if (!dictionary) return; - VIRTUALKEYBOARD_DEBUG() << "T9WriteInputMethodPrivate::detachDictionary():" << *dictionary; + VIRTUALKEYBOARD_DEBUG() << "T9WriteInputMethodPrivate::detachDictionary():" << dictionary->fileName(); - DECUMA_STATUS status = decumaDetachDictionary(decumaSession, *dictionary); - Q_UNUSED(status) - Q_ASSERT(status == decumaNoError); - *dictionary = 0; - } - - void destroyConvertedDictionary(void **dictionary) - { - QMutexLocker dictionaryGuard(&dictionaryLock); Q_ASSERT(decumaSession != 0); - if (!dictionary || !*dictionary) - return; - - VIRTUALKEYBOARD_DEBUG() << "T9WriteInputMethodPrivate::destroyConvertedDictionary():" << *dictionary; - - DECUMA_STATUS status = decumaDestroyConvertedDictionary(dictionary, &memFuncs); + DECUMA_STATUS status = DECUMA_API(DetachDictionary)(decumaSession, dictionary->data()); Q_UNUSED(status) Q_ASSERT(status == decumaNoError); - Q_ASSERT(*dictionary == 0); } bool setInputMode(const QLocale &locale, InputEngine::InputMode inputMode) { + Q_Q(T9WriteInputMethod); VIRTUALKEYBOARD_DEBUG() << "T9WriteInputMethodPrivate::setInputMode():" << locale << inputMode; - Q_Q(T9WriteInputMethod); - DECUMA_UINT32 language = mapToDecumaLanguage(locale); + finishRecognition(); + + if (!initEngine(mapLocaleToEngineMode(locale))) + return false; + + DECUMA_UINT32 language = mapToDecumaLanguage(locale, inputMode); if (language == DECUMA_LANG_GSMDEFAULT) { - qWarning() << "Handwriting input does not support the language" << locale.name(); + qWarning() << "Handwriting is not supported in" << locale.name(); return false; } int isLanguageSupported = 0; - decumaDatabaseIsLanguageSupported(sessionSettings.pStaticDB, language, &isLanguageSupported); + DECUMA_API(DatabaseIsLanguageSupported)(sessionSettings.pStaticDB, language, &isLanguageSupported); if (!isLanguageSupported) { - qWarning() << "Handwriting input does not support the language" << locale.name(); + qWarning() << "Handwriting is not supported in" << locale.name(); return false; } - finishRecognition(); - - bool languageChanged = languageCategories.isEmpty() || !languageCategories.contains(language); - if (languageChanged) { - languageCategories.clear(); - languageCategories.append(language); - } - - // Choose the symbol categories by input mode, script and input method hints - bool leftToRightGestures = true; - Qt::InputMethodHints inputMethodHints = q->inputContext()->inputMethodHints(); - symbolCategories.clear(); - switch (inputMode) { - case InputEngine::Latin: - if (inputMethodHints.testFlag(Qt::ImhEmailCharactersOnly)) { - symbolCategories.append(DECUMA_CATEGORY_EMAIL); - } else if (inputMethodHints.testFlag(Qt::ImhUrlCharactersOnly)) { - symbolCategories.append(DECUMA_CATEGORY_URL); - } else { - bool includeDigits = true; - bool includeBasicPunctuation = true; - switch (locale.script()) { - case QLocale::LatinScript: - if (language == DECUMA_LANG_EN) - symbolCategories.append(DECUMA_CATEGORY_ANSI); - else - symbolCategories.append(DECUMA_CATEGORY_ISO8859_1); - break; - - case QLocale::CyrillicScript: - symbolCategories.append(DECUMA_CATEGORY_CYRILLIC); - break; - - case QLocale::GreekScript: - symbolCategories.append(DECUMA_CATEGORY_GREEK); - break; - - default: - qWarning() << "Handwriting input does not support the language" << locale.name(); - return false; - } - - if (includeDigits) - symbolCategories.append(DECUMA_CATEGORY_DIGIT); - - if (includeBasicPunctuation) { - symbolCategories.append(DECUMA_CATEGORY_BASIC_PUNCTUATIONS); - symbolCategories.append(DECUMA_CATEGORY_CONTRACTION_MARK); - } - - if (language == DECUMA_LANG_ES) - symbolCategories.append(DECUMA_CATEGORY_SPANISH_PUNCTUATIONS); - } - break; - - case InputEngine::Numeric: - symbolCategories.append(DECUMA_CATEGORY_DIGIT); - if (!inputMethodHints.testFlag(Qt::ImhDigitsOnly)) - symbolCategories.append(DECUMA_CATEGORY_NUM_SUP); - break; + bool languageChanged = languageCategories.isEmpty() || languageCategories.first() != language; + languageCategories.clear(); + languageCategories.append(language); - case InputEngine::Dialable: - symbolCategories.append(DECUMA_CATEGORY_PHONE_NUMBER); - break; + // Add English as secondary language for non-latin languages. + // T9 Write requires it for punctuation and latin symbols if + // included in the symbol categories. + if (locale.script() != QLocale::LatinScript) + languageCategories.append(DECUMA_LANG_EN); - default: + if (!updateSymbolCategories(language, locale, inputMode)) return false; - } - - if (leftToRightGestures) { - symbolCategories.append(DECUMA_CATEGORY_BACKSPACE_STROKE); - symbolCategories.append(DECUMA_CATEGORY_RETURN_STROKE); - symbolCategories.append(DECUMA_CATEGORY_WHITESPACE_STROKE); - } - - /* The dictionary is loaded in the background thread. Once the loading is - complete the dictionary will be attached to the current session. The - attachment happens in the worker thread context, thus the direct - connection for the signal handler and the mutex protecting the - converted dictionary for concurrent access. - - The loading operation is blocking for the main thread only if the - user starts handwriting input before the operation is complete. - */ - { - QMutexLocker dictionaryGuard(&dictionaryLock); - - // Select recognition mode - // Note: MCR mode is preferred in all cases, since it eliminates the need - // for recognition timer, thus provides better user experience. - sessionSettings.recognitionMode = inputMethodHints.testFlag(Qt::ImhHiddenText) ? scrMode : mcrMode; - - // Detach previous dictionary if the language is being changed - // or the recognizer mode is single-character mode - if ((languageChanged || inputMethodHints.testFlag(Qt::ImhNoPredictiveText) || sessionSettings.recognitionMode == scrMode) && attachedDictionary) { - detachDictionary(&attachedDictionary); - } - - // Check if a dictionary needs to be loaded - if (languageChanged || !convertedDictionary) { - destroyConvertedDictionary(&convertedDictionary); - dictionaryFileName = findDictionary(":/databases/XT9_LDBs/", locale); - if (!dictionaryFileName.isEmpty()) { - if (dictionaryTask.isNull() || dictionaryTask->fileUri != dictionaryFileName) { - dictionaryTask.reset(new T9WriteDictionaryTask(dictionaryFileName, memFuncs)); - q->connect(dictionaryTask.data(), SIGNAL(completed(QString,void*)), - SLOT(dictionaryLoadCompleted(QString,void*)), Qt::DirectConnection); - worker->addTask(dictionaryTask); - } - } - } + updateRecognitionMode(language, locale, inputMode); + updateDictionary(language, locale, languageChanged); + static const QList<DECUMA_UINT32> rtlLanguages = QList<DECUMA_UINT32>() + << DECUMA_LANG_AR << DECUMA_LANG_IW << DECUMA_LANG_FA << DECUMA_LANG_UR; + sessionSettings.writingDirection = rtlLanguages.contains(language) ? rightToLeft : unknownWriting; + + // Enable multi-threaded recognition if available. +#ifdef DECUMA_USE_MULTI_THREAD + // Note: This feature requires T9 Write v8.0.0 or later, + // and feature enabled in the SDK. + sessionSettings.nMaxThreads = qMax(QThread::idealThreadCount(), 0); +#endif - // Attach existing dictionary, if necessary - if (sessionSettings.recognitionMode == mcrMode && !inputMethodHints.testFlag(Qt::ImhNoPredictiveText) && - convertedDictionary && !attachedDictionary) { - attachDictionary(convertedDictionary); - attachedDictionary = convertedDictionary; - } - } + VIRTUALKEYBOARD_DEBUG() << " -> language categories:" << languageCategories; + VIRTUALKEYBOARD_DEBUG() << " -> symbol categories:" << symbolCategories; + VIRTUALKEYBOARD_DEBUG() << " -> recognition mode:" << sessionSettings.recognitionMode; // Change session settings sessionSettings.charSet.pSymbolCategories = symbolCategories.data(); sessionSettings.charSet.nSymbolCategories = symbolCategories.size(); sessionSettings.charSet.pLanguages = languageCategories.data(); sessionSettings.charSet.nLanguages = languageCategories.size(); - DECUMA_STATUS status = decumaChangeSessionSettings(decumaSession, &sessionSettings); + DECUMA_STATUS status = DECUMA_API(ChangeSessionSettings)(decumaSession, &sessionSettings); Q_ASSERT(status == decumaNoError); - caseFormatter.preferLowercase = inputMethodHints.testFlag(Qt::ImhPreferLowercase); + caseFormatter.preferLowercase = q->inputContext()->inputMethodHints().testFlag(Qt::ImhPreferLowercase); return status == decumaNoError; } - DECUMA_UINT32 mapToDecumaLanguage(const QLocale &locale) + EngineMode mapLocaleToEngineMode(const QLocale &locale) + { +#ifdef HAVE_T9WRITE_CJK + switch (locale.language()) { + case QLocale::Chinese: { + if (locale.script() == QLocale::TraditionalChineseScript) + return locale.country() == QLocale::HongKong ? HongKongChinese : TraditionalChinese; + return SimplifiedChinese; + break; + } + case QLocale::Japanese: + return Japanese; + break; + case QLocale::Korean: + return Korean; + default: + break; + } +#else + Q_UNUSED(locale) +#endif + +#ifdef HAVE_T9WRITE_ALPHABETIC + switch (locale.script()) { + case QLocale::ArabicScript: + return T9WriteInputMethodPrivate::Arabic; + case QLocale::HebrewScript: + return T9WriteInputMethodPrivate::Hebrew; + default: + return T9WriteInputMethodPrivate::Alphabetic; + } +#else + return T9WriteInputMethodPrivate::EngineUninitialized; +#endif + } + + DECUMA_UINT32 mapToDecumaLanguage(const QLocale &locale, InputEngine::InputMode inputMode) { static const QLocale::Language maxLanguage = QLocale::Vietnamese; static const DECUMA_UINT32 languageMap[maxLanguage + 1] = { @@ -538,7 +615,7 @@ public: DECUMA_LANG_GSMDEFAULT, // Samoan = 97 DECUMA_LANG_GSMDEFAULT, // Sango = 98 DECUMA_LANG_GSMDEFAULT, // Sanskrit = 99 - DECUMA_LANG_SR, // Serbian = 100 + DECUMA_LANG_SRCY, // Serbian = 100 DECUMA_LANG_GSMDEFAULT, // Ossetic = 101 DECUMA_LANG_ST, // SouthernSotho = 102 DECUMA_LANG_GSMDEFAULT, // Tswana = 103 @@ -573,22 +650,388 @@ public: DECUMA_LANG_VI // Vietnamese = 132 }; + int localeLanguage = locale.language(); if (locale.language() > maxLanguage) return DECUMA_LANG_GSMDEFAULT; - DECUMA_UINT32 language = languageMap[locale.language()]; + DECUMA_UINT32 language = languageMap[localeLanguage]; + if (language == DECUMA_LANG_PRC) { + if (inputMode != InputEngine::ChineseHandwriting) + language = DECUMA_LANG_EN; + else if (locale.script() == QLocale::TraditionalChineseScript) + language = (locale.country() == QLocale::HongKong) ? DECUMA_LANG_HK : DECUMA_LANG_TW; + } else if (language == DECUMA_LANG_JP) { + if (inputMode != InputEngine::JapaneseHandwriting) + language = DECUMA_LANG_EN; + } else if (language == DECUMA_LANG_KO) { + if (inputMode != InputEngine::KoreanHandwriting) + language = DECUMA_LANG_EN; + } else if (language == DECUMA_LANG_SRCY) { + if (inputMode != InputEngine::Cyrillic) + language = DECUMA_LANG_SRLA; + } else if (language == DECUMA_LANG_AR || language == DECUMA_LANG_FA) { + if (inputMode != InputEngine::Arabic && inputMode != InputEngine::Numeric) + language = DECUMA_LANG_EN; + } else if (language == DECUMA_LANG_IW) { + if (inputMode != InputEngine::Hebrew) + language = DECUMA_LANG_EN; + } return language; } + void updateRecognitionMode(DECUMA_UINT32 language, const QLocale &locale, + InputEngine::InputMode inputMode) + { + Q_Q(T9WriteInputMethod); + Q_UNUSED(language) + Q_UNUSED(locale) + Q_UNUSED(inputMode) + + // Select recognition mode + // Note: MCR mode is preferred, as it does not require recognition + // timer and provides better user experience. + sessionSettings.recognitionMode = mcrMode; + + // Use scrMode with hidden text or with no predictive mode + if (inputMode != InputEngine::ChineseHandwriting && + inputMode != InputEngine::JapaneseHandwriting && + inputMode != InputEngine::KoreanHandwriting) { + const Qt::InputMethodHints inputMethodHints = q->inputContext()->inputMethodHints(); + if (inputMethodHints.testFlag(Qt::ImhHiddenText) || inputMethodHints.testFlag(Qt::ImhNoPredictiveText)) + sessionSettings.recognitionMode = scrMode; + } + } + + bool updateSymbolCategories(DECUMA_UINT32 language, const QLocale &locale, + InputEngine::InputMode inputMode) + { + // Handle CJK in separate method + if (cjk) + return updateSymbolCategoriesCjk(language, locale, inputMode); + + symbolCategories.clear(); + + // Choose the symbol categories by input mode, script and input method hints + bool leftToRightGestures = true; + Q_Q(T9WriteInputMethod); + const Qt::InputMethodHints inputMethodHints = q->inputContext()->inputMethodHints(); + switch (inputMode) { + case InputEngine::Latin: + if (inputMethodHints.testFlag(Qt::ImhEmailCharactersOnly)) { + symbolCategories.append(DECUMA_CATEGORY_EMAIL); + } else if (inputMethodHints.testFlag(Qt::ImhUrlCharactersOnly)) { + symbolCategories.append(DECUMA_CATEGORY_URL); + } else { + if (language == DECUMA_LANG_EN || language == DECUMA_LANG_NL) + symbolCategories.append(DECUMA_CATEGORY_ANSI); + else + symbolCategories.append(DECUMA_CATEGORY_ISO8859_1); + symbolCategories.append(DECUMA_CATEGORY_DIGIT); + symbolCategories.append(DECUMA_CATEGORY_BASIC_PUNCTUATIONS); + symbolCategories.append(DECUMA_CATEGORY_CONTRACTION_MARK); + if (language == DECUMA_LANG_ES) + symbolCategories.append(DECUMA_CATEGORY_SPANISH_PUNCTUATIONS); + } + break; + + case InputEngine::Numeric: + if (language == DECUMA_LANG_AR || language == DECUMA_LANG_FA) { + symbolCategories.append(DECUMA_CATEGORY_ARABIC_NUM_MODE); + symbolCategories.append(DECUMA_CATEGORY_ARABIC_GESTURES); + leftToRightGestures = false; + break; + } + symbolCategories.append(DECUMA_CATEGORY_DIGIT); + if (!inputMethodHints.testFlag(Qt::ImhDigitsOnly)) + symbolCategories.append(DECUMA_CATEGORY_NUM_SUP); + break; + + case InputEngine::Dialable: + symbolCategories.append(DECUMA_CATEGORY_PHONE_NUMBER); + break; + + case InputEngine::Greek: + symbolCategories.append(DECUMA_CATEGORY_GREEK); + symbolCategories.append(DECUMA_CATEGORY_QUEST_EXCL_MARK_PUNCTUATIONS); + symbolCategories.append(DECUMA_CATEGORY_PERIOD_COMMA_PUNCTUATIONS); + symbolCategories.append(DECUMA_CATEGORY_COLON_PUNCTUATIONS); + symbolCategories.append(DECUMA_CATEGORY_CONTRACTION_MARK); + symbolCategories.append(DECUMA_CATEGORY_CONTRACTION_MARK); + break; + + case InputEngine::Cyrillic: + symbolCategories.append(DECUMA_CATEGORY_CYRILLIC); + symbolCategories.append(DECUMA_CATEGORY_QUEST_EXCL_MARK_PUNCTUATIONS); + symbolCategories.append(DECUMA_CATEGORY_PERIOD_COMMA_PUNCTUATIONS); + // Ukrainian needs contraction mark, but not Russian or Bulgarian + if (language == DECUMA_LANG_UK) + symbolCategories.append(DECUMA_CATEGORY_CONTRACTION_MARK); + break; + + case InputEngine::Arabic: + symbolCategories.append(DECUMA_CATEGORY_ARABIC_ISOLATED_LETTER_MODE); + symbolCategories.append(DECUMA_CATEGORY_ARABIC_GESTURES); + leftToRightGestures = false; + break; + + case InputEngine::Hebrew: + symbolCategories.append(DECUMA_CATEGORY_HEBREW_GL_HEBREW_CURSIVE_MODE); + symbolCategories.append(DECUMA_CATEGORY_HEBREW_GL_HEBREW_LETTERSYMBOLS); + symbolCategories.append(DECUMA_CATEGORY_HEBREW_SHEQEL); + symbolCategories.append(DECUMA_CATEGORY_ARABIC_GESTURES); + leftToRightGestures = false; + break; + + default: + qWarning() << "Handwriting is not supported in" << locale.name(); + return false; + } + + if (leftToRightGestures) { + symbolCategories.append(DECUMA_CATEGORY_BACKSPACE_STROKE); + symbolCategories.append(DECUMA_CATEGORY_RETURN_STROKE); + symbolCategories.append(DECUMA_CATEGORY_WHITESPACE_STROKE); + } + + return true; + } + + bool updateSymbolCategoriesCjk(DECUMA_UINT32 language, const QLocale &locale, + InputEngine::InputMode inputMode) + { + Q_UNUSED(language) + Q_ASSERT(cjk); + + symbolCategories.clear(); + + switch (inputMode) { + case InputEngine::Latin: + symbolCategories.append(DECUMA_CATEGORY_ANSI); + symbolCategories.append(DECUMA_CATEGORY_CJK_SYMBOL); + symbolCategories.append(DECUMA_CATEGORY_PUNCTUATIONS); + break; + + case InputEngine::Numeric: + symbolCategories.append(DECUMA_CATEGORY_DIGIT); + symbolCategories.append(DECUMA_CATEGORY_CJK_SYMBOL); + symbolCategories.append(DECUMA_CATEGORY_PUNCTUATIONS); + break; + + case InputEngine::Dialable: + symbolCategories.append(DECUMA_CATEGORY_DIGIT); + symbolCategories.append(DECUMA_CATEGORY_CJK_SYMBOL); + break; + + case InputEngine::ChineseHandwriting: + switch (locale.script()) { + case QLocale::SimplifiedChineseScript: + symbolCategories.append(DECUMA_CATEGORY_GB2312_A); + symbolCategories.append(DECUMA_CATEGORY_GB2312_B_CHARS_ONLY); + symbolCategories.append(DECUMA_CATEGORY_GBK_3); + symbolCategories.append(DECUMA_CATEGORY_GBK_4); + symbolCategories.append(DECUMA_CATEGORY_CJK_SYMBOL); + symbolCategories.append(DECUMA_CATEGORY_CJK_GENERAL_PUNCTUATIONS); + symbolCategories.append(DECUMA_CATEGORY_PUNCTUATIONS); + break; + + case QLocale::TraditionalChineseScript: + symbolCategories.append(DECUMA_CATEGORY_BIGFIVE); + if (language == DECUMA_LANG_HK) + symbolCategories.append(DECUMA_CATEGORY_HKSCS_CHARS_ONLY); + symbolCategories.append(DECUMA_CATEGORY_CJK_SYMBOL); + symbolCategories.append(DECUMA_CATEGORY_CJK_GENERAL_PUNCTUATIONS); + symbolCategories.append(DECUMA_CATEGORY_PUNCTUATIONS); + break; + + default: + qWarning() << "Chinese handwriting is not supported in" << locale.name(); + return false; + } + break; + + case InputEngine::JapaneseHandwriting: + symbolCategories.append(DECUMA_CATEGORY_JIS_LEVEL_1); + symbolCategories.append(DECUMA_CATEGORY_JIS_LEVEL_2); + symbolCategories.append(DECUMA_CATEGORY_HIRAGANA); + symbolCategories.append(DECUMA_CATEGORY_KATAKANA); + symbolCategories.append(DECUMA_CATEGORY_HIRAGANASMALL); + symbolCategories.append(DECUMA_CATEGORY_KATAKANASMALL); + symbolCategories.append(DECUMA_CATEGORY_CJK_SYMBOL); + symbolCategories.append(DECUMA_CATEGORY_CJK_GENERAL_PUNCTUATIONS); + symbolCategories.append(DECUMA_CATEGORY_PUNCTUATIONS); + break; + + case InputEngine::KoreanHandwriting: + symbolCategories.append(DECUMA_CATEGORY_HANGUL_1001_A); + symbolCategories.append(DECUMA_CATEGORY_HANGUL_1001_B); + symbolCategories.append(DECUMA_CATEGORY_CJK_SYMBOL); + symbolCategories.append(DECUMA_CATEGORY_CJK_GENERAL_PUNCTUATIONS); + symbolCategories.append(DECUMA_CATEGORY_PUNCTUATIONS); + break; + + default: + return false; + } + + return true; + } + + void updateDictionary(DECUMA_UINT32 language, const QLocale &locale, bool languageChanged) + { + Q_Q(T9WriteInputMethod); + + /* The dictionary is loaded in the background thread. Once the loading is + complete the dictionary will be attached to the current session. The + attachment happens in the worker thread context, thus the direct + connection for the signal handler and the mutex protecting the + converted dictionary for concurrent access. + The loading operation is blocking for the main thread only if the + user starts handwriting input before the operation is complete. + */ + QMutexLocker dictionaryGuard(&dictionaryLock); + + // Detach previous dictionary if the language is being changed + // or the recognizer mode is single-character mode + const Qt::InputMethodHints inputMethodHints = q->inputContext()->inputMethodHints(); + if ((languageChanged || inputMethodHints.testFlag(Qt::ImhNoPredictiveText) || sessionSettings.recognitionMode == scrMode) && attachedDictionary) { + detachDictionary(attachedDictionary); + attachedDictionary.reset(); + } + + // Check if a dictionary needs to be loaded + if (languageChanged || !loadedDictionary) { + loadedDictionary.reset(); + + DECUMA_SRC_DICTIONARY_INFO dictionaryInfo; + memset(&dictionaryInfo, 0, sizeof(dictionaryInfo)); + + QList<QLocale> decumaLocales; + decumaLocales.append(locale); + + // CJK: No dictionary for latin input + if (cjk && language == DECUMA_LANG_EN) + decumaLocales.clear(); + + dictionaryFileName.clear(); + QLocale decumaLocale; + for (QLocale tryLocale : decumaLocales) { + dictionaryFileName = findDictionary(defaultDictionaryDbPath, tryLocale, dictionaryInfo.srcType); + if (!dictionaryFileName.isEmpty()) { + decumaLocale = tryLocale; + break; + } + } + if (!dictionaryFileName.isEmpty()) { + if (dictionaryTask.isNull() || dictionaryTask->dictionaryFileName != dictionaryFileName) { + VIRTUALKEYBOARD_DEBUG() << " -> load dictionary:" << dictionaryFileName; + + bool convertDictionary = true; +#if defined(HAVE_T9WRITE_CJK) && T9WRITEAPIMAJORVERNUM >= 20 + // Chinese dictionary cannot be converted (PHD) + if (dictionaryInfo.srcType == decumaPortableHWRDictionary && decumaLocale.language() == QLocale::Chinese) + convertDictionary = false; +#endif + + QSharedPointer<T9WriteDictionary> newDictionary(new T9WriteDictionary(decumaSession, memFuncs, cjk)); + dictionaryTask.reset(new T9WriteDictionaryTask(newDictionary, dictionaryFileName, convertDictionary, dictionaryInfo)); + + QObject::connect(dictionaryTask.data(), &T9WriteDictionaryTask::completed, + q, &T9WriteInputMethod::dictionaryLoadCompleted, Qt::DirectConnection); + worker->addTask(dictionaryTask); + } + } + } + + // Attach existing dictionary, if available + if (sessionSettings.recognitionMode == mcrMode && !inputMethodHints.testFlag(Qt::ImhNoPredictiveText) && + loadedDictionary && !attachedDictionary) { + if (attachDictionary(loadedDictionary)) + attachedDictionary = loadedDictionary; + } + } + + QByteArray getContext(InputEngine::PatternRecognitionMode patternRecognitionMode, + const QVariantMap &traceCaptureDeviceInfo, + const QVariantMap &traceScreenInfo) const + { + QCryptographicHash hash(QCryptographicHash::Md5); + + hash.addData((const char *)&patternRecognitionMode, sizeof(patternRecognitionMode)); + + QByteArray mapData; + QDataStream ds(&mapData, QIODevice::WriteOnly); + ds << traceCaptureDeviceInfo; + ds << traceScreenInfo; + hash.addData(mapData); + + return hash.result(); + } + + void setContext(InputEngine::PatternRecognitionMode patternRecognitionMode, + const QVariantMap &traceCaptureDeviceInfo, + const QVariantMap &traceScreenInfo) + { + QByteArray context = getContext(patternRecognitionMode, traceCaptureDeviceInfo, traceScreenInfo); + if (context == currentContext) + return; + currentContext = context; + + VIRTUALKEYBOARD_DEBUG() << "T9WriteInputMethodPrivate::setContext():" << QString(context.toHex()); + + // Finish recognition, but preserve current input + Q_Q(T9WriteInputMethod); + QString preeditText = q->inputContext()->preeditText(); + // WA: T9Write CJK may crash in some cases with long stringStart. + // Therefore we don't restore the current input in this mode. + bool preserveCurrentInput = !preeditText.isEmpty() && !cjk; + T9WriteCaseFormatter oldCaseFormatter(caseFormatter); + finishRecognition(!preserveCurrentInput); + + if (preserveCurrentInput) { + caseFormatter = oldCaseFormatter; + stringStart = preeditText; + wordCandidates.append(preeditText); + activeWordIndex = 0; + emit q->selectionListChanged(SelectionListModel::WordCandidateList); + emit q->selectionListActiveItemChanged(SelectionListModel::WordCandidateList, activeWordIndex); + } + + const int dpi = traceCaptureDeviceInfo.value("dpi", 96).toInt(); + static const int INSTANT_GESTURE_WIDTH_THRESHOLD_MM = 25; + static const int INSTANT_GESTURE_HEIGHT_THRESHOLD_MM = 25; + instantGestureSettings.widthThreshold = INSTANT_GESTURE_WIDTH_THRESHOLD_MM / 25.4 * dpi; + instantGestureSettings.heightThreshold = INSTANT_GESTURE_HEIGHT_THRESHOLD_MM / 25.4 * dpi; + + gestureRecognizer.setDpi(dpi); + + QVariantList horizontalRulers(traceScreenInfo.value("horizontalRulers", QVariantList()).toList()); + if (horizontalRulers.count() >= 2) { + sessionSettings.baseline = horizontalRulers.last().toInt(); + sessionSettings.helpline = 0; + sessionSettings.topline = horizontalRulers.first().toInt(); + sessionSettings.supportLineSet = baselineAndTopline; + } else { + sessionSettings.baseline = 0; + sessionSettings.helpline = 0; + sessionSettings.topline = 0; + sessionSettings.supportLineSet = baselineAndTopline; + } + + DECUMA_STATUS status = DECUMA_API(ChangeSessionSettings)(decumaSession, &sessionSettings); + Q_ASSERT(status == decumaNoError); + } + Trace *traceBegin(int traceId, InputEngine::PatternRecognitionMode patternRecognitionMode, const QVariantMap &traceCaptureDeviceInfo, const QVariantMap &traceScreenInfo) { Q_UNUSED(traceId) Q_UNUSED(patternRecognitionMode) - Q_UNUSED(traceCaptureDeviceInfo) Q_UNUSED(traceScreenInfo) + if (!worker) + return 0; + stopResultTimer(); // Dictionary must be completed before the arc addition can begin @@ -606,30 +1049,34 @@ public: recognitionTask.reset(); } - const int dpi = traceCaptureDeviceInfo.value("dpi", 96).toInt(); - static const int INSTANT_GESTURE_WIDTH_THRESHOLD_MM = 25; - static const int INSTANT_GESTURE_HEIGHT_THRESHOLD_MM = 25; - instantGestureSettings.widthThreshold = INSTANT_GESTURE_WIDTH_THRESHOLD_MM / 25.4 * dpi; - instantGestureSettings.heightThreshold = INSTANT_GESTURE_HEIGHT_THRESHOLD_MM / 25.4 * dpi; +#ifdef QT_VIRTUALKEYBOARD_RECORD_TRACE_INPUT + if (!unipenTrace) + unipenTrace.reset(new UnipenTrace(traceCaptureDeviceInfo, traceScreenInfo)); +#endif + + setContext(patternRecognitionMode, traceCaptureDeviceInfo, traceScreenInfo); DECUMA_STATUS status; if (!arcAdditionStarted) { - status = decumaBeginArcAddition(decumaSession); + status = DECUMA_API(BeginArcAddition)(decumaSession); Q_ASSERT(status == decumaNoError); arcAdditionStarted = true; } DECUMA_UINT32 arcID = (DECUMA_UINT32)traceId; - status = decumaStartNewArc(decumaSession, arcID); + status = DECUMA_API(StartNewArc)(decumaSession, arcID); Q_ASSERT(status == decumaNoError); if (status != decumaNoError) { - decumaEndArcAddition(decumaSession); + DECUMA_API(EndArcAddition)(decumaSession); arcAdditionStarted = false; return NULL; } Trace *trace = new Trace(); +#ifdef QT_VIRTUALKEYBOARD_RECORD_TRACE_INPUT + trace->setChannels(QStringList("t")); +#endif traceList.append(trace); return trace; @@ -638,7 +1085,7 @@ public: void traceEnd(Trace *trace) { if (trace->isCanceled()) { - decumaCancelArc(decumaSession, trace->traceId()); + DECUMA_API(CancelArc)(decumaSession, trace->traceId()); traceList.removeOne(trace); delete trace; } else { @@ -646,10 +1093,16 @@ public: } if (!traceList.isEmpty()) { Q_ASSERT(arcAdditionStarted); - if (countActiveTraces() == 0) + if (countActiveTraces() == 0) { restartRecognition(); + if (cjk) { + // For some reason gestures don't seem to work in CJK mode + // Using our own gesture recognizer as fallback + handleGesture(); + } + } } else if (arcAdditionStarted) { - decumaEndArcAddition(decumaSession); + DECUMA_API(EndArcAddition)(decumaSession); arcAdditionStarted = false; } } @@ -675,17 +1128,26 @@ public: Q_ASSERT(decumaSession != 0); const QVariantList points = trace->points(); + Q_ASSERT(!points.isEmpty()); DECUMA_UINT32 arcID = (DECUMA_UINT32)trace->traceId(); DECUMA_STATUS status; for (const QVariant &p : points) { const QPoint pt(p.toPointF().toPoint()); - status = decumaAddPoint(decumaSession, (DECUMA_COORD)pt.x(),(DECUMA_COORD)pt.y(), arcID); - Q_ASSERT(status == decumaNoError); + status = DECUMA_API(AddPoint)(decumaSession, (DECUMA_COORD)pt.x(),(DECUMA_COORD)pt.y(), arcID); + if (status != decumaNoError) { + VIRTUALKEYBOARD_DEBUG() << "decumaAddPoint failed" << status; + finishRecognition(); + return; + } } - status = decumaCommitArc(decumaSession, arcID); - Q_ASSERT(status == decumaNoError); + status = DECUMA_API(CommitArc)(decumaSession, arcID); + if (status != decumaNoError) { + VIRTUALKEYBOARD_DEBUG() << "decumaCommitArc failed" << status; + finishRecognition(); + return; + } } void noteSelected(int index) @@ -696,7 +1158,7 @@ public: VIRTUALKEYBOARD_DEBUG() << "T9WriteInputMethodPrivate::noteSelected():" << index; Q_ASSERT(index >= 0 && index < wordCandidatesHwrResultIndex.length()); int resultIndex = wordCandidatesHwrResultIndex[index]; - DECUMA_STATUS status = decumaNoteSelectedCandidate(decumaSession, resultIndex); + DECUMA_STATUS status = DECUMA_API(NoteSelectedCandidate)(decumaSession, resultIndex); Q_UNUSED(status) Q_ASSERT(status == decumaNoError); } @@ -723,6 +1185,8 @@ public: bool finishRecognition(bool emitSelectionListChanged = true) { VIRTUALKEYBOARD_DEBUG() << "T9WriteInputMethodPrivate::finishRecognition()"; + if (!worker) + return false; bool result = !traceList.isEmpty(); @@ -742,7 +1206,7 @@ public: } if (arcAdditionStarted) { - decumaEndArcAddition(decumaSession); + DECUMA_API(EndArcAddition)(decumaSession); arcAdditionStarted = false; } @@ -762,11 +1226,18 @@ public: scrResult.clear(); caseFormatter.clear(); +#ifdef QT_VIRTUALKEYBOARD_RECORD_TRACE_INPUT + unipenTrace.reset(); +#endif + return result; } bool select(int index = -1) { + if (!worker) + return false; + if (sessionSettings.recognitionMode == mcrMode && wordCandidates.isEmpty()) { finishRecognition(); return false; @@ -783,6 +1254,25 @@ public: index = index >= 0 ? index : activeWordIndex; noteSelected(index); QString finalWord = wordCandidates.at(index); + +#ifdef QT_VIRTUALKEYBOARD_RECORD_TRACE_INPUT + // Record trace + if (unipenTrace) { + if (finalWord.length() == 1) { + // In recording mode, the text case must match with the current text case + QChar ch(finalWord.at(0)); + if (!ch.isLetter() || (ch.isUpper() == (textCase == InputEngine::Upper))) { + QStringList homeLocations = QStandardPaths::standardLocations(QStandardPaths::HomeLocation); + if (!homeLocations.isEmpty()) { + unipenTrace->setDirectory(QStringLiteral("%1/%2").arg(homeLocations.at(0)).arg("VIRTUAL_KEYBOARD_TRACES")); + unipenTrace->record(traceList); + unipenTrace->save(ch.unicode(), 100); + } + } + } + } +#endif + finishRecognition(); q->inputContext()->commit(finalWord); } else if (sessionSettings.recognitionMode == scrMode) { @@ -865,8 +1355,13 @@ public: bool wordCandidatesChanged = wordCandidates != newWordCandidates; +#ifndef QT_VIRTUALKEYBOARD_RECORD_TRACE_INPUT // Delete trace history - if (sessionSettings.recognitionMode == mcrMode && !symbolStrokes.isEmpty()) { + const InputEngine::InputMode inputMode = q->inputEngine()->inputMode(); + if (sessionSettings.recognitionMode == mcrMode && !symbolStrokes.isEmpty() && + inputMode != InputEngine::ChineseHandwriting && + inputMode != InputEngine::JapaneseHandwriting && + inputMode != InputEngine::KoreanHandwriting) { int activeTraces = symbolStrokes.at(symbolStrokes.count() - 1).toInt(); if (symbolStrokes.count() > 1) activeTraces += symbolStrokes.at(symbolStrokes.count() - 2).toInt(); @@ -874,7 +1369,14 @@ public: delete traceList.takeFirst(); } - // Look for a gesture at the end of first result + // Enforce hard limit for number of traces + if (traceList.count() >= traceListHardLimit) { + VIRTUALKEYBOARD_DEBUG() << "T9WriteInputMethodPrivate::processResult(): Clearing traces (hard limit):" << traceList.count(); + clearTraces(); + } +#endif + + // Find a gesture at the end of the first result if (!gesture.isEmpty()) { DECUMA_UNICODE gestureSymbol = gesture.at(0).unicode(); @@ -892,8 +1394,8 @@ public: break; default: - finishRecognition(); ic->commit(ic->preeditText()); + finishRecognition(); break; } @@ -920,6 +1422,87 @@ public: } } + bool handleGesture() + { + if (countActiveTraces() > 0) + return false; + + QVariantMap gesture(gestureRecognizer.recognize(traceList.mid(traceList.length() - 1, 1))); + if (gesture.isEmpty()) + return false; + + VIRTUALKEYBOARD_DEBUG() << "T9WriteInputMethodPrivate::handleGesture():" << gesture; + + if (gesture[QLatin1String("type")].toString() == QLatin1String("swipe")) { + + static const int SWIPE_ANGLE_THRESHOLD = 15; // degrees +- + + qreal swipeLength = gesture[QLatin1String("length")].toReal(); + if (swipeLength >= instantGestureSettings.widthThreshold) { + + Q_Q(T9WriteInputMethod); + InputContext *ic = q->inputContext(); + if (!ic) + return false; + + qreal swipeAngle = gesture[QLatin1String("angle_degrees")].toReal(); + int swipeTouchCount = gesture[QLatin1String("touch_count")].toInt(); + + // Swipe left + if (swipeAngle <= 180 + SWIPE_ANGLE_THRESHOLD && swipeAngle >= 180 - SWIPE_ANGLE_THRESHOLD) { + if (swipeTouchCount == 1) { + // Single swipe: backspace + ic->inputEngine()->virtualKeyClick(Qt::Key_Backspace, QString(), Qt::NoModifier); + return true; + } + return false; + } + + // Swipe right + const InputEngine::InputMode inputMode = q->inputEngine()->inputMode(); + if (inputMode != InputEngine::ChineseHandwriting && + inputMode != InputEngine::JapaneseHandwriting && + inputMode != InputEngine::KoreanHandwriting) { + if (swipeAngle <= SWIPE_ANGLE_THRESHOLD || swipeAngle >= 360 - SWIPE_ANGLE_THRESHOLD) { + if (swipeTouchCount == 1) { + // Single swipe: space + ic->inputEngine()->virtualKeyClick(Qt::Key_Space, QString(" "), Qt::NoModifier); + return true; + } + return false; + } + } + + // Swipe up + if (swipeAngle <= 270 + SWIPE_ANGLE_THRESHOLD && swipeAngle >= 270 - SWIPE_ANGLE_THRESHOLD) { + if (swipeTouchCount == 1) { + // Single swipe: toggle input mode + select(); + if (!(ic->inputMethodHints() & (Qt::ImhDialableCharactersOnly | Qt::ImhFormattedNumbersOnly | Qt::ImhDigitsOnly))) { + QList<int> inputModes = ic->inputEngine()->inputModes(); + // Filter out duplicate numeric mode (in favor of Numeric) + int indexOfNumericInputMode = inputModes.indexOf(InputEngine::Numeric); + int indexOfDialableInputMode = inputModes.indexOf(InputEngine::Dialable); + if (indexOfNumericInputMode != -1 && indexOfDialableInputMode != -1) + inputModes.removeAt(inputMode != InputEngine::Dialable ? + indexOfDialableInputMode : + indexOfNumericInputMode); + if (inputModes.count() > 1) { + int inputModeIndex = inputModes.indexOf((int)inputMode) + 1; + if (inputModeIndex >= inputModes.count()) + inputModeIndex = 0; + ic->inputEngine()->setInputMode((InputEngine::InputMode)inputModes.at(inputModeIndex)); + } + } + return true; + } + } + } + } + + return false; + } + bool isValidInputChar(const QChar &c) const { if (c.isLetterOrNumber()) @@ -948,17 +1531,23 @@ public: T9WriteInputMethod *q_ptr; static const DECUMA_MEM_FUNCTIONS memFuncs; + bool cjk; + EngineMode engineMode; + QByteArray currentContext; DECUMA_SESSION_SETTINGS sessionSettings; DECUMA_INSTANT_GESTURE_SETTINGS instantGestureSettings; + QString defaultHwrDbPath; + QString defaultDictionaryDbPath; QFile hwrDbFile; QVector<DECUMA_UINT32> languageCategories; QVector<DECUMA_UINT32> symbolCategories; QScopedPointer<T9WriteWorker> worker; QList<Trace *> traceList; + int traceListHardLimit; QMutex dictionaryLock; QString dictionaryFileName; - void *convertedDictionary; - void *attachedDictionary; + QSharedPointer<T9WriteDictionary> loadedDictionary; + QSharedPointer<T9WriteDictionary> attachedDictionary; QSharedPointer<T9WriteDictionaryTask> dictionaryTask; QSharedPointer<T9WriteRecognitionTask> recognitionTask; int resultId; @@ -974,6 +1563,10 @@ public: bool ignoreUpdate; InputEngine::TextCase textCase; T9WriteCaseFormatter caseFormatter; + HandwritingGestureRecognizer gestureRecognizer; +#ifdef QT_VIRTUALKEYBOARD_RECORD_TRACE_INPUT + QScopedPointer<UnipenTrace> unipenTrace; +#endif }; const DECUMA_MEM_FUNCTIONS T9WriteInputMethodPrivate::memFuncs = { @@ -991,8 +1584,6 @@ const DECUMA_MEM_FUNCTIONS T9WriteInputMethodPrivate::memFuncs = { T9WriteInputMethod::T9WriteInputMethod(QObject *parent) : AbstractInputMethod(*new T9WriteInputMethodPrivate(this), parent) { - Q_D(T9WriteInputMethod); - d->initEngine(); } T9WriteInputMethod::~T9WriteInputMethod() @@ -1003,18 +1594,94 @@ T9WriteInputMethod::~T9WriteInputMethod() QList<InputEngine::InputMode> T9WriteInputMethod::inputModes(const QString &locale) { - Q_UNUSED(locale) - return QList<InputEngine::InputMode>() - << InputEngine::Latin - << InputEngine::Numeric - << InputEngine::Dialable; + Q_D(T9WriteInputMethod); + QList<InputEngine::InputMode> availableInputModes; + const Qt::InputMethodHints inputMethodHints(inputContext()->inputMethodHints()); + const QLocale loc(locale); + T9WriteInputMethodPrivate::EngineMode mode = d->mapLocaleToEngineMode(loc); + + // Add primary input mode + switch (mode) { +#ifdef HAVE_T9WRITE_ALPHABETIC + case T9WriteInputMethodPrivate::Alphabetic: + if (d->findHwrDb(T9WriteInputMethodPrivate::Alphabetic, d->defaultHwrDbPath).isEmpty()) + return availableInputModes; + if (!(inputMethodHints & (Qt::ImhDialableCharactersOnly | Qt::ImhFormattedNumbersOnly | Qt::ImhDigitsOnly | Qt::ImhLatinOnly))) { + switch (loc.script()) { + case QLocale::GreekScript: + availableInputModes.append(InputEngine::Greek); + break; + case QLocale::CyrillicScript: + availableInputModes.append(InputEngine::Cyrillic); + break; + default: + break; + } + availableInputModes.append(InputEngine::Latin); + } + break; + case T9WriteInputMethodPrivate::Arabic: + if (d->findHwrDb(T9WriteInputMethodPrivate::Arabic, d->defaultHwrDbPath).isEmpty()) + return availableInputModes; + if (!(inputMethodHints & (Qt::ImhDialableCharactersOnly | Qt::ImhFormattedNumbersOnly | Qt::ImhDigitsOnly | Qt::ImhLatinOnly))) + availableInputModes.append(InputEngine::Arabic); + break; + case T9WriteInputMethodPrivate::Hebrew: + if (d->findHwrDb(T9WriteInputMethodPrivate::Hebrew, d->defaultHwrDbPath).isEmpty()) + return availableInputModes; + if (!(inputMethodHints & (Qt::ImhDialableCharactersOnly | Qt::ImhFormattedNumbersOnly | Qt::ImhDigitsOnly | Qt::ImhLatinOnly))) + availableInputModes.append(InputEngine::Hebrew); + break; +#endif +#ifdef HAVE_T9WRITE_CJK + case T9WriteInputMethodPrivate::SimplifiedChinese: + case T9WriteInputMethodPrivate::TraditionalChinese: + case T9WriteInputMethodPrivate::HongKongChinese: + if (d->findHwrDb(mode, d->defaultHwrDbPath).isEmpty()) + return availableInputModes; + if (!(inputMethodHints & (Qt::ImhDialableCharactersOnly | Qt::ImhFormattedNumbersOnly | Qt::ImhDigitsOnly | Qt::ImhLatinOnly))) + availableInputModes.append(InputEngine::ChineseHandwriting); + break; + case T9WriteInputMethodPrivate::Japanese: + if (d->findHwrDb(T9WriteInputMethodPrivate::Japanese, d->defaultHwrDbPath).isEmpty()) + return availableInputModes; + if (!(inputMethodHints & (Qt::ImhDialableCharactersOnly | Qt::ImhFormattedNumbersOnly | Qt::ImhDigitsOnly | Qt::ImhLatinOnly))) + availableInputModes.append(InputEngine::JapaneseHandwriting); + break; + case T9WriteInputMethodPrivate::Korean: + if (d->findHwrDb(T9WriteInputMethodPrivate::Korean, d->defaultHwrDbPath).isEmpty()) + return availableInputModes; + if (!(inputMethodHints & (Qt::ImhDialableCharactersOnly | Qt::ImhFormattedNumbersOnly | Qt::ImhDigitsOnly | Qt::ImhLatinOnly))) + availableInputModes.append(InputEngine::KoreanHandwriting); + break; +#endif + default: + return availableInputModes; + } + + // Add exclusive input modes + if (inputMethodHints.testFlag(Qt::ImhDialableCharactersOnly) || inputMethodHints.testFlag(Qt::ImhDigitsOnly)) { + availableInputModes.append(InputEngine::Dialable); + } else if (inputMethodHints.testFlag(Qt::ImhFormattedNumbersOnly)) { + availableInputModes.append(InputEngine::Numeric); + } else if (inputMethodHints.testFlag(Qt::ImhLatinOnly)) { + availableInputModes.append(InputEngine::Latin); + } else { + // Add other input modes + Q_ASSERT(!availableInputModes.isEmpty()); + if (!availableInputModes.contains(InputEngine::Latin)) + availableInputModes.append(InputEngine::Latin); + availableInputModes.append(InputEngine::Numeric); + } + + return availableInputModes; } bool T9WriteInputMethod::setInputMode(const QString &locale, InputEngine::InputMode inputMode) { Q_D(T9WriteInputMethod); d->select(); - return d->setInputMode(locale, inputMode); + return d->setInputMode(QLocale(locale), inputMode); } bool T9WriteInputMethod::setTextCase(InputEngine::TextCase textCase) @@ -1045,6 +1712,13 @@ bool T9WriteInputMethod::keyEvent(Qt::Key key, const QString &text, Qt::Keyboard if (preeditText.length() > 1) { preeditText.chop(1); ic->setPreeditText(preeditText); + // WA: T9Write CJK may crash in some cases with long stringStart. + // Therefore we commit the current input and finish the recognition. + if (d->cjk) { + ic->commit(); + d->finishRecognition(); + return true; + } d->caseFormatter.ensureLength(preeditText.length(), d->textCase); T9WriteCaseFormatter caseFormatter(d->caseFormatter); d->finishRecognition(false); @@ -1182,11 +1856,15 @@ bool T9WriteInputMethod::reselect(int cursorPosition, const InputEngine::Reselec if (!ic) return false; + const InputEngine::InputMode inputMode = inputEngine()->inputMode(); + const int maxLength = (inputMode == InputEngine::ChineseHandwriting || + inputMode == InputEngine::JapaneseHandwriting || + inputMode == InputEngine::KoreanHandwriting) ? 0 : 32; const QString surroundingText = ic->surroundingText(); int replaceFrom = 0; if (reselectFlags.testFlag(InputEngine::WordBeforeCursor)) { - for (int i = cursorPosition - 1; i >= 0; --i) { + for (int i = cursorPosition - 1; i >= 0 && d->stringStart.length() < maxLength; --i) { QChar c = surroundingText.at(i); if (!d->isValidInputChar(c)) break; @@ -1206,7 +1884,7 @@ bool T9WriteInputMethod::reselect(int cursorPosition, const InputEngine::Reselec } if (reselectFlags.testFlag(InputEngine::WordAfterCursor)) { - for (int i = cursorPosition; i < surroundingText.length(); ++i) { + for (int i = cursorPosition; i < surroundingText.length() && d->stringStart.length() < maxLength; ++i) { QChar c = surroundingText.at(i); if (!d->isValidInputChar(c)) break; @@ -1224,7 +1902,7 @@ bool T9WriteInputMethod::reselect(int cursorPosition, const InputEngine::Reselec if (d->stringStart.isEmpty()) return false; - if (reselectFlags.testFlag(InputEngine::WordAtCursor) && replaceFrom == -d->stringStart.length()) { + if (reselectFlags.testFlag(InputEngine::WordAtCursor) && replaceFrom == -d->stringStart.length() && d->stringStart.length() < maxLength) { d->stringStart.clear(); return false; } @@ -1258,35 +1936,41 @@ void T9WriteInputMethod::timerEvent(QTimerEvent *timerEvent) if (timerId == d->resultTimer) { if (d->sessionSettings.recognitionMode == mcrMode) { d->stopResultTimer(); - d->clearTraces(); +#ifndef QT_VIRTUALKEYBOARD_RECORD_TRACE_INPUT + const InputEngine::InputMode inputMode = inputEngine()->inputMode(); + if (inputMode != InputEngine::ChineseHandwriting && + inputMode != InputEngine::JapaneseHandwriting && + inputMode != InputEngine::KoreanHandwriting) { + d->clearTraces(); + } +#endif } else if (d->sessionSettings.recognitionMode == scrMode) { d->select(); } } } -void T9WriteInputMethod::dictionaryLoadCompleted(const QString &fileUri, void *dictionary) +void T9WriteInputMethod::dictionaryLoadCompleted(QSharedPointer<T9WriteDictionary> dictionary) { Q_D(T9WriteInputMethod); // Note: This method is called in worker thread context QMutexLocker dictionaryGuard(&d->dictionaryLock); - VIRTUALKEYBOARD_DEBUG() << "T9WriteInputMethod::dictionaryLoadCompleted():" << fileUri << dictionary; - if (!dictionary) return; + VIRTUALKEYBOARD_DEBUG() << "T9WriteInputMethod::dictionaryLoadCompleted():" + << dictionary->fileName() << dictionary->data() << dictionary->size(); + InputContext *ic = inputContext(); - if (ic && fileUri == d->dictionaryFileName) { - d->convertedDictionary = dictionary; + if (ic && dictionary->fileName() == d->dictionaryFileName) { + d->loadedDictionary = dictionary; if (d->sessionSettings.recognitionMode == mcrMode && !ic->inputMethodHints().testFlag(Qt::ImhNoPredictiveText) && !d->attachedDictionary) { - d->attachDictionary(d->convertedDictionary); - d->attachedDictionary = d->convertedDictionary; + if (d->attachDictionary(d->loadedDictionary)) + d->attachedDictionary = d->loadedDictionary; } - } else { - d->destroyConvertedDictionary(&dictionary); } } @@ -1315,4 +1999,10 @@ void T9WriteInputMethod::resultsAvailable(const QVariantList &resultList) d->resultsAvailable(resultList); } +void T9WriteInputMethod::recognitionError(int status) +{ + VIRTUALKEYBOARD_DEBUG() << "T9WriteInputMethod::recognitionError():" << status; + reset(); +} + } // namespace QtVirtualKeyboard diff --git a/src/virtualkeyboard/t9writeinputmethod.h b/src/virtualkeyboard/t9writeinputmethod.h index 9b87ebdf..173abd99 100644 --- a/src/virtualkeyboard/t9writeinputmethod.h +++ b/src/virtualkeyboard/t9writeinputmethod.h @@ -31,10 +31,12 @@ #define T9WRITEINPUTMETHOD_H #include "abstractinputmethod.h" +#include <QSharedPointer> namespace QtVirtualKeyboard { class T9WriteInputMethodPrivate; +class T9WriteDictionary; class T9WriteInputMethod : public AbstractInputMethod { @@ -70,8 +72,9 @@ protected: void timerEvent(QTimerEvent *timerEvent); protected slots: - void dictionaryLoadCompleted(const QString &fileUri, void *dictionary); + void dictionaryLoadCompleted(QSharedPointer<T9WriteDictionary> dictionary); void resultsAvailable(const QVariantList &resultList); + void recognitionError(int status); }; } diff --git a/src/virtualkeyboard/t9writeworker.cpp b/src/virtualkeyboard/t9writeworker.cpp index 2de62a0b..adbdcedb 100644 --- a/src/virtualkeyboard/t9writeworker.cpp +++ b/src/virtualkeyboard/t9writeworker.cpp @@ -58,10 +58,14 @@ void T9WriteTask::wait() \internal */ -T9WriteDictionaryTask::T9WriteDictionaryTask(const QString &fileUri, - const DECUMA_MEM_FUNCTIONS &memFuncs) : - fileUri(fileUri), - memFuncs(memFuncs) +T9WriteDictionaryTask::T9WriteDictionaryTask(QSharedPointer<T9WriteDictionary> dictionary, + const QString &dictionaryFileName, + bool convertDictionary, + const DECUMA_SRC_DICTIONARY_INFO &dictionaryInfo) : + dictionary(dictionary), + dictionaryFileName(dictionaryFileName), + convertDictionary(convertDictionary), + dictionaryInfo(dictionaryInfo) { } @@ -74,33 +78,19 @@ void T9WriteDictionaryTask::run() perf.start(); #endif - void *dictionary = 0; - - QFile dictionaryFile(fileUri); - if (dictionaryFile.open(QIODevice::ReadOnly)) { - uchar *dictionaryData = dictionaryFile.map(0, dictionaryFile.size(), QFile::NoOptions); - if (dictionaryData) { - - DECUMA_SRC_DICTIONARY_INFO dictionaryInfo; - memset(&dictionaryInfo, 0, sizeof(dictionaryInfo)); - dictionaryInfo.srcType = decumaXT9LDB; - DECUMA_UINT32 dictionarySize = 0; - DECUMA_STATUS status = decumaConvertDictionary(&dictionary, dictionaryData, dictionaryFile.size(), &dictionaryInfo, &dictionarySize, &memFuncs); - Q_UNUSED(status) - Q_ASSERT(status == decumaNoError); - dictionaryFile.unmap(dictionaryData); - } else { - qWarning() << "Could not map dictionary file" << fileUri; - } - } else { - qWarning() << "Could not open dictionary file" << fileUri; + bool result = false; + if (dictionary) { + result = dictionary->load(dictionaryFileName); + if (result && convertDictionary) + result = dictionary->convert(dictionaryInfo); } #ifdef QT_VIRTUALKEYBOARD_DEBUG VIRTUALKEYBOARD_DEBUG() << "T9WriteDictionaryTask::run(): time:" << perf.elapsed() << "ms"; #endif - emit completed(fileUri, dictionary); + if (result) + emit completed(dictionary); } /*! @@ -109,6 +99,7 @@ void T9WriteDictionaryTask::run() */ T9WriteRecognitionResult::T9WriteRecognitionResult(int id, int maxResults, int maxCharsPerWord) : + status(decumaNoError), numResults(0), instantGesture(0), id(id), @@ -176,16 +167,18 @@ void T9WriteRecognitionTask::run() perf.start(); #endif - DECUMA_STATUS status = decumaIndicateInstantGesture(decumaSession, &result->instantGesture, &instantGestureSettings); - Q_ASSERT(status == decumaNoError); + DECUMA_STATUS status; + if (!cjk) { + status = DECUMA_API(IndicateInstantGesture)(decumaSession, &result->instantGesture, &instantGestureSettings); + Q_ASSERT(status == decumaNoError); + } DECUMA_INTERRUPT_FUNCTIONS interruptFunctions; interruptFunctions.pShouldAbortRecognize = shouldAbortRecognize; interruptFunctions.pUserData = (void *)this; - status = decumaRecognize(decumaSession, result->results.data(), result->results.size(), &result->numResults, result->maxCharsPerWord, &recSettings, &interruptFunctions); - if (status == decumaAbortRecognitionUnsupported) - status = decumaRecognize(decumaSession, result->results.data(), result->results.size(), &result->numResults, result->maxCharsPerWord, &recSettings, NULL); - Q_ASSERT(status == decumaNoError); + result->status = DECUMA_API(Recognize)(decumaSession, result->results.data(), result->results.size(), &result->numResults, result->maxCharsPerWord, &recSettings, &interruptFunctions); + if (result->status == decumaAbortRecognitionUnsupported) + result->status = DECUMA_API(Recognize)(decumaSession, result->results.data(), result->results.size(), &result->numResults, result->maxCharsPerWord, &recSettings, NULL); QStringList resultList; QString gesture; @@ -261,6 +254,11 @@ void T9WriteRecognitionResultsTask::run() if (!result) return; + if (result->status != decumaNoError) { + emit recognitionError(result->status); + return; + } + QVariantList resultList; for (int i = 0; i < result->numResults; i++) { @@ -306,11 +304,12 @@ void T9WriteRecognitionResultsTask::run() \internal */ -T9WriteWorker::T9WriteWorker(DECUMA_SESSION *decumaSession, QObject *parent) : +T9WriteWorker::T9WriteWorker(DECUMA_SESSION *decumaSession, const bool cjk, QObject *parent) : QThread(parent), taskSema(), taskLock(), - decumaSession(decumaSession) + decumaSession(decumaSession), + cjk(cjk) { abort = false; } @@ -369,6 +368,7 @@ void T9WriteWorker::run() } if (currentTask) { currentTask->decumaSession = decumaSession; + currentTask->cjk = cjk; currentTask->run(); currentTask->runSema.release(); } diff --git a/src/virtualkeyboard/t9writeworker.h b/src/virtualkeyboard/t9writeworker.h index 0f130acb..437a84f5 100644 --- a/src/virtualkeyboard/t9writeworker.h +++ b/src/virtualkeyboard/t9writeworker.h @@ -41,7 +41,8 @@ #include <QMap> #include <QVector> -#include "decuma_hwr.h" +#include "t9write.h" +#include "t9writedictionary.h" namespace QtVirtualKeyboard { @@ -59,6 +60,7 @@ public: protected: DECUMA_SESSION *decumaSession; + bool cjk; private: QSemaphore runSema; @@ -68,16 +70,20 @@ class T9WriteDictionaryTask : public T9WriteTask { Q_OBJECT public: - explicit T9WriteDictionaryTask(const QString &fileUri, - const DECUMA_MEM_FUNCTIONS &memFuncs); + explicit T9WriteDictionaryTask(QSharedPointer<T9WriteDictionary> dictionary, + const QString &dictionaryFileName, + bool convertDictionary, + const DECUMA_SRC_DICTIONARY_INFO &dictionaryInfo); void run(); - const QString fileUri; - const DECUMA_MEM_FUNCTIONS &memFuncs; + QSharedPointer<T9WriteDictionary> dictionary; + const QString dictionaryFileName; + bool convertDictionary; + const DECUMA_SRC_DICTIONARY_INFO dictionaryInfo; signals: - void completed(const QString &fileUri, void *dictionary); + void completed(QSharedPointer<T9WriteDictionary> dictionary); }; class T9WriteRecognitionResult @@ -87,12 +93,14 @@ class T9WriteRecognitionResult public: explicit T9WriteRecognitionResult(int id, int maxResults, int maxCharsPerWord); + DECUMA_STATUS status; QVector<DECUMA_HWR_RESULT> results; DECUMA_UINT16 numResults; int instantGesture; const int id; const int maxResults; const int maxCharsPerWord; + private: QVector<DECUMA_UNICODE> _chars; QVector<DECUMA_INT16> _symbolChars; @@ -135,6 +143,7 @@ public: signals: void resultsAvailable(const QVariantList &resultList); + void recognitionError(int status); private: QSharedPointer<T9WriteRecognitionResult> result; @@ -144,7 +153,7 @@ class T9WriteWorker : public QThread { Q_OBJECT public: - explicit T9WriteWorker(DECUMA_SESSION *decumaSession, QObject *parent = 0); + explicit T9WriteWorker(DECUMA_SESSION *decumaSession, const bool cjk, QObject *parent = 0); ~T9WriteWorker(); void addTask(QSharedPointer<T9WriteTask> task); @@ -176,6 +185,7 @@ private: QMutex taskLock; DECUMA_SESSION *decumaSession; QBasicAtomicInt abort; + const bool cjk; }; } // namespace QtVirtualKeyboard diff --git a/src/virtualkeyboard/unipentrace.cpp b/src/virtualkeyboard/unipentrace.cpp new file mode 100644 index 00000000..74c1b23e --- /dev/null +++ b/src/virtualkeyboard/unipentrace.cpp @@ -0,0 +1,129 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "unipentrace.h" +#include <QRectF> +#include <QDir> +#include <QFile> +#include <QDebug> + +namespace QtVirtualKeyboard { + +UnipenTrace::UnipenTrace(const QVariantMap &traceCaptureDeviceInfo, + const QVariantMap &traceScreenInfo, + QObject *parent) : + QObject(parent) +{ + m_lines.append(QLatin1String(".VERSION 1.0")); + m_lines.append(QLatin1String(".HIERARCHY CHARACTER")); + m_lines.append(QLatin1String(".COORD X Y T")); + m_lines.append(QLatin1String(".SEGMENT CHARACTER")); + const QRectF boundingBox = traceScreenInfo["boundingBox"].toRectF(); + if (!boundingBox.isEmpty()) { + m_lines.append(QStringLiteral(".X_DIM %1").arg(qRound(boundingBox.right()))); + m_lines.append(QStringLiteral(".Y_DIM %1").arg(qRound(boundingBox.bottom()))); + } + bool ok = false; + int dpi = traceCaptureDeviceInfo["dpi"].toInt(&ok); + if (ok) { + m_lines.append(QStringLiteral(".X_POINTS_PER_INCH %1").arg(dpi)); + m_lines.append(QStringLiteral(".Y_POINTS_PER_INCH %1").arg(dpi)); + } + ok = false; + int sampleRate = traceCaptureDeviceInfo["sampleRate"].toInt(&ok); + if (ok) + m_lines.append(QStringLiteral(".POINTS_PER_SECOND %1").arg(sampleRate)); +} + +void UnipenTrace::record(const QList<Trace *> &traceList) +{ + qlonglong t0 = 0; + for (const Trace *trace : qAsConst(traceList)) { + const QVariantList &points = trace->points(); + const bool hasTime = trace->channels().contains("t"); + const QVariantList timeData = hasTime ? trace->channelData("t") : QVariantList(); + QVariantList::ConstIterator t = timeData.constBegin(); + if (t0 == 0 && hasTime) + t0 = t->toLongLong(); + + m_lines.append(QLatin1String(".PEN_DOWN")); + + for (const QVariant &point : points) { + const QPointF pt(point.toPointF()); + QString pointStr(QStringLiteral("%1 %2 ").arg(qRound(pt.x())).arg(qRound(pt.y()))); + if (hasTime) { + pointStr.append(QString::number(t->toLongLong() - t0)); + t++; + } else { + pointStr.append(QLatin1String("0")); + } + m_lines.append(pointStr); + } + + m_lines.append(QLatin1String(".PEN_UP")); + } +} + +void UnipenTrace::save(uint unicode, uint confidence) +{ + if (m_directory.isEmpty()) + return; + + QString fileName; + QDir fileDir(m_directory); + if (!fileDir.exists()) + fileDir.mkpath(m_directory); + if (fileDir.exists()) { + int fileIndex = 0; + do { + fileName = fileDir.absoluteFilePath(QStringLiteral("%1_%2_%3.txt").arg(unicode).arg(confidence, 3, 10, QLatin1Char('0')).arg(fileIndex++)); + } while (QFileInfo::exists(fileName)); + } + + QString dataStr(m_lines.join('\n')); + dataStr.append('\n'); + QFile file(fileName); + if (file.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)) { + file.write(dataStr.toUtf8().constData()); + } else { + qWarning() << "Cannot open file for writing" << fileName; + } +} + +QString UnipenTrace::directory() const +{ + return m_directory; +} + +void UnipenTrace::setDirectory(const QString &directory) +{ + m_directory = directory; +} + +} diff --git a/src/virtualkeyboard/unipentrace.h b/src/virtualkeyboard/unipentrace.h new file mode 100644 index 00000000..f7e182dd --- /dev/null +++ b/src/virtualkeyboard/unipentrace.h @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef UNIPENTRACE_H +#define UNIPENTRACE_H + +#include <QObject> +#include "trace.h" + +namespace QtVirtualKeyboard { + +class UnipenTrace : public QObject +{ + Q_OBJECT +public: + explicit UnipenTrace(const QVariantMap &traceCaptureDeviceInfo, const QVariantMap &traceScreenInfo, QObject *parent = 0); + + void record(const QList<Trace *> &traceList); + void save(uint unicode, uint confidence); + + QString directory() const; + void setDirectory(const QString &directory); + +private: + QStringList m_lines; + QString m_directory; +}; + +} // namespace QtVirtualKeyboard + +#endif // UNIPENTRACE_H diff --git a/src/virtualkeyboard/virtualkeyboard.pro b/src/virtualkeyboard/virtualkeyboard.pro index ca84cd27..2b2f2aac 100644 --- a/src/virtualkeyboard/virtualkeyboard.pro +++ b/src/virtualkeyboard/virtualkeyboard.pro @@ -34,7 +34,9 @@ SOURCES += platforminputcontext.cpp \ virtualkeyboardsettings.cpp \ trace.cpp \ desktopinputselectioncontrol.cpp \ - shadowinputcontext.cpp + shadowinputcontext.cpp \ + gesturerecognizer.cpp \ + handwritinggesturerecognizer.cpp HEADERS += platforminputcontext.h \ inputcontext.h \ @@ -55,21 +57,26 @@ HEADERS += platforminputcontext.h \ plugin.h \ trace.h \ desktopinputselectioncontrol.h \ - shadowinputcontext.h + shadowinputcontext.h \ + gesturerecognizer.h \ + handwritinggesturerecognizer.h RESOURCES += \ content/styles/default/default_style.qrc \ content/styles/retro/retro_style.qrc \ content/content.qrc +# Fallback for languages which don't have these special layouts +LAYOUT_FILES += \ + content/layouts/en_GB/dialpad.qml \ + content/layouts/en_GB/digits.qml \ + content/layouts/en_GB/numbers.qml contains(CONFIG, lang-en.*) { LAYOUT_FILES += \ content/layouts/en_GB/main.qml \ - content/layouts/en_GB/dialpad.qml \ - content/layouts/en_GB/digits.qml \ - content/layouts/en_GB/handwriting.qml \ - content/layouts/en_GB/numbers.qml \ content/layouts/en_GB/symbols.qml +t9write-alphabetic|lipi-toolkit: LAYOUT_FILES += \ + content/layouts/en_GB/handwriting.qml } contains(CONFIG, lang-ar.*) { LAYOUT_FILES += \ @@ -77,122 +84,197 @@ contains(CONFIG, lang-ar.*) { content/layouts/ar_AR/main.qml \ content/layouts/ar_AR/numbers.qml \ content/layouts/ar_AR/symbols.qml +t9write-alphabetic: LAYOUT_FILES += \ + content/layouts/ar_AR/handwriting.qml +} +contains(CONFIG, lang-bg.*) { + LAYOUT_FILES += \ + content/layouts/bg_BG/main.qml \ + content/layouts/bg_BG/symbols.qml +t9write-alphabetic: LAYOUT_FILES += \ + content/layouts/bg_BG/handwriting.qml +} +contains(CONFIG, lang-cs.*) { + LAYOUT_FILES += \ + content/layouts/cs_CZ/main.qml \ + content/layouts/cs_CZ/symbols.qml +t9write-alphabetic: LAYOUT_FILES += \ + content/layouts/cs_CZ/handwriting.qml } contains(CONFIG, lang-da.*) { LAYOUT_FILES += \ content/layouts/da_DK/main.qml \ content/layouts/da_DK/symbols.qml -t9write: LAYOUT_FILES += \ +t9write-alphabetic: LAYOUT_FILES += \ content/layouts/da_DK/handwriting.qml } contains(CONFIG, lang-de.*) { LAYOUT_FILES += \ content/layouts/de_DE/main.qml \ content/layouts/de_DE/symbols.qml -t9write: LAYOUT_FILES += \ +t9write-alphabetic: LAYOUT_FILES += \ content/layouts/de_DE/handwriting.qml } +contains(CONFIG, lang-el.*) { + LAYOUT_FILES += \ + content/layouts/el_GR/main.qml \ + content/layouts/el_GR/symbols.qml +t9write-alphabetic: LAYOUT_FILES += \ + content/layouts/el_GR/handwriting.qml +} contains(CONFIG, lang-es.*) { LAYOUT_FILES += \ content/layouts/es_ES/main.qml \ content/layouts/es_ES/symbols.qml -t9write: LAYOUT_FILES += \ +t9write-alphabetic: LAYOUT_FILES += \ content/layouts/es_ES/handwriting.qml } +contains(CONFIG, lang-et.*) { + LAYOUT_FILES += \ + content/layouts/et_EE/main.qml \ + content/layouts/et_EE/symbols.qml +t9write-alphabetic: LAYOUT_FILES += \ + content/layouts/et_EE/handwriting.qml +} contains(CONFIG, lang-fa.*) { LAYOUT_FILES += \ content/layouts/fa_FA/digits.qml \ content/layouts/fa_FA/main.qml \ content/layouts/fa_FA/numbers.qml \ content/layouts/fa_FA/symbols.qml +t9write-alphabetic: LAYOUT_FILES += \ + content/layouts/fa_FA/handwriting.qml } contains(CONFIG, lang-fi.*) { LAYOUT_FILES += \ content/layouts/fi_FI/main.qml \ content/layouts/fi_FI/symbols.qml -t9write: LAYOUT_FILES += \ +t9write-alphabetic: LAYOUT_FILES += \ content/layouts/fi_FI/handwriting.qml } contains(CONFIG, lang-fr.*) { LAYOUT_FILES += \ content/layouts/fr_FR/main.qml \ content/layouts/fr_FR/symbols.qml -t9write: LAYOUT_FILES += \ +t9write-alphabetic: LAYOUT_FILES += \ content/layouts/fr_FR/handwriting.qml } +contains(CONFIG, lang-he.*) { + LAYOUT_FILES += \ + content/layouts/he_IL/main.qml \ + content/layouts/he_IL/symbols.qml +t9write-alphabetic: LAYOUT_FILES += \ + content/layouts/he_IL/handwriting.qml +} contains(CONFIG, lang-hi.*) { LAYOUT_FILES += \ content/layouts/hi_IN/main.qml \ content/layouts/hi_IN/symbols.qml } +contains(CONFIG, lang-hr.*) { + LAYOUT_FILES += \ + content/layouts/hr_HR/main.qml \ + content/layouts/hr_HR/symbols.qml +t9write-alphabetic: LAYOUT_FILES += \ + content/layouts/hr_HR/handwriting.qml +} +contains(CONFIG, lang-hu.*) { + LAYOUT_FILES += \ + content/layouts/hu_HU/main.qml \ + content/layouts/hu_HU/symbols.qml +t9write-alphabetic: LAYOUT_FILES += \ + content/layouts/hu_HU/handwriting.qml +} contains(CONFIG, lang-it.*) { LAYOUT_FILES += \ content/layouts/it_IT/main.qml \ content/layouts/it_IT/symbols.qml -t9write: LAYOUT_FILES += \ +t9write-alphabetic: LAYOUT_FILES += \ content/layouts/it_IT/handwriting.qml } contains(CONFIG, lang-ja.*) { LAYOUT_FILES += \ content/layouts/ja_JP/main.qml \ content/layouts/ja_JP/symbols.qml +t9write-cjk: LAYOUT_FILES += \ + content/layouts/ja_JP/handwriting.qml } contains(CONFIG, lang-ko.*) { LAYOUT_FILES += \ content/layouts/ko_KR/main.qml \ content/layouts/ko_KR/symbols.qml +t9write-cjk: LAYOUT_FILES += \ + content/layouts/ko_KR/handwriting.qml } contains(CONFIG, lang-nb.*) { LAYOUT_FILES += \ content/layouts/nb_NO/main.qml \ content/layouts/nb_NO/symbols.qml -t9write: LAYOUT_FILES += \ +t9write-alphabetic: LAYOUT_FILES += \ content/layouts/nb_NO/handwriting.qml } +contains(CONFIG, lang-nl.*) { + LAYOUT_FILES += \ + content/layouts/nl_NL/main.qml \ + content/layouts/nl_NL/symbols.qml +t9write-alphabetic|lipi-toolkit: LAYOUT_FILES += \ + content/layouts/nl_NL/handwriting.qml +} contains(CONFIG, lang-pl.*) { LAYOUT_FILES += \ content/layouts/pl_PL/main.qml \ content/layouts/pl_PL/symbols.qml -t9write: LAYOUT_FILES += \ +t9write-alphabetic: LAYOUT_FILES += \ content/layouts/pl_PL/handwriting.qml } contains(CONFIG, lang-pt.*) { LAYOUT_FILES += \ content/layouts/pt_PT/main.qml \ content/layouts/pt_PT/symbols.qml -t9write: LAYOUT_FILES += \ +t9write-alphabetic: LAYOUT_FILES += \ content/layouts/pt_PT/handwriting.qml } contains(CONFIG, lang-ro.*) { LAYOUT_FILES += \ content/layouts/ro_RO/main.qml \ content/layouts/ro_RO/symbols.qml -t9write: LAYOUT_FILES += \ +t9write-alphabetic: LAYOUT_FILES += \ content/layouts/ro_RO/handwriting.qml } contains(CONFIG, lang-ru.*) { LAYOUT_FILES += \ content/layouts/ru_RU/main.qml \ content/layouts/ru_RU/symbols.qml -t9write: LAYOUT_FILES += \ +t9write-alphabetic: LAYOUT_FILES += \ content/layouts/ru_RU/handwriting.qml } +contains(CONFIG, lang-sr.*) { + LAYOUT_FILES += \ + content/layouts/sr_SP/main.qml \ + content/layouts/sr_SP/symbols.qml +t9write-alphabetic: LAYOUT_FILES += \ + content/layouts/sr_SP/handwriting.qml +} contains(CONFIG, lang-sv.*) { LAYOUT_FILES += \ content/layouts/sv_SE/main.qml \ content/layouts/sv_SE/symbols.qml -t9write: LAYOUT_FILES += \ +t9write-alphabetic: LAYOUT_FILES += \ content/layouts/sv_SE/handwriting.qml } contains(CONFIG, lang-zh(_CN)?) { LAYOUT_FILES += \ content/layouts/zh_CN/main.qml \ content/layouts/zh_CN/symbols.qml +t9write-cjk: LAYOUT_FILES += \ + content/layouts/zh_CN/handwriting.qml } contains(CONFIG, lang-zh(_TW)?) { LAYOUT_FILES += \ content/layouts/zh_TW/main.qml \ content/layouts/zh_TW/symbols.qml +t9write-cjk: LAYOUT_FILES += \ + content/layouts/zh_TW/handwriting.qml } retro-style { @@ -325,7 +407,6 @@ lipi-toolkit { -lltkutil$$qtPlatformTargetSuffix() win32: LIBS += Advapi32.lib else: QMAKE_USE += libdl - record-trace-input: DEFINES += QT_VIRTUALKEYBOARD_LIPI_RECORD_TRACE_INPUT ltk_projects.files = $$PWD/3rdparty/lipi-toolkit/projects ltk_projects.path = $$[QT_INSTALL_DATA]/qtvirtualkeyboard/lipi_toolkit INSTALLS += ltk_projects @@ -335,18 +416,47 @@ lipi-toolkit { t9write { include(3rdparty/t9write/t9write-build.pri) equals(T9WRITE_FOUND, 0): \ - error("T9Write SDK could not be found. Please make sure you have extracted" \ - "the contents of the T9Write SDK to $$PWD/3rdparty/t9write") + error("T9Write SDK could not be found. For more information, see" \ + "the documentation in Building Qt Virtual Keyboard") SOURCES += \ t9writeinputmethod.cpp \ - t9writeworker.cpp + t9writeworker.cpp \ + t9writedictionary.cpp HEADERS += \ t9writeinputmethod.h \ - t9writeworker.h + t9writeworker.h \ + t9writedictionary.h \ + t9write.h DEFINES += HAVE_T9WRITE QMAKE_USE += t9write_db INCLUDEPATH += $$T9WRITE_INCLUDE_DIRS - LIBS += $$T9WRITE_ALPHABETIC_LIBS + t9write-alphabetic { + LIBS += $$T9WRITE_ALPHABETIC_LIBS + DEFINES += HAVE_T9WRITE_ALPHABETIC + !isEmpty(T9WRITE_ALPHABETIC_BINS) { + t9write_alphabetic_bins.files = $$T9WRITE_ALPHABETIC_BINS + t9write_alphabetic_bins.path = $$[QT_INSTALL_BINS] + INSTALLS += t9write_alphabetic_bins + !prefix_build: COPIES += t9write_alphabetic_bins + } + } + t9write-cjk { + LIBS += $$T9WRITE_CJK_LIBS + DEFINES += HAVE_T9WRITE_CJK + !isEmpty(T9WRITE_CJK_BINS) { + t9write_cjk_bins.files = $$T9WRITE_CJK_BINS + t9write_cjk_bins.path = $$[QT_INSTALL_BINS] + INSTALLS += t9write_cjk_bins + !prefix_build: COPIES += t9write_cjk_bins + } + } + DEFINES += QT_VIRTUALKEYBOARD_DEBUG +} + +record-trace-input { + SOURCES += unipentrace.cpp + HEADERS += unipentrace.h + DEFINES += QT_VIRTUALKEYBOARD_RECORD_TRACE_INPUT } arrow-key-navigation: DEFINES += QT_VIRTUALKEYBOARD_ARROW_KEY_NAVIGATION diff --git a/tests/auto/auto.pro b/tests/auto/auto.pro index 3a406734..6b71c159 100644 --- a/tests/auto/auto.pro +++ b/tests/auto/auto.pro @@ -6,5 +6,3 @@ SUBDIRS += \ layoutfilesystem \ layoutresources \ -# QTBUG-60268 -boot2qt: SUBDIRS = "" diff --git a/tests/auto/inputpanel/BLACKLIST b/tests/auto/inputpanel/BLACKLIST index e69de29b..b814578b 100644 --- a/tests/auto/inputpanel/BLACKLIST +++ b/tests/auto/inputpanel/BLACKLIST @@ -0,0 +1,6 @@ +# QTBUG-61279 +# Test fails if hunspell support is enabled in qtvirtualkeyboard +# and hunspell-en-gb is installed to the system +[tst_plugin::test_wclAutoCommitWordSetting:row 0] +b2qt + diff --git a/tests/auto/inputpanel/data/inputpanel/handwriting.js b/tests/auto/inputpanel/data/inputpanel/handwriting.js index 36b67240..a4c4ec1a 100644 --- a/tests/auto/inputpanel/data/inputpanel/handwriting.js +++ b/tests/auto/inputpanel/data/inputpanel/handwriting.js @@ -30,25 +30,50 @@ .pragma library .import "unipen_data.js" as UnipenData +.import "unipen_data_simp_chinese.js" as UnipenDataSimpChinese +.import "unipen_data_trad_chinese.js" as UnipenDataTradChinese +.import "unipen_data_japanese.js" as UnipenDataJapanese +.import "unipen_data_korean.js" as UnipenDataKorean +.import "unipen_data_greek.js" as UnipenDataGreek +.import "unipen_data_cyrillic.js" as UnipenDataCyrillic +.import "unipen_data_arabic.js" as UnipenDataArabic +.import "unipen_data_hebrew.js" as UnipenDataHebrew function emulate(testcase, hwrInputArea, ch, instant) { var chKey = (((typeof ch == "number") ? ch : ch.charCodeAt(0)) + 0x100000000).toString(16).substr(1) while (chKey.length > 4 && chKey[0] === '0') chKey = chKey.substring(1) chKey = "0x" + chKey - if (!UnipenData.unipenData.hasOwnProperty(chKey)) + var unipenData + if (UnipenData.unipenData.hasOwnProperty(chKey)) + unipenData = UnipenData + else if (UnipenDataSimpChinese.unipenData.hasOwnProperty(chKey)) + unipenData = UnipenDataSimpChinese + else if (UnipenDataTradChinese.unipenData.hasOwnProperty(chKey)) + unipenData = UnipenDataTradChinese + else if (UnipenDataJapanese.unipenData.hasOwnProperty(chKey)) + unipenData = UnipenDataJapanese + else if (UnipenDataKorean.unipenData.hasOwnProperty(chKey)) + unipenData = UnipenDataKorean + else if (UnipenDataGreek.unipenData.hasOwnProperty(chKey)) + unipenData = UnipenDataGreek + else if (UnipenDataCyrillic.unipenData.hasOwnProperty(chKey)) + unipenData = UnipenDataCyrillic + else if (UnipenDataArabic.unipenData.hasOwnProperty(chKey)) + unipenData = UnipenDataArabic + else if (UnipenDataHebrew.unipenData.hasOwnProperty(chKey)) + unipenData = UnipenDataHebrew + else return false - var chData = UnipenData.unipenData[chKey] + var chData = unipenData.unipenData[chKey] var scale = Math.min(hwrInputArea.width / chData[".X_DIM"], hwrInputArea.height / chData[".Y_DIM"]) - var strokes = UnipenData.unipenData[chKey][".PEN"] - var boundingBox = calculateBoundingBox(strokes) - var boxOffset = Qt.point(-boundingBox.x * scale + (hwrInputArea.width - boundingBox.width * scale) / 2, -boundingBox.y * scale + (hwrInputArea.height - boundingBox.height * scale) / 2) + var strokes = unipenData.unipenData[chKey][".PEN"] var t = 0 for (var strokeIndex = 0; strokeIndex < strokes.length; strokeIndex++) { var stroke = strokes[strokeIndex] for (var i = 0; i < stroke.length; i++) { var strokeData = stroke[i] - var pt = Qt.point(strokeData[0] * scale + boxOffset.x, strokeData[1] * scale + boxOffset.y) + var pt = Qt.point(strokeData[0] * scale, strokeData[1] * scale) if (instant) t = strokeData[2] if (i == 0) { @@ -64,29 +89,3 @@ function emulate(testcase, hwrInputArea, ch, instant) { } return true } - -function calculateBoundingBox(unipenStrokes) { - var bboxLeft = 2147483647 - var bboxRight = -2147483647 - var bboxTop = 2147483647 - var bboxBottom = -2147483647 - for (var strokeIndex = 0; strokeIndex < unipenStrokes.length; strokeIndex++) { - var stroke = unipenStrokes[strokeIndex] - for (var i = 0; i < stroke.length; i++) { - var strokeData = stroke[i] - var x = strokeData[0] - if (bboxLeft > x) - bboxLeft = x - if (bboxRight < x) - bboxRight = x - var y = strokeData[1] - if (bboxTop > y) - bboxTop = y - if (bboxBottom < y) - bboxBottom = y - } - } - if (bboxLeft > bboxRight || bboxTop > bboxBottom) - return Qt.rect(0, 0, 0, 0) - return Qt.rect(bboxLeft, bboxTop, bboxRight - bboxLeft, bboxBottom -bboxTop) -} diff --git a/tests/auto/inputpanel/data/inputpanel/inputpanel.qml b/tests/auto/inputpanel/data/inputpanel/inputpanel.qml index d1b3cae6..dfdb941b 100644 --- a/tests/auto/inputpanel/data/inputpanel/inputpanel.qml +++ b/tests/auto/inputpanel/data/inputpanel/inputpanel.qml @@ -29,7 +29,7 @@ import QtTest 1.0 import QtQuick 2.0 -import QtQuick.VirtualKeyboard 2.2 +import QtQuick.VirtualKeyboard 2.3 import QtQuick.VirtualKeyboard.Settings 2.2 import "handwriting.js" as Handwriting import "utils.js" as Utils @@ -263,6 +263,20 @@ InputPanel { return InputEngine.Katakana else if (inputModeName === "FullwidthLatin") return InputEngine.FullwidthLatin + else if (inputModeName === "Greek") + return InputEngine.Greek + else if (inputModeName === "Cyrillic") + return InputEngine.Cyrillic + else if (inputModeName === "Arabic") + return InputEngine.Arabic + else if (inputModeName === "Hebrew") + return InputEngine.Hebrew + else if (inputModeName === "ChineseHandwriting") + return InputEngine.ChineseHandwriting + else if (inputModeName === "JapaneseHandwriting") + return InputEngine.JapaneseHandwriting + else if (inputModeName === "KoreanHandwriting") + return InputEngine.KoreanHandwriting else return -1 } @@ -283,14 +297,21 @@ InputPanel { return Utils.findChild(keyboardLayoutLoader, key, function(obj, param) { if (!obj.hasOwnProperty("key") || !obj.hasOwnProperty("text")) return false - return (typeof param == "number") ? obj.key === param : obj.text === param + return (typeof param == "number") ? obj.key === param : obj.text.toUpperCase() === param.toUpperCase() }) } function findVirtualKeyAlternative(key) { if (typeof key != "string") return null - return Utils.findChildByProperty(keyboardLayoutLoader, "effectiveAlternativeKeys", key, function(propertyValue, key) { return propertyValue.indexOf(key) !== -1 }) + return Utils.findChildByProperty(keyboardLayoutLoader, "effectiveAlternativeKeys", key.toUpperCase(), + function(propertyValue, key) { + if (typeof propertyValue == "string") + return propertyValue.toUpperCase().indexOf(key) !== -1 + return propertyValue.filter(function(value) { + return key === value.toUpperCase() + }).length > 0 + }) } function findObjectByName(objectName) { @@ -342,12 +363,14 @@ InputPanel { testcase.waitForRendering(inputPanel) success = keyActionOnCurrentLayoutCb(key) } - } else { + } else if (typeof key != "number" || key !== Qt.Key_Shift) { // Some layouts (such as Arabic, Hindi) may have a second layout - InputContext.shiftHandler.toggleShift() + virtualKeyPress(Qt.Key_Shift) + InputContext.shiftHandler.clearToggleShiftTimer() testcase.waitForRendering(inputPanel) success = keyActionOnCurrentLayoutCb(key) - InputContext.shiftHandler.toggleShift() + virtualKeyPress(Qt.Key_Shift) + InputContext.shiftHandler.clearToggleShiftTimer() } if (success) break @@ -368,6 +391,8 @@ InputPanel { } function virtualKeyPress(key) { + if (!key) + return false return multiLayoutKeyActionHelper(key, virtualKeyPressOnCurrentLayout) } @@ -547,7 +572,7 @@ InputPanel { function setHandwritingMode(enabled) { if (inputPanel.keyboard.handwritingMode !== enabled) { if (!enabled || inputPanel.keyboard.isHandwritingAvailable()) - inputPanel.keyboard.handwritingMode = enabled + inputPanel.keyboard.setHandwritingMode(enabled, true) } return inputPanel.keyboard.handwritingMode === enabled } diff --git a/tests/auto/inputpanel/data/inputpanel/unipen_data.js b/tests/auto/inputpanel/data/inputpanel/unipen_data.js index 4c69b43d..83ad1a2c 100644 --- a/tests/auto/inputpanel/data/inputpanel/unipen_data.js +++ b/tests/auto/inputpanel/data/inputpanel/unipen_data.js @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2016 The Qt Company Ltd. +** Copyright (C) 2017 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. @@ -10170,239 +10170,339 @@ var unipenData = { ".PEN": [ [ [ - 435, - 78, + 407, + 75, 0 ], [ - 435, - 77, - 13 - ], - [ - 435, - 76, - 33 - ], - [ - 435, - 75, - 70 + 406, + 74, + 76 ], [ - 434, + 403, 74, - 84 + 96 ], [ - 434, + 401, 73, - 109 + 100 ], [ - 431, - 70, - 130 + 395, + 73, + 128 ], [ - 417, - 65, - 156 + 392, + 73, + 129 ], [ - 407, - 65, - 174 + 388, + 73, + 131 ], [ 385, - 70, - 194 + 73, + 162 ], [ - 377, + 375, 73, - 214 + 162 ], [ - 361, - 83, - 238 + 370, + 75, + 163 ], [ - 355, - 88, - 247 + 360, + 78, + 195 ], [ 349, - 100, - 275 + 85, + 196 ], [ - 354, - 113, - 310 + 342, + 91, + 228 ], [ - 360, - 117, - 338 + 338, + 98, + 229 ], [ - 368, - 120, - 357 + 337, + 107, + 261 ], [ - 379, - 120, - 377 + 337, + 115, + 261 ], [ - 408, - 110, - 412 + 342, + 125, + 294 ], [ - 414, - 105, - 437 + 347, + 133, + 295 ], [ - 423, - 95, - 462 + 351, + 135, + 299 ], [ - 424, - 91, - 484 + 353, + 139, + 328 ], [ - 426, - 87, - 511 + 359, + 143, + 329 ], [ - 426, - 83, - 541 + 363, + 144, + 331 ], [ - 427, - 81, + 365, + 145, + 361 + ], + [ + 369, + 148, + 362 + ], + [ + 371, + 148, + 363 + ], + [ + 372, + 148, + 395 + ], + [ + 376, + 146, + 396 + ], + [ + 382, + 143, + 427 + ], + [ + 387, + 137, + 428 + ], + [ + 391, + 129, + 461 + ], + [ + 395, + 123, + 461 + ], + [ + 400, + 118, + 494 + ], + [ + 401, + 113, + 494 + ], + [ + 402, + 108, + 527 + ], + [ + 404, + 103, + 528 + ], + [ + 406, + 99, + 531 + ], + [ + 406, + 96, + 561 + ], + [ + 408, + 90, + 561 + ], + [ + 408, + 88, 564 ], [ - 426, - 80, - 591 + 408, + 86, + 593 ], [ - 427, - 79, - 648 + 409, + 84, + 594 ], [ - 427, + 409, + 83, + 627 + ], + [ + 409, + 82, + 661 + ], + [ + 409, 81, - 698 + 694 ], [ - 427, + 409, 83, - 722 + 844 ], [ - 428, - 90, - 741 + 409, + 89, + 878 ], [ - 430, + 409, + 93, + 879 + ], + [ + 409, 98, - 760 + 884 ], [ - 432, - 118, - 788 + 408, + 103, + 910 ], [ - 434, - 129, - 797 + 407, + 118, + 911 ], [ - 436, - 151, - 829 + 407, + 135, + 943 ], [ - 436, - 160, - 844 + 407, + 157, + 944 ], [ - 437, + 407, 166, - 863 + 948 ], [ - 437, - 171, - 899 + 409, + 175, + 976 ], [ - 437, - 173, - 921 + 410, + 186, + 977 ], [ - 437, - 176, - 938 + 410, + 191, + 979 ], [ - 437, - 177, - 964 + 411, + 196, + 1009 ], [ - 437, - 178, - 985 + 411, + 203, + 1010 ], [ - 437, - 179, - 1013 + 413, + 207, + 1011 ], [ - 437, - 180, - 1032 + 413, + 211, + 1042 ], [ - 437, - 181, - 1101 + 413, + 223, + 1043 ], [ - 438, - 181, - 1136 + 413, + 230, + 1076 + ], + [ + 413, + 234, + 1077 + ], + [ + 413, + 235, + 1109 + ], + [ + 413, + 236, + 1110 ] ] ], ".POINTS_PER_SECOND": 60, ".SEGMENT": "CHARACTER", ".VERSION": "1.0", - ".X_DIM": 821, - ".X_POINTS_PER_INCH": 100, - ".Y_DIM": 211, - ".Y_POINTS_PER_INCH": 100 + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 95, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 95 }, "0x0072": { ".COORD": [ diff --git a/tests/auto/inputpanel/data/inputpanel/unipen_data_arabic.js b/tests/auto/inputpanel/data/inputpanel/unipen_data_arabic.js new file mode 100644 index 00000000..da810919 --- /dev/null +++ b/tests/auto/inputpanel/data/inputpanel/unipen_data_arabic.js @@ -0,0 +1,1665 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +var unipenData = { + "0x0627": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 354, + 61, + 0 + ], + [ + 354, + 64, + 76 + ], + [ + 354, + 69, + 92 + ], + [ + 354, + 83, + 133 + ], + [ + 348, + 104, + 196 + ], + [ + 345, + 127, + 198 + ], + [ + 345, + 137, + 255 + ], + [ + 347, + 157, + 256 + ], + [ + 347, + 159, + 260 + ], + [ + 347, + 164, + 315 + ], + [ + 346, + 170, + 316 + ], + [ + 345, + 174, + 376 + ], + [ + 345, + 177, + 377 + ], + [ + 344, + 179, + 379 + ], + [ + 344, + 181, + 437 + ], + [ + 344, + 182, + 438 + ], + [ + 344, + 183, + 499 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x0628": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 264, + 132, + 0 + ], + [ + 264, + 133, + 68 + ], + [ + 263, + 139, + 69 + ], + [ + 262, + 146, + 127 + ], + [ + 262, + 149, + 128 + ], + [ + 259, + 160, + 132 + ], + [ + 259, + 163, + 188 + ], + [ + 255, + 180, + 190 + ], + [ + 252, + 184, + 251 + ], + [ + 251, + 185, + 254 + ], + [ + 246, + 186, + 310 + ], + [ + 241, + 186, + 374 + ], + [ + 236, + 186, + 376 + ], + [ + 234, + 186, + 380 + ], + [ + 232, + 186, + 433 + ], + [ + 218, + 184, + 434 + ], + [ + 214, + 184, + 436 + ], + [ + 204, + 183, + 493 + ], + [ + 195, + 181, + 494 + ], + [ + 187, + 180, + 556 + ], + [ + 181, + 179, + 558 + ], + [ + 175, + 178, + 617 + ], + [ + 169, + 178, + 618 + ], + [ + 162, + 177, + 676 + ], + [ + 159, + 177, + 677 + ], + [ + 154, + 177, + 737 + ], + [ + 146, + 176, + 738 + ], + [ + 145, + 176, + 797 + ], + [ + 143, + 174, + 859 + ], + [ + 140, + 170, + 861 + ], + [ + 140, + 168, + 918 + ], + [ + 140, + 165, + 919 + ], + [ + 140, + 160, + 978 + ], + [ + 140, + 151, + 979 + ], + [ + 140, + 139, + 1041 + ], + [ + 142, + 132, + 1043 + ], + [ + 143, + 131, + 1102 + ], + [ + 143, + 127, + 1103 + ], + [ + 143, + 126, + 1228 + ] + ], + [ + [ + 193, + 204, + 1784 + ], + [ + 193, + 206, + 1836 + ], + [ + 193, + 208, + 1863 + ], + [ + 193, + 210, + 1867 + ], + [ + 193, + 211, + 1923 + ], + [ + 193, + 212, + 1924 + ], + [ + 193, + 213, + 1984 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x062a": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 497, + 124, + 0 + ], + [ + 497, + 125, + 76 + ], + [ + 497, + 129, + 99 + ], + [ + 496, + 132, + 135 + ], + [ + 496, + 135, + 136 + ], + [ + 495, + 140, + 198 + ], + [ + 493, + 148, + 199 + ], + [ + 491, + 158, + 259 + ], + [ + 491, + 160, + 259 + ], + [ + 491, + 165, + 260 + ], + [ + 490, + 167, + 319 + ], + [ + 487, + 176, + 320 + ], + [ + 487, + 178, + 382 + ], + [ + 485, + 183, + 383 + ], + [ + 483, + 185, + 443 + ], + [ + 479, + 188, + 445 + ], + [ + 476, + 190, + 501 + ], + [ + 471, + 192, + 503 + ], + [ + 468, + 192, + 532 + ], + [ + 465, + 193, + 562 + ], + [ + 456, + 194, + 563 + ], + [ + 452, + 195, + 564 + ], + [ + 448, + 195, + 624 + ], + [ + 436, + 195, + 624 + ], + [ + 432, + 195, + 627 + ], + [ + 420, + 194, + 687 + ], + [ + 410, + 192, + 688 + ], + [ + 403, + 190, + 691 + ], + [ + 396, + 189, + 746 + ], + [ + 381, + 188, + 747 + ], + [ + 370, + 186, + 806 + ], + [ + 354, + 183, + 807 + ], + [ + 340, + 182, + 867 + ], + [ + 334, + 182, + 868 + ], + [ + 332, + 181, + 928 + ], + [ + 330, + 181, + 929 + ], + [ + 330, + 179, + 989 + ], + [ + 330, + 176, + 1050 + ], + [ + 332, + 174, + 1051 + ], + [ + 333, + 171, + 1051 + ], + [ + 335, + 168, + 1113 + ], + [ + 337, + 164, + 1114 + ], + [ + 339, + 162, + 1117 + ], + [ + 340, + 160, + 1174 + ], + [ + 341, + 156, + 1174 + ], + [ + 343, + 152, + 1232 + ], + [ + 345, + 143, + 1233 + ], + [ + 345, + 142, + 1292 + ], + [ + 345, + 141, + 1353 + ] + ], + [ + [ + 398, + 104, + 1752 + ], + [ + 399, + 105, + 1809 + ], + [ + 403, + 116, + 1810 + ], + [ + 404, + 124, + 1871 + ], + [ + 404, + 128, + 1871 + ], + [ + 406, + 130, + 1933 + ] + ], + [ + [ + 436, + 109, + 2182 + ], + [ + 436, + 113, + 2209 + ], + [ + 436, + 114, + 2211 + ], + [ + 435, + 122, + 2212 + ], + [ + 434, + 124, + 2270 + ], + [ + 433, + 130, + 2272 + ], + [ + 433, + 134, + 2328 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x0643": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 634, + 60, + 0 + ], + [ + 634, + 61, + 47 + ], + [ + 634, + 63, + 50 + ], + [ + 635, + 69, + 110 + ], + [ + 636, + 79, + 111 + ], + [ + 636, + 85, + 140 + ], + [ + 636, + 90, + 169 + ], + [ + 636, + 103, + 170 + ], + [ + 637, + 118, + 230 + ], + [ + 637, + 135, + 231 + ], + [ + 637, + 138, + 260 + ], + [ + 637, + 148, + 290 + ], + [ + 637, + 153, + 291 + ], + [ + 637, + 157, + 353 + ], + [ + 637, + 161, + 354 + ], + [ + 637, + 162, + 356 + ], + [ + 637, + 163, + 412 + ], + [ + 637, + 168, + 413 + ], + [ + 636, + 169, + 473 + ], + [ + 634, + 174, + 474 + ], + [ + 633, + 175, + 477 + ], + [ + 633, + 176, + 533 + ], + [ + 632, + 177, + 535 + ], + [ + 627, + 178, + 594 + ], + [ + 625, + 180, + 595 + ], + [ + 620, + 181, + 656 + ], + [ + 613, + 182, + 657 + ], + [ + 601, + 183, + 717 + ], + [ + 590, + 184, + 718 + ], + [ + 582, + 185, + 778 + ], + [ + 580, + 186, + 779 + ], + [ + 578, + 186, + 780 + ], + [ + 573, + 186, + 839 + ], + [ + 565, + 186, + 840 + ], + [ + 563, + 186, + 843 + ], + [ + 559, + 186, + 902 + ], + [ + 556, + 186, + 909 + ], + [ + 550, + 185, + 961 + ], + [ + 546, + 184, + 1022 + ], + [ + 544, + 184, + 1083 + ], + [ + 542, + 183, + 1084 + ], + [ + 539, + 183, + 1144 + ], + [ + 538, + 182, + 1145 + ], + [ + 535, + 180, + 1207 + ], + [ + 534, + 179, + 1209 + ], + [ + 534, + 178, + 1212 + ], + [ + 533, + 176, + 1267 + ], + [ + 532, + 176, + 1268 + ], + [ + 531, + 174, + 1269 + ], + [ + 531, + 172, + 1328 + ], + [ + 530, + 168, + 1329 + ], + [ + 528, + 162, + 1390 + ], + [ + 527, + 158, + 1392 + ], + [ + 527, + 157, + 1451 + ], + [ + 526, + 154, + 1453 + ], + [ + 526, + 153, + 1510 + ], + [ + 526, + 152, + 1571 + ] + ], + [ + [ + 597, + 77, + 2271 + ], + [ + 595, + 77, + 2329 + ], + [ + 591, + 79, + 2361 + ], + [ + 587, + 81, + 2363 + ], + [ + 583, + 83, + 2419 + ], + [ + 581, + 84, + 2420 + ], + [ + 578, + 87, + 2420 + ], + [ + 576, + 88, + 2480 + ], + [ + 572, + 96, + 2480 + ], + [ + 571, + 102, + 2542 + ], + [ + 571, + 107, + 2542 + ], + [ + 573, + 111, + 2602 + ], + [ + 578, + 117, + 2603 + ], + [ + 581, + 118, + 2663 + ], + [ + 583, + 118, + 2668 + ], + [ + 586, + 118, + 2724 + ], + [ + 593, + 118, + 2725 + ], + [ + 601, + 115, + 2784 + ], + [ + 603, + 113, + 2785 + ], + [ + 603, + 112, + 2788 + ], + [ + 603, + 111, + 2956 + ], + [ + 600, + 115, + 2997 + ], + [ + 597, + 119, + 3057 + ], + [ + 594, + 122, + 3058 + ], + [ + 588, + 128, + 3117 + ], + [ + 585, + 131, + 3118 + ], + [ + 582, + 134, + 3181 + ], + [ + 581, + 134, + 3183 + ], + [ + 580, + 135, + 3244 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x0686": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 458, + 113, + 0 + ], + [ + 457, + 112, + 48 + ], + [ + 457, + 111, + 49 + ], + [ + 454, + 107, + 103 + ], + [ + 446, + 99, + 104 + ], + [ + 440, + 94, + 165 + ], + [ + 426, + 75, + 166 + ], + [ + 419, + 61, + 227 + ], + [ + 419, + 58, + 228 + ], + [ + 420, + 53, + 230 + ], + [ + 441, + 49, + 288 + ], + [ + 473, + 49, + 289 + ], + [ + 508, + 55, + 349 + ], + [ + 517, + 65, + 350 + ], + [ + 517, + 71, + 409 + ], + [ + 501, + 85, + 411 + ], + [ + 454, + 104, + 471 + ], + [ + 435, + 108, + 472 + ], + [ + 417, + 112, + 475 + ], + [ + 397, + 119, + 536 + ], + [ + 383, + 126, + 537 + ], + [ + 377, + 130, + 539 + ], + [ + 376, + 138, + 594 + ], + [ + 376, + 144, + 595 + ], + [ + 378, + 148, + 596 + ], + [ + 383, + 156, + 654 + ], + [ + 390, + 162, + 655 + ], + [ + 410, + 169, + 716 + ], + [ + 446, + 172, + 717 + ], + [ + 467, + 172, + 749 + ], + [ + 487, + 172, + 777 + ], + [ + 503, + 173, + 778 + ], + [ + 517, + 173, + 779 + ], + [ + 533, + 170, + 838 + ], + [ + 553, + 169, + 838 + ], + [ + 555, + 169, + 868 + ], + [ + 555, + 168, + 899 + ] + ], + [ + [ + 505, + 127, + 1279 + ], + [ + 503, + 127, + 1283 + ], + [ + 491, + 127, + 1351 + ], + [ + 475, + 128, + 1352 + ], + [ + 471, + 131, + 1412 + ], + [ + 475, + 142, + 1413 + ], + [ + 504, + 149, + 1474 + ], + [ + 512, + 145, + 1475 + ], + [ + 512, + 143, + 1539 + ], + [ + 510, + 134, + 1541 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x06cc": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 399, + 119, + 0 + ], + [ + 399, + 118, + 49 + ], + [ + 399, + 116, + 50 + ], + [ + 399, + 111, + 110 + ], + [ + 399, + 107, + 110 + ], + [ + 399, + 104, + 141 + ], + [ + 398, + 99, + 171 + ], + [ + 397, + 97, + 172 + ], + [ + 395, + 88, + 173 + ], + [ + 391, + 79, + 234 + ], + [ + 384, + 70, + 236 + ], + [ + 381, + 68, + 298 + ], + [ + 380, + 67, + 298 + ], + [ + 379, + 67, + 300 + ], + [ + 376, + 67, + 353 + ], + [ + 371, + 69, + 353 + ], + [ + 366, + 71, + 356 + ], + [ + 363, + 73, + 414 + ], + [ + 357, + 78, + 415 + ], + [ + 352, + 91, + 476 + ], + [ + 349, + 105, + 477 + ], + [ + 349, + 116, + 536 + ], + [ + 355, + 129, + 537 + ], + [ + 356, + 132, + 539 + ], + [ + 357, + 137, + 596 + ], + [ + 362, + 150, + 597 + ], + [ + 363, + 156, + 661 + ], + [ + 362, + 161, + 662 + ], + [ + 359, + 165, + 717 + ], + [ + 349, + 171, + 718 + ], + [ + 331, + 178, + 777 + ], + [ + 328, + 179, + 778 + ], + [ + 320, + 181, + 780 + ], + [ + 311, + 182, + 840 + ], + [ + 297, + 182, + 841 + ], + [ + 289, + 181, + 900 + ], + [ + 284, + 179, + 901 + ], + [ + 282, + 177, + 961 + ], + [ + 276, + 170, + 962 + ], + [ + 275, + 164, + 1023 + ], + [ + 275, + 160, + 1023 + ], + [ + 275, + 156, + 1083 + ], + [ + 275, + 151, + 1084 + ], + [ + 275, + 147, + 1143 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + } +} diff --git a/tests/auto/inputpanel/data/inputpanel/unipen_data_cyrillic.js b/tests/auto/inputpanel/data/inputpanel/unipen_data_cyrillic.js new file mode 100644 index 00000000..3f336427 --- /dev/null +++ b/tests/auto/inputpanel/data/inputpanel/unipen_data_cyrillic.js @@ -0,0 +1,3440 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +var unipenData = { + "0x0430": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 531, + 128, + 0 + ], + [ + 532, + 128, + 56 + ], + [ + 534, + 127, + 72 + ], + [ + 536, + 127, + 100 + ], + [ + 538, + 124, + 100 + ], + [ + 539, + 124, + 103 + ], + [ + 541, + 123, + 133 + ], + [ + 544, + 122, + 133 + ], + [ + 546, + 122, + 136 + ], + [ + 548, + 122, + 165 + ], + [ + 554, + 122, + 166 + ], + [ + 557, + 121, + 168 + ], + [ + 561, + 121, + 199 + ], + [ + 570, + 125, + 200 + ], + [ + 575, + 130, + 232 + ], + [ + 579, + 135, + 233 + ], + [ + 583, + 141, + 266 + ], + [ + 586, + 148, + 266 + ], + [ + 586, + 154, + 298 + ], + [ + 586, + 160, + 299 + ], + [ + 586, + 163, + 303 + ], + [ + 586, + 166, + 332 + ], + [ + 587, + 171, + 333 + ], + [ + 587, + 174, + 336 + ], + [ + 587, + 176, + 366 + ], + [ + 587, + 180, + 367 + ], + [ + 587, + 181, + 368 + ], + [ + 587, + 182, + 399 + ], + [ + 587, + 183, + 399 + ], + [ + 588, + 185, + 400 + ], + [ + 589, + 188, + 432 + ], + [ + 589, + 190, + 465 + ], + [ + 589, + 189, + 511 + ], + [ + 589, + 187, + 548 + ] + ], + [ + [ + 572, + 155, + 892 + ], + [ + 567, + 153, + 935 + ], + [ + 565, + 152, + 935 + ], + [ + 562, + 150, + 964 + ], + [ + 559, + 150, + 965 + ], + [ + 556, + 150, + 967 + ], + [ + 553, + 150, + 997 + ], + [ + 548, + 150, + 998 + ], + [ + 546, + 150, + 1000 + ], + [ + 544, + 150, + 1030 + ], + [ + 541, + 150, + 1031 + ], + [ + 540, + 152, + 1031 + ], + [ + 537, + 153, + 1064 + ], + [ + 535, + 155, + 1064 + ], + [ + 531, + 158, + 1065 + ], + [ + 527, + 163, + 1097 + ], + [ + 526, + 166, + 1098 + ], + [ + 524, + 168, + 1130 + ], + [ + 524, + 172, + 1131 + ], + [ + 524, + 173, + 1136 + ], + [ + 524, + 175, + 1163 + ], + [ + 526, + 178, + 1164 + ], + [ + 526, + 180, + 1167 + ], + [ + 527, + 180, + 1196 + ], + [ + 530, + 183, + 1197 + ], + [ + 532, + 184, + 1199 + ], + [ + 534, + 185, + 1229 + ], + [ + 539, + 187, + 1230 + ], + [ + 541, + 187, + 1231 + ], + [ + 544, + 187, + 1263 + ], + [ + 546, + 187, + 1264 + ], + [ + 551, + 187, + 1264 + ], + [ + 555, + 187, + 1297 + ], + [ + 562, + 186, + 1297 + ], + [ + 567, + 184, + 1330 + ], + [ + 575, + 180, + 1330 + ], + [ + 578, + 178, + 1347 + ], + [ + 579, + 176, + 1363 + ], + [ + 580, + 175, + 1363 + ], + [ + 580, + 174, + 1380 + ], + [ + 581, + 173, + 1396 + ], + [ + 582, + 173, + 1440 + ], + [ + 583, + 173, + 1465 + ], + [ + 582, + 173, + 1640 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 95, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 95 + }, + "0x0431": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 214, + 62, + 0 + ], + [ + 210, + 62, + 38 + ], + [ + 207, + 62, + 39 + ], + [ + 203, + 62, + 72 + ], + [ + 197, + 62, + 73 + ], + [ + 194, + 62, + 76 + ], + [ + 192, + 62, + 106 + ], + [ + 186, + 63, + 109 + ], + [ + 184, + 65, + 110 + ], + [ + 175, + 67, + 155 + ], + [ + 169, + 69, + 156 + ], + [ + 166, + 70, + 156 + ], + [ + 163, + 70, + 188 + ], + [ + 154, + 74, + 189 + ], + [ + 148, + 77, + 221 + ], + [ + 144, + 82, + 222 + ], + [ + 140, + 87, + 255 + ], + [ + 138, + 93, + 256 + ], + [ + 136, + 98, + 288 + ], + [ + 134, + 103, + 289 + ], + [ + 134, + 107, + 293 + ], + [ + 134, + 109, + 326 + ], + [ + 134, + 120, + 327 + ], + [ + 134, + 125, + 355 + ], + [ + 134, + 128, + 355 + ], + [ + 133, + 132, + 356 + ], + [ + 133, + 134, + 387 + ], + [ + 133, + 143, + 389 + ], + [ + 133, + 148, + 421 + ], + [ + 133, + 153, + 422 + ], + [ + 134, + 158, + 454 + ], + [ + 135, + 164, + 454 + ], + [ + 136, + 167, + 488 + ], + [ + 138, + 173, + 489 + ], + [ + 139, + 175, + 493 + ], + [ + 141, + 177, + 521 + ], + [ + 142, + 183, + 522 + ], + [ + 144, + 185, + 524 + ], + [ + 146, + 189, + 554 + ], + [ + 150, + 193, + 555 + ], + [ + 153, + 193, + 557 + ], + [ + 157, + 194, + 590 + ], + [ + 168, + 194, + 592 + ], + [ + 177, + 194, + 620 + ], + [ + 186, + 194, + 622 + ], + [ + 195, + 193, + 654 + ], + [ + 205, + 191, + 655 + ], + [ + 211, + 190, + 687 + ], + [ + 221, + 184, + 688 + ], + [ + 223, + 183, + 693 + ], + [ + 234, + 169, + 737 + ], + [ + 243, + 163, + 738 + ], + [ + 243, + 161, + 741 + ], + [ + 244, + 159, + 770 + ], + [ + 244, + 154, + 771 + ], + [ + 244, + 152, + 773 + ], + [ + 243, + 144, + 812 + ], + [ + 237, + 137, + 813 + ], + [ + 233, + 131, + 836 + ], + [ + 232, + 128, + 837 + ], + [ + 225, + 127, + 870 + ], + [ + 221, + 127, + 871 + ], + [ + 215, + 127, + 903 + ], + [ + 208, + 127, + 904 + ], + [ + 203, + 127, + 908 + ], + [ + 198, + 127, + 936 + ], + [ + 188, + 126, + 936 + ], + [ + 184, + 126, + 941 + ], + [ + 179, + 126, + 969 + ], + [ + 171, + 126, + 970 + ], + [ + 167, + 126, + 973 + ], + [ + 162, + 126, + 1003 + ], + [ + 156, + 126, + 1004 + ], + [ + 154, + 126, + 1004 + ], + [ + 151, + 126, + 1036 + ], + [ + 146, + 126, + 1036 + ], + [ + 142, + 128, + 1069 + ], + [ + 140, + 129, + 1070 + ], + [ + 137, + 131, + 1107 + ], + [ + 133, + 131, + 1108 + ], + [ + 132, + 132, + 1110 + ], + [ + 131, + 132, + 1136 + ], + [ + 128, + 132, + 1137 + ], + [ + 127, + 132, + 1141 + ], + [ + 127, + 133, + 1169 + ], + [ + 125, + 134, + 1170 + ], + [ + 125, + 135, + 1202 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 95, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 95 + }, + "0x0433": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 466, + 177, + 0 + ], + [ + 466, + 176, + 60 + ], + [ + 466, + 175, + 75 + ], + [ + 466, + 173, + 105 + ], + [ + 465, + 173, + 108 + ], + [ + 465, + 172, + 134 + ], + [ + 465, + 169, + 134 + ], + [ + 464, + 167, + 167 + ], + [ + 464, + 165, + 168 + ], + [ + 463, + 161, + 200 + ], + [ + 462, + 156, + 201 + ], + [ + 462, + 154, + 203 + ], + [ + 460, + 151, + 250 + ], + [ + 460, + 148, + 251 + ], + [ + 459, + 148, + 252 + ], + [ + 459, + 147, + 283 + ], + [ + 458, + 143, + 284 + ], + [ + 458, + 140, + 316 + ], + [ + 458, + 138, + 317 + ], + [ + 458, + 136, + 350 + ], + [ + 458, + 134, + 350 + ], + [ + 458, + 133, + 383 + ], + [ + 458, + 131, + 384 + ], + [ + 458, + 129, + 417 + ], + [ + 457, + 128, + 466 + ], + [ + 457, + 127, + 466 + ], + [ + 457, + 126, + 499 + ], + [ + 457, + 125, + 533 + ], + [ + 457, + 124, + 644 + ], + [ + 459, + 124, + 749 + ], + [ + 466, + 124, + 786 + ], + [ + 469, + 124, + 787 + ], + [ + 472, + 124, + 788 + ], + [ + 481, + 124, + 815 + ], + [ + 485, + 124, + 816 + ], + [ + 488, + 125, + 820 + ], + [ + 492, + 125, + 848 + ], + [ + 499, + 125, + 849 + ], + [ + 504, + 125, + 851 + ], + [ + 508, + 125, + 881 + ], + [ + 518, + 125, + 882 + ], + [ + 523, + 125, + 883 + ], + [ + 525, + 125, + 915 + ], + [ + 532, + 125, + 916 + ], + [ + 535, + 125, + 916 + ], + [ + 540, + 125, + 948 + ], + [ + 544, + 125, + 948 + ], + [ + 547, + 125, + 997 + ], + [ + 548, + 125, + 998 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 95, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 95 + }, + "0x0438": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 751, + 123, + 0 + ], + [ + 751, + 124, + 48 + ], + [ + 751, + 126, + 65 + ], + [ + 751, + 127, + 68 + ], + [ + 751, + 128, + 98 + ], + [ + 751, + 131, + 99 + ], + [ + 751, + 133, + 100 + ], + [ + 751, + 136, + 131 + ], + [ + 751, + 140, + 132 + ], + [ + 751, + 146, + 133 + ], + [ + 751, + 152, + 164 + ], + [ + 753, + 158, + 165 + ], + [ + 756, + 165, + 197 + ], + [ + 759, + 169, + 198 + ], + [ + 759, + 171, + 232 + ], + [ + 761, + 172, + 232 + ], + [ + 761, + 173, + 236 + ], + [ + 763, + 174, + 264 + ], + [ + 764, + 176, + 265 + ], + [ + 764, + 177, + 268 + ], + [ + 767, + 178, + 298 + ], + [ + 768, + 178, + 331 + ], + [ + 772, + 178, + 332 + ], + [ + 773, + 178, + 332 + ], + [ + 776, + 178, + 364 + ], + [ + 779, + 178, + 366 + ], + [ + 781, + 176, + 397 + ], + [ + 785, + 172, + 398 + ], + [ + 788, + 166, + 430 + ], + [ + 790, + 162, + 431 + ], + [ + 792, + 159, + 437 + ], + [ + 794, + 154, + 464 + ], + [ + 797, + 148, + 465 + ], + [ + 799, + 146, + 468 + ], + [ + 801, + 144, + 501 + ], + [ + 802, + 138, + 503 + ], + [ + 802, + 134, + 530 + ], + [ + 802, + 132, + 531 + ], + [ + 802, + 129, + 532 + ], + [ + 804, + 128, + 564 + ], + [ + 807, + 123, + 564 + ], + [ + 807, + 120, + 597 + ], + [ + 807, + 118, + 598 + ], + [ + 807, + 117, + 630 + ], + [ + 807, + 116, + 663 + ], + [ + 807, + 117, + 741 + ], + [ + 808, + 120, + 783 + ], + [ + 808, + 123, + 783 + ], + [ + 810, + 129, + 813 + ], + [ + 810, + 131, + 814 + ], + [ + 810, + 136, + 847 + ], + [ + 810, + 139, + 847 + ], + [ + 810, + 141, + 852 + ], + [ + 810, + 144, + 879 + ], + [ + 810, + 149, + 880 + ], + [ + 810, + 153, + 884 + ], + [ + 810, + 155, + 912 + ], + [ + 810, + 162, + 914 + ], + [ + 810, + 164, + 916 + ], + [ + 810, + 167, + 946 + ], + [ + 811, + 171, + 947 + ], + [ + 811, + 173, + 948 + ], + [ + 811, + 174, + 979 + ], + [ + 813, + 179, + 980 + ], + [ + 814, + 181, + 1012 + ], + [ + 814, + 183, + 1013 + ], + [ + 814, + 184, + 1046 + ], + [ + 814, + 186, + 1047 + ], + [ + 815, + 187, + 1079 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 95, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 95 + }, + "0x043a": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 649, + 124, + 0 + ], + [ + 649, + 125, + 189 + ], + [ + 649, + 126, + 214 + ], + [ + 649, + 127, + 255 + ], + [ + 649, + 128, + 256 + ], + [ + 649, + 130, + 256 + ], + [ + 649, + 131, + 260 + ], + [ + 649, + 133, + 289 + ], + [ + 649, + 136, + 293 + ], + [ + 649, + 138, + 322 + ], + [ + 649, + 142, + 323 + ], + [ + 649, + 143, + 324 + ], + [ + 649, + 145, + 355 + ], + [ + 649, + 149, + 356 + ], + [ + 649, + 151, + 356 + ], + [ + 649, + 156, + 388 + ], + [ + 649, + 162, + 389 + ], + [ + 650, + 164, + 421 + ], + [ + 651, + 167, + 423 + ], + [ + 651, + 170, + 454 + ], + [ + 651, + 172, + 455 + ], + [ + 651, + 174, + 461 + ], + [ + 651, + 175, + 488 + ], + [ + 651, + 177, + 489 + ], + [ + 651, + 179, + 492 + ], + [ + 651, + 180, + 521 + ], + [ + 651, + 182, + 522 + ], + [ + 651, + 183, + 554 + ], + [ + 651, + 184, + 588 + ], + [ + 651, + 183, + 853 + ], + [ + 651, + 182, + 887 + ] + ], + [ + [ + 690, + 123, + 1328 + ], + [ + 689, + 123, + 1369 + ], + [ + 689, + 124, + 1373 + ], + [ + 687, + 126, + 1402 + ], + [ + 686, + 126, + 1435 + ], + [ + 682, + 129, + 1436 + ], + [ + 681, + 132, + 1469 + ], + [ + 678, + 132, + 1470 + ], + [ + 673, + 136, + 1518 + ], + [ + 669, + 140, + 1519 + ], + [ + 667, + 140, + 1524 + ], + [ + 666, + 141, + 1552 + ], + [ + 664, + 142, + 1553 + ], + [ + 663, + 143, + 1556 + ], + [ + 661, + 143, + 1585 + ], + [ + 659, + 145, + 1586 + ], + [ + 657, + 147, + 1589 + ], + [ + 655, + 147, + 1618 + ], + [ + 654, + 148, + 1651 + ], + [ + 653, + 149, + 1685 + ], + [ + 653, + 150, + 1718 + ], + [ + 652, + 150, + 1724 + ] + ], + [ + [ + 653, + 151, + 2376 + ], + [ + 654, + 151, + 2419 + ], + [ + 655, + 151, + 2419 + ], + [ + 656, + 151, + 2450 + ], + [ + 657, + 151, + 2452 + ], + [ + 658, + 151, + 2483 + ], + [ + 660, + 151, + 2516 + ], + [ + 663, + 151, + 2517 + ], + [ + 664, + 152, + 2549 + ], + [ + 666, + 153, + 2550 + ], + [ + 669, + 153, + 2583 + ], + [ + 671, + 155, + 2584 + ], + [ + 673, + 156, + 2588 + ], + [ + 674, + 156, + 2616 + ], + [ + 677, + 157, + 2617 + ], + [ + 678, + 158, + 2650 + ], + [ + 680, + 159, + 2650 + ], + [ + 680, + 161, + 2653 + ], + [ + 681, + 161, + 2683 + ], + [ + 683, + 163, + 2683 + ], + [ + 684, + 164, + 2684 + ], + [ + 685, + 165, + 2716 + ], + [ + 687, + 167, + 2717 + ], + [ + 688, + 167, + 2749 + ], + [ + 689, + 168, + 2783 + ], + [ + 689, + 169, + 2784 + ], + [ + 691, + 170, + 2788 + ], + [ + 692, + 171, + 2815 + ], + [ + 692, + 172, + 2820 + ], + [ + 692, + 173, + 2849 + ], + [ + 692, + 174, + 2882 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 95, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 95 + }, + "0x043b": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 313, + 163, + 0 + ], + [ + 313, + 164, + 52 + ], + [ + 313, + 165, + 68 + ], + [ + 313, + 168, + 102 + ], + [ + 314, + 172, + 103 + ], + [ + 315, + 174, + 134 + ], + [ + 316, + 175, + 135 + ], + [ + 320, + 177, + 168 + ], + [ + 323, + 178, + 169 + ], + [ + 324, + 178, + 173 + ], + [ + 327, + 178, + 201 + ], + [ + 332, + 178, + 202 + ], + [ + 335, + 178, + 205 + ], + [ + 340, + 178, + 243 + ], + [ + 344, + 178, + 244 + ], + [ + 346, + 176, + 245 + ], + [ + 349, + 174, + 284 + ], + [ + 352, + 169, + 285 + ], + [ + 354, + 166, + 318 + ], + [ + 357, + 163, + 318 + ], + [ + 360, + 158, + 350 + ], + [ + 362, + 154, + 351 + ], + [ + 364, + 151, + 357 + ], + [ + 365, + 150, + 384 + ], + [ + 369, + 144, + 385 + ], + [ + 371, + 140, + 388 + ], + [ + 372, + 139, + 417 + ], + [ + 375, + 133, + 417 + ], + [ + 376, + 132, + 421 + ], + [ + 380, + 131, + 451 + ], + [ + 381, + 130, + 452 + ], + [ + 382, + 129, + 484 + ], + [ + 385, + 129, + 484 + ], + [ + 387, + 129, + 517 + ], + [ + 389, + 129, + 518 + ], + [ + 391, + 129, + 550 + ], + [ + 394, + 129, + 552 + ], + [ + 395, + 129, + 557 + ], + [ + 398, + 131, + 584 + ], + [ + 400, + 131, + 588 + ], + [ + 402, + 132, + 617 + ], + [ + 403, + 133, + 618 + ], + [ + 404, + 134, + 620 + ], + [ + 405, + 134, + 650 + ], + [ + 407, + 135, + 651 + ], + [ + 408, + 135, + 652 + ], + [ + 410, + 137, + 683 + ], + [ + 410, + 138, + 684 + ], + [ + 410, + 139, + 684 + ], + [ + 412, + 141, + 717 + ], + [ + 413, + 143, + 717 + ], + [ + 414, + 145, + 751 + ], + [ + 415, + 147, + 751 + ], + [ + 415, + 148, + 784 + ], + [ + 416, + 149, + 816 + ], + [ + 416, + 150, + 820 + ], + [ + 416, + 151, + 849 + ], + [ + 416, + 152, + 852 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 95, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 95 + }, + "0x0440": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 639, + 127, + 0 + ], + [ + 639, + 128, + 48 + ], + [ + 640, + 130, + 65 + ], + [ + 640, + 132, + 68 + ], + [ + 640, + 133, + 98 + ], + [ + 640, + 138, + 99 + ], + [ + 640, + 140, + 101 + ], + [ + 640, + 150, + 148 + ], + [ + 641, + 159, + 149 + ], + [ + 644, + 167, + 181 + ], + [ + 646, + 176, + 182 + ], + [ + 646, + 185, + 215 + ], + [ + 646, + 193, + 216 + ], + [ + 646, + 200, + 247 + ], + [ + 646, + 209, + 248 + ], + [ + 646, + 211, + 253 + ], + [ + 647, + 215, + 281 + ], + [ + 647, + 218, + 282 + ], + [ + 647, + 220, + 285 + ], + [ + 647, + 221, + 314 + ], + [ + 648, + 225, + 315 + ], + [ + 648, + 227, + 317 + ], + [ + 648, + 228, + 349 + ], + [ + 648, + 233, + 350 + ], + [ + 648, + 237, + 399 + ], + [ + 648, + 240, + 400 + ], + [ + 648, + 241, + 430 + ], + [ + 648, + 243, + 431 + ], + [ + 648, + 245, + 464 + ], + [ + 648, + 246, + 497 + ], + [ + 648, + 247, + 498 + ], + [ + 648, + 246, + 605 + ] + ], + [ + [ + 644, + 143, + 1072 + ], + [ + 644, + 142, + 1105 + ], + [ + 644, + 138, + 1126 + ], + [ + 644, + 135, + 1127 + ], + [ + 644, + 129, + 1168 + ], + [ + 644, + 126, + 1169 + ], + [ + 644, + 123, + 1173 + ], + [ + 645, + 122, + 1196 + ], + [ + 646, + 122, + 1196 + ], + [ + 648, + 120, + 1197 + ], + [ + 649, + 119, + 1229 + ], + [ + 654, + 117, + 1229 + ], + [ + 657, + 114, + 1262 + ], + [ + 660, + 113, + 1263 + ], + [ + 664, + 113, + 1295 + ], + [ + 668, + 113, + 1295 + ], + [ + 674, + 113, + 1328 + ], + [ + 677, + 113, + 1329 + ], + [ + 679, + 114, + 1333 + ], + [ + 680, + 114, + 1361 + ], + [ + 683, + 116, + 1362 + ], + [ + 685, + 117, + 1365 + ], + [ + 687, + 118, + 1395 + ], + [ + 689, + 122, + 1395 + ], + [ + 690, + 124, + 1396 + ], + [ + 690, + 126, + 1428 + ], + [ + 691, + 131, + 1429 + ], + [ + 691, + 136, + 1465 + ], + [ + 691, + 143, + 1467 + ], + [ + 690, + 145, + 1469 + ], + [ + 688, + 151, + 1511 + ], + [ + 687, + 158, + 1512 + ], + [ + 685, + 159, + 1516 + ], + [ + 684, + 160, + 1544 + ], + [ + 681, + 163, + 1545 + ], + [ + 680, + 164, + 1549 + ], + [ + 678, + 164, + 1577 + ], + [ + 674, + 166, + 1578 + ], + [ + 673, + 166, + 1581 + ], + [ + 671, + 166, + 1611 + ], + [ + 667, + 167, + 1612 + ], + [ + 666, + 167, + 1612 + ], + [ + 664, + 167, + 1644 + ], + [ + 663, + 168, + 1645 + ], + [ + 661, + 168, + 1645 + ], + [ + 658, + 168, + 1677 + ], + [ + 656, + 168, + 1678 + ], + [ + 654, + 168, + 1711 + ], + [ + 653, + 168, + 1712 + ], + [ + 651, + 168, + 1745 + ], + [ + 650, + 168, + 1745 + ], + [ + 650, + 167, + 1778 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 95, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 95 + }, + "0x0441": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 633, + 126, + 0 + ], + [ + 631, + 126, + 39 + ], + [ + 629, + 126, + 40 + ], + [ + 627, + 125, + 43 + ], + [ + 625, + 125, + 70 + ], + [ + 620, + 125, + 70 + ], + [ + 617, + 125, + 75 + ], + [ + 616, + 125, + 103 + ], + [ + 611, + 125, + 104 + ], + [ + 607, + 125, + 108 + ], + [ + 603, + 125, + 136 + ], + [ + 597, + 126, + 139 + ], + [ + 593, + 128, + 143 + ], + [ + 585, + 133, + 172 + ], + [ + 578, + 139, + 173 + ], + [ + 574, + 144, + 203 + ], + [ + 572, + 152, + 205 + ], + [ + 572, + 157, + 236 + ], + [ + 572, + 164, + 238 + ], + [ + 573, + 171, + 269 + ], + [ + 576, + 176, + 270 + ], + [ + 583, + 182, + 304 + ], + [ + 587, + 184, + 306 + ], + [ + 591, + 184, + 309 + ], + [ + 606, + 185, + 353 + ], + [ + 617, + 184, + 353 + ], + [ + 623, + 182, + 355 + ], + [ + 627, + 180, + 386 + ], + [ + 634, + 178, + 387 + ], + [ + 635, + 177, + 387 + ], + [ + 635, + 176, + 419 + ], + [ + 635, + 174, + 420 + ], + [ + 633, + 173, + 453 + ], + [ + 632, + 173, + 453 + ], + [ + 632, + 172, + 488 + ], + [ + 631, + 172, + 492 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 95, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 95 + }, + "0x044a": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 259, + 124, + 0 + ], + [ + 260, + 124, + 69 + ], + [ + 262, + 124, + 90 + ], + [ + 264, + 124, + 93 + ], + [ + 266, + 124, + 114 + ], + [ + 267, + 124, + 117 + ], + [ + 269, + 124, + 145 + ], + [ + 271, + 124, + 146 + ], + [ + 272, + 124, + 149 + ], + [ + 273, + 125, + 178 + ], + [ + 274, + 125, + 179 + ], + [ + 275, + 125, + 180 + ], + [ + 277, + 125, + 211 + ], + [ + 278, + 127, + 212 + ], + [ + 278, + 129, + 245 + ], + [ + 279, + 132, + 246 + ], + [ + 279, + 134, + 278 + ], + [ + 279, + 136, + 279 + ], + [ + 279, + 139, + 312 + ], + [ + 279, + 142, + 313 + ], + [ + 279, + 145, + 317 + ], + [ + 279, + 146, + 345 + ], + [ + 279, + 151, + 345 + ], + [ + 279, + 154, + 348 + ], + [ + 279, + 156, + 378 + ], + [ + 279, + 162, + 379 + ], + [ + 279, + 164, + 381 + ], + [ + 279, + 166, + 412 + ], + [ + 279, + 171, + 412 + ], + [ + 279, + 172, + 413 + ], + [ + 279, + 175, + 444 + ], + [ + 279, + 178, + 445 + ], + [ + 279, + 179, + 478 + ], + [ + 279, + 180, + 480 + ], + [ + 279, + 181, + 484 + ], + [ + 279, + 182, + 511 + ], + [ + 279, + 181, + 1037 + ], + [ + 279, + 178, + 1085 + ], + [ + 279, + 176, + 1086 + ], + [ + 279, + 173, + 1109 + ], + [ + 279, + 172, + 1110 + ], + [ + 279, + 171, + 1143 + ], + [ + 279, + 169, + 1144 + ], + [ + 279, + 167, + 1177 + ], + [ + 279, + 165, + 1177 + ], + [ + 280, + 163, + 1180 + ], + [ + 281, + 162, + 1210 + ], + [ + 282, + 156, + 1210 + ], + [ + 282, + 155, + 1212 + ], + [ + 282, + 152, + 1244 + ], + [ + 283, + 150, + 1246 + ], + [ + 285, + 149, + 1293 + ], + [ + 290, + 149, + 1293 + ], + [ + 293, + 149, + 1327 + ], + [ + 295, + 149, + 1327 + ], + [ + 298, + 149, + 1359 + ], + [ + 300, + 149, + 1360 + ], + [ + 302, + 149, + 1392 + ], + [ + 303, + 150, + 1393 + ], + [ + 304, + 150, + 1426 + ], + [ + 305, + 152, + 1426 + ], + [ + 305, + 153, + 1429 + ], + [ + 306, + 155, + 1459 + ], + [ + 306, + 157, + 1460 + ], + [ + 307, + 159, + 1461 + ], + [ + 308, + 160, + 1492 + ], + [ + 308, + 166, + 1493 + ], + [ + 309, + 169, + 1526 + ], + [ + 309, + 171, + 1526 + ], + [ + 309, + 173, + 1558 + ], + [ + 309, + 175, + 1592 + ], + [ + 309, + 176, + 1593 + ], + [ + 309, + 177, + 1597 + ], + [ + 308, + 178, + 1625 + ], + [ + 308, + 180, + 1626 + ], + [ + 307, + 180, + 1629 + ], + [ + 307, + 181, + 1659 + ], + [ + 306, + 182, + 1659 + ], + [ + 305, + 182, + 1661 + ], + [ + 303, + 182, + 1691 + ], + [ + 302, + 182, + 1692 + ], + [ + 301, + 182, + 1725 + ], + [ + 300, + 182, + 1726 + ], + [ + 298, + 182, + 1759 + ], + [ + 296, + 182, + 1759 + ], + [ + 294, + 182, + 1792 + ], + [ + 293, + 182, + 1797 + ], + [ + 291, + 182, + 1825 + ], + [ + 291, + 181, + 1858 + ], + [ + 289, + 181, + 1858 + ], + [ + 289, + 180, + 1891 + ], + [ + 288, + 180, + 1925 + ], + [ + 287, + 180, + 1965 + ], + [ + 286, + 180, + 2061 + ], + [ + 285, + 179, + 2108 + ], + [ + 284, + 179, + 2108 + ], + [ + 283, + 179, + 2140 + ], + [ + 283, + 178, + 2141 + ], + [ + 281, + 178, + 2174 + ], + [ + 280, + 177, + 2174 + ], + [ + 279, + 177, + 2223 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 95, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 95 + } +} diff --git a/tests/auto/inputpanel/data/inputpanel/unipen_data_greek.js b/tests/auto/inputpanel/data/inputpanel/unipen_data_greek.js new file mode 100644 index 00000000..54db858b --- /dev/null +++ b/tests/auto/inputpanel/data/inputpanel/unipen_data_greek.js @@ -0,0 +1,2139 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +var unipenData = { + "0x0395": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 199, + 59, + 0 + ], + [ + 199, + 60, + 52 + ], + [ + 199, + 62, + 68 + ], + [ + 199, + 68, + 105 + ], + [ + 199, + 77, + 108 + ], + [ + 199, + 80, + 113 + ], + [ + 199, + 103, + 153 + ], + [ + 199, + 108, + 159 + ], + [ + 200, + 115, + 165 + ], + [ + 200, + 120, + 183 + ], + [ + 201, + 129, + 205 + ], + [ + 202, + 138, + 223 + ], + [ + 202, + 145, + 244 + ], + [ + 202, + 151, + 257 + ], + [ + 202, + 154, + 271 + ], + [ + 202, + 158, + 287 + ], + [ + 202, + 161, + 304 + ], + [ + 203, + 162, + 320 + ], + [ + 203, + 164, + 337 + ], + [ + 203, + 165, + 353 + ], + [ + 204, + 167, + 370 + ], + [ + 205, + 169, + 387 + ], + [ + 206, + 173, + 404 + ], + [ + 208, + 175, + 420 + ], + [ + 208, + 176, + 437 + ], + [ + 209, + 177, + 453 + ], + [ + 210, + 178, + 470 + ], + [ + 210, + 179, + 486 + ], + [ + 211, + 180, + 520 + ], + [ + 214, + 180, + 520 + ], + [ + 217, + 180, + 523 + ], + [ + 218, + 180, + 553 + ], + [ + 226, + 180, + 555 + ], + [ + 231, + 180, + 557 + ], + [ + 245, + 180, + 603 + ], + [ + 261, + 180, + 604 + ], + [ + 274, + 180, + 636 + ], + [ + 285, + 180, + 637 + ], + [ + 294, + 180, + 669 + ], + [ + 301, + 180, + 670 + ], + [ + 306, + 180, + 702 + ], + [ + 310, + 180, + 703 + ], + [ + 311, + 180, + 707 + ], + [ + 312, + 180, + 736 + ], + [ + 311, + 179, + 836 + ], + [ + 309, + 177, + 869 + ] + ], + [ + [ + 198, + 122, + 1336 + ], + [ + 200, + 122, + 1396 + ], + [ + 207, + 122, + 1414 + ], + [ + 210, + 122, + 1448 + ], + [ + 220, + 122, + 1469 + ], + [ + 231, + 122, + 1473 + ], + [ + 236, + 122, + 1501 + ], + [ + 240, + 122, + 1512 + ], + [ + 243, + 121, + 1514 + ], + [ + 245, + 121, + 1515 + ], + [ + 247, + 121, + 1551 + ], + [ + 249, + 121, + 1551 + ], + [ + 250, + 120, + 1556 + ], + [ + 251, + 119, + 1585 + ] + ], + [ + [ + 199, + 48, + 2190 + ], + [ + 199, + 50, + 2235 + ], + [ + 200, + 50, + 2236 + ], + [ + 203, + 50, + 2266 + ], + [ + 206, + 50, + 2266 + ], + [ + 209, + 50, + 2268 + ], + [ + 212, + 50, + 2298 + ], + [ + 225, + 50, + 2301 + ], + [ + 235, + 50, + 2305 + ], + [ + 243, + 50, + 2321 + ], + [ + 252, + 50, + 2341 + ], + [ + 278, + 50, + 2342 + ], + [ + 291, + 50, + 2366 + ], + [ + 296, + 50, + 2367 + ], + [ + 298, + 50, + 2399 + ], + [ + 299, + 50, + 2435 + ], + [ + 302, + 50, + 2482 + ], + [ + 303, + 50, + 2483 + ], + [ + 304, + 50, + 2515 + ], + [ + 307, + 50, + 2515 + ], + [ + 310, + 50, + 2557 + ], + [ + 315, + 50, + 2559 + ], + [ + 317, + 50, + 2563 + ], + [ + 318, + 50, + 2587 + ], + [ + 319, + 50, + 2652 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 95, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 95 + }, + "0x03ac": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 546, + 127, + 0 + ], + [ + 545, + 127, + 66 + ], + [ + 544, + 126, + 91 + ], + [ + 543, + 126, + 127 + ], + [ + 540, + 125, + 137 + ], + [ + 538, + 125, + 159 + ], + [ + 531, + 125, + 180 + ], + [ + 524, + 127, + 198 + ], + [ + 518, + 130, + 220 + ], + [ + 513, + 135, + 236 + ], + [ + 508, + 143, + 253 + ], + [ + 507, + 148, + 270 + ], + [ + 506, + 154, + 286 + ], + [ + 506, + 161, + 303 + ], + [ + 506, + 170, + 319 + ], + [ + 506, + 177, + 336 + ], + [ + 506, + 184, + 353 + ], + [ + 507, + 190, + 369 + ], + [ + 510, + 193, + 386 + ], + [ + 515, + 196, + 403 + ], + [ + 518, + 196, + 419 + ], + [ + 520, + 196, + 436 + ], + [ + 522, + 196, + 452 + ], + [ + 524, + 194, + 469 + ], + [ + 527, + 190, + 486 + ], + [ + 531, + 186, + 503 + ], + [ + 535, + 181, + 518 + ], + [ + 542, + 177, + 535 + ], + [ + 548, + 173, + 552 + ], + [ + 552, + 167, + 569 + ], + [ + 554, + 164, + 586 + ], + [ + 555, + 159, + 602 + ], + [ + 556, + 152, + 619 + ], + [ + 556, + 146, + 635 + ], + [ + 556, + 142, + 652 + ], + [ + 557, + 138, + 668 + ], + [ + 557, + 135, + 685 + ], + [ + 557, + 133, + 702 + ], + [ + 556, + 132, + 718 + ], + [ + 556, + 130, + 735 + ], + [ + 555, + 130, + 752 + ], + [ + 556, + 135, + 965 + ], + [ + 557, + 137, + 971 + ], + [ + 559, + 144, + 1001 + ], + [ + 560, + 149, + 1002 + ], + [ + 560, + 152, + 1003 + ], + [ + 561, + 163, + 1034 + ], + [ + 562, + 170, + 1035 + ], + [ + 562, + 176, + 1067 + ], + [ + 563, + 182, + 1067 + ], + [ + 564, + 184, + 1100 + ], + [ + 564, + 187, + 1101 + ], + [ + 564, + 188, + 1134 + ], + [ + 563, + 188, + 1186 + ], + [ + 562, + 186, + 1233 + ], + [ + 561, + 185, + 1234 + ] + ], + [ + [ + 534, + 87, + 1751 + ], + [ + 534, + 89, + 1798 + ], + [ + 534, + 92, + 1799 + ], + [ + 534, + 93, + 1803 + ], + [ + 534, + 94, + 1832 + ], + [ + 534, + 96, + 1833 + ], + [ + 534, + 97, + 1835 + ], + [ + 534, + 98, + 1865 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 95, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 95 + }, + "0x03b7": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 453, + 123, + 0 + ], + [ + 453, + 125, + 49 + ], + [ + 453, + 127, + 50 + ], + [ + 453, + 128, + 52 + ], + [ + 453, + 130, + 82 + ], + [ + 453, + 133, + 83 + ], + [ + 453, + 135, + 85 + ], + [ + 453, + 139, + 115 + ], + [ + 453, + 148, + 118 + ], + [ + 453, + 155, + 149 + ], + [ + 453, + 163, + 160 + ], + [ + 453, + 167, + 161 + ], + [ + 453, + 171, + 164 + ], + [ + 453, + 174, + 198 + ], + [ + 453, + 183, + 200 + ], + [ + 453, + 184, + 204 + ], + [ + 453, + 186, + 231 + ], + [ + 453, + 188, + 232 + ], + [ + 453, + 189, + 236 + ], + [ + 453, + 190, + 264 + ], + [ + 453, + 188, + 436 + ], + [ + 453, + 179, + 486 + ], + [ + 455, + 175, + 486 + ], + [ + 456, + 171, + 514 + ], + [ + 457, + 169, + 515 + ], + [ + 458, + 166, + 516 + ], + [ + 458, + 161, + 547 + ], + [ + 461, + 155, + 547 + ], + [ + 466, + 148, + 580 + ], + [ + 471, + 141, + 581 + ], + [ + 475, + 137, + 614 + ], + [ + 477, + 135, + 614 + ], + [ + 481, + 132, + 647 + ], + [ + 483, + 130, + 648 + ], + [ + 484, + 130, + 652 + ], + [ + 485, + 129, + 680 + ], + [ + 486, + 129, + 681 + ], + [ + 487, + 129, + 714 + ], + [ + 489, + 129, + 715 + ], + [ + 490, + 129, + 747 + ], + [ + 491, + 130, + 748 + ], + [ + 493, + 132, + 780 + ], + [ + 500, + 137, + 780 + ], + [ + 504, + 142, + 813 + ], + [ + 508, + 150, + 813 + ], + [ + 512, + 157, + 846 + ], + [ + 514, + 164, + 847 + ], + [ + 515, + 169, + 852 + ], + [ + 515, + 173, + 880 + ], + [ + 516, + 183, + 880 + ], + [ + 516, + 186, + 883 + ], + [ + 516, + 191, + 913 + ], + [ + 516, + 200, + 913 + ], + [ + 516, + 203, + 917 + ], + [ + 516, + 208, + 946 + ], + [ + 516, + 215, + 947 + ], + [ + 516, + 220, + 948 + ], + [ + 515, + 226, + 980 + ], + [ + 514, + 233, + 980 + ], + [ + 514, + 238, + 1013 + ], + [ + 513, + 242, + 1014 + ], + [ + 513, + 245, + 1046 + ], + [ + 513, + 247, + 1047 + ], + [ + 513, + 248, + 1052 + ], + [ + 513, + 249, + 1096 + ], + [ + 513, + 250, + 1129 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 95, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 95 + }, + "0x03b9": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 322, + 123, + 0 + ], + [ + 322, + 124, + 48 + ], + [ + 322, + 125, + 61 + ], + [ + 322, + 127, + 65 + ], + [ + 322, + 129, + 85 + ], + [ + 322, + 131, + 85 + ], + [ + 322, + 133, + 89 + ], + [ + 322, + 136, + 119 + ], + [ + 322, + 140, + 120 + ], + [ + 322, + 143, + 123 + ], + [ + 322, + 147, + 160 + ], + [ + 322, + 155, + 161 + ], + [ + 322, + 162, + 185 + ], + [ + 322, + 164, + 186 + ], + [ + 322, + 168, + 218 + ], + [ + 322, + 171, + 218 + ], + [ + 322, + 174, + 250 + ], + [ + 322, + 177, + 251 + ], + [ + 321, + 178, + 284 + ], + [ + 321, + 179, + 289 + ], + [ + 321, + 180, + 318 + ], + [ + 321, + 181, + 318 + ], + [ + 321, + 182, + 351 + ], + [ + 321, + 183, + 351 + ], + [ + 321, + 184, + 353 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 95, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 95 + }, + "0x03ba": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 424, + 122, + 0 + ], + [ + 424, + 123, + 43 + ], + [ + 424, + 124, + 59 + ], + [ + 424, + 127, + 89 + ], + [ + 424, + 130, + 90 + ], + [ + 424, + 133, + 91 + ], + [ + 424, + 136, + 124 + ], + [ + 424, + 149, + 128 + ], + [ + 424, + 153, + 144 + ], + [ + 424, + 157, + 164 + ], + [ + 424, + 170, + 165 + ], + [ + 424, + 176, + 190 + ], + [ + 423, + 178, + 190 + ], + [ + 423, + 180, + 195 + ], + [ + 423, + 182, + 222 + ], + [ + 423, + 187, + 223 + ], + [ + 423, + 188, + 256 + ], + [ + 423, + 189, + 257 + ], + [ + 423, + 190, + 289 + ], + [ + 423, + 189, + 420 + ], + [ + 423, + 188, + 427 + ], + [ + 423, + 186, + 472 + ] + ], + [ + [ + 476, + 122, + 919 + ], + [ + 476, + 124, + 971 + ], + [ + 473, + 126, + 996 + ], + [ + 473, + 127, + 996 + ], + [ + 468, + 130, + 1021 + ], + [ + 467, + 132, + 1024 + ], + [ + 465, + 132, + 1028 + ], + [ + 461, + 134, + 1053 + ], + [ + 454, + 139, + 1065 + ], + [ + 449, + 141, + 1067 + ], + [ + 445, + 143, + 1068 + ], + [ + 437, + 147, + 1104 + ], + [ + 430, + 151, + 1105 + ], + [ + 428, + 152, + 1107 + ], + [ + 426, + 153, + 1137 + ], + [ + 420, + 155, + 1137 + ], + [ + 418, + 155, + 1138 + ], + [ + 418, + 156, + 1170 + ], + [ + 417, + 156, + 1171 + ], + [ + 419, + 156, + 1300 + ], + [ + 424, + 157, + 1352 + ], + [ + 426, + 157, + 1353 + ], + [ + 428, + 157, + 1354 + ], + [ + 434, + 157, + 1386 + ], + [ + 438, + 158, + 1387 + ], + [ + 443, + 159, + 1419 + ], + [ + 447, + 163, + 1420 + ], + [ + 451, + 165, + 1453 + ], + [ + 453, + 168, + 1453 + ], + [ + 455, + 171, + 1486 + ], + [ + 455, + 173, + 1487 + ], + [ + 455, + 174, + 1491 + ], + [ + 456, + 176, + 1519 + ], + [ + 457, + 177, + 1523 + ], + [ + 457, + 178, + 1552 + ], + [ + 458, + 180, + 1553 + ], + [ + 459, + 180, + 1586 + ], + [ + 459, + 181, + 1586 + ], + [ + 460, + 181, + 1635 + ], + [ + 460, + 182, + 1670 + ], + [ + 460, + 183, + 1702 + ], + [ + 461, + 183, + 1754 + ], + [ + 461, + 184, + 1799 + ], + [ + 462, + 185, + 1801 + ], + [ + 461, + 185, + 1971 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 95, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 95 + }, + "0x03bb": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 308, + 61, + 0 + ], + [ + 309, + 61, + 67 + ], + [ + 309, + 62, + 83 + ], + [ + 310, + 66, + 109 + ], + [ + 311, + 68, + 112 + ], + [ + 312, + 70, + 127 + ], + [ + 313, + 74, + 147 + ], + [ + 319, + 84, + 148 + ], + [ + 329, + 96, + 172 + ], + [ + 330, + 101, + 173 + ], + [ + 338, + 114, + 204 + ], + [ + 346, + 124, + 205 + ], + [ + 352, + 134, + 237 + ], + [ + 358, + 145, + 238 + ], + [ + 361, + 149, + 254 + ], + [ + 363, + 153, + 270 + ], + [ + 365, + 160, + 271 + ], + [ + 368, + 165, + 303 + ], + [ + 370, + 170, + 304 + ], + [ + 371, + 173, + 307 + ], + [ + 374, + 177, + 337 + ], + [ + 374, + 178, + 338 + ], + [ + 375, + 179, + 370 + ], + [ + 375, + 180, + 371 + ], + [ + 375, + 181, + 402 + ], + [ + 375, + 182, + 403 + ], + [ + 375, + 183, + 437 + ], + [ + 375, + 182, + 540 + ] + ], + [ + [ + 333, + 119, + 943 + ], + [ + 332, + 119, + 987 + ], + [ + 330, + 121, + 1003 + ], + [ + 326, + 124, + 1034 + ], + [ + 321, + 131, + 1035 + ], + [ + 315, + 137, + 1070 + ], + [ + 308, + 145, + 1074 + ], + [ + 305, + 149, + 1089 + ], + [ + 302, + 152, + 1110 + ], + [ + 290, + 159, + 1111 + ], + [ + 285, + 163, + 1136 + ], + [ + 284, + 165, + 1137 + ], + [ + 282, + 167, + 1139 + ], + [ + 281, + 168, + 1168 + ], + [ + 279, + 174, + 1169 + ], + [ + 277, + 175, + 1171 + ], + [ + 276, + 177, + 1202 + ], + [ + 274, + 179, + 1202 + ], + [ + 273, + 180, + 1235 + ], + [ + 271, + 180, + 1235 + ], + [ + 271, + 181, + 1268 + ], + [ + 269, + 181, + 1397 + ], + [ + 269, + 179, + 1440 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 95, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 95 + }, + "0x03bd": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 216, + 122, + 0 + ], + [ + 216, + 123, + 68 + ], + [ + 216, + 124, + 81 + ], + [ + 217, + 126, + 85 + ], + [ + 219, + 135, + 124 + ], + [ + 219, + 142, + 128 + ], + [ + 219, + 147, + 143 + ], + [ + 219, + 150, + 163 + ], + [ + 220, + 159, + 164 + ], + [ + 220, + 165, + 189 + ], + [ + 220, + 167, + 190 + ], + [ + 221, + 171, + 196 + ], + [ + 221, + 172, + 222 + ], + [ + 223, + 176, + 223 + ], + [ + 224, + 179, + 261 + ], + [ + 224, + 180, + 262 + ], + [ + 224, + 181, + 373 + ], + [ + 224, + 182, + 557 + ], + [ + 226, + 177, + 605 + ], + [ + 227, + 173, + 638 + ], + [ + 229, + 170, + 639 + ], + [ + 229, + 167, + 644 + ], + [ + 231, + 163, + 671 + ], + [ + 235, + 155, + 671 + ], + [ + 237, + 151, + 676 + ], + [ + 241, + 146, + 704 + ], + [ + 245, + 140, + 705 + ], + [ + 248, + 138, + 707 + ], + [ + 252, + 133, + 744 + ], + [ + 253, + 129, + 745 + ], + [ + 254, + 127, + 747 + ], + [ + 256, + 123, + 770 + ], + [ + 257, + 120, + 772 + ], + [ + 258, + 117, + 804 + ], + [ + 258, + 116, + 804 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 95, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 95 + } +} diff --git a/tests/auto/inputpanel/data/inputpanel/unipen_data_hebrew.js b/tests/auto/inputpanel/data/inputpanel/unipen_data_hebrew.js new file mode 100644 index 00000000..29c9d3eb --- /dev/null +++ b/tests/auto/inputpanel/data/inputpanel/unipen_data_hebrew.js @@ -0,0 +1,6985 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +var unipenData = { + "0x05d0": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 510, + 64, + 0 + ], + [ + 510, + 65, + 53 + ], + [ + 510, + 68, + 54 + ], + [ + 510, + 77, + 114 + ], + [ + 513, + 90, + 115 + ], + [ + 513, + 103, + 180 + ], + [ + 513, + 118, + 181 + ], + [ + 511, + 132, + 236 + ], + [ + 511, + 144, + 236 + ], + [ + 511, + 149, + 296 + ], + [ + 509, + 160, + 297 + ], + [ + 509, + 164, + 357 + ], + [ + 509, + 166, + 358 + ], + [ + 509, + 168, + 363 + ], + [ + 509, + 169, + 421 + ], + [ + 509, + 170, + 451 + ], + [ + 509, + 172, + 482 + ], + [ + 509, + 173, + 700 + ] + ], + [ + [ + 573, + 128, + 1152 + ], + [ + 570, + 123, + 1216 + ], + [ + 566, + 121, + 1217 + ], + [ + 562, + 120, + 1219 + ], + [ + 559, + 120, + 1274 + ], + [ + 548, + 122, + 1276 + ], + [ + 538, + 126, + 1333 + ], + [ + 526, + 132, + 1334 + ], + [ + 521, + 138, + 1394 + ], + [ + 521, + 141, + 1394 + ], + [ + 522, + 148, + 1395 + ], + [ + 522, + 149, + 1454 + ], + [ + 525, + 154, + 1455 + ], + [ + 530, + 159, + 1515 + ], + [ + 548, + 170, + 1516 + ], + [ + 568, + 179, + 1576 + ], + [ + 587, + 182, + 1577 + ], + [ + 594, + 182, + 1579 + ], + [ + 599, + 182, + 1637 + ], + [ + 605, + 182, + 1638 + ], + [ + 610, + 180, + 1703 + ], + [ + 611, + 178, + 1703 + ], + [ + 611, + 176, + 1780 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x05d1": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 436, + 76, + 0 + ], + [ + 436, + 75, + 117 + ], + [ + 437, + 74, + 143 + ], + [ + 437, + 73, + 167 + ], + [ + 438, + 72, + 193 + ], + [ + 438, + 69, + 194 + ], + [ + 439, + 68, + 196 + ], + [ + 441, + 65, + 261 + ], + [ + 448, + 62, + 263 + ], + [ + 457, + 59, + 317 + ], + [ + 467, + 57, + 318 + ], + [ + 482, + 56, + 380 + ], + [ + 489, + 57, + 382 + ], + [ + 496, + 59, + 438 + ], + [ + 502, + 63, + 439 + ], + [ + 509, + 67, + 499 + ], + [ + 510, + 69, + 500 + ], + [ + 512, + 72, + 501 + ], + [ + 513, + 77, + 560 + ], + [ + 514, + 87, + 561 + ], + [ + 515, + 96, + 621 + ], + [ + 515, + 101, + 621 + ], + [ + 515, + 111, + 681 + ], + [ + 514, + 113, + 682 + ], + [ + 512, + 119, + 683 + ], + [ + 512, + 121, + 684 + ], + [ + 509, + 125, + 742 + ], + [ + 506, + 131, + 743 + ], + [ + 504, + 134, + 748 + ], + [ + 503, + 136, + 807 + ], + [ + 500, + 138, + 809 + ], + [ + 497, + 141, + 813 + ], + [ + 494, + 143, + 866 + ], + [ + 491, + 145, + 866 + ], + [ + 489, + 146, + 926 + ], + [ + 488, + 146, + 927 + ], + [ + 487, + 146, + 932 + ], + [ + 484, + 146, + 989 + ], + [ + 475, + 146, + 990 + ], + [ + 468, + 143, + 1052 + ], + [ + 465, + 142, + 1055 + ], + [ + 460, + 142, + 1111 + ], + [ + 455, + 141, + 1112 + ], + [ + 453, + 141, + 1171 + ], + [ + 452, + 141, + 1233 + ], + [ + 449, + 141, + 1234 + ], + [ + 448, + 141, + 1294 + ], + [ + 444, + 141, + 1294 + ], + [ + 443, + 143, + 1356 + ], + [ + 441, + 145, + 1357 + ], + [ + 440, + 148, + 1417 + ], + [ + 437, + 155, + 1417 + ], + [ + 435, + 158, + 1477 + ], + [ + 433, + 162, + 1478 + ], + [ + 431, + 167, + 1538 + ], + [ + 430, + 171, + 1538 + ], + [ + 429, + 173, + 1602 + ], + [ + 428, + 174, + 1603 + ], + [ + 427, + 177, + 1660 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x05d2": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 541, + 57, + 0 + ], + [ + 542, + 58, + 133 + ], + [ + 542, + 59, + 160 + ], + [ + 543, + 60, + 206 + ], + [ + 544, + 62, + 207 + ], + [ + 546, + 67, + 266 + ], + [ + 546, + 68, + 267 + ], + [ + 546, + 72, + 268 + ], + [ + 547, + 78, + 328 + ], + [ + 548, + 86, + 329 + ], + [ + 550, + 95, + 390 + ], + [ + 550, + 103, + 391 + ], + [ + 551, + 108, + 454 + ], + [ + 553, + 118, + 455 + ], + [ + 554, + 125, + 511 + ], + [ + 555, + 130, + 512 + ], + [ + 555, + 131, + 516 + ], + [ + 555, + 133, + 572 + ], + [ + 555, + 134, + 633 + ], + [ + 555, + 135, + 634 + ], + [ + 555, + 136, + 694 + ], + [ + 555, + 135, + 989 + ], + [ + 555, + 134, + 1035 + ], + [ + 555, + 132, + 1036 + ], + [ + 555, + 130, + 1091 + ], + [ + 555, + 126, + 1092 + ], + [ + 555, + 123, + 1152 + ], + [ + 555, + 120, + 1154 + ], + [ + 553, + 119, + 1157 + ], + [ + 551, + 117, + 1213 + ], + [ + 549, + 116, + 1214 + ], + [ + 544, + 116, + 1274 + ], + [ + 538, + 116, + 1275 + ], + [ + 531, + 116, + 1277 + ], + [ + 524, + 117, + 1335 + ], + [ + 513, + 119, + 1336 + ], + [ + 502, + 127, + 1395 + ], + [ + 501, + 130, + 1396 + ], + [ + 498, + 135, + 1457 + ], + [ + 495, + 145, + 1457 + ], + [ + 495, + 154, + 1518 + ], + [ + 496, + 162, + 1519 + ], + [ + 501, + 171, + 1579 + ], + [ + 507, + 178, + 1580 + ], + [ + 517, + 184, + 1639 + ], + [ + 527, + 188, + 1640 + ], + [ + 538, + 189, + 1701 + ], + [ + 545, + 189, + 1702 + ], + [ + 560, + 186, + 1762 + ], + [ + 570, + 182, + 1763 + ], + [ + 572, + 179, + 1823 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x05d3": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 470, + 76, + 0 + ], + [ + 470, + 74, + 67 + ], + [ + 470, + 72, + 97 + ], + [ + 475, + 69, + 158 + ], + [ + 477, + 67, + 159 + ], + [ + 482, + 65, + 188 + ], + [ + 484, + 65, + 219 + ], + [ + 488, + 65, + 220 + ], + [ + 497, + 64, + 278 + ], + [ + 515, + 65, + 279 + ], + [ + 517, + 66, + 284 + ], + [ + 520, + 67, + 340 + ], + [ + 523, + 70, + 341 + ], + [ + 525, + 74, + 400 + ], + [ + 528, + 83, + 401 + ], + [ + 530, + 97, + 466 + ], + [ + 530, + 102, + 466 + ], + [ + 530, + 110, + 523 + ], + [ + 530, + 112, + 524 + ], + [ + 527, + 118, + 524 + ], + [ + 526, + 119, + 587 + ], + [ + 513, + 127, + 590 + ], + [ + 504, + 130, + 650 + ], + [ + 500, + 131, + 651 + ], + [ + 494, + 132, + 707 + ], + [ + 490, + 133, + 708 + ], + [ + 483, + 134, + 768 + ], + [ + 481, + 134, + 769 + ], + [ + 480, + 134, + 772 + ], + [ + 479, + 134, + 830 + ], + [ + 478, + 134, + 862 + ], + [ + 477, + 134, + 888 + ], + [ + 475, + 131, + 889 + ], + [ + 475, + 130, + 953 + ], + [ + 475, + 129, + 953 + ], + [ + 477, + 129, + 1010 + ], + [ + 479, + 129, + 1011 + ], + [ + 483, + 129, + 1070 + ], + [ + 486, + 129, + 1071 + ], + [ + 492, + 131, + 1130 + ], + [ + 497, + 136, + 1131 + ], + [ + 503, + 142, + 1195 + ], + [ + 506, + 145, + 1197 + ], + [ + 510, + 150, + 1198 + ], + [ + 514, + 157, + 1252 + ], + [ + 518, + 164, + 1254 + ], + [ + 519, + 172, + 1313 + ], + [ + 520, + 174, + 1314 + ], + [ + 521, + 178, + 1315 + ], + [ + 523, + 182, + 1374 + ], + [ + 524, + 187, + 1375 + ], + [ + 525, + 190, + 1439 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x05d4": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 463, + 92, + 0 + ], + [ + 463, + 91, + 68 + ], + [ + 462, + 90, + 70 + ], + [ + 462, + 89, + 103 + ], + [ + 462, + 87, + 104 + ], + [ + 462, + 85, + 154 + ], + [ + 462, + 83, + 155 + ], + [ + 464, + 80, + 156 + ], + [ + 466, + 76, + 215 + ], + [ + 466, + 75, + 216 + ], + [ + 471, + 69, + 221 + ], + [ + 475, + 67, + 277 + ], + [ + 478, + 65, + 278 + ], + [ + 481, + 63, + 278 + ], + [ + 483, + 63, + 336 + ], + [ + 497, + 60, + 337 + ], + [ + 508, + 60, + 340 + ], + [ + 517, + 60, + 397 + ], + [ + 523, + 60, + 398 + ], + [ + 527, + 62, + 458 + ], + [ + 534, + 65, + 459 + ], + [ + 541, + 69, + 518 + ], + [ + 544, + 76, + 519 + ], + [ + 545, + 84, + 584 + ], + [ + 548, + 95, + 585 + ], + [ + 548, + 97, + 588 + ], + [ + 549, + 100, + 640 + ], + [ + 550, + 107, + 641 + ], + [ + 551, + 108, + 644 + ], + [ + 552, + 112, + 701 + ], + [ + 554, + 117, + 702 + ], + [ + 557, + 124, + 762 + ], + [ + 559, + 132, + 763 + ], + [ + 560, + 137, + 823 + ], + [ + 561, + 143, + 824 + ], + [ + 561, + 146, + 889 + ], + [ + 561, + 152, + 890 + ], + [ + 561, + 154, + 945 + ], + [ + 561, + 157, + 946 + ], + [ + 561, + 160, + 1007 + ], + [ + 561, + 161, + 1008 + ], + [ + 561, + 163, + 1073 + ], + [ + 561, + 166, + 1129 + ], + [ + 561, + 168, + 1189 + ], + [ + 561, + 169, + 1285 + ], + [ + 560, + 169, + 1397 + ] + ], + [ + [ + 504, + 145, + 2008 + ], + [ + 504, + 147, + 2077 + ], + [ + 504, + 149, + 2094 + ], + [ + 504, + 152, + 2132 + ], + [ + 504, + 153, + 2133 + ], + [ + 503, + 161, + 2193 + ], + [ + 502, + 167, + 2193 + ], + [ + 502, + 169, + 2196 + ], + [ + 502, + 170, + 2253 + ], + [ + 502, + 174, + 2254 + ], + [ + 502, + 175, + 2364 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x05d5": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 450, + 36, + 0 + ], + [ + 450, + 37, + 60 + ], + [ + 450, + 39, + 89 + ], + [ + 451, + 40, + 92 + ], + [ + 451, + 44, + 152 + ], + [ + 452, + 46, + 154 + ], + [ + 452, + 49, + 156 + ], + [ + 452, + 51, + 211 + ], + [ + 452, + 58, + 212 + ], + [ + 452, + 63, + 276 + ], + [ + 451, + 68, + 277 + ], + [ + 450, + 73, + 278 + ], + [ + 449, + 87, + 333 + ], + [ + 447, + 99, + 334 + ], + [ + 446, + 110, + 394 + ], + [ + 445, + 112, + 395 + ], + [ + 444, + 119, + 396 + ], + [ + 443, + 127, + 453 + ], + [ + 442, + 138, + 454 + ], + [ + 440, + 148, + 517 + ], + [ + 439, + 158, + 519 + ], + [ + 437, + 164, + 576 + ], + [ + 436, + 171, + 577 + ], + [ + 435, + 174, + 639 + ], + [ + 435, + 176, + 641 + ], + [ + 435, + 177, + 644 + ], + [ + 435, + 178, + 699 + ], + [ + 434, + 178, + 700 + ], + [ + 434, + 179, + 772 + ], + [ + 434, + 180, + 821 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x05d6": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 472, + 63, + 0 + ], + [ + 472, + 64, + 49 + ], + [ + 471, + 67, + 50 + ], + [ + 471, + 69, + 52 + ], + [ + 469, + 75, + 115 + ], + [ + 468, + 79, + 115 + ], + [ + 467, + 86, + 172 + ], + [ + 466, + 95, + 172 + ], + [ + 465, + 97, + 233 + ], + [ + 464, + 104, + 234 + ], + [ + 463, + 106, + 235 + ], + [ + 461, + 116, + 294 + ], + [ + 461, + 120, + 296 + ], + [ + 461, + 122, + 355 + ], + [ + 460, + 124, + 356 + ], + [ + 460, + 123, + 507 + ], + [ + 460, + 122, + 568 + ], + [ + 465, + 121, + 569 + ], + [ + 466, + 120, + 571 + ], + [ + 475, + 119, + 629 + ], + [ + 481, + 119, + 630 + ], + [ + 490, + 119, + 691 + ], + [ + 494, + 120, + 693 + ], + [ + 499, + 123, + 750 + ], + [ + 502, + 126, + 751 + ], + [ + 505, + 130, + 755 + ], + [ + 506, + 133, + 811 + ], + [ + 510, + 141, + 813 + ], + [ + 511, + 145, + 872 + ], + [ + 513, + 153, + 873 + ], + [ + 513, + 160, + 876 + ], + [ + 513, + 164, + 936 + ], + [ + 513, + 172, + 939 + ], + [ + 509, + 177, + 993 + ], + [ + 507, + 179, + 994 + ], + [ + 506, + 181, + 995 + ], + [ + 503, + 182, + 1056 + ], + [ + 497, + 184, + 1058 + ], + [ + 488, + 184, + 1116 + ], + [ + 485, + 184, + 1117 + ], + [ + 473, + 184, + 1178 + ], + [ + 467, + 182, + 1179 + ], + [ + 463, + 180, + 1239 + ], + [ + 459, + 178, + 1240 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x05d7": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 435, + 74, + 0 + ], + [ + 435, + 73, + 156 + ], + [ + 435, + 71, + 181 + ], + [ + 445, + 65, + 250 + ], + [ + 451, + 62, + 252 + ], + [ + 455, + 61, + 310 + ], + [ + 466, + 58, + 311 + ], + [ + 476, + 57, + 371 + ], + [ + 479, + 57, + 372 + ], + [ + 488, + 63, + 432 + ], + [ + 495, + 73, + 433 + ], + [ + 499, + 80, + 493 + ], + [ + 501, + 87, + 495 + ], + [ + 502, + 91, + 524 + ], + [ + 503, + 99, + 557 + ], + [ + 504, + 111, + 558 + ], + [ + 504, + 116, + 614 + ], + [ + 502, + 125, + 617 + ], + [ + 502, + 128, + 620 + ], + [ + 502, + 133, + 674 + ], + [ + 498, + 142, + 674 + ], + [ + 495, + 152, + 738 + ], + [ + 495, + 159, + 740 + ], + [ + 495, + 162, + 795 + ], + [ + 495, + 165, + 797 + ], + [ + 495, + 167, + 856 + ], + [ + 495, + 170, + 857 + ], + [ + 495, + 172, + 919 + ], + [ + 495, + 173, + 977 + ], + [ + 495, + 174, + 978 + ], + [ + 494, + 174, + 1124 + ], + [ + 494, + 173, + 1189 + ] + ], + [ + [ + 436, + 64, + 1560 + ], + [ + 436, + 68, + 1615 + ], + [ + 436, + 73, + 1616 + ], + [ + 435, + 75, + 1619 + ], + [ + 434, + 83, + 1675 + ], + [ + 432, + 93, + 1676 + ], + [ + 430, + 106, + 1736 + ], + [ + 425, + 117, + 1737 + ], + [ + 423, + 122, + 1797 + ], + [ + 421, + 133, + 1797 + ], + [ + 419, + 147, + 1860 + ], + [ + 418, + 154, + 1863 + ], + [ + 417, + 160, + 1920 + ], + [ + 417, + 163, + 1920 + ], + [ + 416, + 169, + 1981 + ], + [ + 416, + 171, + 1982 + ], + [ + 415, + 174, + 2046 + ], + [ + 414, + 174, + 2207 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x05d8": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 504, + 89, + 0 + ], + [ + 504, + 92, + 57 + ], + [ + 504, + 94, + 88 + ], + [ + 505, + 98, + 91 + ], + [ + 505, + 100, + 148 + ], + [ + 506, + 109, + 149 + ], + [ + 504, + 128, + 209 + ], + [ + 501, + 137, + 210 + ], + [ + 501, + 139, + 211 + ], + [ + 499, + 144, + 271 + ], + [ + 491, + 150, + 272 + ], + [ + 485, + 154, + 275 + ], + [ + 479, + 156, + 337 + ], + [ + 465, + 159, + 337 + ], + [ + 459, + 161, + 340 + ], + [ + 453, + 161, + 393 + ], + [ + 446, + 162, + 394 + ], + [ + 428, + 157, + 455 + ], + [ + 417, + 150, + 456 + ], + [ + 410, + 138, + 515 + ], + [ + 403, + 122, + 516 + ], + [ + 401, + 117, + 576 + ], + [ + 403, + 92, + 577 + ], + [ + 423, + 67, + 639 + ], + [ + 441, + 50, + 641 + ], + [ + 459, + 39, + 698 + ], + [ + 470, + 32, + 699 + ], + [ + 497, + 24, + 759 + ], + [ + 503, + 22, + 760 + ], + [ + 506, + 21, + 820 + ], + [ + 508, + 21, + 821 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x05d9": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 474, + 54, + 0 + ], + [ + 474, + 55, + 51 + ], + [ + 474, + 57, + 52 + ], + [ + 474, + 62, + 111 + ], + [ + 473, + 65, + 112 + ], + [ + 470, + 72, + 116 + ], + [ + 469, + 74, + 163 + ], + [ + 467, + 82, + 164 + ], + [ + 467, + 84, + 223 + ], + [ + 467, + 85, + 285 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x05da": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 401, + 74, + 0 + ], + [ + 400, + 73, + 158 + ], + [ + 400, + 72, + 183 + ], + [ + 400, + 67, + 254 + ], + [ + 401, + 65, + 255 + ], + [ + 407, + 62, + 318 + ], + [ + 412, + 60, + 319 + ], + [ + 416, + 59, + 375 + ], + [ + 429, + 58, + 376 + ], + [ + 437, + 58, + 381 + ], + [ + 446, + 58, + 437 + ], + [ + 454, + 58, + 438 + ], + [ + 457, + 60, + 498 + ], + [ + 461, + 67, + 499 + ], + [ + 465, + 77, + 564 + ], + [ + 466, + 91, + 565 + ], + [ + 466, + 97, + 620 + ], + [ + 465, + 105, + 620 + ], + [ + 462, + 109, + 622 + ], + [ + 460, + 113, + 681 + ], + [ + 456, + 118, + 682 + ], + [ + 451, + 122, + 685 + ], + [ + 447, + 124, + 742 + ], + [ + 445, + 128, + 743 + ], + [ + 442, + 132, + 804 + ], + [ + 441, + 135, + 804 + ], + [ + 440, + 139, + 863 + ], + [ + 440, + 144, + 864 + ], + [ + 440, + 146, + 868 + ], + [ + 440, + 150, + 924 + ], + [ + 440, + 154, + 925 + ], + [ + 440, + 158, + 985 + ], + [ + 440, + 163, + 986 + ], + [ + 440, + 167, + 989 + ], + [ + 440, + 174, + 1051 + ], + [ + 438, + 182, + 1051 + ], + [ + 438, + 184, + 1054 + ], + [ + 438, + 188, + 1106 + ], + [ + 438, + 196, + 1107 + ], + [ + 436, + 205, + 1167 + ], + [ + 435, + 212, + 1167 + ], + [ + 435, + 216, + 1228 + ], + [ + 435, + 219, + 1229 + ], + [ + 434, + 220, + 1230 + ], + [ + 434, + 221, + 1288 + ], + [ + 434, + 224, + 1289 + ], + [ + 434, + 225, + 1349 + ], + [ + 434, + 226, + 1410 + ], + [ + 433, + 226, + 1518 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x05db": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 419, + 65, + 0 + ], + [ + 420, + 65, + 99 + ], + [ + 423, + 63, + 126 + ], + [ + 426, + 61, + 167 + ], + [ + 429, + 60, + 171 + ], + [ + 431, + 60, + 227 + ], + [ + 438, + 59, + 228 + ], + [ + 444, + 59, + 288 + ], + [ + 455, + 59, + 289 + ], + [ + 461, + 60, + 292 + ], + [ + 467, + 61, + 350 + ], + [ + 475, + 65, + 351 + ], + [ + 481, + 70, + 411 + ], + [ + 488, + 78, + 412 + ], + [ + 493, + 85, + 472 + ], + [ + 495, + 90, + 473 + ], + [ + 498, + 106, + 537 + ], + [ + 498, + 118, + 538 + ], + [ + 497, + 121, + 539 + ], + [ + 494, + 129, + 594 + ], + [ + 493, + 131, + 595 + ], + [ + 484, + 142, + 654 + ], + [ + 474, + 149, + 655 + ], + [ + 465, + 155, + 715 + ], + [ + 461, + 157, + 716 + ], + [ + 457, + 159, + 717 + ], + [ + 454, + 159, + 777 + ], + [ + 446, + 161, + 779 + ], + [ + 442, + 161, + 780 + ], + [ + 438, + 161, + 838 + ], + [ + 428, + 161, + 839 + ], + [ + 420, + 160, + 898 + ], + [ + 413, + 159, + 899 + ], + [ + 409, + 158, + 959 + ], + [ + 408, + 158, + 1019 + ], + [ + 406, + 156, + 1020 + ], + [ + 405, + 155, + 1083 + ], + [ + 404, + 155, + 1085 + ], + [ + 404, + 154, + 1141 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x05dc": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 477, + 154, + 0 + ], + [ + 476, + 154, + 308 + ], + [ + 474, + 155, + 340 + ], + [ + 472, + 156, + 380 + ], + [ + 471, + 157, + 446 + ], + [ + 467, + 160, + 448 + ], + [ + 466, + 162, + 501 + ], + [ + 465, + 164, + 502 + ], + [ + 463, + 166, + 562 + ], + [ + 462, + 169, + 564 + ], + [ + 461, + 173, + 622 + ], + [ + 461, + 174, + 623 + ], + [ + 461, + 177, + 682 + ], + [ + 461, + 179, + 683 + ], + [ + 461, + 180, + 684 + ], + [ + 462, + 180, + 745 + ], + [ + 464, + 184, + 747 + ], + [ + 467, + 186, + 804 + ], + [ + 472, + 188, + 865 + ], + [ + 474, + 189, + 866 + ], + [ + 478, + 189, + 930 + ], + [ + 483, + 189, + 931 + ], + [ + 485, + 187, + 988 + ], + [ + 487, + 184, + 988 + ], + [ + 489, + 176, + 1049 + ], + [ + 489, + 175, + 1052 + ], + [ + 488, + 170, + 1108 + ], + [ + 484, + 166, + 1109 + ], + [ + 479, + 164, + 1169 + ], + [ + 475, + 161, + 1171 + ], + [ + 471, + 156, + 1231 + ], + [ + 468, + 153, + 1232 + ], + [ + 466, + 150, + 1235 + ], + [ + 464, + 147, + 1293 + ], + [ + 462, + 143, + 1296 + ], + [ + 459, + 135, + 1351 + ], + [ + 458, + 133, + 1352 + ], + [ + 457, + 124, + 1356 + ], + [ + 456, + 117, + 1412 + ], + [ + 455, + 111, + 1413 + ], + [ + 454, + 106, + 1414 + ], + [ + 454, + 94, + 1472 + ], + [ + 454, + 86, + 1473 + ], + [ + 454, + 78, + 1476 + ], + [ + 457, + 69, + 1534 + ], + [ + 460, + 54, + 1535 + ], + [ + 463, + 46, + 1540 + ], + [ + 465, + 40, + 1594 + ], + [ + 473, + 31, + 1595 + ], + [ + 480, + 25, + 1656 + ], + [ + 491, + 20, + 1657 + ], + [ + 493, + 18, + 1659 + ], + [ + 499, + 16, + 1717 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x05dd": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 452, + 111, + 0 + ], + [ + 455, + 113, + 68 + ], + [ + 469, + 117, + 104 + ], + [ + 487, + 121, + 107 + ], + [ + 503, + 124, + 159 + ], + [ + 511, + 125, + 160 + ], + [ + 518, + 125, + 162 + ], + [ + 520, + 125, + 221 + ], + [ + 533, + 124, + 222 + ], + [ + 540, + 122, + 227 + ], + [ + 545, + 119, + 281 + ], + [ + 548, + 116, + 282 + ], + [ + 548, + 114, + 283 + ], + [ + 549, + 109, + 344 + ], + [ + 549, + 101, + 346 + ], + [ + 548, + 91, + 404 + ], + [ + 543, + 82, + 405 + ], + [ + 540, + 78, + 464 + ], + [ + 531, + 70, + 465 + ], + [ + 528, + 68, + 525 + ], + [ + 518, + 63, + 526 + ], + [ + 516, + 63, + 586 + ], + [ + 501, + 62, + 587 + ], + [ + 486, + 64, + 645 + ], + [ + 471, + 70, + 646 + ], + [ + 462, + 77, + 711 + ], + [ + 456, + 84, + 712 + ], + [ + 450, + 93, + 716 + ], + [ + 448, + 105, + 768 + ], + [ + 447, + 113, + 769 + ], + [ + 446, + 122, + 771 + ], + [ + 445, + 130, + 831 + ], + [ + 443, + 145, + 833 + ], + [ + 443, + 148, + 836 + ], + [ + 442, + 153, + 889 + ], + [ + 442, + 162, + 890 + ], + [ + 442, + 163, + 891 + ], + [ + 442, + 168, + 949 + ], + [ + 442, + 171, + 950 + ], + [ + 442, + 175, + 1015 + ], + [ + 441, + 177, + 1073 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x05de": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 583, + 58, + 0 + ], + [ + 582, + 59, + 63 + ], + [ + 581, + 63, + 93 + ], + [ + 581, + 64, + 154 + ], + [ + 579, + 79, + 155 + ], + [ + 579, + 90, + 215 + ], + [ + 578, + 107, + 216 + ], + [ + 577, + 111, + 218 + ], + [ + 576, + 122, + 278 + ], + [ + 574, + 133, + 280 + ], + [ + 571, + 147, + 336 + ], + [ + 569, + 159, + 337 + ], + [ + 565, + 167, + 398 + ], + [ + 562, + 173, + 399 + ], + [ + 559, + 177, + 404 + ], + [ + 557, + 180, + 458 + ], + [ + 556, + 181, + 459 + ], + [ + 556, + 182, + 520 + ], + [ + 556, + 183, + 520 + ], + [ + 554, + 181, + 604 + ], + [ + 550, + 176, + 673 + ], + [ + 534, + 158, + 675 + ], + [ + 524, + 144, + 731 + ], + [ + 516, + 129, + 732 + ], + [ + 510, + 113, + 792 + ], + [ + 500, + 92, + 793 + ], + [ + 495, + 80, + 855 + ], + [ + 490, + 66, + 857 + ], + [ + 489, + 62, + 860 + ], + [ + 486, + 55, + 914 + ], + [ + 485, + 53, + 915 + ], + [ + 484, + 51, + 915 + ], + [ + 484, + 53, + 1100 + ], + [ + 481, + 60, + 1157 + ], + [ + 478, + 70, + 1158 + ], + [ + 476, + 83, + 1218 + ], + [ + 474, + 93, + 1219 + ], + [ + 473, + 98, + 1219 + ], + [ + 470, + 108, + 1279 + ], + [ + 466, + 119, + 1280 + ], + [ + 461, + 136, + 1340 + ], + [ + 458, + 149, + 1341 + ], + [ + 455, + 159, + 1401 + ], + [ + 452, + 169, + 1403 + ], + [ + 448, + 176, + 1404 + ], + [ + 446, + 182, + 1462 + ], + [ + 446, + 186, + 1463 + ], + [ + 444, + 188, + 1467 + ], + [ + 443, + 189, + 1524 + ], + [ + 443, + 190, + 1525 + ], + [ + 442, + 191, + 1588 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x05df": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 454, + 58, + 0 + ], + [ + 454, + 61, + 54 + ], + [ + 454, + 62, + 59 + ], + [ + 454, + 64, + 114 + ], + [ + 454, + 67, + 114 + ], + [ + 454, + 73, + 180 + ], + [ + 455, + 83, + 181 + ], + [ + 456, + 91, + 237 + ], + [ + 456, + 103, + 238 + ], + [ + 456, + 114, + 297 + ], + [ + 456, + 129, + 298 + ], + [ + 457, + 144, + 358 + ], + [ + 457, + 152, + 359 + ], + [ + 458, + 163, + 362 + ], + [ + 458, + 167, + 430 + ], + [ + 463, + 190, + 432 + ], + [ + 463, + 192, + 434 + ], + [ + 463, + 197, + 489 + ], + [ + 463, + 203, + 490 + ], + [ + 463, + 207, + 551 + ], + [ + 463, + 211, + 552 + ], + [ + 463, + 213, + 606 + ], + [ + 463, + 214, + 606 + ], + [ + 463, + 216, + 611 + ], + [ + 463, + 217, + 669 + ], + [ + 463, + 218, + 932 + ], + [ + 463, + 219, + 1000 + ], + [ + 463, + 220, + 1061 + ], + [ + 463, + 221, + 1121 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x05e0": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 519, + 63, + 0 + ], + [ + 519, + 65, + 83 + ], + [ + 519, + 67, + 100 + ], + [ + 519, + 77, + 145 + ], + [ + 517, + 85, + 205 + ], + [ + 516, + 99, + 206 + ], + [ + 516, + 113, + 266 + ], + [ + 516, + 123, + 267 + ], + [ + 516, + 125, + 327 + ], + [ + 515, + 139, + 328 + ], + [ + 514, + 147, + 388 + ], + [ + 513, + 154, + 388 + ], + [ + 512, + 161, + 450 + ], + [ + 511, + 164, + 450 + ], + [ + 509, + 167, + 512 + ], + [ + 506, + 170, + 514 + ], + [ + 504, + 172, + 516 + ], + [ + 503, + 173, + 572 + ], + [ + 500, + 175, + 573 + ], + [ + 492, + 177, + 632 + ], + [ + 492, + 178, + 633 + ], + [ + 486, + 179, + 634 + ], + [ + 482, + 179, + 694 + ], + [ + 478, + 180, + 695 + ], + [ + 476, + 180, + 699 + ], + [ + 472, + 180, + 755 + ], + [ + 462, + 178, + 756 + ], + [ + 451, + 175, + 823 + ], + [ + 447, + 173, + 824 + ], + [ + 443, + 171, + 827 + ], + [ + 440, + 171, + 883 + ], + [ + 438, + 170, + 884 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x05e1": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 510, + 62, + 0 + ], + [ + 511, + 62, + 76 + ], + [ + 516, + 62, + 100 + ], + [ + 519, + 62, + 133 + ], + [ + 521, + 62, + 134 + ], + [ + 528, + 65, + 194 + ], + [ + 533, + 69, + 195 + ], + [ + 537, + 76, + 255 + ], + [ + 539, + 81, + 256 + ], + [ + 542, + 92, + 259 + ], + [ + 546, + 106, + 316 + ], + [ + 548, + 121, + 317 + ], + [ + 549, + 131, + 377 + ], + [ + 549, + 140, + 378 + ], + [ + 547, + 144, + 380 + ], + [ + 545, + 151, + 443 + ], + [ + 541, + 160, + 443 + ], + [ + 534, + 167, + 498 + ], + [ + 532, + 169, + 499 + ], + [ + 526, + 172, + 560 + ], + [ + 521, + 173, + 561 + ], + [ + 518, + 173, + 564 + ], + [ + 514, + 173, + 621 + ], + [ + 507, + 173, + 622 + ], + [ + 497, + 171, + 682 + ], + [ + 484, + 165, + 683 + ], + [ + 480, + 163, + 685 + ], + [ + 468, + 154, + 742 + ], + [ + 459, + 145, + 743 + ], + [ + 455, + 138, + 808 + ], + [ + 453, + 127, + 809 + ], + [ + 452, + 116, + 865 + ], + [ + 452, + 110, + 866 + ], + [ + 455, + 101, + 868 + ], + [ + 456, + 98, + 926 + ], + [ + 470, + 83, + 927 + ], + [ + 481, + 76, + 985 + ], + [ + 484, + 74, + 987 + ], + [ + 492, + 70, + 988 + ], + [ + 496, + 68, + 1046 + ], + [ + 505, + 62, + 1047 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x05e2": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 484, + 63, + 0 + ], + [ + 485, + 63, + 47 + ], + [ + 491, + 64, + 77 + ], + [ + 500, + 69, + 138 + ], + [ + 511, + 77, + 139 + ], + [ + 523, + 90, + 199 + ], + [ + 531, + 101, + 200 + ], + [ + 537, + 116, + 263 + ], + [ + 540, + 131, + 265 + ], + [ + 542, + 137, + 321 + ], + [ + 544, + 150, + 322 + ], + [ + 545, + 162, + 383 + ], + [ + 545, + 174, + 384 + ], + [ + 543, + 180, + 388 + ], + [ + 540, + 185, + 450 + ], + [ + 538, + 187, + 451 + ], + [ + 534, + 189, + 452 + ], + [ + 528, + 191, + 506 + ], + [ + 519, + 191, + 507 + ], + [ + 516, + 191, + 508 + ], + [ + 509, + 187, + 565 + ], + [ + 504, + 182, + 566 + ], + [ + 500, + 175, + 627 + ], + [ + 497, + 164, + 629 + ], + [ + 496, + 155, + 688 + ], + [ + 496, + 144, + 689 + ], + [ + 498, + 133, + 691 + ], + [ + 507, + 122, + 749 + ], + [ + 520, + 108, + 750 + ], + [ + 523, + 105, + 808 + ], + [ + 540, + 91, + 809 + ], + [ + 546, + 87, + 812 + ], + [ + 554, + 83, + 869 + ], + [ + 562, + 79, + 871 + ], + [ + 564, + 76, + 937 + ], + [ + 564, + 75, + 939 + ], + [ + 564, + 74, + 1005 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x05e3": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 475, + 93, + 0 + ], + [ + 475, + 92, + 67 + ], + [ + 474, + 92, + 92 + ], + [ + 473, + 92, + 143 + ], + [ + 470, + 89, + 144 + ], + [ + 468, + 88, + 205 + ], + [ + 465, + 83, + 205 + ], + [ + 464, + 82, + 261 + ], + [ + 463, + 77, + 262 + ], + [ + 463, + 75, + 267 + ], + [ + 465, + 73, + 322 + ], + [ + 470, + 67, + 323 + ], + [ + 482, + 63, + 384 + ], + [ + 490, + 58, + 386 + ], + [ + 501, + 51, + 444 + ], + [ + 510, + 41, + 445 + ], + [ + 514, + 34, + 505 + ], + [ + 515, + 24, + 506 + ], + [ + 515, + 18, + 565 + ], + [ + 511, + 14, + 569 + ], + [ + 504, + 11, + 630 + ], + [ + 497, + 9, + 631 + ], + [ + 494, + 9, + 691 + ], + [ + 479, + 8, + 692 + ], + [ + 475, + 11, + 748 + ], + [ + 469, + 17, + 749 + ], + [ + 468, + 33, + 809 + ], + [ + 473, + 47, + 810 + ], + [ + 482, + 64, + 869 + ], + [ + 494, + 81, + 870 + ], + [ + 507, + 100, + 930 + ], + [ + 513, + 111, + 931 + ], + [ + 515, + 121, + 991 + ], + [ + 516, + 134, + 992 + ], + [ + 516, + 143, + 1053 + ], + [ + 508, + 152, + 1055 + ], + [ + 496, + 161, + 1112 + ], + [ + 491, + 164, + 1113 + ], + [ + 485, + 166, + 1115 + ], + [ + 478, + 168, + 1172 + ], + [ + 467, + 169, + 1173 + ], + [ + 457, + 169, + 1233 + ], + [ + 453, + 167, + 1234 + ], + [ + 450, + 165, + 1235 + ], + [ + 446, + 159, + 1297 + ], + [ + 444, + 154, + 1299 + ], + [ + 443, + 150, + 1301 + ], + [ + 443, + 141, + 1356 + ], + [ + 445, + 135, + 1356 + ], + [ + 454, + 126, + 1417 + ], + [ + 472, + 117, + 1418 + ], + [ + 490, + 112, + 1477 + ], + [ + 502, + 109, + 1478 + ], + [ + 506, + 107, + 1540 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x05e4": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 439, + 67, + 0 + ], + [ + 439, + 66, + 69 + ], + [ + 440, + 64, + 85 + ], + [ + 442, + 63, + 134 + ], + [ + 451, + 57, + 135 + ], + [ + 463, + 55, + 200 + ], + [ + 475, + 53, + 200 + ], + [ + 486, + 53, + 255 + ], + [ + 497, + 56, + 256 + ], + [ + 507, + 64, + 315 + ], + [ + 512, + 69, + 316 + ], + [ + 516, + 74, + 318 + ], + [ + 519, + 82, + 377 + ], + [ + 524, + 95, + 378 + ], + [ + 524, + 101, + 381 + ], + [ + 525, + 109, + 438 + ], + [ + 525, + 119, + 439 + ], + [ + 522, + 138, + 498 + ], + [ + 515, + 153, + 499 + ], + [ + 513, + 155, + 502 + ], + [ + 505, + 164, + 559 + ], + [ + 500, + 171, + 560 + ], + [ + 498, + 173, + 566 + ], + [ + 494, + 177, + 620 + ], + [ + 485, + 183, + 621 + ], + [ + 478, + 185, + 688 + ], + [ + 471, + 184, + 690 + ], + [ + 469, + 182, + 693 + ], + [ + 462, + 172, + 751 + ], + [ + 456, + 160, + 753 + ], + [ + 453, + 157, + 757 + ], + [ + 452, + 152, + 813 + ], + [ + 449, + 143, + 814 + ], + [ + 449, + 137, + 874 + ], + [ + 449, + 131, + 876 + ], + [ + 456, + 125, + 927 + ], + [ + 464, + 120, + 927 + ], + [ + 470, + 119, + 986 + ], + [ + 476, + 118, + 987 + ], + [ + 484, + 117, + 1046 + ], + [ + 485, + 117, + 1047 + ], + [ + 486, + 117, + 1107 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x05e5": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 507, + 123, + 0 + ], + [ + 505, + 124, + 164 + ], + [ + 502, + 125, + 189 + ], + [ + 501, + 126, + 234 + ], + [ + 499, + 126, + 234 + ], + [ + 497, + 127, + 237 + ], + [ + 496, + 128, + 301 + ], + [ + 482, + 138, + 302 + ], + [ + 476, + 144, + 356 + ], + [ + 470, + 153, + 356 + ], + [ + 466, + 160, + 416 + ], + [ + 463, + 168, + 417 + ], + [ + 461, + 177, + 484 + ], + [ + 461, + 189, + 486 + ], + [ + 463, + 193, + 539 + ], + [ + 464, + 195, + 540 + ], + [ + 467, + 201, + 540 + ], + [ + 472, + 204, + 599 + ], + [ + 478, + 208, + 600 + ], + [ + 479, + 209, + 604 + ], + [ + 484, + 210, + 660 + ], + [ + 492, + 210, + 661 + ], + [ + 515, + 208, + 721 + ], + [ + 530, + 205, + 722 + ], + [ + 538, + 196, + 782 + ], + [ + 540, + 189, + 783 + ], + [ + 542, + 177, + 788 + ], + [ + 543, + 174, + 843 + ], + [ + 543, + 162, + 844 + ], + [ + 535, + 149, + 904 + ], + [ + 517, + 135, + 905 + ], + [ + 500, + 129, + 970 + ], + [ + 479, + 122, + 971 + ], + [ + 467, + 117, + 1028 + ], + [ + 456, + 110, + 1030 + ], + [ + 450, + 105, + 1088 + ], + [ + 449, + 100, + 1089 + ], + [ + 448, + 94, + 1148 + ], + [ + 447, + 85, + 1149 + ], + [ + 453, + 73, + 1209 + ], + [ + 460, + 65, + 1210 + ], + [ + 473, + 55, + 1269 + ], + [ + 489, + 42, + 1270 + ], + [ + 501, + 32, + 1331 + ], + [ + 510, + 28, + 1333 + ], + [ + 523, + 25, + 1390 + ], + [ + 532, + 24, + 1392 + ], + [ + 535, + 24, + 1396 + ], + [ + 536, + 24, + 1451 + ], + [ + 537, + 26, + 1452 + ], + [ + 535, + 44, + 1512 + ], + [ + 530, + 52, + 1513 + ], + [ + 522, + 59, + 1516 + ], + [ + 506, + 66, + 1574 + ], + [ + 486, + 71, + 1575 + ], + [ + 439, + 71, + 1634 + ], + [ + 416, + 72, + 1636 + ], + [ + 408, + 72, + 1637 + ], + [ + 393, + 72, + 1694 + ], + [ + 386, + 71, + 1695 + ], + [ + 384, + 68, + 1757 + ], + [ + 384, + 67, + 1758 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x05e6": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 458, + 51, + 0 + ], + [ + 459, + 51, + 115 + ], + [ + 460, + 49, + 139 + ], + [ + 462, + 47, + 195 + ], + [ + 469, + 43, + 195 + ], + [ + 475, + 40, + 255 + ], + [ + 485, + 36, + 256 + ], + [ + 495, + 33, + 316 + ], + [ + 510, + 33, + 317 + ], + [ + 525, + 36, + 378 + ], + [ + 528, + 40, + 379 + ], + [ + 530, + 47, + 437 + ], + [ + 532, + 60, + 438 + ], + [ + 532, + 63, + 442 + ], + [ + 534, + 75, + 497 + ], + [ + 533, + 84, + 499 + ], + [ + 530, + 87, + 558 + ], + [ + 528, + 91, + 559 + ], + [ + 525, + 93, + 562 + ], + [ + 524, + 95, + 619 + ], + [ + 519, + 100, + 620 + ], + [ + 512, + 104, + 686 + ], + [ + 511, + 105, + 687 + ], + [ + 510, + 106, + 691 + ], + [ + 509, + 106, + 742 + ], + [ + 507, + 107, + 746 + ], + [ + 506, + 108, + 803 + ], + [ + 504, + 109, + 804 + ], + [ + 503, + 109, + 864 + ], + [ + 501, + 110, + 865 + ], + [ + 500, + 110, + 925 + ], + [ + 499, + 110, + 985 + ], + [ + 498, + 111, + 988 + ], + [ + 499, + 111, + 1227 + ], + [ + 502, + 111, + 1286 + ], + [ + 508, + 111, + 1287 + ], + [ + 512, + 113, + 1349 + ], + [ + 516, + 119, + 1351 + ], + [ + 516, + 121, + 1355 + ], + [ + 519, + 129, + 1408 + ], + [ + 522, + 137, + 1408 + ], + [ + 522, + 149, + 1469 + ], + [ + 519, + 158, + 1469 + ], + [ + 513, + 169, + 1532 + ], + [ + 507, + 178, + 1534 + ], + [ + 497, + 187, + 1590 + ], + [ + 489, + 189, + 1591 + ], + [ + 485, + 190, + 1594 + ], + [ + 483, + 190, + 1655 + ], + [ + 469, + 189, + 1656 + ], + [ + 453, + 182, + 1712 + ], + [ + 449, + 179, + 1713 + ], + [ + 447, + 176, + 1715 + ], + [ + 444, + 175, + 1772 + ], + [ + 443, + 175, + 1773 + ], + [ + 443, + 174, + 1804 + ], + [ + 441, + 171, + 1834 + ], + [ + 441, + 170, + 2227 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x05e7": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 441, + 77, + 0 + ], + [ + 442, + 76, + 76 + ], + [ + 442, + 75, + 100 + ], + [ + 442, + 73, + 142 + ], + [ + 444, + 71, + 143 + ], + [ + 445, + 69, + 171 + ], + [ + 451, + 63, + 202 + ], + [ + 452, + 60, + 203 + ], + [ + 455, + 57, + 262 + ], + [ + 463, + 53, + 263 + ], + [ + 468, + 51, + 323 + ], + [ + 473, + 49, + 324 + ], + [ + 480, + 48, + 384 + ], + [ + 492, + 48, + 385 + ], + [ + 498, + 48, + 387 + ], + [ + 506, + 48, + 449 + ], + [ + 510, + 52, + 450 + ], + [ + 513, + 57, + 505 + ], + [ + 516, + 65, + 506 + ], + [ + 517, + 68, + 508 + ], + [ + 519, + 75, + 566 + ], + [ + 520, + 81, + 567 + ], + [ + 520, + 85, + 628 + ], + [ + 521, + 92, + 629 + ], + [ + 521, + 93, + 689 + ], + [ + 521, + 94, + 1164 + ] + ], + [ + [ + 480, + 79, + 1560 + ], + [ + 480, + 80, + 1631 + ], + [ + 479, + 84, + 1661 + ], + [ + 476, + 94, + 1722 + ], + [ + 473, + 110, + 1723 + ], + [ + 471, + 120, + 1784 + ], + [ + 467, + 133, + 1785 + ], + [ + 464, + 144, + 1844 + ], + [ + 461, + 155, + 1845 + ], + [ + 457, + 163, + 1907 + ], + [ + 453, + 172, + 1909 + ], + [ + 451, + 177, + 1971 + ], + [ + 450, + 179, + 1971 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x05e8": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 389, + 81, + 0 + ], + [ + 389, + 80, + 227 + ], + [ + 389, + 79, + 254 + ], + [ + 389, + 78, + 300 + ], + [ + 391, + 74, + 362 + ], + [ + 393, + 72, + 363 + ], + [ + 395, + 70, + 364 + ], + [ + 395, + 69, + 423 + ], + [ + 401, + 65, + 425 + ], + [ + 405, + 62, + 427 + ], + [ + 409, + 60, + 484 + ], + [ + 421, + 56, + 485 + ], + [ + 428, + 55, + 544 + ], + [ + 435, + 55, + 545 + ], + [ + 441, + 55, + 547 + ], + [ + 452, + 57, + 605 + ], + [ + 464, + 62, + 606 + ], + [ + 471, + 67, + 666 + ], + [ + 477, + 72, + 667 + ], + [ + 481, + 79, + 727 + ], + [ + 485, + 88, + 729 + ], + [ + 486, + 92, + 731 + ], + [ + 488, + 98, + 791 + ], + [ + 489, + 106, + 792 + ], + [ + 490, + 108, + 794 + ], + [ + 490, + 113, + 845 + ], + [ + 491, + 117, + 847 + ], + [ + 491, + 121, + 878 + ], + [ + 491, + 124, + 879 + ], + [ + 491, + 131, + 939 + ], + [ + 492, + 138, + 940 + ], + [ + 492, + 146, + 1000 + ], + [ + 492, + 149, + 1001 + ], + [ + 491, + 156, + 1002 + ], + [ + 490, + 158, + 1061 + ], + [ + 486, + 164, + 1062 + ], + [ + 484, + 170, + 1066 + ], + [ + 483, + 172, + 1123 + ], + [ + 481, + 178, + 1124 + ], + [ + 480, + 181, + 1184 + ], + [ + 479, + 182, + 1186 + ], + [ + 478, + 182, + 1187 + ], + [ + 478, + 183, + 1245 + ], + [ + 477, + 184, + 1246 + ], + [ + 476, + 185, + 1307 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x05e9": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 491, + 116, + 0 + ], + [ + 492, + 116, + 124 + ], + [ + 493, + 116, + 164 + ], + [ + 494, + 116, + 197 + ], + [ + 496, + 116, + 198 + ], + [ + 498, + 115, + 257 + ], + [ + 501, + 115, + 258 + ], + [ + 503, + 114, + 259 + ], + [ + 508, + 113, + 318 + ], + [ + 509, + 113, + 319 + ], + [ + 513, + 112, + 323 + ], + [ + 516, + 111, + 380 + ], + [ + 524, + 108, + 381 + ], + [ + 532, + 101, + 442 + ], + [ + 536, + 98, + 444 + ], + [ + 550, + 86, + 503 + ], + [ + 555, + 83, + 504 + ], + [ + 560, + 78, + 507 + ], + [ + 563, + 73, + 565 + ], + [ + 567, + 65, + 566 + ], + [ + 570, + 59, + 626 + ], + [ + 573, + 54, + 627 + ], + [ + 573, + 52, + 686 + ], + [ + 573, + 51, + 687 + ], + [ + 572, + 51, + 748 + ], + [ + 567, + 51, + 749 + ], + [ + 559, + 51, + 808 + ], + [ + 550, + 52, + 809 + ], + [ + 539, + 54, + 870 + ], + [ + 530, + 58, + 871 + ], + [ + 522, + 62, + 931 + ], + [ + 515, + 65, + 932 + ], + [ + 507, + 72, + 997 + ], + [ + 499, + 79, + 1000 + ], + [ + 495, + 83, + 1059 + ], + [ + 486, + 95, + 1061 + ], + [ + 484, + 107, + 1113 + ], + [ + 480, + 117, + 1114 + ], + [ + 477, + 126, + 1173 + ], + [ + 476, + 142, + 1174 + ], + [ + 477, + 151, + 1236 + ], + [ + 479, + 157, + 1239 + ], + [ + 480, + 159, + 1295 + ], + [ + 490, + 170, + 1296 + ], + [ + 498, + 173, + 1357 + ], + [ + 511, + 174, + 1357 + ], + [ + 518, + 174, + 1416 + ], + [ + 532, + 174, + 1417 + ], + [ + 543, + 172, + 1482 + ], + [ + 551, + 169, + 1483 + ], + [ + 555, + 167, + 1484 + ], + [ + 557, + 166, + 1541 + ], + [ + 562, + 165, + 1543 + ], + [ + 570, + 163, + 1599 + ], + [ + 571, + 163, + 1600 + ], + [ + 571, + 162, + 1660 + ], + [ + 572, + 162, + 1661 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x05ea": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 471, + 66, + 0 + ], + [ + 471, + 69, + 63 + ], + [ + 471, + 72, + 64 + ], + [ + 471, + 77, + 127 + ], + [ + 472, + 81, + 128 + ], + [ + 474, + 90, + 131 + ], + [ + 476, + 99, + 189 + ], + [ + 476, + 110, + 190 + ], + [ + 476, + 113, + 249 + ], + [ + 474, + 130, + 251 + ], + [ + 473, + 132, + 252 + ], + [ + 472, + 137, + 302 + ], + [ + 471, + 140, + 303 + ], + [ + 469, + 143, + 307 + ], + [ + 466, + 149, + 362 + ], + [ + 466, + 151, + 363 + ], + [ + 462, + 157, + 364 + ], + [ + 460, + 161, + 424 + ], + [ + 456, + 163, + 427 + ], + [ + 449, + 167, + 489 + ], + [ + 443, + 170, + 489 + ], + [ + 442, + 170, + 492 + ], + [ + 429, + 172, + 549 + ], + [ + 422, + 173, + 606 + ], + [ + 420, + 173, + 607 + ], + [ + 417, + 174, + 612 + ], + [ + 415, + 174, + 667 + ], + [ + 410, + 175, + 668 + ], + [ + 408, + 175, + 728 + ], + [ + 407, + 176, + 729 + ], + [ + 406, + 176, + 820 + ] + ], + [ + [ + 469, + 65, + 1895 + ], + [ + 470, + 65, + 1940 + ], + [ + 472, + 62, + 1941 + ], + [ + 477, + 60, + 2002 + ], + [ + 482, + 58, + 2003 + ], + [ + 492, + 56, + 2063 + ], + [ + 506, + 55, + 2064 + ], + [ + 523, + 55, + 2123 + ], + [ + 538, + 60, + 2124 + ], + [ + 543, + 62, + 2187 + ], + [ + 550, + 70, + 2189 + ], + [ + 553, + 74, + 2191 + ], + [ + 554, + 77, + 2245 + ], + [ + 559, + 86, + 2246 + ], + [ + 561, + 91, + 2306 + ], + [ + 564, + 98, + 2307 + ], + [ + 566, + 103, + 2308 + ], + [ + 568, + 110, + 2367 + ], + [ + 569, + 116, + 2368 + ], + [ + 569, + 118, + 2428 + ], + [ + 569, + 124, + 2430 + ], + [ + 570, + 130, + 2494 + ], + [ + 570, + 131, + 2494 + ], + [ + 570, + 133, + 2555 + ], + [ + 570, + 135, + 2556 + ], + [ + 570, + 137, + 2613 + ], + [ + 570, + 138, + 2615 + ], + [ + 570, + 139, + 2671 + ], + [ + 570, + 142, + 2672 + ], + [ + 569, + 146, + 2733 + ], + [ + 569, + 150, + 2734 + ], + [ + 568, + 154, + 2794 + ], + [ + 568, + 156, + 2794 + ], + [ + 568, + 158, + 2795 + ], + [ + 568, + 161, + 2855 + ], + [ + 567, + 164, + 2857 + ], + [ + 567, + 166, + 2916 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x20aa": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 593, + 121, + 0 + ], + [ + 593, + 123, + 53 + ], + [ + 593, + 124, + 83 + ], + [ + 593, + 126, + 85 + ], + [ + 593, + 130, + 143 + ], + [ + 593, + 141, + 144 + ], + [ + 591, + 153, + 206 + ], + [ + 587, + 164, + 206 + ], + [ + 581, + 173, + 265 + ], + [ + 576, + 177, + 266 + ], + [ + 571, + 180, + 267 + ], + [ + 560, + 184, + 326 + ], + [ + 544, + 189, + 327 + ], + [ + 532, + 191, + 388 + ], + [ + 517, + 191, + 389 + ], + [ + 507, + 189, + 449 + ], + [ + 492, + 186, + 450 + ], + [ + 487, + 184, + 451 + ], + [ + 482, + 178, + 518 + ], + [ + 474, + 171, + 519 + ], + [ + 471, + 165, + 571 + ], + [ + 470, + 159, + 572 + ], + [ + 470, + 147, + 634 + ], + [ + 471, + 137, + 635 + ], + [ + 472, + 132, + 636 + ], + [ + 473, + 128, + 694 + ], + [ + 476, + 123, + 695 + ], + [ + 476, + 122, + 756 + ], + [ + 476, + 121, + 757 + ] + ], + [ + [ + 537, + 136, + 2303 + ], + [ + 537, + 134, + 2379 + ], + [ + 537, + 132, + 2395 + ], + [ + 537, + 130, + 2453 + ], + [ + 537, + 118, + 2453 + ], + [ + 534, + 95, + 2519 + ], + [ + 530, + 81, + 2520 + ], + [ + 525, + 69, + 2576 + ], + [ + 523, + 66, + 2577 + ], + [ + 521, + 63, + 2579 + ], + [ + 519, + 60, + 2636 + ], + [ + 508, + 56, + 2637 + ], + [ + 503, + 55, + 2696 + ], + [ + 492, + 55, + 2697 + ], + [ + 487, + 55, + 2700 + ], + [ + 481, + 55, + 2756 + ], + [ + 467, + 58, + 2757 + ], + [ + 453, + 65, + 2818 + ], + [ + 439, + 74, + 2819 + ], + [ + 429, + 82, + 2879 + ], + [ + 423, + 86, + 2880 + ], + [ + 420, + 93, + 2943 + ], + [ + 417, + 102, + 2945 + ], + [ + 417, + 104, + 2948 + ], + [ + 415, + 109, + 3006 + ], + [ + 415, + 119, + 3007 + ], + [ + 415, + 124, + 3011 + ], + [ + 415, + 127, + 3062 + ], + [ + 415, + 136, + 3065 + ], + [ + 415, + 139, + 3128 + ], + [ + 415, + 140, + 3128 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + } +} diff --git a/tests/auto/inputpanel/data/inputpanel/unipen_data_japanese.js b/tests/auto/inputpanel/data/inputpanel/unipen_data_japanese.js new file mode 100644 index 00000000..bef4fc56 --- /dev/null +++ b/tests/auto/inputpanel/data/inputpanel/unipen_data_japanese.js @@ -0,0 +1,2503 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +var unipenData = { + "0x65e5": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 113, + 59, + 0 + ], + [ + 113, + 64, + 56 + ], + [ + 113, + 71, + 86 + ], + [ + 113, + 78, + 92 + ], + [ + 113, + 85, + 148 + ], + [ + 113, + 95, + 149 + ], + [ + 113, + 109, + 212 + ], + [ + 111, + 127, + 213 + ], + [ + 111, + 131, + 268 + ], + [ + 111, + 143, + 269 + ], + [ + 110, + 150, + 330 + ], + [ + 109, + 156, + 331 + ], + [ + 109, + 160, + 391 + ], + [ + 109, + 164, + 392 + ], + [ + 109, + 167, + 453 + ], + [ + 109, + 170, + 455 + ], + [ + 109, + 171, + 512 + ], + [ + 109, + 172, + 513 + ], + [ + 109, + 173, + 516 + ], + [ + 109, + 175, + 573 + ], + [ + 109, + 177, + 634 + ], + [ + 109, + 178, + 636 + ], + [ + 110, + 179, + 698 + ], + [ + 110, + 180, + 701 + ] + ], + [ + [ + 116, + 58, + 1545 + ], + [ + 117, + 58, + 1612 + ], + [ + 130, + 57, + 1640 + ], + [ + 153, + 58, + 1699 + ], + [ + 165, + 59, + 1700 + ], + [ + 187, + 60, + 1764 + ], + [ + 195, + 62, + 1766 + ], + [ + 200, + 63, + 1820 + ], + [ + 202, + 63, + 1821 + ], + [ + 203, + 63, + 2004 + ], + [ + 203, + 65, + 2061 + ], + [ + 203, + 69, + 2061 + ], + [ + 204, + 72, + 2124 + ], + [ + 204, + 87, + 2125 + ], + [ + 203, + 90, + 2183 + ], + [ + 200, + 103, + 2185 + ], + [ + 198, + 115, + 2188 + ], + [ + 198, + 119, + 2248 + ], + [ + 197, + 139, + 2248 + ], + [ + 196, + 148, + 2304 + ], + [ + 195, + 158, + 2307 + ], + [ + 195, + 160, + 2308 + ], + [ + 195, + 165, + 2364 + ], + [ + 195, + 173, + 2365 + ], + [ + 194, + 179, + 2425 + ], + [ + 194, + 181, + 2426 + ], + [ + 194, + 185, + 2427 + ], + [ + 194, + 187, + 2485 + ], + [ + 193, + 190, + 2486 + ], + [ + 193, + 189, + 2740 + ] + ], + [ + [ + 113, + 123, + 3457 + ], + [ + 114, + 123, + 3517 + ], + [ + 120, + 123, + 3545 + ], + [ + 127, + 123, + 3547 + ], + [ + 131, + 123, + 3610 + ], + [ + 166, + 126, + 3611 + ], + [ + 185, + 127, + 3669 + ], + [ + 194, + 128, + 3670 + ], + [ + 195, + 128, + 3731 + ] + ], + [ + [ + 110, + 180, + 4616 + ], + [ + 110, + 181, + 4683 + ], + [ + 115, + 181, + 4701 + ], + [ + 122, + 182, + 4765 + ], + [ + 143, + 182, + 4765 + ], + [ + 174, + 183, + 4820 + ], + [ + 179, + 184, + 4821 + ], + [ + 181, + 184, + 4824 + ], + [ + 187, + 184, + 4882 + ], + [ + 188, + 184, + 4972 + ], + [ + 190, + 184, + 5036 + ], + [ + 191, + 184, + 5096 + ], + [ + 192, + 184, + 5098 + ], + [ + 193, + 184, + 5157 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x672c": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 314, + 61, + 0 + ], + [ + 315, + 61, + 71 + ], + [ + 319, + 61, + 95 + ], + [ + 329, + 61, + 154 + ], + [ + 341, + 61, + 155 + ], + [ + 355, + 61, + 215 + ], + [ + 381, + 61, + 216 + ], + [ + 398, + 60, + 277 + ], + [ + 402, + 60, + 277 + ], + [ + 413, + 60, + 279 + ], + [ + 424, + 60, + 340 + ], + [ + 436, + 61, + 342 + ], + [ + 437, + 61, + 343 + ], + [ + 443, + 61, + 398 + ], + [ + 449, + 62, + 399 + ], + [ + 452, + 63, + 462 + ], + [ + 453, + 63, + 599 + ], + [ + 452, + 62, + 871 + ] + ], + [ + [ + 386, + 40, + 2172 + ], + [ + 386, + 41, + 2327 + ], + [ + 386, + 45, + 2351 + ], + [ + 386, + 48, + 2415 + ], + [ + 386, + 51, + 2418 + ], + [ + 386, + 54, + 2423 + ], + [ + 386, + 60, + 2479 + ], + [ + 384, + 69, + 2480 + ], + [ + 384, + 72, + 2537 + ], + [ + 384, + 89, + 2539 + ], + [ + 383, + 102, + 2596 + ], + [ + 382, + 113, + 2597 + ], + [ + 382, + 117, + 2599 + ], + [ + 381, + 123, + 2657 + ], + [ + 380, + 130, + 2658 + ], + [ + 380, + 135, + 2718 + ], + [ + 380, + 143, + 2718 + ], + [ + 380, + 147, + 2779 + ], + [ + 380, + 151, + 2780 + ], + [ + 380, + 157, + 2840 + ], + [ + 380, + 162, + 2841 + ], + [ + 380, + 163, + 2900 + ], + [ + 380, + 165, + 2901 + ], + [ + 380, + 168, + 2968 + ], + [ + 380, + 170, + 2970 + ], + [ + 380, + 173, + 3021 + ], + [ + 380, + 174, + 3082 + ], + [ + 380, + 175, + 3087 + ], + [ + 380, + 176, + 3143 + ], + [ + 380, + 177, + 3204 + ], + [ + 380, + 178, + 3266 + ] + ], + [ + [ + 386, + 66, + 4292 + ], + [ + 383, + 68, + 4355 + ], + [ + 380, + 71, + 4386 + ], + [ + 374, + 78, + 4391 + ], + [ + 366, + 85, + 4444 + ], + [ + 360, + 88, + 4445 + ], + [ + 357, + 91, + 4446 + ], + [ + 346, + 97, + 4505 + ], + [ + 345, + 98, + 4506 + ], + [ + 328, + 105, + 4565 + ], + [ + 323, + 108, + 4566 + ], + [ + 321, + 109, + 4626 + ], + [ + 322, + 108, + 4959 + ] + ], + [ + [ + 382, + 63, + 5579 + ], + [ + 383, + 64, + 5630 + ], + [ + 385, + 67, + 5631 + ], + [ + 387, + 71, + 5692 + ], + [ + 391, + 80, + 5693 + ], + [ + 394, + 85, + 5695 + ], + [ + 397, + 90, + 5750 + ], + [ + 403, + 99, + 5751 + ], + [ + 407, + 102, + 5811 + ], + [ + 416, + 108, + 5812 + ], + [ + 417, + 110, + 5815 + ], + [ + 424, + 114, + 5872 + ], + [ + 427, + 115, + 5873 + ], + [ + 433, + 118, + 5935 + ], + [ + 436, + 121, + 5936 + ], + [ + 439, + 123, + 5997 + ], + [ + 440, + 123, + 6111 + ] + ], + [ + [ + 321, + 131, + 7508 + ], + [ + 323, + 131, + 7590 + ], + [ + 325, + 131, + 7611 + ], + [ + 341, + 131, + 7661 + ], + [ + 369, + 133, + 7662 + ], + [ + 387, + 134, + 7723 + ], + [ + 397, + 135, + 7723 + ], + [ + 404, + 135, + 7784 + ], + [ + 406, + 135, + 7785 + ], + [ + 407, + 135, + 7880 + ], + [ + 408, + 135, + 8103 + ], + [ + 409, + 135, + 8147 + ], + [ + 410, + 135, + 8148 + ], + [ + 414, + 135, + 8208 + ], + [ + 416, + 135, + 8271 + ], + [ + 418, + 135, + 8330 + ], + [ + 419, + 135, + 8330 + ], + [ + 421, + 135, + 8391 + ], + [ + 422, + 135, + 8453 + ], + [ + 423, + 135, + 8456 + ], + [ + 424, + 135, + 8516 + ], + [ + 425, + 135, + 8519 + ], + [ + 426, + 135, + 8735 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0x8a9e": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 513, + 47, + 0 + ], + [ + 514, + 47, + 83 + ], + [ + 515, + 47, + 106 + ], + [ + 517, + 47, + 148 + ], + [ + 524, + 48, + 149 + ], + [ + 531, + 48, + 209 + ], + [ + 538, + 49, + 210 + ], + [ + 542, + 49, + 210 + ], + [ + 548, + 50, + 276 + ], + [ + 556, + 51, + 276 + ], + [ + 557, + 51, + 331 + ], + [ + 559, + 51, + 398 + ], + [ + 563, + 51, + 399 + ] + ], + [ + [ + 509, + 76, + 1311 + ], + [ + 510, + 76, + 1365 + ], + [ + 512, + 76, + 1395 + ], + [ + 519, + 75, + 1396 + ], + [ + 522, + 75, + 1450 + ], + [ + 526, + 74, + 1451 + ], + [ + 530, + 74, + 1451 + ], + [ + 536, + 74, + 1511 + ], + [ + 545, + 74, + 1511 + ], + [ + 547, + 74, + 1514 + ], + [ + 552, + 74, + 1572 + ], + [ + 554, + 74, + 1633 + ], + [ + 557, + 74, + 1634 + ], + [ + 559, + 74, + 1694 + ], + [ + 560, + 73, + 1695 + ], + [ + 561, + 73, + 1834 + ], + [ + 562, + 73, + 1875 + ], + [ + 563, + 73, + 1876 + ], + [ + 564, + 73, + 1935 + ] + ], + [ + [ + 509, + 97, + 4408 + ], + [ + 510, + 97, + 4480 + ], + [ + 514, + 96, + 4483 + ], + [ + 518, + 96, + 4512 + ], + [ + 526, + 96, + 4569 + ], + [ + 528, + 96, + 4570 + ], + [ + 538, + 95, + 4629 + ], + [ + 551, + 95, + 4630 + ], + [ + 554, + 95, + 4689 + ], + [ + 556, + 95, + 4690 + ], + [ + 557, + 95, + 4752 + ], + [ + 558, + 95, + 4811 + ], + [ + 559, + 95, + 4811 + ], + [ + 560, + 94, + 4875 + ], + [ + 561, + 94, + 4877 + ], + [ + 562, + 94, + 4937 + ] + ], + [ + [ + 512, + 120, + 8559 + ], + [ + 512, + 121, + 8626 + ], + [ + 512, + 123, + 8651 + ], + [ + 512, + 126, + 8722 + ], + [ + 512, + 132, + 8723 + ], + [ + 512, + 140, + 8784 + ], + [ + 511, + 142, + 8786 + ], + [ + 510, + 146, + 8787 + ], + [ + 509, + 148, + 8843 + ], + [ + 508, + 152, + 8844 + ], + [ + 508, + 157, + 8904 + ], + [ + 508, + 161, + 8905 + ], + [ + 508, + 162, + 8967 + ], + [ + 507, + 162, + 8969 + ] + ], + [ + [ + 510, + 119, + 9777 + ], + [ + 513, + 117, + 9846 + ], + [ + 514, + 116, + 9847 + ], + [ + 518, + 116, + 9851 + ], + [ + 522, + 116, + 9907 + ], + [ + 532, + 116, + 9908 + ], + [ + 540, + 116, + 9969 + ], + [ + 542, + 116, + 9971 + ], + [ + 544, + 116, + 10036 + ], + [ + 545, + 116, + 10090 + ], + [ + 546, + 116, + 10151 + ], + [ + 547, + 116, + 10154 + ], + [ + 548, + 116, + 10214 + ], + [ + 551, + 118, + 10220 + ], + [ + 552, + 118, + 10273 + ], + [ + 553, + 119, + 10274 + ], + [ + 554, + 119, + 10274 + ], + [ + 556, + 120, + 10334 + ], + [ + 557, + 120, + 10398 + ], + [ + 558, + 121, + 10456 + ], + [ + 559, + 121, + 10457 + ], + [ + 560, + 121, + 10524 + ], + [ + 560, + 124, + 10576 + ], + [ + 561, + 126, + 10578 + ], + [ + 561, + 128, + 10638 + ], + [ + 561, + 133, + 10639 + ], + [ + 561, + 138, + 10698 + ], + [ + 561, + 144, + 10699 + ], + [ + 560, + 147, + 10761 + ], + [ + 558, + 152, + 10763 + ], + [ + 558, + 153, + 10765 + ], + [ + 558, + 155, + 10818 + ], + [ + 558, + 158, + 10819 + ], + [ + 558, + 161, + 10881 + ], + [ + 558, + 162, + 10941 + ], + [ + 558, + 164, + 10942 + ] + ], + [ + [ + 507, + 164, + 11623 + ], + [ + 508, + 164, + 11682 + ], + [ + 510, + 164, + 11701 + ], + [ + 512, + 163, + 11706 + ], + [ + 517, + 163, + 11761 + ], + [ + 520, + 163, + 11762 + ], + [ + 527, + 162, + 11763 + ], + [ + 532, + 162, + 11821 + ], + [ + 536, + 161, + 11822 + ], + [ + 537, + 161, + 11882 + ], + [ + 538, + 161, + 11883 + ], + [ + 541, + 161, + 11943 + ], + [ + 543, + 161, + 11944 + ], + [ + 544, + 161, + 12010 + ], + [ + 548, + 161, + 12012 + ], + [ + 550, + 161, + 12067 + ], + [ + 552, + 161, + 12069 + ], + [ + 554, + 161, + 12126 + ], + [ + 555, + 161, + 12188 + ], + [ + 556, + 161, + 12189 + ], + [ + 559, + 161, + 12251 + ], + [ + 560, + 161, + 12259 + ], + [ + 562, + 161, + 12313 + ], + [ + 563, + 161, + 12373 + ] + ], + [ + [ + 600, + 48, + 18967 + ], + [ + 601, + 48, + 19050 + ], + [ + 605, + 48, + 19082 + ], + [ + 607, + 48, + 19140 + ], + [ + 610, + 48, + 19141 + ], + [ + 620, + 48, + 19199 + ], + [ + 638, + 48, + 19200 + ], + [ + 651, + 48, + 19260 + ], + [ + 658, + 49, + 19261 + ], + [ + 668, + 51, + 19321 + ], + [ + 673, + 51, + 19321 + ], + [ + 674, + 51, + 19322 + ], + [ + 676, + 51, + 19382 + ], + [ + 683, + 51, + 19383 + ], + [ + 688, + 51, + 19387 + ], + [ + 692, + 50, + 19444 + ], + [ + 696, + 50, + 19446 + ], + [ + 697, + 49, + 19451 + ], + [ + 699, + 49, + 19503 + ], + [ + 701, + 49, + 19504 + ], + [ + 706, + 48, + 19563 + ], + [ + 708, + 48, + 19564 + ], + [ + 709, + 48, + 19631 + ], + [ + 710, + 48, + 19636 + ], + [ + 711, + 48, + 19687 + ] + ], + [ + [ + 624, + 44, + 21231 + ], + [ + 624, + 45, + 21296 + ], + [ + 624, + 49, + 21297 + ], + [ + 624, + 51, + 21356 + ], + [ + 624, + 59, + 21357 + ], + [ + 624, + 60, + 21362 + ], + [ + 624, + 65, + 21416 + ], + [ + 624, + 66, + 21417 + ], + [ + 624, + 71, + 21477 + ], + [ + 624, + 73, + 21539 + ], + [ + 624, + 76, + 21599 + ], + [ + 623, + 78, + 21600 + ], + [ + 623, + 79, + 21661 + ] + ], + [ + [ + 621, + 78, + 23544 + ], + [ + 622, + 78, + 23699 + ], + [ + 623, + 78, + 23726 + ], + [ + 628, + 78, + 23731 + ], + [ + 630, + 78, + 23781 + ], + [ + 640, + 79, + 23782 + ], + [ + 643, + 79, + 23815 + ], + [ + 653, + 80, + 23845 + ], + [ + 661, + 80, + 23847 + ], + [ + 670, + 80, + 23903 + ], + [ + 676, + 79, + 23904 + ], + [ + 677, + 79, + 23979 + ], + [ + 678, + 79, + 24027 + ], + [ + 678, + 80, + 24307 + ], + [ + 678, + 81, + 24360 + ], + [ + 678, + 83, + 24362 + ], + [ + 677, + 88, + 24422 + ], + [ + 676, + 95, + 24423 + ], + [ + 676, + 96, + 24427 + ], + [ + 676, + 100, + 24484 + ], + [ + 676, + 104, + 24485 + ], + [ + 676, + 106, + 24490 + ], + [ + 676, + 108, + 24545 + ], + [ + 676, + 109, + 24546 + ], + [ + 676, + 111, + 24606 + ], + [ + 676, + 112, + 24606 + ], + [ + 676, + 113, + 24670 + ], + [ + 676, + 114, + 24675 + ], + [ + 676, + 116, + 24729 + ], + [ + 676, + 118, + 24789 + ] + ], + [ + [ + 622, + 78, + 25560 + ], + [ + 622, + 79, + 25675 + ], + [ + 622, + 80, + 25703 + ], + [ + 622, + 83, + 25707 + ], + [ + 622, + 89, + 25759 + ], + [ + 622, + 95, + 25763 + ], + [ + 621, + 100, + 25822 + ], + [ + 621, + 105, + 25824 + ], + [ + 621, + 106, + 25827 + ], + [ + 620, + 110, + 25880 + ], + [ + 620, + 112, + 25881 + ], + [ + 620, + 113, + 25943 + ], + [ + 620, + 115, + 26002 + ], + [ + 620, + 116, + 26063 + ] + ], + [ + [ + 592, + 116, + 27111 + ], + [ + 598, + 116, + 27189 + ], + [ + 620, + 116, + 27216 + ], + [ + 637, + 117, + 27275 + ], + [ + 654, + 118, + 27276 + ], + [ + 664, + 119, + 27337 + ], + [ + 674, + 120, + 27339 + ], + [ + 677, + 120, + 27397 + ], + [ + 683, + 120, + 27398 + ], + [ + 687, + 120, + 27458 + ], + [ + 688, + 120, + 27459 + ], + [ + 689, + 120, + 27518 + ], + [ + 692, + 120, + 27519 + ], + [ + 692, + 119, + 27579 + ], + [ + 696, + 119, + 27581 + ], + [ + 697, + 119, + 27639 + ], + [ + 698, + 119, + 27640 + ], + [ + 699, + 119, + 27708 + ], + [ + 700, + 119, + 27761 + ] + ], + [ + [ + 616, + 126, + 30647 + ], + [ + 616, + 128, + 30740 + ], + [ + 616, + 132, + 30771 + ], + [ + 616, + 137, + 30831 + ], + [ + 616, + 143, + 30832 + ], + [ + 616, + 147, + 30835 + ], + [ + 616, + 149, + 30892 + ], + [ + 616, + 154, + 30893 + ], + [ + 616, + 158, + 30951 + ], + [ + 616, + 160, + 30952 + ], + [ + 616, + 163, + 31012 + ], + [ + 616, + 166, + 31013 + ], + [ + 616, + 167, + 31073 + ], + [ + 615, + 168, + 31074 + ], + [ + 615, + 170, + 31136 + ], + [ + 615, + 171, + 31196 + ], + [ + 615, + 172, + 31323 + ] + ], + [ + [ + 614, + 127, + 32047 + ], + [ + 620, + 126, + 32108 + ], + [ + 630, + 125, + 32138 + ], + [ + 640, + 125, + 32200 + ], + [ + 645, + 125, + 32202 + ], + [ + 648, + 125, + 32265 + ], + [ + 653, + 125, + 32320 + ], + [ + 655, + 125, + 32321 + ], + [ + 658, + 125, + 32322 + ], + [ + 659, + 125, + 32381 + ], + [ + 667, + 127, + 32382 + ], + [ + 670, + 127, + 32442 + ], + [ + 672, + 127, + 32442 + ], + [ + 675, + 128, + 32504 + ], + [ + 676, + 128, + 32505 + ], + [ + 677, + 128, + 32564 + ], + [ + 678, + 128, + 32625 + ], + [ + 679, + 128, + 32686 + ], + [ + 680, + 129, + 32755 + ], + [ + 680, + 131, + 32808 + ], + [ + 680, + 132, + 32809 + ], + [ + 679, + 136, + 32868 + ], + [ + 677, + 143, + 32869 + ], + [ + 675, + 152, + 32929 + ], + [ + 675, + 156, + 32930 + ], + [ + 675, + 157, + 32991 + ], + [ + 674, + 161, + 32992 + ], + [ + 674, + 167, + 33051 + ], + [ + 674, + 170, + 33052 + ], + [ + 674, + 171, + 33113 + ], + [ + 674, + 172, + 33114 + ], + [ + 674, + 173, + 33173 + ], + [ + 674, + 174, + 33174 + ], + [ + 674, + 175, + 33238 + ], + [ + 674, + 176, + 33242 + ], + [ + 673, + 176, + 33386 + ] + ], + [ + [ + 617, + 172, + 34039 + ], + [ + 618, + 171, + 34117 + ], + [ + 621, + 170, + 34146 + ], + [ + 622, + 170, + 34147 + ], + [ + 630, + 169, + 34206 + ], + [ + 637, + 169, + 34207 + ], + [ + 641, + 168, + 34212 + ], + [ + 649, + 168, + 34271 + ], + [ + 653, + 168, + 34272 + ], + [ + 660, + 168, + 34275 + ], + [ + 662, + 168, + 34327 + ], + [ + 664, + 168, + 34389 + ], + [ + 667, + 168, + 34391 + ], + [ + 668, + 168, + 34448 + ], + [ + 669, + 169, + 34449 + ], + [ + 670, + 170, + 34509 + ], + [ + 672, + 171, + 34510 + ], + [ + 674, + 171, + 34571 + ], + [ + 675, + 172, + 34632 + ], + [ + 676, + 172, + 34811 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + } +} diff --git a/tests/auto/inputpanel/data/inputpanel/unipen_data_korean.js b/tests/auto/inputpanel/data/inputpanel/unipen_data_korean.js new file mode 100644 index 00000000..1b487c49 --- /dev/null +++ b/tests/auto/inputpanel/data/inputpanel/unipen_data_korean.js @@ -0,0 +1,1708 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +var unipenData = { + "0xad6d": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 379, + 53, + 0 + ], + [ + 380, + 53, + 155 + ], + [ + 382, + 53, + 177 + ], + [ + 385, + 53, + 179 + ], + [ + 391, + 53, + 243 + ], + [ + 400, + 53, + 244 + ], + [ + 421, + 55, + 311 + ], + [ + 437, + 55, + 313 + ], + [ + 441, + 55, + 315 + ], + [ + 448, + 55, + 365 + ], + [ + 454, + 55, + 366 + ], + [ + 461, + 55, + 370 + ], + [ + 467, + 54, + 426 + ], + [ + 472, + 54, + 427 + ], + [ + 475, + 54, + 486 + ], + [ + 477, + 54, + 487 + ], + [ + 478, + 54, + 490 + ], + [ + 479, + 54, + 548 + ], + [ + 480, + 54, + 549 + ], + [ + 482, + 54, + 610 + ], + [ + 485, + 54, + 610 + ], + [ + 488, + 54, + 670 + ], + [ + 489, + 54, + 731 + ], + [ + 489, + 55, + 939 + ], + [ + 489, + 56, + 1003 + ], + [ + 489, + 60, + 1004 + ], + [ + 489, + 64, + 1064 + ], + [ + 489, + 66, + 1065 + ], + [ + 489, + 72, + 1124 + ], + [ + 489, + 75, + 1125 + ], + [ + 489, + 79, + 1131 + ], + [ + 489, + 81, + 1184 + ], + [ + 489, + 86, + 1185 + ], + [ + 489, + 91, + 1245 + ], + [ + 489, + 92, + 1246 + ], + [ + 489, + 97, + 1306 + ], + [ + 489, + 99, + 1307 + ], + [ + 489, + 101, + 1366 + ], + [ + 489, + 102, + 1367 + ], + [ + 489, + 103, + 1427 + ], + [ + 489, + 105, + 1429 + ], + [ + 489, + 106, + 1500 + ], + [ + 489, + 107, + 1549 + ], + [ + 489, + 108, + 1550 + ], + [ + 489, + 109, + 1614 + ] + ], + [ + [ + 383, + 113, + 2999 + ], + [ + 384, + 113, + 3259 + ], + [ + 385, + 112, + 3291 + ], + [ + 386, + 112, + 3360 + ], + [ + 399, + 112, + 3361 + ], + [ + 412, + 112, + 3389 + ], + [ + 434, + 112, + 3449 + ], + [ + 440, + 112, + 3450 + ], + [ + 451, + 112, + 3451 + ], + [ + 455, + 112, + 3510 + ], + [ + 479, + 111, + 3511 + ], + [ + 493, + 110, + 3574 + ], + [ + 506, + 109, + 3576 + ], + [ + 513, + 109, + 3632 + ], + [ + 515, + 109, + 3633 + ], + [ + 516, + 109, + 3636 + ] + ], + [ + [ + 430, + 115, + 5767 + ], + [ + 430, + 116, + 5851 + ], + [ + 432, + 120, + 5884 + ], + [ + 433, + 123, + 5937 + ], + [ + 433, + 127, + 5938 + ], + [ + 434, + 130, + 6000 + ], + [ + 434, + 133, + 6002 + ], + [ + 435, + 139, + 6058 + ], + [ + 435, + 141, + 6059 + ], + [ + 435, + 142, + 6124 + ], + [ + 435, + 143, + 6523 + ] + ], + [ + [ + 393, + 151, + 7943 + ], + [ + 394, + 151, + 8099 + ], + [ + 399, + 150, + 8124 + ], + [ + 412, + 150, + 8184 + ], + [ + 422, + 150, + 8185 + ], + [ + 438, + 150, + 8245 + ], + [ + 448, + 150, + 8246 + ], + [ + 465, + 149, + 8305 + ], + [ + 478, + 149, + 8306 + ], + [ + 485, + 149, + 8366 + ], + [ + 487, + 149, + 8366 + ], + [ + 488, + 149, + 8432 + ], + [ + 489, + 149, + 8490 + ], + [ + 491, + 149, + 8492 + ], + [ + 492, + 149, + 8549 + ], + [ + 492, + 150, + 8835 + ], + [ + 492, + 152, + 8882 + ], + [ + 492, + 155, + 8883 + ], + [ + 492, + 159, + 8944 + ], + [ + 492, + 163, + 8945 + ], + [ + 492, + 168, + 9005 + ], + [ + 491, + 173, + 9005 + ], + [ + 491, + 177, + 9067 + ], + [ + 490, + 182, + 9068 + ], + [ + 490, + 188, + 9126 + ], + [ + 490, + 192, + 9126 + ], + [ + 490, + 193, + 9130 + ], + [ + 490, + 196, + 9188 + ], + [ + 490, + 198, + 9247 + ], + [ + 490, + 200, + 9247 + ], + [ + 490, + 202, + 9307 + ], + [ + 490, + 203, + 9308 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0xc5b4": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 569, + 64, + 0 + ], + [ + 568, + 64, + 53 + ], + [ + 565, + 64, + 54 + ], + [ + 559, + 64, + 114 + ], + [ + 553, + 65, + 115 + ], + [ + 545, + 66, + 174 + ], + [ + 533, + 71, + 175 + ], + [ + 526, + 79, + 242 + ], + [ + 522, + 87, + 245 + ], + [ + 520, + 92, + 246 + ], + [ + 519, + 94, + 296 + ], + [ + 517, + 103, + 297 + ], + [ + 516, + 114, + 357 + ], + [ + 518, + 130, + 358 + ], + [ + 520, + 141, + 417 + ], + [ + 522, + 146, + 418 + ], + [ + 524, + 152, + 478 + ], + [ + 528, + 159, + 479 + ], + [ + 533, + 165, + 540 + ], + [ + 536, + 169, + 541 + ], + [ + 538, + 171, + 601 + ], + [ + 543, + 174, + 601 + ], + [ + 544, + 175, + 604 + ], + [ + 545, + 175, + 662 + ], + [ + 549, + 175, + 664 + ], + [ + 557, + 174, + 723 + ], + [ + 564, + 170, + 727 + ], + [ + 570, + 164, + 789 + ], + [ + 578, + 159, + 793 + ], + [ + 581, + 155, + 849 + ], + [ + 584, + 151, + 849 + ], + [ + 586, + 147, + 852 + ], + [ + 588, + 143, + 904 + ], + [ + 588, + 137, + 905 + ], + [ + 590, + 131, + 907 + ], + [ + 590, + 125, + 965 + ], + [ + 590, + 115, + 966 + ], + [ + 589, + 109, + 997 + ], + [ + 585, + 98, + 1029 + ], + [ + 583, + 88, + 1030 + ], + [ + 580, + 83, + 1089 + ], + [ + 576, + 75, + 1091 + ], + [ + 576, + 73, + 1092 + ], + [ + 572, + 70, + 1151 + ], + [ + 568, + 65, + 1153 + ], + [ + 568, + 64, + 1209 + ], + [ + 567, + 64, + 1453 + ] + ], + [ + [ + 592, + 124, + 2520 + ], + [ + 593, + 124, + 2621 + ], + [ + 595, + 123, + 2645 + ], + [ + 601, + 123, + 2711 + ], + [ + 607, + 122, + 2712 + ], + [ + 614, + 122, + 2779 + ], + [ + 618, + 122, + 2781 + ], + [ + 622, + 121, + 2840 + ], + [ + 623, + 121, + 2957 + ], + [ + 624, + 121, + 3045 + ], + [ + 625, + 120, + 3236 + ] + ], + [ + [ + 614, + 42, + 3848 + ], + [ + 614, + 45, + 3896 + ], + [ + 614, + 47, + 3897 + ], + [ + 614, + 54, + 3900 + ], + [ + 615, + 63, + 3958 + ], + [ + 617, + 76, + 3958 + ], + [ + 619, + 92, + 4017 + ], + [ + 620, + 100, + 4018 + ], + [ + 620, + 115, + 4078 + ], + [ + 620, + 133, + 4079 + ], + [ + 618, + 141, + 4084 + ], + [ + 616, + 153, + 4138 + ], + [ + 616, + 157, + 4139 + ], + [ + 615, + 169, + 4200 + ], + [ + 614, + 176, + 4201 + ], + [ + 614, + 178, + 4205 + ], + [ + 613, + 184, + 4260 + ], + [ + 613, + 188, + 4261 + ], + [ + 613, + 190, + 4420 + ], + [ + 613, + 191, + 4540 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + }, + "0xd55c": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 169, + 59, + 0 + ], + [ + 171, + 59, + 148 + ], + [ + 175, + 59, + 170 + ], + [ + 183, + 59, + 228 + ], + [ + 197, + 59, + 229 + ], + [ + 210, + 59, + 288 + ], + [ + 223, + 61, + 289 + ], + [ + 233, + 61, + 292 + ], + [ + 241, + 61, + 350 + ], + [ + 252, + 62, + 350 + ], + [ + 260, + 62, + 418 + ], + [ + 265, + 62, + 419 + ], + [ + 266, + 62, + 748 + ] + ], + [ + [ + 224, + 27, + 1367 + ], + [ + 223, + 27, + 1414 + ], + [ + 222, + 34, + 1444 + ], + [ + 222, + 39, + 1502 + ], + [ + 223, + 46, + 1503 + ], + [ + 223, + 47, + 1508 + ], + [ + 223, + 50, + 1566 + ], + [ + 224, + 53, + 1568 + ], + [ + 224, + 56, + 1629 + ], + [ + 224, + 57, + 1630 + ], + [ + 225, + 59, + 1630 + ], + [ + 225, + 61, + 1686 + ], + [ + 225, + 62, + 1687 + ] + ], + [ + [ + 244, + 82, + 3184 + ], + [ + 243, + 81, + 3259 + ], + [ + 242, + 81, + 3285 + ], + [ + 238, + 80, + 3349 + ], + [ + 225, + 80, + 3350 + ], + [ + 210, + 80, + 3412 + ], + [ + 198, + 82, + 3414 + ], + [ + 192, + 84, + 3474 + ], + [ + 186, + 88, + 3476 + ], + [ + 184, + 90, + 3478 + ], + [ + 180, + 95, + 3532 + ], + [ + 178, + 100, + 3533 + ], + [ + 178, + 109, + 3595 + ], + [ + 178, + 117, + 3598 + ], + [ + 181, + 125, + 3657 + ], + [ + 186, + 130, + 3658 + ], + [ + 194, + 136, + 3716 + ], + [ + 197, + 137, + 3717 + ], + [ + 199, + 137, + 3775 + ], + [ + 202, + 137, + 3776 + ], + [ + 204, + 137, + 3780 + ], + [ + 206, + 137, + 3835 + ], + [ + 223, + 135, + 3836 + ], + [ + 234, + 133, + 3897 + ], + [ + 240, + 130, + 3898 + ], + [ + 242, + 129, + 3900 + ], + [ + 244, + 128, + 3958 + ], + [ + 251, + 120, + 3959 + ], + [ + 253, + 117, + 4017 + ], + [ + 253, + 114, + 4020 + ], + [ + 253, + 110, + 4081 + ], + [ + 251, + 104, + 4083 + ], + [ + 249, + 99, + 4140 + ], + [ + 247, + 95, + 4141 + ], + [ + 243, + 89, + 4205 + ], + [ + 242, + 86, + 4206 + ], + [ + 242, + 85, + 4212 + ], + [ + 241, + 84, + 4284 + ], + [ + 240, + 84, + 4324 + ], + [ + 239, + 84, + 4596 + ] + ], + [ + [ + 177, + 144, + 6344 + ], + [ + 178, + 144, + 6573 + ], + [ + 178, + 146, + 6600 + ], + [ + 179, + 148, + 6604 + ], + [ + 179, + 150, + 6657 + ], + [ + 180, + 153, + 6658 + ], + [ + 181, + 160, + 6719 + ], + [ + 182, + 167, + 6720 + ], + [ + 183, + 176, + 6779 + ], + [ + 184, + 182, + 6780 + ], + [ + 184, + 185, + 6840 + ], + [ + 185, + 189, + 6841 + ], + [ + 186, + 189, + 7108 + ], + [ + 195, + 189, + 7174 + ], + [ + 206, + 187, + 7234 + ], + [ + 213, + 186, + 7236 + ], + [ + 219, + 186, + 7294 + ], + [ + 224, + 186, + 7296 + ], + [ + 233, + 186, + 7355 + ], + [ + 241, + 185, + 7355 + ], + [ + 252, + 185, + 7417 + ], + [ + 262, + 185, + 7419 + ], + [ + 268, + 186, + 7421 + ], + [ + 276, + 186, + 7475 + ], + [ + 281, + 186, + 7476 + ], + [ + 289, + 186, + 7536 + ], + [ + 290, + 186, + 7537 + ], + [ + 291, + 186, + 7597 + ], + [ + 292, + 186, + 7660 + ], + [ + 293, + 186, + 7724 + ], + [ + 294, + 186, + 7725 + ], + [ + 295, + 186, + 8172 + ] + ], + [ + [ + 283, + 25, + 9136 + ], + [ + 283, + 26, + 9220 + ], + [ + 283, + 27, + 9244 + ], + [ + 283, + 33, + 9299 + ], + [ + 283, + 41, + 9300 + ], + [ + 282, + 53, + 9359 + ], + [ + 282, + 65, + 9359 + ], + [ + 282, + 78, + 9420 + ], + [ + 282, + 92, + 9421 + ], + [ + 281, + 115, + 9481 + ], + [ + 280, + 124, + 9482 + ], + [ + 279, + 133, + 9484 + ], + [ + 279, + 135, + 9542 + ], + [ + 278, + 142, + 9542 + ], + [ + 277, + 148, + 9605 + ], + [ + 277, + 150, + 9607 + ], + [ + 277, + 151, + 9764 + ], + [ + 277, + 153, + 9816 + ], + [ + 277, + 154, + 9876 + ], + [ + 277, + 153, + 10124 + ], + [ + 277, + 151, + 10180 + ] + ], + [ + [ + 282, + 89, + 10651 + ], + [ + 283, + 89, + 10796 + ], + [ + 286, + 89, + 10821 + ], + [ + 288, + 88, + 10879 + ], + [ + 291, + 88, + 10879 + ], + [ + 294, + 88, + 10941 + ], + [ + 295, + 88, + 10941 + ], + [ + 297, + 88, + 11003 + ], + [ + 298, + 88, + 11004 + ], + [ + 299, + 88, + 11061 + ], + [ + 300, + 88, + 11062 + ], + [ + 301, + 88, + 11121 + ], + [ + 302, + 88, + 11123 + ], + [ + 303, + 88, + 11185 + ], + [ + 304, + 88, + 11187 + ], + [ + 305, + 88, + 11189 + ], + [ + 306, + 88, + 11248 + ], + [ + 307, + 88, + 11249 + ], + [ + 309, + 89, + 11304 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + } +} diff --git a/tests/auto/inputpanel/data/inputpanel/unipen_data_simp_chinese.js b/tests/auto/inputpanel/data/inputpanel/unipen_data_simp_chinese.js new file mode 100644 index 00000000..b5942e6b --- /dev/null +++ b/tests/auto/inputpanel/data/inputpanel/unipen_data_simp_chinese.js @@ -0,0 +1,1851 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +var unipenData = { + "0x4e2d": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 185, + 59, + 0 + ], + [ + 185, + 61, + 181 + ], + [ + 185, + 63, + 202 + ], + [ + 185, + 65, + 205 + ], + [ + 185, + 68, + 235 + ], + [ + 185, + 70, + 236 + ], + [ + 185, + 73, + 236 + ], + [ + 185, + 75, + 268 + ], + [ + 185, + 80, + 269 + ], + [ + 185, + 84, + 301 + ], + [ + 185, + 87, + 302 + ], + [ + 185, + 89, + 334 + ], + [ + 185, + 92, + 335 + ], + [ + 185, + 94, + 368 + ], + [ + 184, + 97, + 369 + ], + [ + 184, + 98, + 372 + ], + [ + 184, + 99, + 401 + ], + [ + 184, + 101, + 402 + ], + [ + 184, + 102, + 405 + ], + [ + 184, + 104, + 434 + ], + [ + 184, + 105, + 467 + ], + [ + 184, + 106, + 501 + ], + [ + 184, + 107, + 534 + ], + [ + 184, + 108, + 535 + ], + [ + 184, + 109, + 567 + ], + [ + 184, + 111, + 567 + ], + [ + 184, + 112, + 604 + ], + [ + 184, + 113, + 634 + ], + [ + 184, + 114, + 667 + ], + [ + 184, + 115, + 700 + ], + [ + 184, + 116, + 734 + ], + [ + 184, + 117, + 767 + ], + [ + 184, + 118, + 801 + ], + [ + 184, + 119, + 805 + ], + [ + 184, + 120, + 833 + ], + [ + 184, + 121, + 837 + ], + [ + 184, + 123, + 866 + ], + [ + 184, + 124, + 902 + ], + [ + 184, + 125, + 937 + ], + [ + 184, + 126, + 997 + ], + [ + 184, + 127, + 1040 + ], + [ + 184, + 128, + 1149 + ] + ], + [ + [ + 184, + 63, + 1871 + ], + [ + 185, + 63, + 1917 + ], + [ + 186, + 63, + 1918 + ], + [ + 188, + 63, + 1947 + ], + [ + 190, + 62, + 1948 + ], + [ + 191, + 62, + 1948 + ], + [ + 196, + 62, + 1980 + ], + [ + 202, + 62, + 1981 + ], + [ + 209, + 61, + 2014 + ], + [ + 217, + 61, + 2015 + ], + [ + 228, + 61, + 2047 + ], + [ + 241, + 61, + 2048 + ], + [ + 248, + 61, + 2052 + ], + [ + 253, + 61, + 2080 + ], + [ + 264, + 61, + 2081 + ], + [ + 267, + 61, + 2084 + ], + [ + 271, + 61, + 2114 + ], + [ + 277, + 61, + 2114 + ], + [ + 279, + 61, + 2117 + ], + [ + 283, + 61, + 2147 + ], + [ + 288, + 61, + 2148 + ], + [ + 290, + 61, + 2149 + ], + [ + 292, + 61, + 2180 + ], + [ + 296, + 61, + 2181 + ], + [ + 298, + 61, + 2213 + ], + [ + 299, + 61, + 2214 + ], + [ + 301, + 60, + 2246 + ], + [ + 302, + 60, + 2437 + ], + [ + 303, + 60, + 2485 + ], + [ + 304, + 60, + 2532 + ], + [ + 305, + 60, + 2564 + ], + [ + 305, + 61, + 2596 + ], + [ + 305, + 62, + 2629 + ], + [ + 305, + 64, + 2630 + ], + [ + 305, + 66, + 2662 + ], + [ + 305, + 67, + 2663 + ], + [ + 306, + 69, + 2695 + ], + [ + 306, + 71, + 2696 + ], + [ + 306, + 75, + 2729 + ], + [ + 306, + 78, + 2730 + ], + [ + 306, + 79, + 2732 + ], + [ + 306, + 81, + 2762 + ], + [ + 306, + 85, + 2763 + ], + [ + 306, + 87, + 2764 + ], + [ + 306, + 89, + 2796 + ], + [ + 306, + 93, + 2796 + ], + [ + 306, + 95, + 2796 + ], + [ + 306, + 101, + 2828 + ], + [ + 305, + 105, + 2829 + ], + [ + 305, + 109, + 2862 + ], + [ + 305, + 113, + 2863 + ], + [ + 304, + 119, + 2896 + ], + [ + 304, + 122, + 2896 + ], + [ + 304, + 123, + 2901 + ], + [ + 303, + 126, + 2929 + ], + [ + 303, + 128, + 2929 + ], + [ + 303, + 130, + 2962 + ], + [ + 303, + 131, + 2962 + ], + [ + 303, + 132, + 2995 + ], + [ + 303, + 133, + 3029 + ] + ], + [ + [ + 184, + 129, + 4367 + ], + [ + 188, + 129, + 4409 + ], + [ + 190, + 129, + 4410 + ], + [ + 191, + 129, + 4413 + ], + [ + 193, + 129, + 4441 + ], + [ + 197, + 128, + 4442 + ], + [ + 198, + 128, + 4444 + ], + [ + 200, + 128, + 4474 + ], + [ + 203, + 128, + 4475 + ], + [ + 205, + 127, + 4476 + ], + [ + 209, + 127, + 4508 + ], + [ + 219, + 127, + 4509 + ], + [ + 227, + 127, + 4541 + ], + [ + 237, + 127, + 4542 + ], + [ + 244, + 127, + 4574 + ], + [ + 246, + 127, + 4575 + ], + [ + 248, + 127, + 4607 + ], + [ + 250, + 127, + 4608 + ], + [ + 252, + 126, + 4640 + ], + [ + 255, + 126, + 4641 + ], + [ + 257, + 126, + 4644 + ], + [ + 259, + 125, + 4674 + ], + [ + 261, + 125, + 4675 + ], + [ + 263, + 125, + 4677 + ], + [ + 265, + 125, + 4707 + ], + [ + 266, + 125, + 4740 + ], + [ + 269, + 125, + 4741 + ], + [ + 270, + 125, + 4774 + ], + [ + 275, + 125, + 4775 + ], + [ + 279, + 125, + 4807 + ], + [ + 283, + 125, + 4808 + ], + [ + 287, + 125, + 4840 + ], + [ + 289, + 125, + 4841 + ], + [ + 291, + 125, + 4873 + ], + [ + 292, + 125, + 4874 + ], + [ + 293, + 125, + 4876 + ], + [ + 294, + 125, + 4907 + ], + [ + 296, + 125, + 4908 + ], + [ + 298, + 125, + 4909 + ], + [ + 299, + 125, + 4940 + ], + [ + 302, + 125, + 4941 + ], + [ + 303, + 126, + 4974 + ], + [ + 304, + 126, + 5006 + ], + [ + 305, + 126, + 5007 + ], + [ + 306, + 126, + 5040 + ] + ], + [ + [ + 244, + 32, + 6303 + ], + [ + 244, + 34, + 6340 + ], + [ + 244, + 35, + 6355 + ], + [ + 244, + 37, + 6356 + ], + [ + 244, + 40, + 6386 + ], + [ + 244, + 46, + 6387 + ], + [ + 244, + 50, + 6388 + ], + [ + 244, + 54, + 6419 + ], + [ + 245, + 67, + 6420 + ], + [ + 247, + 75, + 6453 + ], + [ + 248, + 84, + 6453 + ], + [ + 249, + 89, + 6486 + ], + [ + 249, + 96, + 6487 + ], + [ + 250, + 102, + 6519 + ], + [ + 250, + 107, + 6520 + ], + [ + 251, + 111, + 6537 + ], + [ + 251, + 113, + 6553 + ], + [ + 251, + 118, + 6553 + ], + [ + 251, + 120, + 6557 + ], + [ + 251, + 122, + 6586 + ], + [ + 251, + 126, + 6587 + ], + [ + 251, + 128, + 6588 + ], + [ + 251, + 130, + 6619 + ], + [ + 252, + 133, + 6620 + ], + [ + 252, + 135, + 6620 + ], + [ + 252, + 138, + 6652 + ], + [ + 252, + 141, + 6653 + ], + [ + 252, + 144, + 6686 + ], + [ + 252, + 147, + 6686 + ], + [ + 252, + 151, + 6719 + ], + [ + 252, + 154, + 6719 + ], + [ + 252, + 156, + 6724 + ], + [ + 252, + 157, + 6752 + ], + [ + 252, + 161, + 6753 + ], + [ + 252, + 162, + 6756 + ], + [ + 252, + 165, + 6786 + ], + [ + 252, + 167, + 6788 + ], + [ + 252, + 170, + 6819 + ], + [ + 252, + 172, + 6820 + ], + [ + 252, + 174, + 6852 + ], + [ + 252, + 176, + 6852 + ], + [ + 252, + 178, + 6885 + ], + [ + 252, + 180, + 6886 + ], + [ + 252, + 182, + 6918 + ], + [ + 252, + 183, + 6919 + ], + [ + 252, + 184, + 6935 + ], + [ + 251, + 185, + 6952 + ], + [ + 251, + 186, + 6956 + ], + [ + 251, + 187, + 6985 + ], + [ + 251, + 188, + 7018 + ], + [ + 251, + 189, + 7205 + ], + [ + 251, + 190, + 7293 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 95, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 95 + }, + "0x6587": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 415, + 26, + 0 + ], + [ + 416, + 28, + 46 + ], + [ + 417, + 28, + 63 + ], + [ + 418, + 30, + 96 + ], + [ + 419, + 31, + 97 + ], + [ + 420, + 31, + 100 + ], + [ + 422, + 34, + 130 + ], + [ + 424, + 36, + 163 + ], + [ + 425, + 38, + 163 + ], + [ + 426, + 39, + 164 + ], + [ + 427, + 42, + 196 + ], + [ + 428, + 45, + 196 + ], + [ + 429, + 47, + 229 + ], + [ + 430, + 50, + 230 + ], + [ + 431, + 52, + 263 + ], + [ + 431, + 54, + 263 + ], + [ + 432, + 55, + 296 + ], + [ + 433, + 56, + 296 + ], + [ + 433, + 57, + 300 + ], + [ + 433, + 58, + 330 + ], + [ + 433, + 59, + 330 + ], + [ + 433, + 60, + 364 + ], + [ + 433, + 61, + 365 + ], + [ + 433, + 62, + 404 + ] + ], + [ + [ + 356, + 80, + 1935 + ], + [ + 357, + 80, + 1980 + ], + [ + 358, + 81, + 1981 + ], + [ + 359, + 81, + 2008 + ], + [ + 361, + 81, + 2012 + ], + [ + 363, + 81, + 2041 + ], + [ + 365, + 81, + 2045 + ], + [ + 367, + 81, + 2075 + ], + [ + 370, + 81, + 2075 + ], + [ + 372, + 81, + 2076 + ], + [ + 375, + 81, + 2108 + ], + [ + 379, + 81, + 2109 + ], + [ + 385, + 80, + 2141 + ], + [ + 390, + 80, + 2142 + ], + [ + 396, + 79, + 2174 + ], + [ + 403, + 79, + 2175 + ], + [ + 406, + 79, + 2180 + ], + [ + 410, + 77, + 2208 + ], + [ + 416, + 77, + 2209 + ], + [ + 420, + 76, + 2213 + ], + [ + 422, + 76, + 2241 + ], + [ + 428, + 75, + 2242 + ], + [ + 431, + 75, + 2245 + ], + [ + 434, + 74, + 2274 + ], + [ + 443, + 73, + 2275 + ], + [ + 446, + 73, + 2276 + ], + [ + 451, + 71, + 2307 + ], + [ + 460, + 70, + 2308 + ], + [ + 464, + 68, + 2341 + ], + [ + 468, + 67, + 2341 + ], + [ + 470, + 66, + 2374 + ], + [ + 475, + 64, + 2374 + ], + [ + 477, + 64, + 2392 + ], + [ + 479, + 63, + 2407 + ], + [ + 484, + 62, + 2408 + ], + [ + 485, + 61, + 2440 + ], + [ + 487, + 60, + 2441 + ], + [ + 489, + 59, + 2444 + ], + [ + 491, + 57, + 2474 + ], + [ + 493, + 56, + 2508 + ], + [ + 495, + 55, + 2508 + ], + [ + 496, + 54, + 2508 + ], + [ + 498, + 53, + 2540 + ], + [ + 499, + 52, + 2541 + ], + [ + 500, + 50, + 2573 + ], + [ + 501, + 49, + 2607 + ], + [ + 502, + 48, + 2640 + ], + [ + 503, + 47, + 2641 + ], + [ + 504, + 46, + 2673 + ], + [ + 504, + 45, + 2724 + ], + [ + 504, + 44, + 3053 + ] + ], + [ + [ + 434, + 82, + 4671 + ], + [ + 434, + 84, + 4718 + ], + [ + 434, + 86, + 4735 + ], + [ + 434, + 88, + 4740 + ], + [ + 434, + 89, + 4768 + ], + [ + 434, + 92, + 4769 + ], + [ + 433, + 94, + 4772 + ], + [ + 432, + 96, + 4802 + ], + [ + 430, + 101, + 4802 + ], + [ + 429, + 103, + 4804 + ], + [ + 429, + 106, + 4835 + ], + [ + 428, + 112, + 4836 + ], + [ + 428, + 114, + 4836 + ], + [ + 425, + 121, + 4868 + ], + [ + 423, + 127, + 4869 + ], + [ + 421, + 132, + 4901 + ], + [ + 417, + 137, + 4902 + ], + [ + 414, + 143, + 4934 + ], + [ + 412, + 148, + 4935 + ], + [ + 406, + 156, + 4968 + ], + [ + 401, + 163, + 4969 + ], + [ + 398, + 166, + 4972 + ], + [ + 397, + 169, + 5001 + ], + [ + 393, + 173, + 5002 + ], + [ + 392, + 175, + 5005 + ], + [ + 391, + 176, + 5034 + ], + [ + 390, + 178, + 5035 + ], + [ + 389, + 179, + 5036 + ], + [ + 388, + 180, + 5067 + ], + [ + 387, + 181, + 5068 + ], + [ + 386, + 182, + 5101 + ], + [ + 385, + 182, + 5589 + ], + [ + 384, + 182, + 5616 + ] + ], + [ + [ + 385, + 84, + 6399 + ], + [ + 386, + 84, + 6468 + ], + [ + 387, + 87, + 6489 + ], + [ + 388, + 90, + 6531 + ], + [ + 391, + 95, + 6531 + ], + [ + 392, + 97, + 6532 + ], + [ + 394, + 99, + 6564 + ], + [ + 396, + 106, + 6564 + ], + [ + 401, + 113, + 6597 + ], + [ + 406, + 120, + 6598 + ], + [ + 411, + 126, + 6630 + ], + [ + 416, + 132, + 6631 + ], + [ + 422, + 138, + 6663 + ], + [ + 426, + 143, + 6664 + ], + [ + 427, + 143, + 6668 + ], + [ + 429, + 145, + 6697 + ], + [ + 432, + 150, + 6697 + ], + [ + 433, + 153, + 6700 + ], + [ + 436, + 156, + 6730 + ], + [ + 440, + 160, + 6730 + ], + [ + 444, + 163, + 6732 + ], + [ + 447, + 165, + 6763 + ], + [ + 454, + 171, + 6764 + ], + [ + 457, + 173, + 6797 + ], + [ + 458, + 173, + 6798 + ], + [ + 459, + 174, + 6830 + ], + [ + 460, + 175, + 6831 + ], + [ + 462, + 176, + 6863 + ], + [ + 466, + 178, + 6864 + ], + [ + 471, + 179, + 6897 + ], + [ + 473, + 179, + 6897 + ], + [ + 474, + 180, + 6900 + ], + [ + 475, + 180, + 6930 + ], + [ + 477, + 180, + 6964 + ], + [ + 478, + 180, + 6996 + ], + [ + 479, + 180, + 7029 + ], + [ + 480, + 180, + 7064 + ], + [ + 481, + 181, + 7097 + ], + [ + 483, + 181, + 7100 + ], + [ + 485, + 181, + 7149 + ], + [ + 486, + 181, + 7180 + ], + [ + 487, + 181, + 7213 + ], + [ + 488, + 181, + 7304 + ], + [ + 489, + 181, + 7346 + ], + [ + 490, + 181, + 7396 + ], + [ + 491, + 181, + 7428 + ], + [ + 491, + 182, + 7629 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 95, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 95 + } +} diff --git a/tests/auto/inputpanel/data/inputpanel/unipen_data_trad_chinese.js b/tests/auto/inputpanel/data/inputpanel/unipen_data_trad_chinese.js new file mode 100644 index 00000000..5e0c5c3f --- /dev/null +++ b/tests/auto/inputpanel/data/inputpanel/unipen_data_trad_chinese.js @@ -0,0 +1,1310 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +var unipenData = { + "0x570b": { + ".COORD": [ + "X", + "Y", + "T" + ], + ".HIERARCHY": "CHARACTER", + ".PEN": [ + [ + [ + 232, + 61, + 0 + ], + [ + 232, + 62, + 51 + ], + [ + 232, + 63, + 71 + ], + [ + 232, + 65, + 75 + ], + [ + 232, + 74, + 132 + ], + [ + 232, + 77, + 133 + ], + [ + 234, + 90, + 193 + ], + [ + 238, + 110, + 194 + ], + [ + 239, + 113, + 195 + ], + [ + 240, + 118, + 259 + ], + [ + 242, + 128, + 260 + ], + [ + 243, + 131, + 317 + ], + [ + 244, + 136, + 319 + ], + [ + 245, + 140, + 376 + ], + [ + 245, + 144, + 377 + ], + [ + 246, + 147, + 439 + ], + [ + 246, + 154, + 441 + ], + [ + 247, + 158, + 497 + ], + [ + 248, + 162, + 498 + ], + [ + 248, + 165, + 561 + ], + [ + 248, + 170, + 562 + ], + [ + 248, + 172, + 619 + ], + [ + 248, + 174, + 620 + ], + [ + 248, + 175, + 679 + ], + [ + 248, + 176, + 743 + ], + [ + 248, + 177, + 744 + ], + [ + 248, + 178, + 748 + ], + [ + 248, + 179, + 987 + ] + ], + [ + [ + 229, + 61, + 2287 + ], + [ + 230, + 61, + 2346 + ], + [ + 231, + 61, + 2347 + ], + [ + 232, + 61, + 2409 + ], + [ + 234, + 61, + 2411 + ], + [ + 241, + 61, + 2470 + ], + [ + 252, + 60, + 2472 + ], + [ + 256, + 60, + 2475 + ], + [ + 288, + 58, + 2532 + ], + [ + 308, + 57, + 2590 + ], + [ + 325, + 57, + 2591 + ], + [ + 338, + 57, + 2654 + ], + [ + 347, + 56, + 2655 + ], + [ + 350, + 55, + 2713 + ], + [ + 351, + 55, + 2714 + ], + [ + 352, + 55, + 2779 + ], + [ + 353, + 54, + 2780 + ], + [ + 355, + 54, + 2837 + ], + [ + 357, + 53, + 2839 + ], + [ + 358, + 53, + 2924 + ], + [ + 359, + 53, + 3211 + ], + [ + 360, + 54, + 3331 + ], + [ + 361, + 56, + 3380 + ], + [ + 362, + 58, + 3381 + ], + [ + 363, + 61, + 3440 + ], + [ + 363, + 68, + 3441 + ], + [ + 363, + 72, + 3442 + ], + [ + 363, + 82, + 3504 + ], + [ + 363, + 99, + 3505 + ], + [ + 363, + 102, + 3507 + ], + [ + 365, + 111, + 3564 + ], + [ + 366, + 119, + 3565 + ], + [ + 368, + 132, + 3626 + ], + [ + 370, + 146, + 3627 + ], + [ + 370, + 152, + 3686 + ], + [ + 370, + 157, + 3687 + ], + [ + 370, + 162, + 3691 + ], + [ + 370, + 166, + 3747 + ], + [ + 370, + 171, + 3748 + ], + [ + 370, + 175, + 3813 + ], + [ + 370, + 177, + 3871 + ], + [ + 370, + 178, + 3876 + ], + [ + 370, + 179, + 4091 + ], + [ + 371, + 179, + 4239 + ] + ], + [ + [ + 261, + 103, + 7159 + ], + [ + 262, + 103, + 7207 + ], + [ + 263, + 103, + 7208 + ], + [ + 268, + 103, + 7268 + ], + [ + 277, + 102, + 7269 + ], + [ + 285, + 101, + 7334 + ], + [ + 291, + 101, + 7335 + ], + [ + 296, + 100, + 7338 + ], + [ + 297, + 100, + 7390 + ], + [ + 310, + 97, + 7392 + ], + [ + 315, + 95, + 7449 + ], + [ + 317, + 94, + 7450 + ], + [ + 318, + 93, + 7451 + ], + [ + 319, + 92, + 7511 + ], + [ + 321, + 92, + 7571 + ], + [ + 323, + 92, + 7572 + ], + [ + 325, + 92, + 7631 + ], + [ + 325, + 91, + 7632 + ], + [ + 326, + 91, + 7692 + ], + [ + 327, + 91, + 7755 + ], + [ + 328, + 90, + 7844 + ] + ], + [ + [ + 263, + 126, + 9608 + ], + [ + 264, + 126, + 9663 + ], + [ + 264, + 127, + 9664 + ], + [ + 265, + 133, + 9723 + ], + [ + 265, + 136, + 9724 + ], + [ + 265, + 139, + 9785 + ], + [ + 265, + 141, + 9786 + ], + [ + 265, + 142, + 9845 + ], + [ + 266, + 144, + 9846 + ], + [ + 266, + 145, + 9906 + ], + [ + 266, + 146, + 9908 + ], + [ + 267, + 148, + 9965 + ], + [ + 267, + 149, + 9966 + ] + ], + [ + [ + 264, + 126, + 10655 + ], + [ + 267, + 126, + 10724 + ], + [ + 272, + 125, + 10741 + ], + [ + 277, + 125, + 10786 + ], + [ + 281, + 125, + 10787 + ], + [ + 287, + 125, + 10847 + ], + [ + 288, + 125, + 10848 + ], + [ + 291, + 124, + 10851 + ], + [ + 293, + 123, + 10915 + ], + [ + 293, + 125, + 11083 + ], + [ + 293, + 126, + 11149 + ], + [ + 293, + 130, + 11150 + ], + [ + 293, + 132, + 11155 + ], + [ + 293, + 135, + 11210 + ], + [ + 293, + 138, + 11211 + ], + [ + 293, + 139, + 11271 + ], + [ + 294, + 142, + 11272 + ], + [ + 294, + 143, + 11371 + ], + [ + 294, + 144, + 11425 + ], + [ + 294, + 145, + 11428 + ], + [ + 295, + 146, + 11484 + ] + ], + [ + [ + 269, + 152, + 12343 + ], + [ + 271, + 152, + 12435 + ], + [ + 272, + 152, + 12461 + ], + [ + 275, + 152, + 12520 + ], + [ + 277, + 151, + 12521 + ], + [ + 278, + 151, + 12523 + ], + [ + 280, + 151, + 12581 + ], + [ + 281, + 151, + 12582 + ], + [ + 282, + 151, + 12642 + ], + [ + 284, + 151, + 12643 + ], + [ + 285, + 150, + 12644 + ], + [ + 286, + 150, + 12704 + ], + [ + 287, + 150, + 12762 + ], + [ + 288, + 150, + 12763 + ], + [ + 289, + 150, + 12824 + ], + [ + 290, + 150, + 12889 + ], + [ + 291, + 150, + 12947 + ], + [ + 292, + 150, + 13005 + ], + [ + 293, + 150, + 13066 + ] + ], + [ + [ + 270, + 172, + 18223 + ], + [ + 271, + 172, + 18227 + ], + [ + 273, + 172, + 18277 + ], + [ + 277, + 172, + 18278 + ], + [ + 280, + 172, + 18339 + ], + [ + 283, + 170, + 18340 + ], + [ + 288, + 168, + 18398 + ], + [ + 292, + 167, + 18398 + ], + [ + 295, + 167, + 18402 + ], + [ + 296, + 167, + 18465 + ], + [ + 298, + 167, + 18466 + ], + [ + 300, + 166, + 18522 + ], + [ + 301, + 166, + 18583 + ], + [ + 302, + 166, + 18779 + ] + ], + [ + [ + 301, + 79, + 19886 + ], + [ + 301, + 80, + 19995 + ], + [ + 301, + 82, + 20021 + ], + [ + 302, + 84, + 20027 + ], + [ + 303, + 86, + 20075 + ], + [ + 304, + 88, + 20076 + ], + [ + 304, + 90, + 20130 + ], + [ + 306, + 94, + 20131 + ], + [ + 309, + 101, + 20190 + ], + [ + 312, + 109, + 20191 + ], + [ + 314, + 113, + 20195 + ], + [ + 315, + 117, + 20250 + ], + [ + 316, + 123, + 20251 + ], + [ + 318, + 129, + 20311 + ], + [ + 321, + 136, + 20312 + ], + [ + 324, + 141, + 20372 + ], + [ + 326, + 145, + 20374 + ], + [ + 329, + 150, + 20432 + ], + [ + 330, + 153, + 20434 + ], + [ + 331, + 155, + 20499 + ], + [ + 332, + 157, + 20500 + ], + [ + 333, + 158, + 20555 + ], + [ + 333, + 160, + 20557 + ], + [ + 333, + 161, + 20614 + ], + [ + 334, + 162, + 20677 + ], + [ + 334, + 163, + 20739 + ], + [ + 335, + 164, + 20799 + ], + [ + 336, + 165, + 20801 + ], + [ + 337, + 165, + 20859 + ], + [ + 338, + 167, + 20860 + ], + [ + 338, + 168, + 20919 + ], + [ + 339, + 168, + 21020 + ], + [ + 340, + 168, + 21131 + ], + [ + 341, + 166, + 21192 + ], + [ + 342, + 166, + 21193 + ], + [ + 342, + 163, + 21253 + ], + [ + 343, + 162, + 21254 + ], + [ + 344, + 160, + 21258 + ], + [ + 344, + 159, + 21316 + ], + [ + 345, + 158, + 21317 + ] + ], + [ + [ + 339, + 113, + 23351 + ], + [ + 338, + 113, + 23426 + ], + [ + 337, + 117, + 23453 + ], + [ + 336, + 117, + 23485 + ], + [ + 334, + 122, + 23505 + ], + [ + 333, + 124, + 23506 + ], + [ + 332, + 125, + 23507 + ], + [ + 331, + 129, + 23561 + ], + [ + 329, + 132, + 23562 + ], + [ + 327, + 135, + 23623 + ], + [ + 323, + 143, + 23625 + ], + [ + 320, + 149, + 23682 + ], + [ + 319, + 150, + 23683 + ], + [ + 317, + 152, + 23745 + ], + [ + 314, + 157, + 23747 + ], + [ + 313, + 159, + 23805 + ], + [ + 310, + 165, + 23806 + ], + [ + 310, + 166, + 23810 + ], + [ + 309, + 167, + 23908 + ] + ], + [ + [ + 319, + 69, + 25630 + ], + [ + 321, + 70, + 25747 + ], + [ + 322, + 71, + 25774 + ], + [ + 326, + 73, + 25779 + ], + [ + 327, + 74, + 25843 + ], + [ + 333, + 78, + 25844 + ], + [ + 335, + 80, + 25904 + ] + ], + [ + [ + 256, + 179, + 27231 + ], + [ + 257, + 179, + 27302 + ], + [ + 263, + 179, + 27332 + ], + [ + 282, + 179, + 27393 + ], + [ + 290, + 179, + 27394 + ], + [ + 314, + 179, + 27455 + ], + [ + 326, + 180, + 27457 + ], + [ + 329, + 180, + 27460 + ], + [ + 336, + 180, + 27516 + ], + [ + 343, + 180, + 27516 + ], + [ + 344, + 180, + 27578 + ], + [ + 345, + 180, + 27580 + ], + [ + 346, + 180, + 27639 + ], + [ + 347, + 180, + 27641 + ], + [ + 348, + 179, + 27698 + ], + [ + 350, + 179, + 27759 + ], + [ + 352, + 179, + 27760 + ], + [ + 354, + 179, + 27821 + ], + [ + 357, + 179, + 27882 + ], + [ + 358, + 179, + 27944 + ], + [ + 359, + 179, + 28003 + ], + [ + 361, + 179, + 28004 + ] + ] + ], + ".POINTS_PER_SECOND": 60, + ".SEGMENT": "CHARACTER", + ".VERSION": "1.0", + ".X_DIM": 1032, + ".X_POINTS_PER_INCH": 94, + ".Y_DIM": 263, + ".Y_POINTS_PER_INCH": 94 + } +} diff --git a/tests/auto/inputpanel/data/tst_inputpanel.qml b/tests/auto/inputpanel/data/tst_inputpanel.qml index 67796016..89bd1d70 100644 --- a/tests/auto/inputpanel/data/tst_inputpanel.qml +++ b/tests/auto/inputpanel/data/tst_inputpanel.qml @@ -105,6 +105,11 @@ Rectangle { verify(inputPanel.setLocale(locale)) if (localeChanged && !(textInput.inputMethodHints & Qt.ImhNoPredictiveText)) wait(300) + if (data !== undefined && data.hasOwnProperty("initHwrMode") && data.initHwrMode) { + if (!inputPanel.setHandwritingMode(true)) + expectFail("", "Handwriting not enabled") + verify(inputPanel.handwritingMode === true) + } if (data !== undefined && data.hasOwnProperty("initInputMode")) { var inputMode = inputPanel.mapInputMode(data.initInputMode) if (!inputPanel.isInputModeSupported(inputMode)) @@ -310,19 +315,26 @@ Rectangle { return [ { initLocale: "ar_AR", initInputMethodHints: Qt.ImhNoPredictiveText, inputSequence: "\u0645\u0631\u062D\u0628\u0627", outputText: "\u0645\u0631\u062D\u0628\u0627" }, { initLocale: "fa_FA", initInputMethodHints: Qt.ImhNoPredictiveText, inputSequence: "\u0633\u0644\u0627\u0645", outputText: "\u0633\u0644\u0627\u0645" }, + { initLocale: "cs_CZ", initInputMethodHints: Qt.ImhNoPredictiveText, inputSequence: "ahoj", outputText: "Ahoj" }, { initLocale: "da_DK", initInputMethodHints: Qt.ImhNoPredictiveText, inputSequence: "hej", outputText: "Hej" }, { initLocale: "de_DE", initInputMethodHints: Qt.ImhNoPredictiveText, inputSequence: "hallo", outputText: "Hallo" }, + { initLocale: "el_GR", initInputMethodHints: Qt.ImhNoPredictiveText, inputSequence: "\u03C7\u03B1\u03AF\u03C1\u03B5\u03C4\u03B5", outputText: "\u03A7\u03B1\u03AF\u03C1\u03B5\u03C4\u03B5" }, { initLocale: "en_GB", initInputMethodHints: Qt.ImhNoPredictiveText, inputSequence: "hello", outputText: "Hello" }, { initLocale: "es_ES", initInputMethodHints: Qt.ImhNoPredictiveText, inputSequence: "hola", outputText: "Hola" }, + { initLocale: "et_EE", initInputMethodHints: Qt.ImhNoPredictiveText, inputSequence: "tere", outputText: "Tere" }, { initLocale: "hi_IN", initInputMethodHints: Qt.ImhNoPredictiveText, inputSequence: "\u0928\u092E\u0938\u094D\u0915\u093E\u0930", outputText: "\u0928\u092E\u0938\u094D\u0915\u093E\u0930" }, + { initLocale: "hr_HR", initInputMethodHints: Qt.ImhNoPredictiveText, inputSequence: "zdravo", outputText: "Zdravo" }, + { initLocale: "hu_HU", initInputMethodHints: Qt.ImhNoPredictiveText, inputSequence: "helló", outputText: "Helló" }, { initLocale: "fi_FI", initInputMethodHints: Qt.ImhNoPredictiveText, inputSequence: "hei", outputText: "Hei" }, { initLocale: "fr_FR", initInputMethodHints: Qt.ImhNoPredictiveText, inputSequence: "bonjour", outputText: "Bonjour" }, { initLocale: "it_IT", initInputMethodHints: Qt.ImhNoPredictiveText, inputSequence: "ciao", outputText: "Ciao" }, { initLocale: "ja_JP", initInputMethodHints: Qt.ImhNoPredictiveText, inputSequence: "watashi", outputText: "\u308F\u305F\u3057" }, { initLocale: "nb_NO", initInputMethodHints: Qt.ImhNoPredictiveText, inputSequence: "hallo", outputText: "Hallo" }, + { initLocale: "nl_NL", initInputMethodHints: Qt.ImhNoPredictiveText, inputSequence: "hallo", outputText: "Hallo" }, { initLocale: "pl_PL", initInputMethodHints: Qt.ImhNoPredictiveText, inputSequence: "cze\u015B\u0107", outputText: "Cze\u015B\u0107" }, { initLocale: "pt_PT", initInputMethodHints: Qt.ImhNoPredictiveText, inputSequence: "ol\u00E1", outputText: "Ol\u00E1" }, { initLocale: "ru_RU", initInputMethodHints: Qt.ImhNoPredictiveText, inputSequence: "\u043F\u0440\u0438\u0432\u0435\u0442", outputText: "\u041F\u0440\u0438\u0432\u0435\u0442" }, + { initLocale: "sr_SP", initInputMethodHints: Qt.ImhNoPredictiveText, inputSequence: "\u0437\u0434\u0440\u0430\u0432\u043E", outputText: "\u0417\u0434\u0440\u0430\u0432\u043E" }, { initLocale: "sv_SE", initInputMethodHints: Qt.ImhNoPredictiveText, inputSequence: "hall\u00E5", outputText: "Hall\u00E5" } ] } @@ -348,6 +360,12 @@ Rectangle { { initInputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhDigitsOnly, inputSequence: "1234567890" + decmialPoint, outputText: "1234567890" + decmialPoint }, { initInputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhFormattedNumbersOnly, inputSequence: "1234567890+-,.()", outputText: "1234567890+-,.()" }, { initInputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhDialableCharactersOnly, inputSequence: "1234567890+*#", outputText: "1234567890+*#" }, + { initInputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhEmailCharactersOnly, inputSequence: "a@b.c", outputText: "a@b.c" }, + // Note: Some non-latin keyboards provide a QWERTY layout + { initLocale: "el_GR", initInputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhEmailCharactersOnly, inputSequence: "a@b.c", outputText: "a@b.c" }, + { initLocale: "el_GR", initInputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhLatinOnly, inputSequence: "abc", outputText: "Abc" }, + { initLocale: "he_IL", initInputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhEmailCharactersOnly, inputSequence: "a@b.c", outputText: "a@b.c" }, + { initLocale: "he_IL", initInputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhLatinOnly, inputSequence: "abc", outputText: "Abc" }, ] } @@ -1095,19 +1113,25 @@ Rectangle { function test_hwrInputSequence_data() { return [ - { initInputMethodHints: Qt.ImhNoPredictiveText, toggleShiftCount: 0, inputSequence: "abcdefghij", outputText: "Abcdefghij" }, - { initInputMethodHints: Qt.ImhNoPredictiveText, toggleShiftCount: 1, inputSequence: "klmnopqrst", outputText: "klmnopqrst" }, - { initInputMethodHints: Qt.ImhNoPredictiveText, toggleShiftCount: 3, inputSequence: "uvwxyz", outputText: "UVWXYZ" }, + { initHwrMode: true, initInputMethodHints: Qt.ImhNoPredictiveText, toggleShiftCount: 0, inputSequence: "abcdefghij", outputText: "Abcdefghij" }, + { initHwrMode: true, initInputMethodHints: Qt.ImhNoPredictiveText, toggleShiftCount: 1, inputSequence: "klmnopqrst", outputText: "klmnopqrst" }, + { initHwrMode: true, initInputMethodHints: Qt.ImhNoPredictiveText, toggleShiftCount: 3, inputSequence: "uvwxyz", outputText: "UVWXYZ" }, + { initHwrMode: true, initInputMethodHints: Qt.ImhNone, initLocale: "zh_CN", initInputMode: "ChineseHandwriting", inputSequence: "\u4e2d\u6587", outputText: "\u4e2d\u6587" }, + { initHwrMode: true, initInputMethodHints: Qt.ImhNone, initLocale: "zh_TW", initInputMode: "ChineseHandwriting", inputSequence: "\u570b", outputText: "\u570b" }, + { initHwrMode: true, initInputMethodHints: Qt.ImhNone, initLocale: "ja_JP", initInputMode: "JapaneseHandwriting", inputSequence: "\u65E5\u672C\u8A9E", outputText: "\u65E5\u672C\u8A9E" }, + { initHwrMode: true, initInputMethodHints: Qt.ImhNone, initLocale: "ko_KR", initInputMode: "KoreanHandwriting", inputSequence: "\uD55C\uAD6D\uC5B4", outputText: "\uD55C\uAD6D\uC5B4" }, + { initHwrMode: true, initInputMethodHints: Qt.ImhNone, initLocale: "el_GR", initInputMode: "Greek", inputSequence: "\u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC", outputText: "\u0395\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC" }, + { initHwrMode: true, initInputMethodHints: Qt.ImhNone, initLocale: "bg_BG", initInputMode: "Cyrillic", inputSequence: "\u0431\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438", outputText: "\u0411\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438" }, + { initHwrMode: true, initInputMethodHints: Qt.ImhNone, initLocale: "cs_CZ", initInputMode: "Latin", inputSequence: "ahoj", outputText: "Ahoj" }, + { initHwrMode: true, initInputMethodHints: Qt.ImhNone, initLocale: "ar_AR", initInputMode: "Arabic", inputSequence: "\u0643\u062A\u0627\u0628", outputText: "\u0643\u062A\u0627\u0628" }, + { initHwrMode: true, initInputMethodHints: Qt.ImhNone, initLocale: "fa_FA", initInputMode: "Arabic", inputSequence: "\u0686\u0627\u06CC", outputText: "\u0686\u0627\u06CC" }, + { initHwrMode: true, initInputMethodHints: Qt.ImhNone, initLocale: "he_IL", initInputMode: "Hebrew", inputSequence: "\u05D0\u05D5\u05D8\u05D5", outputText: "\u05D0\u05D5\u05D8\u05D5" }, ] } function test_hwrInputSequence(data) { prepareTest(data) - if (!inputPanel.setHandwritingMode(true)) - expectFail("", "Handwriting not enabled") - verify(inputPanel.handwritingMode === true) - for (var i = 0; i < data.toggleShiftCount; i++) { inputPanel.toggleShift() } @@ -1128,20 +1152,20 @@ Rectangle { function test_hwrNumericInputSequence_data() { return [ - { initInputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhPreferNumbers, modeSwitchAllowed: true, inputSequence: "0123456789", outputText: "0123456789" }, - { initInputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhDigitsOnly, modeSwitchAllowed: false, inputSequence: "1234567890", outputText: "1234567890" }, - { initInputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhFormattedNumbersOnly, modeSwitchAllowed: false, inputSequence: "1234567890+", outputText: "1234567890+" }, - { initInputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhDialableCharactersOnly, modeSwitchAllowed: false, inputSequence: "1234567890+", outputText: "1234567890+" }, + { initHwrMode: true, initInputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhPreferNumbers, modeSwitchAllowed: true, inputSequence: "0123456789", outputText: "0123456789" }, + { initHwrMode: true, initInputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhDigitsOnly, modeSwitchAllowed: false, inputSequence: "1234567890", outputText: "1234567890" }, + { initHwrMode: true, initInputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhFormattedNumbersOnly, modeSwitchAllowed: false, inputSequence: "1234567890+", outputText: "1234567890+" }, + { initHwrMode: true, initInputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhDialableCharactersOnly, modeSwitchAllowed: false, inputSequence: "1234567890+", outputText: "1234567890+" }, + { initHwrMode: true, initLocale: "zh_CN", initInputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhPreferNumbers, modeSwitchAllowed: true, inputSequence: "0123456789", outputText: "0123456789" }, + { initHwrMode: true, initLocale: "zh_CN", initInputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhDigitsOnly, modeSwitchAllowed: false, inputSequence: "1234567890", outputText: "1234567890" }, + { initHwrMode: true, initLocale: "zh_CN", initInputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhFormattedNumbersOnly, modeSwitchAllowed: false, inputSequence: "1234567890+", outputText: "1234567890+" }, + { initHwrMode: true, initLocale: "zh_CN", initInputMethodHints: Qt.ImhNoPredictiveText | Qt.ImhDialableCharactersOnly, modeSwitchAllowed: false, inputSequence: "1234567890+", outputText: "1234567890+" }, ] } function test_hwrNumericInputSequence(data) { prepareTest(data) - if (!inputPanel.setHandwritingMode(true)) - expectFail("", "Handwriting not enabled") - verify(inputPanel.handwritingMode === true) - for (var inputIndex in data.inputSequence) { verify(inputPanel.emulateHandwriting(data.inputSequence.charAt(inputIndex), true)) } @@ -1267,6 +1291,7 @@ Rectangle { function test_hwrFullScreenGestures_data() { return [ { initInputMethodHints: Qt.ImhNoPredictiveText, inputSequence: ["a","b","c",Qt.Key_Backspace,Qt.Key_Space,"c"], outputText: "Ab c" }, + { initHwrMode: true, initInputMethodHints: Qt.ImhNone, initLocale: "zh_CN", initInputMode: "ChineseHandwriting", inputSequence: ["\u4e2d", "\u6587", Qt.Key_Backspace], outputText: "\u4e2d" }, ] } @@ -1300,7 +1325,8 @@ Rectangle { prepareTest(data) if (!handwritingInputPanel.enabled) - skip("Handwriting not enabled") + expectFail("", "Handwriting not enabled") + verify(handwritingInputPanel.enabled) handwritingInputPanel.available = true if (!inputPanel.wordCandidateListVisibleHint) skip("Word candidates not available (spell correction/hwr suggestions)") diff --git a/tests/auto/inputpanel/hwr_test_data/alphanumeric/113_100_0.txt b/tests/auto/inputpanel/hwr_test_data/alphanumeric/113_100_0.txt index 714ad4c8..14d57b77 100644 --- a/tests/auto/inputpanel/hwr_test_data/alphanumeric/113_100_0.txt +++ b/tests/auto/inputpanel/hwr_test_data/alphanumeric/113_100_0.txt @@ -2,55 +2,75 @@ .HIERARCHY CHARACTER .COORD X Y T .SEGMENT CHARACTER -.X_DIM 821 -.Y_DIM 211 -.X_POINTS_PER_INCH 100 -.Y_POINTS_PER_INCH 100 +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 95 +.Y_POINTS_PER_INCH 95 .POINTS_PER_SECOND 60 .PEN_DOWN -435 78 0 -435 77 13 -435 76 33 -435 75 70 -434 74 84 -434 73 109 -431 70 130 -417 65 156 -407 65 174 -385 70 194 -377 73 214 -361 83 238 -355 88 247 -349 100 275 -354 113 310 -360 117 338 -368 120 357 -379 120 377 -408 110 412 -414 105 437 -423 95 462 -424 91 484 -426 87 511 -426 83 541 -427 81 564 -426 80 591 -427 79 648 -427 81 698 -427 83 722 -428 90 741 -430 98 760 -432 118 788 -434 129 797 -436 151 829 -436 160 844 -437 166 863 -437 171 899 -437 173 921 -437 176 938 -437 177 964 -437 178 985 -437 179 1013 -437 180 1032 -437 181 1101 -438 181 1136 +407 75 0 +406 74 76 +403 74 96 +401 73 100 +395 73 128 +392 73 129 +388 73 131 +385 73 162 +375 73 162 +370 75 163 +360 78 195 +349 85 196 +342 91 228 +338 98 229 +337 107 261 +337 115 261 +342 125 294 +347 133 295 +351 135 299 +353 139 328 +359 143 329 +363 144 331 +365 145 361 +369 148 362 +371 148 363 +372 148 395 +376 146 396 +382 143 427 +387 137 428 +391 129 461 +395 123 461 +400 118 494 +401 113 494 +402 108 527 +404 103 528 +406 99 531 +406 96 561 +408 90 561 +408 88 564 +408 86 593 +409 84 594 +409 83 627 +409 82 661 +409 81 694 +409 83 844 +409 89 878 +409 93 879 +409 98 884 +408 103 910 +407 118 911 +407 135 943 +407 157 944 +407 166 948 +409 175 976 +410 186 977 +410 191 979 +411 196 1009 +411 203 1010 +413 207 1011 +413 211 1042 +413 223 1043 +413 230 1076 +413 234 1077 +413 235 1109 +413 236 1110 .PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/arabic/1575_100_0.txt b/tests/auto/inputpanel/hwr_test_data/arabic/1575_100_0.txt new file mode 100644 index 00000000..909439f2 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/arabic/1575_100_0.txt @@ -0,0 +1,28 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +354 61 0 +354 64 76 +354 69 92 +354 83 133 +348 104 196 +345 127 198 +345 137 255 +347 157 256 +347 159 260 +347 164 315 +346 170 316 +345 174 376 +345 177 377 +344 179 379 +344 181 437 +344 182 438 +344 183 499 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/arabic/1576_100_0.txt b/tests/auto/inputpanel/hwr_test_data/arabic/1576_100_0.txt new file mode 100644 index 00000000..6b14f1a0 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/arabic/1576_100_0.txt @@ -0,0 +1,59 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +264 132 0 +264 133 68 +263 139 69 +262 146 127 +262 149 128 +259 160 132 +259 163 188 +255 180 190 +252 184 251 +251 185 254 +246 186 310 +241 186 374 +236 186 376 +234 186 380 +232 186 433 +218 184 434 +214 184 436 +204 183 493 +195 181 494 +187 180 556 +181 179 558 +175 178 617 +169 178 618 +162 177 676 +159 177 677 +154 177 737 +146 176 738 +145 176 797 +143 174 859 +140 170 861 +140 168 918 +140 165 919 +140 160 978 +140 151 979 +140 139 1041 +142 132 1043 +143 131 1102 +143 127 1103 +143 126 1228 +.PEN_UP +.PEN_DOWN +193 204 1784 +193 206 1836 +193 208 1863 +193 210 1867 +193 211 1923 +193 212 1924 +193 213 1984 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/arabic/1578_100_0.txt b/tests/auto/inputpanel/hwr_test_data/arabic/1578_100_0.txt new file mode 100644 index 00000000..f3fa71a3 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/arabic/1578_100_0.txt @@ -0,0 +1,77 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +497 124 0 +497 125 76 +497 129 99 +496 132 135 +496 135 136 +495 140 198 +493 148 199 +491 158 259 +491 160 259 +491 165 260 +490 167 319 +487 176 320 +487 178 382 +485 183 383 +483 185 443 +479 188 445 +476 190 501 +471 192 503 +468 192 532 +465 193 562 +456 194 563 +452 195 564 +448 195 624 +436 195 624 +432 195 627 +420 194 687 +410 192 688 +403 190 691 +396 189 746 +381 188 747 +370 186 806 +354 183 807 +340 182 867 +334 182 868 +332 181 928 +330 181 929 +330 179 989 +330 176 1050 +332 174 1051 +333 171 1051 +335 168 1113 +337 164 1114 +339 162 1117 +340 160 1174 +341 156 1174 +343 152 1232 +345 143 1233 +345 142 1292 +345 141 1353 +.PEN_UP +.PEN_DOWN +398 104 1752 +399 105 1809 +403 116 1810 +404 124 1871 +404 128 1871 +406 130 1933 +.PEN_UP +.PEN_DOWN +436 109 2182 +436 113 2209 +436 114 2211 +435 122 2212 +434 124 2270 +433 130 2272 +433 134 2328 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/arabic/1603_100_0.txt b/tests/auto/inputpanel/hwr_test_data/arabic/1603_100_0.txt new file mode 100644 index 00000000..8f950deb --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/arabic/1603_100_0.txt @@ -0,0 +1,99 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +634 60 0 +634 61 47 +634 63 50 +635 69 110 +636 79 111 +636 85 140 +636 90 169 +636 103 170 +637 118 230 +637 135 231 +637 138 260 +637 148 290 +637 153 291 +637 157 353 +637 161 354 +637 162 356 +637 163 412 +637 168 413 +636 169 473 +634 174 474 +633 175 477 +633 176 533 +632 177 535 +627 178 594 +625 180 595 +620 181 656 +613 182 657 +601 183 717 +590 184 718 +582 185 778 +580 186 779 +578 186 780 +573 186 839 +565 186 840 +563 186 843 +559 186 902 +556 186 909 +550 185 961 +546 184 1022 +544 184 1083 +542 183 1084 +539 183 1144 +538 182 1145 +535 180 1207 +534 179 1209 +534 178 1212 +533 176 1267 +532 176 1268 +531 174 1269 +531 172 1328 +530 168 1329 +528 162 1390 +527 158 1392 +527 157 1451 +526 154 1453 +526 153 1510 +526 152 1571 +.PEN_UP +.PEN_DOWN +597 77 2271 +595 77 2329 +591 79 2361 +587 81 2363 +583 83 2419 +581 84 2420 +578 87 2420 +576 88 2480 +572 96 2480 +571 102 2542 +571 107 2542 +573 111 2602 +578 117 2603 +581 118 2663 +583 118 2668 +586 118 2724 +593 118 2725 +601 115 2784 +603 113 2785 +603 112 2788 +603 111 2956 +600 115 2997 +597 119 3057 +594 122 3058 +588 128 3117 +585 131 3118 +582 134 3181 +581 134 3183 +580 135 3244 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/arabic/1670_100_0.txt b/tests/auto/inputpanel/hwr_test_data/arabic/1670_100_0.txt new file mode 100644 index 00000000..58580245 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/arabic/1670_100_0.txt @@ -0,0 +1,60 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +458 113 0 +457 112 48 +457 111 49 +454 107 103 +446 99 104 +440 94 165 +426 75 166 +419 61 227 +419 58 228 +420 53 230 +441 49 288 +473 49 289 +508 55 349 +517 65 350 +517 71 409 +501 85 411 +454 104 471 +435 108 472 +417 112 475 +397 119 536 +383 126 537 +377 130 539 +376 138 594 +376 144 595 +378 148 596 +383 156 654 +390 162 655 +410 169 716 +446 172 717 +467 172 749 +487 172 777 +503 173 778 +517 173 779 +533 170 838 +553 169 838 +555 169 868 +555 168 899 +.PEN_UP +.PEN_DOWN +505 127 1279 +503 127 1283 +491 127 1351 +475 128 1352 +471 131 1412 +475 142 1413 +504 149 1474 +512 145 1475 +512 143 1539 +510 134 1541 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/arabic/1740_100_0.txt b/tests/auto/inputpanel/hwr_test_data/arabic/1740_100_0.txt new file mode 100644 index 00000000..f119560c --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/arabic/1740_100_0.txt @@ -0,0 +1,55 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +399 119 0 +399 118 49 +399 116 50 +399 111 110 +399 107 110 +399 104 141 +398 99 171 +397 97 172 +395 88 173 +391 79 234 +384 70 236 +381 68 298 +380 67 298 +379 67 300 +376 67 353 +371 69 353 +366 71 356 +363 73 414 +357 78 415 +352 91 476 +349 105 477 +349 116 536 +355 129 537 +356 132 539 +357 137 596 +362 150 597 +363 156 661 +362 161 662 +359 165 717 +349 171 718 +331 178 777 +328 179 778 +320 181 780 +311 182 840 +297 182 841 +289 181 900 +284 179 901 +282 177 961 +276 170 962 +275 164 1023 +275 160 1023 +275 156 1083 +275 151 1084 +275 147 1143 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/build_unipen_data.py b/tests/auto/inputpanel/hwr_test_data/build_unipen_data.py index 639912b9..eb4231c3 100755 --- a/tests/auto/inputpanel/hwr_test_data/build_unipen_data.py +++ b/tests/auto/inputpanel/hwr_test_data/build_unipen_data.py @@ -2,19 +2,30 @@ ############################################################################# ## -## Copyright (C) 2015 The Qt Company Ltd -## All rights reserved. -## For any questions to The Qt Company, please use contact form at http://qt.io +## Copyright (C) 2017 The Qt Company Ltd. +## Contact: https://www.qt.io/licensing/ ## -## This file is part of the Qt Virtual Keyboard add-on. +## This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. ## -## Licensees holding valid commercial license for Qt may use this file in -## accordance with the Qt License Agreement provided with the Software -## or, alternatively, in accordance with the terms contained in a written -## agreement between you and The Qt Company. +## $QT_BEGIN_LICENSE:GPL$ +## Commercial License Usage +## Licensees holding valid commercial Qt licenses may use this file in +## accordance with the commercial license agreement provided with the +## Software or, alternatively, in accordance with the terms contained in +## a written agreement between you and The Qt Company. For licensing terms +## and conditions see https://www.qt.io/terms-conditions. For further +## information use the contact form at https://www.qt.io/contact-us. ## -## If you have questions regarding the use of this file, please use -## contact form at http://qt.io +## GNU General Public License Usage +## Alternatively, this file may be used under the terms of the GNU +## General Public License version 3 or (at your option) any later version +## approved by the KDE Free Qt Foundation. The licenses are as published by +## the Free Software Foundation and appearing in the file LICENSE.GPL3 +## included in the packaging of this file. Please review the following +## information to ensure the GNU General Public License requirements will +## be met: https://www.gnu.org/licenses/gpl-3.0.html. +## +## $QT_END_LICENSE$ ## ############################################################################# @@ -28,23 +39,34 @@ import re unipen_file_pattern = re.compile(r'(^[0-9]{2,9}).*\.txt') def print_header(): - print """/****************************************************************************** + print """/**************************************************************************** +** +** Copyright (C) %s The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ ** -** Copyright (C) %s The Qt Company Ltd -** All rights reserved. -** For any questions to The Qt Company, please use contact form at http://qt.io +** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. ** -** This file is part of the Qt Virtual Keyboard add-on. +** $QT_BEGIN_LICENSE:GPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. ** -** Licensees holding valid commercial license for Qt may use this file in -** accordance with the Qt License Agreement provided with the Software -** or, alternatively, in accordance with the terms contained in a written -** agreement between you and The Qt Company. +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) any later version +** approved by the KDE Free Qt Foundation. The licenses are as published by +** the Free Software Foundation and appearing in the file LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** -** If you have questions regarding the use of this file, please use -** contact form at http://qt.io +** $QT_END_LICENSE$ ** -******************************************************************************/""" % datetime.datetime.now().year +****************************************************************************/""" % datetime.datetime.now().year def scan_unipen_files(path): file_list = [] diff --git a/tests/auto/inputpanel/hwr_test_data/cyrillic/1072_100_0.txt b/tests/auto/inputpanel/hwr_test_data/cyrillic/1072_100_0.txt new file mode 100644 index 00000000..b9749e07 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/cyrillic/1072_100_0.txt @@ -0,0 +1,91 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 95 +.Y_POINTS_PER_INCH 95 +.POINTS_PER_SECOND 60 +.PEN_DOWN +531 128 0 +532 128 56 +534 127 72 +536 127 100 +538 124 100 +539 124 103 +541 123 133 +544 122 133 +546 122 136 +548 122 165 +554 122 166 +557 121 168 +561 121 199 +570 125 200 +575 130 232 +579 135 233 +583 141 266 +586 148 266 +586 154 298 +586 160 299 +586 163 303 +586 166 332 +587 171 333 +587 174 336 +587 176 366 +587 180 367 +587 181 368 +587 182 399 +587 183 399 +588 185 400 +589 188 432 +589 190 465 +589 189 511 +589 187 548 +.PEN_UP +.PEN_DOWN +572 155 892 +567 153 935 +565 152 935 +562 150 964 +559 150 965 +556 150 967 +553 150 997 +548 150 998 +546 150 1000 +544 150 1030 +541 150 1031 +540 152 1031 +537 153 1064 +535 155 1064 +531 158 1065 +527 163 1097 +526 166 1098 +524 168 1130 +524 172 1131 +524 173 1136 +524 175 1163 +526 178 1164 +526 180 1167 +527 180 1196 +530 183 1197 +532 184 1199 +534 185 1229 +539 187 1230 +541 187 1231 +544 187 1263 +546 187 1264 +551 187 1264 +555 187 1297 +562 186 1297 +567 184 1330 +575 180 1330 +578 178 1347 +579 176 1363 +580 175 1363 +580 174 1380 +581 173 1396 +582 173 1440 +583 173 1465 +582 173 1640 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/cyrillic/1073_100_0.txt b/tests/auto/inputpanel/hwr_test_data/cyrillic/1073_100_0.txt new file mode 100644 index 00000000..3709db8e --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/cyrillic/1073_100_0.txt @@ -0,0 +1,102 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 95 +.Y_POINTS_PER_INCH 95 +.POINTS_PER_SECOND 60 +.PEN_DOWN +262 61 0 +260 61 5 +252 60 47 +246 60 49 +243 60 53 +239 60 86 +233 60 86 +229 60 118 +223 60 119 +216 60 151 +209 63 152 +204 64 156 +200 65 192 +192 67 193 +190 68 196 +188 70 218 +185 71 218 +180 74 220 +176 76 251 +170 81 252 +167 86 253 +162 94 289 +162 95 291 +160 98 292 +159 101 317 +157 107 318 +155 112 351 +154 119 352 +154 121 356 +154 125 384 +154 131 385 +154 134 388 +154 138 417 +154 143 418 +154 146 421 +155 148 450 +156 155 451 +156 157 452 +157 160 484 +158 170 485 +160 172 517 +164 178 518 +168 181 550 +173 185 551 +176 186 557 +178 187 584 +185 188 585 +188 188 589 +191 189 617 +196 189 618 +200 189 620 +202 189 650 +208 189 650 +210 188 652 +214 187 683 +218 184 684 +220 182 684 +221 180 717 +224 172 718 +226 166 757 +226 159 759 +226 158 783 +226 153 784 +226 151 789 +225 148 816 +224 145 817 +224 142 820 +224 141 849 +222 137 850 +221 136 852 +220 134 883 +216 130 883 +214 128 884 +211 127 916 +201 125 917 +194 122 949 +188 122 950 +183 121 983 +178 121 984 +173 121 1017 +169 121 1020 +168 121 1021 +162 121 1066 +160 121 1067 +157 121 1069 +156 122 1099 +154 122 1100 +152 122 1100 +151 123 1132 +149 124 1133 +147 124 1165 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/cyrillic/1073_100_1.txt b/tests/auto/inputpanel/hwr_test_data/cyrillic/1073_100_1.txt new file mode 100644 index 00000000..e3ba5b8d --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/cyrillic/1073_100_1.txt @@ -0,0 +1,98 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 95 +.Y_POINTS_PER_INCH 95 +.POINTS_PER_SECOND 60 +.PEN_DOWN +214 62 0 +210 62 38 +207 62 39 +203 62 72 +197 62 73 +194 62 76 +192 62 106 +186 63 109 +184 65 110 +175 67 155 +169 69 156 +166 70 156 +163 70 188 +154 74 189 +148 77 221 +144 82 222 +140 87 255 +138 93 256 +136 98 288 +134 103 289 +134 107 293 +134 109 326 +134 120 327 +134 125 355 +134 128 355 +133 132 356 +133 134 387 +133 143 389 +133 148 421 +133 153 422 +134 158 454 +135 164 454 +136 167 488 +138 173 489 +139 175 493 +141 177 521 +142 183 522 +144 185 524 +146 189 554 +150 193 555 +153 193 557 +157 194 590 +168 194 592 +177 194 620 +186 194 622 +195 193 654 +205 191 655 +211 190 687 +221 184 688 +223 183 693 +234 169 737 +243 163 738 +243 161 741 +244 159 770 +244 154 771 +244 152 773 +243 144 812 +237 137 813 +233 131 836 +232 128 837 +225 127 870 +221 127 871 +215 127 903 +208 127 904 +203 127 908 +198 127 936 +188 126 936 +184 126 941 +179 126 969 +171 126 970 +167 126 973 +162 126 1003 +156 126 1004 +154 126 1004 +151 126 1036 +146 126 1036 +142 128 1069 +140 129 1070 +137 131 1107 +133 131 1108 +132 132 1110 +131 132 1136 +128 132 1137 +127 132 1141 +127 133 1169 +125 134 1170 +125 135 1202 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/cyrillic/1075_100_0.txt b/tests/auto/inputpanel/hwr_test_data/cyrillic/1075_100_0.txt new file mode 100644 index 00000000..8bd436ae --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/cyrillic/1075_100_0.txt @@ -0,0 +1,60 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 95 +.Y_POINTS_PER_INCH 95 +.POINTS_PER_SECOND 60 +.PEN_DOWN +466 177 0 +466 176 60 +466 175 75 +466 173 105 +465 173 108 +465 172 134 +465 169 134 +464 167 167 +464 165 168 +463 161 200 +462 156 201 +462 154 203 +460 151 250 +460 148 251 +459 148 252 +459 147 283 +458 143 284 +458 140 316 +458 138 317 +458 136 350 +458 134 350 +458 133 383 +458 131 384 +458 129 417 +457 128 466 +457 127 466 +457 126 499 +457 125 533 +457 124 644 +459 124 749 +466 124 786 +469 124 787 +472 124 788 +481 124 815 +485 124 816 +488 125 820 +492 125 848 +499 125 849 +504 125 851 +508 125 881 +518 125 882 +523 125 883 +525 125 915 +532 125 916 +535 125 916 +540 125 948 +544 125 948 +547 125 997 +548 125 998 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/cyrillic/1080_100_0.txt b/tests/auto/inputpanel/hwr_test_data/cyrillic/1080_100_0.txt new file mode 100644 index 00000000..3e481cec --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/cyrillic/1080_100_0.txt @@ -0,0 +1,80 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 95 +.Y_POINTS_PER_INCH 95 +.POINTS_PER_SECOND 60 +.PEN_DOWN +751 123 0 +751 124 48 +751 126 65 +751 127 68 +751 128 98 +751 131 99 +751 133 100 +751 136 131 +751 140 132 +751 146 133 +751 152 164 +753 158 165 +756 165 197 +759 169 198 +759 171 232 +761 172 232 +761 173 236 +763 174 264 +764 176 265 +764 177 268 +767 178 298 +768 178 331 +772 178 332 +773 178 332 +776 178 364 +779 178 366 +781 176 397 +785 172 398 +788 166 430 +790 162 431 +792 159 437 +794 154 464 +797 148 465 +799 146 468 +801 144 501 +802 138 503 +802 134 530 +802 132 531 +802 129 532 +804 128 564 +807 123 564 +807 120 597 +807 118 598 +807 117 630 +807 116 663 +807 117 741 +808 120 783 +808 123 783 +810 129 813 +810 131 814 +810 136 847 +810 139 847 +810 141 852 +810 144 879 +810 149 880 +810 153 884 +810 155 912 +810 162 914 +810 164 916 +810 167 946 +811 171 947 +811 173 948 +811 174 979 +813 179 980 +814 181 1012 +814 183 1013 +814 184 1046 +814 186 1047 +815 187 1079 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/cyrillic/1082_100_0.txt b/tests/auto/inputpanel/hwr_test_data/cyrillic/1082_100_0.txt new file mode 100644 index 00000000..2892d7b9 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/cyrillic/1082_100_0.txt @@ -0,0 +1,99 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 95 +.Y_POINTS_PER_INCH 95 +.POINTS_PER_SECOND 60 +.PEN_DOWN +649 124 0 +649 125 189 +649 126 214 +649 127 255 +649 128 256 +649 130 256 +649 131 260 +649 133 289 +649 136 293 +649 138 322 +649 142 323 +649 143 324 +649 145 355 +649 149 356 +649 151 356 +649 156 388 +649 162 389 +650 164 421 +651 167 423 +651 170 454 +651 172 455 +651 174 461 +651 175 488 +651 177 489 +651 179 492 +651 180 521 +651 182 522 +651 183 554 +651 184 588 +651 183 853 +651 182 887 +.PEN_UP +.PEN_DOWN +690 123 1328 +689 123 1369 +689 124 1373 +687 126 1402 +686 126 1435 +682 129 1436 +681 132 1469 +678 132 1470 +673 136 1518 +669 140 1519 +667 140 1524 +666 141 1552 +664 142 1553 +663 143 1556 +661 143 1585 +659 145 1586 +657 147 1589 +655 147 1618 +654 148 1651 +653 149 1685 +653 150 1718 +652 150 1724 +.PEN_UP +.PEN_DOWN +653 151 2376 +654 151 2419 +655 151 2419 +656 151 2450 +657 151 2452 +658 151 2483 +660 151 2516 +663 151 2517 +664 152 2549 +666 153 2550 +669 153 2583 +671 155 2584 +673 156 2588 +674 156 2616 +677 157 2617 +678 158 2650 +680 159 2650 +680 161 2653 +681 161 2683 +683 163 2683 +684 164 2684 +685 165 2716 +687 167 2717 +688 167 2749 +689 168 2783 +689 169 2784 +691 170 2788 +692 171 2815 +692 172 2820 +692 173 2849 +692 174 2882 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/cyrillic/1083_100_0.txt b/tests/auto/inputpanel/hwr_test_data/cyrillic/1083_100_0.txt new file mode 100644 index 00000000..47f48853 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/cyrillic/1083_100_0.txt @@ -0,0 +1,69 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 95 +.Y_POINTS_PER_INCH 95 +.POINTS_PER_SECOND 60 +.PEN_DOWN +313 163 0 +313 164 52 +313 165 68 +313 168 102 +314 172 103 +315 174 134 +316 175 135 +320 177 168 +323 178 169 +324 178 173 +327 178 201 +332 178 202 +335 178 205 +340 178 243 +344 178 244 +346 176 245 +349 174 284 +352 169 285 +354 166 318 +357 163 318 +360 158 350 +362 154 351 +364 151 357 +365 150 384 +369 144 385 +371 140 388 +372 139 417 +375 133 417 +376 132 421 +380 131 451 +381 130 452 +382 129 484 +385 129 484 +387 129 517 +389 129 518 +391 129 550 +394 129 552 +395 129 557 +398 131 584 +400 131 588 +402 132 617 +403 133 618 +404 134 620 +405 134 650 +407 135 651 +408 135 652 +410 137 683 +410 138 684 +410 139 684 +412 141 717 +413 143 717 +414 145 751 +415 147 751 +415 148 784 +416 149 816 +416 150 820 +416 151 849 +416 152 852 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/cyrillic/1088_100_0.txt b/tests/auto/inputpanel/hwr_test_data/cyrillic/1088_100_0.txt new file mode 100644 index 00000000..820a029e --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/cyrillic/1088_100_0.txt @@ -0,0 +1,97 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 95 +.Y_POINTS_PER_INCH 95 +.POINTS_PER_SECOND 60 +.PEN_DOWN +639 127 0 +639 128 48 +640 130 65 +640 132 68 +640 133 98 +640 138 99 +640 140 101 +640 150 148 +641 159 149 +644 167 181 +646 176 182 +646 185 215 +646 193 216 +646 200 247 +646 209 248 +646 211 253 +647 215 281 +647 218 282 +647 220 285 +647 221 314 +648 225 315 +648 227 317 +648 228 349 +648 233 350 +648 237 399 +648 240 400 +648 241 430 +648 243 431 +648 245 464 +648 246 497 +648 247 498 +648 246 605 +.PEN_UP +.PEN_DOWN +644 143 1072 +644 142 1105 +644 138 1126 +644 135 1127 +644 129 1168 +644 126 1169 +644 123 1173 +645 122 1196 +646 122 1196 +648 120 1197 +649 119 1229 +654 117 1229 +657 114 1262 +660 113 1263 +664 113 1295 +668 113 1295 +674 113 1328 +677 113 1329 +679 114 1333 +680 114 1361 +683 116 1362 +685 117 1365 +687 118 1395 +689 122 1395 +690 124 1396 +690 126 1428 +691 131 1429 +691 136 1465 +691 143 1467 +690 145 1469 +688 151 1511 +687 158 1512 +685 159 1516 +684 160 1544 +681 163 1545 +680 164 1549 +678 164 1577 +674 166 1578 +673 166 1581 +671 166 1611 +667 167 1612 +666 167 1612 +664 167 1644 +663 168 1645 +661 168 1645 +658 168 1677 +656 168 1678 +654 168 1711 +653 168 1712 +651 168 1745 +650 168 1745 +650 167 1778 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/cyrillic/1089_100_0.txt b/tests/auto/inputpanel/hwr_test_data/cyrillic/1089_100_0.txt new file mode 100644 index 00000000..31275451 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/cyrillic/1089_100_0.txt @@ -0,0 +1,47 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 95 +.Y_POINTS_PER_INCH 95 +.POINTS_PER_SECOND 60 +.PEN_DOWN +633 126 0 +631 126 39 +629 126 40 +627 125 43 +625 125 70 +620 125 70 +617 125 75 +616 125 103 +611 125 104 +607 125 108 +603 125 136 +597 126 139 +593 128 143 +585 133 172 +578 139 173 +574 144 203 +572 152 205 +572 157 236 +572 164 238 +573 171 269 +576 176 270 +583 182 304 +587 184 306 +591 184 309 +606 185 353 +617 184 353 +623 182 355 +627 180 386 +634 178 387 +635 177 387 +635 176 419 +635 174 420 +633 173 453 +632 173 453 +632 172 488 +631 172 492 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/cyrillic/1098_100_0.txt b/tests/auto/inputpanel/hwr_test_data/cyrillic/1098_100_0.txt new file mode 100644 index 00000000..fe0e80f8 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/cyrillic/1098_100_0.txt @@ -0,0 +1,112 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 95 +.Y_POINTS_PER_INCH 95 +.POINTS_PER_SECOND 60 +.PEN_DOWN +259 124 0 +260 124 69 +262 124 90 +264 124 93 +266 124 114 +267 124 117 +269 124 145 +271 124 146 +272 124 149 +273 125 178 +274 125 179 +275 125 180 +277 125 211 +278 127 212 +278 129 245 +279 132 246 +279 134 278 +279 136 279 +279 139 312 +279 142 313 +279 145 317 +279 146 345 +279 151 345 +279 154 348 +279 156 378 +279 162 379 +279 164 381 +279 166 412 +279 171 412 +279 172 413 +279 175 444 +279 178 445 +279 179 478 +279 180 480 +279 181 484 +279 182 511 +279 181 1037 +279 178 1085 +279 176 1086 +279 173 1109 +279 172 1110 +279 171 1143 +279 169 1144 +279 167 1177 +279 165 1177 +280 163 1180 +281 162 1210 +282 156 1210 +282 155 1212 +282 152 1244 +283 150 1246 +285 149 1293 +290 149 1293 +293 149 1327 +295 149 1327 +298 149 1359 +300 149 1360 +302 149 1392 +303 150 1393 +304 150 1426 +305 152 1426 +305 153 1429 +306 155 1459 +306 157 1460 +307 159 1461 +308 160 1492 +308 166 1493 +309 169 1526 +309 171 1526 +309 173 1558 +309 175 1592 +309 176 1593 +309 177 1597 +308 178 1625 +308 180 1626 +307 180 1629 +307 181 1659 +306 182 1659 +305 182 1661 +303 182 1691 +302 182 1692 +301 182 1725 +300 182 1726 +298 182 1759 +296 182 1759 +294 182 1792 +293 182 1797 +291 182 1825 +291 181 1858 +289 181 1858 +289 180 1891 +288 180 1925 +287 180 1965 +286 180 2061 +285 179 2108 +284 179 2108 +283 179 2140 +283 178 2141 +281 178 2174 +280 177 2174 +279 177 2223 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/greek/917_100_0.txt b/tests/auto/inputpanel/hwr_test_data/greek/917_100_0.txt new file mode 100644 index 00000000..91f3e306 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/greek/917_100_0.txt @@ -0,0 +1,100 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 95 +.Y_POINTS_PER_INCH 95 +.POINTS_PER_SECOND 60 +.PEN_DOWN +199 59 0 +199 60 52 +199 62 68 +199 68 105 +199 77 108 +199 80 113 +199 103 153 +199 108 159 +200 115 165 +200 120 183 +201 129 205 +202 138 223 +202 145 244 +202 151 257 +202 154 271 +202 158 287 +202 161 304 +203 162 320 +203 164 337 +203 165 353 +204 167 370 +205 169 387 +206 173 404 +208 175 420 +208 176 437 +209 177 453 +210 178 470 +210 179 486 +211 180 520 +214 180 520 +217 180 523 +218 180 553 +226 180 555 +231 180 557 +245 180 603 +261 180 604 +274 180 636 +285 180 637 +294 180 669 +301 180 670 +306 180 702 +310 180 703 +311 180 707 +312 180 736 +311 179 836 +309 177 869 +.PEN_UP +.PEN_DOWN +198 122 1336 +200 122 1396 +207 122 1414 +210 122 1448 +220 122 1469 +231 122 1473 +236 122 1501 +240 122 1512 +243 121 1514 +245 121 1515 +247 121 1551 +249 121 1551 +250 120 1556 +251 119 1585 +.PEN_UP +.PEN_DOWN +199 48 2190 +199 50 2235 +200 50 2236 +203 50 2266 +206 50 2266 +209 50 2268 +212 50 2298 +225 50 2301 +235 50 2305 +243 50 2321 +252 50 2341 +278 50 2342 +291 50 2366 +296 50 2367 +298 50 2399 +299 50 2435 +302 50 2482 +303 50 2483 +304 50 2515 +307 50 2515 +310 50 2557 +315 50 2559 +317 50 2563 +318 50 2587 +319 50 2652 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/greek/940_100_0.txt b/tests/auto/inputpanel/hwr_test_data/greek/940_100_0.txt new file mode 100644 index 00000000..383fe4f2 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/greek/940_100_0.txt @@ -0,0 +1,77 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 95 +.Y_POINTS_PER_INCH 95 +.POINTS_PER_SECOND 60 +.PEN_DOWN +546 127 0 +545 127 66 +544 126 91 +543 126 127 +540 125 137 +538 125 159 +531 125 180 +524 127 198 +518 130 220 +513 135 236 +508 143 253 +507 148 270 +506 154 286 +506 161 303 +506 170 319 +506 177 336 +506 184 353 +507 190 369 +510 193 386 +515 196 403 +518 196 419 +520 196 436 +522 196 452 +524 194 469 +527 190 486 +531 186 503 +535 181 518 +542 177 535 +548 173 552 +552 167 569 +554 164 586 +555 159 602 +556 152 619 +556 146 635 +556 142 652 +557 138 668 +557 135 685 +557 133 702 +556 132 718 +556 130 735 +555 130 752 +556 135 965 +557 137 971 +559 144 1001 +560 149 1002 +560 152 1003 +561 163 1034 +562 170 1035 +562 176 1067 +563 182 1067 +564 184 1100 +564 187 1101 +564 188 1134 +563 188 1186 +562 186 1233 +561 185 1234 +.PEN_UP +.PEN_DOWN +534 87 1751 +534 89 1798 +534 92 1799 +534 93 1803 +534 94 1832 +534 96 1833 +534 97 1835 +534 98 1865 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/greek/951_100_0.txt b/tests/auto/inputpanel/hwr_test_data/greek/951_100_0.txt new file mode 100644 index 00000000..242010c9 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/greek/951_100_0.txt @@ -0,0 +1,77 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 95 +.Y_POINTS_PER_INCH 95 +.POINTS_PER_SECOND 60 +.PEN_DOWN +453 123 0 +453 125 49 +453 127 50 +453 128 52 +453 130 82 +453 133 83 +453 135 85 +453 139 115 +453 148 118 +453 155 149 +453 163 160 +453 167 161 +453 171 164 +453 174 198 +453 183 200 +453 184 204 +453 186 231 +453 188 232 +453 189 236 +453 190 264 +453 188 436 +453 179 486 +455 175 486 +456 171 514 +457 169 515 +458 166 516 +458 161 547 +461 155 547 +466 148 580 +471 141 581 +475 137 614 +477 135 614 +481 132 647 +483 130 648 +484 130 652 +485 129 680 +486 129 681 +487 129 714 +489 129 715 +490 129 747 +491 130 748 +493 132 780 +500 137 780 +504 142 813 +508 150 813 +512 157 846 +514 164 847 +515 169 852 +515 173 880 +516 183 880 +516 186 883 +516 191 913 +516 200 913 +516 203 917 +516 208 946 +516 215 947 +516 220 948 +515 226 980 +514 233 980 +514 238 1013 +513 242 1014 +513 245 1046 +513 247 1047 +513 248 1052 +513 249 1096 +513 250 1129 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/greek/953_100_0.txt b/tests/auto/inputpanel/hwr_test_data/greek/953_100_0.txt new file mode 100644 index 00000000..168d4ad4 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/greek/953_100_0.txt @@ -0,0 +1,36 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 95 +.Y_POINTS_PER_INCH 95 +.POINTS_PER_SECOND 60 +.PEN_DOWN +322 123 0 +322 124 48 +322 125 61 +322 127 65 +322 129 85 +322 131 85 +322 133 89 +322 136 119 +322 140 120 +322 143 123 +322 147 160 +322 155 161 +322 162 185 +322 164 186 +322 168 218 +322 171 218 +322 174 250 +322 177 251 +321 178 284 +321 179 289 +321 180 318 +321 181 318 +321 182 351 +321 183 351 +321 184 353 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/greek/954_100_0.txt b/tests/auto/inputpanel/hwr_test_data/greek/954_100_0.txt new file mode 100644 index 00000000..65bc0d94 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/greek/954_100_0.txt @@ -0,0 +1,80 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 95 +.Y_POINTS_PER_INCH 95 +.POINTS_PER_SECOND 60 +.PEN_DOWN +424 122 0 +424 123 43 +424 124 59 +424 127 89 +424 130 90 +424 133 91 +424 136 124 +424 149 128 +424 153 144 +424 157 164 +424 170 165 +424 176 190 +423 178 190 +423 180 195 +423 182 222 +423 187 223 +423 188 256 +423 189 257 +423 190 289 +423 189 420 +423 188 427 +423 186 472 +.PEN_UP +.PEN_DOWN +476 122 919 +476 124 971 +473 126 996 +473 127 996 +468 130 1021 +467 132 1024 +465 132 1028 +461 134 1053 +454 139 1065 +449 141 1067 +445 143 1068 +437 147 1104 +430 151 1105 +428 152 1107 +426 153 1137 +420 155 1137 +418 155 1138 +418 156 1170 +417 156 1171 +419 156 1300 +424 157 1352 +426 157 1353 +428 157 1354 +434 157 1386 +438 158 1387 +443 159 1419 +447 163 1420 +451 165 1453 +453 168 1453 +455 171 1486 +455 173 1487 +455 174 1491 +456 176 1519 +457 177 1523 +457 178 1552 +458 180 1553 +459 180 1586 +459 181 1586 +460 181 1635 +460 182 1670 +460 183 1702 +461 183 1754 +461 184 1799 +462 185 1801 +461 185 1971 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/greek/955_100_0.txt b/tests/auto/inputpanel/hwr_test_data/greek/955_100_0.txt new file mode 100644 index 00000000..d651821f --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/greek/955_100_0.txt @@ -0,0 +1,64 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 95 +.Y_POINTS_PER_INCH 95 +.POINTS_PER_SECOND 60 +.PEN_DOWN +308 61 0 +309 61 67 +309 62 83 +310 66 109 +311 68 112 +312 70 127 +313 74 147 +319 84 148 +329 96 172 +330 101 173 +338 114 204 +346 124 205 +352 134 237 +358 145 238 +361 149 254 +363 153 270 +365 160 271 +368 165 303 +370 170 304 +371 173 307 +374 177 337 +374 178 338 +375 179 370 +375 180 371 +375 181 402 +375 182 403 +375 183 437 +375 182 540 +.PEN_UP +.PEN_DOWN +333 119 943 +332 119 987 +330 121 1003 +326 124 1034 +321 131 1035 +315 137 1070 +308 145 1074 +305 149 1089 +302 152 1110 +290 159 1111 +285 163 1136 +284 165 1137 +282 167 1139 +281 168 1168 +279 174 1169 +277 175 1171 +276 177 1202 +274 179 1202 +273 180 1235 +271 180 1235 +271 181 1268 +269 181 1397 +269 179 1440 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/greek/957_100_0.txt b/tests/auto/inputpanel/hwr_test_data/greek/957_100_0.txt new file mode 100644 index 00000000..60ffed1a --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/greek/957_100_0.txt @@ -0,0 +1,46 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 95 +.Y_POINTS_PER_INCH 95 +.POINTS_PER_SECOND 60 +.PEN_DOWN +216 122 0 +216 123 68 +216 124 81 +217 126 85 +219 135 124 +219 142 128 +219 147 143 +219 150 163 +220 159 164 +220 165 189 +220 167 190 +221 171 196 +221 172 222 +223 176 223 +224 179 261 +224 180 262 +224 181 373 +224 182 557 +226 177 605 +227 173 638 +229 170 639 +229 167 644 +231 163 671 +235 155 671 +237 151 676 +241 146 704 +245 140 705 +248 138 707 +252 133 744 +253 129 745 +254 127 747 +256 123 770 +257 120 772 +258 117 804 +258 116 804 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1488_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1488_100_0.txt new file mode 100644 index 00000000..c26b2dab --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1488_100_0.txt @@ -0,0 +1,54 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +510 64 0 +510 65 53 +510 68 54 +510 77 114 +513 90 115 +513 103 180 +513 118 181 +511 132 236 +511 144 236 +511 149 296 +509 160 297 +509 164 357 +509 166 358 +509 168 363 +509 169 421 +509 170 451 +509 172 482 +509 173 700 +.PEN_UP +.PEN_DOWN +573 128 1152 +570 123 1216 +566 121 1217 +562 120 1219 +559 120 1274 +548 122 1276 +538 126 1333 +526 132 1334 +521 138 1394 +521 141 1394 +522 148 1395 +522 149 1454 +525 154 1455 +530 159 1515 +548 170 1516 +568 179 1576 +587 182 1577 +594 182 1579 +599 182 1637 +605 182 1638 +610 180 1703 +611 178 1703 +611 176 1780 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1489_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1489_100_0.txt new file mode 100644 index 00000000..706d0ef5 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1489_100_0.txt @@ -0,0 +1,70 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +436 76 0 +436 75 117 +437 74 143 +437 73 167 +438 72 193 +438 69 194 +439 68 196 +441 65 261 +448 62 263 +457 59 317 +467 57 318 +482 56 380 +489 57 382 +496 59 438 +502 63 439 +509 67 499 +510 69 500 +512 72 501 +513 77 560 +514 87 561 +515 96 621 +515 101 621 +515 111 681 +514 113 682 +512 119 683 +512 121 684 +509 125 742 +506 131 743 +504 134 748 +503 136 807 +500 138 809 +497 141 813 +494 143 866 +491 145 866 +489 146 926 +488 146 927 +487 146 932 +484 146 989 +475 146 990 +468 143 1052 +465 142 1055 +460 142 1111 +455 141 1112 +453 141 1171 +452 141 1233 +449 141 1234 +448 141 1294 +444 141 1294 +443 143 1356 +441 145 1357 +440 148 1417 +437 155 1417 +435 158 1477 +433 162 1478 +431 167 1538 +430 171 1538 +429 173 1602 +428 174 1603 +427 177 1660 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1490_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1490_100_0.txt new file mode 100644 index 00000000..9dab500a --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1490_100_0.txt @@ -0,0 +1,62 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +541 57 0 +542 58 133 +542 59 160 +543 60 206 +544 62 207 +546 67 266 +546 68 267 +546 72 268 +547 78 328 +548 86 329 +550 95 390 +550 103 391 +551 108 454 +553 118 455 +554 125 511 +555 130 512 +555 131 516 +555 133 572 +555 134 633 +555 135 634 +555 136 694 +555 135 989 +555 134 1035 +555 132 1036 +555 130 1091 +555 126 1092 +555 123 1152 +555 120 1154 +553 119 1157 +551 117 1213 +549 116 1214 +544 116 1274 +538 116 1275 +531 116 1277 +524 117 1335 +513 119 1336 +502 127 1395 +501 130 1396 +498 135 1457 +495 145 1457 +495 154 1518 +496 162 1519 +501 171 1579 +507 178 1580 +517 184 1639 +527 188 1640 +538 189 1701 +545 189 1702 +560 186 1762 +570 182 1763 +572 179 1823 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1491_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1491_100_0.txt new file mode 100644 index 00000000..8260c68b --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1491_100_0.txt @@ -0,0 +1,63 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +470 76 0 +470 74 67 +470 72 97 +475 69 158 +477 67 159 +482 65 188 +484 65 219 +488 65 220 +497 64 278 +515 65 279 +517 66 284 +520 67 340 +523 70 341 +525 74 400 +528 83 401 +530 97 466 +530 102 466 +530 110 523 +530 112 524 +527 118 524 +526 119 587 +513 127 590 +504 130 650 +500 131 651 +494 132 707 +490 133 708 +483 134 768 +481 134 769 +480 134 772 +479 134 830 +478 134 862 +477 134 888 +475 131 889 +475 130 953 +475 129 953 +477 129 1010 +479 129 1011 +483 129 1070 +486 129 1071 +492 131 1130 +497 136 1131 +503 142 1195 +506 145 1197 +510 150 1198 +514 157 1252 +518 164 1254 +519 172 1313 +520 174 1314 +521 178 1315 +523 182 1374 +524 187 1375 +525 190 1439 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1492_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1492_100_0.txt new file mode 100644 index 00000000..1edc1b99 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1492_100_0.txt @@ -0,0 +1,70 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +463 92 0 +463 91 68 +462 90 70 +462 89 103 +462 87 104 +462 85 154 +462 83 155 +464 80 156 +466 76 215 +466 75 216 +471 69 221 +475 67 277 +478 65 278 +481 63 278 +483 63 336 +497 60 337 +508 60 340 +517 60 397 +523 60 398 +527 62 458 +534 65 459 +541 69 518 +544 76 519 +545 84 584 +548 95 585 +548 97 588 +549 100 640 +550 107 641 +551 108 644 +552 112 701 +554 117 702 +557 124 762 +559 132 763 +560 137 823 +561 143 824 +561 146 889 +561 152 890 +561 154 945 +561 157 946 +561 160 1007 +561 161 1008 +561 163 1073 +561 166 1129 +561 168 1189 +561 169 1285 +560 169 1397 +.PEN_UP +.PEN_DOWN +504 145 2008 +504 147 2077 +504 149 2094 +504 152 2132 +504 153 2133 +503 161 2193 +502 167 2193 +502 169 2196 +502 170 2253 +502 174 2254 +502 175 2364 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1493_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1493_100_0.txt new file mode 100644 index 00000000..fc8c12d7 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1493_100_0.txt @@ -0,0 +1,41 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +450 36 0 +450 37 60 +450 39 89 +451 40 92 +451 44 152 +452 46 154 +452 49 156 +452 51 211 +452 58 212 +452 63 276 +451 68 277 +450 73 278 +449 87 333 +447 99 334 +446 110 394 +445 112 395 +444 119 396 +443 127 453 +442 138 454 +440 148 517 +439 158 519 +437 164 576 +436 171 577 +435 174 639 +435 176 641 +435 177 644 +435 178 699 +434 178 700 +434 179 772 +434 180 821 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1494_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1494_100_0.txt new file mode 100644 index 00000000..dca35755 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1494_100_0.txt @@ -0,0 +1,55 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +472 63 0 +472 64 49 +471 67 50 +471 69 52 +469 75 115 +468 79 115 +467 86 172 +466 95 172 +465 97 233 +464 104 234 +463 106 235 +461 116 294 +461 120 296 +461 122 355 +460 124 356 +460 123 507 +460 122 568 +465 121 569 +466 120 571 +475 119 629 +481 119 630 +490 119 691 +494 120 693 +499 123 750 +502 126 751 +505 130 755 +506 133 811 +510 141 813 +511 145 872 +513 153 873 +513 160 876 +513 164 936 +513 172 939 +509 177 993 +507 179 994 +506 181 995 +503 182 1056 +497 184 1058 +488 184 1116 +485 184 1117 +473 184 1178 +467 182 1179 +463 180 1239 +459 178 1240 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1495_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1495_100_0.txt new file mode 100644 index 00000000..2cb36edb --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1495_100_0.txt @@ -0,0 +1,63 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +435 74 0 +435 73 156 +435 71 181 +445 65 250 +451 62 252 +455 61 310 +466 58 311 +476 57 371 +479 57 372 +488 63 432 +495 73 433 +499 80 493 +501 87 495 +502 91 524 +503 99 557 +504 111 558 +504 116 614 +502 125 617 +502 128 620 +502 133 674 +498 142 674 +495 152 738 +495 159 740 +495 162 795 +495 165 797 +495 167 856 +495 170 857 +495 172 919 +495 173 977 +495 174 978 +494 174 1124 +494 173 1189 +.PEN_UP +.PEN_DOWN +436 64 1560 +436 68 1615 +436 73 1616 +435 75 1619 +434 83 1675 +432 93 1676 +430 106 1736 +425 117 1737 +423 122 1797 +421 133 1797 +419 147 1860 +418 154 1863 +417 160 1920 +417 163 1920 +416 169 1981 +416 171 1982 +415 174 2046 +414 174 2207 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1496_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1496_100_0.txt new file mode 100644 index 00000000..bdaaa200 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1496_100_0.txt @@ -0,0 +1,42 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +504 89 0 +504 92 57 +504 94 88 +505 98 91 +505 100 148 +506 109 149 +504 128 209 +501 137 210 +501 139 211 +499 144 271 +491 150 272 +485 154 275 +479 156 337 +465 159 337 +459 161 340 +453 161 393 +446 162 394 +428 157 455 +417 150 456 +410 138 515 +403 122 516 +401 117 576 +403 92 577 +423 67 639 +441 50 641 +459 39 698 +470 32 699 +497 24 759 +503 22 760 +506 21 820 +508 21 821 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1497_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1497_100_0.txt new file mode 100644 index 00000000..d638304a --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1497_100_0.txt @@ -0,0 +1,21 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +474 54 0 +474 55 51 +474 57 52 +474 62 111 +473 65 112 +470 72 116 +469 74 163 +467 82 164 +467 84 223 +467 85 285 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1498_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1498_100_0.txt new file mode 100644 index 00000000..c23f0370 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1498_100_0.txt @@ -0,0 +1,60 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +401 74 0 +400 73 158 +400 72 183 +400 67 254 +401 65 255 +407 62 318 +412 60 319 +416 59 375 +429 58 376 +437 58 381 +446 58 437 +454 58 438 +457 60 498 +461 67 499 +465 77 564 +466 91 565 +466 97 620 +465 105 620 +462 109 622 +460 113 681 +456 118 682 +451 122 685 +447 124 742 +445 128 743 +442 132 804 +441 135 804 +440 139 863 +440 144 864 +440 146 868 +440 150 924 +440 154 925 +440 158 985 +440 163 986 +440 167 989 +440 174 1051 +438 182 1051 +438 184 1054 +438 188 1106 +438 196 1107 +436 205 1167 +435 212 1167 +435 216 1228 +435 219 1229 +434 220 1230 +434 221 1288 +434 224 1289 +434 225 1349 +434 226 1410 +433 226 1518 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1499_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1499_100_0.txt new file mode 100644 index 00000000..d722cdc6 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1499_100_0.txt @@ -0,0 +1,50 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +419 65 0 +420 65 99 +423 63 126 +426 61 167 +429 60 171 +431 60 227 +438 59 228 +444 59 288 +455 59 289 +461 60 292 +467 61 350 +475 65 351 +481 70 411 +488 78 412 +493 85 472 +495 90 473 +498 106 537 +498 118 538 +497 121 539 +494 129 594 +493 131 595 +484 142 654 +474 149 655 +465 155 715 +461 157 716 +457 159 717 +454 159 777 +446 161 779 +442 161 780 +438 161 838 +428 161 839 +420 160 898 +413 159 899 +409 158 959 +408 158 1019 +406 156 1020 +405 155 1083 +404 155 1085 +404 154 1141 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1500_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1500_100_0.txt new file mode 100644 index 00000000..c877d06a --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1500_100_0.txt @@ -0,0 +1,64 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +477 154 0 +476 154 308 +474 155 340 +472 156 380 +471 157 446 +467 160 448 +466 162 501 +465 164 502 +463 166 562 +462 169 564 +461 173 622 +461 174 623 +461 177 682 +461 179 683 +461 180 684 +462 180 745 +464 184 747 +467 186 804 +472 188 865 +474 189 866 +478 189 930 +483 189 931 +485 187 988 +487 184 988 +489 176 1049 +489 175 1052 +488 170 1108 +484 166 1109 +479 164 1169 +475 161 1171 +471 156 1231 +468 153 1232 +466 150 1235 +464 147 1293 +462 143 1296 +459 135 1351 +458 133 1352 +457 124 1356 +456 117 1412 +455 111 1413 +454 106 1414 +454 94 1472 +454 86 1473 +454 78 1476 +457 69 1534 +460 54 1535 +463 46 1540 +465 40 1594 +473 31 1595 +480 25 1656 +491 20 1657 +493 18 1659 +499 16 1717 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1501_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1501_100_0.txt new file mode 100644 index 00000000..a91ddc9f --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1501_100_0.txt @@ -0,0 +1,52 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +452 111 0 +455 113 68 +469 117 104 +487 121 107 +503 124 159 +511 125 160 +518 125 162 +520 125 221 +533 124 222 +540 122 227 +545 119 281 +548 116 282 +548 114 283 +549 109 344 +549 101 346 +548 91 404 +543 82 405 +540 78 464 +531 70 465 +528 68 525 +518 63 526 +516 63 586 +501 62 587 +486 64 645 +471 70 646 +462 77 711 +456 84 712 +450 93 716 +448 105 768 +447 113 769 +446 122 771 +445 130 831 +443 145 833 +443 148 836 +442 153 889 +442 162 890 +442 163 891 +442 168 949 +442 171 950 +442 175 1015 +441 177 1073 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1502_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1502_100_0.txt new file mode 100644 index 00000000..8d3728fc --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1502_100_0.txt @@ -0,0 +1,62 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +583 58 0 +582 59 63 +581 63 93 +581 64 154 +579 79 155 +579 90 215 +578 107 216 +577 111 218 +576 122 278 +574 133 280 +571 147 336 +569 159 337 +565 167 398 +562 173 399 +559 177 404 +557 180 458 +556 181 459 +556 182 520 +556 183 520 +554 181 604 +550 176 673 +534 158 675 +524 144 731 +516 129 732 +510 113 792 +500 92 793 +495 80 855 +490 66 857 +489 62 860 +486 55 914 +485 53 915 +484 51 915 +484 53 1100 +481 60 1157 +478 70 1158 +476 83 1218 +474 93 1219 +473 98 1219 +470 108 1279 +466 119 1280 +461 136 1340 +458 149 1341 +455 159 1401 +452 169 1403 +448 176 1404 +446 182 1462 +446 186 1463 +444 188 1467 +443 189 1524 +443 190 1525 +442 191 1588 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1503_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1503_100_0.txt new file mode 100644 index 00000000..93d0173a --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1503_100_0.txt @@ -0,0 +1,40 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +454 58 0 +454 61 54 +454 62 59 +454 64 114 +454 67 114 +454 73 180 +455 83 181 +456 91 237 +456 103 238 +456 114 297 +456 129 298 +457 144 358 +457 152 359 +458 163 362 +458 167 430 +463 190 432 +463 192 434 +463 197 489 +463 203 490 +463 207 551 +463 211 552 +463 213 606 +463 214 606 +463 216 611 +463 217 669 +463 218 932 +463 219 1000 +463 220 1061 +463 221 1121 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1504_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1504_100_0.txt new file mode 100644 index 00000000..48e6b8b0 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1504_100_0.txt @@ -0,0 +1,43 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +519 63 0 +519 65 83 +519 67 100 +519 77 145 +517 85 205 +516 99 206 +516 113 266 +516 123 267 +516 125 327 +515 139 328 +514 147 388 +513 154 388 +512 161 450 +511 164 450 +509 167 512 +506 170 514 +504 172 516 +503 173 572 +500 175 573 +492 177 632 +492 178 633 +486 179 634 +482 179 694 +478 180 695 +476 180 699 +472 180 755 +462 178 756 +451 175 823 +447 173 824 +443 171 827 +440 171 883 +438 170 884 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1505_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1505_100_0.txt new file mode 100644 index 00000000..531f9549 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1505_100_0.txt @@ -0,0 +1,52 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +510 62 0 +511 62 76 +516 62 100 +519 62 133 +521 62 134 +528 65 194 +533 69 195 +537 76 255 +539 81 256 +542 92 259 +546 106 316 +548 121 317 +549 131 377 +549 140 378 +547 144 380 +545 151 443 +541 160 443 +534 167 498 +532 169 499 +526 172 560 +521 173 561 +518 173 564 +514 173 621 +507 173 622 +497 171 682 +484 165 683 +480 163 685 +468 154 742 +459 145 743 +455 138 808 +453 127 809 +452 116 865 +452 110 866 +455 101 868 +456 98 926 +470 83 927 +481 76 985 +484 74 987 +492 70 988 +496 68 1046 +505 62 1047 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1506_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1506_100_0.txt new file mode 100644 index 00000000..94228e57 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1506_100_0.txt @@ -0,0 +1,48 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +484 63 0 +485 63 47 +491 64 77 +500 69 138 +511 77 139 +523 90 199 +531 101 200 +537 116 263 +540 131 265 +542 137 321 +544 150 322 +545 162 383 +545 174 384 +543 180 388 +540 185 450 +538 187 451 +534 189 452 +528 191 506 +519 191 507 +516 191 508 +509 187 565 +504 182 566 +500 175 627 +497 164 629 +496 155 688 +496 144 689 +498 133 691 +507 122 749 +520 108 750 +523 105 808 +540 91 809 +546 87 812 +554 83 869 +562 79 871 +564 76 937 +564 75 939 +564 74 1005 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1507_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1507_100_0.txt new file mode 100644 index 00000000..1269c595 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1507_100_0.txt @@ -0,0 +1,65 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +475 93 0 +475 92 67 +474 92 92 +473 92 143 +470 89 144 +468 88 205 +465 83 205 +464 82 261 +463 77 262 +463 75 267 +465 73 322 +470 67 323 +482 63 384 +490 58 386 +501 51 444 +510 41 445 +514 34 505 +515 24 506 +515 18 565 +511 14 569 +504 11 630 +497 9 631 +494 9 691 +479 8 692 +475 11 748 +469 17 749 +468 33 809 +473 47 810 +482 64 869 +494 81 870 +507 100 930 +513 111 931 +515 121 991 +516 134 992 +516 143 1053 +508 152 1055 +496 161 1112 +491 164 1113 +485 166 1115 +478 168 1172 +467 169 1173 +457 169 1233 +453 167 1234 +450 165 1235 +446 159 1297 +444 154 1299 +443 150 1301 +443 141 1356 +445 135 1356 +454 126 1417 +472 117 1418 +490 112 1477 +502 109 1478 +506 107 1540 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1508_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1508_100_0.txt new file mode 100644 index 00000000..89e15c7e --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1508_100_0.txt @@ -0,0 +1,53 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +439 67 0 +439 66 69 +440 64 85 +442 63 134 +451 57 135 +463 55 200 +475 53 200 +486 53 255 +497 56 256 +507 64 315 +512 69 316 +516 74 318 +519 82 377 +524 95 378 +524 101 381 +525 109 438 +525 119 439 +522 138 498 +515 153 499 +513 155 502 +505 164 559 +500 171 560 +498 173 566 +494 177 620 +485 183 621 +478 185 688 +471 184 690 +469 182 693 +462 172 751 +456 160 753 +453 157 757 +452 152 813 +449 143 814 +449 137 874 +449 131 876 +456 125 927 +464 120 927 +470 119 986 +476 118 987 +484 117 1046 +485 117 1047 +486 117 1107 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1509_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1509_100_0.txt new file mode 100644 index 00000000..c3773b78 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1509_100_0.txt @@ -0,0 +1,73 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +507 123 0 +505 124 164 +502 125 189 +501 126 234 +499 126 234 +497 127 237 +496 128 301 +482 138 302 +476 144 356 +470 153 356 +466 160 416 +463 168 417 +461 177 484 +461 189 486 +463 193 539 +464 195 540 +467 201 540 +472 204 599 +478 208 600 +479 209 604 +484 210 660 +492 210 661 +515 208 721 +530 205 722 +538 196 782 +540 189 783 +542 177 788 +543 174 843 +543 162 844 +535 149 904 +517 135 905 +500 129 970 +479 122 971 +467 117 1028 +456 110 1030 +450 105 1088 +449 100 1089 +448 94 1148 +447 85 1149 +453 73 1209 +460 65 1210 +473 55 1269 +489 42 1270 +501 32 1331 +510 28 1333 +523 25 1390 +532 24 1392 +535 24 1396 +536 24 1451 +537 26 1452 +535 44 1512 +530 52 1513 +522 59 1516 +506 66 1574 +486 71 1575 +439 71 1634 +416 72 1636 +408 72 1637 +393 72 1694 +386 71 1695 +384 68 1757 +384 67 1758 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1510_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1510_100_0.txt new file mode 100644 index 00000000..e3f74704 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1510_100_0.txt @@ -0,0 +1,69 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +458 51 0 +459 51 115 +460 49 139 +462 47 195 +469 43 195 +475 40 255 +485 36 256 +495 33 316 +510 33 317 +525 36 378 +528 40 379 +530 47 437 +532 60 438 +532 63 442 +534 75 497 +533 84 499 +530 87 558 +528 91 559 +525 93 562 +524 95 619 +519 100 620 +512 104 686 +511 105 687 +510 106 691 +509 106 742 +507 107 746 +506 108 803 +504 109 804 +503 109 864 +501 110 865 +500 110 925 +499 110 985 +498 111 988 +499 111 1227 +502 111 1286 +508 111 1287 +512 113 1349 +516 119 1351 +516 121 1355 +519 129 1408 +522 137 1408 +522 149 1469 +519 158 1469 +513 169 1532 +507 178 1534 +497 187 1590 +489 189 1591 +485 190 1594 +483 190 1655 +469 189 1656 +453 182 1712 +449 179 1713 +447 176 1715 +444 175 1772 +443 175 1773 +443 174 1804 +441 171 1834 +441 170 2227 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1511_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1511_100_0.txt new file mode 100644 index 00000000..cb6e07ea --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1511_100_0.txt @@ -0,0 +1,52 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +441 77 0 +442 76 76 +442 75 100 +442 73 142 +444 71 143 +445 69 171 +451 63 202 +452 60 203 +455 57 262 +463 53 263 +468 51 323 +473 49 324 +480 48 384 +492 48 385 +498 48 387 +506 48 449 +510 52 450 +513 57 505 +516 65 506 +517 68 508 +519 75 566 +520 81 567 +520 85 628 +521 92 629 +521 93 689 +521 94 1164 +.PEN_UP +.PEN_DOWN +480 79 1560 +480 80 1631 +479 84 1661 +476 94 1722 +473 110 1723 +471 120 1784 +467 133 1785 +464 144 1844 +461 155 1845 +457 163 1907 +453 172 1909 +451 177 1971 +450 179 1971 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1512_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1512_100_0.txt new file mode 100644 index 00000000..b4c89146 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1512_100_0.txt @@ -0,0 +1,56 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +389 81 0 +389 80 227 +389 79 254 +389 78 300 +391 74 362 +393 72 363 +395 70 364 +395 69 423 +401 65 425 +405 62 427 +409 60 484 +421 56 485 +428 55 544 +435 55 545 +441 55 547 +452 57 605 +464 62 606 +471 67 666 +477 72 667 +481 79 727 +485 88 729 +486 92 731 +488 98 791 +489 106 792 +490 108 794 +490 113 845 +491 117 847 +491 121 878 +491 124 879 +491 131 939 +492 138 940 +492 146 1000 +492 149 1001 +491 156 1002 +490 158 1061 +486 164 1062 +484 170 1066 +483 172 1123 +481 178 1124 +480 181 1184 +479 182 1186 +478 182 1187 +478 183 1245 +477 184 1246 +476 185 1307 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1513_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1513_100_0.txt new file mode 100644 index 00000000..8753a928 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1513_100_0.txt @@ -0,0 +1,68 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +491 116 0 +492 116 124 +493 116 164 +494 116 197 +496 116 198 +498 115 257 +501 115 258 +503 114 259 +508 113 318 +509 113 319 +513 112 323 +516 111 380 +524 108 381 +532 101 442 +536 98 444 +550 86 503 +555 83 504 +560 78 507 +563 73 565 +567 65 566 +570 59 626 +573 54 627 +573 52 686 +573 51 687 +572 51 748 +567 51 749 +559 51 808 +550 52 809 +539 54 870 +530 58 871 +522 62 931 +515 65 932 +507 72 997 +499 79 1000 +495 83 1059 +486 95 1061 +484 107 1113 +480 117 1114 +477 126 1173 +476 142 1174 +477 151 1236 +479 157 1239 +480 159 1295 +490 170 1296 +498 173 1357 +511 174 1357 +518 174 1416 +532 174 1417 +543 172 1482 +551 169 1483 +555 167 1484 +557 166 1541 +562 165 1543 +570 163 1599 +571 163 1600 +571 162 1660 +572 162 1661 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/1514_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/1514_100_0.txt new file mode 100644 index 00000000..46c20853 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/1514_100_0.txt @@ -0,0 +1,81 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +471 66 0 +471 69 63 +471 72 64 +471 77 127 +472 81 128 +474 90 131 +476 99 189 +476 110 190 +476 113 249 +474 130 251 +473 132 252 +472 137 302 +471 140 303 +469 143 307 +466 149 362 +466 151 363 +462 157 364 +460 161 424 +456 163 427 +449 167 489 +443 170 489 +442 170 492 +429 172 549 +422 173 606 +420 173 607 +417 174 612 +415 174 667 +410 175 668 +408 175 728 +407 176 729 +406 176 820 +.PEN_UP +.PEN_DOWN +469 65 1895 +470 65 1940 +472 62 1941 +477 60 2002 +482 58 2003 +492 56 2063 +506 55 2064 +523 55 2123 +538 60 2124 +543 62 2187 +550 70 2189 +553 74 2191 +554 77 2245 +559 86 2246 +561 91 2306 +564 98 2307 +566 103 2308 +568 110 2367 +569 116 2368 +569 118 2428 +569 124 2430 +570 130 2494 +570 131 2494 +570 133 2555 +570 135 2556 +570 137 2613 +570 138 2615 +570 139 2671 +570 142 2672 +569 146 2733 +569 150 2734 +568 154 2794 +568 156 2794 +568 158 2795 +568 161 2855 +567 164 2857 +567 166 2916 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/hebrew/8362_100_0.txt b/tests/auto/inputpanel/hwr_test_data/hebrew/8362_100_0.txt new file mode 100644 index 00000000..5933548a --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/hebrew/8362_100_0.txt @@ -0,0 +1,73 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +593 121 0 +593 123 53 +593 124 83 +593 126 85 +593 130 143 +593 141 144 +591 153 206 +587 164 206 +581 173 265 +576 177 266 +571 180 267 +560 184 326 +544 189 327 +532 191 388 +517 191 389 +507 189 449 +492 186 450 +487 184 451 +482 178 518 +474 171 519 +471 165 571 +470 159 572 +470 147 634 +471 137 635 +472 132 636 +473 128 694 +476 123 695 +476 122 756 +476 121 757 +.PEN_UP +.PEN_DOWN +537 136 2303 +537 134 2379 +537 132 2395 +537 130 2453 +537 118 2453 +534 95 2519 +530 81 2520 +525 69 2576 +523 66 2577 +521 63 2579 +519 60 2636 +508 56 2637 +503 55 2696 +492 55 2697 +487 55 2700 +481 55 2756 +467 58 2757 +453 65 2818 +439 74 2819 +429 82 2879 +423 86 2880 +420 93 2943 +417 102 2945 +417 104 2948 +415 109 3006 +415 119 3007 +415 124 3011 +415 127 3062 +415 136 3065 +415 139 3128 +415 140 3128 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/japanese/26085_100_0.txt b/tests/auto/inputpanel/hwr_test_data/japanese/26085_100_0.txt new file mode 100644 index 00000000..57dbf06f --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/japanese/26085_100_0.txt @@ -0,0 +1,94 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +113 59 0 +113 64 56 +113 71 86 +113 78 92 +113 85 148 +113 95 149 +113 109 212 +111 127 213 +111 131 268 +111 143 269 +110 150 330 +109 156 331 +109 160 391 +109 164 392 +109 167 453 +109 170 455 +109 171 512 +109 172 513 +109 173 516 +109 175 573 +109 177 634 +109 178 636 +110 179 698 +110 180 701 +.PEN_UP +.PEN_DOWN +116 58 1545 +117 58 1612 +130 57 1640 +153 58 1699 +165 59 1700 +187 60 1764 +195 62 1766 +200 63 1820 +202 63 1821 +203 63 2004 +203 65 2061 +203 69 2061 +204 72 2124 +204 87 2125 +203 90 2183 +200 103 2185 +198 115 2188 +198 119 2248 +197 139 2248 +196 148 2304 +195 158 2307 +195 160 2308 +195 165 2364 +195 173 2365 +194 179 2425 +194 181 2426 +194 185 2427 +194 187 2485 +193 190 2486 +193 189 2740 +.PEN_UP +.PEN_DOWN +113 123 3457 +114 123 3517 +120 123 3545 +127 123 3547 +131 123 3610 +166 126 3611 +185 127 3669 +194 128 3670 +195 128 3731 +.PEN_UP +.PEN_DOWN +110 180 4616 +110 181 4683 +115 181 4701 +122 182 4765 +143 182 4765 +174 183 4820 +179 184 4821 +181 184 4824 +187 184 4882 +188 184 4972 +190 184 5036 +191 184 5096 +192 184 5098 +193 184 5157 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/japanese/26412_100_0.txt b/tests/auto/inputpanel/hwr_test_data/japanese/26412_100_0.txt new file mode 100644 index 00000000..2518d293 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/japanese/26412_100_0.txt @@ -0,0 +1,121 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +314 61 0 +315 61 71 +319 61 95 +329 61 154 +341 61 155 +355 61 215 +381 61 216 +398 60 277 +402 60 277 +413 60 279 +424 60 340 +436 61 342 +437 61 343 +443 61 398 +449 62 399 +452 63 462 +453 63 599 +452 62 871 +.PEN_UP +.PEN_DOWN +386 40 2172 +386 41 2327 +386 45 2351 +386 48 2415 +386 51 2418 +386 54 2423 +386 60 2479 +384 69 2480 +384 72 2537 +384 89 2539 +383 102 2596 +382 113 2597 +382 117 2599 +381 123 2657 +380 130 2658 +380 135 2718 +380 143 2718 +380 147 2779 +380 151 2780 +380 157 2840 +380 162 2841 +380 163 2900 +380 165 2901 +380 168 2968 +380 170 2970 +380 173 3021 +380 174 3082 +380 175 3087 +380 176 3143 +380 177 3204 +380 178 3266 +.PEN_UP +.PEN_DOWN +386 66 4292 +383 68 4355 +380 71 4386 +374 78 4391 +366 85 4444 +360 88 4445 +357 91 4446 +346 97 4505 +345 98 4506 +328 105 4565 +323 108 4566 +321 109 4626 +322 108 4959 +.PEN_UP +.PEN_DOWN +382 63 5579 +383 64 5630 +385 67 5631 +387 71 5692 +391 80 5693 +394 85 5695 +397 90 5750 +403 99 5751 +407 102 5811 +416 108 5812 +417 110 5815 +424 114 5872 +427 115 5873 +433 118 5935 +436 121 5936 +439 123 5997 +440 123 6111 +.PEN_UP +.PEN_DOWN +321 131 7508 +323 131 7590 +325 131 7611 +341 131 7661 +369 133 7662 +387 134 7723 +397 135 7723 +404 135 7784 +406 135 7785 +407 135 7880 +408 135 8103 +409 135 8147 +410 135 8148 +414 135 8208 +416 135 8271 +418 135 8330 +419 135 8330 +421 135 8391 +422 135 8453 +423 135 8456 +424 135 8516 +425 135 8519 +426 135 8735 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/japanese/35486_100_0.txt b/tests/auto/inputpanel/hwr_test_data/japanese/35486_100_0.txt new file mode 100644 index 00000000..90293518 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/japanese/35486_100_0.txt @@ -0,0 +1,333 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +513 47 0 +514 47 83 +515 47 106 +517 47 148 +524 48 149 +531 48 209 +538 49 210 +542 49 210 +548 50 276 +556 51 276 +557 51 331 +559 51 398 +563 51 399 +.PEN_UP +.PEN_DOWN +509 76 1311 +510 76 1365 +512 76 1395 +519 75 1396 +522 75 1450 +526 74 1451 +530 74 1451 +536 74 1511 +545 74 1511 +547 74 1514 +552 74 1572 +554 74 1633 +557 74 1634 +559 74 1694 +560 73 1695 +561 73 1834 +562 73 1875 +563 73 1876 +564 73 1935 +.PEN_UP +.PEN_DOWN +509 97 4408 +510 97 4480 +514 96 4483 +518 96 4512 +526 96 4569 +528 96 4570 +538 95 4629 +551 95 4630 +554 95 4689 +556 95 4690 +557 95 4752 +558 95 4811 +559 95 4811 +560 94 4875 +561 94 4877 +562 94 4937 +.PEN_UP +.PEN_DOWN +512 120 8559 +512 121 8626 +512 123 8651 +512 126 8722 +512 132 8723 +512 140 8784 +511 142 8786 +510 146 8787 +509 148 8843 +508 152 8844 +508 157 8904 +508 161 8905 +508 162 8967 +507 162 8969 +.PEN_UP +.PEN_DOWN +510 119 9777 +513 117 9846 +514 116 9847 +518 116 9851 +522 116 9907 +532 116 9908 +540 116 9969 +542 116 9971 +544 116 10036 +545 116 10090 +546 116 10151 +547 116 10154 +548 116 10214 +551 118 10220 +552 118 10273 +553 119 10274 +554 119 10274 +556 120 10334 +557 120 10398 +558 121 10456 +559 121 10457 +560 121 10524 +560 124 10576 +561 126 10578 +561 128 10638 +561 133 10639 +561 138 10698 +561 144 10699 +560 147 10761 +558 152 10763 +558 153 10765 +558 155 10818 +558 158 10819 +558 161 10881 +558 162 10941 +558 164 10942 +.PEN_UP +.PEN_DOWN +507 164 11623 +508 164 11682 +510 164 11701 +512 163 11706 +517 163 11761 +520 163 11762 +527 162 11763 +532 162 11821 +536 161 11822 +537 161 11882 +538 161 11883 +541 161 11943 +543 161 11944 +544 161 12010 +548 161 12012 +550 161 12067 +552 161 12069 +554 161 12126 +555 161 12188 +556 161 12189 +559 161 12251 +560 161 12259 +562 161 12313 +563 161 12373 +.PEN_UP +.PEN_DOWN +600 48 18967 +601 48 19050 +605 48 19082 +607 48 19140 +610 48 19141 +620 48 19199 +638 48 19200 +651 48 19260 +658 49 19261 +668 51 19321 +673 51 19321 +674 51 19322 +676 51 19382 +683 51 19383 +688 51 19387 +692 50 19444 +696 50 19446 +697 49 19451 +699 49 19503 +701 49 19504 +706 48 19563 +708 48 19564 +709 48 19631 +710 48 19636 +711 48 19687 +.PEN_UP +.PEN_DOWN +624 44 21231 +624 45 21296 +624 49 21297 +624 51 21356 +624 59 21357 +624 60 21362 +624 65 21416 +624 66 21417 +624 71 21477 +624 73 21539 +624 76 21599 +623 78 21600 +623 79 21661 +.PEN_UP +.PEN_DOWN +621 78 23544 +622 78 23699 +623 78 23726 +628 78 23731 +630 78 23781 +640 79 23782 +643 79 23815 +653 80 23845 +661 80 23847 +670 80 23903 +676 79 23904 +677 79 23979 +678 79 24027 +678 80 24307 +678 81 24360 +678 83 24362 +677 88 24422 +676 95 24423 +676 96 24427 +676 100 24484 +676 104 24485 +676 106 24490 +676 108 24545 +676 109 24546 +676 111 24606 +676 112 24606 +676 113 24670 +676 114 24675 +676 116 24729 +676 118 24789 +.PEN_UP +.PEN_DOWN +622 78 25560 +622 79 25675 +622 80 25703 +622 83 25707 +622 89 25759 +622 95 25763 +621 100 25822 +621 105 25824 +621 106 25827 +620 110 25880 +620 112 25881 +620 113 25943 +620 115 26002 +620 116 26063 +.PEN_UP +.PEN_DOWN +592 116 27111 +598 116 27189 +620 116 27216 +637 117 27275 +654 118 27276 +664 119 27337 +674 120 27339 +677 120 27397 +683 120 27398 +687 120 27458 +688 120 27459 +689 120 27518 +692 120 27519 +692 119 27579 +696 119 27581 +697 119 27639 +698 119 27640 +699 119 27708 +700 119 27761 +.PEN_UP +.PEN_DOWN +616 126 30647 +616 128 30740 +616 132 30771 +616 137 30831 +616 143 30832 +616 147 30835 +616 149 30892 +616 154 30893 +616 158 30951 +616 160 30952 +616 163 31012 +616 166 31013 +616 167 31073 +615 168 31074 +615 170 31136 +615 171 31196 +615 172 31323 +.PEN_UP +.PEN_DOWN +614 127 32047 +620 126 32108 +630 125 32138 +640 125 32200 +645 125 32202 +648 125 32265 +653 125 32320 +655 125 32321 +658 125 32322 +659 125 32381 +667 127 32382 +670 127 32442 +672 127 32442 +675 128 32504 +676 128 32505 +677 128 32564 +678 128 32625 +679 128 32686 +680 129 32755 +680 131 32808 +680 132 32809 +679 136 32868 +677 143 32869 +675 152 32929 +675 156 32930 +675 157 32991 +674 161 32992 +674 167 33051 +674 170 33052 +674 171 33113 +674 172 33114 +674 173 33173 +674 174 33174 +674 175 33238 +674 176 33242 +673 176 33386 +.PEN_UP +.PEN_DOWN +617 172 34039 +618 171 34117 +621 170 34146 +622 170 34147 +630 169 34206 +637 169 34207 +641 168 34212 +649 168 34271 +653 168 34272 +660 168 34275 +662 168 34327 +664 168 34389 +667 168 34391 +668 168 34448 +669 169 34449 +670 170 34509 +672 171 34510 +674 171 34571 +675 172 34632 +676 172 34811 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/korean/44397_100_0.txt b/tests/auto/inputpanel/hwr_test_data/korean/44397_100_0.txt new file mode 100644 index 00000000..cd2eab9b --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/korean/44397_100_0.txt @@ -0,0 +1,121 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +379 53 0 +380 53 155 +382 53 177 +385 53 179 +391 53 243 +400 53 244 +421 55 311 +437 55 313 +441 55 315 +448 55 365 +454 55 366 +461 55 370 +467 54 426 +472 54 427 +475 54 486 +477 54 487 +478 54 490 +479 54 548 +480 54 549 +482 54 610 +485 54 610 +488 54 670 +489 54 731 +489 55 939 +489 56 1003 +489 60 1004 +489 64 1064 +489 66 1065 +489 72 1124 +489 75 1125 +489 79 1131 +489 81 1184 +489 86 1185 +489 91 1245 +489 92 1246 +489 97 1306 +489 99 1307 +489 101 1366 +489 102 1367 +489 103 1427 +489 105 1429 +489 106 1500 +489 107 1549 +489 108 1550 +489 109 1614 +.PEN_UP +.PEN_DOWN +383 113 2999 +384 113 3259 +385 112 3291 +386 112 3360 +399 112 3361 +412 112 3389 +434 112 3449 +440 112 3450 +451 112 3451 +455 112 3510 +479 111 3511 +493 110 3574 +506 109 3576 +513 109 3632 +515 109 3633 +516 109 3636 +.PEN_UP +.PEN_DOWN +430 115 5767 +430 116 5851 +432 120 5884 +433 123 5937 +433 127 5938 +434 130 6000 +434 133 6002 +435 139 6058 +435 141 6059 +435 142 6124 +435 143 6523 +.PEN_UP +.PEN_DOWN +393 151 7943 +394 151 8099 +399 150 8124 +412 150 8184 +422 150 8185 +438 150 8245 +448 150 8246 +465 149 8305 +478 149 8306 +485 149 8366 +487 149 8366 +488 149 8432 +489 149 8490 +491 149 8492 +492 149 8549 +492 150 8835 +492 152 8882 +492 155 8883 +492 159 8944 +492 163 8945 +492 168 9005 +491 173 9005 +491 177 9067 +490 182 9068 +490 188 9126 +490 192 9126 +490 193 9130 +490 196 9188 +490 198 9247 +490 200 9247 +490 202 9307 +490 203 9308 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/korean/50612_100_0.txt b/tests/auto/inputpanel/hwr_test_data/korean/50612_100_0.txt new file mode 100644 index 00000000..fd22d87d --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/korean/50612_100_0.txt @@ -0,0 +1,93 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +569 64 0 +568 64 53 +565 64 54 +559 64 114 +553 65 115 +545 66 174 +533 71 175 +526 79 242 +522 87 245 +520 92 246 +519 94 296 +517 103 297 +516 114 357 +518 130 358 +520 141 417 +522 146 418 +524 152 478 +528 159 479 +533 165 540 +536 169 541 +538 171 601 +543 174 601 +544 175 604 +545 175 662 +549 175 664 +557 174 723 +564 170 727 +570 164 789 +578 159 793 +581 155 849 +584 151 849 +586 147 852 +588 143 904 +588 137 905 +590 131 907 +590 125 965 +590 115 966 +589 109 997 +585 98 1029 +583 88 1030 +580 83 1089 +576 75 1091 +576 73 1092 +572 70 1151 +568 65 1153 +568 64 1209 +567 64 1453 +.PEN_UP +.PEN_DOWN +592 124 2520 +593 124 2621 +595 123 2645 +601 123 2711 +607 122 2712 +614 122 2779 +618 122 2781 +622 121 2840 +623 121 2957 +624 121 3045 +625 120 3236 +.PEN_UP +.PEN_DOWN +614 42 3848 +614 45 3896 +614 47 3897 +614 54 3900 +615 63 3958 +617 76 3958 +619 92 4017 +620 100 4018 +620 115 4078 +620 133 4079 +618 141 4084 +616 153 4138 +616 157 4139 +615 169 4200 +614 176 4201 +614 178 4205 +613 184 4260 +613 188 4261 +613 190 4420 +613 191 4540 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/korean/54620_100_0.txt b/tests/auto/inputpanel/hwr_test_data/korean/54620_100_0.txt new file mode 100644 index 00000000..99f6f912 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/korean/54620_100_0.txt @@ -0,0 +1,159 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +169 59 0 +171 59 148 +175 59 170 +183 59 228 +197 59 229 +210 59 288 +223 61 289 +233 61 292 +241 61 350 +252 62 350 +260 62 418 +265 62 419 +266 62 748 +.PEN_UP +.PEN_DOWN +224 27 1367 +223 27 1414 +222 34 1444 +222 39 1502 +223 46 1503 +223 47 1508 +223 50 1566 +224 53 1568 +224 56 1629 +224 57 1630 +225 59 1630 +225 61 1686 +225 62 1687 +.PEN_UP +.PEN_DOWN +244 82 3184 +243 81 3259 +242 81 3285 +238 80 3349 +225 80 3350 +210 80 3412 +198 82 3414 +192 84 3474 +186 88 3476 +184 90 3478 +180 95 3532 +178 100 3533 +178 109 3595 +178 117 3598 +181 125 3657 +186 130 3658 +194 136 3716 +197 137 3717 +199 137 3775 +202 137 3776 +204 137 3780 +206 137 3835 +223 135 3836 +234 133 3897 +240 130 3898 +242 129 3900 +244 128 3958 +251 120 3959 +253 117 4017 +253 114 4020 +253 110 4081 +251 104 4083 +249 99 4140 +247 95 4141 +243 89 4205 +242 86 4206 +242 85 4212 +241 84 4284 +240 84 4324 +239 84 4596 +.PEN_UP +.PEN_DOWN +177 144 6344 +178 144 6573 +178 146 6600 +179 148 6604 +179 150 6657 +180 153 6658 +181 160 6719 +182 167 6720 +183 176 6779 +184 182 6780 +184 185 6840 +185 189 6841 +186 189 7108 +195 189 7174 +206 187 7234 +213 186 7236 +219 186 7294 +224 186 7296 +233 186 7355 +241 185 7355 +252 185 7417 +262 185 7419 +268 186 7421 +276 186 7475 +281 186 7476 +289 186 7536 +290 186 7537 +291 186 7597 +292 186 7660 +293 186 7724 +294 186 7725 +295 186 8172 +.PEN_UP +.PEN_DOWN +283 25 9136 +283 26 9220 +283 27 9244 +283 33 9299 +283 41 9300 +282 53 9359 +282 65 9359 +282 78 9420 +282 92 9421 +281 115 9481 +280 124 9482 +279 133 9484 +279 135 9542 +278 142 9542 +277 148 9605 +277 150 9607 +277 151 9764 +277 153 9816 +277 154 9876 +277 153 10124 +277 151 10180 +.PEN_UP +.PEN_DOWN +282 89 10651 +283 89 10796 +286 89 10821 +288 88 10879 +291 88 10879 +294 88 10941 +295 88 10941 +297 88 11003 +298 88 11004 +299 88 11061 +300 88 11062 +301 88 11121 +302 88 11123 +303 88 11185 +304 88 11187 +305 88 11189 +306 88 11248 +307 88 11249 +309 89 11304 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/simp_chinese/20013_100_0.txt b/tests/auto/inputpanel/hwr_test_data/simp_chinese/20013_100_0.txt new file mode 100644 index 00000000..27414acd --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/simp_chinese/20013_100_0.txt @@ -0,0 +1,216 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 95 +.Y_POINTS_PER_INCH 95 +.POINTS_PER_SECOND 60 +.PEN_DOWN +185 59 0 +185 61 181 +185 63 202 +185 65 205 +185 68 235 +185 70 236 +185 73 236 +185 75 268 +185 80 269 +185 84 301 +185 87 302 +185 89 334 +185 92 335 +185 94 368 +184 97 369 +184 98 372 +184 99 401 +184 101 402 +184 102 405 +184 104 434 +184 105 467 +184 106 501 +184 107 534 +184 108 535 +184 109 567 +184 111 567 +184 112 604 +184 113 634 +184 114 667 +184 115 700 +184 116 734 +184 117 767 +184 118 801 +184 119 805 +184 120 833 +184 121 837 +184 123 866 +184 124 902 +184 125 937 +184 126 997 +184 127 1040 +184 128 1149 +.PEN_UP +.PEN_DOWN +184 63 1871 +185 63 1917 +186 63 1918 +188 63 1947 +190 62 1948 +191 62 1948 +196 62 1980 +202 62 1981 +209 61 2014 +217 61 2015 +228 61 2047 +241 61 2048 +248 61 2052 +253 61 2080 +264 61 2081 +267 61 2084 +271 61 2114 +277 61 2114 +279 61 2117 +283 61 2147 +288 61 2148 +290 61 2149 +292 61 2180 +296 61 2181 +298 61 2213 +299 61 2214 +301 60 2246 +302 60 2437 +303 60 2485 +304 60 2532 +305 60 2564 +305 61 2596 +305 62 2629 +305 64 2630 +305 66 2662 +305 67 2663 +306 69 2695 +306 71 2696 +306 75 2729 +306 78 2730 +306 79 2732 +306 81 2762 +306 85 2763 +306 87 2764 +306 89 2796 +306 93 2796 +306 95 2796 +306 101 2828 +305 105 2829 +305 109 2862 +305 113 2863 +304 119 2896 +304 122 2896 +304 123 2901 +303 126 2929 +303 128 2929 +303 130 2962 +303 131 2962 +303 132 2995 +303 133 3029 +.PEN_UP +.PEN_DOWN +184 129 4367 +188 129 4409 +190 129 4410 +191 129 4413 +193 129 4441 +197 128 4442 +198 128 4444 +200 128 4474 +203 128 4475 +205 127 4476 +209 127 4508 +219 127 4509 +227 127 4541 +237 127 4542 +244 127 4574 +246 127 4575 +248 127 4607 +250 127 4608 +252 126 4640 +255 126 4641 +257 126 4644 +259 125 4674 +261 125 4675 +263 125 4677 +265 125 4707 +266 125 4740 +269 125 4741 +270 125 4774 +275 125 4775 +279 125 4807 +283 125 4808 +287 125 4840 +289 125 4841 +291 125 4873 +292 125 4874 +293 125 4876 +294 125 4907 +296 125 4908 +298 125 4909 +299 125 4940 +302 125 4941 +303 126 4974 +304 126 5006 +305 126 5007 +306 126 5040 +.PEN_UP +.PEN_DOWN +244 32 6303 +244 34 6340 +244 35 6355 +244 37 6356 +244 40 6386 +244 46 6387 +244 50 6388 +244 54 6419 +245 67 6420 +247 75 6453 +248 84 6453 +249 89 6486 +249 96 6487 +250 102 6519 +250 107 6520 +251 111 6537 +251 113 6553 +251 118 6553 +251 120 6557 +251 122 6586 +251 126 6587 +251 128 6588 +251 130 6619 +252 133 6620 +252 135 6620 +252 138 6652 +252 141 6653 +252 144 6686 +252 147 6686 +252 151 6719 +252 154 6719 +252 156 6724 +252 157 6752 +252 161 6753 +252 162 6756 +252 165 6786 +252 167 6788 +252 170 6819 +252 172 6820 +252 174 6852 +252 176 6852 +252 178 6885 +252 180 6886 +252 182 6918 +252 183 6919 +252 184 6935 +251 185 6952 +251 186 6956 +251 187 6985 +251 188 7018 +251 189 7205 +251 190 7293 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/simp_chinese/25991_100_0.txt b/tests/auto/inputpanel/hwr_test_data/simp_chinese/25991_100_0.txt new file mode 100644 index 00000000..eec059f5 --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/simp_chinese/25991_100_0.txt @@ -0,0 +1,172 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 95 +.Y_POINTS_PER_INCH 95 +.POINTS_PER_SECOND 60 +.PEN_DOWN +415 26 0 +416 28 46 +417 28 63 +418 30 96 +419 31 97 +420 31 100 +422 34 130 +424 36 163 +425 38 163 +426 39 164 +427 42 196 +428 45 196 +429 47 229 +430 50 230 +431 52 263 +431 54 263 +432 55 296 +433 56 296 +433 57 300 +433 58 330 +433 59 330 +433 60 364 +433 61 365 +433 62 404 +.PEN_UP +.PEN_DOWN +356 80 1935 +357 80 1980 +358 81 1981 +359 81 2008 +361 81 2012 +363 81 2041 +365 81 2045 +367 81 2075 +370 81 2075 +372 81 2076 +375 81 2108 +379 81 2109 +385 80 2141 +390 80 2142 +396 79 2174 +403 79 2175 +406 79 2180 +410 77 2208 +416 77 2209 +420 76 2213 +422 76 2241 +428 75 2242 +431 75 2245 +434 74 2274 +443 73 2275 +446 73 2276 +451 71 2307 +460 70 2308 +464 68 2341 +468 67 2341 +470 66 2374 +475 64 2374 +477 64 2392 +479 63 2407 +484 62 2408 +485 61 2440 +487 60 2441 +489 59 2444 +491 57 2474 +493 56 2508 +495 55 2508 +496 54 2508 +498 53 2540 +499 52 2541 +500 50 2573 +501 49 2607 +502 48 2640 +503 47 2641 +504 46 2673 +504 45 2724 +504 44 3053 +.PEN_UP +.PEN_DOWN +434 82 4671 +434 84 4718 +434 86 4735 +434 88 4740 +434 89 4768 +434 92 4769 +433 94 4772 +432 96 4802 +430 101 4802 +429 103 4804 +429 106 4835 +428 112 4836 +428 114 4836 +425 121 4868 +423 127 4869 +421 132 4901 +417 137 4902 +414 143 4934 +412 148 4935 +406 156 4968 +401 163 4969 +398 166 4972 +397 169 5001 +393 173 5002 +392 175 5005 +391 176 5034 +390 178 5035 +389 179 5036 +388 180 5067 +387 181 5068 +386 182 5101 +385 182 5589 +384 182 5616 +.PEN_UP +.PEN_DOWN +385 84 6399 +386 84 6468 +387 87 6489 +388 90 6531 +391 95 6531 +392 97 6532 +394 99 6564 +396 106 6564 +401 113 6597 +406 120 6598 +411 126 6630 +416 132 6631 +422 138 6663 +426 143 6664 +427 143 6668 +429 145 6697 +432 150 6697 +433 153 6700 +436 156 6730 +440 160 6730 +444 163 6732 +447 165 6763 +454 171 6764 +457 173 6797 +458 173 6798 +459 174 6830 +460 175 6831 +462 176 6863 +466 178 6864 +471 179 6897 +473 179 6897 +474 180 6900 +475 180 6930 +477 180 6964 +478 180 6996 +479 180 7029 +480 180 7064 +481 181 7097 +483 181 7100 +485 181 7149 +486 181 7180 +487 181 7213 +488 181 7304 +489 181 7346 +490 181 7396 +491 181 7428 +491 182 7629 +.PEN_UP diff --git a/tests/auto/inputpanel/hwr_test_data/trad_chinese/22283_100_0.txt b/tests/auto/inputpanel/hwr_test_data/trad_chinese/22283_100_0.txt new file mode 100644 index 00000000..2ee9924d --- /dev/null +++ b/tests/auto/inputpanel/hwr_test_data/trad_chinese/22283_100_0.txt @@ -0,0 +1,279 @@ +.VERSION 1.0 +.HIERARCHY CHARACTER +.COORD X Y T +.SEGMENT CHARACTER +.X_DIM 1032 +.Y_DIM 263 +.X_POINTS_PER_INCH 94 +.Y_POINTS_PER_INCH 94 +.POINTS_PER_SECOND 60 +.PEN_DOWN +232 61 0 +232 62 51 +232 63 71 +232 65 75 +232 74 132 +232 77 133 +234 90 193 +238 110 194 +239 113 195 +240 118 259 +242 128 260 +243 131 317 +244 136 319 +245 140 376 +245 144 377 +246 147 439 +246 154 441 +247 158 497 +248 162 498 +248 165 561 +248 170 562 +248 172 619 +248 174 620 +248 175 679 +248 176 743 +248 177 744 +248 178 748 +248 179 987 +.PEN_UP +.PEN_DOWN +229 61 2287 +230 61 2346 +231 61 2347 +232 61 2409 +234 61 2411 +241 61 2470 +252 60 2472 +256 60 2475 +288 58 2532 +308 57 2590 +325 57 2591 +338 57 2654 +347 56 2655 +350 55 2713 +351 55 2714 +352 55 2779 +353 54 2780 +355 54 2837 +357 53 2839 +358 53 2924 +359 53 3211 +360 54 3331 +361 56 3380 +362 58 3381 +363 61 3440 +363 68 3441 +363 72 3442 +363 82 3504 +363 99 3505 +363 102 3507 +365 111 3564 +366 119 3565 +368 132 3626 +370 146 3627 +370 152 3686 +370 157 3687 +370 162 3691 +370 166 3747 +370 171 3748 +370 175 3813 +370 177 3871 +370 178 3876 +370 179 4091 +371 179 4239 +.PEN_UP +.PEN_DOWN +261 103 7159 +262 103 7207 +263 103 7208 +268 103 7268 +277 102 7269 +285 101 7334 +291 101 7335 +296 100 7338 +297 100 7390 +310 97 7392 +315 95 7449 +317 94 7450 +318 93 7451 +319 92 7511 +321 92 7571 +323 92 7572 +325 92 7631 +325 91 7632 +326 91 7692 +327 91 7755 +328 90 7844 +.PEN_UP +.PEN_DOWN +263 126 9608 +264 126 9663 +264 127 9664 +265 133 9723 +265 136 9724 +265 139 9785 +265 141 9786 +265 142 9845 +266 144 9846 +266 145 9906 +266 146 9908 +267 148 9965 +267 149 9966 +.PEN_UP +.PEN_DOWN +264 126 10655 +267 126 10724 +272 125 10741 +277 125 10786 +281 125 10787 +287 125 10847 +288 125 10848 +291 124 10851 +293 123 10915 +293 125 11083 +293 126 11149 +293 130 11150 +293 132 11155 +293 135 11210 +293 138 11211 +293 139 11271 +294 142 11272 +294 143 11371 +294 144 11425 +294 145 11428 +295 146 11484 +.PEN_UP +.PEN_DOWN +269 152 12343 +271 152 12435 +272 152 12461 +275 152 12520 +277 151 12521 +278 151 12523 +280 151 12581 +281 151 12582 +282 151 12642 +284 151 12643 +285 150 12644 +286 150 12704 +287 150 12762 +288 150 12763 +289 150 12824 +290 150 12889 +291 150 12947 +292 150 13005 +293 150 13066 +.PEN_UP +.PEN_DOWN +270 172 18223 +271 172 18227 +273 172 18277 +277 172 18278 +280 172 18339 +283 170 18340 +288 168 18398 +292 167 18398 +295 167 18402 +296 167 18465 +298 167 18466 +300 166 18522 +301 166 18583 +302 166 18779 +.PEN_UP +.PEN_DOWN +301 79 19886 +301 80 19995 +301 82 20021 +302 84 20027 +303 86 20075 +304 88 20076 +304 90 20130 +306 94 20131 +309 101 20190 +312 109 20191 +314 113 20195 +315 117 20250 +316 123 20251 +318 129 20311 +321 136 20312 +324 141 20372 +326 145 20374 +329 150 20432 +330 153 20434 +331 155 20499 +332 157 20500 +333 158 20555 +333 160 20557 +333 161 20614 +334 162 20677 +334 163 20739 +335 164 20799 +336 165 20801 +337 165 20859 +338 167 20860 +338 168 20919 +339 168 21020 +340 168 21131 +341 166 21192 +342 166 21193 +342 163 21253 +343 162 21254 +344 160 21258 +344 159 21316 +345 158 21317 +.PEN_UP +.PEN_DOWN +339 113 23351 +338 113 23426 +337 117 23453 +336 117 23485 +334 122 23505 +333 124 23506 +332 125 23507 +331 129 23561 +329 132 23562 +327 135 23623 +323 143 23625 +320 149 23682 +319 150 23683 +317 152 23745 +314 157 23747 +313 159 23805 +310 165 23806 +310 166 23810 +309 167 23908 +.PEN_UP +.PEN_DOWN +319 69 25630 +321 70 25747 +322 71 25774 +326 73 25779 +327 74 25843 +333 78 25844 +335 80 25904 +.PEN_UP +.PEN_DOWN +256 179 27231 +257 179 27302 +263 179 27332 +282 179 27393 +290 179 27394 +314 179 27455 +326 180 27457 +329 180 27460 +336 180 27516 +343 180 27516 +344 180 27578 +345 180 27580 +346 180 27639 +347 180 27641 +348 179 27698 +350 179 27759 +352 179 27760 +354 179 27821 +357 179 27882 +358 179 27944 +359 179 28003 +361 179 28004 +.PEN_UP |