1 | /**************************************************************************** |
2 | ** |
3 | ** Copyright (C) 2016 The Qt Company Ltd. |
4 | ** Contact: https://www.qt.io/licensing/ |
5 | ** |
6 | ** This file is part of the Qt Virtual Keyboard module of the Qt Toolkit. |
7 | ** |
8 | ** $QT_BEGIN_LICENSE:GPL$ |
9 | ** Commercial License Usage |
10 | ** Licensees holding valid commercial Qt licenses may use this file in |
11 | ** accordance with the commercial license agreement provided with the |
12 | ** Software or, alternatively, in accordance with the terms contained in |
13 | ** a written agreement between you and The Qt Company. For licensing terms |
14 | ** and conditions see https://www.qt.io/terms-conditions. For further |
15 | ** information use the contact form at https://www.qt.io/contact-us. |
16 | ** |
17 | ** GNU General Public License Usage |
18 | ** Alternatively, this file may be used under the terms of the GNU |
19 | ** General Public License version 3 or (at your option) any later version |
20 | ** approved by the KDE Free Qt Foundation. The licenses are as published by |
21 | ** the Free Software Foundation and appearing in the file LICENSE.GPL3 |
22 | ** included in the packaging of this file. Please review the following |
23 | ** information to ensure the GNU General Public License requirements will |
24 | ** be met: https://www.gnu.org/licenses/gpl-3.0.html. |
25 | ** |
26 | ** $QT_END_LICENSE$ |
27 | ** |
28 | ****************************************************************************/ |
29 | |
30 | #ifndef HANGUL_P_H |
31 | #define HANGUL_P_H |
32 | |
33 | // |
34 | // W A R N I N G |
35 | // ------------- |
36 | // |
37 | // This file is not part of the Qt API. It exists purely as an |
38 | // implementation detail. This header file may change from version to |
39 | // version without notice, or even be removed. |
40 | // |
41 | // We mean it. |
42 | // |
43 | |
44 | #include <QString> |
45 | #include <QList> |
46 | #include <QMap> |
47 | |
48 | QT_BEGIN_NAMESPACE |
49 | namespace QtVirtualKeyboard { |
50 | |
51 | class Hangul |
52 | { |
53 | Q_DISABLE_COPY(Hangul) |
54 | |
55 | enum HangulMedialIndex { // VIndex Letter Jungseong Double Jamo |
56 | // ---------------------------------------------------------------------- |
57 | HANGUL_MEDIAL_A, // 0 314F 1161 |
58 | HANGUL_MEDIAL_AE, // 1 3150 1162 |
59 | HANGUL_MEDIAL_YA, // 2 3151 1163 |
60 | HANGUL_MEDIAL_YAE, // 3 3152 1164 |
61 | HANGUL_MEDIAL_EO, // 4 3153 1165 |
62 | HANGUL_MEDIAL_E, // 5 3154 1166 |
63 | HANGUL_MEDIAL_YEO, // 6 3155 1167 |
64 | HANGUL_MEDIAL_YE, // 7 3156 1168 |
65 | HANGUL_MEDIAL_O, // 8 3157 1169 |
66 | HANGUL_MEDIAL_WA, // 9 3158 116A 3157+314F |
67 | HANGUL_MEDIAL_WAE, // 10 3159 116B 3157+3150 |
68 | HANGUL_MEDIAL_OE, // 11 315A 116C 3157+3163 |
69 | HANGUL_MEDIAL_YO, // 12 315B 116D |
70 | HANGUL_MEDIAL_U, // 13 315C 116E |
71 | HANGUL_MEDIAL_WEO, // 14 315D 116F 315C+3153 |
72 | HANGUL_MEDIAL_WE, // 15 315E 1170 315C+3154 |
73 | HANGUL_MEDIAL_WI, // 16 315F 1171 315C+3163 |
74 | HANGUL_MEDIAL_YU, // 17 3160 1172 |
75 | HANGUL_MEDIAL_EU, // 18 3161 1173 |
76 | HANGUL_MEDIAL_YI, // 19 3162 1174 3161+3163 |
77 | HANGUL_MEDIAL_I // 20 3163 1175 |
78 | }; |
79 | |
80 | enum HangulFinalIndex { // TIndex Letter Jongseong Double Jamo |
81 | // ---------------------------------------------------------------------- |
82 | HANGUL_FINAL_NONE, // 0 n/a n/a |
83 | HANGUL_FINAL_KIYEOK, // 1 3131 11A8 |
84 | HANGUL_FINAL_SSANGKIYEOK, // 2 3132 11A9 |
85 | HANGUL_FINAL_KIYEOK_SIOS, // 3 3133 11AA 3131+3145 |
86 | HANGUL_FINAL_NIEUN, // 4 3134 11AB |
87 | HANGUL_FINAL_NIEUN_CIEUC, // 5 3135 11AC 3134+3148 |
88 | HANGUL_FINAL_NIEUN_HIEUH, // 6 3136 11AD 3134+314E |
89 | HANGUL_FINAL_TIKEUT, // 7 3137 11AE |
90 | HANGUL_FINAL_RIEUL, // 8 3139 11AF |
91 | HANGUL_FINAL_RIEUL_KIYEOK, // 9 313A 11B0 3139+3131 |
92 | HANGUL_FINAL_RIEUL_MIEUM, // 10 313B 11B1 3139+3141 |
93 | HANGUL_FINAL_RIEUL_PIEUP, // 11 313C 11B2 3139+3142 |
94 | HANGUL_FINAL_RIEUL_SIOS, // 12 313D 11B3 3139+3145 |
95 | HANGUL_FINAL_RIEUL_THIEUTH, // 13 313E 11B4 3139+314C |
96 | HANGUL_FINAL_RIEUL_PHIEUPH, // 14 313F 11B5 3139+314D |
97 | HANGUL_FINAL_RIEUL_HIEUH, // 15 3140 11B6 3139+314E |
98 | HANGUL_FINAL_MIEUM, // 16 3141 11B7 |
99 | HANGUL_FINAL_PIEUP, // 17 3142 11B8 |
100 | HANGUL_FINAL_PIEUP_SIOS, // 18 3144 11B9 3142+3145 |
101 | HANGUL_FINAL_SIOS, // 19 3145 11BA |
102 | HANGUL_FINAL_SSANGSIOS, // 20 3146 11BB 3145+3145 |
103 | HANGUL_FINAL_IEUNG, // 21 3147 11BC |
104 | HANGUL_FINAL_CIEUC, // 22 3148 11BD |
105 | HANGUL_FINAL_CHIEUCH, // 23 314A 11BE |
106 | HANGUL_FINAL_KHIEUKH, // 24 314B 11BF |
107 | HANGUL_FINAL_THIEUTH, // 25 314C 11C0 |
108 | HANGUL_FINAL_PHIEUPH, // 26 314D 11C1 |
109 | HANGUL_FINAL_HIEUH // 27 314E 11C2 |
110 | }; |
111 | |
112 | Hangul(); |
113 | |
114 | public: |
115 | static QString decompose(const QString &source); |
116 | static QString compose(const QString &source); |
117 | static bool isJamo(const ushort &unicode); |
118 | |
119 | private: |
120 | static bool isMedial(HangulMedialIndex vowel); |
121 | static bool isFinal(HangulFinalIndex consonant); |
122 | static ushort findDoubleMedial(HangulMedialIndex vowel); |
123 | static ushort findDoubleFinal(HangulFinalIndex consonant); |
124 | static ushort packDoubleMedial(HangulMedialIndex a, HangulMedialIndex b); |
125 | static ushort packDoubleFinal(HangulFinalIndex a, HangulFinalIndex b); |
126 | static void unpackDoubleMedial(ushort key, HangulMedialIndex &a, HangulMedialIndex &b); |
127 | static void unpackDoubleFinal(ushort key, HangulFinalIndex &a, HangulFinalIndex &b); |
128 | static QMap<ushort, HangulMedialIndex> initDoubleMedialMap(); |
129 | static QMap<ushort, HangulFinalIndex> initDoubleFinalMap(); |
130 | |
131 | static const QList<ushort> initials; |
132 | static const QList<ushort> finals; |
133 | static const QMap<ushort, HangulMedialIndex> doubleMedialMap; |
134 | static const QMap<ushort, HangulFinalIndex> doubleFinalMap; |
135 | static const int SBase; |
136 | static const int LBase; |
137 | static const int VBase; |
138 | static const int TBase; |
139 | static const int LCount; |
140 | static const int VCount; |
141 | static const int TCount; |
142 | static const int NCount; |
143 | static const int SCount; |
144 | }; |
145 | |
146 | } // namespace QtVirtualKeyboard |
147 | QT_END_NAMESPACE |
148 | |
149 | #endif |
150 | |