Codebase list fcitx-qt5 / fb30bee
Imported Upstream version 1.0.0 Aron Xu 9 years ago
86 changed file(s) with 15359 addition(s) and 9510 deletion(s). Raw diff Collapse all Expand all
11
22 project(fcitx-qt5)
33
4 set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
4 set(FcitxQt5_VERSION 1.0.0)
5 set(REQUIRED_QT_VERSION 5.1.0)
56
6 find_package(Qt5Core REQUIRED)
7 find_package(Qt5Gui REQUIRED)
8 find_package(Qt5DBus REQUIRED)
7 find_package(ECM 1.4.0 REQUIRED NO_MODULE)
8
9 set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
10
911 include(GNUInstallDirs)
12 include(FindPkgConfig)
13 include(FeatureSummary)
14 include(GenerateExportHeader)
15 include(ECMPackageConfigHelpers)
16 include(ECMSetupVersion)
17 include(ECMGenerateHeaders)
1018
11 get_target_property(REAL_QMAKE_EXECUTABLE ${Qt5Core_QMAKE_EXECUTABLE} IMPORTED_LOCATION)
19 find_package(Qt5 ${REQUIRED_QT_VERSION} CONFIG REQUIRED Core DBus Widgets)
20 find_package(Qt5Gui ${REQUIRED_QT_VERSION} REQUIRED Private)
21 pkg_check_modules(FCITX_UTILS fcitx-utils)
22 pkg_check_modules(FCITX_CONFIG fcitx-config)
1223
13 execute_process(COMMAND ${REAL_QMAKE_EXECUTABLE} -query QT_INSTALL_PLUGINS
14 OUTPUT_VARIABLE _Qt5_PLUGIN_INSTALL_DIR ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE
15 )
24 set(FcitxQt5_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_FULL_INCLUDEDIR}/FcitxQt5)
25 add_subdirectory(dbusaddons)
26 add_subdirectory(widgetsaddons)
27 add_subdirectory(platforminputcontext)
1628
17 if (NOT _Qt5_PLUGIN_INSTALL_DIR)
18 message(FATAL_ERROR "not found qt5 plugin dir")
19 endif (NOT _Qt5_PLUGIN_INSTALL_DIR)
20
21 include_directories(${CMAKE_CURRENT_SOURCE_DIR})
22
23 add_subdirectory(fcitx-qt5)
24 add_subdirectory(src)
25
29 feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
0 GNU GENERAL PUBLIC LICENSE
1 Version 2, June 1991
2
3 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
4 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
5 Everyone is permitted to copy and distribute verbatim copies
6 of this license document, but changing it is not allowed.
7
8 Preamble
9
10 The licenses for most software are designed to take away your
11 freedom to share and change it. By contrast, the GNU General Public
12 License is intended to guarantee your freedom to share and change free
13 software--to make sure the software is free for all its users. This
14 General Public License applies to most of the Free Software
15 Foundation's software and to any other program whose authors commit to
16 using it. (Some other Free Software Foundation software is covered by
17 the GNU Library General Public License instead.) You can apply it to
18 your programs, too.
19
20 When we speak of free software, we are referring to freedom, not
21 price. Our General Public Licenses are designed to make sure that you
22 have the freedom to distribute copies of free software (and charge for
23 this service if you wish), that you receive source code or can get it
24 if you want it, that you can change the software or use pieces of it
25 in new free programs; and that you know you can do these things.
26
27 To protect your rights, we need to make restrictions that forbid
28 anyone to deny you these rights or to ask you to surrender the rights.
29 These restrictions translate to certain responsibilities for you if you
30 distribute copies of the software, or if you modify it.
31
32 For example, if you distribute copies of such a program, whether
33 gratis or for a fee, you must give the recipients all the rights that
34 you have. You must make sure that they, too, receive or can get the
35 source code. And you must show them these terms so they know their
36 rights.
37
38 We protect your rights with two steps: (1) copyright the software, and
39 (2) offer you this license which gives you legal permission to copy,
40 distribute and/or modify the software.
41
42 Also, for each author's protection and ours, we want to make certain
43 that everyone understands that there is no warranty for this free
44 software. If the software is modified by someone else and passed on, we
45 want its recipients to know that what they have is not the original, so
46 that any problems introduced by others will not reflect on the original
47 authors' reputations.
48
49 Finally, any free program is threatened constantly by software
50 patents. We wish to avoid the danger that redistributors of a free
51 program will individually obtain patent licenses, in effect making the
52 program proprietary. To prevent this, we have made it clear that any
53 patent must be licensed for everyone's free use or not licensed at all.
54
55 The precise terms and conditions for copying, distribution and
56 modification follow.
57
58 GNU GENERAL PUBLIC LICENSE
59 TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
60
61 0. This License applies to any program or other work which contains
62 a notice placed by the copyright holder saying it may be distributed
63 under the terms of this General Public License. The "Program", below,
64 refers to any such program or work, and a "work based on the Program"
65 means either the Program or any derivative work under copyright law:
66 that is to say, a work containing the Program or a portion of it,
67 either verbatim or with modifications and/or translated into another
68 language. (Hereinafter, translation is included without limitation in
69 the term "modification".) Each licensee is addressed as "you".
70
71 Activities other than copying, distribution and modification are not
72 covered by this License; they are outside its scope. The act of
73 running the Program is not restricted, and the output from the Program
74 is covered only if its contents constitute a work based on the
75 Program (independent of having been made by running the Program).
76 Whether that is true depends on what the Program does.
77
78 1. You may copy and distribute verbatim copies of the Program's
79 source code as you receive it, in any medium, provided that you
80 conspicuously and appropriately publish on each copy an appropriate
81 copyright notice and disclaimer of warranty; keep intact all the
82 notices that refer to this License and to the absence of any warranty;
83 and give any other recipients of the Program a copy of this License
84 along with the Program.
85
86 You may charge a fee for the physical act of transferring a copy, and
87 you may at your option offer warranty protection in exchange for a fee.
88
89 2. You may modify your copy or copies of the Program or any portion
90 of it, thus forming a work based on the Program, and copy and
91 distribute such modifications or work under the terms of Section 1
92 above, provided that you also meet all of these conditions:
93
94 a) You must cause the modified files to carry prominent notices
95 stating that you changed the files and the date of any change.
96
97 b) You must cause any work that you distribute or publish, that in
98 whole or in part contains or is derived from the Program or any
99 part thereof, to be licensed as a whole at no charge to all third
100 parties under the terms of this License.
101
102 c) If the modified program normally reads commands interactively
103 when run, you must cause it, when started running for such
104 interactive use in the most ordinary way, to print or display an
105 announcement including an appropriate copyright notice and a
106 notice that there is no warranty (or else, saying that you provide
107 a warranty) and that users may redistribute the program under
108 these conditions, and telling the user how to view a copy of this
109 License. (Exception: if the Program itself is interactive but
110 does not normally print such an announcement, your work based on
111 the Program is not required to print an announcement.)
112
113 These requirements apply to the modified work as a whole. If
114 identifiable sections of that work are not derived from the Program,
115 and can be reasonably considered independent and separate works in
116 themselves, then this License, and its terms, do not apply to those
117 sections when you distribute them as separate works. But when you
118 distribute the same sections as part of a whole which is a work based
119 on the Program, the distribution of the whole must be on the terms of
120 this License, whose permissions for other licensees extend to the
121 entire whole, and thus to each and every part regardless of who wrote it.
122
123 Thus, it is not the intent of this section to claim rights or contest
124 your rights to work written entirely by you; rather, the intent is to
125 exercise the right to control the distribution of derivative or
126 collective works based on the Program.
127
128 In addition, mere aggregation of another work not based on the Program
129 with the Program (or with a work based on the Program) on a volume of
130 a storage or distribution medium does not bring the other work under
131 the scope of this License.
132
133 3. You may copy and distribute the Program (or a work based on it,
134 under Section 2) in object code or executable form under the terms of
135 Sections 1 and 2 above provided that you also do one of the following:
136
137 a) Accompany it with the complete corresponding machine-readable
138 source code, which must be distributed under the terms of Sections
139 1 and 2 above on a medium customarily used for software interchange; or,
140
141 b) Accompany it with a written offer, valid for at least three
142 years, to give any third party, for a charge no more than your
143 cost of physically performing source distribution, a complete
144 machine-readable copy of the corresponding source code, to be
145 distributed under the terms of Sections 1 and 2 above on a medium
146 customarily used for software interchange; or,
147
148 c) Accompany it with the information you received as to the offer
149 to distribute corresponding source code. (This alternative is
150 allowed only for noncommercial distribution and only if you
151 received the program in object code or executable form with such
152 an offer, in accord with Subsection b above.)
153
154 The source code for a work means the preferred form of the work for
155 making modifications to it. For an executable work, complete source
156 code means all the source code for all modules it contains, plus any
157 associated interface definition files, plus the scripts used to
158 control compilation and installation of the executable. However, as a
159 special exception, the source code distributed need not include
160 anything that is normally distributed (in either source or binary
161 form) with the major components (compiler, kernel, and so on) of the
162 operating system on which the executable runs, unless that component
163 itself accompanies the executable.
164
165 If distribution of executable or object code is made by offering
166 access to copy from a designated place, then offering equivalent
167 access to copy the source code from the same place counts as
168 distribution of the source code, even though third parties are not
169 compelled to copy the source along with the object code.
170
171 4. You may not copy, modify, sublicense, or distribute the Program
172 except as expressly provided under this License. Any attempt
173 otherwise to copy, modify, sublicense or distribute the Program is
174 void, and will automatically terminate your rights under this License.
175 However, parties who have received copies, or rights, from you under
176 this License will not have their licenses terminated so long as such
177 parties remain in full compliance.
178
179 5. You are not required to accept this License, since you have not
180 signed it. However, nothing else grants you permission to modify or
181 distribute the Program or its derivative works. These actions are
182 prohibited by law if you do not accept this License. Therefore, by
183 modifying or distributing the Program (or any work based on the
184 Program), you indicate your acceptance of this License to do so, and
185 all its terms and conditions for copying, distributing or modifying
186 the Program or works based on it.
187
188 6. Each time you redistribute the Program (or any work based on the
189 Program), the recipient automatically receives a license from the
190 original licensor to copy, distribute or modify the Program subject to
191 these terms and conditions. You may not impose any further
192 restrictions on the recipients' exercise of the rights granted herein.
193 You are not responsible for enforcing compliance by third parties to
194 this License.
195
196 7. If, as a consequence of a court judgment or allegation of patent
197 infringement or for any other reason (not limited to patent issues),
198 conditions are imposed on you (whether by court order, agreement or
199 otherwise) that contradict the conditions of this License, they do not
200 excuse you from the conditions of this License. If you cannot
201 distribute so as to satisfy simultaneously your obligations under this
202 License and any other pertinent obligations, then as a consequence you
203 may not distribute the Program at all. For example, if a patent
204 license would not permit royalty-free redistribution of the Program by
205 all those who receive copies directly or indirectly through you, then
206 the only way you could satisfy both it and this License would be to
207 refrain entirely from distribution of the Program.
208
209 If any portion of this section is held invalid or unenforceable under
210 any particular circumstance, the balance of the section is intended to
211 apply and the section as a whole is intended to apply in other
212 circumstances.
213
214 It is not the purpose of this section to induce you to infringe any
215 patents or other property right claims or to contest validity of any
216 such claims; this section has the sole purpose of protecting the
217 integrity of the free software distribution system, which is
218 implemented by public license practices. Many people have made
219 generous contributions to the wide range of software distributed
220 through that system in reliance on consistent application of that
221 system; it is up to the author/donor to decide if he or she is willing
222 to distribute software through any other system and a licensee cannot
223 impose that choice.
224
225 This section is intended to make thoroughly clear what is believed to
226 be a consequence of the rest of this License.
227
228 8. If the distribution and/or use of the Program is restricted in
229 certain countries either by patents or by copyrighted interfaces, the
230 original copyright holder who places the Program under this License
231 may add an explicit geographical distribution limitation excluding
232 those countries, so that distribution is permitted only in or among
233 countries not thus excluded. In such case, this License incorporates
234 the limitation as if written in the body of this License.
235
236 9. The Free Software Foundation may publish revised and/or new versions
237 of the General Public License from time to time. Such new versions will
238 be similar in spirit to the present version, but may differ in detail to
239 address new problems or concerns.
240
241 Each version is given a distinguishing version number. If the Program
242 specifies a version number of this License which applies to it and "any
243 later version", you have the option of following the terms and conditions
244 either of that version or of any later version published by the Free
245 Software Foundation. If the Program does not specify a version number of
246 this License, you may choose any version ever published by the Free Software
247 Foundation.
248
249 10. If you wish to incorporate parts of the Program into other free
250 programs whose distribution conditions are different, write to the author
251 to ask for permission. For software which is copyrighted by the Free
252 Software Foundation, write to the Free Software Foundation; we sometimes
253 make exceptions for this. Our decision will be guided by the two goals
254 of preserving the free status of all derivatives of our free software and
255 of promoting the sharing and reuse of software generally.
256
257 NO WARRANTY
258
259 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
260 FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
261 OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
262 PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
263 OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
264 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
265 TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
266 PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
267 REPAIR OR CORRECTION.
268
269 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
270 WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
271 REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
272 INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
273 OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
274 TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
275 YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
276 PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
277 POSSIBILITY OF SUCH DAMAGES.
278
279 END OF TERMS AND CONDITIONS
280
281 How to Apply These Terms to Your New Programs
282
283 If you develop a new program, and you want it to be of the greatest
284 possible use to the public, the best way to achieve this is to make it
285 free software which everyone can redistribute and change under these terms.
286
287 To do so, attach the following notices to the program. It is safest
288 to attach them to the start of each source file to most effectively
289 convey the exclusion of warranty; and each file should have at least
290 the "copyright" line and a pointer to where the full notice is found.
291
292 <one line to give the program's name and a brief idea of what it does.>
293 Copyright (C) <year> <name of author>
294
295 This program is free software; you can redistribute it and/or modify
296 it under the terms of the GNU General Public License as published by
297 the Free Software Foundation; either version 2 of the License, or
298 (at your option) any later version.
299
300 This program is distributed in the hope that it will be useful,
301 but WITHOUT ANY WARRANTY; without even the implied warranty of
302 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
303 GNU General Public License for more details.
304
305 You should have received a copy of the GNU General Public License
306 along with this program; if not, write to the Free Software
307 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
308
309
310 Also add information on how to contact you by electronic and paper mail.
311
312 If the program is interactive, make it output a short notice like this
313 when it starts in an interactive mode:
314
315 Gnomovision version 69, Copyright (C) year name of author
316 Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
317 This is free software, and you are welcome to redistribute it
318 under certain conditions; type `show c' for details.
319
320 The hypothetical commands `show w' and `show c' should show the appropriate
321 parts of the General Public License. Of course, the commands you use may
322 be called something other than `show w' and `show c'; they could even be
323 mouse-clicks or menu items--whatever suits your program.
324
325 You should also get your employer (if you work as a programmer) or your
326 school, if any, to sign a "copyright disclaimer" for the program, if
327 necessary. Here is a sample; alter the names:
328
329 Yoyodyne, Inc., hereby disclaims all copyright interest in the program
330 `Gnomovision' (which makes passes at compilers) written by James Hacker.
331
332 <signature of Ty Coon>, 1 April 1989
333 Ty Coon, President of Vice
334
335 This General Public License does not permit incorporating your program into
336 proprietary programs. If your program is a subroutine library, you may
337 consider it more useful to permit linking proprietary applications with the
338 library. If this is what you want to do, use the GNU Library General
339 Public License instead of this License.
0 ecm_setup_version(${FcitxQt5_VERSION} VARIABLE_PREFIX FCITXQT5DBUSADDONS
1 VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/fcitxqtdbusaddons_version.h"
2 PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/FcitxQt5DBusAddonsConfigVersion.cmake"
3 SOVERSION 1)
4
5 # create a Config.cmake and a ConfigVersion.cmake file and install them
6 set(CMAKECONFIG_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/cmake/FcitxQt5DBusAddons")
7
8 ecm_configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR}/FcitxQt5DBusAddonsConfig.cmake.in"
9 "${CMAKE_CURRENT_BINARY_DIR}/FcitxQt5DBusAddonsConfig.cmake"
10 INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
11 )
12
13 install(FILES "${CMAKE_CURRENT_BINARY_DIR}/FcitxQt5DBusAddonsConfig.cmake"
14 "${CMAKE_CURRENT_BINARY_DIR}/FcitxQt5DBusAddonsConfigVersion.cmake"
15 DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
16 COMPONENT Devel )
17
18 install(EXPORT FcitxQt5DBusAddonsTargets DESTINATION "${CMAKECONFIG_INSTALL_DIR}" FILE FcitxQt5DBusAddonsTargets.cmake NAMESPACE FcitxQt5:: )
19
20 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/fcitxqtdbusaddons_version.h
21 DESTINATION ${FcitxQt5_INCLUDE_INSTALL_DIR} COMPONENT Devel )
22
23 set(dbusaddons_SOURCES
24 fcitxqtconnection.cpp
25 fcitxqtformattedpreedit.cpp
26 fcitxqtinputcontextproxy.cpp
27 fcitxqtinputmethodproxy.cpp
28 fcitxqtkeyboardlayout.cpp
29 fcitxqtkeyboardproxy.cpp
30 fcitxqtinputmethoditem.cpp
31 )
32
33 set(dbusaddons_HEADERS
34 fcitxqtconnection.h
35 fcitxqtformattedpreedit.h
36 fcitxqtinputcontextproxy.h
37 fcitxqtinputmethodproxy.h
38 fcitxqtkeyboardlayout.h
39 fcitxqtkeyboardproxy.h
40 fcitxqtinputmethoditem.h
41 )
42
43 set(fcitxqtdbusaddons_INCLUDE_DIRS
44 ${CMAKE_CURRENT_BINARY_DIR}
45 ${CMAKE_CURRENT_SOURCE_DIR}
46 )
47
48 add_library(FcitxQt5DBusAddons SHARED ${dbusaddons_SOURCES})
49 generate_export_header(FcitxQt5DBusAddons BASE_NAME FcitxQtDBusAddons)
50 add_library(FcitxQt5::DBusAddons ALIAS FcitxQt5DBusAddons)
51
52 target_include_directories(FcitxQt5DBusAddons PUBLIC "$<BUILD_INTERFACE:${fcitxqtdbusaddons_INCLUDE_DIRS}>")
53 target_include_directories(FcitxQt5DBusAddons INTERFACE "$<INSTALL_INTERFACE:${FcitxQt5_INCLUDE_INSTALL_DIR}/FcitxQtDBusAddons>")
54
55 set_target_properties(FcitxQt5DBusAddons
56 PROPERTIES VERSION 1.0
57 AUTOMOC TRUE
58 SOVERSION 1
59 COMPILE_FLAGS "-fvisibility=hidden"
60 LINK_FLAGS "-Wl,--no-undefined"
61 EXPORT_NAME DBusAddons
62 )
63
64 target_link_libraries(
65 FcitxQt5DBusAddons
66 PUBLIC
67 Qt5::Core
68 Qt5::DBus
69 )
70
71 install(TARGETS FcitxQt5DBusAddons EXPORT FcitxQt5DBusAddonsTargets LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}")
72
73 install(FILES ${dbusaddons_HEADERS}
74 ${CMAKE_CURRENT_BINARY_DIR}/fcitxqtdbusaddons_export.h
75 DESTINATION "${FcitxQt5_INCLUDE_INSTALL_DIR}/FcitxQtDBusAddons")
76
77
0 @PACKAGE_INIT@
1
2 find_dependency(Qt5Core @REQUIRED_QT_VERSION@)
3 find_dependency(Qt5DBus @REQUIRED_QT_VERSION@)
4
5
6 include("${CMAKE_CURRENT_LIST_DIR}/FcitxQt5DBusAddonsTargets.cmake")
0 /***************************************************************************
1 * Copyright (C) 2012~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #include "fcitxqtconnection_p.h"
20 #include <QDBusConnection>
21 #include <QDBusServiceWatcher>
22 #include <QDBusReply>
23 #include <QDBusConnectionInterface>
24 #include <QDebug>
25 #include <QFile>
26 #include <QTimer>
27 #include <QDir>
28
29 #include <signal.h>
30 #include <errno.h>
31
32 // utils function in fcitx-utils and fcitx-config
33 bool _pid_exists(pid_t pid) {
34 if (pid <= 0)
35 return 0;
36 return !(kill(pid, 0) && (errno == ESRCH));
37 }
38
39
40 FcitxQtConnection::FcitxQtConnection(QObject* parent): QObject(parent)
41 ,d_ptr(new FcitxQtConnectionPrivate(this))
42 {
43 }
44
45 void FcitxQtConnection::startConnection()
46 {
47 Q_D(FcitxQtConnection);
48 if (!d->m_initialized) {
49 d->initialize();
50 d->createConnection();
51 }
52 }
53
54 void FcitxQtConnection::endConnection()
55 {
56 Q_D(FcitxQtConnection);
57 d->cleanUp();
58 d->finalize();
59 d->m_connectedOnce = false;
60 }
61
62 bool FcitxQtConnection::autoReconnect()
63 {
64 Q_D(FcitxQtConnection);
65 return d->m_autoReconnect;
66 }
67
68 void FcitxQtConnection::setAutoReconnect(bool a)
69 {
70 Q_D(FcitxQtConnection);
71 d->m_autoReconnect = a;
72 }
73
74 QDBusConnection* FcitxQtConnection::connection()
75 {
76 Q_D(FcitxQtConnection);
77 return d->m_connection;
78 }
79
80 const QString& FcitxQtConnection::serviceName()
81 {
82 Q_D(FcitxQtConnection);
83 return d->m_serviceName;
84 }
85
86 bool FcitxQtConnection::isConnected()
87 {
88 Q_D(FcitxQtConnection);
89 return d->isConnected();
90 }
91
92
93
94 FcitxQtConnection::~FcitxQtConnection()
95 {
96 }
97
98 FcitxQtConnectionPrivate::FcitxQtConnectionPrivate(FcitxQtConnection* conn) : QObject(conn)
99 ,q_ptr(conn)
100 ,m_displayNumber(-1)
101 ,m_serviceName(QString("%1-%2").arg("org.fcitx.Fcitx").arg(displayNumber()))
102 ,m_connection(0)
103 ,m_serviceWatcher(new QDBusServiceWatcher(conn))
104 ,m_watcher(new QFileSystemWatcher(this))
105 ,m_autoReconnect(true)
106 ,m_connectedOnce(false)
107 ,m_initialized(false)
108 {
109 }
110
111 FcitxQtConnectionPrivate::~FcitxQtConnectionPrivate()
112 {
113 if (m_connection)
114 delete m_connection;
115 }
116
117 void FcitxQtConnectionPrivate::initialize() {
118 m_serviceWatcher->setConnection(QDBusConnection::sessionBus());
119 m_serviceWatcher->addWatchedService(m_serviceName);
120
121 QFileInfo info(socketFile());
122 QDir dir(info.path());
123 if (!dir.exists()) {
124 QDir rt(QDir::root());
125 rt.mkpath(info.path());
126 }
127 m_watcher->addPath(info.path());
128 if (info.exists()) {
129 m_watcher->addPath(info.filePath());
130 }
131
132 connect(m_watcher, SIGNAL(fileChanged(QString)), this, SLOT(socketFileChanged()));
133 connect(m_watcher, SIGNAL(directoryChanged(QString)), this, SLOT(socketFileChanged()));
134 m_initialized = true;
135 }
136
137 void FcitxQtConnectionPrivate::finalize() {
138 m_serviceWatcher->removeWatchedService(m_serviceName);
139 m_watcher->removePaths(m_watcher->files());
140 m_watcher->removePaths(m_watcher->directories());
141 m_watcher->disconnect(SIGNAL(fileChanged(QString)));
142 m_watcher->disconnect(SIGNAL(directoryChanged(QString)));
143 m_initialized = false;
144 }
145
146 void FcitxQtConnectionPrivate::socketFileChanged() {
147 QFileInfo info(socketFile());
148 if (info.exists()) {
149 if (m_watcher->files().indexOf(info.filePath()) == -1)
150 m_watcher->addPath(info.filePath());
151 }
152
153 QString addr = address();
154 if (addr.isNull())
155 return;
156
157 cleanUp();
158 createConnection();
159 }
160
161 QByteArray FcitxQtConnectionPrivate::localMachineId()
162 {
163 #if QT_VERSION >= QT_VERSION_CHECK(4, 8, 0)
164 return QDBusConnection::localMachineId();
165 #else
166 QFile file1("/var/lib/dbus/machine-id");
167 QFile file2("/etc/machine-id");
168 QFile* fileToRead = NULL;
169 if (file1.open(QIODevice::ReadOnly)) {
170 fileToRead = &file1;
171 }
172 else if (file2.open(QIODevice::ReadOnly)) {
173 fileToRead = &file2;
174 }
175 if (fileToRead) {
176 QByteArray result = fileToRead->readLine(1024);
177 fileToRead->close();
178 result = result.trimmed();
179 if (!result.isEmpty())
180 return result;
181 }
182 return "machine-id";
183 #endif
184 }
185
186 int FcitxQtConnectionPrivate::displayNumber() {
187 if (m_displayNumber < 0) {
188 QByteArray displayNumber("0");
189 QByteArray display(qgetenv("DISPLAY"));
190 int pos = display.indexOf(':');
191
192 if (pos >= 0) {
193 ++pos;
194 int pos2 = display.indexOf('.', pos);
195 if (pos2 > 0) {
196 displayNumber = display.mid(pos, pos2 - pos);
197 } else {
198 displayNumber = display.mid(pos);
199 }
200 }
201
202 bool ok;
203 int d = displayNumber.toInt(&ok);
204 if (ok) {
205 m_displayNumber = d;
206 } else {
207 m_displayNumber = 0;
208 }
209 }
210
211 return m_displayNumber;
212 }
213
214 const QString& FcitxQtConnectionPrivate::socketFile()
215 {
216 if (!m_socketFile.isEmpty())
217 return m_socketFile;
218
219 QString filename = QString("%1-%2").arg(QString::fromLatin1(QDBusConnection::localMachineId())).arg(displayNumber());
220
221 QString home = QString::fromLocal8Bit(qgetenv("XDG_CONFIG_HOME"));
222 if (home.isEmpty()) {
223 home = QDir::homePath().append(QLatin1Literal("/.config"));
224 }
225 m_socketFile = QString("%1/fcitx/dbus/%2").arg(home).arg(filename);
226
227 return m_socketFile;
228 }
229
230 QString FcitxQtConnectionPrivate::address()
231 {
232 QString addr;
233 QByteArray addrVar = qgetenv("FCITX_DBUS_ADDRESS");
234 if (!addrVar.isNull())
235 return QString::fromLocal8Bit(addrVar);
236
237 QFile file(socketFile());
238 if (!file.open(QIODevice::ReadOnly))
239 return QString();
240
241 const int BUFSIZE = 1024;
242
243 char buffer[BUFSIZE];
244 size_t sz = file.read(buffer, BUFSIZE);
245 file.close();
246 if (sz == 0)
247 return QString();
248 char* p = buffer;
249 while(*p)
250 p++;
251 size_t addrlen = p - buffer;
252 if (sz != addrlen + 2 * sizeof(pid_t) + 1)
253 return QString();
254
255 /* skip '\0' */
256 p++;
257 pid_t *ppid = (pid_t*) p;
258 pid_t daemonpid = ppid[0];
259 pid_t fcitxpid = ppid[1];
260
261 if (!_pid_exists(daemonpid)
262 || !_pid_exists(fcitxpid))
263 return QString();
264
265 addr = QLatin1String(buffer);
266
267 return addr;
268 }
269
270 void FcitxQtConnectionPrivate::createConnection() {
271 if (m_connectedOnce && !m_autoReconnect) {
272 return;
273 }
274
275 m_serviceWatcher->disconnect(SIGNAL(serviceOwnerChanged(QString,QString,QString)));
276 QString addr = address();
277 if (!addr.isNull()) {
278 QDBusConnection connection(QDBusConnection::connectToBus(addr, "fcitx"));
279 if (connection.isConnected()) {
280 // qDebug() << "create private";
281 m_connection = new QDBusConnection(connection);
282 }
283 else
284 QDBusConnection::disconnectFromBus("fcitx");
285 }
286
287 if (!m_connection) {
288 QDBusConnection* connection = new QDBusConnection(QDBusConnection::sessionBus());
289 connect(m_serviceWatcher, SIGNAL(serviceOwnerChanged(QString,QString,QString)), this, SLOT(imChanged(QString,QString,QString)));
290 QDBusReply<bool> registered = connection->interface()->isServiceRegistered(m_serviceName);
291 if (!registered.isValid() || !registered.value()) {
292 delete connection;
293 }
294 else {
295 m_connection = connection;
296 }
297 }
298
299 Q_Q(FcitxQtConnection);
300 if (m_connection) {
301
302 m_connection->connect ("org.freedesktop.DBus.Local",
303 "/org/freedesktop/DBus/Local",
304 "org.freedesktop.DBus.Local",
305 "Disconnected",
306 this,
307 SLOT (dbusDisconnected ()));
308 m_connectedOnce = true;
309 emit q->connected();
310 }
311 }
312
313
314 void FcitxQtConnectionPrivate::dbusDisconnected()
315 {
316 cleanUp();
317
318 createConnection();
319 }
320
321 void FcitxQtConnectionPrivate::imChanged(const QString& service, const QString& oldowner, const QString& newowner)
322 {
323 if (service == m_serviceName) {
324 /* old die */
325 if (oldowner.length() > 0 || newowner.length() > 0)
326 cleanUp();
327
328 /* new rise */
329 if (newowner.length() > 0) {
330 QTimer::singleShot(100, this, SLOT(newServiceAppear()));
331 }
332 }
333 }
334
335 void FcitxQtConnectionPrivate::cleanUp()
336 {
337 Q_Q(FcitxQtConnection);
338 bool doemit = false;
339 QDBusConnection::disconnectFromBus("fcitx");
340 if (m_connection) {
341 delete m_connection;
342 m_connection = 0;
343 doemit = true;
344 }
345
346 if (!m_autoReconnect && m_connectedOnce)
347 finalize();
348
349 /* we want m_connection and finalize being called before the signal
350 * thus isConnected will return false in slot
351 * and startConnection can be called in slot
352 */
353 if (doemit)
354 emit q->disconnected();
355 }
356
357 bool FcitxQtConnectionPrivate::isConnected()
358 {
359 return m_connection && m_connection->isConnected();
360 }
361
362 void FcitxQtConnectionPrivate::newServiceAppear() {
363 if (!isConnected()) {
364 cleanUp();
365
366 createConnection();
367 }
368 }
0 /***************************************************************************
1 * Copyright (C) 2012~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #ifndef FCITXQTCONNECTION_H
20 #define FCITXQTCONNECTION_H
21
22 #include "fcitxqtdbusaddons_export.h"
23
24 #include <QtCore/QObject>
25
26 class QDBusConnection;
27
28 class FcitxQtConnectionPrivate;
29
30
31 /**
32 * dbus connection to fcitx
33 **/
34 class FCITXQTDBUSADDONS_EXPORT FcitxQtConnection : public QObject {
35 Q_OBJECT
36 Q_PROPERTY(bool autoReconnect READ autoReconnect WRITE setAutoReconnect)
37 Q_PROPERTY(bool connected READ isConnected)
38 Q_PROPERTY(QDBusConnection* connection READ connection)
39 Q_PROPERTY(QString serviceName READ serviceName)
40 public:
41 /**
42 * create a new connection
43 *
44 * @param parent
45 **/
46 explicit FcitxQtConnection(QObject* parent = 0);
47
48 /**
49 * destroy the connection
50 **/
51 virtual ~FcitxQtConnection();
52
53 /**
54 * the connection will not start to work until you call this function
55 * you may want to connect to the signal before you call this function
56 **/
57 void startConnection();
58 void endConnection();
59 /**
60 * automatically reconnect if fcitx disappeared
61 *
62 * @param a ...
63 * @return void
64 **/
65 void setAutoReconnect(bool a);
66
67 /**
68 * check this connection is doing automatical reconnect or not
69 *
70 * default value is true
71 **/
72 bool autoReconnect();
73
74 /**
75 * return the current dbus connection to fcitx, notice, the object return
76 * by this function might be deteled if fcitx disappear, or might return 0
77 * if fcitx is not running
78 *
79 * @return QDBusConnection*
80 **/
81 QDBusConnection* connection();
82 /**
83 * current fcitx dbus service name, can be used for create DBus proxy
84 *
85 * @return service name
86 **/
87 const QString& serviceName();
88 /**
89 * check its connected or not
90 **/
91 bool isConnected();
92
93 Q_SIGNALS:
94 /**
95 * this signal will be emitted upon fcitx appears
96 **/
97 void connected();
98 /**
99 * this signal will be emitted upon fcitx disappears
100 *
101 * it will come with connected in pair
102 **/
103 void disconnected();
104
105 private:
106 FcitxQtConnectionPrivate * const d_ptr;
107 Q_DECLARE_PRIVATE(FcitxQtConnection);
108 };
109
110 #endif // FCITXCONNECTION_H
0 /***************************************************************************
1 * Copyright (C) 2012~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #ifndef FCITXQTCONNECTION_P_H
20 #define FCITXQTCONNECTION_P_H
21
22 #include "fcitxqtconnection.h"
23 #include <QtCore/QWeakPointer>
24 #include <QtCore/QFileSystemWatcher>
25
26 class QDBusConnection;
27 class QDBusServiceWatcher;
28
29 class FcitxQtConnectionPrivate : public QObject {
30 Q_OBJECT
31 public:
32 FcitxQtConnectionPrivate(FcitxQtConnection* conn);
33 virtual ~FcitxQtConnectionPrivate();
34 FcitxQtConnection * const q_ptr;
35 Q_DECLARE_PUBLIC(FcitxQtConnection);
36
37 private Q_SLOTS:
38 void imChanged(const QString& service, const QString& oldowner, const QString& newowner);
39 void dbusDisconnected();
40 void cleanUp();
41 void newServiceAppear();
42 void socketFileChanged();
43
44 private:
45 bool isConnected();
46
47 static QByteArray localMachineId();
48 const QString& socketFile();
49 void createConnection();
50 QString address();
51 int displayNumber();
52 void initialize();
53 void finalize();
54
55 int m_displayNumber;
56 QString m_serviceName;
57 QDBusConnection* m_connection;
58 QDBusServiceWatcher* m_serviceWatcher;
59 QFileSystemWatcher* m_watcher;
60 QString m_socketFile;
61 bool m_autoReconnect;
62 bool m_connectedOnce;
63 bool m_initialized;
64 };
65
66
67 #endif // FCITXCONNECTION_P_H
0 /***************************************************************************
1 * Copyright (C) 2012~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #include <QDBusMetaType>
20
21 #include "fcitxqtformattedpreedit.h"
22
23 void FcitxQtFormattedPreedit::registerMetaType()
24 {
25 qRegisterMetaType<FcitxQtFormattedPreedit>("FcitxQtFormattedPreedit");
26 qDBusRegisterMetaType<FcitxQtFormattedPreedit>();
27 qRegisterMetaType<FcitxQtFormattedPreeditList>("FcitxQtFormattedPreeditList");
28 qDBusRegisterMetaType<FcitxQtFormattedPreeditList>();
29 }
30
31 qint32 FcitxQtFormattedPreedit::format() const
32 {
33 return m_format;
34 }
35
36 const QString& FcitxQtFormattedPreedit::string() const
37 {
38 return m_string;
39 }
40
41 void FcitxQtFormattedPreedit::setFormat(qint32 format)
42 {
43 m_format = format;
44 }
45
46 void FcitxQtFormattedPreedit::setString(const QString& str)
47 {
48 m_string = str;
49 }
50
51 bool FcitxQtFormattedPreedit::operator==(const FcitxQtFormattedPreedit& preedit) const
52 {
53 return (preedit.m_format == m_format) && (preedit.m_string == m_string);
54 }
55
56 FCITXQTDBUSADDONS_EXPORT
57 QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtFormattedPreedit& preedit)
58 {
59 argument.beginStructure();
60 argument << preedit.string();
61 argument << preedit.format();
62 argument.endStructure();
63 return argument;
64 }
65
66 FCITXQTDBUSADDONS_EXPORT
67 const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtFormattedPreedit& preedit)
68 {
69 QString str;
70 qint32 format;
71 argument.beginStructure();
72 argument >> str >> format;
73 argument.endStructure();
74 preedit.setString(str);
75 preedit.setFormat(format);
76 return argument;
77 }
0 /***************************************************************************
1 * Copyright (C) 2012~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #ifndef FCITX_QT_FORMATTED_PREEDIT_H
20 #define FCITX_QT_FORMATTED_PREEDIT_H
21
22 #include "fcitxqtdbusaddons_export.h"
23
24 #include <QtCore/QMetaType>
25 #include <QtDBus/QDBusArgument>
26
27 class FCITXQTDBUSADDONS_EXPORT FcitxQtFormattedPreedit {
28 public:
29 const QString& string() const;
30 qint32 format() const;
31 void setString(const QString& str);
32 void setFormat(qint32 format);
33
34 static void registerMetaType();
35
36 bool operator ==(const FcitxQtFormattedPreedit& preedit) const;
37 private:
38 QString m_string;
39 qint32 m_format;
40 };
41
42 typedef QList<FcitxQtFormattedPreedit> FcitxQtFormattedPreeditList;
43
44 QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtFormattedPreedit& im);
45 const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtFormattedPreedit& im);
46
47 Q_DECLARE_METATYPE(FcitxQtFormattedPreedit)
48 Q_DECLARE_METATYPE(FcitxQtFormattedPreeditList)
49
50 #endif
0 /*
1 * This file was generated by qdbusxml2cpp version 0.8
2 * Command line was: qdbusxml2cpp -N -p fcitxqtinputcontextproxy -c FcitxQtInputContextProxy interfaces/org.fcitx.Fcitx.InputContext.xml -i fcitxqtformattedpreedit.h -i fcitxqt_export.h
3 *
4 * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
5 *
6 * This is an auto-generated file.
7 * This file may have been hand-edited. Look for HAND-EDIT comments
8 * before re-generating it.
9 */
10
11 #include "fcitxqtinputcontextproxy.h"
12
13 /*
14 * Implementation of interface class FcitxQtInputContextProxy
15 */
16
17 FcitxQtInputContextProxy::FcitxQtInputContextProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent)
18 : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent)
19 {
20 }
21
22 FcitxQtInputContextProxy::~FcitxQtInputContextProxy()
23 {
24 }
25
0 /*
1 * This file was generated by qdbusxml2cpp version 0.8
2 * Command line was: qdbusxml2cpp -N -p fcitxqtinputcontextproxy -c FcitxQtInputContextProxy interfaces/org.fcitx.Fcitx.InputContext.xml -i fcitxqtformattedpreedit.h -i fcitxqt_export.h
3 *
4 * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
5 *
6 * This is an auto-generated file.
7 * Do not edit! All changes made to it will be lost.
8 */
9
10 #ifndef FCITXQTINPUTCONTEXTPROXY_H_1409252990
11 #define FCITXQTINPUTCONTEXTPROXY_H_1409252990
12
13 #include <QtCore/QObject>
14 #include <QtCore/QByteArray>
15 #include <QtCore/QList>
16 #include <QtCore/QMap>
17 #include <QtCore/QString>
18 #include <QtCore/QStringList>
19 #include <QtCore/QVariant>
20 #include <QtDBus/QtDBus>
21 #include "fcitxqtformattedpreedit.h"
22 #include "fcitxqtdbusaddons_export.h"
23
24 /*
25 * Proxy class for interface org.fcitx.Fcitx.InputContext
26 */
27 class FCITXQTDBUSADDONS_EXPORT FcitxQtInputContextProxy: public QDBusAbstractInterface
28 {
29 Q_OBJECT
30 public:
31 static inline const char *staticInterfaceName()
32 { return "org.fcitx.Fcitx.InputContext"; }
33
34 public:
35 FcitxQtInputContextProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0);
36
37 ~FcitxQtInputContextProxy();
38
39 public Q_SLOTS: // METHODS
40 inline QDBusPendingReply<> CloseIC()
41 {
42 QList<QVariant> argumentList;
43 return asyncCallWithArgumentList(QLatin1String("CloseIC"), argumentList);
44 }
45
46 inline QDBusPendingReply<> DestroyIC()
47 {
48 QList<QVariant> argumentList;
49 return asyncCallWithArgumentList(QLatin1String("DestroyIC"), argumentList);
50 }
51
52 inline QDBusPendingReply<> EnableIC()
53 {
54 QList<QVariant> argumentList;
55 return asyncCallWithArgumentList(QLatin1String("EnableIC"), argumentList);
56 }
57
58 inline QDBusPendingReply<> FocusIn()
59 {
60 QList<QVariant> argumentList;
61 return asyncCallWithArgumentList(QLatin1String("FocusIn"), argumentList);
62 }
63
64 inline QDBusPendingReply<> FocusOut()
65 {
66 QList<QVariant> argumentList;
67 return asyncCallWithArgumentList(QLatin1String("FocusOut"), argumentList);
68 }
69
70 inline QDBusPendingReply<> MouseEvent(int x)
71 {
72 QList<QVariant> argumentList;
73 argumentList << QVariant::fromValue(x);
74 return asyncCallWithArgumentList(QLatin1String("MouseEvent"), argumentList);
75 }
76
77 inline QDBusPendingReply<int> ProcessKeyEvent(uint keyval, uint keycode, uint state, int type, uint time)
78 {
79 QList<QVariant> argumentList;
80 argumentList << QVariant::fromValue(keyval) << QVariant::fromValue(keycode) << QVariant::fromValue(state) << QVariant::fromValue(type) << QVariant::fromValue(time);
81 return asyncCallWithArgumentList(QLatin1String("ProcessKeyEvent"), argumentList);
82 }
83
84 inline QDBusPendingReply<> Reset()
85 {
86 QList<QVariant> argumentList;
87 return asyncCallWithArgumentList(QLatin1String("Reset"), argumentList);
88 }
89
90 inline QDBusPendingReply<> SetCapacity(uint caps)
91 {
92 QList<QVariant> argumentList;
93 argumentList << QVariant::fromValue(caps);
94 return asyncCallWithArgumentList(QLatin1String("SetCapacity"), argumentList);
95 }
96
97 inline QDBusPendingReply<> SetCursorLocation(int x, int y)
98 {
99 QList<QVariant> argumentList;
100 argumentList << QVariant::fromValue(x) << QVariant::fromValue(y);
101 return asyncCallWithArgumentList(QLatin1String("SetCursorLocation"), argumentList);
102 }
103
104 inline QDBusPendingReply<> SetCursorRect(int x, int y, int w, int h)
105 {
106 QList<QVariant> argumentList;
107 argumentList << QVariant::fromValue(x) << QVariant::fromValue(y) << QVariant::fromValue(w) << QVariant::fromValue(h);
108 return asyncCallWithArgumentList(QLatin1String("SetCursorRect"), argumentList);
109 }
110
111 inline QDBusPendingReply<> SetSurroundingText(const QString &text, uint cursor, uint anchor)
112 {
113 QList<QVariant> argumentList;
114 argumentList << QVariant::fromValue(text) << QVariant::fromValue(cursor) << QVariant::fromValue(anchor);
115 return asyncCallWithArgumentList(QLatin1String("SetSurroundingText"), argumentList);
116 }
117
118 inline QDBusPendingReply<> SetSurroundingTextPosition(uint cursor, uint anchor)
119 {
120 QList<QVariant> argumentList;
121 argumentList << QVariant::fromValue(cursor) << QVariant::fromValue(anchor);
122 return asyncCallWithArgumentList(QLatin1String("SetSurroundingTextPosition"), argumentList);
123 }
124
125 Q_SIGNALS: // SIGNALS
126 void CloseIM();
127 void CommitString(const QString &str);
128 void DeleteSurroundingText(int offset, uint nchar);
129 void EnableIM();
130 void ForwardKey(uint keyval, uint state, int type);
131 void UpdateClientSideUI(const QString &auxup, const QString &auxdown, const QString &preedit, const QString &candidateword, const QString &imname, int cursorpos);
132 void UpdateFormattedPreedit(FcitxQtFormattedPreeditList str, int cursorpos);
133 };
134
135 #endif
0 /***************************************************************************
1 * Copyright (C) 2011~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 // Qt
20 #include <QDBusArgument>
21 #include <QDBusMetaType>
22
23 // self
24 #include "fcitxqtinputmethoditem.h"
25
26 bool FcitxQtInputMethodItem::enabled() const
27 {
28 return m_enabled;
29 }
30 const QString& FcitxQtInputMethodItem::langCode() const
31 {
32 return m_langCode;
33 }
34 const QString& FcitxQtInputMethodItem::name() const
35 {
36 return m_name;
37 }
38 const QString& FcitxQtInputMethodItem::uniqueName() const
39 {
40 return m_uniqueName;
41 }
42 void FcitxQtInputMethodItem::setEnabled(bool enable)
43 {
44 m_enabled = enable;
45 }
46 void FcitxQtInputMethodItem::setLangCode(const QString& lang)
47 {
48 m_langCode = lang;
49 }
50 void FcitxQtInputMethodItem::setName(const QString& name)
51 {
52 m_name = name;
53 }
54 void FcitxQtInputMethodItem::setUniqueName(const QString& name)
55 {
56 m_uniqueName = name;
57 }
58
59 void FcitxQtInputMethodItem::registerMetaType()
60 {
61 qRegisterMetaType<FcitxQtInputMethodItem>("FcitxQtInputMethodItem");
62 qDBusRegisterMetaType<FcitxQtInputMethodItem>();
63 qRegisterMetaType<FcitxQtInputMethodItemList>("FcitxQtInputMethodItemList");
64 qDBusRegisterMetaType<FcitxQtInputMethodItemList>();
65 }
66
67 FCITXQTDBUSADDONS_EXPORT
68 QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtInputMethodItem& im)
69 {
70 argument.beginStructure();
71 argument << im.name();
72 argument << im.uniqueName();
73 argument << im.langCode();
74 argument << im.enabled();
75 argument.endStructure();
76 return argument;
77 }
78
79 FCITXQTDBUSADDONS_EXPORT
80 const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtInputMethodItem& im)
81 {
82 QString name;
83 QString uniqueName;
84 QString langCode;
85 bool enabled;
86 argument.beginStructure();
87 argument >> name >> uniqueName >> langCode >> enabled;
88 argument.endStructure();
89 im.setName(name);
90 im.setUniqueName(uniqueName);
91 im.setLangCode(langCode);
92 im.setEnabled(enabled);
93 return argument;
94 }
0 /***************************************************************************
1 * Copyright (C) 2011~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #ifndef FCITX_QT_INPUT_METHOD_ITEM_H
20 #define FCITX_QT_INPUT_METHOD_ITEM_H
21
22 #include "fcitxqtdbusaddons_export.h"
23
24 // Qt
25 #include <QtCore/QString>
26 #include <QtCore/QMetaType>
27 #include <QtDBus/QDBusArgument>
28
29 class FCITXQTDBUSADDONS_EXPORT FcitxQtInputMethodItem
30 {
31 public:
32 const QString& name() const;
33 const QString& uniqueName() const;
34 const QString& langCode() const;
35 bool enabled() const;
36
37 void setName(const QString& name);
38 void setUniqueName(const QString& name);
39 void setLangCode(const QString& name);
40 void setEnabled(bool name);
41 static void registerMetaType();
42
43 inline bool operator < (const FcitxQtInputMethodItem& im) const {
44 if (m_enabled == true && im.m_enabled == false)
45 return true;
46 return false;
47 }
48 private:
49 QString m_name;
50 QString m_uniqueName;
51 QString m_langCode;
52 bool m_enabled;
53 };
54
55 typedef QList<FcitxQtInputMethodItem> FcitxQtInputMethodItemList;
56
57 QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtInputMethodItem& im);
58 const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtInputMethodItem& im);
59
60 Q_DECLARE_METATYPE(FcitxQtInputMethodItem)
61 Q_DECLARE_METATYPE(FcitxQtInputMethodItemList)
62
63 #endif
0 /*
1 * This file was generated by qdbusxml2cpp version 0.8
2 * Command line was: qdbusxml2cpp -N -p fcitxqtinputmethodproxy -c FcitxQtInputMethodProxy interfaces/org.fcitx.Fcitx.InputMethod.xml -i fcitxqtinputmethoditem.h -i fcitxqt_export.h
3 *
4 * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
5 *
6 * This is an auto-generated file.
7 * This file may have been hand-edited. Look for HAND-EDIT comments
8 * before re-generating it.
9 */
10
11 #include "fcitxqtinputmethodproxy.h"
12
13 /*
14 * Implementation of interface class FcitxQtInputMethodProxy
15 */
16
17 FcitxQtInputMethodProxy::FcitxQtInputMethodProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent)
18 : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent)
19 {
20 }
21
22 FcitxQtInputMethodProxy::~FcitxQtInputMethodProxy()
23 {
24 }
25
0 /*
1 * This file was generated by qdbusxml2cpp version 0.8
2 * Command line was: qdbusxml2cpp -N -p fcitxqtinputmethodproxy -c FcitxQtInputMethodProxy interfaces/org.fcitx.Fcitx.InputMethod.xml -i fcitxqtinputmethoditem.h -i fcitxqt_export.h
3 *
4 * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
5 *
6 * This is an auto-generated file.
7 * Do not edit! All changes made to it will be lost.
8 */
9
10 #ifndef FCITXQTINPUTMETHODPROXY_H_1409252990
11 #define FCITXQTINPUTMETHODPROXY_H_1409252990
12
13 #include <QtCore/QObject>
14 #include <QtCore/QByteArray>
15 #include <QtCore/QList>
16 #include <QtCore/QMap>
17 #include <QtCore/QString>
18 #include <QtCore/QStringList>
19 #include <QtCore/QVariant>
20 #include <QtDBus/QtDBus>
21 #include "fcitxqtinputmethoditem.h"
22 #include "fcitxqtdbusaddons_export.h"
23
24 /*
25 * Proxy class for interface org.fcitx.Fcitx.InputMethod
26 */
27 class FCITXQTDBUSADDONS_EXPORT FcitxQtInputMethodProxy: public QDBusAbstractInterface
28 {
29 Q_OBJECT
30 public:
31 static inline const char *staticInterfaceName()
32 { return "org.fcitx.Fcitx.InputMethod"; }
33
34 public:
35 FcitxQtInputMethodProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0);
36
37 ~FcitxQtInputMethodProxy();
38
39 Q_PROPERTY(QString CurrentIM READ currentIM WRITE setCurrentIM)
40 inline QString currentIM() const
41 { return qvariant_cast< QString >(property("CurrentIM")); }
42 inline void setCurrentIM(const QString &value)
43 { setProperty("CurrentIM", QVariant::fromValue(value)); }
44
45 Q_PROPERTY(FcitxQtInputMethodItemList IMList READ iMList WRITE setIMList)
46 inline FcitxQtInputMethodItemList iMList() const
47 { return qvariant_cast< FcitxQtInputMethodItemList >(property("IMList")); }
48 inline void setIMList(FcitxQtInputMethodItemList value)
49 { setProperty("IMList", QVariant::fromValue(value)); }
50
51 public Q_SLOTS: // METHODS
52 inline QDBusPendingReply<> ActivateIM()
53 {
54 QList<QVariant> argumentList;
55 return asyncCallWithArgumentList(QLatin1String("ActivateIM"), argumentList);
56 }
57
58 inline QDBusPendingReply<> Configure()
59 {
60 QList<QVariant> argumentList;
61 return asyncCallWithArgumentList(QLatin1String("Configure"), argumentList);
62 }
63
64 inline QDBusPendingReply<> ConfigureAddon(const QString &addon)
65 {
66 QList<QVariant> argumentList;
67 argumentList << QVariant::fromValue(addon);
68 return asyncCallWithArgumentList(QLatin1String("ConfigureAddon"), argumentList);
69 }
70
71 inline QDBusPendingReply<> ConfigureIM(const QString &im)
72 {
73 QList<QVariant> argumentList;
74 argumentList << QVariant::fromValue(im);
75 return asyncCallWithArgumentList(QLatin1String("ConfigureIM"), argumentList);
76 }
77
78 inline QDBusPendingReply<int, uint, uint, uint, uint> CreateIC()
79 {
80 QList<QVariant> argumentList;
81 return asyncCallWithArgumentList(QLatin1String("CreateIC"), argumentList);
82 }
83 inline QDBusReply<int> CreateIC(uint &keyval1, uint &state1, uint &keyval2, uint &state2)
84 {
85 QList<QVariant> argumentList;
86 QDBusMessage reply = callWithArgumentList(QDBus::Block, QLatin1String("CreateIC"), argumentList);
87 if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 5) {
88 keyval1 = qdbus_cast<uint>(reply.arguments().at(1));
89 state1 = qdbus_cast<uint>(reply.arguments().at(2));
90 keyval2 = qdbus_cast<uint>(reply.arguments().at(3));
91 state2 = qdbus_cast<uint>(reply.arguments().at(4));
92 }
93 return reply;
94 }
95
96 inline QDBusPendingReply<int, bool, uint, uint, uint, uint> CreateICv2(const QString &appname)
97 {
98 QList<QVariant> argumentList;
99 argumentList << QVariant::fromValue(appname);
100 return asyncCallWithArgumentList(QLatin1String("CreateICv2"), argumentList);
101 }
102 inline QDBusReply<int> CreateICv2(const QString &appname, bool &enable, uint &keyval1, uint &state1, uint &keyval2, uint &state2)
103 {
104 QList<QVariant> argumentList;
105 argumentList << QVariant::fromValue(appname);
106 QDBusMessage reply = callWithArgumentList(QDBus::Block, QLatin1String("CreateICv2"), argumentList);
107 if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 6) {
108 enable = qdbus_cast<bool>(reply.arguments().at(1));
109 keyval1 = qdbus_cast<uint>(reply.arguments().at(2));
110 state1 = qdbus_cast<uint>(reply.arguments().at(3));
111 keyval2 = qdbus_cast<uint>(reply.arguments().at(4));
112 state2 = qdbus_cast<uint>(reply.arguments().at(5));
113 }
114 return reply;
115 }
116
117 inline QDBusPendingReply<int, bool, uint, uint, uint, uint> CreateICv3(const QString &appname, int pid)
118 {
119 QList<QVariant> argumentList;
120 argumentList << QVariant::fromValue(appname) << QVariant::fromValue(pid);
121 return asyncCallWithArgumentList(QLatin1String("CreateICv3"), argumentList);
122 }
123 inline QDBusReply<int> CreateICv3(const QString &appname, int pid, bool &enable, uint &keyval1, uint &state1, uint &keyval2, uint &state2)
124 {
125 QList<QVariant> argumentList;
126 argumentList << QVariant::fromValue(appname) << QVariant::fromValue(pid);
127 QDBusMessage reply = callWithArgumentList(QDBus::Block, QLatin1String("CreateICv3"), argumentList);
128 if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 6) {
129 enable = qdbus_cast<bool>(reply.arguments().at(1));
130 keyval1 = qdbus_cast<uint>(reply.arguments().at(2));
131 state1 = qdbus_cast<uint>(reply.arguments().at(3));
132 keyval2 = qdbus_cast<uint>(reply.arguments().at(4));
133 state2 = qdbus_cast<uint>(reply.arguments().at(5));
134 }
135 return reply;
136 }
137
138 inline QDBusPendingReply<> Exit()
139 {
140 QList<QVariant> argumentList;
141 return asyncCallWithArgumentList(QLatin1String("Exit"), argumentList);
142 }
143
144 inline QDBusPendingReply<QString> GetCurrentIM()
145 {
146 QList<QVariant> argumentList;
147 return asyncCallWithArgumentList(QLatin1String("GetCurrentIM"), argumentList);
148 }
149
150 inline QDBusPendingReply<int> GetCurrentState()
151 {
152 QList<QVariant> argumentList;
153 return asyncCallWithArgumentList(QLatin1String("GetCurrentState"), argumentList);
154 }
155
156 inline QDBusPendingReply<QString> GetCurrentUI()
157 {
158 QList<QVariant> argumentList;
159 return asyncCallWithArgumentList(QLatin1String("GetCurrentUI"), argumentList);
160 }
161
162 inline QDBusPendingReply<QString> GetIMAddon(const QString &im)
163 {
164 QList<QVariant> argumentList;
165 argumentList << QVariant::fromValue(im);
166 return asyncCallWithArgumentList(QLatin1String("GetIMAddon"), argumentList);
167 }
168
169 inline QDBusPendingReply<> InactivateIM()
170 {
171 QList<QVariant> argumentList;
172 return asyncCallWithArgumentList(QLatin1String("InactivateIM"), argumentList);
173 }
174
175 inline QDBusPendingReply<> ReloadAddonConfig(const QString &addon)
176 {
177 QList<QVariant> argumentList;
178 argumentList << QVariant::fromValue(addon);
179 return asyncCallWithArgumentList(QLatin1String("ReloadAddonConfig"), argumentList);
180 }
181
182 inline QDBusPendingReply<> ReloadConfig()
183 {
184 QList<QVariant> argumentList;
185 return asyncCallWithArgumentList(QLatin1String("ReloadConfig"), argumentList);
186 }
187
188 inline QDBusPendingReply<> ResetIMList()
189 {
190 QList<QVariant> argumentList;
191 return asyncCallWithArgumentList(QLatin1String("ResetIMList"), argumentList);
192 }
193
194 inline QDBusPendingReply<> Restart()
195 {
196 QList<QVariant> argumentList;
197 return asyncCallWithArgumentList(QLatin1String("Restart"), argumentList);
198 }
199
200 inline QDBusPendingReply<> SetCurrentIM(const QString &im)
201 {
202 QList<QVariant> argumentList;
203 argumentList << QVariant::fromValue(im);
204 return asyncCallWithArgumentList(QLatin1String("SetCurrentIM"), argumentList);
205 }
206
207 inline QDBusPendingReply<> ToggleIM()
208 {
209 QList<QVariant> argumentList;
210 return asyncCallWithArgumentList(QLatin1String("ToggleIM"), argumentList);
211 }
212
213 Q_SIGNALS: // SIGNALS
214 };
215
216 #endif
0 /***************************************************************************
1 * Copyright (C) 2011~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 // Qt
20 #include <QDBusArgument>
21 #include <QDBusMetaType>
22
23 // self
24 #include "fcitxqtkeyboardlayout.h"
25
26 const QString& FcitxQtKeyboardLayout::layout() const
27 {
28 return m_layout;
29 }
30 const QString& FcitxQtKeyboardLayout::langCode() const
31 {
32 return m_langCode;
33 }
34 const QString& FcitxQtKeyboardLayout::name() const
35 {
36 return m_name;
37 }
38
39 const QString& FcitxQtKeyboardLayout::variant() const
40 {
41 return m_variant;
42 }
43
44 void FcitxQtKeyboardLayout::setLayout(const QString& layout)
45 {
46 m_layout = layout;
47 }
48
49 void FcitxQtKeyboardLayout::setLangCode(const QString& lang)
50 {
51 m_langCode = lang;
52 }
53
54 void FcitxQtKeyboardLayout::setName(const QString& name)
55 {
56 m_name = name;
57 }
58
59 void FcitxQtKeyboardLayout::setVariant(const QString& variant)
60 {
61 m_variant = variant;
62 }
63
64 void FcitxQtKeyboardLayout::registerMetaType()
65 {
66 qRegisterMetaType<FcitxQtKeyboardLayout>("FcitxQtKeyboardLayout");
67 qDBusRegisterMetaType<FcitxQtKeyboardLayout>();
68 qRegisterMetaType<FcitxQtKeyboardLayoutList>("FcitxQtKeyboardLayoutList");
69 qDBusRegisterMetaType<FcitxQtKeyboardLayoutList>();
70 }
71
72 FCITXQTDBUSADDONS_EXPORT
73 QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtKeyboardLayout& layout)
74 {
75 argument.beginStructure();
76 argument << layout.layout();
77 argument << layout.variant();
78 argument << layout.name();
79 argument << layout.langCode();
80 argument.endStructure();
81 return argument;
82 }
83
84 FCITXQTDBUSADDONS_EXPORT
85 const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtKeyboardLayout& layout)
86 {
87 QString l;
88 QString variant;
89 QString name;
90 QString langCode;
91 argument.beginStructure();
92 argument >> l >> variant >> name >> langCode;
93 argument.endStructure();
94 layout.setLayout(l);
95 layout.setVariant(variant);
96 layout.setName(name);
97 layout.setLangCode(langCode);
98 return argument;
99 }
0 /***************************************************************************
1 * Copyright (C) 2011~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #ifndef FCITX_QT_KEYBOARD_LAYOUT_H
20 #define FCITX_QT_KEYBOARD_LAYOUT_H
21
22 #include "fcitxqtdbusaddons_export.h"
23
24 // Qt
25 #include <QtCore/QString>
26 #include <QtCore/QMetaType>
27 #include <QtDBus/QDBusArgument>
28
29 class FCITXQTDBUSADDONS_EXPORT FcitxQtKeyboardLayout
30 {
31 public:
32 const QString& layout() const;
33 const QString& variant() const;
34 const QString& name() const;
35 const QString& langCode() const;
36 void setLayout(const QString& layout);
37 void setLangCode(const QString& lang);
38 void setName(const QString& name);
39 void setVariant(const QString& variant);
40
41 static void registerMetaType();
42 private:
43 QString m_layout;
44 QString m_variant;
45 QString m_name;
46 QString m_langCode;
47 };
48
49 typedef QList<FcitxQtKeyboardLayout> FcitxQtKeyboardLayoutList;
50
51 QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtKeyboardLayout& l);
52 const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtKeyboardLayout& l);
53
54 Q_DECLARE_METATYPE(FcitxQtKeyboardLayout)
55 Q_DECLARE_METATYPE(FcitxQtKeyboardLayoutList)
56
57 #endif
0 /*
1 * This file was generated by qdbusxml2cpp version 0.8
2 * Command line was: qdbusxml2cpp -N -p fcitxqtkeyboardproxy -c FcitxQtKeyboardProxy interfaces/org.fcitx.Fcitx.Keyboard.xml -i fcitxqtkeyboardlayout.h -i fcitxqt_export.h
3 *
4 * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
5 *
6 * This is an auto-generated file.
7 * This file may have been hand-edited. Look for HAND-EDIT comments
8 * before re-generating it.
9 */
10
11 #include "fcitxqtkeyboardproxy.h"
12
13 /*
14 * Implementation of interface class FcitxQtKeyboardProxy
15 */
16
17 FcitxQtKeyboardProxy::FcitxQtKeyboardProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent)
18 : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent)
19 {
20 }
21
22 FcitxQtKeyboardProxy::~FcitxQtKeyboardProxy()
23 {
24 }
25
0 /*
1 * This file was generated by qdbusxml2cpp version 0.8
2 * Command line was: qdbusxml2cpp -N -p fcitxqtkeyboardproxy -c FcitxQtKeyboardProxy interfaces/org.fcitx.Fcitx.Keyboard.xml -i fcitxqtkeyboardlayout.h -i fcitxqt_export.h
3 *
4 * qdbusxml2cpp is Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
5 *
6 * This is an auto-generated file.
7 * Do not edit! All changes made to it will be lost.
8 */
9
10 #ifndef FCITXQTKEYBOARDPROXY_H_1409252990
11 #define FCITXQTKEYBOARDPROXY_H_1409252990
12
13 #include <QtCore/QObject>
14 #include <QtCore/QByteArray>
15 #include <QtCore/QList>
16 #include <QtCore/QMap>
17 #include <QtCore/QString>
18 #include <QtCore/QStringList>
19 #include <QtCore/QVariant>
20 #include <QtDBus/QtDBus>
21 #include "fcitxqtkeyboardlayout.h"
22 #include "fcitxqtdbusaddons_export.h"
23
24 /*
25 * Proxy class for interface org.fcitx.Fcitx.Keyboard
26 */
27 class FCITXQTDBUSADDONS_EXPORT FcitxQtKeyboardProxy: public QDBusAbstractInterface
28 {
29 Q_OBJECT
30 public:
31 static inline const char *staticInterfaceName()
32 { return "org.fcitx.Fcitx.Keyboard"; }
33
34 public:
35 FcitxQtKeyboardProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0);
36
37 ~FcitxQtKeyboardProxy();
38
39 public Q_SLOTS: // METHODS
40 inline QDBusPendingReply<QString, QString> GetLayoutForIM(const QString &im)
41 {
42 QList<QVariant> argumentList;
43 argumentList << QVariant::fromValue(im);
44 return asyncCallWithArgumentList(QLatin1String("GetLayoutForIM"), argumentList);
45 }
46 inline QDBusReply<QString> GetLayoutForIM(const QString &im, QString &variant)
47 {
48 QList<QVariant> argumentList;
49 argumentList << QVariant::fromValue(im);
50 QDBusMessage reply = callWithArgumentList(QDBus::Block, QLatin1String("GetLayoutForIM"), argumentList);
51 if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 2) {
52 variant = qdbus_cast<QString>(reply.arguments().at(1));
53 }
54 return reply;
55 }
56
57 inline QDBusPendingReply<FcitxQtKeyboardLayoutList> GetLayouts()
58 {
59 QList<QVariant> argumentList;
60 return asyncCallWithArgumentList(QLatin1String("GetLayouts"), argumentList);
61 }
62
63 inline QDBusPendingReply<> SetLayoutForIM(const QString &im, const QString &layout, const QString &variant)
64 {
65 QList<QVariant> argumentList;
66 argumentList << QVariant::fromValue(im) << QVariant::fromValue(layout) << QVariant::fromValue(variant);
67 return asyncCallWithArgumentList(QLatin1String("SetLayoutForIM"), argumentList);
68 }
69
70 Q_SIGNALS: // SIGNALS
71 };
72
73 #endif
0 #!/bin/sh
1
2 qdbusxml2cpp-qt5 -N -p fcitxqtinputcontextproxy -c FcitxQtInputContextProxy interfaces/org.fcitx.Fcitx.InputContext.xml -i fcitxqtformattedpreedit.h -i fcitxqt_export.h
3 qdbusxml2cpp-qt5 -N -p fcitxqtinputmethodproxy -c FcitxQtInputMethodProxy interfaces/org.fcitx.Fcitx.InputMethod.xml -i fcitxqtinputmethoditem.h -i fcitxqt_export.h
4 qdbusxml2cpp-qt5 -N -p fcitxqtkeyboardproxy -c FcitxQtKeyboardProxy interfaces/org.fcitx.Fcitx.Keyboard.xml -i fcitxqtkeyboardlayout.h -i fcitxqt_export.h
0 <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
1 "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
2 <node>
3 <interface name="org.fcitx.Fcitx.InputContext">
4 <method name="EnableIC">
5 </method>
6 <method name="CloseIC">
7 </method>
8 <method name="FocusIn">
9 </method>
10 <method name="FocusOut">
11 </method>
12 <method name="Reset">
13 </method>
14 <method name="MouseEvent">
15 <arg name="x" direction="in" type="i" />
16 </method>
17 <method name="SetCursorLocation">
18 <arg name="x" direction="in" type="i"/>
19 <arg name="y" direction="in" type="i"/>
20 </method>
21 <method name="SetCursorRect">
22 <arg name="x" direction="in" type="i"/>
23 <arg name="y" direction="in" type="i"/>
24 <arg name="w" direction="in" type="i"/>
25 <arg name="h" direction="in" type="i"/>
26 </method>
27 <method name="SetCapacity">
28 <arg name="caps" direction="in" type="u"/>
29 </method>
30 <method name="SetSurroundingText">
31 <arg name="text" direction="in" type="s"/>
32 <arg name="cursor" direction="in" type="u"/>
33 <arg name="anchor" direction="in" type="u"/>
34 </method>
35 <method name="SetSurroundingTextPosition">
36 <arg name="cursor" direction="in" type="u"/>
37 <arg name="anchor" direction="in" type="u"/>
38 </method>
39 <method name="DestroyIC">
40 </method>
41 <method name="ProcessKeyEvent">
42 <arg name="keyval" direction="in" type="u"/>
43 <arg name="keycode" direction="in" type="u"/>
44 <arg name="state" direction="in" type="u"/>
45 <arg name="type" direction="in" type="i"/>
46 <arg name="time" direction="in" type="u"/>
47 <arg name="ret" direction="out" type="i"/>
48 </method>
49 <signal name="EnableIM">
50 </signal>
51 <signal name="CloseIM">
52 </signal>
53 <signal name="CommitString">
54 <arg name="str" type="s"/>
55 </signal>
56 <signal name="UpdateFormattedPreedit">
57 <arg name="str" type="a(si)" />
58 <arg name="cursorpos" type="i"/>
59 <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="FcitxQtFormattedPreeditList" />
60 <annotation name="org.qtproject.QtDBus.QtTypeName.In0" value="FcitxQtFormattedPreeditList" />
61 </signal>
62 <signal name="UpdateClientSideUI">
63 <arg name="auxup" type="s"/>
64 <arg name="auxdown" type="s"/>
65 <arg name="preedit" type="s"/>
66 <arg name="candidateword" type="s"/>
67 <arg name="imname" type="s"/>
68 <arg name="cursorpos" type="i"/>
69 </signal>
70 <signal name="ForwardKey">
71 <arg name="keyval" type="u"/>
72 <arg name="state" type="u"/>
73 <arg name="type" type="i"/>
74 </signal>
75 <signal name="DeleteSurroundingText">
76 <arg name="offset" type="i"/>
77 <arg name="nchar" type="u"/>
78 </signal>
79 </interface>
80 </node>
0 <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
1 "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
2 <node>
3 <interface name="org.fcitx.Fcitx.InputMethod">
4 <method name="CreateIC">
5 <arg name="icid" direction="out" type="i"/>
6 <arg name="keyval1" direction="out" type="u"/>
7 <arg name="state1" direction="out" type="u"/>
8 <arg name="keyval2" direction="out" type="u"/>
9 <arg name="state2" direction="out" type="u"/>
10 </method>
11 <method name="CreateICv2">
12 <arg name="appname" direction="in" type="s"/>
13 <arg name="icid" direction="out" type="i"/>
14 <arg name="enable" direction="out" type="b"/>
15 <arg name="keyval1" direction="out" type="u"/>
16 <arg name="state1" direction="out" type="u"/>
17 <arg name="keyval2" direction="out" type="u"/>
18 <arg name="state2" direction="out" type="u"/>
19 </method>
20 <method name="CreateICv3">
21 <arg name="appname" direction="in" type="s"/>
22 <arg name="pid" direction="in" type="i"/>
23 <arg name="icid" direction="out" type="i"/>
24 <arg name="enable" direction="out" type="b"/>
25 <arg name="keyval1" direction="out" type="u"/>
26 <arg name="state1" direction="out" type="u"/>
27 <arg name="keyval2" direction="out" type="u"/>
28 <arg name="state2" direction="out" type="u"/>
29 </method>
30 <method name="Exit">
31 </method>
32 <method name="GetCurrentIM">
33 <arg name="im" direction="out" type="s"/>
34 </method>
35 <method name="SetCurrentIM">
36 <arg name="im" direction="in" type="s"/>
37 </method>
38 <method name="ReloadConfig">
39 </method>
40 <method name="ReloadAddonConfig">
41 <arg name="addon" direction="in" type="s"/>
42 </method>
43 <method name="Restart">
44 </method>
45 <method name="Configure">
46 </method>
47 <method name="ConfigureAddon">
48 <arg name="addon" direction="in" type="s"/>
49 </method>
50 <method name="ConfigureIM">
51 <arg name="im" direction="in" type="s"/>
52 </method>
53 <method name="GetCurrentUI">
54 <arg name="addon" direction="out" type="s"/>
55 </method>
56 <method name="GetIMAddon">
57 <arg name="im" direction="in" type="s"/>
58 <arg name="addon" direction="out" type="s"/>
59 </method>
60 <method name="ActivateIM">
61 </method>
62 <method name="InactivateIM">
63 </method>
64 <method name="ToggleIM">
65 </method>
66 <method name="ResetIMList">
67 </method>
68 <method name="GetCurrentState">
69 <arg name="state" direction="out" type="i"/>
70 </method>
71 <property access="readwrite" type="a(sssb)" name="IMList">
72 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="true"/>
73 <annotation name="com.trolltech.QtDBus.QtTypeName" value="FcitxQtInputMethodItemList" />
74 <annotation name="org.qtproject.QtDBus.QtTypeName" value="FcitxQtInputMethodItemList" />
75 </property>
76 <property access="readwrite" type="s" name="CurrentIM">
77 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="true"/>
78 </property>
79 </interface>
80 </node>
0 <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
1 <node>
2 <interface name="org.fcitx.Fcitx.Keyboard">
3 <method name="GetLayouts">
4 <arg name="layouts" direction="out" type="a(ssss)"/>
5 <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="FcitxQtKeyboardLayoutList" />
6 <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="FcitxQtKeyboardLayoutList" />
7 </method>
8 <method name="GetLayoutForIM">
9 <arg name="im" direction="in" type="s"/>
10 <arg name="layout" direction="out" type="s"/>
11 <arg name="variant" direction="out" type="s"/>
12 </method>
13 <method name="SetLayoutForIM">
14 <arg name="im" direction="in" type="s"/>
15 <arg name="layout" direction="in" type="s"/>
16 <arg name="variant" direction="in" type="s"/>
17 </method>
18 </interface>
19 </node>
+0
-56
fcitx-qt5/CMakeLists.txt less more
0 set(fcitx_qt_SOURCES
1 fcitxqtconnection.cpp
2 fcitxqtformattedpreedit.cpp
3 fcitxqtinputcontextproxy.cpp
4 fcitxqtinputmethodproxy.cpp
5 fcitxqtkeyboardlayout.cpp
6 fcitxqtkeyboardproxy.cpp
7 fcitxqtinputmethoditem.cpp
8 )
9
10 set(fcitx_qt_HEADERS
11 fcitxqtconnection.h
12 fcitxqt_export.h
13 fcitxqtformattedpreedit.h
14 fcitxqtinputcontextproxy.h
15 fcitxqtinputmethodproxy.h
16 fcitxqtkeyboardlayout.h
17 fcitxqtkeyboardproxy.h
18 fcitxqtinputmethoditem.h
19 )
20
21 include_directories(${Qt5Core_INCLUDE_DIRS}
22 ${Qt5Gui_INCLUDE_DIRS}
23 ${Qt5DBus_INCLUDE_DIRS}
24 )
25
26 qt5_wrap_cpp(
27 fcitx_qt_MOC_SRCS
28 ${fcitx_qt_HEADERS}
29 fcitxqtconnection_p.h
30 )
31
32 add_library(fcitx-qt5 SHARED ${fcitx_qt_SOURCES} ${fcitx_qt_MOC_SRCS})
33 set_target_properties(fcitx-qt5
34 PROPERTIES VERSION 0.1
35 SOVERSION 0
36 COMPILE_FLAGS "-fvisibility=hidden"
37 LINK_FLAGS "-Wl,--no-undefined"
38 )
39
40 target_link_libraries(
41 fcitx-qt5
42 ${Qt5Core_LIBRARIES}
43 ${Qt5Gui_LIBRARIES}
44 ${Qt5DBus_LIBRARIES}
45 )
46
47 install(TARGETS fcitx-qt5 LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}")
48
49 configure_file(fcitx-qt5.pc.in ${CMAKE_CURRENT_BINARY_DIR}/fcitx-qt5.pc)
50 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/fcitx-qt5.pc
51 DESTINATION "${CMAKE_INSTALL_LIBDIR}/pkgconfig")
52
53 install(FILES ${fcitx_qt_HEADERS} DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/fcitx-qt5")
54
55
+0
-11
fcitx-qt5/fcitx-qt5.pc.in less more
0 prefix=@prefix@
1 exec_prefix=@exec_prefix@
2 libdir=@libdir@
3 includedir=@includedir@
4
5 Name: fcitx-qt
6 Description: Fcitx Client/GUI Library for Qt
7 Version: @version@
8 Requires: fcitx-utils QtCore QtDBus QtGui
9 Cflags: -I${includedir}
10 Libs: -L${libdir} -lfcitx-qt
+0
-27
fcitx-qt5/fcitxqt_export.h less more
0 /***************************************************************************
1 * Copyright (C) 2012~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #ifndef FCITXQT_EXPORT_H
20 #define FCITXQT_EXPORT_H
21
22 #ifndef FCITX_QT_EXPORT_API
23 #define FCITX_QT_EXPORT_API __attribute__ ((visibility("default")))
24 #endif
25
26 #endif // FCITXQT_EXPORT_H
+0
-363
fcitx-qt5/fcitxqtconnection.cpp less more
0 /***************************************************************************
1 * Copyright (C) 2012~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #include "fcitxqtconnection_p.h"
20 #include <QDBusConnection>
21 #include <QDBusServiceWatcher>
22 #include <QDBusReply>
23 #include <QDBusConnectionInterface>
24 #include <QDebug>
25 #include <QFile>
26 #include <QTimer>
27 #include <QDir>
28
29 #include <signal.h>
30 #include <errno.h>
31
32 // utils function in fcitx-utils and fcitx-config
33 bool _pid_exists(pid_t pid) {
34 if (pid <= 0)
35 return 0;
36 return !(kill(pid, 0) && (errno == ESRCH));
37 }
38
39
40 FcitxQtConnection::FcitxQtConnection(QObject* parent): QObject(parent)
41 ,d_ptr(new FcitxQtConnectionPrivate(this))
42 {
43 }
44
45 void FcitxQtConnection::startConnection()
46 {
47 Q_D(FcitxQtConnection);
48 if (!d->m_initialized) {
49 d->initialize();
50 d->createConnection();
51 }
52 }
53
54 void FcitxQtConnection::endConnection()
55 {
56 Q_D(FcitxQtConnection);
57 d->cleanUp();
58 d->finalize();
59 d->m_connectedOnce = false;
60 }
61
62 bool FcitxQtConnection::autoReconnect()
63 {
64 Q_D(FcitxQtConnection);
65 return d->m_autoReconnect;
66 }
67
68 void FcitxQtConnection::setAutoReconnect(bool a)
69 {
70 Q_D(FcitxQtConnection);
71 d->m_autoReconnect = a;
72 }
73
74 QDBusConnection* FcitxQtConnection::connection()
75 {
76 Q_D(FcitxQtConnection);
77 return d->m_connection;
78 }
79
80 const QString& FcitxQtConnection::serviceName()
81 {
82 Q_D(FcitxQtConnection);
83 return d->m_serviceName;
84 }
85
86 bool FcitxQtConnection::isConnected()
87 {
88 Q_D(FcitxQtConnection);
89 return d->isConnected();
90 }
91
92
93
94 FcitxQtConnection::~FcitxQtConnection()
95 {
96 }
97
98 FcitxQtConnectionPrivate::FcitxQtConnectionPrivate(FcitxQtConnection* conn) : QObject(conn)
99 ,q_ptr(conn)
100 ,m_displayNumber(-1)
101 ,m_serviceName(QString("%1-%2").arg("org.fcitx.Fcitx").arg(displayNumber()))
102 ,m_connection(0)
103 ,m_serviceWatcher(new QDBusServiceWatcher(conn))
104 ,m_watcher(new QFileSystemWatcher(this))
105 ,m_autoReconnect(true)
106 ,m_connectedOnce(false)
107 ,m_initialized(false)
108 {
109 }
110
111 FcitxQtConnectionPrivate::~FcitxQtConnectionPrivate()
112 {
113 if (m_connection)
114 delete m_connection;
115 }
116
117 void FcitxQtConnectionPrivate::initialize() {
118 m_serviceWatcher->setConnection(QDBusConnection::sessionBus());
119 m_serviceWatcher->addWatchedService(m_serviceName);
120
121 QFileInfo info(socketFile());
122 QDir dir(info.path());
123 if (!dir.exists()) {
124 QDir rt(QDir::root());
125 rt.mkpath(info.path());
126 }
127 m_watcher->addPath(info.path());
128 if (info.exists()) {
129 m_watcher->addPath(info.filePath());
130 }
131
132 connect(m_watcher, SIGNAL(fileChanged(QString)), this, SLOT(socketFileChanged()));
133 connect(m_watcher, SIGNAL(directoryChanged(QString)), this, SLOT(socketFileChanged()));
134 m_initialized = true;
135 }
136
137 void FcitxQtConnectionPrivate::finalize() {
138 m_serviceWatcher->removeWatchedService(m_serviceName);
139 m_watcher->removePaths(m_watcher->files());
140 m_watcher->removePaths(m_watcher->directories());
141 m_watcher->disconnect(SIGNAL(fileChanged(QString)));
142 m_watcher->disconnect(SIGNAL(directoryChanged(QString)));
143 m_initialized = false;
144 }
145
146 void FcitxQtConnectionPrivate::socketFileChanged() {
147 QFileInfo info(socketFile());
148 if (info.exists()) {
149 if (m_watcher->files().indexOf(info.filePath()) == -1)
150 m_watcher->addPath(info.filePath());
151 }
152
153 QString addr = address();
154 if (addr.isNull())
155 return;
156
157 cleanUp();
158 createConnection();
159 }
160
161 QByteArray FcitxQtConnectionPrivate::localMachineId()
162 {
163 #if QT_VERSION >= QT_VERSION_CHECK(4, 8, 0)
164 return QDBusConnection::localMachineId();
165 #else
166 QFile file1("/var/lib/dbus/machine-id");
167 QFile file2("/etc/machine-id");
168 QFile* fileToRead = NULL;
169 if (file1.open(QIODevice::ReadOnly)) {
170 fileToRead = &file1;
171 }
172 else if (file2.open(QIODevice::ReadOnly)) {
173 fileToRead = &file2;
174 }
175 if (fileToRead) {
176 QByteArray result = fileToRead->readLine(1024);
177 fileToRead->close();
178 result = result.trimmed();
179 if (!result.isEmpty())
180 return result;
181 }
182 return "machine-id";
183 #endif
184 }
185
186 int FcitxQtConnectionPrivate::displayNumber() {
187 if (m_displayNumber < 0) {
188 QByteArray displayNumber("0");
189 QByteArray display(qgetenv("DISPLAY"));
190 int pos = display.indexOf(':');
191 ++pos;
192 int pos2 = display.indexOf('.', pos);
193 if (pos2 > 0)
194 displayNumber = display.mid(pos, pos2 - pos);
195
196 bool ok;
197 int d = displayNumber.toInt(&ok);
198 if (ok) {
199 m_displayNumber = d;
200 } else {
201 m_displayNumber = 0;
202 }
203 }
204
205 return m_displayNumber;
206 }
207
208 const QString& FcitxQtConnectionPrivate::socketFile()
209 {
210 if (!m_socketFile.isEmpty())
211 return m_socketFile;
212
213 QString filename = QString("%1-%2").arg(QString::fromLatin1(QDBusConnection::localMachineId())).arg(displayNumber());
214
215 QString home = QString::fromLocal8Bit(qgetenv("XDG_CONFIG_HOME"));
216 if (home.isEmpty()) {
217 home = QDir::homePath().append(QLatin1Literal("/.config"));
218 }
219 m_socketFile = QString("%1/fcitx/dbus/%2").arg(home).arg(filename);
220
221 return m_socketFile;
222 }
223
224 QString FcitxQtConnectionPrivate::address()
225 {
226 QString addr;
227 QByteArray addrVar = qgetenv("FCITX_DBUS_ADDRESS");
228 if (!addrVar.isNull())
229 return QString::fromLocal8Bit(addrVar);
230
231 QFile file(socketFile());
232 if (!file.open(QIODevice::ReadOnly))
233 return QString();
234
235 const int BUFSIZE = 1024;
236
237 char buffer[BUFSIZE];
238 size_t sz = file.read(buffer, BUFSIZE);
239 file.close();
240 if (sz == 0)
241 return QString();
242 char* p = buffer;
243 while(*p)
244 p++;
245 size_t addrlen = p - buffer;
246 if (sz != addrlen + 2 * sizeof(pid_t) + 1)
247 return QString();
248
249 /* skip '\0' */
250 p++;
251 pid_t *ppid = (pid_t*) p;
252 pid_t daemonpid = ppid[0];
253 pid_t fcitxpid = ppid[1];
254
255 if (!_pid_exists(daemonpid)
256 || !_pid_exists(fcitxpid))
257 return QString();
258
259 addr = QLatin1String(buffer);
260
261 return addr;
262 }
263
264 void FcitxQtConnectionPrivate::createConnection() {
265 if (m_connectedOnce && !m_autoReconnect) {
266 return;
267 }
268
269 m_serviceWatcher->disconnect(SIGNAL(serviceOwnerChanged(QString,QString,QString)));
270 QString addr = address();
271 if (!addr.isNull()) {
272 QDBusConnection connection(QDBusConnection::connectToBus(addr, "fcitx"));
273 if (connection.isConnected()) {
274 // qDebug() << "create private";
275 m_connection = new QDBusConnection(connection);
276 }
277 else
278 QDBusConnection::disconnectFromBus("fcitx");
279 }
280
281 if (!m_connection) {
282 QDBusConnection* connection = new QDBusConnection(QDBusConnection::sessionBus());
283 connect(m_serviceWatcher, SIGNAL(serviceOwnerChanged(QString,QString,QString)), this, SLOT(imChanged(QString,QString,QString)));
284 QDBusReply<bool> registered = connection->interface()->isServiceRegistered(m_serviceName);
285 if (!registered.isValid() || !registered.value()) {
286 delete connection;
287 }
288 else {
289 m_connection = connection;
290 }
291 }
292
293 Q_Q(FcitxQtConnection);
294 if (m_connection) {
295
296 m_connection->connect ("org.freedesktop.DBus.Local",
297 "/org/freedesktop/DBus/Local",
298 "org.freedesktop.DBus.Local",
299 "Disconnected",
300 this,
301 SLOT (dbusDisconnected ()));
302 m_connectedOnce = true;
303 emit q->connected();
304 }
305 }
306
307
308 void FcitxQtConnectionPrivate::dbusDisconnected()
309 {
310 cleanUp();
311
312 createConnection();
313 }
314
315 void FcitxQtConnectionPrivate::imChanged(const QString& service, const QString& oldowner, const QString& newowner)
316 {
317 if (service == m_serviceName) {
318 /* old die */
319 if (oldowner.length() > 0 || newowner.length() > 0)
320 cleanUp();
321
322 /* new rise */
323 if (newowner.length() > 0) {
324 QTimer::singleShot(100, this, SLOT(newServiceAppear()));
325 }
326 }
327 }
328
329 void FcitxQtConnectionPrivate::cleanUp()
330 {
331 Q_Q(FcitxQtConnection);
332 bool doemit = false;
333 QDBusConnection::disconnectFromBus("fcitx");
334 if (m_connection) {
335 delete m_connection;
336 m_connection = 0;
337 doemit = true;
338 }
339
340 if (!m_autoReconnect && m_connectedOnce)
341 finalize();
342
343 /* we want m_connection and finalize being called before the signal
344 * thus isConnected will return false in slot
345 * and startConnection can be called in slot
346 */
347 if (doemit)
348 emit q->disconnected();
349 }
350
351 bool FcitxQtConnectionPrivate::isConnected()
352 {
353 return m_connection && m_connection->isConnected();
354 }
355
356 void FcitxQtConnectionPrivate::newServiceAppear() {
357 if (!isConnected()) {
358 cleanUp();
359
360 createConnection();
361 }
362 }
+0
-111
fcitx-qt5/fcitxqtconnection.h less more
0 /***************************************************************************
1 * Copyright (C) 2012~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #ifndef FCITXQTCONNECTION_H
20 #define FCITXQTCONNECTION_H
21
22 #include "fcitxqt_export.h"
23
24 #include <QtCore/QObject>
25
26 class QDBusConnection;
27
28 class FcitxQtConnectionPrivate;
29
30
31 /**
32 * dbus connection to fcitx
33 **/
34 class FCITX_QT_EXPORT_API FcitxQtConnection : public QObject {
35 Q_OBJECT
36 Q_PROPERTY(bool autoReconnect READ autoReconnect WRITE setAutoReconnect)
37 Q_PROPERTY(bool connected READ isConnected)
38 Q_PROPERTY(QDBusConnection* connection READ connection)
39 Q_PROPERTY(QString serviceName READ serviceName)
40 public:
41 /**
42 * create a new connection
43 *
44 * @param parent
45 **/
46 explicit FcitxQtConnection(QObject* parent = 0);
47
48 /**
49 * destroy the connection
50 **/
51 virtual ~FcitxQtConnection();
52
53 /**
54 * the connection will not start to work until you call this function
55 * you may want to connect to the signal before you call this function
56 **/
57 void startConnection();
58 void endConnection();
59 /**
60 * automatically reconnect if fcitx disappeared
61 *
62 * @param a ...
63 * @return void
64 **/
65 void setAutoReconnect(bool a);
66
67 /**
68 * check this connection is doing automatical reconnect or not
69 *
70 * default value is true
71 **/
72 bool autoReconnect();
73
74 /**
75 * return the current dbus connection to fcitx, notice, the object return
76 * by this function might be deteled if fcitx disappear, or might return 0
77 * if fcitx is not running
78 *
79 * @return QDBusConnection*
80 **/
81 QDBusConnection* connection();
82 /**
83 * current fcitx dbus service name, can be used for create DBus proxy
84 *
85 * @return service name
86 **/
87 const QString& serviceName();
88 /**
89 * check its connected or not
90 **/
91 bool isConnected();
92
93 Q_SIGNALS:
94 /**
95 * this signal will be emitted upon fcitx appears
96 **/
97 void connected();
98 /**
99 * this signal will be emitted upon fcitx disappears
100 *
101 * it will come with connected in pair
102 **/
103 void disconnected();
104
105 private:
106 FcitxQtConnectionPrivate * const d_ptr;
107 Q_DECLARE_PRIVATE(FcitxQtConnection);
108 };
109
110 #endif // FCITXCONNECTION_H
+0
-68
fcitx-qt5/fcitxqtconnection_p.h less more
0 /***************************************************************************
1 * Copyright (C) 2012~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #ifndef FCITXQTCONNECTION_P_H
20 #define FCITXQTCONNECTION_P_H
21
22 #include "fcitxqtconnection.h"
23 #include <QtCore/QWeakPointer>
24 #include <QtCore/QFileSystemWatcher>
25
26 class QDBusConnection;
27 class QDBusServiceWatcher;
28
29 class FcitxQtConnectionPrivate : public QObject {
30 Q_OBJECT
31 public:
32 FcitxQtConnectionPrivate(FcitxQtConnection* conn);
33 virtual ~FcitxQtConnectionPrivate();
34 FcitxQtConnection * const q_ptr;
35 Q_DECLARE_PUBLIC(FcitxQtConnection);
36
37 private Q_SLOTS:
38 void imChanged(const QString& service, const QString& oldowner, const QString& newowner);
39 void dbusDisconnected();
40 void cleanUp();
41 void newServiceAppear();
42 void socketFileChanged();
43
44 private:
45 bool isConnected();
46
47 static QByteArray localMachineId();
48 const QString& socketFile();
49 void createConnection();
50 QString address();
51 int displayNumber();
52 void initialize();
53 void finalize();
54
55 int m_displayNumber;
56 QString m_serviceName;
57 QDBusConnection* m_connection;
58 QDBusServiceWatcher* m_serviceWatcher;
59 QFileSystemWatcher* m_watcher;
60 QString m_socketFile;
61 bool m_autoReconnect;
62 bool m_connectedOnce;
63 bool m_initialized;
64 };
65
66
67 #endif // FCITXCONNECTION_P_H
+0
-78
fcitx-qt5/fcitxqtformattedpreedit.cpp less more
0 /***************************************************************************
1 * Copyright (C) 2012~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #include <QDBusMetaType>
20
21 #include "fcitxqtformattedpreedit.h"
22
23 void FcitxQtFormattedPreedit::registerMetaType()
24 {
25 qRegisterMetaType<FcitxQtFormattedPreedit>("FcitxQtFormattedPreedit");
26 qDBusRegisterMetaType<FcitxQtFormattedPreedit>();
27 qRegisterMetaType<FcitxQtFormattedPreeditList>("FcitxQtFormattedPreeditList");
28 qDBusRegisterMetaType<FcitxQtFormattedPreeditList>();
29 }
30
31 qint32 FcitxQtFormattedPreedit::format() const
32 {
33 return m_format;
34 }
35
36 const QString& FcitxQtFormattedPreedit::string() const
37 {
38 return m_string;
39 }
40
41 void FcitxQtFormattedPreedit::setFormat(qint32 format)
42 {
43 m_format = format;
44 }
45
46 void FcitxQtFormattedPreedit::setString(const QString& str)
47 {
48 m_string = str;
49 }
50
51 bool FcitxQtFormattedPreedit::operator==(const FcitxQtFormattedPreedit& preedit) const
52 {
53 return (preedit.m_format == m_format) && (preedit.m_string == m_string);
54 }
55
56 FCITX_QT_EXPORT_API
57 QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtFormattedPreedit& preedit)
58 {
59 argument.beginStructure();
60 argument << preedit.string();
61 argument << preedit.format();
62 argument.endStructure();
63 return argument;
64 }
65
66 FCITX_QT_EXPORT_API
67 const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtFormattedPreedit& preedit)
68 {
69 QString str;
70 qint32 format;
71 argument.beginStructure();
72 argument >> str >> format;
73 argument.endStructure();
74 preedit.setString(str);
75 preedit.setFormat(format);
76 return argument;
77 }
+0
-51
fcitx-qt5/fcitxqtformattedpreedit.h less more
0 /***************************************************************************
1 * Copyright (C) 2012~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #ifndef FCITX_QT_FORMATTED_PREEDIT_H
20 #define FCITX_QT_FORMATTED_PREEDIT_H
21
22 #include "fcitxqt_export.h"
23
24 #include <QtCore/QMetaType>
25 #include <QtDBus/QDBusArgument>
26
27 class FCITX_QT_EXPORT_API FcitxQtFormattedPreedit {
28 public:
29 const QString& string() const;
30 qint32 format() const;
31 void setString(const QString& str);
32 void setFormat(qint32 format);
33
34 static void registerMetaType();
35
36 bool operator ==(const FcitxQtFormattedPreedit& preedit) const;
37 private:
38 QString m_string;
39 qint32 m_format;
40 };
41
42 typedef QList<FcitxQtFormattedPreedit> FcitxQtFormattedPreeditList;
43
44 QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtFormattedPreedit& im);
45 const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtFormattedPreedit& im);
46
47 Q_DECLARE_METATYPE(FcitxQtFormattedPreedit)
48 Q_DECLARE_METATYPE(FcitxQtFormattedPreeditList)
49
50 #endif
+0
-26
fcitx-qt5/fcitxqtinputcontextproxy.cpp less more
0 /*
1 * This file was generated by qdbusxml2cpp version 0.7
2 * Command line was: qdbusxml2cpp -N -p fcitxqtinputcontextproxy -c FcitxQtInputContextProxy interfaces/org.fcitx.Fcitx.InputContext.xml -i fcitxqtformattedpreedit.h -i fcitxqt_export.h
3 *
4 * qdbusxml2cpp is Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
5 *
6 * This is an auto-generated file.
7 * This file may have been hand-edited. Look for HAND-EDIT comments
8 * before re-generating it.
9 */
10
11 #include "fcitxqtinputcontextproxy.h"
12
13 /*
14 * Implementation of interface class FcitxQtInputContextProxy
15 */
16
17 FcitxQtInputContextProxy::FcitxQtInputContextProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent)
18 : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent)
19 {
20 }
21
22 FcitxQtInputContextProxy::~FcitxQtInputContextProxy()
23 {
24 }
25
+0
-136
fcitx-qt5/fcitxqtinputcontextproxy.h less more
0 /*
1 * This file was generated by qdbusxml2cpp version 0.7
2 * Command line was: qdbusxml2cpp -N -p fcitxqtinputcontextproxy -c FcitxQtInputContextProxy interfaces/org.fcitx.Fcitx.InputContext.xml -i fcitxqtformattedpreedit.h -i fcitxqt_export.h
3 *
4 * qdbusxml2cpp is Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
5 *
6 * This is an auto-generated file.
7 * Do not edit! All changes made to it will be lost.
8 */
9
10 #ifndef FCITXQTINPUTCONTEXTPROXY_H_1354921637
11 #define FCITXQTINPUTCONTEXTPROXY_H_1354921637
12
13 #include <QtCore/QObject>
14 #include <QtCore/QByteArray>
15 #include <QtCore/QList>
16 #include <QtCore/QMap>
17 #include <QtCore/QString>
18 #include <QtCore/QStringList>
19 #include <QtCore/QVariant>
20 #include <QtDBus/QtDBus>
21 #include "fcitxqtformattedpreedit.h"
22 #include "fcitxqt_export.h"
23
24 /*
25 * Proxy class for interface org.fcitx.Fcitx.InputContext
26 */
27 class FCITX_QT_EXPORT_API FcitxQtInputContextProxy: public QDBusAbstractInterface
28 {
29 Q_OBJECT
30 public:
31 static inline const char *staticInterfaceName()
32 { return "org.fcitx.Fcitx.InputContext"; }
33
34 public:
35 FcitxQtInputContextProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0);
36
37 ~FcitxQtInputContextProxy();
38
39 public Q_SLOTS: // METHODS
40 inline QDBusPendingReply<> CloseIC()
41 {
42 QList<QVariant> argumentList;
43 return asyncCallWithArgumentList(QLatin1String("CloseIC"), argumentList);
44 }
45
46 inline QDBusPendingReply<> DestroyIC()
47 {
48 QList<QVariant> argumentList;
49 return asyncCallWithArgumentList(QLatin1String("DestroyIC"), argumentList);
50 }
51
52 inline QDBusPendingReply<> EnableIC()
53 {
54 QList<QVariant> argumentList;
55 return asyncCallWithArgumentList(QLatin1String("EnableIC"), argumentList);
56 }
57
58 inline QDBusPendingReply<> FocusIn()
59 {
60 QList<QVariant> argumentList;
61 return asyncCallWithArgumentList(QLatin1String("FocusIn"), argumentList);
62 }
63
64 inline QDBusPendingReply<> FocusOut()
65 {
66 QList<QVariant> argumentList;
67 return asyncCallWithArgumentList(QLatin1String("FocusOut"), argumentList);
68 }
69
70 inline QDBusPendingReply<> MouseEvent(int x)
71 {
72 QList<QVariant> argumentList;
73 argumentList << QVariant::fromValue(x);
74 return asyncCallWithArgumentList(QLatin1String("MouseEvent"), argumentList);
75 }
76
77 inline QDBusPendingReply<int> ProcessKeyEvent(uint keyval, uint keycode, uint state, int type, uint time)
78 {
79 QList<QVariant> argumentList;
80 argumentList << QVariant::fromValue(keyval) << QVariant::fromValue(keycode) << QVariant::fromValue(state) << QVariant::fromValue(type) << QVariant::fromValue(time);
81 return asyncCallWithArgumentList(QLatin1String("ProcessKeyEvent"), argumentList);
82 }
83
84 inline QDBusPendingReply<> Reset()
85 {
86 QList<QVariant> argumentList;
87 return asyncCallWithArgumentList(QLatin1String("Reset"), argumentList);
88 }
89
90 inline QDBusPendingReply<> SetCapacity(uint caps)
91 {
92 QList<QVariant> argumentList;
93 argumentList << QVariant::fromValue(caps);
94 return asyncCallWithArgumentList(QLatin1String("SetCapacity"), argumentList);
95 }
96
97 inline QDBusPendingReply<> SetCursorLocation(int x, int y)
98 {
99 QList<QVariant> argumentList;
100 argumentList << QVariant::fromValue(x) << QVariant::fromValue(y);
101 return asyncCallWithArgumentList(QLatin1String("SetCursorLocation"), argumentList);
102 }
103
104 inline QDBusPendingReply<> SetCursorRect(int x, int y, int w, int h)
105 {
106 QList<QVariant> argumentList;
107 argumentList << QVariant::fromValue(x) << QVariant::fromValue(y) << QVariant::fromValue(w) << QVariant::fromValue(h);
108 return asyncCallWithArgumentList(QLatin1String("SetCursorRect"), argumentList);
109 }
110
111 inline QDBusPendingReply<> SetSurroundingText(const QString &text, uint cursor, uint anchor)
112 {
113 QList<QVariant> argumentList;
114 argumentList << QVariant::fromValue(text) << QVariant::fromValue(cursor) << QVariant::fromValue(anchor);
115 return asyncCallWithArgumentList(QLatin1String("SetSurroundingText"), argumentList);
116 }
117
118 inline QDBusPendingReply<> SetSurroundingTextPosition(uint cursor, uint anchor)
119 {
120 QList<QVariant> argumentList;
121 argumentList << QVariant::fromValue(cursor) << QVariant::fromValue(anchor);
122 return asyncCallWithArgumentList(QLatin1String("SetSurroundingTextPosition"), argumentList);
123 }
124
125 Q_SIGNALS: // SIGNALS
126 void CloseIM();
127 void CommitString(const QString &str);
128 void DeleteSurroundingText(int offset, uint nchar);
129 void EnableIM();
130 void ForwardKey(uint keyval, uint state, int type);
131 void UpdateClientSideUI(const QString &auxup, const QString &auxdown, const QString &preedit, const QString &candidateword, const QString &imname, int cursorpos);
132 void UpdateFormattedPreedit(FcitxQtFormattedPreeditList str, int cursorpos);
133 };
134
135 #endif
+0
-95
fcitx-qt5/fcitxqtinputmethoditem.cpp less more
0 /***************************************************************************
1 * Copyright (C) 2011~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 // Qt
20 #include <QDBusArgument>
21 #include <QDBusMetaType>
22
23 // self
24 #include "fcitxqtinputmethoditem.h"
25
26 bool FcitxQtInputMethodItem::enabled() const
27 {
28 return m_enabled;
29 }
30 const QString& FcitxQtInputMethodItem::langCode() const
31 {
32 return m_langCode;
33 }
34 const QString& FcitxQtInputMethodItem::name() const
35 {
36 return m_name;
37 }
38 const QString& FcitxQtInputMethodItem::uniqueName() const
39 {
40 return m_uniqueName;
41 }
42 void FcitxQtInputMethodItem::setEnabled(bool enable)
43 {
44 m_enabled = enable;
45 }
46 void FcitxQtInputMethodItem::setLangCode(const QString& lang)
47 {
48 m_langCode = lang;
49 }
50 void FcitxQtInputMethodItem::setName(const QString& name)
51 {
52 m_name = name;
53 }
54 void FcitxQtInputMethodItem::setUniqueName(const QString& name)
55 {
56 m_uniqueName = name;
57 }
58
59 void FcitxQtInputMethodItem::registerMetaType()
60 {
61 qRegisterMetaType<FcitxQtInputMethodItem>("FcitxQtInputMethodItem");
62 qDBusRegisterMetaType<FcitxQtInputMethodItem>();
63 qRegisterMetaType<FcitxQtInputMethodItemList>("FcitxQtInputMethodItemList");
64 qDBusRegisterMetaType<FcitxQtInputMethodItemList>();
65 }
66
67 FCITX_QT_EXPORT_API
68 QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtInputMethodItem& im)
69 {
70 argument.beginStructure();
71 argument << im.name();
72 argument << im.uniqueName();
73 argument << im.langCode();
74 argument << im.enabled();
75 argument.endStructure();
76 return argument;
77 }
78
79 FCITX_QT_EXPORT_API
80 const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtInputMethodItem& im)
81 {
82 QString name;
83 QString uniqueName;
84 QString langCode;
85 bool enabled;
86 argument.beginStructure();
87 argument >> name >> uniqueName >> langCode >> enabled;
88 argument.endStructure();
89 im.setName(name);
90 im.setUniqueName(uniqueName);
91 im.setLangCode(langCode);
92 im.setEnabled(enabled);
93 return argument;
94 }
+0
-64
fcitx-qt5/fcitxqtinputmethoditem.h less more
0 /***************************************************************************
1 * Copyright (C) 2011~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #ifndef FCITX_QT_INPUT_METHOD_ITEM_H
20 #define FCITX_QT_INPUT_METHOD_ITEM_H
21
22 #include "fcitxqt_export.h"
23
24 // Qt
25 #include <QtCore/QString>
26 #include <QtCore/QMetaType>
27 #include <QtDBus/QDBusArgument>
28
29 class FCITX_QT_EXPORT_API FcitxQtInputMethodItem
30 {
31 public:
32 const QString& name() const;
33 const QString& uniqueName() const;
34 const QString& langCode() const;
35 bool enabled() const;
36
37 void setName(const QString& name);
38 void setUniqueName(const QString& name);
39 void setLangCode(const QString& name);
40 void setEnabled(bool name);
41 static void registerMetaType();
42
43 inline bool operator < (const FcitxQtInputMethodItem& im) const {
44 if (m_enabled == true && im.m_enabled == false)
45 return true;
46 return false;
47 }
48 private:
49 QString m_name;
50 QString m_uniqueName;
51 QString m_langCode;
52 bool m_enabled;
53 };
54
55 typedef QList<FcitxQtInputMethodItem> FcitxQtInputMethodItemList;
56
57 QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtInputMethodItem& im);
58 const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtInputMethodItem& im);
59
60 Q_DECLARE_METATYPE(FcitxQtInputMethodItem)
61 Q_DECLARE_METATYPE(FcitxQtInputMethodItemList)
62
63 #endif
+0
-26
fcitx-qt5/fcitxqtinputmethodproxy.cpp less more
0 /*
1 * This file was generated by qdbusxml2cpp version 0.7
2 * Command line was: qdbusxml2cpp -N -p fcitxqtinputmethodproxy -c FcitxQtInputMethodProxy interfaces/org.fcitx.Fcitx.InputMethod.xml -i fcitxqtinputmethoditem.h -i fcitxqt_export.h
3 *
4 * qdbusxml2cpp is Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
5 *
6 * This is an auto-generated file.
7 * This file may have been hand-edited. Look for HAND-EDIT comments
8 * before re-generating it.
9 */
10
11 #include "fcitxqtinputmethodproxy.h"
12
13 /*
14 * Implementation of interface class FcitxQtInputMethodProxy
15 */
16
17 FcitxQtInputMethodProxy::FcitxQtInputMethodProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent)
18 : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent)
19 {
20 }
21
22 FcitxQtInputMethodProxy::~FcitxQtInputMethodProxy()
23 {
24 }
25
+0
-205
fcitx-qt5/fcitxqtinputmethodproxy.h less more
0 /*
1 * This file was generated by qdbusxml2cpp version 0.7
2 * Command line was: qdbusxml2cpp -N -p fcitxqtinputmethodproxy -c FcitxQtInputMethodProxy interfaces/org.fcitx.Fcitx.InputMethod.xml -i fcitxqtinputmethoditem.h -i fcitxqt_export.h
3 *
4 * qdbusxml2cpp is Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
5 *
6 * This is an auto-generated file.
7 * Do not edit! All changes made to it will be lost.
8 */
9
10 #ifndef FCITXQTINPUTMETHODPROXY_H_1354834547
11 #define FCITXQTINPUTMETHODPROXY_H_1354834547
12
13 #include <QtCore/QObject>
14 #include <QtCore/QByteArray>
15 #include <QtCore/QList>
16 #include <QtCore/QMap>
17 #include <QtCore/QString>
18 #include <QtCore/QStringList>
19 #include <QtCore/QVariant>
20 #include <QtDBus/QtDBus>
21 #include "fcitxqtinputmethoditem.h"
22 #include "fcitxqt_export.h"
23
24 /*
25 * Proxy class for interface org.fcitx.Fcitx.InputMethod
26 */
27 class FCITX_QT_EXPORT_API FcitxQtInputMethodProxy: public QDBusAbstractInterface
28 {
29 Q_OBJECT
30 public:
31 static inline const char *staticInterfaceName()
32 { return "org.fcitx.Fcitx.InputMethod"; }
33
34 public:
35 FcitxQtInputMethodProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0);
36
37 ~FcitxQtInputMethodProxy();
38
39 Q_PROPERTY(FcitxQtInputMethodItemList IMList READ iMList WRITE setIMList)
40 inline FcitxQtInputMethodItemList iMList() const
41 { return qvariant_cast< FcitxQtInputMethodItemList >(property("IMList")); }
42 inline void setIMList(FcitxQtInputMethodItemList value)
43 { setProperty("IMList", QVariant::fromValue(value)); }
44
45 public Q_SLOTS: // METHODS
46 inline QDBusPendingReply<> ActivateIM()
47 {
48 QList<QVariant> argumentList;
49 return asyncCallWithArgumentList(QLatin1String("ActivateIM"), argumentList);
50 }
51
52 inline QDBusPendingReply<> Configure()
53 {
54 QList<QVariant> argumentList;
55 return asyncCallWithArgumentList(QLatin1String("Configure"), argumentList);
56 }
57
58 inline QDBusPendingReply<> ConfigureAddon(const QString &addon)
59 {
60 QList<QVariant> argumentList;
61 argumentList << QVariant::fromValue(addon);
62 return asyncCallWithArgumentList(QLatin1String("ConfigureAddon"), argumentList);
63 }
64
65 inline QDBusPendingReply<> ConfigureIM(const QString &im)
66 {
67 QList<QVariant> argumentList;
68 argumentList << QVariant::fromValue(im);
69 return asyncCallWithArgumentList(QLatin1String("ConfigureIM"), argumentList);
70 }
71
72 inline QDBusPendingReply<int, uint, uint, uint, uint> CreateIC()
73 {
74 QList<QVariant> argumentList;
75 return asyncCallWithArgumentList(QLatin1String("CreateIC"), argumentList);
76 }
77 inline QDBusReply<int> CreateIC(uint &keyval1, uint &state1, uint &keyval2, uint &state2)
78 {
79 QList<QVariant> argumentList;
80 QDBusMessage reply = callWithArgumentList(QDBus::Block, QLatin1String("CreateIC"), argumentList);
81 if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 5) {
82 keyval1 = qdbus_cast<uint>(reply.arguments().at(1));
83 state1 = qdbus_cast<uint>(reply.arguments().at(2));
84 keyval2 = qdbus_cast<uint>(reply.arguments().at(3));
85 state2 = qdbus_cast<uint>(reply.arguments().at(4));
86 }
87 return reply;
88 }
89
90 inline QDBusPendingReply<int, bool, uint, uint, uint, uint> CreateICv2(const QString &appname)
91 {
92 QList<QVariant> argumentList;
93 argumentList << QVariant::fromValue(appname);
94 return asyncCallWithArgumentList(QLatin1String("CreateICv2"), argumentList);
95 }
96 inline QDBusReply<int> CreateICv2(const QString &appname, bool &enable, uint &keyval1, uint &state1, uint &keyval2, uint &state2)
97 {
98 QList<QVariant> argumentList;
99 argumentList << QVariant::fromValue(appname);
100 QDBusMessage reply = callWithArgumentList(QDBus::Block, QLatin1String("CreateICv2"), argumentList);
101 if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 6) {
102 enable = qdbus_cast<bool>(reply.arguments().at(1));
103 keyval1 = qdbus_cast<uint>(reply.arguments().at(2));
104 state1 = qdbus_cast<uint>(reply.arguments().at(3));
105 keyval2 = qdbus_cast<uint>(reply.arguments().at(4));
106 state2 = qdbus_cast<uint>(reply.arguments().at(5));
107 }
108 return reply;
109 }
110
111 inline QDBusPendingReply<int, bool, uint, uint, uint, uint> CreateICv3(const QString &appname, int pid)
112 {
113 QList<QVariant> argumentList;
114 argumentList << QVariant::fromValue(appname) << QVariant::fromValue(pid);
115 return asyncCallWithArgumentList(QLatin1String("CreateICv3"), argumentList);
116 }
117 inline QDBusReply<int> CreateICv3(const QString &appname, int pid, bool &enable, uint &keyval1, uint &state1, uint &keyval2, uint &state2)
118 {
119 QList<QVariant> argumentList;
120 argumentList << QVariant::fromValue(appname) << QVariant::fromValue(pid);
121 QDBusMessage reply = callWithArgumentList(QDBus::Block, QLatin1String("CreateICv3"), argumentList);
122 if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 6) {
123 enable = qdbus_cast<bool>(reply.arguments().at(1));
124 keyval1 = qdbus_cast<uint>(reply.arguments().at(2));
125 state1 = qdbus_cast<uint>(reply.arguments().at(3));
126 keyval2 = qdbus_cast<uint>(reply.arguments().at(4));
127 state2 = qdbus_cast<uint>(reply.arguments().at(5));
128 }
129 return reply;
130 }
131
132 inline QDBusPendingReply<> Exit()
133 {
134 QList<QVariant> argumentList;
135 return asyncCallWithArgumentList(QLatin1String("Exit"), argumentList);
136 }
137
138 inline QDBusPendingReply<QString> GetCurrentIM()
139 {
140 QList<QVariant> argumentList;
141 return asyncCallWithArgumentList(QLatin1String("GetCurrentIM"), argumentList);
142 }
143
144 inline QDBusPendingReply<int> GetCurrentState()
145 {
146 QList<QVariant> argumentList;
147 return asyncCallWithArgumentList(QLatin1String("GetCurrentState"), argumentList);
148 }
149
150 inline QDBusPendingReply<QString> GetCurrentUI()
151 {
152 QList<QVariant> argumentList;
153 return asyncCallWithArgumentList(QLatin1String("GetCurrentUI"), argumentList);
154 }
155
156 inline QDBusPendingReply<QString> GetIMAddon(const QString &im)
157 {
158 QList<QVariant> argumentList;
159 argumentList << QVariant::fromValue(im);
160 return asyncCallWithArgumentList(QLatin1String("GetIMAddon"), argumentList);
161 }
162
163 inline QDBusPendingReply<> InactivateIM()
164 {
165 QList<QVariant> argumentList;
166 return asyncCallWithArgumentList(QLatin1String("InactivateIM"), argumentList);
167 }
168
169 inline QDBusPendingReply<> ReloadAddonConfig(const QString &addon)
170 {
171 QList<QVariant> argumentList;
172 argumentList << QVariant::fromValue(addon);
173 return asyncCallWithArgumentList(QLatin1String("ReloadAddonConfig"), argumentList);
174 }
175
176 inline QDBusPendingReply<> ReloadConfig()
177 {
178 QList<QVariant> argumentList;
179 return asyncCallWithArgumentList(QLatin1String("ReloadConfig"), argumentList);
180 }
181
182 inline QDBusPendingReply<> Restart()
183 {
184 QList<QVariant> argumentList;
185 return asyncCallWithArgumentList(QLatin1String("Restart"), argumentList);
186 }
187
188 inline QDBusPendingReply<> SetCurrentIM(const QString &im)
189 {
190 QList<QVariant> argumentList;
191 argumentList << QVariant::fromValue(im);
192 return asyncCallWithArgumentList(QLatin1String("SetCurrentIM"), argumentList);
193 }
194
195 inline QDBusPendingReply<> ToggleIM()
196 {
197 QList<QVariant> argumentList;
198 return asyncCallWithArgumentList(QLatin1String("ToggleIM"), argumentList);
199 }
200
201 Q_SIGNALS: // SIGNALS
202 };
203
204 #endif
+0
-100
fcitx-qt5/fcitxqtkeyboardlayout.cpp less more
0 /***************************************************************************
1 * Copyright (C) 2011~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 // Qt
20 #include <QDBusArgument>
21 #include <QDBusMetaType>
22
23 // self
24 #include "fcitxqtkeyboardlayout.h"
25
26 const QString& FcitxQtKeyboardLayout::layout() const
27 {
28 return m_layout;
29 }
30 const QString& FcitxQtKeyboardLayout::langCode() const
31 {
32 return m_langCode;
33 }
34 const QString& FcitxQtKeyboardLayout::name() const
35 {
36 return m_name;
37 }
38
39 const QString& FcitxQtKeyboardLayout::variant() const
40 {
41 return m_variant;
42 }
43
44 void FcitxQtKeyboardLayout::setLayout(const QString& layout)
45 {
46 m_layout = layout;
47 }
48
49 void FcitxQtKeyboardLayout::setLangCode(const QString& lang)
50 {
51 m_langCode = lang;
52 }
53
54 void FcitxQtKeyboardLayout::setName(const QString& name)
55 {
56 m_name = name;
57 }
58
59 void FcitxQtKeyboardLayout::setVariant(const QString& variant)
60 {
61 m_variant = variant;
62 }
63
64 void FcitxQtKeyboardLayout::registerMetaType()
65 {
66 qRegisterMetaType<FcitxQtKeyboardLayout>("FcitxQtKeyboardLayout");
67 qDBusRegisterMetaType<FcitxQtKeyboardLayout>();
68 qRegisterMetaType<FcitxQtKeyboardLayoutList>("FcitxQtKeyboardLayoutList");
69 qDBusRegisterMetaType<FcitxQtKeyboardLayoutList>();
70 }
71
72 FCITX_QT_EXPORT_API
73 QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtKeyboardLayout& layout)
74 {
75 argument.beginStructure();
76 argument << layout.layout();
77 argument << layout.variant();
78 argument << layout.name();
79 argument << layout.langCode();
80 argument.endStructure();
81 return argument;
82 }
83
84 FCITX_QT_EXPORT_API
85 const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtKeyboardLayout& layout)
86 {
87 QString l;
88 QString variant;
89 QString name;
90 QString langCode;
91 argument.beginStructure();
92 argument >> l >> variant >> name >> langCode;
93 argument.endStructure();
94 layout.setLayout(l);
95 layout.setVariant(variant);
96 layout.setName(name);
97 layout.setLangCode(langCode);
98 return argument;
99 }
+0
-58
fcitx-qt5/fcitxqtkeyboardlayout.h less more
0 /***************************************************************************
1 * Copyright (C) 2011~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #ifndef FCITX_QT_KEYBOARD_LAYOUT_H
20 #define FCITX_QT_KEYBOARD_LAYOUT_H
21
22 #include "fcitxqt_export.h"
23
24 // Qt
25 #include <QtCore/QString>
26 #include <QtCore/QMetaType>
27 #include <QtDBus/QDBusArgument>
28
29 class FCITX_QT_EXPORT_API FcitxQtKeyboardLayout
30 {
31 public:
32 const QString& layout() const;
33 const QString& variant() const;
34 const QString& name() const;
35 const QString& langCode() const;
36 void setLayout(const QString& layout);
37 void setLangCode(const QString& lang);
38 void setName(const QString& name);
39 void setVariant(const QString& variant);
40
41 static void registerMetaType();
42 private:
43 QString m_layout;
44 QString m_variant;
45 QString m_name;
46 QString m_langCode;
47 };
48
49 typedef QList<FcitxQtKeyboardLayout> FcitxQtKeyboardLayoutList;
50
51 QDBusArgument& operator<<(QDBusArgument& argument, const FcitxQtKeyboardLayout& l);
52 const QDBusArgument& operator>>(const QDBusArgument& argument, FcitxQtKeyboardLayout& l);
53
54 Q_DECLARE_METATYPE(FcitxQtKeyboardLayout)
55 Q_DECLARE_METATYPE(FcitxQtKeyboardLayoutList)
56
57 #endif
+0
-26
fcitx-qt5/fcitxqtkeyboardproxy.cpp less more
0 /*
1 * This file was generated by qdbusxml2cpp version 0.7
2 * Command line was: qdbusxml2cpp -N -p fcitxqtkeyboardproxy -c FcitxQtKeyboardProxy interfaces/org.fcitx.Fcitx.Keyboard.xml -i fcitxqtkeyboardlayout.h -i fcitxqt_export.h
3 *
4 * qdbusxml2cpp is Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
5 *
6 * This is an auto-generated file.
7 * This file may have been hand-edited. Look for HAND-EDIT comments
8 * before re-generating it.
9 */
10
11 #include "fcitxqtkeyboardproxy.h"
12
13 /*
14 * Implementation of interface class FcitxQtKeyboardProxy
15 */
16
17 FcitxQtKeyboardProxy::FcitxQtKeyboardProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent)
18 : QDBusAbstractInterface(service, path, staticInterfaceName(), connection, parent)
19 {
20 }
21
22 FcitxQtKeyboardProxy::~FcitxQtKeyboardProxy()
23 {
24 }
25
+0
-74
fcitx-qt5/fcitxqtkeyboardproxy.h less more
0 /*
1 * This file was generated by qdbusxml2cpp version 0.7
2 * Command line was: qdbusxml2cpp -N -p fcitxqtkeyboardproxy -c FcitxQtKeyboardProxy interfaces/org.fcitx.Fcitx.Keyboard.xml -i fcitxqtkeyboardlayout.h -i fcitxqt_export.h
3 *
4 * qdbusxml2cpp is Copyright (C) 2012 Digia Plc and/or its subsidiary(-ies).
5 *
6 * This is an auto-generated file.
7 * Do not edit! All changes made to it will be lost.
8 */
9
10 #ifndef FCITXQTKEYBOARDPROXY_H_1354825180
11 #define FCITXQTKEYBOARDPROXY_H_1354825180
12
13 #include <QtCore/QObject>
14 #include <QtCore/QByteArray>
15 #include <QtCore/QList>
16 #include <QtCore/QMap>
17 #include <QtCore/QString>
18 #include <QtCore/QStringList>
19 #include <QtCore/QVariant>
20 #include <QtDBus/QtDBus>
21 #include "fcitxqtkeyboardlayout.h"
22 #include "fcitxqt_export.h"
23
24 /*
25 * Proxy class for interface org.fcitx.Fcitx.Keyboard
26 */
27 class FCITX_QT_EXPORT_API FcitxQtKeyboardProxy: public QDBusAbstractInterface
28 {
29 Q_OBJECT
30 public:
31 static inline const char *staticInterfaceName()
32 { return "org.fcitx.Fcitx.Keyboard"; }
33
34 public:
35 FcitxQtKeyboardProxy(const QString &service, const QString &path, const QDBusConnection &connection, QObject *parent = 0);
36
37 ~FcitxQtKeyboardProxy();
38
39 public Q_SLOTS: // METHODS
40 inline QDBusPendingReply<QString, QString> GetLayoutForIM(const QString &im)
41 {
42 QList<QVariant> argumentList;
43 argumentList << QVariant::fromValue(im);
44 return asyncCallWithArgumentList(QLatin1String("GetLayoutForIM"), argumentList);
45 }
46 inline QDBusReply<QString> GetLayoutForIM(const QString &im, QString &variant)
47 {
48 QList<QVariant> argumentList;
49 argumentList << QVariant::fromValue(im);
50 QDBusMessage reply = callWithArgumentList(QDBus::Block, QLatin1String("GetLayoutForIM"), argumentList);
51 if (reply.type() == QDBusMessage::ReplyMessage && reply.arguments().count() == 2) {
52 variant = qdbus_cast<QString>(reply.arguments().at(1));
53 }
54 return reply;
55 }
56
57 inline QDBusPendingReply<FcitxQtKeyboardLayoutList> GetLayouts()
58 {
59 QList<QVariant> argumentList;
60 return asyncCallWithArgumentList(QLatin1String("GetLayouts"), argumentList);
61 }
62
63 inline QDBusPendingReply<> SetLayoutForIM(const QString &im, const QString &layout, const QString &variant)
64 {
65 QList<QVariant> argumentList;
66 argumentList << QVariant::fromValue(im) << QVariant::fromValue(layout) << QVariant::fromValue(variant);
67 return asyncCallWithArgumentList(QLatin1String("SetLayoutForIM"), argumentList);
68 }
69
70 Q_SIGNALS: // SIGNALS
71 };
72
73 #endif
+0
-5
fcitx-qt5/gen_dbus.sh less more
0 #!/bin/sh
1
2 qdbusxml2cpp -N -p fcitxqtinputcontextproxy -c FcitxQtInputContextProxy interfaces/org.fcitx.Fcitx.InputContext.xml -i fcitxqtformattedpreedit.h -i fcitxqt_export.h
3 qdbusxml2cpp -N -p fcitxqtinputmethodproxy -c FcitxQtInputMethodProxy interfaces/org.fcitx.Fcitx.InputMethod.xml -i fcitxqtinputmethoditem.h -i fcitxqt_export.h
4 qdbusxml2cpp -N -p fcitxqtkeyboardproxy -c FcitxQtKeyboardProxy interfaces/org.fcitx.Fcitx.Keyboard.xml -i fcitxqtkeyboardlayout.h -i fcitxqt_export.h
+0
-80
fcitx-qt5/interfaces/org.fcitx.Fcitx.InputContext.xml less more
0 <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
1 "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
2 <node>
3 <interface name="org.fcitx.Fcitx.InputContext">
4 <method name="EnableIC">
5 </method>
6 <method name="CloseIC">
7 </method>
8 <method name="FocusIn">
9 </method>
10 <method name="FocusOut">
11 </method>
12 <method name="Reset">
13 </method>
14 <method name="MouseEvent">
15 <arg name="x" direction="in" type="i" />
16 </method>
17 <method name="SetCursorLocation">
18 <arg name="x" direction="in" type="i"/>
19 <arg name="y" direction="in" type="i"/>
20 </method>
21 <method name="SetCursorRect">
22 <arg name="x" direction="in" type="i"/>
23 <arg name="y" direction="in" type="i"/>
24 <arg name="w" direction="in" type="i"/>
25 <arg name="h" direction="in" type="i"/>
26 </method>
27 <method name="SetCapacity">
28 <arg name="caps" direction="in" type="u"/>
29 </method>
30 <method name="SetSurroundingText">
31 <arg name="text" direction="in" type="s"/>
32 <arg name="cursor" direction="in" type="u"/>
33 <arg name="anchor" direction="in" type="u"/>
34 </method>
35 <method name="SetSurroundingTextPosition">
36 <arg name="cursor" direction="in" type="u"/>
37 <arg name="anchor" direction="in" type="u"/>
38 </method>
39 <method name="DestroyIC">
40 </method>
41 <method name="ProcessKeyEvent">
42 <arg name="keyval" direction="in" type="u"/>
43 <arg name="keycode" direction="in" type="u"/>
44 <arg name="state" direction="in" type="u"/>
45 <arg name="type" direction="in" type="i"/>
46 <arg name="time" direction="in" type="u"/>
47 <arg name="ret" direction="out" type="i"/>
48 </method>
49 <signal name="EnableIM">
50 </signal>
51 <signal name="CloseIM">
52 </signal>
53 <signal name="CommitString">
54 <arg name="str" type="s"/>
55 </signal>
56 <signal name="UpdateFormattedPreedit">
57 <arg name="str" type="a(si)" />
58 <arg name="cursorpos" type="i"/>
59 <annotation name="com.trolltech.QtDBus.QtTypeName.In0" value="FcitxQtFormattedPreeditList" />
60 </signal>
61 <signal name="UpdateClientSideUI">
62 <arg name="auxup" type="s"/>
63 <arg name="auxdown" type="s"/>
64 <arg name="preedit" type="s"/>
65 <arg name="candidateword" type="s"/>
66 <arg name="imname" type="s"/>
67 <arg name="cursorpos" type="i"/>
68 </signal>
69 <signal name="ForwardKey">
70 <arg name="keyval" type="u"/>
71 <arg name="state" type="u"/>
72 <arg name="type" type="i"/>
73 </signal>
74 <signal name="DeleteSurroundingText">
75 <arg name="offset" type="i"/>
76 <arg name="nchar" type="u"/>
77 </signal>
78 </interface>
79 </node>
+0
-76
fcitx-qt5/interfaces/org.fcitx.Fcitx.InputMethod.xml less more
0 <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
1 "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
2 <node>
3 <interface name="org.fcitx.Fcitx.InputMethod">
4 <method name="CreateIC">
5 <arg name="icid" direction="out" type="i"/>
6 <arg name="keyval1" direction="out" type="u"/>
7 <arg name="state1" direction="out" type="u"/>
8 <arg name="keyval2" direction="out" type="u"/>
9 <arg name="state2" direction="out" type="u"/>
10 </method>
11 <method name="CreateICv2">
12 <arg name="appname" direction="in" type="s"/>
13 <arg name="icid" direction="out" type="i"/>
14 <arg name="enable" direction="out" type="b"/>
15 <arg name="keyval1" direction="out" type="u"/>
16 <arg name="state1" direction="out" type="u"/>
17 <arg name="keyval2" direction="out" type="u"/>
18 <arg name="state2" direction="out" type="u"/>
19 </method>
20 <method name="CreateICv3">
21 <arg name="appname" direction="in" type="s"/>
22 <arg name="pid" direction="in" type="i"/>
23 <arg name="icid" direction="out" type="i"/>
24 <arg name="enable" direction="out" type="b"/>
25 <arg name="keyval1" direction="out" type="u"/>
26 <arg name="state1" direction="out" type="u"/>
27 <arg name="keyval2" direction="out" type="u"/>
28 <arg name="state2" direction="out" type="u"/>
29 </method>
30 <method name="Exit">
31 </method>
32 <method name="GetCurrentIM">
33 <arg name="im" direction="out" type="s"/>
34 </method>
35 <method name="SetCurrentIM">
36 <arg name="im" direction="in" type="s"/>
37 </method>
38 <method name="ReloadConfig">
39 </method>
40 <method name="ReloadAddonConfig">
41 <arg name="addon" direction="in" type="s"/>
42 </method>
43 <method name="Restart">
44 </method>
45 <method name="Configure">
46 </method>
47 <method name="ConfigureAddon">
48 <arg name="addon" direction="in" type="s"/>
49 </method>
50 <method name="ConfigureIM">
51 <arg name="im" direction="in" type="s"/>
52 </method>
53 <method name="GetCurrentUI">
54 <arg name="addon" direction="out" type="s"/>
55 </method>
56 <method name="GetIMAddon">
57 <arg name="im" direction="in" type="s"/>
58 <arg name="addon" direction="out" type="s"/>
59 </method>
60 <method name="ActivateIM">
61 </method>
62 <method name="InactivateIM">
63 </method>
64 <method name="ToggleIM">
65 </method>
66 <method name="GetCurrentState">
67 <arg name="state" direction="out" type="i"/>
68 </method>
69 <property access="readwrite" type="a(sssb)" name="IMList">
70 <annotation name="org.freedesktop.DBus.Property.EmitsChangedSignal" value="true"/>
71 <annotation name="com.trolltech.QtDBus.QtTypeName" value="FcitxQtInputMethodItemList" />
72 <annotation name="org.qtproject.QtDBus.QtTypeName" value="FcitxQtInputMethodItemList" />
73 </property>
74 </interface>
75 </node>
+0
-20
fcitx-qt5/interfaces/org.fcitx.Fcitx.Keyboard.xml less more
0 <!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN" "http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
1 <node>
2 <interface name="org.fcitx.Fcitx.Keyboard">
3 <method name="GetLayouts">
4 <arg name="layouts" direction="out" type="a(ssss)"/>
5 <annotation name="com.trolltech.QtDBus.QtTypeName.Out0" value="FcitxQtKeyboardLayoutList" />
6 <annotation name="org.qtproject.QtDBus.QtTypeName.Out0" value="FcitxQtKeyboardLayoutList" />
7 </method>
8 <method name="GetLayoutForIM">
9 <arg name="im" direction="in" type="s"/>
10 <arg name="layout" direction="out" type="s"/>
11 <arg name="variant" direction="out" type="s"/>
12 </method>
13 <method name="SetLayoutForIM">
14 <arg name="im" direction="in" type="s"/>
15 <arg name="layout" direction="in" type="s"/>
16 <arg name="variant" direction="in" type="s"/>
17 </method>
18 </interface>
19 </node>
0 include_directories(${Qt5Gui_PRIVATE_INCLUDE_DIRS})
1
2
3 set(plugin_SRCS
4 qfcitxplatforminputcontext.cpp
5 keyuni.cpp
6 main.cpp
7 utils.cpp
8 )
9
10 set(plugin_MOC_HDRS
11 qfcitxplatforminputcontext.h
12 main.h
13 )
14
15 add_library(fcitxplatforminputcontextplugin MODULE ${plugin_SRCS})
16 set_target_properties(fcitxplatforminputcontextplugin PROPERTIES
17 AUTOMOC TRUE
18 COMPILE_FLAGS "-fvisibility=hidden"
19 LINK_FLAGS "-Wl,--no-undefined"
20 )
21
22 target_link_libraries(fcitxplatforminputcontextplugin
23 Qt5::Core
24 Qt5::Gui
25 Qt5::DBus
26 FcitxQt5::DBusAddons
27 )
28
29 include(ECMQueryQmake)
30 query_qmake(CMAKE_INSTALL_QTPLUGINDIR QT_INSTALL_PLUGINS)
31 install(TARGETS fcitxplatforminputcontextplugin DESTINATION ${CMAKE_INSTALL_QTPLUGINDIR}/platforminputcontexts)
0 /***************************************************************************
1 * Copyright (C) 2012~2012 by CSSlayer *
2 * wengxt@gmail.com *
3 * *
4 * This program is free software; you can redistribute it and/or modify *
5 * it under the terms of the GNU General Public License as published by *
6 * the Free Software Foundation; either version 2 of the License, or *
7 * (at your option) any later version. *
8 * *
9 * This program is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 * GNU General Public License for more details. *
13 * *
14 * You should have received a copy of the GNU General Public License *
15 * along with this program; if not, write to the *
16 * Free Software Foundation, Inc., *
17 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
18 ***************************************************************************/
19
20 #ifndef __FcitxKey_COMPOSE_DATA_H_
21 #define __FcitxKey_COMPOSE_DATA_H_
22
23 #ifndef XK_TECHNICAL
24 #define XK_TECHNICAL
25 #endif
26
27 #ifndef XK_APL
28 #define XK_APL
29 #endif
30
31 #include <X11/keysym.h>
32
33 static const quint32 fcitx_compose_seqs_compact[] = {
34 XK_dead_stroke, 138, 226, 235, 235, 235,
35 XK_Greek_accentdieresis, 235, 239, 239, 239, 239,
36 XK_dead_grave, 239, 299, 386, 598, 598,
37 XK_dead_acute, 598, 664, 760, 1036, 1036,
38 XK_dead_circumflex, 1036, 1176, 1176, 1376, 1376,
39 XK_dead_tilde, 1376, 1458, 1521, 1661, 1661,
40 XK_dead_macron, 1661, 1707, 1707, 1779, 1779,
41 XK_dead_breve, 1779, 1833, 1833, 1857, 1857,
42 XK_dead_abovedot, 1857, 1887, 1890, 1922, 1922,
43 XK_dead_diaeresis, 1922, 2010, 2019, 2043, 2043,
44 XK_dead_abovering, 2043, 2053, 2053, 2053, 2053,
45 XK_dead_doubleacute, 2053, 2063, 2063, 2063, 2063,
46 XK_dead_caron, 2063, 2089, 2089, 2097, 2097,
47 XK_dead_cedilla, 2097, 2111, 2111, 2111, 2111,
48 XK_dead_ogonek, 2111, 2121, 2121, 2121, 2121,
49 XK_dead_iota, 2121, 2143, 2242, 2674, 3334,
50 XK_dead_voiced_sound, 3334, 3380, 3380, 3380, 3380,
51 XK_dead_semivoiced_sound, 3380, 3390, 3390, 3390, 3390,
52 XK_dead_belowdot, 3390, 3400, 3400, 3416, 3416,
53 XK_dead_hook, 3416, 3494, 3494, 3550, 3550,
54 XK_dead_psili, 3550, 3578, 3578, 3578, 3578,
55 XK_dead_dasia, 3578, 3610, 3610, 3610, 3610,
56 XK_Multi_key, 3610, 3610, 9589, 13297, 15157,
57 XK_space, 0x002F,
58 XK_2, 0x01BB,
59 XK_A, 0x023A,
60 XK_B, 0x0243,
61 XK_C, 0x023B,
62 XK_D, 0x0110,
63 XK_E, 0x0246,
64 XK_G, 0x01E4,
65 XK_H, 0x0126,
66 XK_I, 0x0197,
67 XK_J, 0x0248,
68 XK_L, 0x0141,
69 XK_O, 0x00D8,
70 XK_P, 0x2C63,
71 XK_R, 0x024C,
72 XK_T, 0x0166,
73 XK_U, 0x0244,
74 XK_Y, 0x024E,
75 XK_Z, 0x01B5,
76 XK_a, 0x2C65,
77 XK_b, 0x0180,
78 XK_c, 0x023C,
79 XK_d, 0x0111,
80 XK_e, 0x0247,
81 XK_g, 0x01E5,
82 XK_h, 0x0127,
83 XK_i, 0x0268,
84 XK_j, 0x0249,
85 XK_l, 0x0142,
86 XK_o, 0x00F8,
87 XK_p, 0x1D7D,
88 XK_r, 0x024D,
89 XK_t, 0x0167,
90 XK_u, 0x0289,
91 XK_y, 0x024F,
92 XK_z, 0x01B6,
93 XK_nobreakspace, 0x0338,
94 XK_Oacute, 0x01FE,
95 XK_oacute, 0x01FF,
96 0x0237, 0x025F,
97 0x0269, 0x1D7C,
98 XK_dead_stroke, 0x002F,
99 XK_lessthanequal, 0x2270,
100 XK_greaterthanequal, 0x2271,
101 XK_dead_acute, XK_O, 0x01FE,
102 XK_dead_acute, XK_o, 0x01FF,
103 XK_dead_abovedot, XK_j, 0x025F,
104 XK_Greek_iota, 0x0390,
105 XK_Greek_upsilon, 0x03B0,
106 XK_space, 0x0060,
107 XK_V, 0x01DB,
108 XK_v, 0x01DC,
109 XK_Abreve, 0x1EB0,
110 XK_abreve, 0x1EB1,
111 XK_Emacron, 0x1E14,
112 XK_emacron, 0x1E15,
113 XK_Omacron, 0x1E50,
114 XK_omacron, 0x1E51,
115 XK_Cyrillic_ie, 0x0450,
116 XK_Cyrillic_i, 0x045D,
117 XK_Cyrillic_IE, 0x0400,
118 XK_Cyrillic_I, 0x040D,
119 XK_Greek_iotadieresis, 0x1FD2,
120 XK_Greek_upsilondieresis, 0x1FE2,
121 XK_Greek_ALPHA, 0x1FBA,
122 XK_Greek_EPSILON, 0x1FC8,
123 XK_Greek_ETA, 0x1FCA,
124 XK_Greek_IOTA, 0x1FDA,
125 XK_Greek_OMICRON, 0x1FF8,
126 XK_Greek_UPSILON, 0x1FEA,
127 XK_Greek_OMEGA, 0x1FFA,
128 XK_Greek_alpha, 0x1F70,
129 XK_Greek_epsilon, 0x1F72,
130 XK_Greek_eta, 0x1F74,
131 XK_Greek_iota, 0x1F76,
132 XK_Greek_omicron, 0x1F78,
133 XK_Greek_upsilon, 0x1F7A,
134 XK_Greek_omega, 0x1F7C,
135 XK_dead_grave, 0x0060,
136 XK_dead_diaeresis, XK_Greek_iota, 0x1FD2,
137 XK_dead_diaeresis, XK_Greek_upsilon, 0x1FE2,
138 XK_dead_psili, XK_Greek_ALPHA, 0x1F0A,
139 XK_dead_psili, XK_Greek_EPSILON, 0x1F1A,
140 XK_dead_psili, XK_Greek_ETA, 0x1F2A,
141 XK_dead_psili, XK_Greek_IOTA, 0x1F3A,
142 XK_dead_psili, XK_Greek_OMICRON, 0x1F4A,
143 XK_dead_psili, XK_Greek_OMEGA, 0x1F6A,
144 XK_dead_psili, XK_Greek_alpha, 0x1F02,
145 XK_dead_psili, XK_Greek_epsilon, 0x1F12,
146 XK_dead_psili, XK_Greek_eta, 0x1F22,
147 XK_dead_psili, XK_Greek_iota, 0x1F32,
148 XK_dead_psili, XK_Greek_omicron, 0x1F42,
149 XK_dead_psili, XK_Greek_upsilon, 0x1F52,
150 XK_dead_psili, XK_Greek_omega, 0x1F62,
151 XK_dead_dasia, XK_Greek_ALPHA, 0x1F0B,
152 XK_dead_dasia, XK_Greek_EPSILON, 0x1F1B,
153 XK_dead_dasia, XK_Greek_ETA, 0x1F2B,
154 XK_dead_dasia, XK_Greek_IOTA, 0x1F3B,
155 XK_dead_dasia, XK_Greek_OMICRON, 0x1F4B,
156 XK_dead_dasia, XK_Greek_UPSILON, 0x1F5B,
157 XK_dead_dasia, XK_Greek_OMEGA, 0x1F6B,
158 XK_dead_dasia, XK_Greek_alpha, 0x1F03,
159 XK_dead_dasia, XK_Greek_epsilon, 0x1F13,
160 XK_dead_dasia, XK_Greek_eta, 0x1F23,
161 XK_dead_dasia, XK_Greek_iota, 0x1F33,
162 XK_dead_dasia, XK_Greek_omicron, 0x1F43,
163 XK_dead_dasia, XK_Greek_upsilon, 0x1F53,
164 XK_dead_dasia, XK_Greek_omega, 0x1F63,
165 XK_Multi_key, XK_quotedbl, XK_U, 0x01DB,
166 XK_Multi_key, XK_quotedbl, XK_u, 0x01DC,
167 XK_Multi_key, XK_quotedbl, XK_Greek_iota, 0x1FD2,
168 XK_Multi_key, XK_quotedbl, XK_Greek_upsilon, 0x1FE2,
169 XK_Multi_key, XK_parenleft, XK_Greek_ALPHA, 0x1F0B,
170 XK_Multi_key, XK_parenleft, XK_Greek_EPSILON, 0x1F1B,
171 XK_Multi_key, XK_parenleft, XK_Greek_ETA, 0x1F2B,
172 XK_Multi_key, XK_parenleft, XK_Greek_IOTA, 0x1F3B,
173 XK_Multi_key, XK_parenleft, XK_Greek_OMICRON, 0x1F4B,
174 XK_Multi_key, XK_parenleft, XK_Greek_UPSILON, 0x1F5B,
175 XK_Multi_key, XK_parenleft, XK_Greek_OMEGA, 0x1F6B,
176 XK_Multi_key, XK_parenleft, XK_Greek_alpha, 0x1F03,
177 XK_Multi_key, XK_parenleft, XK_Greek_epsilon, 0x1F13,
178 XK_Multi_key, XK_parenleft, XK_Greek_eta, 0x1F23,
179 XK_Multi_key, XK_parenleft, XK_Greek_iota, 0x1F33,
180 XK_Multi_key, XK_parenleft, XK_Greek_omicron, 0x1F43,
181 XK_Multi_key, XK_parenleft, XK_Greek_upsilon, 0x1F53,
182 XK_Multi_key, XK_parenleft, XK_Greek_omega, 0x1F63,
183 XK_Multi_key, XK_parenright, XK_Greek_ALPHA, 0x1F0A,
184 XK_Multi_key, XK_parenright, XK_Greek_EPSILON, 0x1F1A,
185 XK_Multi_key, XK_parenright, XK_Greek_ETA, 0x1F2A,
186 XK_Multi_key, XK_parenright, XK_Greek_IOTA, 0x1F3A,
187 XK_Multi_key, XK_parenright, XK_Greek_OMICRON, 0x1F4A,
188 XK_Multi_key, XK_parenright, XK_Greek_OMEGA, 0x1F6A,
189 XK_Multi_key, XK_parenright, XK_Greek_alpha, 0x1F02,
190 XK_Multi_key, XK_parenright, XK_Greek_epsilon, 0x1F12,
191 XK_Multi_key, XK_parenright, XK_Greek_eta, 0x1F22,
192 XK_Multi_key, XK_parenright, XK_Greek_iota, 0x1F32,
193 XK_Multi_key, XK_parenright, XK_Greek_omicron, 0x1F42,
194 XK_Multi_key, XK_parenright, XK_Greek_upsilon, 0x1F52,
195 XK_Multi_key, XK_parenright, XK_Greek_omega, 0x1F62,
196 XK_Multi_key, XK_plus, XK_O, 0x1EDC,
197 XK_Multi_key, XK_plus, XK_U, 0x1EEA,
198 XK_Multi_key, XK_plus, XK_o, 0x1EDD,
199 XK_Multi_key, XK_plus, XK_u, 0x1EEB,
200 XK_Multi_key, XK_U, XK_A, 0x1EB0,
201 XK_Multi_key, XK_U, XK_a, 0x1EB1,
202 XK_Multi_key, XK_asciicircum, XK_A, 0x1EA6,
203 XK_Multi_key, XK_asciicircum, XK_E, 0x1EC0,
204 XK_Multi_key, XK_asciicircum, XK_O, 0x1ED2,
205 XK_Multi_key, XK_asciicircum, XK_a, 0x1EA7,
206 XK_Multi_key, XK_asciicircum, XK_e, 0x1EC1,
207 XK_Multi_key, XK_asciicircum, XK_o, 0x1ED3,
208 XK_Multi_key, XK_underscore, XK_E, 0x1E14,
209 XK_Multi_key, XK_underscore, XK_O, 0x1E50,
210 XK_Multi_key, XK_underscore, XK_e, 0x1E15,
211 XK_Multi_key, XK_underscore, XK_o, 0x1E51,
212 XK_Multi_key, XK_b, XK_A, 0x1EB0,
213 XK_Multi_key, XK_b, XK_a, 0x1EB1,
214 XK_Multi_key, XK_macron, XK_E, 0x1E14,
215 XK_Multi_key, XK_macron, XK_O, 0x1E50,
216 XK_Multi_key, XK_macron, XK_e, 0x1E15,
217 XK_Multi_key, XK_macron, XK_o, 0x1E51,
218 XK_space, 0x0027,
219 XK_V, 0x01D7,
220 XK_v, 0x01D8,
221 XK_Abreve, 0x1EAE,
222 XK_abreve, 0x1EAF,
223 XK_Emacron, 0x1E16,
224 XK_emacron, 0x1E17,
225 XK_Utilde, 0x1E78,
226 XK_omacron, 0x1E53,
227 XK_utilde, 0x1E79,
228 XK_Cyrillic_ghe, 0x0453,
229 XK_Cyrillic_ka, 0x045C,
230 XK_Cyrillic_GHE, 0x0403,
231 XK_Cyrillic_KA, 0x040C,
232 XK_Greek_iotadieresis, 0x0390,
233 XK_Greek_upsilondieresis, 0x03B0,
234 XK_Greek_ALPHA, 0x0386,
235 XK_Greek_EPSILON, 0x0388,
236 XK_Greek_ETA, 0x0389,
237 XK_Greek_IOTA, 0x038A,
238 XK_Greek_OMICRON, 0x038C,
239 XK_Greek_UPSILON, 0x038E,
240 XK_Greek_OMEGA, 0x038F,
241 XK_Greek_alpha, 0x03AC,
242 XK_Greek_epsilon, 0x03AD,
243 XK_Greek_eta, 0x03AE,
244 XK_Greek_iota, 0x03AF,
245 XK_Greek_omicron, 0x03CC,
246 XK_Greek_upsilon, 0x03CD,
247 XK_Greek_omega, 0x03CE,
248 XK_Sabovedot, 0x1E64,
249 XK_sabovedot, 0x1E65,
250 XK_dead_acute, 0x00B4,
251 XK_dead_stroke, XK_O, 0x01FE,
252 XK_dead_stroke, XK_o, 0x01FF,
253 XK_dead_diaeresis, XK_space, 0x0385,
254 XK_dead_diaeresis, XK_Greek_iota, 0x0390,
255 XK_dead_diaeresis, XK_Greek_upsilon, 0x03B0,
256 XK_dead_psili, XK_Greek_ALPHA, 0x1F0C,
257 XK_dead_psili, XK_Greek_EPSILON, 0x1F1C,
258 XK_dead_psili, XK_Greek_ETA, 0x1F2C,
259 XK_dead_psili, XK_Greek_IOTA, 0x1F3C,
260 XK_dead_psili, XK_Greek_OMICRON, 0x1F4C,
261 XK_dead_psili, XK_Greek_OMEGA, 0x1F6C,
262 XK_dead_psili, XK_Greek_alpha, 0x1F04,
263 XK_dead_psili, XK_Greek_epsilon, 0x1F14,
264 XK_dead_psili, XK_Greek_eta, 0x1F24,
265 XK_dead_psili, XK_Greek_iota, 0x1F34,
266 XK_dead_psili, XK_Greek_omicron, 0x1F44,
267 XK_dead_psili, XK_Greek_upsilon, 0x1F54,
268 XK_dead_psili, XK_Greek_omega, 0x1F64,
269 XK_dead_dasia, XK_Greek_ALPHA, 0x1F0D,
270 XK_dead_dasia, XK_Greek_EPSILON, 0x1F1D,
271 XK_dead_dasia, XK_Greek_ETA, 0x1F2D,
272 XK_dead_dasia, XK_Greek_IOTA, 0x1F3D,
273 XK_dead_dasia, XK_Greek_OMICRON, 0x1F4D,
274 XK_dead_dasia, XK_Greek_UPSILON, 0x1F5D,
275 XK_dead_dasia, XK_Greek_OMEGA, 0x1F6D,
276 XK_dead_dasia, XK_Greek_alpha, 0x1F05,
277 XK_dead_dasia, XK_Greek_epsilon, 0x1F15,
278 XK_dead_dasia, XK_Greek_eta, 0x1F25,
279 XK_dead_dasia, XK_Greek_iota, 0x1F35,
280 XK_dead_dasia, XK_Greek_omicron, 0x1F45,
281 XK_dead_dasia, XK_Greek_upsilon, 0x1F55,
282 XK_dead_dasia, XK_Greek_omega, 0x1F65,
283 XK_Multi_key, XK_quotedbl, XK_I, 0x1E2E,
284 XK_Multi_key, XK_quotedbl, XK_U, 0x01D7,
285 XK_Multi_key, XK_quotedbl, XK_i, 0x1E2F,
286 XK_Multi_key, XK_quotedbl, XK_u, 0x01D8,
287 XK_Multi_key, XK_quotedbl, XK_Greek_iota, 0x0390,
288 XK_Multi_key, XK_quotedbl, XK_Greek_upsilon, 0x03B0,
289 XK_Multi_key, XK_parenleft, XK_Greek_ALPHA, 0x1F0D,
290 XK_Multi_key, XK_parenleft, XK_Greek_EPSILON, 0x1F1D,
291 XK_Multi_key, XK_parenleft, XK_Greek_ETA, 0x1F2D,
292 XK_Multi_key, XK_parenleft, XK_Greek_IOTA, 0x1F3D,
293 XK_Multi_key, XK_parenleft, XK_Greek_OMICRON, 0x1F4D,
294 XK_Multi_key, XK_parenleft, XK_Greek_UPSILON, 0x1F5D,
295 XK_Multi_key, XK_parenleft, XK_Greek_OMEGA, 0x1F6D,
296 XK_Multi_key, XK_parenleft, XK_Greek_alpha, 0x1F05,
297 XK_Multi_key, XK_parenleft, XK_Greek_epsilon, 0x1F15,
298 XK_Multi_key, XK_parenleft, XK_Greek_eta, 0x1F25,
299 XK_Multi_key, XK_parenleft, XK_Greek_iota, 0x1F35,
300 XK_Multi_key, XK_parenleft, XK_Greek_omicron, 0x1F45,
301 XK_Multi_key, XK_parenleft, XK_Greek_upsilon, 0x1F55,
302 XK_Multi_key, XK_parenleft, XK_Greek_omega, 0x1F65,
303 XK_Multi_key, XK_parenright, XK_Greek_ALPHA, 0x1F0C,
304 XK_Multi_key, XK_parenright, XK_Greek_EPSILON, 0x1F1C,
305 XK_Multi_key, XK_parenright, XK_Greek_ETA, 0x1F2C,
306 XK_Multi_key, XK_parenright, XK_Greek_IOTA, 0x1F3C,
307 XK_Multi_key, XK_parenright, XK_Greek_OMICRON, 0x1F4C,
308 XK_Multi_key, XK_parenright, XK_Greek_OMEGA, 0x1F6C,
309 XK_Multi_key, XK_parenright, XK_Greek_alpha, 0x1F04,
310 XK_Multi_key, XK_parenright, XK_Greek_epsilon, 0x1F14,
311 XK_Multi_key, XK_parenright, XK_Greek_eta, 0x1F24,
312 XK_Multi_key, XK_parenright, XK_Greek_iota, 0x1F34,
313 XK_Multi_key, XK_parenright, XK_Greek_omicron, 0x1F44,
314 XK_Multi_key, XK_parenright, XK_Greek_upsilon, 0x1F54,
315 XK_Multi_key, XK_parenright, XK_Greek_omega, 0x1F64,
316 XK_Multi_key, XK_plus, XK_O, 0x1EDA,
317 XK_Multi_key, XK_plus, XK_U, 0x1EE8,
318 XK_Multi_key, XK_plus, XK_o, 0x1EDB,
319 XK_Multi_key, XK_plus, XK_u, 0x1EE9,
320 XK_Multi_key, XK_comma, XK_C, 0x1E08,
321 XK_Multi_key, XK_comma, XK_c, 0x1E09,
322 XK_Multi_key, XK_slash, XK_O, 0x01FE,
323 XK_Multi_key, XK_slash, XK_o, 0x01FF,
324 XK_Multi_key, XK_U, XK_A, 0x1EAE,
325 XK_Multi_key, XK_U, XK_a, 0x1EAF,
326 XK_Multi_key, XK_asciicircum, XK_A, 0x1EA4,
327 XK_Multi_key, XK_asciicircum, XK_E, 0x1EBE,
328 XK_Multi_key, XK_asciicircum, XK_O, 0x1ED0,
329 XK_Multi_key, XK_asciicircum, XK_a, 0x1EA5,
330 XK_Multi_key, XK_asciicircum, XK_e, 0x1EBF,
331 XK_Multi_key, XK_asciicircum, XK_o, 0x1ED1,
332 XK_Multi_key, XK_underscore, XK_E, 0x1E16,
333 XK_Multi_key, XK_underscore, XK_O, 0x1E52,
334 XK_Multi_key, XK_underscore, XK_e, 0x1E17,
335 XK_Multi_key, XK_underscore, XK_o, 0x1E53,
336 XK_Multi_key, XK_b, XK_A, 0x1EAE,
337 XK_Multi_key, XK_b, XK_a, 0x1EAF,
338 XK_Multi_key, XK_o, XK_A, 0x01FA,
339 XK_Multi_key, XK_o, XK_a, 0x01FB,
340 XK_Multi_key, XK_asciitilde, XK_O, 0x1E4C,
341 XK_Multi_key, XK_asciitilde, XK_U, 0x1E78,
342 XK_Multi_key, XK_asciitilde, XK_o, 0x1E4D,
343 XK_Multi_key, XK_asciitilde, XK_u, 0x1E79,
344 XK_Multi_key, XK_macron, XK_E, 0x1E16,
345 XK_Multi_key, XK_macron, XK_O, 0x1E52,
346 XK_Multi_key, XK_macron, XK_e, 0x1E17,
347 XK_Multi_key, XK_macron, XK_o, 0x1E53,
348 XK_Multi_key, XK_cedilla, XK_C, 0x1E08,
349 XK_Multi_key, XK_cedilla, XK_c, 0x1E09,
350 XK_Multi_key, XK_KP_Divide, XK_O, 0x01FE,
351 XK_Multi_key, XK_KP_Divide, XK_o, 0x01FF,
352 XK_space, 0x005E,
353 XK_parenleft, 0x207D,
354 XK_parenright, 0x207E,
355 XK_plus, 0x207A,
356 XK_minus, 0x207B,
357 XK_0, 0x2070,
358 XK_1, 0x00B9,
359 XK_2, 0x00B2,
360 XK_3, 0x00B3,
361 XK_4, 0x2074,
362 XK_5, 0x2075,
363 XK_6, 0x2076,
364 XK_7, 0x2077,
365 XK_8, 0x2078,
366 XK_9, 0x2079,
367 XK_equal, 0x207C,
368 XK_nobreakspace, 0x0302,
369 XK_Agrave, 0x1EA6,
370 XK_Aacute, 0x1EA4,
371 XK_Atilde, 0x1EAA,
372 XK_Egrave, 0x1EC0,
373 XK_Eacute, 0x1EBE,
374 XK_Ograve, 0x1ED2,
375 XK_Oacute, 0x1ED0,
376 XK_Otilde, 0x1ED6,
377 XK_agrave, 0x1EA7,
378 XK_aacute, 0x1EA5,
379 XK_atilde, 0x1EAB,
380 XK_egrave, 0x1EC1,
381 XK_eacute, 0x1EBF,
382 XK_ograve, 0x1ED3,
383 XK_oacute, 0x1ED1,
384 XK_otilde, 0x1ED7,
385 XK_Ahook, 0x1EA8,
386 XK_ahook, 0x1EA9,
387 XK_Ehook, 0x1EC2,
388 XK_ehook, 0x1EC3,
389 XK_Etilde, 0x1EC4,
390 XK_etilde, 0x1EC5,
391 XK_Ohook, 0x1ED4,
392 XK_ohook, 0x1ED5,
393 0x2212, 0x207B,
394 0x4E00, 0x3192,
395 0x4E01, 0x319C,
396 0x4E09, 0x3194,
397 0x4E0A, 0x3196,
398 0x4E0B, 0x3198,
399 0x4E19, 0x319B,
400 0x4E2D, 0x3197,
401 0x4E59, 0x319A,
402 0x4E8C, 0x3193,
403 0x4EBA, 0x319F,
404 0x56DB, 0x3195,
405 0x5730, 0x319E,
406 0x5929, 0x319D,
407 0x7532, 0x3199,
408 XK_dead_circumflex, 0x005E,
409 XK_KP_Space, 0x00B2,
410 XK_KP_Add, 0x207A,
411 XK_KP_0, 0x2070,
412 XK_KP_1, 0x00B9,
413 XK_KP_2, 0x00B2,
414 XK_KP_3, 0x00B3,
415 XK_KP_4, 0x2074,
416 XK_KP_5, 0x2075,
417 XK_KP_6, 0x2076,
418 XK_KP_7, 0x2077,
419 XK_KP_8, 0x2078,
420 XK_KP_9, 0x2079,
421 XK_KP_Equal, 0x207C,
422 XK_Multi_key, XK_exclam, XK_A, 0x1EAC,
423 XK_Multi_key, XK_exclam, XK_E, 0x1EC6,
424 XK_Multi_key, XK_exclam, XK_O, 0x1ED8,
425 XK_Multi_key, XK_exclam, XK_a, 0x1EAD,
426 XK_Multi_key, XK_exclam, XK_e, 0x1EC7,
427 XK_Multi_key, XK_exclam, XK_o, 0x1ED9,
428 XK_Multi_key, XK_S, XK_M, 0x2120,
429 XK_Multi_key, XK_S, XK_m, 0x2120,
430 XK_Multi_key, XK_T, XK_M, 0x2122,
431 XK_Multi_key, XK_T, XK_m, 0x2122,
432 XK_Multi_key, XK_underscore, XK_a, 0x00AA,
433 XK_Multi_key, XK_underscore, XK_h, 0x02B0,
434 XK_Multi_key, XK_underscore, XK_i, 0x2071,
435 XK_Multi_key, XK_underscore, XK_j, 0x02B2,
436 XK_Multi_key, XK_underscore, XK_l, 0x02E1,
437 XK_Multi_key, XK_underscore, XK_n, 0x207F,
438 XK_Multi_key, XK_underscore, XK_o, 0x00BA,
439 XK_Multi_key, XK_underscore, XK_r, 0x02B3,
440 XK_Multi_key, XK_underscore, XK_s, 0x02E2,
441 XK_Multi_key, XK_underscore, XK_w, 0x02B7,
442 XK_Multi_key, XK_underscore, XK_x, 0x02E3,
443 XK_Multi_key, XK_underscore, XK_y, 0x02B8,
444 XK_Multi_key, XK_underscore, 0x0263, 0x02E0,
445 XK_Multi_key, XK_underscore, 0x0266, 0x02B1,
446 XK_Multi_key, XK_underscore, 0x0279, 0x02B4,
447 XK_Multi_key, XK_underscore, 0x027B, 0x02B5,
448 XK_Multi_key, XK_underscore, 0x0281, 0x02B6,
449 XK_Multi_key, XK_underscore, 0x0295, 0x02E4,
450 XK_Multi_key, XK_s, XK_M, 0x2120,
451 XK_Multi_key, XK_s, XK_m, 0x2120,
452 XK_Multi_key, XK_t, XK_M, 0x2122,
453 XK_Multi_key, XK_t, XK_m, 0x2122,
454 XK_Multi_key, XK_underbar, XK_a, 0x00AA,
455 XK_Multi_key, XK_underbar, XK_h, 0x02B0,
456 XK_Multi_key, XK_underbar, XK_i, 0x2071,
457 XK_Multi_key, XK_underbar, XK_j, 0x02B2,
458 XK_Multi_key, XK_underbar, XK_l, 0x02E1,
459 XK_Multi_key, XK_underbar, XK_n, 0x207F,
460 XK_Multi_key, XK_underbar, XK_o, 0x00BA,
461 XK_Multi_key, XK_underbar, XK_r, 0x02B3,
462 XK_Multi_key, XK_underbar, XK_s, 0x02E2,
463 XK_Multi_key, XK_underbar, XK_w, 0x02B7,
464 XK_Multi_key, XK_underbar, XK_x, 0x02E3,
465 XK_Multi_key, XK_underbar, XK_y, 0x02B8,
466 XK_Multi_key, XK_underbar, 0x0263, 0x02E0,
467 XK_Multi_key, XK_underbar, 0x0266, 0x02B1,
468 XK_Multi_key, XK_underbar, 0x0279, 0x02B4,
469 XK_Multi_key, XK_underbar, 0x027B, 0x02B5,
470 XK_Multi_key, XK_underbar, 0x0281, 0x02B6,
471 XK_Multi_key, XK_underbar, 0x0295, 0x02E4,
472 XK_space, 0x007E,
473 XK_less, 0x2272,
474 XK_equal, 0x2243,
475 XK_greater, 0x2273,
476 XK_Oacute, 0x1E4C,
477 XK_Odiaeresis, 0x1E4E,
478 XK_Uacute, 0x1E78,
479 XK_oacute, 0x1E4D,
480 XK_odiaeresis, 0x1E4F,
481 XK_uacute, 0x1E79,
482 XK_Abreve, 0x1EB4,
483 XK_abreve, 0x1EB5,
484 XK_Omacron, 0x022C,
485 XK_omacron, 0x022D,
486 XK_Greek_iotadieresis, 0x1FD7,
487 XK_Greek_upsilondieresis, 0x1FE7,
488 XK_Greek_alpha, 0x1FB6,
489 XK_Greek_eta, 0x1FC6,
490 XK_Greek_iota, 0x1FD6,
491 XK_Greek_upsilon, 0x1FE6,
492 XK_Greek_omega, 0x1FF6,
493 0x1F00, 0x1F06,
494 0x1F01, 0x1F07,
495 0x1F08, 0x1F0E,
496 0x1F09, 0x1F0F,
497 0x1F20, 0x1F26,
498 0x1F21, 0x1F27,
499 0x1F28, 0x1F2E,
500 0x1F29, 0x1F2F,
501 0x1F30, 0x1F36,
502 0x1F31, 0x1F37,
503 0x1F38, 0x1F3E,
504 0x1F39, 0x1F3F,
505 0x1F50, 0x1F56,
506 0x1F51, 0x1F57,
507 0x1F59, 0x1F5F,
508 0x1F60, 0x1F66,
509 0x1F61, 0x1F67,
510 0x1F68, 0x1F6E,
511 0x1F69, 0x1F6F,
512 XK_dead_tilde, 0x007E,
513 XK_dead_diaeresis, XK_Greek_iota, 0x1FD7,
514 XK_dead_diaeresis, XK_Greek_upsilon, 0x1FE7,
515 XK_dead_psili, XK_Greek_ALPHA, 0x1F0E,
516 XK_dead_psili, XK_Greek_ETA, 0x1F2E,
517 XK_dead_psili, XK_Greek_IOTA, 0x1F3E,
518 XK_dead_psili, XK_Greek_OMEGA, 0x1F6E,
519 XK_dead_psili, XK_Greek_alpha, 0x1F06,
520 XK_dead_psili, XK_Greek_eta, 0x1F26,
521 XK_dead_psili, XK_Greek_iota, 0x1F36,
522 XK_dead_psili, XK_Greek_upsilon, 0x1F56,
523 XK_dead_psili, XK_Greek_omega, 0x1F66,
524 XK_dead_dasia, XK_Greek_ALPHA, 0x1F0F,
525 XK_dead_dasia, XK_Greek_ETA, 0x1F2F,
526 XK_dead_dasia, XK_Greek_IOTA, 0x1F3F,
527 XK_dead_dasia, XK_Greek_UPSILON, 0x1F5F,
528 XK_dead_dasia, XK_Greek_OMEGA, 0x1F6F,
529 XK_dead_dasia, XK_Greek_alpha, 0x1F07,
530 XK_dead_dasia, XK_Greek_eta, 0x1F27,
531 XK_dead_dasia, XK_Greek_iota, 0x1F37,
532 XK_dead_dasia, XK_Greek_upsilon, 0x1F57,
533 XK_dead_dasia, XK_Greek_omega, 0x1F67,
534 XK_Multi_key, XK_quotedbl, XK_Greek_iota, 0x1FD7,
535 XK_Multi_key, XK_quotedbl, XK_Greek_upsilon, 0x1FE7,
536 XK_Multi_key, XK_parenleft, XK_Greek_ALPHA, 0x1F0F,
537 XK_Multi_key, XK_parenleft, XK_Greek_ETA, 0x1F2F,
538 XK_Multi_key, XK_parenleft, XK_Greek_IOTA, 0x1F3F,
539 XK_Multi_key, XK_parenleft, XK_Greek_UPSILON, 0x1F5F,
540 XK_Multi_key, XK_parenleft, XK_Greek_OMEGA, 0x1F6F,
541 XK_Multi_key, XK_parenleft, XK_Greek_alpha, 0x1F07,
542 XK_Multi_key, XK_parenleft, XK_Greek_eta, 0x1F27,
543 XK_Multi_key, XK_parenleft, XK_Greek_iota, 0x1F37,
544 XK_Multi_key, XK_parenleft, XK_Greek_upsilon, 0x1F57,
545 XK_Multi_key, XK_parenleft, XK_Greek_omega, 0x1F67,
546 XK_Multi_key, XK_parenright, XK_Greek_ALPHA, 0x1F0E,
547 XK_Multi_key, XK_parenright, XK_Greek_ETA, 0x1F2E,
548 XK_Multi_key, XK_parenright, XK_Greek_IOTA, 0x1F3E,
549 XK_Multi_key, XK_parenright, XK_Greek_OMEGA, 0x1F6E,
550 XK_Multi_key, XK_parenright, XK_Greek_alpha, 0x1F06,
551 XK_Multi_key, XK_parenright, XK_Greek_eta, 0x1F26,
552 XK_Multi_key, XK_parenright, XK_Greek_iota, 0x1F36,
553 XK_Multi_key, XK_parenright, XK_Greek_upsilon, 0x1F56,
554 XK_Multi_key, XK_parenright, XK_Greek_omega, 0x1F66,
555 XK_Multi_key, XK_plus, XK_O, 0x1EE0,
556 XK_Multi_key, XK_plus, XK_U, 0x1EEE,
557 XK_Multi_key, XK_plus, XK_o, 0x1EE1,
558 XK_Multi_key, XK_plus, XK_u, 0x1EEF,
559 XK_Multi_key, XK_U, XK_A, 0x1EB4,
560 XK_Multi_key, XK_U, XK_a, 0x1EB5,
561 XK_Multi_key, XK_asciicircum, XK_A, 0x1EAA,
562 XK_Multi_key, XK_asciicircum, XK_E, 0x1EC4,
563 XK_Multi_key, XK_asciicircum, XK_O, 0x1ED6,
564 XK_Multi_key, XK_asciicircum, XK_a, 0x1EAB,
565 XK_Multi_key, XK_asciicircum, XK_e, 0x1EC5,
566 XK_Multi_key, XK_asciicircum, XK_o, 0x1ED7,
567 XK_Multi_key, XK_b, XK_A, 0x1EB4,
568 XK_Multi_key, XK_b, XK_a, 0x1EB5,
569 XK_space, 0x00AF,
570 XK_V, 0x01D5,
571 XK_v, 0x01D6,
572 XK_nobreakspace, 0x0304,
573 XK_Egrave, 0x1E14,
574 XK_Eacute, 0x1E16,
575 XK_Ograve, 0x1E50,
576 XK_Oacute, 0x1E52,
577 XK_egrave, 0x1E15,
578 XK_eacute, 0x1E17,
579 XK_ograve, 0x1E51,
580 XK_oacute, 0x1E53,
581 XK_Cyrillic_i, 0x04E3,
582 XK_Cyrillic_u, 0x04EF,
583 XK_Cyrillic_I, 0x04E2,
584 XK_Cyrillic_U, 0x04EE,
585 XK_Greek_ALPHA, 0x1FB9,
586 XK_Greek_IOTA, 0x1FD9,
587 XK_Greek_UPSILON, 0x1FE9,
588 XK_Greek_alpha, 0x1FB1,
589 XK_Greek_iota, 0x1FD1,
590 XK_Greek_upsilon, 0x1FE1,
591 XK_dead_macron, 0x00AF,
592 XK_Multi_key, XK_exclam, XK_L, 0x1E38,
593 XK_Multi_key, XK_exclam, XK_R, 0x1E5C,
594 XK_Multi_key, XK_exclam, XK_l, 0x1E39,
595 XK_Multi_key, XK_exclam, XK_r, 0x1E5D,
596 XK_Multi_key, XK_quotedbl, XK_A, 0x01DE,
597 XK_Multi_key, XK_quotedbl, XK_O, 0x022A,
598 XK_Multi_key, XK_quotedbl, XK_U, 0x01D5,
599 XK_Multi_key, XK_quotedbl, XK_a, 0x01DF,
600 XK_Multi_key, XK_quotedbl, XK_o, 0x022B,
601 XK_Multi_key, XK_quotedbl, XK_u, 0x01D6,
602 XK_Multi_key, XK_period, XK_A, 0x01E0,
603 XK_Multi_key, XK_period, XK_O, 0x0230,
604 XK_Multi_key, XK_period, XK_a, 0x01E1,
605 XK_Multi_key, XK_period, XK_o, 0x0231,
606 XK_Multi_key, XK_semicolon, XK_O, 0x01EC,
607 XK_Multi_key, XK_semicolon, XK_o, 0x01ED,
608 XK_Multi_key, XK_asciitilde, XK_O, 0x022C,
609 XK_Multi_key, XK_asciitilde, XK_o, 0x022D,
610 XK_space, 0x02D8,
611 XK_nobreakspace, 0x0306,
612 XK_Agrave, 0x1EB0,
613 XK_Aacute, 0x1EAE,
614 XK_Atilde, 0x1EB4,
615 XK_agrave, 0x1EB1,
616 XK_aacute, 0x1EAF,
617 XK_atilde, 0x1EB5,
618 XK_Cyrillic_a, 0x04D1,
619 XK_Cyrillic_ie, 0x04D7,
620 XK_Cyrillic_i, 0x0439,
621 XK_Cyrillic_u, 0x045E,
622 XK_Cyrillic_zhe, 0x04C2,
623 XK_Cyrillic_A, 0x04D0,
624 XK_Cyrillic_IE, 0x04D6,
625 XK_Cyrillic_I, 0x0419,
626 XK_Cyrillic_U, 0x040E,
627 XK_Cyrillic_ZHE, 0x04C1,
628 XK_Greek_ALPHA, 0x1FB8,
629 XK_Greek_IOTA, 0x1FD8,
630 XK_Greek_UPSILON, 0x1FE8,
631 XK_Greek_alpha, 0x1FB0,
632 XK_Greek_iota, 0x1FD0,
633 XK_Greek_upsilon, 0x1FE0,
634 XK_Ahook, 0x1EB2,
635 XK_ahook, 0x1EB3,
636 XK_dead_breve, 0x02D8,
637 XK_Multi_key, XK_exclam, XK_A, 0x1EB6,
638 XK_Multi_key, XK_exclam, XK_a, 0x1EB7,
639 XK_Multi_key, XK_comma, XK_E, 0x1E1C,
640 XK_Multi_key, XK_comma, XK_e, 0x1E1D,
641 XK_Multi_key, XK_cedilla, XK_E, 0x1E1C,
642 XK_Multi_key, XK_cedilla, XK_e, 0x1E1D,
643 XK_space, 0x02D9,
644 XK_L, 0x013F,
645 XK_i, 0x0131,
646 XK_j, 0x0237,
647 XK_l, 0x0140,
648 XK_nobreakspace, 0x0307,
649 XK_Sacute, 0x1E64,
650 XK_Scaron, 0x1E66,
651 XK_sacute, 0x1E65,
652 XK_scaron, 0x1E67,
653 XK_Amacron, 0x01E0,
654 XK_Omacron, 0x0230,
655 XK_amacron, 0x01E1,
656 XK_omacron, 0x0231,
657 XK_dead_abovedot, 0x02D9,
658 XK_dead_stroke, XK_j, 0x025F,
659 XK_Multi_key, XK_exclam, XK_S, 0x1E68,
660 XK_Multi_key, XK_exclam, XK_s, 0x1E69,
661 XK_Multi_key, XK_apostrophe, XK_S, 0x1E64,
662 XK_Multi_key, XK_apostrophe, XK_s, 0x1E65,
663 XK_Multi_key, XK_c, XK_S, 0x1E66,
664 XK_Multi_key, XK_c, XK_s, 0x1E67,
665 XK_Multi_key, XK_acute, XK_S, 0x1E64,
666 XK_Multi_key, XK_acute, XK_s, 0x1E65,
667 XK_space, 0x0022,
668 XK_apostrophe, 0x0344,
669 XK_nobreakspace, 0x0308,
670 XK_acute, 0x0344,
671 XK_Iacute, 0x1E2E,
672 XK_Ugrave, 0x01DB,
673 XK_Uacute, 0x01D7,
674 XK_iacute, 0x1E2F,
675 XK_ugrave, 0x01DC,
676 XK_uacute, 0x01D8,
677 0x01D3, 0x01D9,
678 0x01D4, 0x01DA,
679 XK_Amacron, 0x01DE,
680 XK_Umacron, 0x1E7A,
681 XK_amacron, 0x01DF,
682 XK_omacron, 0x022B,
683 XK_umacron, 0x1E7B,
684 XK_Ukrainian_i, 0x0457,
685 XK_Ukrainian_I, 0x0407,
686 XK_Cyrillic_a, 0x04D3,
687 XK_Cyrillic_ie, 0x0451,
688 XK_Cyrillic_i, 0x04E5,
689 XK_Cyrillic_o, 0x04E7,
690 XK_Cyrillic_u, 0x04F1,
691 XK_Cyrillic_zhe, 0x04DD,
692 XK_Cyrillic_yeru, 0x04F9,
693 XK_Cyrillic_ze, 0x04DF,
694 XK_Cyrillic_e, 0x04ED,
695 XK_Cyrillic_che, 0x04F5,
696 XK_Cyrillic_A, 0x04D2,
697 XK_Cyrillic_IE, 0x0401,
698 XK_Cyrillic_I, 0x04E4,
699 XK_Cyrillic_O, 0x04E6,
700 XK_Cyrillic_U, 0x04F0,
701 XK_Cyrillic_ZHE, 0x04DC,
702 XK_Cyrillic_YERU, 0x04F8,
703 XK_Cyrillic_ZE, 0x04DE,
704 XK_Cyrillic_E, 0x04EC,
705 XK_Cyrillic_CHE, 0x04F4,
706 XK_Greek_IOTA, 0x03AA,
707 XK_Greek_UPSILON, 0x03AB,
708 XK_Greek_iota, 0x03CA,
709 XK_Greek_upsilon, 0x03CB,
710 XK_dead_diaeresis, 0x00A8,
711 XK_dead_acute, XK_space, 0x0385,
712 XK_dead_acute, XK_Greek_iota, 0x0390,
713 XK_dead_acute, XK_Greek_upsilon, 0x03B0,
714 XK_Multi_key, XK_underscore, XK_U, 0x1E7A,
715 XK_Multi_key, XK_underscore, XK_u, 0x1E7B,
716 XK_Multi_key, XK_asciitilde, XK_O, 0x1E4E,
717 XK_Multi_key, XK_asciitilde, XK_o, 0x1E4F,
718 XK_Multi_key, XK_macron, XK_U, 0x1E7A,
719 XK_Multi_key, XK_macron, XK_u, 0x1E7B,
720 XK_space, 0x00B0,
721 XK_nobreakspace, 0x030A,
722 XK_Aacute, 0x01FA,
723 XK_aacute, 0x01FB,
724 XK_dead_abovering, 0x00B0,
725 XK_space, 0x02DD,
726 XK_nobreakspace, 0x030B,
727 XK_Cyrillic_u, 0x04F3,
728 XK_Cyrillic_U, 0x04F2,
729 XK_dead_doubleacute, 0x02DD,
730 XK_space, 0x02C7,
731 XK_parenleft, 0x208D,
732 XK_parenright, 0x208E,
733 XK_plus, 0x208A,
734 XK_minus, 0x208B,
735 XK_equal, 0x208C,
736 XK_V, 0x01D9,
737 XK_v, 0x01DA,
738 XK_nobreakspace, 0x030C,
739 0x01F2, 0x01C5,
740 XK_Sabovedot, 0x1E66,
741 XK_sabovedot, 0x1E67,
742 XK_dead_caron, 0x02C7,
743 XK_Multi_key, XK_quotedbl, XK_U, 0x01D9,
744 XK_Multi_key, XK_quotedbl, XK_u, 0x01DA,
745 XK_space, 0x00B8,
746 XK_nobreakspace, 0x0327,
747 XK_cent, 0x20B5,
748 XK_Cacute, 0x1E08,
749 XK_cacute, 0x1E09,
750 XK_ColonSign, 0x20B5,
751 XK_dead_cedilla, 0x00B8,
752 XK_space, 0x02DB,
753 XK_nobreakspace, 0x0328,
754 XK_Omacron, 0x01EC,
755 XK_omacron, 0x01ED,
756 XK_dead_ogonek, 0x02DB,
757 XK_space, 0x037A,
758 XK_Greek_alphaaccent, 0x1FB4,
759 XK_Greek_etaaccent, 0x1FC4,
760 XK_Greek_omegaaccent, 0x1FF4,
761 XK_Greek_ALPHA, 0x1FBC,
762 XK_Greek_ETA, 0x1FCC,
763 XK_Greek_OMEGA, 0x1FFC,
764 XK_Greek_alpha, 0x1FB3,
765 XK_Greek_eta, 0x1FC3,
766 XK_Greek_omega, 0x1FF3,
767 XK_dead_iota, 0x037A,
768 XK_dead_grave, XK_Greek_alpha, 0x1FB2,
769 XK_dead_grave, XK_Greek_eta, 0x1FC2,
770 XK_dead_grave, XK_Greek_omega, 0x1FF2,
771 XK_dead_acute, XK_Greek_alpha, 0x1FB4,
772 XK_dead_acute, XK_Greek_eta, 0x1FC4,
773 XK_dead_acute, XK_Greek_omega, 0x1FF4,
774 XK_dead_tilde, XK_Greek_alpha, 0x1FB7,
775 XK_dead_tilde, XK_Greek_eta, 0x1FC7,
776 XK_dead_tilde, XK_Greek_omega, 0x1FF7,
777 XK_dead_tilde, 0x1F00, 0x1F86,
778 XK_dead_tilde, 0x1F01, 0x1F87,
779 XK_dead_tilde, 0x1F08, 0x1F8E,
780 XK_dead_tilde, 0x1F09, 0x1F8F,
781 XK_dead_tilde, 0x1F20, 0x1F96,
782 XK_dead_tilde, 0x1F21, 0x1F97,
783 XK_dead_tilde, 0x1F28, 0x1F9E,
784 XK_dead_tilde, 0x1F29, 0x1F9F,
785 XK_dead_tilde, 0x1F60, 0x1FA6,
786 XK_dead_tilde, 0x1F61, 0x1FA7,
787 XK_dead_tilde, 0x1F68, 0x1FAE,
788 XK_dead_tilde, 0x1F69, 0x1FAF,
789 XK_dead_psili, XK_Greek_ALPHA, 0x1F88,
790 XK_dead_psili, XK_Greek_ETA, 0x1F98,
791 XK_dead_psili, XK_Greek_OMEGA, 0x1FA8,
792 XK_dead_psili, XK_Greek_alpha, 0x1F80,
793 XK_dead_psili, XK_Greek_eta, 0x1F90,
794 XK_dead_psili, XK_Greek_omega, 0x1FA0,
795 XK_dead_dasia, XK_Greek_ALPHA, 0x1F89,
796 XK_dead_dasia, XK_Greek_ETA, 0x1F99,
797 XK_dead_dasia, XK_Greek_OMEGA, 0x1FA9,
798 XK_dead_dasia, XK_Greek_alpha, 0x1F81,
799 XK_dead_dasia, XK_Greek_eta, 0x1F91,
800 XK_dead_dasia, XK_Greek_omega, 0x1FA1,
801 XK_dead_grave, XK_dead_psili, XK_Greek_ALPHA, 0x1F8A,
802 XK_dead_grave, XK_dead_psili, XK_Greek_ETA, 0x1F9A,
803 XK_dead_grave, XK_dead_psili, XK_Greek_OMEGA, 0x1FAA,
804 XK_dead_grave, XK_dead_psili, XK_Greek_alpha, 0x1F82,
805 XK_dead_grave, XK_dead_psili, XK_Greek_eta, 0x1F92,
806 XK_dead_grave, XK_dead_psili, XK_Greek_omega, 0x1FA2,
807 XK_dead_grave, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8B,
808 XK_dead_grave, XK_dead_dasia, XK_Greek_ETA, 0x1F9B,
809 XK_dead_grave, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAB,
810 XK_dead_grave, XK_dead_dasia, XK_Greek_alpha, 0x1F83,
811 XK_dead_grave, XK_dead_dasia, XK_Greek_eta, 0x1F93,
812 XK_dead_grave, XK_dead_dasia, XK_Greek_omega, 0x1FA3,
813 XK_dead_acute, XK_dead_psili, XK_Greek_ALPHA, 0x1F8C,
814 XK_dead_acute, XK_dead_psili, XK_Greek_ETA, 0x1F9C,
815 XK_dead_acute, XK_dead_psili, XK_Greek_OMEGA, 0x1FAC,
816 XK_dead_acute, XK_dead_psili, XK_Greek_alpha, 0x1F84,
817 XK_dead_acute, XK_dead_psili, XK_Greek_eta, 0x1F94,
818 XK_dead_acute, XK_dead_psili, XK_Greek_omega, 0x1FA4,
819 XK_dead_acute, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8D,
820 XK_dead_acute, XK_dead_dasia, XK_Greek_ETA, 0x1F9D,
821 XK_dead_acute, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAD,
822 XK_dead_acute, XK_dead_dasia, XK_Greek_alpha, 0x1F85,
823 XK_dead_acute, XK_dead_dasia, XK_Greek_eta, 0x1F95,
824 XK_dead_acute, XK_dead_dasia, XK_Greek_omega, 0x1FA5,
825 XK_dead_tilde, XK_dead_psili, XK_Greek_ALPHA, 0x1F8E,
826 XK_dead_tilde, XK_dead_psili, XK_Greek_ETA, 0x1F9E,
827 XK_dead_tilde, XK_dead_psili, XK_Greek_OMEGA, 0x1FAE,
828 XK_dead_tilde, XK_dead_psili, XK_Greek_alpha, 0x1F86,
829 XK_dead_tilde, XK_dead_psili, XK_Greek_eta, 0x1F96,
830 XK_dead_tilde, XK_dead_psili, XK_Greek_omega, 0x1FA6,
831 XK_dead_tilde, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8F,
832 XK_dead_tilde, XK_dead_dasia, XK_Greek_ETA, 0x1F9F,
833 XK_dead_tilde, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAF,
834 XK_dead_tilde, XK_dead_dasia, XK_Greek_alpha, 0x1F87,
835 XK_dead_tilde, XK_dead_dasia, XK_Greek_eta, 0x1F97,
836 XK_dead_tilde, XK_dead_dasia, XK_Greek_omega, 0x1FA7,
837 XK_Multi_key, XK_apostrophe, XK_Greek_alpha, 0x1FB4,
838 XK_Multi_key, XK_apostrophe, XK_Greek_eta, 0x1FC4,
839 XK_Multi_key, XK_apostrophe, XK_Greek_omega, 0x1FF4,
840 XK_Multi_key, XK_apostrophe, 0x1F00, 0x1F84,
841 XK_Multi_key, XK_apostrophe, 0x1F01, 0x1F85,
842 XK_Multi_key, XK_apostrophe, 0x1F08, 0x1F8C,
843 XK_Multi_key, XK_apostrophe, 0x1F09, 0x1F8D,
844 XK_Multi_key, XK_apostrophe, 0x1F20, 0x1F94,
845 XK_Multi_key, XK_apostrophe, 0x1F21, 0x1F95,
846 XK_Multi_key, XK_apostrophe, 0x1F28, 0x1F9C,
847 XK_Multi_key, XK_apostrophe, 0x1F29, 0x1F9D,
848 XK_Multi_key, XK_apostrophe, 0x1F60, 0x1FA4,
849 XK_Multi_key, XK_apostrophe, 0x1F61, 0x1FA5,
850 XK_Multi_key, XK_apostrophe, 0x1F68, 0x1FAC,
851 XK_Multi_key, XK_apostrophe, 0x1F69, 0x1FAD,
852 XK_Multi_key, XK_parenleft, XK_Greek_ALPHA, 0x1F89,
853 XK_Multi_key, XK_parenleft, XK_Greek_ETA, 0x1F99,
854 XK_Multi_key, XK_parenleft, XK_Greek_OMEGA, 0x1FA9,
855 XK_Multi_key, XK_parenleft, XK_Greek_alpha, 0x1F81,
856 XK_Multi_key, XK_parenleft, XK_Greek_eta, 0x1F91,
857 XK_Multi_key, XK_parenleft, XK_Greek_omega, 0x1FA1,
858 XK_Multi_key, XK_parenright, XK_Greek_ALPHA, 0x1F88,
859 XK_Multi_key, XK_parenright, XK_Greek_ETA, 0x1F98,
860 XK_Multi_key, XK_parenright, XK_Greek_OMEGA, 0x1FA8,
861 XK_Multi_key, XK_parenright, XK_Greek_alpha, 0x1F80,
862 XK_Multi_key, XK_parenright, XK_Greek_eta, 0x1F90,
863 XK_Multi_key, XK_parenright, XK_Greek_omega, 0x1FA0,
864 XK_Multi_key, XK_grave, XK_Greek_alpha, 0x1FB2,
865 XK_Multi_key, XK_grave, XK_Greek_eta, 0x1FC2,
866 XK_Multi_key, XK_grave, XK_Greek_omega, 0x1FF2,
867 XK_Multi_key, XK_grave, 0x1F00, 0x1F82,
868 XK_Multi_key, XK_grave, 0x1F01, 0x1F83,
869 XK_Multi_key, XK_grave, 0x1F08, 0x1F8A,
870 XK_Multi_key, XK_grave, 0x1F09, 0x1F8B,
871 XK_Multi_key, XK_grave, 0x1F20, 0x1F92,
872 XK_Multi_key, XK_grave, 0x1F21, 0x1F93,
873 XK_Multi_key, XK_grave, 0x1F28, 0x1F9A,
874 XK_Multi_key, XK_grave, 0x1F29, 0x1F9B,
875 XK_Multi_key, XK_grave, 0x1F60, 0x1FA2,
876 XK_Multi_key, XK_grave, 0x1F61, 0x1FA3,
877 XK_Multi_key, XK_grave, 0x1F68, 0x1FAA,
878 XK_Multi_key, XK_grave, 0x1F69, 0x1FAB,
879 XK_Multi_key, XK_asciitilde, XK_Greek_alpha, 0x1FB7,
880 XK_Multi_key, XK_asciitilde, XK_Greek_eta, 0x1FC7,
881 XK_Multi_key, XK_asciitilde, XK_Greek_omega, 0x1FF7,
882 XK_Multi_key, XK_asciitilde, 0x1F00, 0x1F86,
883 XK_Multi_key, XK_asciitilde, 0x1F01, 0x1F87,
884 XK_Multi_key, XK_asciitilde, 0x1F08, 0x1F8E,
885 XK_Multi_key, XK_asciitilde, 0x1F09, 0x1F8F,
886 XK_Multi_key, XK_asciitilde, 0x1F20, 0x1F96,
887 XK_Multi_key, XK_asciitilde, 0x1F21, 0x1F97,
888 XK_Multi_key, XK_asciitilde, 0x1F28, 0x1F9E,
889 XK_Multi_key, XK_asciitilde, 0x1F29, 0x1F9F,
890 XK_Multi_key, XK_asciitilde, 0x1F60, 0x1FA6,
891 XK_Multi_key, XK_asciitilde, 0x1F61, 0x1FA7,
892 XK_Multi_key, XK_asciitilde, 0x1F68, 0x1FAE,
893 XK_Multi_key, XK_asciitilde, 0x1F69, 0x1FAF,
894 XK_Multi_key, XK_acute, XK_Greek_alpha, 0x1FB4,
895 XK_Multi_key, XK_acute, XK_Greek_eta, 0x1FC4,
896 XK_Multi_key, XK_acute, XK_Greek_omega, 0x1FF4,
897 XK_Multi_key, XK_acute, 0x1F00, 0x1F84,
898 XK_Multi_key, XK_acute, 0x1F01, 0x1F85,
899 XK_Multi_key, XK_acute, 0x1F08, 0x1F8C,
900 XK_Multi_key, XK_acute, 0x1F09, 0x1F8D,
901 XK_Multi_key, XK_acute, 0x1F20, 0x1F94,
902 XK_Multi_key, XK_acute, 0x1F21, 0x1F95,
903 XK_Multi_key, XK_acute, 0x1F28, 0x1F9C,
904 XK_Multi_key, XK_acute, 0x1F29, 0x1F9D,
905 XK_Multi_key, XK_acute, 0x1F60, 0x1FA4,
906 XK_Multi_key, XK_acute, 0x1F61, 0x1FA5,
907 XK_Multi_key, XK_acute, 0x1F68, 0x1FAC,
908 XK_Multi_key, XK_acute, 0x1F69, 0x1FAD,
909 XK_dead_grave, XK_Multi_key, XK_parenleft, XK_Greek_ALPHA, 0x1F8B,
910 XK_dead_grave, XK_Multi_key, XK_parenleft, XK_Greek_ETA, 0x1F9B,
911 XK_dead_grave, XK_Multi_key, XK_parenleft, XK_Greek_OMEGA, 0x1FAB,
912 XK_dead_grave, XK_Multi_key, XK_parenleft, XK_Greek_alpha, 0x1F83,
913 XK_dead_grave, XK_Multi_key, XK_parenleft, XK_Greek_eta, 0x1F93,
914 XK_dead_grave, XK_Multi_key, XK_parenleft, XK_Greek_omega, 0x1FA3,
915 XK_dead_grave, XK_Multi_key, XK_parenright, XK_Greek_ALPHA, 0x1F8A,
916 XK_dead_grave, XK_Multi_key, XK_parenright, XK_Greek_ETA, 0x1F9A,
917 XK_dead_grave, XK_Multi_key, XK_parenright, XK_Greek_OMEGA, 0x1FAA,
918 XK_dead_grave, XK_Multi_key, XK_parenright, XK_Greek_alpha, 0x1F82,
919 XK_dead_grave, XK_Multi_key, XK_parenright, XK_Greek_eta, 0x1F92,
920 XK_dead_grave, XK_Multi_key, XK_parenright, XK_Greek_omega, 0x1FA2,
921 XK_dead_acute, XK_Multi_key, XK_parenleft, XK_Greek_ALPHA, 0x1F8D,
922 XK_dead_acute, XK_Multi_key, XK_parenleft, XK_Greek_ETA, 0x1F9D,
923 XK_dead_acute, XK_Multi_key, XK_parenleft, XK_Greek_OMEGA, 0x1FAD,
924 XK_dead_acute, XK_Multi_key, XK_parenleft, XK_Greek_alpha, 0x1F85,
925 XK_dead_acute, XK_Multi_key, XK_parenleft, XK_Greek_eta, 0x1F95,
926 XK_dead_acute, XK_Multi_key, XK_parenleft, XK_Greek_omega, 0x1FA5,
927 XK_dead_acute, XK_Multi_key, XK_parenright, XK_Greek_ALPHA, 0x1F8C,
928 XK_dead_acute, XK_Multi_key, XK_parenright, XK_Greek_ETA, 0x1F9C,
929 XK_dead_acute, XK_Multi_key, XK_parenright, XK_Greek_OMEGA, 0x1FAC,
930 XK_dead_acute, XK_Multi_key, XK_parenright, XK_Greek_alpha, 0x1F84,
931 XK_dead_acute, XK_Multi_key, XK_parenright, XK_Greek_eta, 0x1F94,
932 XK_dead_acute, XK_Multi_key, XK_parenright, XK_Greek_omega, 0x1FA4,
933 XK_dead_tilde, XK_Multi_key, XK_parenleft, XK_Greek_ALPHA, 0x1F8F,
934 XK_dead_tilde, XK_Multi_key, XK_parenleft, XK_Greek_ETA, 0x1F9F,
935 XK_dead_tilde, XK_Multi_key, XK_parenleft, XK_Greek_OMEGA, 0x1FAF,
936 XK_dead_tilde, XK_Multi_key, XK_parenleft, XK_Greek_alpha, 0x1F87,
937 XK_dead_tilde, XK_Multi_key, XK_parenleft, XK_Greek_eta, 0x1F97,
938 XK_dead_tilde, XK_Multi_key, XK_parenleft, XK_Greek_omega, 0x1FA7,
939 XK_dead_tilde, XK_Multi_key, XK_parenright, XK_Greek_ALPHA, 0x1F8E,
940 XK_dead_tilde, XK_Multi_key, XK_parenright, XK_Greek_ETA, 0x1F9E,
941 XK_dead_tilde, XK_Multi_key, XK_parenright, XK_Greek_OMEGA, 0x1FAE,
942 XK_dead_tilde, XK_Multi_key, XK_parenright, XK_Greek_alpha, 0x1F86,
943 XK_dead_tilde, XK_Multi_key, XK_parenright, XK_Greek_eta, 0x1F96,
944 XK_dead_tilde, XK_Multi_key, XK_parenright, XK_Greek_omega, 0x1FA6,
945 XK_Multi_key, XK_apostrophe, XK_parenleft, XK_Greek_ALPHA, 0x1F8D,
946 XK_Multi_key, XK_apostrophe, XK_parenleft, XK_Greek_ETA, 0x1F9D,
947 XK_Multi_key, XK_apostrophe, XK_parenleft, XK_Greek_OMEGA, 0x1FAD,
948 XK_Multi_key, XK_apostrophe, XK_parenleft, XK_Greek_alpha, 0x1F85,
949 XK_Multi_key, XK_apostrophe, XK_parenleft, XK_Greek_eta, 0x1F95,
950 XK_Multi_key, XK_apostrophe, XK_parenleft, XK_Greek_omega, 0x1FA5,
951 XK_Multi_key, XK_apostrophe, XK_parenright, XK_Greek_ALPHA, 0x1F8C,
952 XK_Multi_key, XK_apostrophe, XK_parenright, XK_Greek_ETA, 0x1F9C,
953 XK_Multi_key, XK_apostrophe, XK_parenright, XK_Greek_OMEGA, 0x1FAC,
954 XK_Multi_key, XK_apostrophe, XK_parenright, XK_Greek_alpha, 0x1F84,
955 XK_Multi_key, XK_apostrophe, XK_parenright, XK_Greek_eta, 0x1F94,
956 XK_Multi_key, XK_apostrophe, XK_parenright, XK_Greek_omega, 0x1FA4,
957 XK_Multi_key, XK_apostrophe, XK_dead_psili, XK_Greek_ALPHA, 0x1F8C,
958 XK_Multi_key, XK_apostrophe, XK_dead_psili, XK_Greek_ETA, 0x1F9C,
959 XK_Multi_key, XK_apostrophe, XK_dead_psili, XK_Greek_OMEGA, 0x1FAC,
960 XK_Multi_key, XK_apostrophe, XK_dead_psili, XK_Greek_alpha, 0x1F84,
961 XK_Multi_key, XK_apostrophe, XK_dead_psili, XK_Greek_eta, 0x1F94,
962 XK_Multi_key, XK_apostrophe, XK_dead_psili, XK_Greek_omega, 0x1FA4,
963 XK_Multi_key, XK_apostrophe, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8D,
964 XK_Multi_key, XK_apostrophe, XK_dead_dasia, XK_Greek_ETA, 0x1F9D,
965 XK_Multi_key, XK_apostrophe, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAD,
966 XK_Multi_key, XK_apostrophe, XK_dead_dasia, XK_Greek_alpha, 0x1F85,
967 XK_Multi_key, XK_apostrophe, XK_dead_dasia, XK_Greek_eta, 0x1F95,
968 XK_Multi_key, XK_apostrophe, XK_dead_dasia, XK_Greek_omega, 0x1FA5,
969 XK_Multi_key, XK_grave, XK_parenleft, XK_Greek_ALPHA, 0x1F8B,
970 XK_Multi_key, XK_grave, XK_parenleft, XK_Greek_ETA, 0x1F9B,
971 XK_Multi_key, XK_grave, XK_parenleft, XK_Greek_OMEGA, 0x1FAB,
972 XK_Multi_key, XK_grave, XK_parenleft, XK_Greek_alpha, 0x1F83,
973 XK_Multi_key, XK_grave, XK_parenleft, XK_Greek_eta, 0x1F93,
974 XK_Multi_key, XK_grave, XK_parenleft, XK_Greek_omega, 0x1FA3,
975 XK_Multi_key, XK_grave, XK_parenright, XK_Greek_ALPHA, 0x1F8A,
976 XK_Multi_key, XK_grave, XK_parenright, XK_Greek_ETA, 0x1F9A,
977 XK_Multi_key, XK_grave, XK_parenright, XK_Greek_OMEGA, 0x1FAA,
978 XK_Multi_key, XK_grave, XK_parenright, XK_Greek_alpha, 0x1F82,
979 XK_Multi_key, XK_grave, XK_parenright, XK_Greek_eta, 0x1F92,
980 XK_Multi_key, XK_grave, XK_parenright, XK_Greek_omega, 0x1FA2,
981 XK_Multi_key, XK_grave, XK_dead_psili, XK_Greek_ALPHA, 0x1F8A,
982 XK_Multi_key, XK_grave, XK_dead_psili, XK_Greek_ETA, 0x1F9A,
983 XK_Multi_key, XK_grave, XK_dead_psili, XK_Greek_OMEGA, 0x1FAA,
984 XK_Multi_key, XK_grave, XK_dead_psili, XK_Greek_alpha, 0x1F82,
985 XK_Multi_key, XK_grave, XK_dead_psili, XK_Greek_eta, 0x1F92,
986 XK_Multi_key, XK_grave, XK_dead_psili, XK_Greek_omega, 0x1FA2,
987 XK_Multi_key, XK_grave, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8B,
988 XK_Multi_key, XK_grave, XK_dead_dasia, XK_Greek_ETA, 0x1F9B,
989 XK_Multi_key, XK_grave, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAB,
990 XK_Multi_key, XK_grave, XK_dead_dasia, XK_Greek_alpha, 0x1F83,
991 XK_Multi_key, XK_grave, XK_dead_dasia, XK_Greek_eta, 0x1F93,
992 XK_Multi_key, XK_grave, XK_dead_dasia, XK_Greek_omega, 0x1FA3,
993 XK_Multi_key, XK_asciitilde, XK_parenleft, XK_Greek_ALPHA, 0x1F8F,
994 XK_Multi_key, XK_asciitilde, XK_parenleft, XK_Greek_ETA, 0x1F9F,
995 XK_Multi_key, XK_asciitilde, XK_parenleft, XK_Greek_OMEGA, 0x1FAF,
996 XK_Multi_key, XK_asciitilde, XK_parenleft, XK_Greek_alpha, 0x1F87,
997 XK_Multi_key, XK_asciitilde, XK_parenleft, XK_Greek_eta, 0x1F97,
998 XK_Multi_key, XK_asciitilde, XK_parenleft, XK_Greek_omega, 0x1FA7,
999 XK_Multi_key, XK_asciitilde, XK_parenright, XK_Greek_ALPHA, 0x1F8E,
1000 XK_Multi_key, XK_asciitilde, XK_parenright, XK_Greek_ETA, 0x1F9E,
1001 XK_Multi_key, XK_asciitilde, XK_parenright, XK_Greek_OMEGA, 0x1FAE,
1002 XK_Multi_key, XK_asciitilde, XK_parenright, XK_Greek_alpha, 0x1F86,
1003 XK_Multi_key, XK_asciitilde, XK_parenright, XK_Greek_eta, 0x1F96,
1004 XK_Multi_key, XK_asciitilde, XK_parenright, XK_Greek_omega, 0x1FA6,
1005 XK_Multi_key, XK_asciitilde, XK_dead_psili, XK_Greek_ALPHA, 0x1F8E,
1006 XK_Multi_key, XK_asciitilde, XK_dead_psili, XK_Greek_ETA, 0x1F9E,
1007 XK_Multi_key, XK_asciitilde, XK_dead_psili, XK_Greek_OMEGA, 0x1FAE,
1008 XK_Multi_key, XK_asciitilde, XK_dead_psili, XK_Greek_alpha, 0x1F86,
1009 XK_Multi_key, XK_asciitilde, XK_dead_psili, XK_Greek_eta, 0x1F96,
1010 XK_Multi_key, XK_asciitilde, XK_dead_psili, XK_Greek_omega, 0x1FA6,
1011 XK_Multi_key, XK_asciitilde, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8F,
1012 XK_Multi_key, XK_asciitilde, XK_dead_dasia, XK_Greek_ETA, 0x1F9F,
1013 XK_Multi_key, XK_asciitilde, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAF,
1014 XK_Multi_key, XK_asciitilde, XK_dead_dasia, XK_Greek_alpha, 0x1F87,
1015 XK_Multi_key, XK_asciitilde, XK_dead_dasia, XK_Greek_eta, 0x1F97,
1016 XK_Multi_key, XK_asciitilde, XK_dead_dasia, XK_Greek_omega, 0x1FA7,
1017 XK_Multi_key, XK_acute, XK_parenleft, XK_Greek_ALPHA, 0x1F8D,
1018 XK_Multi_key, XK_acute, XK_parenleft, XK_Greek_ETA, 0x1F9D,
1019 XK_Multi_key, XK_acute, XK_parenleft, XK_Greek_OMEGA, 0x1FAD,
1020 XK_Multi_key, XK_acute, XK_parenleft, XK_Greek_alpha, 0x1F85,
1021 XK_Multi_key, XK_acute, XK_parenleft, XK_Greek_eta, 0x1F95,
1022 XK_Multi_key, XK_acute, XK_parenleft, XK_Greek_omega, 0x1FA5,
1023 XK_Multi_key, XK_acute, XK_parenright, XK_Greek_ALPHA, 0x1F8C,
1024 XK_Multi_key, XK_acute, XK_parenright, XK_Greek_ETA, 0x1F9C,
1025 XK_Multi_key, XK_acute, XK_parenright, XK_Greek_OMEGA, 0x1FAC,
1026 XK_Multi_key, XK_acute, XK_parenright, XK_Greek_alpha, 0x1F84,
1027 XK_Multi_key, XK_acute, XK_parenright, XK_Greek_eta, 0x1F94,
1028 XK_Multi_key, XK_acute, XK_parenright, XK_Greek_omega, 0x1FA4,
1029 XK_Multi_key, XK_acute, XK_dead_psili, XK_Greek_ALPHA, 0x1F8C,
1030 XK_Multi_key, XK_acute, XK_dead_psili, XK_Greek_ETA, 0x1F9C,
1031 XK_Multi_key, XK_acute, XK_dead_psili, XK_Greek_OMEGA, 0x1FAC,
1032 XK_Multi_key, XK_acute, XK_dead_psili, XK_Greek_alpha, 0x1F84,
1033 XK_Multi_key, XK_acute, XK_dead_psili, XK_Greek_eta, 0x1F94,
1034 XK_Multi_key, XK_acute, XK_dead_psili, XK_Greek_omega, 0x1FA4,
1035 XK_Multi_key, XK_acute, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8D,
1036 XK_Multi_key, XK_acute, XK_dead_dasia, XK_Greek_ETA, 0x1F9D,
1037 XK_Multi_key, XK_acute, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAD,
1038 XK_Multi_key, XK_acute, XK_dead_dasia, XK_Greek_alpha, 0x1F85,
1039 XK_Multi_key, XK_acute, XK_dead_dasia, XK_Greek_eta, 0x1F95,
1040 XK_Multi_key, XK_acute, XK_dead_dasia, XK_Greek_omega, 0x1FA5,
1041 XK_kana_WO, 0x30FA,
1042 XK_kana_U, 0x30F4,
1043 XK_kana_KA, 0x30AC,
1044 XK_kana_KI, 0x30AE,
1045 XK_kana_KU, 0x30B0,
1046 XK_kana_KE, 0x30B2,
1047 XK_kana_KO, 0x30B4,
1048 XK_kana_SA, 0x30B6,
1049 XK_kana_SHI, 0x30B8,
1050 XK_kana_SU, 0x30BA,
1051 XK_kana_SE, 0x30BC,
1052 XK_kana_SO, 0x30BE,
1053 XK_kana_TA, 0x30C0,
1054 XK_kana_CHI, 0x30C2,
1055 XK_kana_TSU, 0x30C5,
1056 XK_kana_TE, 0x30C7,
1057 XK_kana_TO, 0x30C9,
1058 XK_kana_HA, 0x30D0,
1059 XK_kana_HI, 0x30D3,
1060 XK_kana_FU, 0x30D6,
1061 XK_kana_HE, 0x30D9,
1062 XK_kana_HO, 0x30DC,
1063 XK_kana_WA, 0x30F7,
1064 XK_kana_HA, 0x30D1,
1065 XK_kana_HI, 0x30D4,
1066 XK_kana_FU, 0x30D7,
1067 XK_kana_HE, 0x30DA,
1068 XK_kana_HO, 0x30DD,
1069 XK_plus, 0x2A25,
1070 XK_minus, 0x2A2A,
1071 XK_equal, 0x2A66,
1072 XK_Abreve, 0x1EB6,
1073 XK_abreve, 0x1EB7,
1074 XK_Multi_key, XK_plus, XK_O, 0x1EE2,
1075 XK_Multi_key, XK_plus, XK_U, 0x1EF0,
1076 XK_Multi_key, XK_plus, XK_o, 0x1EE3,
1077 XK_Multi_key, XK_plus, XK_u, 0x1EF1,
1078 XK_space, 0x0309,
1079 XK_B, 0x0181,
1080 XK_C, 0x0187,
1081 XK_D, 0x018A,
1082 XK_F, 0x0191,
1083 XK_G, 0x0193,
1084 XK_K, 0x0198,
1085 XK_M, 0x2C6E,
1086 XK_N, 0x019D,
1087 XK_P, 0x01A4,
1088 XK_T, 0x01AC,
1089 XK_V, 0x01B2,
1090 XK_W, 0x2C72,
1091 XK_Z, 0x0224,
1092 XK_b, 0x0253,
1093 XK_c, 0x0188,
1094 XK_d, 0x0257,
1095 XK_f, 0x0192,
1096 XK_g, 0x0260,
1097 XK_h, 0x0266,
1098 XK_k, 0x0199,
1099 XK_m, 0x0271,
1100 XK_n, 0x0272,
1101 XK_p, 0x01A5,
1102 XK_q, 0x02A0,
1103 XK_s, 0x0282,
1104 XK_t, 0x01AD,
1105 XK_v, 0x028B,
1106 XK_w, 0x2C73,
1107 XK_z, 0x0225,
1108 XK_nobreakspace, 0x0309,
1109 XK_Abreve, 0x1EB2,
1110 XK_abreve, 0x1EB3,
1111 0x0256, 0x1D91,
1112 XK_schwa, 0x025A,
1113 0x025C, 0x025D,
1114 0x025F, 0x0284,
1115 0x0279, 0x027B,
1116 XK_dead_hook, 0x0309,
1117 XK_Multi_key, XK_plus, XK_O, 0x1EDE,
1118 XK_Multi_key, XK_plus, XK_U, 0x1EEC,
1119 XK_Multi_key, XK_plus, XK_o, 0x1EDF,
1120 XK_Multi_key, XK_plus, XK_u, 0x1EED,
1121 XK_Multi_key, XK_U, XK_A, 0x1EB2,
1122 XK_Multi_key, XK_U, XK_a, 0x1EB3,
1123 XK_Multi_key, XK_asciicircum, XK_A, 0x1EA8,
1124 XK_Multi_key, XK_asciicircum, XK_E, 0x1EC2,
1125 XK_Multi_key, XK_asciicircum, XK_O, 0x1ED4,
1126 XK_Multi_key, XK_asciicircum, XK_a, 0x1EA9,
1127 XK_Multi_key, XK_asciicircum, XK_e, 0x1EC3,
1128 XK_Multi_key, XK_asciicircum, XK_o, 0x1ED5,
1129 XK_Multi_key, XK_b, XK_A, 0x1EB2,
1130 XK_Multi_key, XK_b, XK_a, 0x1EB3,
1131 XK_Greek_ALPHA, 0x1F08,
1132 XK_Greek_EPSILON, 0x1F18,
1133 XK_Greek_ETA, 0x1F28,
1134 XK_Greek_IOTA, 0x1F38,
1135 XK_Greek_OMICRON, 0x1F48,
1136 XK_Greek_OMEGA, 0x1F68,
1137 XK_Greek_alpha, 0x1F00,
1138 XK_Greek_epsilon, 0x1F10,
1139 XK_Greek_eta, 0x1F20,
1140 XK_Greek_iota, 0x1F30,
1141 XK_Greek_omicron, 0x1F40,
1142 XK_Greek_rho, 0x1FE4,
1143 XK_Greek_upsilon, 0x1F50,
1144 XK_Greek_omega, 0x1F60,
1145 XK_Greek_ALPHA, 0x1F09,
1146 XK_Greek_EPSILON, 0x1F19,
1147 XK_Greek_ETA, 0x1F29,
1148 XK_Greek_IOTA, 0x1F39,
1149 XK_Greek_OMICRON, 0x1F49,
1150 XK_Greek_RHO, 0x1FEC,
1151 XK_Greek_UPSILON, 0x1F59,
1152 XK_Greek_OMEGA, 0x1F69,
1153 XK_Greek_alpha, 0x1F01,
1154 XK_Greek_epsilon, 0x1F11,
1155 XK_Greek_eta, 0x1F21,
1156 XK_Greek_iota, 0x1F31,
1157 XK_Greek_omicron, 0x1F41,
1158 XK_Greek_rho, 0x1FE5,
1159 XK_Greek_upsilon, 0x1F51,
1160 XK_Greek_omega, 0x1F61,
1161 XK_space, XK_space, 0x00A0,
1162 XK_space, XK_apostrophe, 0x0027,
1163 XK_space, XK_parenleft, 0x02D8,
1164 XK_space, XK_comma, 0x00B8,
1165 XK_space, XK_minus, 0x007E,
1166 XK_space, XK_period, 0x2008,
1167 XK_space, XK_less, 0x02C7,
1168 XK_space, XK_greater, 0x005E,
1169 XK_space, XK_asciicircum, 0x005E,
1170 XK_space, XK_grave, 0x0060,
1171 XK_space, XK_asciitilde, 0x007E,
1172 XK_exclam, XK_exclam, 0x00A1,
1173 XK_exclam, XK_question, 0x203D,
1174 XK_exclam, XK_A, 0x1EA0,
1175 XK_exclam, XK_B, 0x1E04,
1176 XK_exclam, XK_D, 0x1E0C,
1177 XK_exclam, XK_E, 0x1EB8,
1178 XK_exclam, XK_H, 0x1E24,
1179 XK_exclam, XK_I, 0x1ECA,
1180 XK_exclam, XK_K, 0x1E32,
1181 XK_exclam, XK_L, 0x1E36,
1182 XK_exclam, XK_M, 0x1E42,
1183 XK_exclam, XK_N, 0x1E46,
1184 XK_exclam, XK_O, 0x1ECC,
1185 XK_exclam, XK_P, 0x00B6,
1186 XK_exclam, XK_R, 0x1E5A,
1187 XK_exclam, XK_S, 0x00A7,
1188 XK_exclam, XK_T, 0x1E6C,
1189 XK_exclam, XK_U, 0x1EE4,
1190 XK_exclam, XK_V, 0x1E7E,
1191 XK_exclam, XK_W, 0x1E88,
1192 XK_exclam, XK_Y, 0x1EF4,
1193 XK_exclam, XK_Z, 0x1E92,
1194 XK_exclam, XK_asciicircum, 0x00A6,
1195 XK_exclam, XK_a, 0x1EA1,
1196 XK_exclam, XK_b, 0x1E05,
1197 XK_exclam, XK_d, 0x1E0D,
1198 XK_exclam, XK_e, 0x1EB9,
1199 XK_exclam, XK_h, 0x1E25,
1200 XK_exclam, XK_i, 0x1ECB,
1201 XK_exclam, XK_k, 0x1E33,
1202 XK_exclam, XK_l, 0x1E37,
1203 XK_exclam, XK_m, 0x1E43,
1204 XK_exclam, XK_n, 0x1E47,
1205 XK_exclam, XK_o, 0x1ECD,
1206 XK_exclam, XK_p, 0x00B6,
1207 XK_exclam, XK_r, 0x1E5B,
1208 XK_exclam, XK_s, 0x00A7,
1209 XK_exclam, XK_t, 0x1E6D,
1210 XK_exclam, XK_u, 0x1EE5,
1211 XK_exclam, XK_v, 0x1E7F,
1212 XK_exclam, XK_w, 0x1E89,
1213 XK_exclam, XK_y, 0x1EF5,
1214 XK_exclam, XK_z, 0x1E93,
1215 XK_exclam, XK_Ohorn, 0x1EE2,
1216 XK_exclam, XK_ohorn, 0x1EE3,
1217 XK_exclam, XK_Uhorn, 0x1EF0,
1218 XK_exclam, XK_uhorn, 0x1EF1,
1219 XK_quotedbl, XK_quotedbl, 0x00A8,
1220 XK_quotedbl, XK_apostrophe, 0x0344,
1221 XK_quotedbl, XK_comma, 0x201E,
1222 XK_quotedbl, XK_slash, 0x301E,
1223 XK_quotedbl, XK_less, 0x201C,
1224 XK_quotedbl, XK_greater, 0x201D,
1225 XK_quotedbl, XK_A, 0x00C4,
1226 XK_quotedbl, XK_E, 0x00CB,
1227 XK_quotedbl, XK_H, 0x1E26,
1228 XK_quotedbl, XK_I, 0x00CF,
1229 XK_quotedbl, XK_O, 0x00D6,
1230 XK_quotedbl, XK_U, 0x00DC,
1231 XK_quotedbl, XK_W, 0x1E84,
1232 XK_quotedbl, XK_X, 0x1E8C,
1233 XK_quotedbl, XK_Y, 0x0178,
1234 XK_quotedbl, XK_backslash, 0x301D,
1235 XK_quotedbl, XK_a, 0x00E4,
1236 XK_quotedbl, XK_e, 0x00EB,
1237 XK_quotedbl, XK_h, 0x1E27,
1238 XK_quotedbl, XK_i, 0x00EF,
1239 XK_quotedbl, XK_o, 0x00F6,
1240 XK_quotedbl, XK_t, 0x1E97,
1241 XK_quotedbl, XK_u, 0x00FC,
1242 XK_quotedbl, XK_w, 0x1E85,
1243 XK_quotedbl, XK_x, 0x1E8D,
1244 XK_quotedbl, XK_y, 0x00FF,
1245 XK_quotedbl, XK_acute, 0x0344,
1246 XK_quotedbl, XK_Otilde, 0x1E4E,
1247 XK_quotedbl, XK_otilde, 0x1E4F,
1248 XK_quotedbl, 0x03D2, 0x03D4,
1249 XK_quotedbl, XK_Umacron, 0x1E7A,
1250 XK_quotedbl, XK_umacron, 0x1E7B,
1251 XK_quotedbl, 0x04D8, 0x04DA,
1252 XK_quotedbl, 0x04D9, 0x04DB,
1253 XK_quotedbl, 0x04E8, 0x04EA,
1254 XK_quotedbl, 0x04E9, 0x04EB,
1255 XK_quotedbl, XK_Ukrainian_i, 0x0457,
1256 XK_quotedbl, XK_Ukrainian_I, 0x0407,
1257 XK_quotedbl, XK_Cyrillic_a, 0x04D3,
1258 XK_quotedbl, XK_Cyrillic_ie, 0x0451,
1259 XK_quotedbl, XK_Cyrillic_i, 0x04E5,
1260 XK_quotedbl, XK_Cyrillic_o, 0x04E7,
1261 XK_quotedbl, XK_Cyrillic_u, 0x04F1,
1262 XK_quotedbl, XK_Cyrillic_zhe, 0x04DD,
1263 XK_quotedbl, XK_Cyrillic_yeru, 0x04F9,
1264 XK_quotedbl, XK_Cyrillic_ze, 0x04DF,
1265 XK_quotedbl, XK_Cyrillic_e, 0x04ED,
1266 XK_quotedbl, XK_Cyrillic_che, 0x04F5,
1267 XK_quotedbl, XK_Cyrillic_A, 0x04D2,
1268 XK_quotedbl, XK_Cyrillic_IE, 0x0401,
1269 XK_quotedbl, XK_Cyrillic_I, 0x04E4,
1270 XK_quotedbl, XK_Cyrillic_O, 0x04E6,
1271 XK_quotedbl, XK_Cyrillic_U, 0x04F0,
1272 XK_quotedbl, XK_Cyrillic_ZHE, 0x04DC,
1273 XK_quotedbl, XK_Cyrillic_YERU, 0x04F8,
1274 XK_quotedbl, XK_Cyrillic_ZE, 0x04DE,
1275 XK_quotedbl, XK_Cyrillic_E, 0x04EC,
1276 XK_quotedbl, XK_Cyrillic_CHE, 0x04F4,
1277 XK_quotedbl, XK_Greek_IOTA, 0x03AA,
1278 XK_quotedbl, XK_Greek_UPSILON, 0x03AB,
1279 XK_quotedbl, XK_Greek_iota, 0x03CA,
1280 XK_quotedbl, XK_Greek_upsilon, 0x03CB,
1281 XK_quotedbl, XK_dead_acute, 0x0344,
1282 XK_numbersign, XK_numbersign, 0x266F,
1283 XK_numbersign, XK_b, 0x266D,
1284 XK_numbersign, XK_f, 0x266E,
1285 XK_percent, XK_o, 0x2030,
1286 XK_apostrophe, XK_space, 0x0027,
1287 XK_apostrophe, XK_apostrophe, 0x00B4,
1288 XK_apostrophe, XK_comma, 0x201A,
1289 XK_apostrophe, XK_less, 0x2018,
1290 XK_apostrophe, XK_greater, 0x2019,
1291 XK_apostrophe, XK_A, 0x00C1,
1292 XK_apostrophe, XK_C, 0x0106,
1293 XK_apostrophe, XK_E, 0x00C9,
1294 XK_apostrophe, XK_G, 0x01F4,
1295 XK_apostrophe, XK_I, 0x00CD,
1296 XK_apostrophe, XK_K, 0x1E30,
1297 XK_apostrophe, XK_L, 0x0139,
1298 XK_apostrophe, XK_M, 0x1E3E,
1299 XK_apostrophe, XK_N, 0x0143,
1300 XK_apostrophe, XK_O, 0x00D3,
1301 XK_apostrophe, XK_P, 0x1E54,
1302 XK_apostrophe, XK_R, 0x0154,
1303 XK_apostrophe, XK_S, 0x015A,
1304 XK_apostrophe, XK_U, 0x00DA,
1305 XK_apostrophe, XK_W, 0x1E82,
1306 XK_apostrophe, XK_Y, 0x00DD,
1307 XK_apostrophe, XK_Z, 0x0179,
1308 XK_apostrophe, XK_a, 0x00E1,
1309 XK_apostrophe, XK_c, 0x0107,
1310 XK_apostrophe, XK_e, 0x00E9,
1311 XK_apostrophe, XK_g, 0x01F5,
1312 XK_apostrophe, XK_i, 0x00ED,
1313 XK_apostrophe, XK_k, 0x1E31,
1314 XK_apostrophe, XK_l, 0x013A,
1315 XK_apostrophe, XK_m, 0x1E3F,
1316 XK_apostrophe, XK_n, 0x0144,
1317 XK_apostrophe, XK_o, 0x00F3,
1318 XK_apostrophe, XK_p, 0x1E55,
1319 XK_apostrophe, XK_r, 0x0155,
1320 XK_apostrophe, XK_s, 0x015B,
1321 XK_apostrophe, XK_u, 0x00FA,
1322 XK_apostrophe, XK_w, 0x1E83,
1323 XK_apostrophe, XK_y, 0x00FD,
1324 XK_apostrophe, XK_z, 0x017A,
1325 XK_apostrophe, XK_Acircumflex, 0x1EA4,
1326 XK_apostrophe, XK_Aring, 0x01FA,
1327 XK_apostrophe, XK_AE, 0x01FC,
1328 XK_apostrophe, XK_Ccedilla, 0x1E08,
1329 XK_apostrophe, XK_Ecircumflex, 0x1EBE,
1330 XK_apostrophe, XK_Idiaeresis, 0x1E2E,
1331 XK_apostrophe, XK_Ocircumflex, 0x1ED0,
1332 XK_apostrophe, XK_Otilde, 0x1E4C,
1333 XK_apostrophe, XK_Ooblique, 0x01FE,
1334 XK_apostrophe, 0x00DC, 0x01D7,
1335 XK_apostrophe, XK_acircumflex, 0x1EA5,
1336 XK_apostrophe, XK_aring, 0x01FB,
1337 XK_apostrophe, XK_ae, 0x01FD,
1338 XK_apostrophe, XK_ccedilla, 0x1E09,
1339 XK_apostrophe, XK_ecircumflex, 0x1EBF,
1340 XK_apostrophe, XK_idiaeresis, 0x1E2F,
1341 XK_apostrophe, XK_ocircumflex, 0x1ED1,
1342 XK_apostrophe, XK_otilde, 0x1E4D,
1343 XK_apostrophe, XK_oslash, 0x01FF,
1344 XK_apostrophe, XK_udiaeresis, 0x01D8,
1345 XK_apostrophe, XK_Ohorn, 0x1EDA,
1346 XK_apostrophe, XK_ohorn, 0x1EDB,
1347 XK_apostrophe, XK_Uhorn, 0x1EE8,
1348 XK_apostrophe, XK_uhorn, 0x1EE9,
1349 XK_apostrophe, XK_Abreve, 0x1EAE,
1350 XK_apostrophe, XK_abreve, 0x1EAF,
1351 XK_apostrophe, XK_Emacron, 0x1E16,
1352 XK_apostrophe, XK_emacron, 0x1E17,
1353 XK_apostrophe, XK_Omacron, 0x1E52,
1354 XK_apostrophe, XK_Utilde, 0x1E78,
1355 XK_apostrophe, XK_omacron, 0x1E53,
1356 XK_apostrophe, XK_utilde, 0x1E79,
1357 XK_apostrophe, XK_Cyrillic_ghe, 0x0453,
1358 XK_apostrophe, XK_Cyrillic_ka, 0x045C,
1359 XK_apostrophe, XK_Cyrillic_GHE, 0x0403,
1360 XK_apostrophe, XK_Cyrillic_KA, 0x040C,
1361 XK_apostrophe, XK_Greek_iotadieresis, 0x0390,
1362 XK_apostrophe, XK_Greek_upsilondieresis, 0x03B0,
1363 XK_apostrophe, XK_Greek_ALPHA, 0x0386,
1364 XK_apostrophe, XK_Greek_EPSILON, 0x0388,
1365 XK_apostrophe, XK_Greek_ETA, 0x0389,
1366 XK_apostrophe, XK_Greek_IOTA, 0x038A,
1367 XK_apostrophe, XK_Greek_OMICRON, 0x038C,
1368 XK_apostrophe, XK_Greek_UPSILON, 0x038E,
1369 XK_apostrophe, XK_Greek_OMEGA, 0x038F,
1370 XK_apostrophe, XK_Greek_alpha, 0x03AC,
1371 XK_apostrophe, XK_Greek_epsilon, 0x03AD,
1372 XK_apostrophe, XK_Greek_eta, 0x03AE,
1373 XK_apostrophe, XK_Greek_iota, 0x03AF,
1374 XK_apostrophe, XK_Greek_omicron, 0x03CC,
1375 XK_apostrophe, XK_Greek_upsilon, 0x03CD,
1376 XK_apostrophe, XK_Greek_omega, 0x03CE,
1377 XK_apostrophe, 0x1F00, 0x1F04,
1378 XK_apostrophe, 0x1F01, 0x1F05,
1379 XK_apostrophe, 0x1F08, 0x1F0C,
1380 XK_apostrophe, 0x1F09, 0x1F0D,
1381 XK_apostrophe, 0x1F10, 0x1F14,
1382 XK_apostrophe, 0x1F11, 0x1F15,
1383 XK_apostrophe, 0x1F18, 0x1F1C,
1384 XK_apostrophe, 0x1F19, 0x1F1D,
1385 XK_apostrophe, 0x1F20, 0x1F24,
1386 XK_apostrophe, 0x1F21, 0x1F25,
1387 XK_apostrophe, 0x1F28, 0x1F2C,
1388 XK_apostrophe, 0x1F29, 0x1F2D,
1389 XK_apostrophe, 0x1F30, 0x1F34,
1390 XK_apostrophe, 0x1F31, 0x1F35,
1391 XK_apostrophe, 0x1F38, 0x1F3C,
1392 XK_apostrophe, 0x1F39, 0x1F3D,
1393 XK_apostrophe, 0x1F40, 0x1F44,
1394 XK_apostrophe, 0x1F41, 0x1F45,
1395 XK_apostrophe, 0x1F48, 0x1F4C,
1396 XK_apostrophe, 0x1F49, 0x1F4D,
1397 XK_apostrophe, 0x1F50, 0x1F54,
1398 XK_apostrophe, 0x1F51, 0x1F55,
1399 XK_apostrophe, 0x1F59, 0x1F5D,
1400 XK_apostrophe, 0x1F60, 0x1F64,
1401 XK_apostrophe, 0x1F61, 0x1F65,
1402 XK_apostrophe, 0x1F68, 0x1F6C,
1403 XK_apostrophe, 0x1F69, 0x1F6D,
1404 XK_parenleft, XK_space, 0x02D8,
1405 XK_parenleft, XK_parenleft, 0x005B,
1406 XK_parenleft, XK_minus, 0x007B,
1407 XK_parenleft, XK_A, 0x0102,
1408 XK_parenleft, XK_G, 0x011E,
1409 XK_parenleft, XK_a, 0x0103,
1410 XK_parenleft, XK_c, 0x00A9,
1411 XK_parenleft, XK_g, 0x011F,
1412 XK_parenleft, XK_r, 0x00AE,
1413 XK_parenleft, XK_Greek_ALPHA, 0x1F09,
1414 XK_parenleft, XK_Greek_EPSILON, 0x1F19,
1415 XK_parenleft, XK_Greek_ETA, 0x1F29,
1416 XK_parenleft, XK_Greek_IOTA, 0x1F39,
1417 XK_parenleft, XK_Greek_OMICRON, 0x1F49,
1418 XK_parenleft, XK_Greek_RHO, 0x1FEC,
1419 XK_parenleft, XK_Greek_UPSILON, 0x1F59,
1420 XK_parenleft, XK_Greek_OMEGA, 0x1F69,
1421 XK_parenleft, XK_Greek_alpha, 0x1F01,
1422 XK_parenleft, XK_Greek_epsilon, 0x1F11,
1423 XK_parenleft, XK_Greek_eta, 0x1F21,
1424 XK_parenleft, XK_Greek_iota, 0x1F31,
1425 XK_parenleft, XK_Greek_omicron, 0x1F41,
1426 XK_parenleft, XK_Greek_rho, 0x1FE5,
1427 XK_parenleft, XK_Greek_upsilon, 0x1F51,
1428 XK_parenleft, XK_Greek_omega, 0x1F61,
1429 XK_parenright, XK_parenright, 0x005D,
1430 XK_parenright, XK_minus, 0x007D,
1431 XK_parenright, XK_Greek_ALPHA, 0x1F08,
1432 XK_parenright, XK_Greek_EPSILON, 0x1F18,
1433 XK_parenright, XK_Greek_ETA, 0x1F28,
1434 XK_parenright, XK_Greek_IOTA, 0x1F38,
1435 XK_parenright, XK_Greek_OMICRON, 0x1F48,
1436 XK_parenright, XK_Greek_OMEGA, 0x1F68,
1437 XK_parenright, XK_Greek_alpha, 0x1F00,
1438 XK_parenright, XK_Greek_epsilon, 0x1F10,
1439 XK_parenright, XK_Greek_eta, 0x1F20,
1440 XK_parenright, XK_Greek_iota, 0x1F30,
1441 XK_parenright, XK_Greek_omicron, 0x1F40,
1442 XK_parenright, XK_Greek_rho, 0x1FE4,
1443 XK_parenright, XK_Greek_upsilon, 0x1F50,
1444 XK_parenright, XK_Greek_omega, 0x1F60,
1445 XK_asterisk, XK_0, 0x00B0,
1446 XK_asterisk, XK_A, 0x00C5,
1447 XK_asterisk, XK_U, 0x016E,
1448 XK_asterisk, XK_a, 0x00E5,
1449 XK_asterisk, XK_u, 0x016F,
1450 XK_plus, XK_plus, 0x0023,
1451 XK_plus, XK_minus, 0x00B1,
1452 XK_plus, XK_O, 0x01A0,
1453 XK_plus, XK_U, 0x01AF,
1454 XK_plus, XK_o, 0x01A1,
1455 XK_plus, XK_u, 0x01B0,
1456 XK_comma, XK_space, 0x00B8,
1457 XK_comma, XK_quotedbl, 0x201E,
1458 XK_comma, XK_apostrophe, 0x201A,
1459 XK_comma, XK_comma, 0x00B8,
1460 XK_comma, XK_minus, 0x00AC,
1461 XK_comma, XK_A, 0x0104,
1462 XK_comma, XK_C, 0x00C7,
1463 XK_comma, XK_D, 0x1E10,
1464 XK_comma, XK_E, 0x0118,
1465 XK_comma, XK_G, 0x0122,
1466 XK_comma, XK_H, 0x1E28,
1467 XK_comma, XK_I, 0x012E,
1468 XK_comma, XK_K, 0x0136,
1469 XK_comma, XK_L, 0x013B,
1470 XK_comma, XK_N, 0x0145,
1471 XK_comma, XK_R, 0x0156,
1472 XK_comma, XK_S, 0x015E,
1473 XK_comma, XK_T, 0x0162,
1474 XK_comma, XK_U, 0x0172,
1475 XK_comma, XK_a, 0x0105,
1476 XK_comma, XK_c, 0x00E7,
1477 XK_comma, XK_d, 0x1E11,
1478 XK_comma, XK_e, 0x0119,
1479 XK_comma, XK_g, 0x0123,
1480 XK_comma, XK_h, 0x1E29,
1481 XK_comma, XK_i, 0x012F,
1482 XK_comma, XK_k, 0x0137,
1483 XK_comma, XK_l, 0x013C,
1484 XK_comma, XK_n, 0x0146,
1485 XK_comma, XK_r, 0x0157,
1486 XK_comma, XK_s, 0x015F,
1487 XK_comma, XK_t, 0x0163,
1488 XK_comma, XK_u, 0x0173,
1489 XK_minus, XK_space, 0x007E,
1490 XK_minus, XK_parenleft, 0x007B,
1491 XK_minus, XK_parenright, 0x007D,
1492 XK_minus, XK_plus, 0x00B1,
1493 XK_minus, XK_comma, 0x00AC,
1494 XK_minus, XK_colon, 0x00F7,
1495 XK_minus, XK_A, 0x00C3,
1496 XK_minus, XK_D, 0x0110,
1497 XK_minus, XK_E, 0x0112,
1498 XK_minus, XK_I, 0x012A,
1499 XK_minus, XK_L, 0x00A3,
1500 XK_minus, XK_N, 0x00D1,
1501 XK_minus, XK_O, 0x00D5,
1502 XK_minus, XK_U, 0x016A,
1503 XK_minus, XK_Y, 0x00A5,
1504 XK_minus, XK_asciicircum, 0x00AF,
1505 XK_minus, XK_a, 0x00E3,
1506 XK_minus, XK_d, 0x0111,
1507 XK_minus, XK_e, 0x0113,
1508 XK_minus, XK_i, 0x012B,
1509 XK_minus, XK_l, 0x00A3,
1510 XK_minus, XK_n, 0x00F1,
1511 XK_minus, XK_o, 0x00F5,
1512 XK_minus, XK_u, 0x016B,
1513 XK_minus, XK_y, 0x00A5,
1514 XK_period, XK_minus, 0x00B7,
1515 XK_period, XK_period, 0x02D9,
1516 XK_period, XK_less, 0x2039,
1517 XK_period, XK_equal, 0x2022,
1518 XK_period, XK_greater, 0x203A,
1519 XK_period, XK_A, 0x0226,
1520 XK_period, XK_B, 0x1E02,
1521 XK_period, XK_C, 0x010A,
1522 XK_period, XK_D, 0x1E0A,
1523 XK_period, XK_E, 0x0116,
1524 XK_period, XK_F, 0x1E1E,
1525 XK_period, XK_G, 0x0120,
1526 XK_period, XK_H, 0x1E22,
1527 XK_period, XK_I, 0x0130,
1528 XK_period, XK_M, 0x1E40,
1529 XK_period, XK_N, 0x1E44,
1530 XK_period, XK_O, 0x022E,
1531 XK_period, XK_P, 0x1E56,
1532 XK_period, XK_R, 0x1E58,
1533 XK_period, XK_S, 0x1E60,
1534 XK_period, XK_T, 0x1E6A,
1535 XK_period, XK_W, 0x1E86,
1536 XK_period, XK_X, 0x1E8A,
1537 XK_period, XK_Y, 0x1E8E,
1538 XK_period, XK_Z, 0x017B,
1539 XK_period, XK_asciicircum, 0x00B7,
1540 XK_period, XK_a, 0x0227,
1541 XK_period, XK_b, 0x1E03,
1542 XK_period, XK_c, 0x010B,
1543 XK_period, XK_d, 0x1E0B,
1544 XK_period, XK_e, 0x0117,
1545 XK_period, XK_f, 0x1E1F,
1546 XK_period, XK_g, 0x0121,
1547 XK_period, XK_h, 0x1E23,
1548 XK_period, XK_i, 0x0131,
1549 XK_period, XK_m, 0x1E41,
1550 XK_period, XK_n, 0x1E45,
1551 XK_period, XK_o, 0x022F,
1552 XK_period, XK_p, 0x1E57,
1553 XK_period, XK_r, 0x1E59,
1554 XK_period, XK_s, 0x1E61,
1555 XK_period, XK_t, 0x1E6B,
1556 XK_period, XK_w, 0x1E87,
1557 XK_period, XK_x, 0x1E8B,
1558 XK_period, XK_y, 0x1E8F,
1559 XK_period, XK_z, 0x017C,
1560 XK_period, 0x017F, 0x1E9B,
1561 XK_period, XK_Sacute, 0x1E64,
1562 XK_period, XK_Scaron, 0x1E66,
1563 XK_period, XK_sacute, 0x1E65,
1564 XK_period, XK_scaron, 0x1E67,
1565 XK_period, 0x1E62, 0x1E68,
1566 XK_period, 0x1E63, 0x1E69,
1567 XK_slash, XK_slash, 0x005C,
1568 XK_slash, XK_less, 0x005C,
1569 XK_slash, XK_C, 0x00A2,
1570 XK_slash, XK_D, 0x0110,
1571 XK_slash, XK_G, 0x01E4,
1572 XK_slash, XK_H, 0x0126,
1573 XK_slash, XK_I, 0x0197,
1574 XK_slash, XK_L, 0x0141,
1575 XK_slash, XK_O, 0x00D8,
1576 XK_slash, XK_T, 0x0166,
1577 XK_slash, XK_U, 0x00B5,
1578 XK_slash, XK_Z, 0x01B5,
1579 XK_slash, XK_asciicircum, 0x007C,
1580 XK_slash, XK_b, 0x0180,
1581 XK_slash, XK_c, 0x00A2,
1582 XK_slash, XK_d, 0x0111,
1583 XK_slash, XK_g, 0x01E5,
1584 XK_slash, XK_h, 0x0127,
1585 XK_slash, XK_i, 0x0268,
1586 XK_slash, XK_l, 0x0142,
1587 XK_slash, XK_m, 0x20A5,
1588 XK_slash, XK_o, 0x00F8,
1589 XK_slash, XK_t, 0x0167,
1590 XK_slash, XK_u, 0x00B5,
1591 XK_slash, XK_z, 0x01B6,
1592 XK_slash, 0x0294, 0x02A1,
1593 XK_slash, 0x04AE, 0x04B0,
1594 XK_slash, 0x04AF, 0x04B1,
1595 XK_slash, XK_Cyrillic_ghe, 0x0493,
1596 XK_slash, XK_Cyrillic_ka, 0x049F,
1597 XK_slash, XK_Cyrillic_GHE, 0x0492,
1598 XK_slash, XK_Cyrillic_KA, 0x049E,
1599 XK_slash, XK_leftarrow, 0x219A,
1600 XK_slash, XK_rightarrow, 0x219B,
1601 XK_slash, 0x2194, 0x21AE,
1602 XK_0, XK_asterisk, 0x00B0,
1603 XK_0, XK_C, 0x00A9,
1604 XK_0, XK_S, 0x00A7,
1605 XK_0, XK_X, 0x00A4,
1606 XK_0, XK_asciicircum, 0x00B0,
1607 XK_0, XK_c, 0x00A9,
1608 XK_0, XK_s, 0x00A7,
1609 XK_0, XK_x, 0x00A4,
1610 XK_1, XK_2, 0x00BD,
1611 XK_1, XK_3, 0x2153,
1612 XK_1, XK_4, 0x00BC,
1613 XK_1, XK_5, 0x2155,
1614 XK_1, XK_6, 0x2159,
1615 XK_1, XK_8, 0x215B,
1616 XK_1, XK_S, 0x00B9,
1617 XK_1, XK_asciicircum, 0x00B9,
1618 XK_1, XK_s, 0x00B9,
1619 XK_2, XK_3, 0x2154,
1620 XK_2, XK_5, 0x2156,
1621 XK_2, XK_S, 0x00B2,
1622 XK_2, XK_asciicircum, 0x00B2,
1623 XK_2, XK_s, 0x00B2,
1624 XK_3, XK_4, 0x00BE,
1625 XK_3, XK_5, 0x2157,
1626 XK_3, XK_8, 0x215C,
1627 XK_3, XK_S, 0x00B3,
1628 XK_3, XK_asciicircum, 0x00B3,
1629 XK_3, XK_s, 0x00B3,
1630 XK_4, XK_5, 0x2158,
1631 XK_5, XK_6, 0x215A,
1632 XK_5, XK_8, 0x215D,
1633 XK_7, XK_8, 0x215E,
1634 XK_colon, XK_minus, 0x00F7,
1635 XK_semicolon, XK_A, 0x0104,
1636 XK_semicolon, XK_E, 0x0118,
1637 XK_semicolon, XK_I, 0x012E,
1638 XK_semicolon, XK_O, 0x01EA,
1639 XK_semicolon, XK_U, 0x0172,
1640 XK_semicolon, XK_a, 0x0105,
1641 XK_semicolon, XK_e, 0x0119,
1642 XK_semicolon, XK_i, 0x012F,
1643 XK_semicolon, XK_o, 0x01EB,
1644 XK_semicolon, XK_u, 0x0173,
1645 XK_less, XK_space, 0x02C7,
1646 XK_less, XK_quotedbl, 0x201C,
1647 XK_less, XK_apostrophe, 0x2018,
1648 XK_less, XK_slash, 0x005C,
1649 XK_less, XK_less, 0x00AB,
1650 XK_less, XK_C, 0x010C,
1651 XK_less, XK_D, 0x010E,
1652 XK_less, XK_E, 0x011A,
1653 XK_less, XK_L, 0x013D,
1654 XK_less, XK_N, 0x0147,
1655 XK_less, XK_R, 0x0158,
1656 XK_less, XK_S, 0x0160,
1657 XK_less, XK_T, 0x0164,
1658 XK_less, XK_Z, 0x017D,
1659 XK_less, XK_c, 0x010D,
1660 XK_less, XK_d, 0x010F,
1661 XK_less, XK_e, 0x011B,
1662 XK_less, XK_l, 0x013E,
1663 XK_less, XK_n, 0x0148,
1664 XK_less, XK_r, 0x0159,
1665 XK_less, XK_s, 0x0161,
1666 XK_less, XK_t, 0x0165,
1667 XK_less, XK_z, 0x017E,
1668 XK_less, 0x0338, 0x226E,
1669 XK_equal, XK_C, 0x20AC,
1670 XK_equal, XK_E, 0x20AC,
1671 XK_equal, XK_L, 0x00A3,
1672 XK_equal, XK_N, 0x20A6,
1673 XK_equal, XK_O, 0x0150,
1674 XK_equal, XK_U, 0x0170,
1675 XK_equal, XK_W, 0x20A9,
1676 XK_equal, XK_Y, 0x00A5,
1677 XK_equal, XK_c, 0x20AC,
1678 XK_equal, XK_e, 0x20AC,
1679 XK_equal, XK_l, 0x00A3,
1680 XK_equal, XK_o, 0x0151,
1681 XK_equal, XK_u, 0x0171,
1682 XK_equal, XK_y, 0x00A5,
1683 XK_equal, 0x0338, 0x2260,
1684 XK_equal, XK_Cyrillic_u, 0x04F3,
1685 XK_equal, XK_Cyrillic_IE, 0x20AC,
1686 XK_equal, XK_Cyrillic_ES, 0x20AC,
1687 XK_equal, XK_Cyrillic_U, 0x04F2,
1688 XK_greater, XK_space, 0x005E,
1689 XK_greater, XK_quotedbl, 0x201D,
1690 XK_greater, XK_apostrophe, 0x2019,
1691 XK_greater, XK_greater, 0x00BB,
1692 XK_greater, XK_A, 0x00C2,
1693 XK_greater, XK_E, 0x00CA,
1694 XK_greater, XK_I, 0x00CE,
1695 XK_greater, XK_O, 0x00D4,
1696 XK_greater, XK_U, 0x00DB,
1697 XK_greater, XK_a, 0x00E2,
1698 XK_greater, XK_e, 0x00EA,
1699 XK_greater, XK_i, 0x00EE,
1700 XK_greater, XK_o, 0x00F4,
1701 XK_greater, XK_u, 0x00FB,
1702 XK_greater, 0x0338, 0x226F,
1703 XK_question, XK_exclam, 0x203D,
1704 XK_question, XK_question, 0x00BF,
1705 XK_question, XK_A, 0x1EA2,
1706 XK_question, XK_E, 0x1EBA,
1707 XK_question, XK_I, 0x1EC8,
1708 XK_question, XK_O, 0x1ECE,
1709 XK_question, XK_U, 0x1EE6,
1710 XK_question, XK_Y, 0x1EF6,
1711 XK_question, XK_a, 0x1EA3,
1712 XK_question, XK_e, 0x1EBB,
1713 XK_question, XK_i, 0x1EC9,
1714 XK_question, XK_o, 0x1ECF,
1715 XK_question, XK_u, 0x1EE7,
1716 XK_question, XK_y, 0x1EF7,
1717 XK_question, XK_Acircumflex, 0x1EA8,
1718 XK_question, XK_Ecircumflex, 0x1EC2,
1719 XK_question, XK_Ocircumflex, 0x1ED4,
1720 XK_question, XK_acircumflex, 0x1EA9,
1721 XK_question, XK_ecircumflex, 0x1EC3,
1722 XK_question, XK_ocircumflex, 0x1ED5,
1723 XK_question, XK_Ohorn, 0x1EDE,
1724 XK_question, XK_ohorn, 0x1EDF,
1725 XK_question, XK_Uhorn, 0x1EEC,
1726 XK_question, XK_uhorn, 0x1EED,
1727 XK_question, XK_Abreve, 0x1EB2,
1728 XK_question, XK_abreve, 0x1EB3,
1729 XK_A, XK_quotedbl, 0x00C4,
1730 XK_A, XK_apostrophe, 0x00C1,
1731 XK_A, XK_parenleft, 0x0102,
1732 XK_A, XK_asterisk, 0x00C5,
1733 XK_A, XK_comma, 0x0104,
1734 XK_A, XK_minus, 0x00C3,
1735 XK_A, XK_greater, 0x00C2,
1736 XK_A, XK_A, 0x00C5,
1737 XK_A, XK_E, 0x00C6,
1738 XK_A, XK_T, 0x0040,
1739 XK_A, XK_asciicircum, 0x00C2,
1740 XK_A, XK_underscore, 0x00AA,
1741 XK_A, XK_grave, 0x00C0,
1742 XK_A, XK_asciitilde, 0x00C3,
1743 XK_A, XK_diaeresis, 0x00C4,
1744 XK_A, XK_acute, 0x00C1,
1745 XK_B, XK_period, 0x1E02,
1746 XK_C, XK_apostrophe, 0x0106,
1747 XK_C, XK_comma, 0x00C7,
1748 XK_C, XK_period, 0x010A,
1749 XK_C, XK_slash, 0x00A2,
1750 XK_C, XK_0, 0x00A9,
1751 XK_C, XK_less, 0x010C,
1752 XK_C, XK_equal, 0x20AC,
1753 XK_C, XK_E, 0x20A0,
1754 XK_C, XK_O, 0x00A9,
1755 XK_C, XK_o, 0x00A9,
1756 XK_C, XK_r, 0x20A2,
1757 XK_C, XK_bar, 0x00A2,
1758 XK_D, XK_minus, 0x0110,
1759 XK_D, XK_period, 0x1E0A,
1760 XK_D, XK_less, 0x010E,
1761 XK_D, XK_H, 0x00D0,
1762 XK_E, XK_quotedbl, 0x00CB,
1763 XK_E, XK_apostrophe, 0x00C9,
1764 XK_E, XK_comma, 0x0118,
1765 XK_E, XK_minus, 0x0112,
1766 XK_E, XK_period, 0x0116,
1767 XK_E, XK_less, 0x011A,
1768 XK_E, XK_equal, 0x20AC,
1769 XK_E, XK_greater, 0x00CA,
1770 XK_E, XK_asciicircum, 0x00CA,
1771 XK_E, XK_underscore, 0x0112,
1772 XK_E, XK_grave, 0x00C8,
1773 XK_E, XK_diaeresis, 0x00CB,
1774 XK_E, XK_acute, 0x00C9,
1775 XK_F, XK_period, 0x1E1E,
1776 XK_F, XK_r, 0x20A3,
1777 XK_G, XK_parenleft, 0x011E,
1778 XK_G, XK_comma, 0x0122,
1779 XK_G, XK_period, 0x0120,
1780 XK_G, XK_U, 0x011E,
1781 XK_G, XK_breve, 0x011E,
1782 XK_I, XK_quotedbl, 0x00CF,
1783 XK_I, XK_apostrophe, 0x00CD,
1784 XK_I, XK_comma, 0x012E,
1785 XK_I, XK_minus, 0x012A,
1786 XK_I, XK_period, 0x0130,
1787 XK_I, XK_greater, 0x00CE,
1788 XK_I, XK_asciicircum, 0x00CE,
1789 XK_I, XK_underscore, 0x012A,
1790 XK_I, XK_grave, 0x00CC,
1791 XK_I, XK_asciitilde, 0x0128,
1792 XK_I, XK_diaeresis, 0x00CF,
1793 XK_I, XK_acute, 0x00CD,
1794 XK_K, XK_comma, 0x0136,
1795 XK_L, XK_apostrophe, 0x0139,
1796 XK_L, XK_comma, 0x013B,
1797 XK_L, XK_minus, 0x00A3,
1798 XK_L, XK_slash, 0x0141,
1799 XK_L, XK_less, 0x013D,
1800 XK_L, XK_equal, 0x00A3,
1801 XK_L, XK_V, 0x007C,
1802 XK_M, XK_period, 0x1E40,
1803 XK_N, XK_apostrophe, 0x0143,
1804 XK_N, XK_comma, 0x0145,
1805 XK_N, XK_minus, 0x00D1,
1806 XK_N, XK_less, 0x0147,
1807 XK_N, XK_equal, 0x20A6,
1808 XK_N, XK_G, 0x014A,
1809 XK_N, XK_O, 0x2116,
1810 XK_N, XK_o, 0x2116,
1811 XK_N, XK_asciitilde, 0x00D1,
1812 XK_O, XK_quotedbl, 0x00D6,
1813 XK_O, XK_apostrophe, 0x00D3,
1814 XK_O, XK_minus, 0x00D5,
1815 XK_O, XK_slash, 0x00D8,
1816 XK_O, XK_greater, 0x00D4,
1817 XK_O, XK_C, 0x00A9,
1818 XK_O, XK_E, 0x0152,
1819 XK_O, XK_R, 0x00AE,
1820 XK_O, XK_S, 0x00A7,
1821 XK_O, XK_X, 0x00A4,
1822 XK_O, XK_asciicircum, 0x00D4,
1823 XK_O, XK_underscore, 0x00BA,
1824 XK_O, XK_grave, 0x00D2,
1825 XK_O, XK_c, 0x00A9,
1826 XK_O, XK_r, 0x00AE,
1827 XK_O, XK_x, 0x00A4,
1828 XK_O, XK_asciitilde, 0x00D5,
1829 XK_O, XK_diaeresis, 0x00D6,
1830 XK_O, XK_acute, 0x00D3,
1831 XK_P, XK_exclam, 0x00B6,
1832 XK_P, XK_period, 0x1E56,
1833 XK_P, XK_P, 0x00B6,
1834 XK_P, XK_t, 0x20A7,
1835 XK_R, XK_apostrophe, 0x0154,
1836 XK_R, XK_comma, 0x0156,
1837 XK_R, XK_less, 0x0158,
1838 XK_R, XK_O, 0x00AE,
1839 XK_R, XK_s, 0x20A8,
1840 XK_S, XK_exclam, 0x00A7,
1841 XK_S, XK_apostrophe, 0x015A,
1842 XK_S, XK_comma, 0x015E,
1843 XK_S, XK_period, 0x1E60,
1844 XK_S, XK_0, 0x00A7,
1845 XK_S, XK_1, 0x00B9,
1846 XK_S, XK_2, 0x00B2,
1847 XK_S, XK_3, 0x00B3,
1848 XK_S, XK_less, 0x0160,
1849 XK_S, XK_M, 0x2120,
1850 XK_S, XK_O, 0x00A7,
1851 XK_S, XK_m, 0x2120,
1852 XK_S, XK_cedilla, 0x015E,
1853 XK_T, XK_minus, 0x0166,
1854 XK_T, XK_period, 0x1E6A,
1855 XK_T, XK_slash, 0x0166,
1856 XK_T, XK_less, 0x0164,
1857 XK_T, XK_H, 0x00DE,
1858 XK_T, XK_M, 0x2122,
1859 XK_T, XK_m, 0x2122,
1860 XK_U, XK_quotedbl, 0x00DC,
1861 XK_U, XK_apostrophe, 0x00DA,
1862 XK_U, XK_asterisk, 0x016E,
1863 XK_U, XK_comma, 0x0172,
1864 XK_U, XK_minus, 0x016A,
1865 XK_U, XK_slash, 0x00B5,
1866 XK_U, XK_greater, 0x00DB,
1867 XK_U, XK_A, 0x0102,
1868 XK_U, XK_E, 0x0114,
1869 XK_U, XK_G, 0x011E,
1870 XK_U, XK_I, 0x012C,
1871 XK_U, XK_O, 0x014E,
1872 XK_U, XK_U, 0x016C,
1873 XK_U, XK_asciicircum, 0x00DB,
1874 XK_U, XK_underscore, 0x016A,
1875 XK_U, XK_grave, 0x00D9,
1876 XK_U, XK_a, 0x0103,
1877 XK_U, XK_e, 0x0115,
1878 XK_U, XK_g, 0x011F,
1879 XK_U, XK_i, 0x012D,
1880 XK_U, XK_o, 0x014F,
1881 XK_U, XK_u, 0x016D,
1882 XK_U, XK_asciitilde, 0x0168,
1883 XK_U, XK_diaeresis, 0x00DC,
1884 XK_U, XK_acute, 0x00DA,
1885 XK_U, 0x0228, 0x1E1C,
1886 XK_U, 0x0229, 0x1E1D,
1887 XK_U, XK_Cyrillic_a, 0x04D1,
1888 XK_U, XK_Cyrillic_ie, 0x04D7,
1889 XK_U, XK_Cyrillic_i, 0x0439,
1890 XK_U, XK_Cyrillic_u, 0x045E,
1891 XK_U, XK_Cyrillic_zhe, 0x04C2,
1892 XK_U, XK_Cyrillic_A, 0x04D0,
1893 XK_U, XK_Cyrillic_IE, 0x04D6,
1894 XK_U, XK_Cyrillic_I, 0x0419,
1895 XK_U, XK_Cyrillic_U, 0x040E,
1896 XK_U, XK_Cyrillic_ZHE, 0x04C1,
1897 XK_U, XK_Greek_ALPHA, 0x1FB8,
1898 XK_U, XK_Greek_IOTA, 0x1FD8,
1899 XK_U, XK_Greek_UPSILON, 0x1FE8,
1900 XK_U, XK_Greek_alpha, 0x1FB0,
1901 XK_U, XK_Greek_iota, 0x1FD0,
1902 XK_U, XK_Greek_upsilon, 0x1FE0,
1903 XK_U, 0x1EA0, 0x1EB6,
1904 XK_U, 0x1EA1, 0x1EB7,
1905 XK_V, XK_L, 0x007C,
1906 XK_W, XK_equal, 0x20A9,
1907 XK_W, XK_asciicircum, 0x0174,
1908 XK_X, XK_0, 0x00A4,
1909 XK_X, XK_O, 0x00A4,
1910 XK_X, XK_o, 0x00A4,
1911 XK_Y, XK_quotedbl, 0x0178,
1912 XK_Y, XK_apostrophe, 0x00DD,
1913 XK_Y, XK_minus, 0x00A5,
1914 XK_Y, XK_equal, 0x00A5,
1915 XK_Y, XK_asciicircum, 0x0176,
1916 XK_Y, XK_diaeresis, 0x0178,
1917 XK_Y, XK_acute, 0x00DD,
1918 XK_Z, XK_apostrophe, 0x0179,
1919 XK_Z, XK_period, 0x017B,
1920 XK_Z, XK_less, 0x017D,
1921 XK_asciicircum, XK_space, 0x005E,
1922 XK_asciicircum, XK_parenleft, 0x207D,
1923 XK_asciicircum, XK_parenright, 0x207E,
1924 XK_asciicircum, XK_plus, 0x207A,
1925 XK_asciicircum, XK_minus, 0x00AF,
1926 XK_asciicircum, XK_period, 0x00B7,
1927 XK_asciicircum, XK_slash, 0x007C,
1928 XK_asciicircum, XK_0, 0x00B0,
1929 XK_asciicircum, XK_1, 0x00B9,
1930 XK_asciicircum, XK_2, 0x00B2,
1931 XK_asciicircum, XK_3, 0x00B3,
1932 XK_asciicircum, XK_4, 0x2074,
1933 XK_asciicircum, XK_5, 0x2075,
1934 XK_asciicircum, XK_6, 0x2076,
1935 XK_asciicircum, XK_7, 0x2077,
1936 XK_asciicircum, XK_8, 0x2078,
1937 XK_asciicircum, XK_9, 0x2079,
1938 XK_asciicircum, XK_equal, 0x207C,
1939 XK_asciicircum, XK_A, 0x00C2,
1940 XK_asciicircum, XK_C, 0x0108,
1941 XK_asciicircum, XK_E, 0x00CA,
1942 XK_asciicircum, XK_G, 0x011C,
1943 XK_asciicircum, XK_H, 0x0124,
1944 XK_asciicircum, XK_I, 0x00CE,
1945 XK_asciicircum, XK_J, 0x0134,
1946 XK_asciicircum, XK_O, 0x00D4,
1947 XK_asciicircum, XK_S, 0x015C,
1948 XK_asciicircum, XK_U, 0x00DB,
1949 XK_asciicircum, XK_W, 0x0174,
1950 XK_asciicircum, XK_Y, 0x0176,
1951 XK_asciicircum, XK_Z, 0x1E90,
1952 XK_asciicircum, XK_underscore, 0x00AF,
1953 XK_asciicircum, XK_a, 0x00E2,
1954 XK_asciicircum, XK_c, 0x0109,
1955 XK_asciicircum, XK_e, 0x00EA,
1956 XK_asciicircum, XK_g, 0x011D,
1957 XK_asciicircum, XK_h, 0x0125,
1958 XK_asciicircum, XK_i, 0x00EE,
1959 XK_asciicircum, XK_j, 0x0135,
1960 XK_asciicircum, XK_o, 0x00F4,
1961 XK_asciicircum, XK_s, 0x015D,
1962 XK_asciicircum, XK_u, 0x00FB,
1963 XK_asciicircum, XK_w, 0x0175,
1964 XK_asciicircum, XK_y, 0x0177,
1965 XK_asciicircum, XK_z, 0x1E91,
1966 XK_asciicircum, 0x1EA0, 0x1EAC,
1967 XK_asciicircum, 0x1EA1, 0x1EAD,
1968 XK_asciicircum, 0x1EB8, 0x1EC6,
1969 XK_asciicircum, 0x1EB9, 0x1EC7,
1970 XK_asciicircum, 0x1ECC, 0x1ED8,
1971 XK_asciicircum, 0x1ECD, 0x1ED9,
1972 XK_asciicircum, 0x2212, 0x207B,
1973 XK_asciicircum, 0x4E00, 0x3192,
1974 XK_asciicircum, 0x4E01, 0x319C,
1975 XK_asciicircum, 0x4E09, 0x3194,
1976 XK_asciicircum, 0x4E0A, 0x3196,
1977 XK_asciicircum, 0x4E0B, 0x3198,
1978 XK_asciicircum, 0x4E19, 0x319B,
1979 XK_asciicircum, 0x4E2D, 0x3197,
1980 XK_asciicircum, 0x4E59, 0x319A,
1981 XK_asciicircum, 0x4E8C, 0x3193,
1982 XK_asciicircum, 0x4EBA, 0x319F,
1983 XK_asciicircum, 0x56DB, 0x3195,
1984 XK_asciicircum, 0x5730, 0x319E,
1985 XK_asciicircum, 0x5929, 0x319D,
1986 XK_asciicircum, 0x7532, 0x3199,
1987 XK_asciicircum, XK_KP_Space, 0x00B2,
1988 XK_asciicircum, XK_KP_Add, 0x207A,
1989 XK_asciicircum, XK_KP_0, 0x2070,
1990 XK_asciicircum, XK_KP_1, 0x00B9,
1991 XK_asciicircum, XK_KP_2, 0x00B2,
1992 XK_asciicircum, XK_KP_3, 0x00B3,
1993 XK_asciicircum, XK_KP_4, 0x2074,
1994 XK_asciicircum, XK_KP_5, 0x2075,
1995 XK_asciicircum, XK_KP_6, 0x2076,
1996 XK_asciicircum, XK_KP_7, 0x2077,
1997 XK_asciicircum, XK_KP_8, 0x2078,
1998 XK_asciicircum, XK_KP_9, 0x2079,
1999 XK_asciicircum, XK_KP_Equal, 0x207C,
2000 XK_underscore, XK_parenleft, 0x208D,
2001 XK_underscore, XK_parenright, 0x208E,
2002 XK_underscore, XK_plus, 0x208A,
2003 XK_underscore, XK_0, 0x2080,
2004 XK_underscore, XK_1, 0x2081,
2005 XK_underscore, XK_2, 0x2082,
2006 XK_underscore, XK_3, 0x2083,
2007 XK_underscore, XK_4, 0x2084,
2008 XK_underscore, XK_5, 0x2085,
2009 XK_underscore, XK_6, 0x2086,
2010 XK_underscore, XK_7, 0x2087,
2011 XK_underscore, XK_8, 0x2088,
2012 XK_underscore, XK_9, 0x2089,
2013 XK_underscore, XK_equal, 0x208C,
2014 XK_underscore, XK_A, 0x00AA,
2015 XK_underscore, XK_E, 0x0112,
2016 XK_underscore, XK_G, 0x1E20,
2017 XK_underscore, XK_I, 0x012A,
2018 XK_underscore, XK_O, 0x00BA,
2019 XK_underscore, XK_U, 0x016A,
2020 XK_underscore, XK_Y, 0x0232,
2021 XK_underscore, XK_asciicircum, 0x00AF,
2022 XK_underscore, XK_underscore, 0x00AF,
2023 XK_underscore, XK_a, 0x00AA,
2024 XK_underscore, XK_e, 0x0113,
2025 XK_underscore, XK_g, 0x1E21,
2026 XK_underscore, XK_i, 0x012B,
2027 XK_underscore, XK_o, 0x00BA,
2028 XK_underscore, XK_u, 0x016B,
2029 XK_underscore, XK_y, 0x0233,
2030 XK_underscore, XK_Adiaeresis, 0x01DE,
2031 XK_underscore, XK_AE, 0x01E2,
2032 XK_underscore, XK_Otilde, 0x022C,
2033 XK_underscore, XK_Odiaeresis, 0x022A,
2034 XK_underscore, 0x00DC, 0x01D5,
2035 XK_underscore, XK_adiaeresis, 0x01DF,
2036 XK_underscore, XK_ae, 0x01E3,
2037 XK_underscore, XK_otilde, 0x022D,
2038 XK_underscore, XK_odiaeresis, 0x022B,
2039 XK_underscore, XK_udiaeresis, 0x01D6,
2040 XK_underscore, 0x01EA, 0x01EC,
2041 XK_underscore, 0x01EB, 0x01ED,
2042 XK_underscore, 0x0226, 0x01E0,
2043 XK_underscore, 0x0227, 0x01E1,
2044 XK_underscore, 0x022E, 0x0230,
2045 XK_underscore, 0x022F, 0x0231,
2046 XK_underscore, XK_Cyrillic_i, 0x04E3,
2047 XK_underscore, XK_Cyrillic_u, 0x04EF,
2048 XK_underscore, XK_Cyrillic_I, 0x04E2,
2049 XK_underscore, XK_Cyrillic_U, 0x04EE,
2050 XK_underscore, XK_Greek_ALPHA, 0x1FB9,
2051 XK_underscore, XK_Greek_IOTA, 0x1FD9,
2052 XK_underscore, XK_Greek_UPSILON, 0x1FE9,
2053 XK_underscore, XK_Greek_alpha, 0x1FB1,
2054 XK_underscore, XK_Greek_iota, 0x1FD1,
2055 XK_underscore, XK_Greek_upsilon, 0x1FE1,
2056 XK_underscore, 0x1E36, 0x1E38,
2057 XK_underscore, 0x1E37, 0x1E39,
2058 XK_underscore, 0x1E5A, 0x1E5C,
2059 XK_underscore, 0x1E5B, 0x1E5D,
2060 XK_underscore, 0x2212, 0x208B,
2061 XK_underscore, XK_KP_Space, 0x2082,
2062 XK_underscore, XK_KP_Add, 0x208A,
2063 XK_underscore, XK_KP_0, 0x2080,
2064 XK_underscore, XK_KP_1, 0x2081,
2065 XK_underscore, XK_KP_2, 0x2082,
2066 XK_underscore, XK_KP_3, 0x2083,
2067 XK_underscore, XK_KP_4, 0x2084,
2068 XK_underscore, XK_KP_5, 0x2085,
2069 XK_underscore, XK_KP_6, 0x2086,
2070 XK_underscore, XK_KP_7, 0x2087,
2071 XK_underscore, XK_KP_8, 0x2088,
2072 XK_underscore, XK_KP_9, 0x2089,
2073 XK_underscore, XK_KP_Equal, 0x208C,
2074 XK_grave, XK_space, 0x0060,
2075 XK_grave, XK_A, 0x00C0,
2076 XK_grave, XK_E, 0x00C8,
2077 XK_grave, XK_I, 0x00CC,
2078 XK_grave, XK_N, 0x01F8,
2079 XK_grave, XK_O, 0x00D2,
2080 XK_grave, XK_U, 0x00D9,
2081 XK_grave, XK_W, 0x1E80,
2082 XK_grave, XK_Y, 0x1EF2,
2083 XK_grave, XK_a, 0x00E0,
2084 XK_grave, XK_e, 0x00E8,
2085 XK_grave, XK_i, 0x00EC,
2086 XK_grave, XK_n, 0x01F9,
2087 XK_grave, XK_o, 0x00F2,
2088 XK_grave, XK_u, 0x00F9,
2089 XK_grave, XK_w, 0x1E81,
2090 XK_grave, XK_y, 0x1EF3,
2091 XK_grave, XK_Acircumflex, 0x1EA6,
2092 XK_grave, XK_Ecircumflex, 0x1EC0,
2093 XK_grave, XK_Ocircumflex, 0x1ED2,
2094 XK_grave, 0x00DC, 0x01DB,
2095 XK_grave, XK_acircumflex, 0x1EA7,
2096 XK_grave, XK_ecircumflex, 0x1EC1,
2097 XK_grave, XK_ocircumflex, 0x1ED3,
2098 XK_grave, XK_udiaeresis, 0x01DC,
2099 XK_grave, XK_Ohorn, 0x1EDC,
2100 XK_grave, XK_ohorn, 0x1EDD,
2101 XK_grave, XK_Uhorn, 0x1EEA,
2102 XK_grave, XK_uhorn, 0x1EEB,
2103 XK_grave, XK_Abreve, 0x1EB0,
2104 XK_grave, XK_abreve, 0x1EB1,
2105 XK_grave, XK_Emacron, 0x1E14,
2106 XK_grave, XK_emacron, 0x1E15,
2107 XK_grave, XK_Omacron, 0x1E50,
2108 XK_grave, XK_omacron, 0x1E51,
2109 XK_grave, XK_Cyrillic_ie, 0x0450,
2110 XK_grave, XK_Cyrillic_i, 0x045D,
2111 XK_grave, XK_Cyrillic_IE, 0x0400,
2112 XK_grave, XK_Cyrillic_I, 0x040D,
2113 XK_grave, XK_Greek_iotadieresis, 0x1FD2,
2114 XK_grave, XK_Greek_upsilondieresis, 0x1FE2,
2115 XK_grave, XK_Greek_ALPHA, 0x1FBA,
2116 XK_grave, XK_Greek_EPSILON, 0x1FC8,
2117 XK_grave, XK_Greek_ETA, 0x1FCA,
2118 XK_grave, XK_Greek_IOTA, 0x1FDA,
2119 XK_grave, XK_Greek_OMICRON, 0x1FF8,
2120 XK_grave, XK_Greek_UPSILON, 0x1FEA,
2121 XK_grave, XK_Greek_OMEGA, 0x1FFA,
2122 XK_grave, XK_Greek_alpha, 0x1F70,
2123 XK_grave, XK_Greek_epsilon, 0x1F72,
2124 XK_grave, XK_Greek_eta, 0x1F74,
2125 XK_grave, XK_Greek_iota, 0x1F76,
2126 XK_grave, XK_Greek_omicron, 0x1F78,
2127 XK_grave, XK_Greek_upsilon, 0x1F7A,
2128 XK_grave, XK_Greek_omega, 0x1F7C,
2129 XK_grave, 0x1F00, 0x1F02,
2130 XK_grave, 0x1F01, 0x1F03,
2131 XK_grave, 0x1F08, 0x1F0A,
2132 XK_grave, 0x1F09, 0x1F0B,
2133 XK_grave, 0x1F10, 0x1F12,
2134 XK_grave, 0x1F11, 0x1F13,
2135 XK_grave, 0x1F18, 0x1F1A,
2136 XK_grave, 0x1F19, 0x1F1B,
2137 XK_grave, 0x1F20, 0x1F22,
2138 XK_grave, 0x1F21, 0x1F23,
2139 XK_grave, 0x1F28, 0x1F2A,
2140 XK_grave, 0x1F29, 0x1F2B,
2141 XK_grave, 0x1F30, 0x1F32,
2142 XK_grave, 0x1F31, 0x1F33,
2143 XK_grave, 0x1F38, 0x1F3A,
2144 XK_grave, 0x1F39, 0x1F3B,
2145 XK_grave, 0x1F40, 0x1F42,
2146 XK_grave, 0x1F41, 0x1F43,
2147 XK_grave, 0x1F48, 0x1F4A,
2148 XK_grave, 0x1F49, 0x1F4B,
2149 XK_grave, 0x1F50, 0x1F52,
2150 XK_grave, 0x1F51, 0x1F53,
2151 XK_grave, 0x1F59, 0x1F5B,
2152 XK_grave, 0x1F60, 0x1F62,
2153 XK_grave, 0x1F61, 0x1F63,
2154 XK_grave, 0x1F68, 0x1F6A,
2155 XK_grave, 0x1F69, 0x1F6B,
2156 XK_a, XK_quotedbl, 0x00E4,
2157 XK_a, XK_apostrophe, 0x00E1,
2158 XK_a, XK_parenleft, 0x0103,
2159 XK_a, XK_asterisk, 0x00E5,
2160 XK_a, XK_comma, 0x0105,
2161 XK_a, XK_minus, 0x00E3,
2162 XK_a, XK_greater, 0x00E2,
2163 XK_a, XK_asciicircum, 0x00E2,
2164 XK_a, XK_underscore, 0x00AA,
2165 XK_a, XK_grave, 0x00E0,
2166 XK_a, XK_a, 0x00E5,
2167 XK_a, XK_e, 0x00E6,
2168 XK_a, XK_asciitilde, 0x00E3,
2169 XK_a, XK_diaeresis, 0x00E4,
2170 XK_a, XK_acute, 0x00E1,
2171 XK_b, XK_period, 0x1E03,
2172 XK_b, XK_A, 0x0102,
2173 XK_b, XK_E, 0x0114,
2174 XK_b, XK_G, 0x011E,
2175 XK_b, XK_I, 0x012C,
2176 XK_b, XK_O, 0x014E,
2177 XK_b, XK_U, 0x016C,
2178 XK_b, XK_a, 0x0103,
2179 XK_b, XK_e, 0x0115,
2180 XK_b, XK_g, 0x011F,
2181 XK_b, XK_i, 0x012D,
2182 XK_b, XK_o, 0x014F,
2183 XK_b, XK_u, 0x016D,
2184 XK_b, 0x0228, 0x1E1C,
2185 XK_b, 0x0229, 0x1E1D,
2186 XK_b, XK_Cyrillic_a, 0x04D1,
2187 XK_b, XK_Cyrillic_ie, 0x04D7,
2188 XK_b, XK_Cyrillic_i, 0x0439,
2189 XK_b, XK_Cyrillic_u, 0x045E,
2190 XK_b, XK_Cyrillic_zhe, 0x04C2,
2191 XK_b, XK_Cyrillic_A, 0x04D0,
2192 XK_b, XK_Cyrillic_IE, 0x04D6,
2193 XK_b, XK_Cyrillic_I, 0x0419,
2194 XK_b, XK_Cyrillic_U, 0x040E,
2195 XK_b, XK_Cyrillic_ZHE, 0x04C1,
2196 XK_b, XK_Greek_ALPHA, 0x1FB8,
2197 XK_b, XK_Greek_IOTA, 0x1FD8,
2198 XK_b, XK_Greek_UPSILON, 0x1FE8,
2199 XK_b, XK_Greek_alpha, 0x1FB0,
2200 XK_b, XK_Greek_iota, 0x1FD0,
2201 XK_b, XK_Greek_upsilon, 0x1FE0,
2202 XK_b, 0x1EA0, 0x1EB6,
2203 XK_b, 0x1EA1, 0x1EB7,
2204 XK_c, XK_apostrophe, 0x0107,
2205 XK_c, XK_comma, 0x00E7,
2206 XK_c, XK_period, 0x010B,
2207 XK_c, XK_slash, 0x00A2,
2208 XK_c, XK_0, 0x00A9,
2209 XK_c, XK_less, 0x010D,
2210 XK_c, XK_equal, 0x20AC,
2211 XK_c, XK_A, 0x01CD,
2212 XK_c, XK_C, 0x010C,
2213 XK_c, XK_D, 0x010E,
2214 XK_c, XK_E, 0x011A,
2215 XK_c, XK_G, 0x01E6,
2216 XK_c, XK_H, 0x021E,
2217 XK_c, XK_I, 0x01CF,
2218 XK_c, XK_K, 0x01E8,
2219 XK_c, XK_L, 0x013D,
2220 XK_c, XK_N, 0x0147,
2221 XK_c, XK_O, 0x00A9,
2222 XK_c, XK_R, 0x0158,
2223 XK_c, XK_S, 0x0160,
2224 XK_c, XK_T, 0x0164,
2225 XK_c, XK_U, 0x01D3,
2226 XK_c, XK_Z, 0x017D,
2227 XK_c, XK_a, 0x01CE,
2228 XK_c, XK_c, 0x010D,
2229 XK_c, XK_d, 0x010F,
2230 XK_c, XK_e, 0x011B,
2231 XK_c, XK_g, 0x01E7,
2232 XK_c, XK_h, 0x021F,
2233 XK_c, XK_i, 0x01D0,
2234 XK_c, XK_j, 0x01F0,
2235 XK_c, XK_k, 0x01E9,
2236 XK_c, XK_l, 0x013E,
2237 XK_c, XK_n, 0x0148,
2238 XK_c, XK_o, 0x00A9,
2239 XK_c, XK_r, 0x0159,
2240 XK_c, XK_s, 0x0161,
2241 XK_c, XK_t, 0x0165,
2242 XK_c, XK_u, 0x01D4,
2243 XK_c, XK_z, 0x017E,
2244 XK_c, XK_bar, 0x00A2,
2245 XK_c, 0x00DC, 0x01D9,
2246 XK_c, XK_udiaeresis, 0x01DA,
2247 XK_c, 0x01B7, 0x01EE,
2248 XK_c, 0x0292, 0x01EF,
2249 XK_d, XK_minus, 0x0111,
2250 XK_d, XK_period, 0x1E0B,
2251 XK_d, XK_less, 0x010F,
2252 XK_d, XK_h, 0x00F0,
2253 XK_e, XK_quotedbl, 0x00EB,
2254 XK_e, XK_apostrophe, 0x00E9,
2255 XK_e, XK_comma, 0x0119,
2256 XK_e, XK_minus, 0x0113,
2257 XK_e, XK_period, 0x0117,
2258 XK_e, XK_less, 0x011B,
2259 XK_e, XK_equal, 0x20AC,
2260 XK_e, XK_greater, 0x00EA,
2261 XK_e, XK_asciicircum, 0x00EA,
2262 XK_e, XK_underscore, 0x0113,
2263 XK_e, XK_grave, 0x00E8,
2264 XK_e, XK_e, 0x0259,
2265 XK_e, XK_diaeresis, 0x00EB,
2266 XK_e, XK_acute, 0x00E9,
2267 XK_f, XK_period, 0x1E1F,
2268 XK_f, XK_S, 0x017F,
2269 XK_f, XK_s, 0x017F,
2270 XK_g, XK_parenleft, 0x011F,
2271 XK_g, XK_comma, 0x0123,
2272 XK_g, XK_period, 0x0121,
2273 XK_g, XK_U, 0x011F,
2274 XK_g, XK_breve, 0x011F,
2275 XK_i, XK_quotedbl, 0x00EF,
2276 XK_i, XK_apostrophe, 0x00ED,
2277 XK_i, XK_comma, 0x012F,
2278 XK_i, XK_minus, 0x012B,
2279 XK_i, XK_period, 0x0131,
2280 XK_i, XK_greater, 0x00EE,
2281 XK_i, XK_asciicircum, 0x00EE,
2282 XK_i, XK_underscore, 0x012B,
2283 XK_i, XK_grave, 0x00EC,
2284 XK_i, XK_asciitilde, 0x0129,
2285 XK_i, XK_diaeresis, 0x00EF,
2286 XK_i, XK_acute, 0x00ED,
2287 XK_k, XK_comma, 0x0137,
2288 XK_k, XK_k, 0x0138,
2289 XK_l, XK_apostrophe, 0x013A,
2290 XK_l, XK_comma, 0x013C,
2291 XK_l, XK_minus, 0x00A3,
2292 XK_l, XK_slash, 0x0142,
2293 XK_l, XK_less, 0x013E,
2294 XK_l, XK_equal, 0x00A3,
2295 XK_l, XK_v, 0x007C,
2296 XK_m, XK_period, 0x1E41,
2297 XK_m, XK_slash, 0x20A5,
2298 XK_m, XK_u, 0x00B5,
2299 XK_n, XK_apostrophe, 0x0144,
2300 XK_n, XK_comma, 0x0146,
2301 XK_n, XK_minus, 0x00F1,
2302 XK_n, XK_less, 0x0148,
2303 XK_n, XK_g, 0x014B,
2304 XK_n, XK_asciitilde, 0x00F1,
2305 XK_o, XK_quotedbl, 0x00F6,
2306 XK_o, XK_apostrophe, 0x00F3,
2307 XK_o, XK_minus, 0x00F5,
2308 XK_o, XK_slash, 0x00F8,
2309 XK_o, XK_greater, 0x00F4,
2310 XK_o, XK_A, 0x00C5,
2311 XK_o, XK_C, 0x00A9,
2312 XK_o, XK_R, 0x00AE,
2313 XK_o, XK_U, 0x016E,
2314 XK_o, XK_X, 0x00A4,
2315 XK_o, XK_asciicircum, 0x00F4,
2316 XK_o, XK_underscore, 0x00BA,
2317 XK_o, XK_grave, 0x00F2,
2318 XK_o, XK_a, 0x00E5,
2319 XK_o, XK_c, 0x00A9,
2320 XK_o, XK_e, 0x0153,
2321 XK_o, XK_o, 0x00B0,
2322 XK_o, XK_r, 0x00AE,
2323 XK_o, XK_s, 0x00A7,
2324 XK_o, XK_u, 0x016F,
2325 XK_o, XK_w, 0x1E98,
2326 XK_o, XK_x, 0x00A4,
2327 XK_o, XK_y, 0x1E99,
2328 XK_o, XK_asciitilde, 0x00F5,
2329 XK_o, XK_diaeresis, 0x00F6,
2330 XK_o, XK_acute, 0x00F3,
2331 XK_p, XK_exclam, 0x00B6,
2332 XK_p, XK_period, 0x1E57,
2333 XK_r, XK_apostrophe, 0x0155,
2334 XK_r, XK_comma, 0x0157,
2335 XK_r, XK_less, 0x0159,
2336 XK_s, XK_exclam, 0x00A7,
2337 XK_s, XK_apostrophe, 0x015B,
2338 XK_s, XK_comma, 0x015F,
2339 XK_s, XK_period, 0x1E61,
2340 XK_s, XK_0, 0x00A7,
2341 XK_s, XK_1, 0x00B9,
2342 XK_s, XK_2, 0x00B2,
2343 XK_s, XK_3, 0x00B3,
2344 XK_s, XK_less, 0x0161,
2345 XK_s, XK_M, 0x2120,
2346 XK_s, XK_m, 0x2120,
2347 XK_s, XK_o, 0x00A7,
2348 XK_s, XK_s, 0x00DF,
2349 XK_s, XK_cedilla, 0x015F,
2350 XK_t, XK_minus, 0x0167,
2351 XK_t, XK_period, 0x1E6B,
2352 XK_t, XK_slash, 0x0167,
2353 XK_t, XK_less, 0x0165,
2354 XK_t, XK_M, 0x2122,
2355 XK_t, XK_h, 0x00FE,
2356 XK_t, XK_m, 0x2122,
2357 XK_u, XK_quotedbl, 0x00FC,
2358 XK_u, XK_apostrophe, 0x00FA,
2359 XK_u, XK_asterisk, 0x016F,
2360 XK_u, XK_comma, 0x0173,
2361 XK_u, XK_minus, 0x016B,
2362 XK_u, XK_slash, 0x00B5,
2363 XK_u, XK_greater, 0x00FB,
2364 XK_u, XK_asciicircum, 0x00FB,
2365 XK_u, XK_underscore, 0x016B,
2366 XK_u, XK_grave, 0x00F9,
2367 XK_u, XK_u, 0x016D,
2368 XK_u, XK_asciitilde, 0x0169,
2369 XK_u, XK_diaeresis, 0x00FC,
2370 XK_u, XK_acute, 0x00FA,
2371 XK_v, XK_Z, 0x017D,
2372 XK_v, XK_l, 0x007C,
2373 XK_v, XK_z, 0x017E,
2374 XK_w, XK_asciicircum, 0x0175,
2375 XK_x, XK_0, 0x00A4,
2376 XK_x, XK_O, 0x00A4,
2377 XK_x, XK_o, 0x00A4,
2378 XK_x, XK_x, 0x00D7,
2379 XK_y, XK_quotedbl, 0x00FF,
2380 XK_y, XK_apostrophe, 0x00FD,
2381 XK_y, XK_minus, 0x00A5,
2382 XK_y, XK_equal, 0x00A5,
2383 XK_y, XK_asciicircum, 0x0177,
2384 XK_y, XK_diaeresis, 0x00FF,
2385 XK_y, XK_acute, 0x00FD,
2386 XK_z, XK_apostrophe, 0x017A,
2387 XK_z, XK_period, 0x017C,
2388 XK_z, XK_less, 0x017E,
2389 XK_bar, XK_C, 0x00A2,
2390 XK_bar, XK_c, 0x00A2,
2391 XK_asciitilde, XK_space, 0x007E,
2392 XK_asciitilde, XK_A, 0x00C3,
2393 XK_asciitilde, XK_E, 0x1EBC,
2394 XK_asciitilde, XK_I, 0x0128,
2395 XK_asciitilde, XK_N, 0x00D1,
2396 XK_asciitilde, XK_O, 0x00D5,
2397 XK_asciitilde, XK_U, 0x0168,
2398 XK_asciitilde, XK_V, 0x1E7C,
2399 XK_asciitilde, XK_Y, 0x1EF8,
2400 XK_asciitilde, XK_a, 0x00E3,
2401 XK_asciitilde, XK_e, 0x1EBD,
2402 XK_asciitilde, XK_i, 0x0129,
2403 XK_asciitilde, XK_n, 0x00F1,
2404 XK_asciitilde, XK_o, 0x00F5,
2405 XK_asciitilde, XK_u, 0x0169,
2406 XK_asciitilde, XK_v, 0x1E7D,
2407 XK_asciitilde, XK_y, 0x1EF9,
2408 XK_asciitilde, XK_Acircumflex, 0x1EAA,
2409 XK_asciitilde, XK_Ecircumflex, 0x1EC4,
2410 XK_asciitilde, XK_Ocircumflex, 0x1ED6,
2411 XK_asciitilde, XK_acircumflex, 0x1EAB,
2412 XK_asciitilde, XK_ecircumflex, 0x1EC5,
2413 XK_asciitilde, XK_ocircumflex, 0x1ED7,
2414 XK_asciitilde, XK_Ohorn, 0x1EE0,
2415 XK_asciitilde, XK_ohorn, 0x1EE1,
2416 XK_asciitilde, XK_Uhorn, 0x1EEE,
2417 XK_asciitilde, XK_uhorn, 0x1EEF,
2418 XK_asciitilde, XK_Abreve, 0x1EB4,
2419 XK_asciitilde, XK_abreve, 0x1EB5,
2420 XK_asciitilde, XK_Greek_iotadieresis, 0x1FD7,
2421 XK_asciitilde, XK_Greek_upsilondieresis, 0x1FE7,
2422 XK_asciitilde, XK_Greek_alpha, 0x1FB6,
2423 XK_asciitilde, XK_Greek_eta, 0x1FC6,
2424 XK_asciitilde, XK_Greek_iota, 0x1FD6,
2425 XK_asciitilde, XK_Greek_upsilon, 0x1FE6,
2426 XK_asciitilde, XK_Greek_omega, 0x1FF6,
2427 XK_asciitilde, 0x1F00, 0x1F06,
2428 XK_asciitilde, 0x1F01, 0x1F07,
2429 XK_asciitilde, 0x1F08, 0x1F0E,
2430 XK_asciitilde, 0x1F09, 0x1F0F,
2431 XK_asciitilde, 0x1F20, 0x1F26,
2432 XK_asciitilde, 0x1F21, 0x1F27,
2433 XK_asciitilde, 0x1F28, 0x1F2E,
2434 XK_asciitilde, 0x1F29, 0x1F2F,
2435 XK_asciitilde, 0x1F30, 0x1F36,
2436 XK_asciitilde, 0x1F31, 0x1F37,
2437 XK_asciitilde, 0x1F38, 0x1F3E,
2438 XK_asciitilde, 0x1F39, 0x1F3F,
2439 XK_asciitilde, 0x1F50, 0x1F56,
2440 XK_asciitilde, 0x1F51, 0x1F57,
2441 XK_asciitilde, 0x1F59, 0x1F5F,
2442 XK_asciitilde, 0x1F60, 0x1F66,
2443 XK_asciitilde, 0x1F61, 0x1F67,
2444 XK_asciitilde, 0x1F68, 0x1F6E,
2445 XK_asciitilde, 0x1F69, 0x1F6F,
2446 XK_diaeresis, XK_apostrophe, 0x0385,
2447 XK_diaeresis, XK_A, 0x00C4,
2448 XK_diaeresis, XK_E, 0x00CB,
2449 XK_diaeresis, XK_I, 0x00CF,
2450 XK_diaeresis, XK_O, 0x00D6,
2451 XK_diaeresis, XK_U, 0x00DC,
2452 XK_diaeresis, XK_Y, 0x0178,
2453 XK_diaeresis, XK_grave, 0x1FED,
2454 XK_diaeresis, XK_a, 0x00E4,
2455 XK_diaeresis, XK_e, 0x00EB,
2456 XK_diaeresis, XK_i, 0x00EF,
2457 XK_diaeresis, XK_o, 0x00F6,
2458 XK_diaeresis, XK_u, 0x00FC,
2459 XK_diaeresis, XK_y, 0x00FF,
2460 XK_diaeresis, XK_asciitilde, 0x1FC1,
2461 XK_diaeresis, XK_acute, 0x0385,
2462 XK_diaeresis, XK_dead_grave, 0x1FED,
2463 XK_diaeresis, XK_dead_acute, 0x0385,
2464 XK_diaeresis, XK_dead_tilde, 0x1FC1,
2465 XK_macron, XK_A, 0x0100,
2466 XK_macron, XK_E, 0x0112,
2467 XK_macron, XK_G, 0x1E20,
2468 XK_macron, XK_I, 0x012A,
2469 XK_macron, XK_O, 0x014C,
2470 XK_macron, XK_U, 0x016A,
2471 XK_macron, XK_Y, 0x0232,
2472 XK_macron, XK_a, 0x0101,
2473 XK_macron, XK_e, 0x0113,
2474 XK_macron, XK_g, 0x1E21,
2475 XK_macron, XK_i, 0x012B,
2476 XK_macron, XK_o, 0x014D,
2477 XK_macron, XK_u, 0x016B,
2478 XK_macron, XK_y, 0x0233,
2479 XK_macron, XK_Adiaeresis, 0x01DE,
2480 XK_macron, XK_AE, 0x01E2,
2481 XK_macron, XK_Otilde, 0x022C,
2482 XK_macron, XK_Odiaeresis, 0x022A,
2483 XK_macron, 0x00DC, 0x01D5,
2484 XK_macron, XK_adiaeresis, 0x01DF,
2485 XK_macron, XK_ae, 0x01E3,
2486 XK_macron, XK_otilde, 0x022D,
2487 XK_macron, XK_odiaeresis, 0x022B,
2488 XK_macron, XK_udiaeresis, 0x01D6,
2489 XK_macron, 0x01EA, 0x01EC,
2490 XK_macron, 0x01EB, 0x01ED,
2491 XK_macron, 0x0226, 0x01E0,
2492 XK_macron, 0x0227, 0x01E1,
2493 XK_macron, 0x022E, 0x0230,
2494 XK_macron, 0x022F, 0x0231,
2495 XK_macron, XK_Cyrillic_i, 0x04E3,
2496 XK_macron, XK_Cyrillic_u, 0x04EF,
2497 XK_macron, XK_Cyrillic_I, 0x04E2,
2498 XK_macron, XK_Cyrillic_U, 0x04EE,
2499 XK_macron, XK_Greek_ALPHA, 0x1FB9,
2500 XK_macron, XK_Greek_IOTA, 0x1FD9,
2501 XK_macron, XK_Greek_UPSILON, 0x1FE9,
2502 XK_macron, XK_Greek_alpha, 0x1FB1,
2503 XK_macron, XK_Greek_iota, 0x1FD1,
2504 XK_macron, XK_Greek_upsilon, 0x1FE1,
2505 XK_macron, 0x1E36, 0x1E38,
2506 XK_macron, 0x1E37, 0x1E39,
2507 XK_macron, 0x1E5A, 0x1E5C,
2508 XK_macron, 0x1E5B, 0x1E5D,
2509 XK_acute, XK_A, 0x00C1,
2510 XK_acute, XK_C, 0x0106,
2511 XK_acute, XK_E, 0x00C9,
2512 XK_acute, XK_G, 0x01F4,
2513 XK_acute, XK_I, 0x00CD,
2514 XK_acute, XK_K, 0x1E30,
2515 XK_acute, XK_L, 0x0139,
2516 XK_acute, XK_M, 0x1E3E,
2517 XK_acute, XK_N, 0x0143,
2518 XK_acute, XK_O, 0x00D3,
2519 XK_acute, XK_P, 0x1E54,
2520 XK_acute, XK_R, 0x0154,
2521 XK_acute, XK_S, 0x015A,
2522 XK_acute, XK_U, 0x00DA,
2523 XK_acute, XK_W, 0x1E82,
2524 XK_acute, XK_Y, 0x00DD,
2525 XK_acute, XK_Z, 0x0179,
2526 XK_acute, XK_a, 0x00E1,
2527 XK_acute, XK_c, 0x0107,
2528 XK_acute, XK_e, 0x00E9,
2529 XK_acute, XK_g, 0x01F5,
2530 XK_acute, XK_i, 0x00ED,
2531 XK_acute, XK_k, 0x1E31,
2532 XK_acute, XK_l, 0x013A,
2533 XK_acute, XK_m, 0x1E3F,
2534 XK_acute, XK_n, 0x0144,
2535 XK_acute, XK_o, 0x00F3,
2536 XK_acute, XK_p, 0x1E55,
2537 XK_acute, XK_r, 0x0155,
2538 XK_acute, XK_s, 0x015B,
2539 XK_acute, XK_u, 0x00FA,
2540 XK_acute, XK_w, 0x1E83,
2541 XK_acute, XK_y, 0x00FD,
2542 XK_acute, XK_z, 0x017A,
2543 XK_acute, XK_Acircumflex, 0x1EA4,
2544 XK_acute, XK_Aring, 0x01FA,
2545 XK_acute, XK_AE, 0x01FC,
2546 XK_acute, XK_Ccedilla, 0x1E08,
2547 XK_acute, XK_Ecircumflex, 0x1EBE,
2548 XK_acute, XK_Idiaeresis, 0x1E2E,
2549 XK_acute, XK_Ocircumflex, 0x1ED0,
2550 XK_acute, XK_Otilde, 0x1E4C,
2551 XK_acute, XK_Ooblique, 0x01FE,
2552 XK_acute, 0x00DC, 0x01D7,
2553 XK_acute, XK_acircumflex, 0x1EA5,
2554 XK_acute, XK_aring, 0x01FB,
2555 XK_acute, XK_ae, 0x01FD,
2556 XK_acute, XK_ccedilla, 0x1E09,
2557 XK_acute, XK_ecircumflex, 0x1EBF,
2558 XK_acute, XK_idiaeresis, 0x1E2F,
2559 XK_acute, XK_ocircumflex, 0x1ED1,
2560 XK_acute, XK_otilde, 0x1E4D,
2561 XK_acute, XK_oslash, 0x01FF,
2562 XK_acute, XK_udiaeresis, 0x01D8,
2563 XK_acute, XK_Ohorn, 0x1EDA,
2564 XK_acute, XK_ohorn, 0x1EDB,
2565 XK_acute, XK_Uhorn, 0x1EE8,
2566 XK_acute, XK_uhorn, 0x1EE9,
2567 XK_acute, XK_Abreve, 0x1EAE,
2568 XK_acute, XK_abreve, 0x1EAF,
2569 XK_acute, XK_Emacron, 0x1E16,
2570 XK_acute, XK_emacron, 0x1E17,
2571 XK_acute, XK_Omacron, 0x1E52,
2572 XK_acute, XK_Utilde, 0x1E78,
2573 XK_acute, XK_omacron, 0x1E53,
2574 XK_acute, XK_utilde, 0x1E79,
2575 XK_acute, XK_Cyrillic_ghe, 0x0453,
2576 XK_acute, XK_Cyrillic_ka, 0x045C,
2577 XK_acute, XK_Cyrillic_GHE, 0x0403,
2578 XK_acute, XK_Cyrillic_KA, 0x040C,
2579 XK_acute, XK_Greek_iotadieresis, 0x0390,
2580 XK_acute, XK_Greek_upsilondieresis, 0x03B0,
2581 XK_acute, XK_Greek_ALPHA, 0x0386,
2582 XK_acute, XK_Greek_EPSILON, 0x0388,
2583 XK_acute, XK_Greek_ETA, 0x0389,
2584 XK_acute, XK_Greek_IOTA, 0x038A,
2585 XK_acute, XK_Greek_OMICRON, 0x038C,
2586 XK_acute, XK_Greek_UPSILON, 0x038E,
2587 XK_acute, XK_Greek_OMEGA, 0x038F,
2588 XK_acute, XK_Greek_alpha, 0x03AC,
2589 XK_acute, XK_Greek_epsilon, 0x03AD,
2590 XK_acute, XK_Greek_eta, 0x03AE,
2591 XK_acute, XK_Greek_iota, 0x03AF,
2592 XK_acute, XK_Greek_omicron, 0x03CC,
2593 XK_acute, XK_Greek_upsilon, 0x03CD,
2594 XK_acute, XK_Greek_omega, 0x03CE,
2595 XK_acute, 0x1F00, 0x1F04,
2596 XK_acute, 0x1F01, 0x1F05,
2597 XK_acute, 0x1F08, 0x1F0C,
2598 XK_acute, 0x1F09, 0x1F0D,
2599 XK_acute, 0x1F10, 0x1F14,
2600 XK_acute, 0x1F11, 0x1F15,
2601 XK_acute, 0x1F18, 0x1F1C,
2602 XK_acute, 0x1F19, 0x1F1D,
2603 XK_acute, 0x1F20, 0x1F24,
2604 XK_acute, 0x1F21, 0x1F25,
2605 XK_acute, 0x1F28, 0x1F2C,
2606 XK_acute, 0x1F29, 0x1F2D,
2607 XK_acute, 0x1F30, 0x1F34,
2608 XK_acute, 0x1F31, 0x1F35,
2609 XK_acute, 0x1F38, 0x1F3C,
2610 XK_acute, 0x1F39, 0x1F3D,
2611 XK_acute, 0x1F40, 0x1F44,
2612 XK_acute, 0x1F41, 0x1F45,
2613 XK_acute, 0x1F48, 0x1F4C,
2614 XK_acute, 0x1F49, 0x1F4D,
2615 XK_acute, 0x1F50, 0x1F54,
2616 XK_acute, 0x1F51, 0x1F55,
2617 XK_acute, 0x1F59, 0x1F5D,
2618 XK_acute, 0x1F60, 0x1F64,
2619 XK_acute, 0x1F61, 0x1F65,
2620 XK_acute, 0x1F68, 0x1F6C,
2621 XK_acute, 0x1F69, 0x1F6D,
2622 XK_cedilla, XK_C, 0x00C7,
2623 XK_cedilla, XK_D, 0x1E10,
2624 XK_cedilla, XK_E, 0x0228,
2625 XK_cedilla, XK_G, 0x0122,
2626 XK_cedilla, XK_H, 0x1E28,
2627 XK_cedilla, XK_K, 0x0136,
2628 XK_cedilla, XK_L, 0x013B,
2629 XK_cedilla, XK_N, 0x0145,
2630 XK_cedilla, XK_R, 0x0156,
2631 XK_cedilla, XK_S, 0x015E,
2632 XK_cedilla, XK_T, 0x0162,
2633 XK_cedilla, XK_c, 0x00E7,
2634 XK_cedilla, XK_d, 0x1E11,
2635 XK_cedilla, XK_e, 0x0229,
2636 XK_cedilla, XK_g, 0x0123,
2637 XK_cedilla, XK_h, 0x1E29,
2638 XK_cedilla, XK_k, 0x0137,
2639 XK_cedilla, XK_l, 0x013C,
2640 XK_cedilla, XK_n, 0x0146,
2641 XK_cedilla, XK_r, 0x0157,
2642 XK_cedilla, XK_s, 0x015F,
2643 XK_cedilla, XK_t, 0x0163,
2644 XK_breve, XK_G, 0x011E,
2645 XK_breve, XK_g, 0x011F,
2646 0x05B4, XK_hebrew_yod, 0xFB1D,
2647 0x05B7, 0x05F2, 0xFB1F,
2648 0x05B7, XK_hebrew_aleph, 0xFB2E,
2649 0x05B8, XK_hebrew_aleph, 0xFB2F,
2650 0x05B9, XK_hebrew_waw, 0xFB4B,
2651 0x05BC, XK_hebrew_aleph, 0xFB30,
2652 0x05BC, XK_hebrew_beth, 0xFB31,
2653 0x05BC, XK_hebrew_gimmel, 0xFB32,
2654 0x05BC, XK_hebrew_daleth, 0xFB33,
2655 0x05BC, XK_hebrew_he, 0xFB34,
2656 0x05BC, XK_hebrew_waw, 0xFB35,
2657 0x05BC, XK_hebrew_zayin, 0xFB36,
2658 0x05BC, XK_hebrew_teth, 0xFB38,
2659 0x05BC, XK_hebrew_yod, 0xFB39,
2660 0x05BC, XK_hebrew_finalkaph, 0xFB3A,
2661 0x05BC, XK_hebrew_kaph, 0xFB3B,
2662 0x05BC, XK_hebrew_lamed, 0xFB3C,
2663 0x05BC, XK_hebrew_mem, 0xFB3E,
2664 0x05BC, XK_hebrew_nun, 0xFB40,
2665 0x05BC, XK_hebrew_samekh, 0xFB41,
2666 0x05BC, XK_hebrew_finalpe, 0xFB43,
2667 0x05BC, XK_hebrew_pe, 0xFB44,
2668 0x05BC, XK_hebrew_zadi, 0xFB46,
2669 0x05BC, XK_hebrew_qoph, 0xFB47,
2670 0x05BC, XK_hebrew_resh, 0xFB48,
2671 0x05BC, XK_hebrew_shin, 0xFB49,
2672 0x05BC, XK_hebrew_taw, 0xFB4A,
2673 0x05BF, XK_hebrew_beth, 0xFB4C,
2674 0x05BF, XK_hebrew_kaph, 0xFB4D,
2675 0x05BF, XK_hebrew_pe, 0xFB4E,
2676 0x05C1, XK_hebrew_shin, 0xFB2A,
2677 0x05C1, 0xFB49, 0xFB2C,
2678 0x05C2, XK_hebrew_shin, 0xFB2B,
2679 0x05C2, 0xFB49, 0xFB2D,
2680 0x0653, XK_Arabic_alef, 0x0622,
2681 0x0654, XK_Arabic_alef, 0x0623,
2682 0x0654, XK_Arabic_waw, 0x0624,
2683 0x0654, XK_Arabic_yeh, 0x0626,
2684 0x0654, 0x06C1, 0x06C2,
2685 0x0654, 0x06D2, 0x06D3,
2686 0x0654, 0x06D5, 0x06C0,
2687 0x0655, XK_Arabic_alef, 0x0625,
2688 XK_Cyrillic_pe, XK_Cyrillic_a, 0x00A7,
2689 XK_Cyrillic_IE, XK_equal, 0x20AC,
2690 XK_Cyrillic_EN, XK_Cyrillic_o, 0x2116,
2691 XK_Cyrillic_EN, XK_Cyrillic_O, 0x2116,
2692 XK_Cyrillic_ES, XK_equal, 0x20AC,
2693 XK_Greek_ALPHA, XK_apostrophe, 0x0386,
2694 XK_Greek_EPSILON, XK_apostrophe, 0x0388,
2695 XK_Greek_ETA, XK_apostrophe, 0x0389,
2696 XK_Greek_IOTA, XK_quotedbl, 0x03AA,
2697 XK_Greek_IOTA, XK_apostrophe, 0x038A,
2698 XK_Greek_OMICRON, XK_apostrophe, 0x038C,
2699 XK_Greek_UPSILON, XK_quotedbl, 0x03AB,
2700 XK_Greek_UPSILON, XK_apostrophe, 0x038E,
2701 XK_Greek_OMEGA, XK_apostrophe, 0x038F,
2702 XK_Greek_alpha, XK_apostrophe, 0x03AC,
2703 XK_Greek_epsilon, XK_apostrophe, 0x03AD,
2704 XK_Greek_eta, XK_apostrophe, 0x03AE,
2705 XK_Greek_iota, XK_quotedbl, 0x03CA,
2706 XK_Greek_iota, XK_apostrophe, 0x03AF,
2707 XK_Greek_iota, XK_Greek_alphaaccent, 0x1FB4,
2708 XK_Greek_iota, XK_Greek_etaaccent, 0x1FC4,
2709 XK_Greek_iota, XK_Greek_omegaaccent, 0x1FF4,
2710 XK_Greek_iota, XK_Greek_ALPHA, 0x1FBC,
2711 XK_Greek_iota, XK_Greek_ETA, 0x1FCC,
2712 XK_Greek_iota, XK_Greek_OMEGA, 0x1FFC,
2713 XK_Greek_iota, XK_Greek_alpha, 0x1FB3,
2714 XK_Greek_iota, XK_Greek_eta, 0x1FC3,
2715 XK_Greek_iota, XK_Greek_omega, 0x1FF3,
2716 XK_Greek_iota, 0x1F00, 0x1F80,
2717 XK_Greek_iota, 0x1F01, 0x1F81,
2718 XK_Greek_iota, 0x1F02, 0x1F82,
2719 XK_Greek_iota, 0x1F03, 0x1F83,
2720 XK_Greek_iota, 0x1F04, 0x1F84,
2721 XK_Greek_iota, 0x1F05, 0x1F85,
2722 XK_Greek_iota, 0x1F06, 0x1F86,
2723 XK_Greek_iota, 0x1F07, 0x1F87,
2724 XK_Greek_iota, 0x1F08, 0x1F88,
2725 XK_Greek_iota, 0x1F09, 0x1F89,
2726 XK_Greek_iota, 0x1F0A, 0x1F8A,
2727 XK_Greek_iota, 0x1F0B, 0x1F8B,
2728 XK_Greek_iota, 0x1F0C, 0x1F8C,
2729 XK_Greek_iota, 0x1F0D, 0x1F8D,
2730 XK_Greek_iota, 0x1F0E, 0x1F8E,
2731 XK_Greek_iota, 0x1F0F, 0x1F8F,
2732 XK_Greek_iota, 0x1F20, 0x1F90,
2733 XK_Greek_iota, 0x1F21, 0x1F91,
2734 XK_Greek_iota, 0x1F22, 0x1F92,
2735 XK_Greek_iota, 0x1F23, 0x1F93,
2736 XK_Greek_iota, 0x1F24, 0x1F94,
2737 XK_Greek_iota, 0x1F25, 0x1F95,
2738 XK_Greek_iota, 0x1F26, 0x1F96,
2739 XK_Greek_iota, 0x1F27, 0x1F97,
2740 XK_Greek_iota, 0x1F28, 0x1F98,
2741 XK_Greek_iota, 0x1F29, 0x1F99,
2742 XK_Greek_iota, 0x1F2A, 0x1F9A,
2743 XK_Greek_iota, 0x1F2B, 0x1F9B,
2744 XK_Greek_iota, 0x1F2C, 0x1F9C,
2745 XK_Greek_iota, 0x1F2D, 0x1F9D,
2746 XK_Greek_iota, 0x1F2E, 0x1F9E,
2747 XK_Greek_iota, 0x1F2F, 0x1F9F,
2748 XK_Greek_iota, 0x1F60, 0x1FA0,
2749 XK_Greek_iota, 0x1F61, 0x1FA1,
2750 XK_Greek_iota, 0x1F62, 0x1FA2,
2751 XK_Greek_iota, 0x1F63, 0x1FA3,
2752 XK_Greek_iota, 0x1F64, 0x1FA4,
2753 XK_Greek_iota, 0x1F65, 0x1FA5,
2754 XK_Greek_iota, 0x1F66, 0x1FA6,
2755 XK_Greek_iota, 0x1F67, 0x1FA7,
2756 XK_Greek_iota, 0x1F68, 0x1FA8,
2757 XK_Greek_iota, 0x1F69, 0x1FA9,
2758 XK_Greek_iota, 0x1F6A, 0x1FAA,
2759 XK_Greek_iota, 0x1F6B, 0x1FAB,
2760 XK_Greek_iota, 0x1F6C, 0x1FAC,
2761 XK_Greek_iota, 0x1F6D, 0x1FAD,
2762 XK_Greek_iota, 0x1F6E, 0x1FAE,
2763 XK_Greek_iota, 0x1F6F, 0x1FAF,
2764 XK_Greek_iota, 0x1F70, 0x1FB2,
2765 XK_Greek_iota, 0x1F74, 0x1FC2,
2766 XK_Greek_iota, 0x1F7C, 0x1FF2,
2767 XK_Greek_iota, 0x1FB6, 0x1FB7,
2768 XK_Greek_iota, 0x1FC6, 0x1FC7,
2769 XK_Greek_iota, 0x1FF6, 0x1FF7,
2770 XK_Greek_omicron, XK_apostrophe, 0x03CC,
2771 XK_Greek_upsilon, XK_quotedbl, 0x03CB,
2772 XK_Greek_upsilon, XK_apostrophe, 0x03CD,
2773 XK_Greek_omega, XK_apostrophe, 0x03CE,
2774 XK_lessthanequal, 0x0338, 0x2270,
2775 XK_greaterthanequal, 0x0338, 0x2271,
2776 XK_approximate, 0x0338, 0x2247,
2777 XK_identical, 0x0338, 0x2262,
2778 XK_includedin, 0x0338, 0x2284,
2779 XK_includes, 0x0338, 0x2285,
2780 0x093C, 0x0915, 0x0958,
2781 0x093C, 0x0916, 0x0959,
2782 0x093C, 0x0917, 0x095A,
2783 0x093C, 0x091C, 0x095B,
2784 0x093C, 0x0921, 0x095C,
2785 0x093C, 0x0922, 0x095D,
2786 0x093C, 0x0928, 0x0929,
2787 0x093C, 0x092B, 0x095E,
2788 0x093C, 0x092F, 0x095F,
2789 0x093C, 0x0930, 0x0931,
2790 0x093C, 0x0933, 0x0934,
2791 0x09BC, 0x09A1, 0x09DC,
2792 0x09BC, 0x09A2, 0x09DD,
2793 0x09BC, 0x09AF, 0x09DF,
2794 0x09C7, 0x09BE, 0x09CB,
2795 0x09C7, 0x09D7, 0x09CC,
2796 0x0A3C, 0x0A16, 0x0A59,
2797 0x0A3C, 0x0A17, 0x0A5A,
2798 0x0A3C, 0x0A1C, 0x0A5B,
2799 0x0A3C, 0x0A2B, 0x0A5E,
2800 0x0A3C, 0x0A32, 0x0A33,
2801 0x0A3C, 0x0A38, 0x0A36,
2802 0x0B3C, 0x0B21, 0x0B5C,
2803 0x0B3C, 0x0B22, 0x0B5D,
2804 0x0B47, 0x0B3E, 0x0B4B,
2805 0x0B47, 0x0B56, 0x0B48,
2806 0x0B47, 0x0B57, 0x0B4C,
2807 XK_leftcaret, 0x0338, 0x226E,
2808 XK_rightcaret, 0x0338, 0x226F,
2809 XK_underbar, XK_parenleft, 0x208D,
2810 XK_underbar, XK_parenright, 0x208E,
2811 XK_underbar, XK_plus, 0x208A,
2812 XK_underbar, XK_0, 0x2080,
2813 XK_underbar, XK_1, 0x2081,
2814 XK_underbar, XK_2, 0x2082,
2815 XK_underbar, XK_3, 0x2083,
2816 XK_underbar, XK_4, 0x2084,
2817 XK_underbar, XK_5, 0x2085,
2818 XK_underbar, XK_6, 0x2086,
2819 XK_underbar, XK_7, 0x2087,
2820 XK_underbar, XK_8, 0x2088,
2821 XK_underbar, XK_9, 0x2089,
2822 XK_underbar, XK_equal, 0x208C,
2823 0x0BC6, 0x0BBE, 0x0BCA,
2824 0x0BC6, 0x0BD7, 0x0BCC,
2825 XK_underbar, 0x2212, 0x208B,
2826 XK_underbar, XK_KP_Space, 0x2082,
2827 XK_underbar, XK_KP_Add, 0x208A,
2828 XK_underbar, XK_KP_0, 0x2080,
2829 XK_underbar, XK_KP_1, 0x2081,
2830 XK_underbar, XK_KP_2, 0x2082,
2831 XK_underbar, XK_KP_3, 0x2083,
2832 XK_underbar, XK_KP_4, 0x2084,
2833 XK_underbar, XK_KP_5, 0x2085,
2834 XK_underbar, XK_KP_6, 0x2086,
2835 XK_underbar, XK_KP_7, 0x2087,
2836 XK_underbar, XK_KP_8, 0x2088,
2837 XK_underbar, XK_KP_9, 0x2089,
2838 XK_underbar, XK_KP_Equal, 0x208C,
2839 0x0BC7, 0x0BBE, 0x0BCB,
2840 0x0BD7, 0x0B92, 0x0B94,
2841 XK_rightshoe, 0x0338, 0x2285,
2842 XK_leftshoe, 0x0338, 0x2284,
2843 XK_righttack, 0x0338, 0x22AC,
2844 0x0C46, 0x0C56, 0x0C48,
2845 0x0CBF, 0x0CD5, 0x0CC0,
2846 0x0CC6, 0x0CC2, 0x0CCA,
2847 0x0CC6, 0x0CD5, 0x0CC7,
2848 0x0CC6, 0x0CD6, 0x0CC8,
2849 0x0CCA, 0x0CD5, 0x0CCB,
2850 0x0D46, 0x0D3E, 0x0D4A,
2851 0x0D46, 0x0D57, 0x0D4C,
2852 0x0D47, 0x0D3E, 0x0D4B,
2853 0x0DD9, 0x0DCA, 0x0DDA,
2854 0x0DD9, 0x0DCF, 0x0DDC,
2855 0x0DD9, 0x0DDF, 0x0DDE,
2856 0x0DDC, 0x0DCA, 0x0DDD,
2857 0x0F71, 0x0F72, 0x0F73,
2858 0x0F71, 0x0F74, 0x0F75,
2859 0x0F71, 0x0F80, 0x0F81,
2860 0x0F90, 0x0FB5, 0x0FB9,
2861 0x0F92, 0x0FB7, 0x0F93,
2862 0x0F9C, 0x0FB7, 0x0F9D,
2863 0x0FA1, 0x0FB7, 0x0FA2,
2864 0x0FA6, 0x0FB7, 0x0FA7,
2865 0x0FAB, 0x0FB7, 0x0FAC,
2866 0x0FB2, 0x0F80, 0x0F76,
2867 0x0FB3, 0x0F80, 0x0F78,
2868 0x0FB5, 0x0F40, 0x0F69,
2869 0x0FB7, 0x0F42, 0x0F43,
2870 0x0FB7, 0x0F4C, 0x0F4D,
2871 0x0FB7, 0x0F51, 0x0F52,
2872 0x0FB7, 0x0F56, 0x0F57,
2873 0x0FB7, 0x0F5B, 0x0F5C,
2874 0x102E, 0x1025, 0x1026,
2875 0x1100, 0x1100, 0x1101,
2876 0x1102, 0x1100, 0x1113,
2877 0x1102, 0x1102, 0x1114,
2878 0x1102, 0x1103, 0x1115,
2879 0x1102, 0x1107, 0x1116,
2880 0x1103, 0x1100, 0x1117,
2881 0x1103, 0x1103, 0x1104,
2882 0x1105, 0x1102, 0x1118,
2883 0x1105, 0x1105, 0x1119,
2884 0x1105, 0x110B, 0x111B,
2885 0x1105, 0x1112, 0x111A,
2886 0x1106, 0x1107, 0x111C,
2887 0x1106, 0x110B, 0x111D,
2888 0x1107, 0x1100, 0x111E,
2889 0x1107, 0x1102, 0x111F,
2890 0x1107, 0x1103, 0x1120,
2891 0x1107, 0x1107, 0x1108,
2892 0x1107, 0x1109, 0x1121,
2893 0x1107, 0x110A, 0x1125,
2894 0x1107, 0x110B, 0x112B,
2895 0x1107, 0x110C, 0x1127,
2896 0x1107, 0x110E, 0x1128,
2897 0x1107, 0x1110, 0x1129,
2898 0x1107, 0x1111, 0x112A,
2899 0x1107, 0x112B, 0x112C,
2900 0x1107, 0x112D, 0x1122,
2901 0x1107, 0x112F, 0x1123,
2902 0x1107, 0x1132, 0x1124,
2903 0x1107, 0x1136, 0x1126,
2904 0x1108, 0x110B, 0x112C,
2905 0x1109, 0x1100, 0x112D,
2906 0x1109, 0x1102, 0x112E,
2907 0x1109, 0x1103, 0x112F,
2908 0x1109, 0x1105, 0x1130,
2909 0x1109, 0x1106, 0x1131,
2910 0x1109, 0x1107, 0x1132,
2911 0x1109, 0x1109, 0x110A,
2912 0x1109, 0x110A, 0x1134,
2913 0x1109, 0x110B, 0x1135,
2914 0x1109, 0x110C, 0x1136,
2915 0x1109, 0x110E, 0x1137,
2916 0x1109, 0x110F, 0x1138,
2917 0x1109, 0x1110, 0x1139,
2918 0x1109, 0x1111, 0x113A,
2919 0x1109, 0x1112, 0x113B,
2920 0x1109, 0x111E, 0x1133,
2921 0x110A, 0x1109, 0x1134,
2922 0x110B, 0x1100, 0x1141,
2923 0x110B, 0x1103, 0x1142,
2924 0x110B, 0x1106, 0x1143,
2925 0x110B, 0x1107, 0x1144,
2926 0x110B, 0x1109, 0x1145,
2927 0x110B, 0x110B, 0x1147,
2928 0x110B, 0x110C, 0x1148,
2929 0x110B, 0x110E, 0x1149,
2930 0x110B, 0x1110, 0x114A,
2931 0x110B, 0x1111, 0x114B,
2932 0x110B, 0x1140, 0x1146,
2933 0x110C, 0x110B, 0x114D,
2934 0x110C, 0x110C, 0x110D,
2935 0x110E, 0x110F, 0x1152,
2936 0x110E, 0x1112, 0x1153,
2937 0x1111, 0x1107, 0x1156,
2938 0x1111, 0x110B, 0x1157,
2939 0x1112, 0x1112, 0x1158,
2940 0x1121, 0x1100, 0x1122,
2941 0x1121, 0x1103, 0x1123,
2942 0x1121, 0x1107, 0x1124,
2943 0x1121, 0x1109, 0x1125,
2944 0x1121, 0x110C, 0x1126,
2945 0x1132, 0x1100, 0x1133,
2946 0x113C, 0x113C, 0x113D,
2947 0x113E, 0x113E, 0x113F,
2948 0x114E, 0x114E, 0x114F,
2949 0x1150, 0x1150, 0x1151,
2950 0x1161, 0x1169, 0x1176,
2951 0x1161, 0x116E, 0x1177,
2952 0x1161, 0x1175, 0x1162,
2953 0x1163, 0x1169, 0x1178,
2954 0x1163, 0x116D, 0x1179,
2955 0x1163, 0x1175, 0x1164,
2956 0x1165, 0x1169, 0x117A,
2957 0x1165, 0x116E, 0x117B,
2958 0x1165, 0x1173, 0x117C,
2959 0x1165, 0x1175, 0x1166,
2960 0x1167, 0x1169, 0x117D,
2961 0x1167, 0x116E, 0x117E,
2962 0x1167, 0x1175, 0x1168,
2963 0x1169, 0x1161, 0x116A,
2964 0x1169, 0x1162, 0x116B,
2965 0x1169, 0x1165, 0x117F,
2966 0x1169, 0x1166, 0x1180,
2967 0x1169, 0x1168, 0x1181,
2968 0x1169, 0x1169, 0x1182,
2969 0x1169, 0x116E, 0x1183,
2970 0x1169, 0x1175, 0x116C,
2971 0x116A, 0x1175, 0x116B,
2972 0x116D, 0x1163, 0x1184,
2973 0x116D, 0x1164, 0x1185,
2974 0x116D, 0x1167, 0x1186,
2975 0x116D, 0x1169, 0x1187,
2976 0x116D, 0x1175, 0x1188,
2977 0x116E, 0x1161, 0x1189,
2978 0x116E, 0x1162, 0x118A,
2979 0x116E, 0x1165, 0x116F,
2980 0x116E, 0x1166, 0x1170,
2981 0x116E, 0x1168, 0x118C,
2982 0x116E, 0x116E, 0x118D,
2983 0x116E, 0x1175, 0x1171,
2984 0x116E, 0x117C, 0x118B,
2985 0x116F, 0x1173, 0x118B,
2986 0x116F, 0x1175, 0x1170,
2987 0x1172, 0x1161, 0x118E,
2988 0x1172, 0x1165, 0x118F,
2989 0x1172, 0x1166, 0x1190,
2990 0x1172, 0x1167, 0x1191,
2991 0x1172, 0x1168, 0x1192,
2992 0x1172, 0x116E, 0x1193,
2993 0x1172, 0x1175, 0x1194,
2994 0x1173, 0x116E, 0x1195,
2995 0x1173, 0x1173, 0x1196,
2996 0x1173, 0x1175, 0x1174,
2997 0x1174, 0x116E, 0x1197,
2998 0x1175, 0x1161, 0x1198,
2999 0x1175, 0x1163, 0x1199,
3000 0x1175, 0x1169, 0x119A,
3001 0x1175, 0x116E, 0x119B,
3002 0x1175, 0x1173, 0x119C,
3003 0x1175, 0x119E, 0x119D,
3004 0x119E, 0x1165, 0x119F,
3005 0x119E, 0x116E, 0x11A0,
3006 0x119E, 0x1175, 0x11A1,
3007 0x119E, 0x119E, 0x11A2,
3008 0x11A8, 0x11A8, 0x11A9,
3009 0x11A8, 0x11AF, 0x11C3,
3010 0x11A8, 0x11BA, 0x11AA,
3011 0x11A8, 0x11E7, 0x11C4,
3012 0x11AA, 0x11A8, 0x11C4,
3013 0x11AB, 0x11A8, 0x11C5,
3014 0x11AB, 0x11AE, 0x11C6,
3015 0x11AB, 0x11BA, 0x11C7,
3016 0x11AB, 0x11BD, 0x11AC,
3017 0x11AB, 0x11C0, 0x11C9,
3018 0x11AB, 0x11C2, 0x11AD,
3019 0x11AB, 0x11EB, 0x11C8,
3020 0x11AE, 0x11A8, 0x11CA,
3021 0x11AE, 0x11AF, 0x11CB,
3022 0x11AF, 0x11A8, 0x11B0,
3023 0x11AF, 0x11AA, 0x11CC,
3024 0x11AF, 0x11AB, 0x11CD,
3025 0x11AF, 0x11AE, 0x11CE,
3026 0x11AF, 0x11AF, 0x11D0,
3027 0x11AF, 0x11B7, 0x11B1,
3028 0x11AF, 0x11B8, 0x11B2,
3029 0x11AF, 0x11B9, 0x11D3,
3030 0x11AF, 0x11BA, 0x11B3,
3031 0x11AF, 0x11BB, 0x11D6,
3032 0x11AF, 0x11BF, 0x11D8,
3033 0x11AF, 0x11C0, 0x11B4,
3034 0x11AF, 0x11C1, 0x11B5,
3035 0x11AF, 0x11C2, 0x11B6,
3036 0x11AF, 0x11DA, 0x11D1,
3037 0x11AF, 0x11DD, 0x11D2,
3038 0x11AF, 0x11E5, 0x11D4,
3039 0x11AF, 0x11E6, 0x11D5,
3040 0x11AF, 0x11EB, 0x11D7,
3041 0x11AF, 0x11F9, 0x11D9,
3042 0x11B0, 0x11BA, 0x11CC,
3043 0x11B1, 0x11A8, 0x11D1,
3044 0x11B1, 0x11BA, 0x11D2,
3045 0x11B2, 0x11BA, 0x11D3,
3046 0x11B2, 0x11BC, 0x11D5,
3047 0x11B2, 0x11C2, 0x11D4,
3048 0x11B3, 0x11BA, 0x11D6,
3049 0x11B7, 0x11A8, 0x11DA,
3050 0x11B7, 0x11AF, 0x11DB,
3051 0x11B7, 0x11B8, 0x11DC,
3052 0x11B7, 0x11BA, 0x11DD,
3053 0x11B7, 0x11BB, 0x11DE,
3054 0x11B7, 0x11BC, 0x11E2,
3055 0x11B7, 0x11BE, 0x11E0,
3056 0x11B7, 0x11C2, 0x11E1,
3057 0x11B7, 0x11EB, 0x11DF,
3058 0x11B8, 0x11AF, 0x11E3,
3059 0x11B8, 0x11BA, 0x11B9,
3060 0x11B8, 0x11BC, 0x11E6,
3061 0x11B8, 0x11C1, 0x11E4,
3062 0x11B8, 0x11C2, 0x11E5,
3063 0x11BA, 0x11A8, 0x11E7,
3064 0x11BA, 0x11AE, 0x11E8,
3065 0x11BA, 0x11AF, 0x11E9,
3066 0x11BA, 0x11B8, 0x11EA,
3067 0x11BA, 0x11BA, 0x11BB,
3068 0x11BC, 0x11A8, 0x11EC,
3069 0x11BC, 0x11A9, 0x11ED,
3070 0x11BC, 0x11BC, 0x11EE,
3071 0x11BC, 0x11BF, 0x11EF,
3072 0x11C1, 0x11B8, 0x11F3,
3073 0x11C1, 0x11BC, 0x11F4,
3074 0x11C2, 0x11AB, 0x11F5,
3075 0x11C2, 0x11AF, 0x11F6,
3076 0x11C2, 0x11B7, 0x11F7,
3077 0x11C2, 0x11B8, 0x11F8,
3078 0x11CE, 0x11C2, 0x11CF,
3079 0x11DD, 0x11BA, 0x11DE,
3080 0x11EC, 0x11A8, 0x11ED,
3081 0x11F0, 0x11BA, 0x11F1,
3082 0x11F0, 0x11EB, 0x11F2,
3083 0x1FBF, XK_apostrophe, 0x1FCE,
3084 0x1FBF, XK_grave, 0x1FCD,
3085 0x1FBF, XK_asciitilde, 0x1FCF,
3086 0x1FBF, XK_acute, 0x1FCE,
3087 0x1FBF, XK_dead_grave, 0x1FCD,
3088 0x1FBF, XK_dead_acute, 0x1FCE,
3089 0x1FBF, XK_dead_tilde, 0x1FCF,
3090 0x1FFE, XK_apostrophe, 0x1FDE,
3091 0x1FFE, XK_grave, 0x1FDD,
3092 0x1FFE, XK_asciitilde, 0x1FDF,
3093 0x1FFE, XK_acute, 0x1FDE,
3094 0x1FFE, XK_dead_grave, 0x1FDD,
3095 0x1FFE, XK_dead_acute, 0x1FDE,
3096 0x1FFE, XK_dead_tilde, 0x1FDF,
3097 0x2203, 0x0338, 0x2204,
3098 0x2208, 0x0338, 0x2209,
3099 0x220B, 0x0338, 0x220C,
3100 0x2223, 0x0338, 0x2224,
3101 0x2225, 0x0338, 0x2226,
3102 0x223C, 0x0338, 0x2241,
3103 0x2243, 0x0338, 0x2244,
3104 0x2248, 0x0338, 0x2249,
3105 0x224D, 0x0338, 0x226D,
3106 0x2272, 0x0338, 0x2274,
3107 0x2273, 0x0338, 0x2275,
3108 0x2276, 0x0338, 0x2278,
3109 0x2277, 0x0338, 0x2279,
3110 0x227A, 0x0338, 0x2280,
3111 0x227B, 0x0338, 0x2281,
3112 0x227C, 0x0338, 0x22E0,
3113 0x227D, 0x0338, 0x22E1,
3114 0x2286, 0x0338, 0x2288,
3115 0x2287, 0x0338, 0x2289,
3116 0x2291, 0x0338, 0x22E2,
3117 0x2292, 0x0338, 0x22E3,
3118 0x22A8, 0x0338, 0x22AD,
3119 0x22A9, 0x0338, 0x22AE,
3120 0x22AB, 0x0338, 0x22AF,
3121 0x22B2, 0x0338, 0x22EA,
3122 0x22B3, 0x0338, 0x22EB,
3123 0x22B4, 0x0338, 0x22EC,
3124 0x22B5, 0x0338, 0x22ED,
3125 0x2ADD, 0x0338, 0x2ADC,
3126 XK_KP_Divide, XK_D, 0x0110,
3127 XK_KP_Divide, XK_G, 0x01E4,
3128 XK_KP_Divide, XK_H, 0x0126,
3129 XK_KP_Divide, XK_I, 0x0197,
3130 XK_KP_Divide, XK_L, 0x0141,
3131 XK_KP_Divide, XK_O, 0x00D8,
3132 XK_KP_Divide, XK_T, 0x0166,
3133 XK_KP_Divide, XK_Z, 0x01B5,
3134 XK_KP_Divide, XK_b, 0x0180,
3135 XK_KP_Divide, XK_d, 0x0111,
3136 XK_KP_Divide, XK_g, 0x01E5,
3137 XK_KP_Divide, XK_h, 0x0127,
3138 XK_KP_Divide, XK_i, 0x0268,
3139 XK_KP_Divide, XK_l, 0x0142,
3140 XK_KP_Divide, XK_o, 0x00F8,
3141 XK_KP_Divide, XK_t, 0x0167,
3142 XK_KP_Divide, XK_z, 0x01B6,
3143 XK_KP_Divide, 0x0294, 0x02A1,
3144 XK_KP_Divide, 0x04AE, 0x04B0,
3145 XK_KP_Divide, 0x04AF, 0x04B1,
3146 XK_KP_Divide, XK_Cyrillic_ghe, 0x0493,
3147 XK_KP_Divide, XK_Cyrillic_ka, 0x049F,
3148 XK_KP_Divide, XK_Cyrillic_GHE, 0x0492,
3149 XK_KP_Divide, XK_Cyrillic_KA, 0x049E,
3150 XK_KP_Divide, XK_leftarrow, 0x219A,
3151 XK_KP_Divide, XK_rightarrow, 0x219B,
3152 XK_KP_Divide, 0x2194, 0x21AE,
3153 XK_KP_Equal, 0x0338, 0x2260,
3154 XK_exclam, XK_plus, XK_O, 0x1EE2,
3155 XK_exclam, XK_plus, XK_U, 0x1EF0,
3156 XK_exclam, XK_plus, XK_o, 0x1EE3,
3157 XK_exclam, XK_plus, XK_u, 0x1EF1,
3158 XK_exclam, XK_dead_horn, XK_O, 0x1EE2,
3159 XK_exclam, XK_dead_horn, XK_U, 0x1EF0,
3160 XK_exclam, XK_dead_horn, XK_o, 0x1EE3,
3161 XK_exclam, XK_dead_horn, XK_u, 0x1EF1,
3162 XK_quotedbl, XK_apostrophe, XK_space, 0x0385,
3163 XK_quotedbl, XK_apostrophe, XK_Greek_iota, 0x0390,
3164 XK_quotedbl, XK_apostrophe, XK_Greek_upsilon, 0x03B0,
3165 XK_quotedbl, XK_underscore, XK_U, 0x1E7A,
3166 XK_quotedbl, XK_underscore, XK_u, 0x1E7B,
3167 XK_quotedbl, XK_asciitilde, XK_O, 0x1E4E,
3168 XK_quotedbl, XK_asciitilde, XK_o, 0x1E4F,
3169 XK_quotedbl, XK_macron, XK_U, 0x1E7A,
3170 XK_quotedbl, XK_macron, XK_u, 0x1E7B,
3171 XK_quotedbl, XK_dead_tilde, XK_O, 0x1E4E,
3172 XK_quotedbl, XK_dead_tilde, XK_o, 0x1E4F,
3173 XK_quotedbl, XK_dead_macron, XK_U, 0x1E7A,
3174 XK_quotedbl, XK_dead_macron, XK_u, 0x1E7B,
3175 XK_apostrophe, XK_quotedbl, XK_space, 0x0385,
3176 XK_apostrophe, XK_quotedbl, XK_I, 0x1E2E,
3177 XK_apostrophe, XK_quotedbl, XK_U, 0x01D7,
3178 XK_apostrophe, XK_quotedbl, XK_i, 0x1E2F,
3179 XK_apostrophe, XK_quotedbl, XK_u, 0x01D8,
3180 XK_apostrophe, XK_quotedbl, XK_Greek_iota, 0x0390,
3181 XK_apostrophe, XK_quotedbl, XK_Greek_upsilon, 0x03B0,
3182 XK_apostrophe, XK_parenleft, XK_Greek_ALPHA, 0x1F0D,
3183 XK_apostrophe, XK_parenleft, XK_Greek_EPSILON, 0x1F1D,
3184 XK_apostrophe, XK_parenleft, XK_Greek_ETA, 0x1F2D,
3185 XK_apostrophe, XK_parenleft, XK_Greek_IOTA, 0x1F3D,
3186 XK_apostrophe, XK_parenleft, XK_Greek_OMICRON, 0x1F4D,
3187 XK_apostrophe, XK_parenleft, XK_Greek_UPSILON, 0x1F5D,
3188 XK_apostrophe, XK_parenleft, XK_Greek_OMEGA, 0x1F6D,
3189 XK_apostrophe, XK_parenleft, XK_Greek_alpha, 0x1F05,
3190 XK_apostrophe, XK_parenleft, XK_Greek_epsilon, 0x1F15,
3191 XK_apostrophe, XK_parenleft, XK_Greek_eta, 0x1F25,
3192 XK_apostrophe, XK_parenleft, XK_Greek_iota, 0x1F35,
3193 XK_apostrophe, XK_parenleft, XK_Greek_omicron, 0x1F45,
3194 XK_apostrophe, XK_parenleft, XK_Greek_upsilon, 0x1F55,
3195 XK_apostrophe, XK_parenleft, XK_Greek_omega, 0x1F65,
3196 XK_apostrophe, XK_parenright, XK_Greek_ALPHA, 0x1F0C,
3197 XK_apostrophe, XK_parenright, XK_Greek_EPSILON, 0x1F1C,
3198 XK_apostrophe, XK_parenright, XK_Greek_ETA, 0x1F2C,
3199 XK_apostrophe, XK_parenright, XK_Greek_IOTA, 0x1F3C,
3200 XK_apostrophe, XK_parenright, XK_Greek_OMICRON, 0x1F4C,
3201 XK_apostrophe, XK_parenright, XK_Greek_OMEGA, 0x1F6C,
3202 XK_apostrophe, XK_parenright, XK_Greek_alpha, 0x1F04,
3203 XK_apostrophe, XK_parenright, XK_Greek_epsilon, 0x1F14,
3204 XK_apostrophe, XK_parenright, XK_Greek_eta, 0x1F24,
3205 XK_apostrophe, XK_parenright, XK_Greek_iota, 0x1F34,
3206 XK_apostrophe, XK_parenright, XK_Greek_omicron, 0x1F44,
3207 XK_apostrophe, XK_parenright, XK_Greek_upsilon, 0x1F54,
3208 XK_apostrophe, XK_parenright, XK_Greek_omega, 0x1F64,
3209 XK_apostrophe, XK_plus, XK_O, 0x1EDA,
3210 XK_apostrophe, XK_plus, XK_U, 0x1EE8,
3211 XK_apostrophe, XK_plus, XK_o, 0x1EDB,
3212 XK_apostrophe, XK_plus, XK_u, 0x1EE9,
3213 XK_apostrophe, XK_slash, XK_O, 0x01FE,
3214 XK_apostrophe, XK_slash, XK_o, 0x01FF,
3215 XK_apostrophe, XK_asciicircum, XK_A, 0x1EA4,
3216 XK_apostrophe, XK_asciicircum, XK_E, 0x1EBE,
3217 XK_apostrophe, XK_asciicircum, XK_O, 0x1ED0,
3218 XK_apostrophe, XK_asciicircum, XK_a, 0x1EA5,
3219 XK_apostrophe, XK_asciicircum, XK_e, 0x1EBF,
3220 XK_apostrophe, XK_asciicircum, XK_o, 0x1ED1,
3221 XK_apostrophe, XK_underscore, XK_E, 0x1E16,
3222 XK_apostrophe, XK_underscore, XK_O, 0x1E52,
3223 XK_apostrophe, XK_underscore, XK_e, 0x1E17,
3224 XK_apostrophe, XK_underscore, XK_o, 0x1E53,
3225 XK_apostrophe, XK_b, XK_A, 0x1EAE,
3226 XK_apostrophe, XK_b, XK_a, 0x1EAF,
3227 XK_apostrophe, XK_asciitilde, XK_O, 0x1E4C,
3228 XK_apostrophe, XK_asciitilde, XK_U, 0x1E78,
3229 XK_apostrophe, XK_asciitilde, XK_o, 0x1E4D,
3230 XK_apostrophe, XK_asciitilde, XK_u, 0x1E79,
3231 XK_apostrophe, XK_macron, XK_E, 0x1E16,
3232 XK_apostrophe, XK_macron, XK_O, 0x1E52,
3233 XK_apostrophe, XK_macron, XK_e, 0x1E17,
3234 XK_apostrophe, XK_macron, XK_o, 0x1E53,
3235 XK_apostrophe, XK_cedilla, XK_C, 0x1E08,
3236 XK_apostrophe, XK_cedilla, XK_c, 0x1E09,
3237 XK_apostrophe, XK_dead_circumflex, XK_A, 0x1EA4,
3238 XK_apostrophe, XK_dead_circumflex, XK_E, 0x1EBE,
3239 XK_apostrophe, XK_dead_circumflex, XK_O, 0x1ED0,
3240 XK_apostrophe, XK_dead_circumflex, XK_a, 0x1EA5,
3241 XK_apostrophe, XK_dead_circumflex, XK_e, 0x1EBF,
3242 XK_apostrophe, XK_dead_circumflex, XK_o, 0x1ED1,
3243 XK_apostrophe, XK_dead_tilde, XK_O, 0x1E4C,
3244 XK_apostrophe, XK_dead_tilde, XK_U, 0x1E78,
3245 XK_apostrophe, XK_dead_tilde, XK_o, 0x1E4D,
3246 XK_apostrophe, XK_dead_tilde, XK_u, 0x1E79,
3247 XK_apostrophe, XK_dead_macron, XK_E, 0x1E16,
3248 XK_apostrophe, XK_dead_macron, XK_O, 0x1E52,
3249 XK_apostrophe, XK_dead_macron, XK_e, 0x1E17,
3250 XK_apostrophe, XK_dead_macron, XK_o, 0x1E53,
3251 XK_apostrophe, XK_dead_breve, XK_A, 0x1EAE,
3252 XK_apostrophe, XK_dead_breve, XK_a, 0x1EAF,
3253 XK_apostrophe, XK_dead_diaeresis, XK_I, 0x1E2E,
3254 XK_apostrophe, XK_dead_diaeresis, XK_U, 0x01D7,
3255 XK_apostrophe, XK_dead_diaeresis, XK_i, 0x1E2F,
3256 XK_apostrophe, XK_dead_diaeresis, XK_u, 0x01D8,
3257 XK_apostrophe, XK_dead_diaeresis, XK_Greek_iota, 0x0390,
3258 XK_apostrophe, XK_dead_diaeresis, XK_Greek_upsilon, 0x03B0,
3259 XK_apostrophe, XK_dead_abovering, XK_A, 0x01FA,
3260 XK_apostrophe, XK_dead_abovering, XK_a, 0x01FB,
3261 XK_apostrophe, XK_dead_cedilla, XK_C, 0x1E08,
3262 XK_apostrophe, XK_dead_cedilla, XK_c, 0x1E09,
3263 XK_apostrophe, XK_dead_horn, XK_O, 0x1EDA,
3264 XK_apostrophe, XK_dead_horn, XK_U, 0x1EE8,
3265 XK_apostrophe, XK_dead_horn, XK_o, 0x1EDB,
3266 XK_apostrophe, XK_dead_horn, XK_u, 0x1EE9,
3267 XK_apostrophe, XK_dead_psili, XK_Greek_ALPHA, 0x1F0C,
3268 XK_apostrophe, XK_dead_psili, XK_Greek_EPSILON, 0x1F1C,
3269 XK_apostrophe, XK_dead_psili, XK_Greek_ETA, 0x1F2C,
3270 XK_apostrophe, XK_dead_psili, XK_Greek_IOTA, 0x1F3C,
3271 XK_apostrophe, XK_dead_psili, XK_Greek_OMICRON, 0x1F4C,
3272 XK_apostrophe, XK_dead_psili, XK_Greek_OMEGA, 0x1F6C,
3273 XK_apostrophe, XK_dead_psili, XK_Greek_alpha, 0x1F04,
3274 XK_apostrophe, XK_dead_psili, XK_Greek_epsilon, 0x1F14,
3275 XK_apostrophe, XK_dead_psili, XK_Greek_eta, 0x1F24,
3276 XK_apostrophe, XK_dead_psili, XK_Greek_iota, 0x1F34,
3277 XK_apostrophe, XK_dead_psili, XK_Greek_omicron, 0x1F44,
3278 XK_apostrophe, XK_dead_psili, XK_Greek_upsilon, 0x1F54,
3279 XK_apostrophe, XK_dead_psili, XK_Greek_omega, 0x1F64,
3280 XK_apostrophe, XK_dead_dasia, XK_Greek_ALPHA, 0x1F0D,
3281 XK_apostrophe, XK_dead_dasia, XK_Greek_EPSILON, 0x1F1D,
3282 XK_apostrophe, XK_dead_dasia, XK_Greek_ETA, 0x1F2D,
3283 XK_apostrophe, XK_dead_dasia, XK_Greek_IOTA, 0x1F3D,
3284 XK_apostrophe, XK_dead_dasia, XK_Greek_OMICRON, 0x1F4D,
3285 XK_apostrophe, XK_dead_dasia, XK_Greek_UPSILON, 0x1F5D,
3286 XK_apostrophe, XK_dead_dasia, XK_Greek_OMEGA, 0x1F6D,
3287 XK_apostrophe, XK_dead_dasia, XK_Greek_alpha, 0x1F05,
3288 XK_apostrophe, XK_dead_dasia, XK_Greek_epsilon, 0x1F15,
3289 XK_apostrophe, XK_dead_dasia, XK_Greek_eta, 0x1F25,
3290 XK_apostrophe, XK_dead_dasia, XK_Greek_iota, 0x1F35,
3291 XK_apostrophe, XK_dead_dasia, XK_Greek_omicron, 0x1F45,
3292 XK_apostrophe, XK_dead_dasia, XK_Greek_upsilon, 0x1F55,
3293 XK_apostrophe, XK_dead_dasia, XK_Greek_omega, 0x1F65,
3294 XK_apostrophe, XK_KP_Divide, XK_O, 0x01FE,
3295 XK_apostrophe, XK_KP_Divide, XK_o, 0x01FF,
3296 XK_parenleft, XK_0, XK_parenright, 0x24EA,
3297 XK_parenleft, XK_1, XK_parenright, 0x2460,
3298 XK_parenleft, XK_2, XK_parenright, 0x2461,
3299 XK_parenleft, XK_3, XK_parenright, 0x2462,
3300 XK_parenleft, XK_4, XK_parenright, 0x2463,
3301 XK_parenleft, XK_5, XK_parenright, 0x2464,
3302 XK_parenleft, XK_6, XK_parenright, 0x2465,
3303 XK_parenleft, XK_7, XK_parenright, 0x2466,
3304 XK_parenleft, XK_8, XK_parenright, 0x2467,
3305 XK_parenleft, XK_9, XK_parenright, 0x2468,
3306 XK_parenleft, XK_A, XK_parenright, 0x24B6,
3307 XK_parenleft, XK_B, XK_parenright, 0x24B7,
3308 XK_parenleft, XK_C, XK_parenright, 0x24B8,
3309 XK_parenleft, XK_D, XK_parenright, 0x24B9,
3310 XK_parenleft, XK_E, XK_parenright, 0x24BA,
3311 XK_parenleft, XK_F, XK_parenright, 0x24BB,
3312 XK_parenleft, XK_G, XK_parenright, 0x24BC,
3313 XK_parenleft, XK_H, XK_parenright, 0x24BD,
3314 XK_parenleft, XK_I, XK_parenright, 0x24BE,
3315 XK_parenleft, XK_J, XK_parenright, 0x24BF,
3316 XK_parenleft, XK_K, XK_parenright, 0x24C0,
3317 XK_parenleft, XK_L, XK_parenright, 0x24C1,
3318 XK_parenleft, XK_M, XK_parenright, 0x24C2,
3319 XK_parenleft, XK_N, XK_parenright, 0x24C3,
3320 XK_parenleft, XK_O, XK_parenright, 0x24C4,
3321 XK_parenleft, XK_P, XK_parenright, 0x24C5,
3322 XK_parenleft, XK_Q, XK_parenright, 0x24C6,
3323 XK_parenleft, XK_R, XK_parenright, 0x24C7,
3324 XK_parenleft, XK_S, XK_parenright, 0x24C8,
3325 XK_parenleft, XK_T, XK_parenright, 0x24C9,
3326 XK_parenleft, XK_U, XK_parenright, 0x24CA,
3327 XK_parenleft, XK_V, XK_parenright, 0x24CB,
3328 XK_parenleft, XK_W, XK_parenright, 0x24CC,
3329 XK_parenleft, XK_X, XK_parenright, 0x24CD,
3330 XK_parenleft, XK_Y, XK_parenright, 0x24CE,
3331 XK_parenleft, XK_Z, XK_parenright, 0x24CF,
3332 XK_parenleft, XK_a, XK_parenright, 0x24D0,
3333 XK_parenleft, XK_b, XK_parenright, 0x24D1,
3334 XK_parenleft, XK_c, XK_parenright, 0x24D2,
3335 XK_parenleft, XK_d, XK_parenright, 0x24D3,
3336 XK_parenleft, XK_e, XK_parenright, 0x24D4,
3337 XK_parenleft, XK_f, XK_parenright, 0x24D5,
3338 XK_parenleft, XK_g, XK_parenright, 0x24D6,
3339 XK_parenleft, XK_h, XK_parenright, 0x24D7,
3340 XK_parenleft, XK_i, XK_parenright, 0x24D8,
3341 XK_parenleft, XK_j, XK_parenright, 0x24D9,
3342 XK_parenleft, XK_k, XK_parenright, 0x24DA,
3343 XK_parenleft, XK_l, XK_parenright, 0x24DB,
3344 XK_parenleft, XK_m, XK_parenright, 0x24DC,
3345 XK_parenleft, XK_n, XK_parenright, 0x24DD,
3346 XK_parenleft, XK_o, XK_parenright, 0x24DE,
3347 XK_parenleft, XK_p, XK_parenright, 0x24DF,
3348 XK_parenleft, XK_q, XK_parenright, 0x24E0,
3349 XK_parenleft, XK_r, XK_parenright, 0x24E1,
3350 XK_parenleft, XK_s, XK_parenright, 0x24E2,
3351 XK_parenleft, XK_t, XK_parenright, 0x24E3,
3352 XK_parenleft, XK_u, XK_parenright, 0x24E4,
3353 XK_parenleft, XK_v, XK_parenright, 0x24E5,
3354 XK_parenleft, XK_w, XK_parenright, 0x24E6,
3355 XK_parenleft, XK_x, XK_parenright, 0x24E7,
3356 XK_parenleft, XK_y, XK_parenright, 0x24E8,
3357 XK_parenleft, XK_z, XK_parenright, 0x24E9,
3358 XK_parenleft, XK_kana_WO, XK_parenright, 0x32FE,
3359 XK_parenleft, XK_kana_A, XK_parenright, 0x32D0,
3360 XK_parenleft, XK_kana_I, XK_parenright, 0x32D1,
3361 XK_parenleft, XK_kana_U, XK_parenright, 0x32D2,
3362 XK_parenleft, XK_kana_E, XK_parenright, 0x32D3,
3363 XK_parenleft, XK_kana_O, XK_parenright, 0x32D4,
3364 XK_parenleft, XK_kana_KA, XK_parenright, 0x32D5,
3365 XK_parenleft, XK_kana_KI, XK_parenright, 0x32D6,
3366 XK_parenleft, XK_kana_KU, XK_parenright, 0x32D7,
3367 XK_parenleft, XK_kana_KE, XK_parenright, 0x32D8,
3368 XK_parenleft, XK_kana_KO, XK_parenright, 0x32D9,
3369 XK_parenleft, XK_kana_SA, XK_parenright, 0x32DA,
3370 XK_parenleft, XK_kana_SHI, XK_parenright, 0x32DB,
3371 XK_parenleft, XK_kana_SU, XK_parenright, 0x32DC,
3372 XK_parenleft, XK_kana_SE, XK_parenright, 0x32DD,
3373 XK_parenleft, XK_kana_SO, XK_parenright, 0x32DE,
3374 XK_parenleft, XK_kana_TA, XK_parenright, 0x32DF,
3375 XK_parenleft, XK_kana_CHI, XK_parenright, 0x32E0,
3376 XK_parenleft, XK_kana_TSU, XK_parenright, 0x32E1,
3377 XK_parenleft, XK_kana_TE, XK_parenright, 0x32E2,
3378 XK_parenleft, XK_kana_TO, XK_parenright, 0x32E3,
3379 XK_parenleft, XK_kana_NA, XK_parenright, 0x32E4,
3380 XK_parenleft, XK_kana_NI, XK_parenright, 0x32E5,
3381 XK_parenleft, XK_kana_NU, XK_parenright, 0x32E6,
3382 XK_parenleft, XK_kana_NE, XK_parenright, 0x32E7,
3383 XK_parenleft, XK_kana_NO, XK_parenright, 0x32E8,
3384 XK_parenleft, XK_kana_HA, XK_parenright, 0x32E9,
3385 XK_parenleft, XK_kana_HI, XK_parenright, 0x32EA,
3386 XK_parenleft, XK_kana_FU, XK_parenright, 0x32EB,
3387 XK_parenleft, XK_kana_HE, XK_parenright, 0x32EC,
3388 XK_parenleft, XK_kana_HO, XK_parenright, 0x32ED,
3389 XK_parenleft, XK_kana_MA, XK_parenright, 0x32EE,
3390 XK_parenleft, XK_kana_MI, XK_parenright, 0x32EF,
3391 XK_parenleft, XK_kana_MU, XK_parenright, 0x32F0,
3392 XK_parenleft, XK_kana_ME, XK_parenright, 0x32F1,
3393 XK_parenleft, XK_kana_MO, XK_parenright, 0x32F2,
3394 XK_parenleft, XK_kana_YA, XK_parenright, 0x32F3,
3395 XK_parenleft, XK_kana_YU, XK_parenright, 0x32F4,
3396 XK_parenleft, XK_kana_YO, XK_parenright, 0x32F5,
3397 XK_parenleft, XK_kana_RA, XK_parenright, 0x32F6,
3398 XK_parenleft, XK_kana_RI, XK_parenright, 0x32F7,
3399 XK_parenleft, XK_kana_RU, XK_parenright, 0x32F8,
3400 XK_parenleft, XK_kana_RE, XK_parenright, 0x32F9,
3401 XK_parenleft, XK_kana_RO, XK_parenright, 0x32FA,
3402 XK_parenleft, XK_kana_WA, XK_parenright, 0x32FB,
3403 XK_parenleft, 0x1100, XK_parenright, 0x3260,
3404 XK_parenleft, 0x1102, XK_parenright, 0x3261,
3405 XK_parenleft, 0x1103, XK_parenright, 0x3262,
3406 XK_parenleft, 0x1105, XK_parenright, 0x3263,
3407 XK_parenleft, 0x1106, XK_parenright, 0x3264,
3408 XK_parenleft, 0x1107, XK_parenright, 0x3265,
3409 XK_parenleft, 0x1109, XK_parenright, 0x3266,
3410 XK_parenleft, 0x110B, XK_parenright, 0x3267,
3411 XK_parenleft, 0x110C, XK_parenright, 0x3268,
3412 XK_parenleft, 0x110E, XK_parenright, 0x3269,
3413 XK_parenleft, 0x110F, XK_parenright, 0x326A,
3414 XK_parenleft, 0x1110, XK_parenright, 0x326B,
3415 XK_parenleft, 0x1111, XK_parenright, 0x326C,
3416 XK_parenleft, 0x1112, XK_parenright, 0x326D,
3417 XK_parenleft, 0x30F0, XK_parenright, 0x32FC,
3418 XK_parenleft, 0x30F1, XK_parenright, 0x32FD,
3419 XK_parenleft, 0x4E00, XK_parenright, 0x3280,
3420 XK_parenleft, 0x4E03, XK_parenright, 0x3286,
3421 XK_parenleft, 0x4E09, XK_parenright, 0x3282,
3422 XK_parenleft, 0x4E0A, XK_parenright, 0x32A4,
3423 XK_parenleft, 0x4E0B, XK_parenright, 0x32A6,
3424 XK_parenleft, 0x4E2D, XK_parenright, 0x32A5,
3425 XK_parenleft, 0x4E5D, XK_parenright, 0x3288,
3426 XK_parenleft, 0x4E8C, XK_parenright, 0x3281,
3427 XK_parenleft, 0x4E94, XK_parenright, 0x3284,
3428 XK_parenleft, 0x4F01, XK_parenright, 0x32AD,
3429 XK_parenleft, 0x4F11, XK_parenright, 0x32A1,
3430 XK_parenleft, 0x512A, XK_parenright, 0x329D,
3431 XK_parenleft, 0x516B, XK_parenright, 0x3287,
3432 XK_parenleft, 0x516D, XK_parenright, 0x3285,
3433 XK_parenleft, 0x5199, XK_parenright, 0x32A2,
3434 XK_parenleft, 0x52B4, XK_parenright, 0x3298,
3435 XK_parenleft, 0x533B, XK_parenright, 0x32A9,
3436 XK_parenleft, 0x5341, XK_parenright, 0x3289,
3437 XK_parenleft, 0x5354, XK_parenright, 0x32AF,
3438 XK_parenleft, 0x5370, XK_parenright, 0x329E,
3439 XK_parenleft, 0x53F3, XK_parenright, 0x32A8,
3440 XK_parenleft, 0x540D, XK_parenright, 0x3294,
3441 XK_parenleft, 0x56DB, XK_parenright, 0x3283,
3442 XK_parenleft, 0x571F, XK_parenright, 0x328F,
3443 XK_parenleft, 0x591C, XK_parenright, 0x32B0,
3444 XK_parenleft, 0x5973, XK_parenright, 0x329B,
3445 XK_parenleft, 0x5B66, XK_parenright, 0x32AB,
3446 XK_parenleft, 0x5B97, XK_parenright, 0x32AA,
3447 XK_parenleft, 0x5DE6, XK_parenright, 0x32A7,
3448 XK_parenleft, 0x65E5, XK_parenright, 0x3290,
3449 XK_parenleft, 0x6708, XK_parenright, 0x328A,
3450 XK_parenleft, 0x6709, XK_parenright, 0x3292,
3451 XK_parenleft, 0x6728, XK_parenright, 0x328D,
3452 XK_parenleft, 0x682A, XK_parenright, 0x3291,
3453 XK_parenleft, 0x6B63, XK_parenright, 0x32A3,
3454 XK_parenleft, 0x6C34, XK_parenright, 0x328C,
3455 XK_parenleft, 0x6CE8, XK_parenright, 0x329F,
3456 XK_parenleft, 0x706B, XK_parenright, 0x328B,
3457 XK_parenleft, 0x7279, XK_parenright, 0x3295,
3458 XK_parenleft, 0x7537, XK_parenright, 0x329A,
3459 XK_parenleft, 0x76E3, XK_parenright, 0x32AC,
3460 XK_parenleft, 0x793E, XK_parenright, 0x3293,
3461 XK_parenleft, 0x795D, XK_parenright, 0x3297,
3462 XK_parenleft, 0x79D8, XK_parenright, 0x3299,
3463 XK_parenleft, 0x8CA1, XK_parenright, 0x3296,
3464 XK_parenleft, 0x8CC7, XK_parenright, 0x32AE,
3465 XK_parenleft, 0x9069, XK_parenright, 0x329C,
3466 XK_parenleft, 0x91D1, XK_parenright, 0x328E,
3467 XK_parenleft, 0x9805, XK_parenright, 0x32A0,
3468 XK_parenleft, XK_KP_Space, XK_parenright, 0x2461,
3469 XK_parenleft, XK_KP_0, XK_parenright, 0x24EA,
3470 XK_parenleft, XK_KP_1, XK_parenright, 0x2460,
3471 XK_parenleft, XK_KP_2, XK_parenright, 0x2461,
3472 XK_parenleft, XK_KP_3, XK_parenright, 0x2462,
3473 XK_parenleft, XK_KP_4, XK_parenright, 0x2463,
3474 XK_parenleft, XK_KP_5, XK_parenright, 0x2464,
3475 XK_parenleft, XK_KP_6, XK_parenright, 0x2465,
3476 XK_parenleft, XK_KP_7, XK_parenright, 0x2466,
3477 XK_parenleft, XK_KP_8, XK_parenright, 0x2467,
3478 XK_parenleft, XK_KP_9, XK_parenright, 0x2468,
3479 XK_minus, XK_minus, XK_space, 0x00AD,
3480 XK_minus, XK_minus, XK_minus, 0x2014,
3481 XK_minus, XK_minus, XK_period, 0x2013,
3482 XK_period, XK_exclam, XK_S, 0x1E68,
3483 XK_period, XK_exclam, XK_s, 0x1E69,
3484 XK_period, XK_apostrophe, XK_S, 0x1E64,
3485 XK_period, XK_apostrophe, XK_s, 0x1E65,
3486 XK_period, XK_acute, XK_S, 0x1E64,
3487 XK_period, XK_acute, XK_s, 0x1E65,
3488 XK_period, XK_dead_acute, XK_S, 0x1E64,
3489 XK_period, XK_dead_acute, XK_s, 0x1E65,
3490 XK_period, XK_dead_caron, XK_S, 0x1E66,
3491 XK_period, XK_dead_caron, XK_s, 0x1E67,
3492 XK_period, XK_dead_belowdot, XK_S, 0x1E68,
3493 XK_period, XK_dead_belowdot, XK_s, 0x1E69,
3494 XK_question, XK_plus, XK_O, 0x1EDE,
3495 XK_question, XK_plus, XK_U, 0x1EEC,
3496 XK_question, XK_plus, XK_o, 0x1EDF,
3497 XK_question, XK_plus, XK_u, 0x1EED,
3498 XK_question, XK_asciicircum, XK_A, 0x1EA8,
3499 XK_question, XK_asciicircum, XK_E, 0x1EC2,
3500 XK_question, XK_asciicircum, XK_O, 0x1ED4,
3501 XK_question, XK_asciicircum, XK_a, 0x1EA9,
3502 XK_question, XK_asciicircum, XK_e, 0x1EC3,
3503 XK_question, XK_asciicircum, XK_o, 0x1ED5,
3504 XK_question, XK_b, XK_A, 0x1EB2,
3505 XK_question, XK_b, XK_a, 0x1EB3,
3506 XK_question, XK_dead_circumflex, XK_A, 0x1EA8,
3507 XK_question, XK_dead_circumflex, XK_E, 0x1EC2,
3508 XK_question, XK_dead_circumflex, XK_O, 0x1ED4,
3509 XK_question, XK_dead_circumflex, XK_a, 0x1EA9,
3510 XK_question, XK_dead_circumflex, XK_e, 0x1EC3,
3511 XK_question, XK_dead_circumflex, XK_o, 0x1ED5,
3512 XK_question, XK_dead_breve, XK_A, 0x1EB2,
3513 XK_question, XK_dead_breve, XK_a, 0x1EB3,
3514 XK_question, XK_dead_horn, XK_O, 0x1EDE,
3515 XK_question, XK_dead_horn, XK_U, 0x1EEC,
3516 XK_question, XK_dead_horn, XK_o, 0x1EDF,
3517 XK_question, XK_dead_horn, XK_u, 0x1EED,
3518 XK_U, XK_exclam, XK_A, 0x1EB6,
3519 XK_U, XK_exclam, XK_a, 0x1EB7,
3520 XK_U, XK_comma, XK_E, 0x1E1C,
3521 XK_U, XK_comma, XK_e, 0x1E1D,
3522 XK_U, XK_cedilla, XK_E, 0x1E1C,
3523 XK_U, XK_cedilla, XK_e, 0x1E1D,
3524 XK_U, XK_dead_cedilla, XK_E, 0x1E1C,
3525 XK_U, XK_dead_cedilla, XK_e, 0x1E1D,
3526 XK_U, XK_dead_belowdot, XK_A, 0x1EB6,
3527 XK_U, XK_dead_belowdot, XK_a, 0x1EB7,
3528 XK_asciicircum, XK_exclam, XK_A, 0x1EAC,
3529 XK_asciicircum, XK_exclam, XK_E, 0x1EC6,
3530 XK_asciicircum, XK_exclam, XK_O, 0x1ED8,
3531 XK_asciicircum, XK_exclam, XK_a, 0x1EAD,
3532 XK_asciicircum, XK_exclam, XK_e, 0x1EC7,
3533 XK_asciicircum, XK_exclam, XK_o, 0x1ED9,
3534 XK_asciicircum, XK_underscore, XK_a, 0x00AA,
3535 XK_asciicircum, XK_underscore, XK_h, 0x02B0,
3536 XK_asciicircum, XK_underscore, XK_i, 0x2071,
3537 XK_asciicircum, XK_underscore, XK_j, 0x02B2,
3538 XK_asciicircum, XK_underscore, XK_l, 0x02E1,
3539 XK_asciicircum, XK_underscore, XK_n, 0x207F,
3540 XK_asciicircum, XK_underscore, XK_o, 0x00BA,
3541 XK_asciicircum, XK_underscore, XK_r, 0x02B3,
3542 XK_asciicircum, XK_underscore, XK_s, 0x02E2,
3543 XK_asciicircum, XK_underscore, XK_w, 0x02B7,
3544 XK_asciicircum, XK_underscore, XK_x, 0x02E3,
3545 XK_asciicircum, XK_underscore, XK_y, 0x02B8,
3546 XK_asciicircum, XK_underscore, 0x0263, 0x02E0,
3547 XK_asciicircum, XK_underscore, 0x0266, 0x02B1,
3548 XK_asciicircum, XK_underscore, 0x0279, 0x02B4,
3549 XK_asciicircum, XK_underscore, 0x027B, 0x02B5,
3550 XK_asciicircum, XK_underscore, 0x0281, 0x02B6,
3551 XK_asciicircum, XK_underscore, 0x0295, 0x02E4,
3552 XK_asciicircum, XK_underbar, XK_a, 0x00AA,
3553 XK_asciicircum, XK_underbar, XK_h, 0x02B0,
3554 XK_asciicircum, XK_underbar, XK_i, 0x2071,
3555 XK_asciicircum, XK_underbar, XK_j, 0x02B2,
3556 XK_asciicircum, XK_underbar, XK_l, 0x02E1,
3557 XK_asciicircum, XK_underbar, XK_n, 0x207F,
3558 XK_asciicircum, XK_underbar, XK_o, 0x00BA,
3559 XK_asciicircum, XK_underbar, XK_r, 0x02B3,
3560 XK_asciicircum, XK_underbar, XK_s, 0x02E2,
3561 XK_asciicircum, XK_underbar, XK_w, 0x02B7,
3562 XK_asciicircum, XK_underbar, XK_x, 0x02E3,
3563 XK_asciicircum, XK_underbar, XK_y, 0x02B8,
3564 XK_asciicircum, XK_underbar, 0x0263, 0x02E0,
3565 XK_asciicircum, XK_underbar, 0x0266, 0x02B1,
3566 XK_asciicircum, XK_underbar, 0x0279, 0x02B4,
3567 XK_asciicircum, XK_underbar, 0x027B, 0x02B5,
3568 XK_asciicircum, XK_underbar, 0x0281, 0x02B6,
3569 XK_asciicircum, XK_underbar, 0x0295, 0x02E4,
3570 XK_asciicircum, XK_dead_belowdot, XK_A, 0x1EAC,
3571 XK_asciicircum, XK_dead_belowdot, XK_E, 0x1EC6,
3572 XK_asciicircum, XK_dead_belowdot, XK_O, 0x1ED8,
3573 XK_asciicircum, XK_dead_belowdot, XK_a, 0x1EAD,
3574 XK_asciicircum, XK_dead_belowdot, XK_e, 0x1EC7,
3575 XK_asciicircum, XK_dead_belowdot, XK_o, 0x1ED9,
3576 XK_underscore, XK_exclam, XK_L, 0x1E38,
3577 XK_underscore, XK_exclam, XK_R, 0x1E5C,
3578 XK_underscore, XK_exclam, XK_l, 0x1E39,
3579 XK_underscore, XK_exclam, XK_r, 0x1E5D,
3580 XK_underscore, XK_quotedbl, XK_A, 0x01DE,
3581 XK_underscore, XK_quotedbl, XK_O, 0x022A,
3582 XK_underscore, XK_quotedbl, XK_U, 0x01D5,
3583 XK_underscore, XK_quotedbl, XK_a, 0x01DF,
3584 XK_underscore, XK_quotedbl, XK_o, 0x022B,
3585 XK_underscore, XK_quotedbl, XK_u, 0x01D6,
3586 XK_underscore, XK_period, XK_A, 0x01E0,
3587 XK_underscore, XK_period, XK_O, 0x0230,
3588 XK_underscore, XK_period, XK_a, 0x01E1,
3589 XK_underscore, XK_period, XK_o, 0x0231,
3590 XK_underscore, XK_semicolon, XK_O, 0x01EC,
3591 XK_underscore, XK_semicolon, XK_o, 0x01ED,
3592 XK_underscore, XK_asciitilde, XK_O, 0x022C,
3593 XK_underscore, XK_asciitilde, XK_o, 0x022D,
3594 XK_underscore, XK_dead_tilde, XK_O, 0x022C,
3595 XK_underscore, XK_dead_tilde, XK_o, 0x022D,
3596 XK_underscore, XK_dead_abovedot, XK_A, 0x01E0,
3597 XK_underscore, XK_dead_abovedot, XK_O, 0x0230,
3598 XK_underscore, XK_dead_abovedot, XK_a, 0x01E1,
3599 XK_underscore, XK_dead_abovedot, XK_o, 0x0231,
3600 XK_underscore, XK_dead_diaeresis, XK_A, 0x01DE,
3601 XK_underscore, XK_dead_diaeresis, XK_O, 0x022A,
3602 XK_underscore, XK_dead_diaeresis, XK_U, 0x01D5,
3603 XK_underscore, XK_dead_diaeresis, XK_a, 0x01DF,
3604 XK_underscore, XK_dead_diaeresis, XK_o, 0x022B,
3605 XK_underscore, XK_dead_diaeresis, XK_u, 0x01D6,
3606 XK_underscore, XK_dead_ogonek, XK_O, 0x01EC,
3607 XK_underscore, XK_dead_ogonek, XK_o, 0x01ED,
3608 XK_underscore, XK_dead_belowdot, XK_L, 0x1E38,
3609 XK_underscore, XK_dead_belowdot, XK_R, 0x1E5C,
3610 XK_underscore, XK_dead_belowdot, XK_l, 0x1E39,
3611 XK_underscore, XK_dead_belowdot, XK_r, 0x1E5D,
3612 XK_grave, XK_quotedbl, XK_U, 0x01DB,
3613 XK_grave, XK_quotedbl, XK_u, 0x01DC,
3614 XK_grave, XK_quotedbl, XK_Greek_iota, 0x1FD2,
3615 XK_grave, XK_quotedbl, XK_Greek_upsilon, 0x1FE2,
3616 XK_grave, XK_parenleft, XK_Greek_ALPHA, 0x1F0B,
3617 XK_grave, XK_parenleft, XK_Greek_EPSILON, 0x1F1B,
3618 XK_grave, XK_parenleft, XK_Greek_ETA, 0x1F2B,
3619 XK_grave, XK_parenleft, XK_Greek_IOTA, 0x1F3B,
3620 XK_grave, XK_parenleft, XK_Greek_OMICRON, 0x1F4B,
3621 XK_grave, XK_parenleft, XK_Greek_UPSILON, 0x1F5B,
3622 XK_grave, XK_parenleft, XK_Greek_OMEGA, 0x1F6B,
3623 XK_grave, XK_parenleft, XK_Greek_alpha, 0x1F03,
3624 XK_grave, XK_parenleft, XK_Greek_epsilon, 0x1F13,
3625 XK_grave, XK_parenleft, XK_Greek_eta, 0x1F23,
3626 XK_grave, XK_parenleft, XK_Greek_iota, 0x1F33,
3627 XK_grave, XK_parenleft, XK_Greek_omicron, 0x1F43,
3628 XK_grave, XK_parenleft, XK_Greek_upsilon, 0x1F53,
3629 XK_grave, XK_parenleft, XK_Greek_omega, 0x1F63,
3630 XK_grave, XK_parenright, XK_Greek_ALPHA, 0x1F0A,
3631 XK_grave, XK_parenright, XK_Greek_EPSILON, 0x1F1A,
3632 XK_grave, XK_parenright, XK_Greek_ETA, 0x1F2A,
3633 XK_grave, XK_parenright, XK_Greek_IOTA, 0x1F3A,
3634 XK_grave, XK_parenright, XK_Greek_OMICRON, 0x1F4A,
3635 XK_grave, XK_parenright, XK_Greek_OMEGA, 0x1F6A,
3636 XK_grave, XK_parenright, XK_Greek_alpha, 0x1F02,
3637 XK_grave, XK_parenright, XK_Greek_epsilon, 0x1F12,
3638 XK_grave, XK_parenright, XK_Greek_eta, 0x1F22,
3639 XK_grave, XK_parenright, XK_Greek_iota, 0x1F32,
3640 XK_grave, XK_parenright, XK_Greek_omicron, 0x1F42,
3641 XK_grave, XK_parenright, XK_Greek_upsilon, 0x1F52,
3642 XK_grave, XK_parenright, XK_Greek_omega, 0x1F62,
3643 XK_grave, XK_plus, XK_O, 0x1EDC,
3644 XK_grave, XK_plus, XK_U, 0x1EEA,
3645 XK_grave, XK_plus, XK_o, 0x1EDD,
3646 XK_grave, XK_plus, XK_u, 0x1EEB,
3647 XK_grave, XK_asciicircum, XK_A, 0x1EA6,
3648 XK_grave, XK_asciicircum, XK_E, 0x1EC0,
3649 XK_grave, XK_asciicircum, XK_O, 0x1ED2,
3650 XK_grave, XK_asciicircum, XK_a, 0x1EA7,
3651 XK_grave, XK_asciicircum, XK_e, 0x1EC1,
3652 XK_grave, XK_asciicircum, XK_o, 0x1ED3,
3653 XK_grave, XK_underscore, XK_E, 0x1E14,
3654 XK_grave, XK_underscore, XK_O, 0x1E50,
3655 XK_grave, XK_underscore, XK_e, 0x1E15,
3656 XK_grave, XK_underscore, XK_o, 0x1E51,
3657 XK_grave, XK_b, XK_A, 0x1EB0,
3658 XK_grave, XK_b, XK_a, 0x1EB1,
3659 XK_grave, XK_macron, XK_E, 0x1E14,
3660 XK_grave, XK_macron, XK_O, 0x1E50,
3661 XK_grave, XK_macron, XK_e, 0x1E15,
3662 XK_grave, XK_macron, XK_o, 0x1E51,
3663 XK_grave, XK_dead_circumflex, XK_A, 0x1EA6,
3664 XK_grave, XK_dead_circumflex, XK_E, 0x1EC0,
3665 XK_grave, XK_dead_circumflex, XK_O, 0x1ED2,
3666 XK_grave, XK_dead_circumflex, XK_a, 0x1EA7,
3667 XK_grave, XK_dead_circumflex, XK_e, 0x1EC1,
3668 XK_grave, XK_dead_circumflex, XK_o, 0x1ED3,
3669 XK_grave, XK_dead_macron, XK_E, 0x1E14,
3670 XK_grave, XK_dead_macron, XK_O, 0x1E50,
3671 XK_grave, XK_dead_macron, XK_e, 0x1E15,
3672 XK_grave, XK_dead_macron, XK_o, 0x1E51,
3673 XK_grave, XK_dead_breve, XK_A, 0x1EB0,
3674 XK_grave, XK_dead_breve, XK_a, 0x1EB1,
3675 XK_grave, XK_dead_diaeresis, XK_U, 0x01DB,
3676 XK_grave, XK_dead_diaeresis, XK_u, 0x01DC,
3677 XK_grave, XK_dead_diaeresis, XK_Greek_iota, 0x1FD2,
3678 XK_grave, XK_dead_diaeresis, XK_Greek_upsilon, 0x1FE2,
3679 XK_grave, XK_dead_horn, XK_O, 0x1EDC,
3680 XK_grave, XK_dead_horn, XK_U, 0x1EEA,
3681 XK_grave, XK_dead_horn, XK_o, 0x1EDD,
3682 XK_grave, XK_dead_horn, XK_u, 0x1EEB,
3683 XK_grave, XK_dead_psili, XK_Greek_ALPHA, 0x1F0A,
3684 XK_grave, XK_dead_psili, XK_Greek_EPSILON, 0x1F1A,
3685 XK_grave, XK_dead_psili, XK_Greek_ETA, 0x1F2A,
3686 XK_grave, XK_dead_psili, XK_Greek_IOTA, 0x1F3A,
3687 XK_grave, XK_dead_psili, XK_Greek_OMICRON, 0x1F4A,
3688 XK_grave, XK_dead_psili, XK_Greek_OMEGA, 0x1F6A,
3689 XK_grave, XK_dead_psili, XK_Greek_alpha, 0x1F02,
3690 XK_grave, XK_dead_psili, XK_Greek_epsilon, 0x1F12,
3691 XK_grave, XK_dead_psili, XK_Greek_eta, 0x1F22,
3692 XK_grave, XK_dead_psili, XK_Greek_iota, 0x1F32,
3693 XK_grave, XK_dead_psili, XK_Greek_omicron, 0x1F42,
3694 XK_grave, XK_dead_psili, XK_Greek_upsilon, 0x1F52,
3695 XK_grave, XK_dead_psili, XK_Greek_omega, 0x1F62,
3696 XK_grave, XK_dead_dasia, XK_Greek_ALPHA, 0x1F0B,
3697 XK_grave, XK_dead_dasia, XK_Greek_EPSILON, 0x1F1B,
3698 XK_grave, XK_dead_dasia, XK_Greek_ETA, 0x1F2B,
3699 XK_grave, XK_dead_dasia, XK_Greek_IOTA, 0x1F3B,
3700 XK_grave, XK_dead_dasia, XK_Greek_OMICRON, 0x1F4B,
3701 XK_grave, XK_dead_dasia, XK_Greek_UPSILON, 0x1F5B,
3702 XK_grave, XK_dead_dasia, XK_Greek_OMEGA, 0x1F6B,
3703 XK_grave, XK_dead_dasia, XK_Greek_alpha, 0x1F03,
3704 XK_grave, XK_dead_dasia, XK_Greek_epsilon, 0x1F13,
3705 XK_grave, XK_dead_dasia, XK_Greek_eta, 0x1F23,
3706 XK_grave, XK_dead_dasia, XK_Greek_iota, 0x1F33,
3707 XK_grave, XK_dead_dasia, XK_Greek_omicron, 0x1F43,
3708 XK_grave, XK_dead_dasia, XK_Greek_upsilon, 0x1F53,
3709 XK_grave, XK_dead_dasia, XK_Greek_omega, 0x1F63,
3710 XK_b, XK_exclam, XK_A, 0x1EB6,
3711 XK_b, XK_exclam, XK_a, 0x1EB7,
3712 XK_b, XK_comma, XK_E, 0x1E1C,
3713 XK_b, XK_comma, XK_e, 0x1E1D,
3714 XK_b, XK_cedilla, XK_E, 0x1E1C,
3715 XK_b, XK_cedilla, XK_e, 0x1E1D,
3716 XK_b, XK_dead_cedilla, XK_E, 0x1E1C,
3717 XK_b, XK_dead_cedilla, XK_e, 0x1E1D,
3718 XK_b, XK_dead_belowdot, XK_A, 0x1EB6,
3719 XK_b, XK_dead_belowdot, XK_a, 0x1EB7,
3720 XK_c, XK_quotedbl, XK_U, 0x01D9,
3721 XK_c, XK_quotedbl, XK_u, 0x01DA,
3722 XK_c, XK_dead_diaeresis, XK_U, 0x01D9,
3723 XK_c, XK_dead_diaeresis, XK_u, 0x01DA,
3724 XK_o, XK_apostrophe, XK_A, 0x01FA,
3725 XK_o, XK_apostrophe, XK_a, 0x01FB,
3726 XK_asciitilde, XK_quotedbl, XK_Greek_iota, 0x1FD7,
3727 XK_asciitilde, XK_quotedbl, XK_Greek_upsilon, 0x1FE7,
3728 XK_asciitilde, XK_parenleft, XK_Greek_ALPHA, 0x1F0F,
3729 XK_asciitilde, XK_parenleft, XK_Greek_ETA, 0x1F2F,
3730 XK_asciitilde, XK_parenleft, XK_Greek_IOTA, 0x1F3F,
3731 XK_asciitilde, XK_parenleft, XK_Greek_UPSILON, 0x1F5F,
3732 XK_asciitilde, XK_parenleft, XK_Greek_OMEGA, 0x1F6F,
3733 XK_asciitilde, XK_parenleft, XK_Greek_alpha, 0x1F07,
3734 XK_asciitilde, XK_parenleft, XK_Greek_eta, 0x1F27,
3735 XK_asciitilde, XK_parenleft, XK_Greek_iota, 0x1F37,
3736 XK_asciitilde, XK_parenleft, XK_Greek_upsilon, 0x1F57,
3737 XK_asciitilde, XK_parenleft, XK_Greek_omega, 0x1F67,
3738 XK_asciitilde, XK_parenright, XK_Greek_ALPHA, 0x1F0E,
3739 XK_asciitilde, XK_parenright, XK_Greek_ETA, 0x1F2E,
3740 XK_asciitilde, XK_parenright, XK_Greek_IOTA, 0x1F3E,
3741 XK_asciitilde, XK_parenright, XK_Greek_OMEGA, 0x1F6E,
3742 XK_asciitilde, XK_parenright, XK_Greek_alpha, 0x1F06,
3743 XK_asciitilde, XK_parenright, XK_Greek_eta, 0x1F26,
3744 XK_asciitilde, XK_parenright, XK_Greek_iota, 0x1F36,
3745 XK_asciitilde, XK_parenright, XK_Greek_upsilon, 0x1F56,
3746 XK_asciitilde, XK_parenright, XK_Greek_omega, 0x1F66,
3747 XK_asciitilde, XK_plus, XK_O, 0x1EE0,
3748 XK_asciitilde, XK_plus, XK_U, 0x1EEE,
3749 XK_asciitilde, XK_plus, XK_o, 0x1EE1,
3750 XK_asciitilde, XK_plus, XK_u, 0x1EEF,
3751 XK_asciitilde, XK_asciicircum, XK_A, 0x1EAA,
3752 XK_asciitilde, XK_asciicircum, XK_E, 0x1EC4,
3753 XK_asciitilde, XK_asciicircum, XK_O, 0x1ED6,
3754 XK_asciitilde, XK_asciicircum, XK_a, 0x1EAB,
3755 XK_asciitilde, XK_asciicircum, XK_e, 0x1EC5,
3756 XK_asciitilde, XK_asciicircum, XK_o, 0x1ED7,
3757 XK_asciitilde, XK_b, XK_A, 0x1EB4,
3758 XK_asciitilde, XK_b, XK_a, 0x1EB5,
3759 XK_asciitilde, XK_dead_circumflex, XK_A, 0x1EAA,
3760 XK_asciitilde, XK_dead_circumflex, XK_E, 0x1EC4,
3761 XK_asciitilde, XK_dead_circumflex, XK_O, 0x1ED6,
3762 XK_asciitilde, XK_dead_circumflex, XK_a, 0x1EAB,
3763 XK_asciitilde, XK_dead_circumflex, XK_e, 0x1EC5,
3764 XK_asciitilde, XK_dead_circumflex, XK_o, 0x1ED7,
3765 XK_asciitilde, XK_dead_breve, XK_A, 0x1EB4,
3766 XK_asciitilde, XK_dead_breve, XK_a, 0x1EB5,
3767 XK_asciitilde, XK_dead_diaeresis, XK_Greek_iota, 0x1FD7,
3768 XK_asciitilde, XK_dead_diaeresis, XK_Greek_upsilon, 0x1FE7,
3769 XK_asciitilde, XK_dead_horn, XK_O, 0x1EE0,
3770 XK_asciitilde, XK_dead_horn, XK_U, 0x1EEE,
3771 XK_asciitilde, XK_dead_horn, XK_o, 0x1EE1,
3772 XK_asciitilde, XK_dead_horn, XK_u, 0x1EEF,
3773 XK_asciitilde, XK_dead_psili, XK_Greek_ALPHA, 0x1F0E,
3774 XK_asciitilde, XK_dead_psili, XK_Greek_ETA, 0x1F2E,
3775 XK_asciitilde, XK_dead_psili, XK_Greek_IOTA, 0x1F3E,
3776 XK_asciitilde, XK_dead_psili, XK_Greek_OMEGA, 0x1F6E,
3777 XK_asciitilde, XK_dead_psili, XK_Greek_alpha, 0x1F06,
3778 XK_asciitilde, XK_dead_psili, XK_Greek_eta, 0x1F26,
3779 XK_asciitilde, XK_dead_psili, XK_Greek_iota, 0x1F36,
3780 XK_asciitilde, XK_dead_psili, XK_Greek_upsilon, 0x1F56,
3781 XK_asciitilde, XK_dead_psili, XK_Greek_omega, 0x1F66,
3782 XK_asciitilde, XK_dead_dasia, XK_Greek_ALPHA, 0x1F0F,
3783 XK_asciitilde, XK_dead_dasia, XK_Greek_ETA, 0x1F2F,
3784 XK_asciitilde, XK_dead_dasia, XK_Greek_IOTA, 0x1F3F,
3785 XK_asciitilde, XK_dead_dasia, XK_Greek_UPSILON, 0x1F5F,
3786 XK_asciitilde, XK_dead_dasia, XK_Greek_OMEGA, 0x1F6F,
3787 XK_asciitilde, XK_dead_dasia, XK_Greek_alpha, 0x1F07,
3788 XK_asciitilde, XK_dead_dasia, XK_Greek_eta, 0x1F27,
3789 XK_asciitilde, XK_dead_dasia, XK_Greek_iota, 0x1F37,
3790 XK_asciitilde, XK_dead_dasia, XK_Greek_upsilon, 0x1F57,
3791 XK_asciitilde, XK_dead_dasia, XK_Greek_omega, 0x1F67,
3792 XK_macron, XK_exclam, XK_L, 0x1E38,
3793 XK_macron, XK_exclam, XK_R, 0x1E5C,
3794 XK_macron, XK_exclam, XK_l, 0x1E39,
3795 XK_macron, XK_exclam, XK_r, 0x1E5D,
3796 XK_macron, XK_quotedbl, XK_A, 0x01DE,
3797 XK_macron, XK_quotedbl, XK_O, 0x022A,
3798 XK_macron, XK_quotedbl, XK_U, 0x01D5,
3799 XK_macron, XK_quotedbl, XK_a, 0x01DF,
3800 XK_macron, XK_quotedbl, XK_o, 0x022B,
3801 XK_macron, XK_quotedbl, XK_u, 0x01D6,
3802 XK_macron, XK_period, XK_A, 0x01E0,
3803 XK_macron, XK_period, XK_O, 0x0230,
3804 XK_macron, XK_period, XK_a, 0x01E1,
3805 XK_macron, XK_period, XK_o, 0x0231,
3806 XK_macron, XK_semicolon, XK_O, 0x01EC,
3807 XK_macron, XK_semicolon, XK_o, 0x01ED,
3808 XK_macron, XK_asciitilde, XK_O, 0x022C,
3809 XK_macron, XK_asciitilde, XK_o, 0x022D,
3810 XK_macron, XK_dead_tilde, XK_O, 0x022C,
3811 XK_macron, XK_dead_tilde, XK_o, 0x022D,
3812 XK_macron, XK_dead_abovedot, XK_A, 0x01E0,
3813 XK_macron, XK_dead_abovedot, XK_O, 0x0230,
3814 XK_macron, XK_dead_abovedot, XK_a, 0x01E1,
3815 XK_macron, XK_dead_abovedot, XK_o, 0x0231,
3816 XK_macron, XK_dead_diaeresis, XK_A, 0x01DE,
3817 XK_macron, XK_dead_diaeresis, XK_O, 0x022A,
3818 XK_macron, XK_dead_diaeresis, XK_U, 0x01D5,
3819 XK_macron, XK_dead_diaeresis, XK_a, 0x01DF,
3820 XK_macron, XK_dead_diaeresis, XK_o, 0x022B,
3821 XK_macron, XK_dead_diaeresis, XK_u, 0x01D6,
3822 XK_macron, XK_dead_ogonek, XK_O, 0x01EC,
3823 XK_macron, XK_dead_ogonek, XK_o, 0x01ED,
3824 XK_macron, XK_dead_belowdot, XK_L, 0x1E38,
3825 XK_macron, XK_dead_belowdot, XK_R, 0x1E5C,
3826 XK_macron, XK_dead_belowdot, XK_l, 0x1E39,
3827 XK_macron, XK_dead_belowdot, XK_r, 0x1E5D,
3828 XK_acute, XK_quotedbl, XK_I, 0x1E2E,
3829 XK_acute, XK_quotedbl, XK_U, 0x01D7,
3830 XK_acute, XK_quotedbl, XK_i, 0x1E2F,
3831 XK_acute, XK_quotedbl, XK_u, 0x01D8,
3832 XK_acute, XK_quotedbl, XK_Greek_iota, 0x0390,
3833 XK_acute, XK_quotedbl, XK_Greek_upsilon, 0x03B0,
3834 XK_acute, XK_parenleft, XK_Greek_ALPHA, 0x1F0D,
3835 XK_acute, XK_parenleft, XK_Greek_EPSILON, 0x1F1D,
3836 XK_acute, XK_parenleft, XK_Greek_ETA, 0x1F2D,
3837 XK_acute, XK_parenleft, XK_Greek_IOTA, 0x1F3D,
3838 XK_acute, XK_parenleft, XK_Greek_OMICRON, 0x1F4D,
3839 XK_acute, XK_parenleft, XK_Greek_UPSILON, 0x1F5D,
3840 XK_acute, XK_parenleft, XK_Greek_OMEGA, 0x1F6D,
3841 XK_acute, XK_parenleft, XK_Greek_alpha, 0x1F05,
3842 XK_acute, XK_parenleft, XK_Greek_epsilon, 0x1F15,
3843 XK_acute, XK_parenleft, XK_Greek_eta, 0x1F25,
3844 XK_acute, XK_parenleft, XK_Greek_iota, 0x1F35,
3845 XK_acute, XK_parenleft, XK_Greek_omicron, 0x1F45,
3846 XK_acute, XK_parenleft, XK_Greek_upsilon, 0x1F55,
3847 XK_acute, XK_parenleft, XK_Greek_omega, 0x1F65,
3848 XK_acute, XK_parenright, XK_Greek_ALPHA, 0x1F0C,
3849 XK_acute, XK_parenright, XK_Greek_EPSILON, 0x1F1C,
3850 XK_acute, XK_parenright, XK_Greek_ETA, 0x1F2C,
3851 XK_acute, XK_parenright, XK_Greek_IOTA, 0x1F3C,
3852 XK_acute, XK_parenright, XK_Greek_OMICRON, 0x1F4C,
3853 XK_acute, XK_parenright, XK_Greek_OMEGA, 0x1F6C,
3854 XK_acute, XK_parenright, XK_Greek_alpha, 0x1F04,
3855 XK_acute, XK_parenright, XK_Greek_epsilon, 0x1F14,
3856 XK_acute, XK_parenright, XK_Greek_eta, 0x1F24,
3857 XK_acute, XK_parenright, XK_Greek_iota, 0x1F34,
3858 XK_acute, XK_parenright, XK_Greek_omicron, 0x1F44,
3859 XK_acute, XK_parenright, XK_Greek_upsilon, 0x1F54,
3860 XK_acute, XK_parenright, XK_Greek_omega, 0x1F64,
3861 XK_acute, XK_plus, XK_O, 0x1EDA,
3862 XK_acute, XK_plus, XK_U, 0x1EE8,
3863 XK_acute, XK_plus, XK_o, 0x1EDB,
3864 XK_acute, XK_plus, XK_u, 0x1EE9,
3865 XK_acute, XK_comma, XK_C, 0x1E08,
3866 XK_acute, XK_comma, XK_c, 0x1E09,
3867 XK_acute, XK_slash, XK_O, 0x01FE,
3868 XK_acute, XK_slash, XK_o, 0x01FF,
3869 XK_acute, XK_asciicircum, XK_A, 0x1EA4,
3870 XK_acute, XK_asciicircum, XK_E, 0x1EBE,
3871 XK_acute, XK_asciicircum, XK_O, 0x1ED0,
3872 XK_acute, XK_asciicircum, XK_a, 0x1EA5,
3873 XK_acute, XK_asciicircum, XK_e, 0x1EBF,
3874 XK_acute, XK_asciicircum, XK_o, 0x1ED1,
3875 XK_acute, XK_underscore, XK_E, 0x1E16,
3876 XK_acute, XK_underscore, XK_O, 0x1E52,
3877 XK_acute, XK_underscore, XK_e, 0x1E17,
3878 XK_acute, XK_underscore, XK_o, 0x1E53,
3879 XK_acute, XK_b, XK_A, 0x1EAE,
3880 XK_acute, XK_b, XK_a, 0x1EAF,
3881 XK_acute, XK_asciitilde, XK_O, 0x1E4C,
3882 XK_acute, XK_asciitilde, XK_U, 0x1E78,
3883 XK_acute, XK_asciitilde, XK_o, 0x1E4D,
3884 XK_acute, XK_asciitilde, XK_u, 0x1E79,
3885 XK_acute, XK_macron, XK_E, 0x1E16,
3886 XK_acute, XK_macron, XK_O, 0x1E52,
3887 XK_acute, XK_macron, XK_e, 0x1E17,
3888 XK_acute, XK_macron, XK_o, 0x1E53,
3889 XK_acute, XK_cedilla, XK_C, 0x1E08,
3890 XK_acute, XK_cedilla, XK_c, 0x1E09,
3891 XK_acute, XK_dead_circumflex, XK_A, 0x1EA4,
3892 XK_acute, XK_dead_circumflex, XK_E, 0x1EBE,
3893 XK_acute, XK_dead_circumflex, XK_O, 0x1ED0,
3894 XK_acute, XK_dead_circumflex, XK_a, 0x1EA5,
3895 XK_acute, XK_dead_circumflex, XK_e, 0x1EBF,
3896 XK_acute, XK_dead_circumflex, XK_o, 0x1ED1,
3897 XK_acute, XK_dead_tilde, XK_O, 0x1E4C,
3898 XK_acute, XK_dead_tilde, XK_U, 0x1E78,
3899 XK_acute, XK_dead_tilde, XK_o, 0x1E4D,
3900 XK_acute, XK_dead_tilde, XK_u, 0x1E79,
3901 XK_acute, XK_dead_macron, XK_E, 0x1E16,
3902 XK_acute, XK_dead_macron, XK_O, 0x1E52,
3903 XK_acute, XK_dead_macron, XK_e, 0x1E17,
3904 XK_acute, XK_dead_macron, XK_o, 0x1E53,
3905 XK_acute, XK_dead_breve, XK_A, 0x1EAE,
3906 XK_acute, XK_dead_breve, XK_a, 0x1EAF,
3907 XK_acute, XK_dead_diaeresis, XK_I, 0x1E2E,
3908 XK_acute, XK_dead_diaeresis, XK_U, 0x01D7,
3909 XK_acute, XK_dead_diaeresis, XK_i, 0x1E2F,
3910 XK_acute, XK_dead_diaeresis, XK_u, 0x01D8,
3911 XK_acute, XK_dead_diaeresis, XK_Greek_iota, 0x0390,
3912 XK_acute, XK_dead_diaeresis, XK_Greek_upsilon, 0x03B0,
3913 XK_acute, XK_dead_abovering, XK_A, 0x01FA,
3914 XK_acute, XK_dead_abovering, XK_a, 0x01FB,
3915 XK_acute, XK_dead_cedilla, XK_C, 0x1E08,
3916 XK_acute, XK_dead_cedilla, XK_c, 0x1E09,
3917 XK_acute, XK_dead_horn, XK_O, 0x1EDA,
3918 XK_acute, XK_dead_horn, XK_U, 0x1EE8,
3919 XK_acute, XK_dead_horn, XK_o, 0x1EDB,
3920 XK_acute, XK_dead_horn, XK_u, 0x1EE9,
3921 XK_acute, XK_dead_psili, XK_Greek_ALPHA, 0x1F0C,
3922 XK_acute, XK_dead_psili, XK_Greek_EPSILON, 0x1F1C,
3923 XK_acute, XK_dead_psili, XK_Greek_ETA, 0x1F2C,
3924 XK_acute, XK_dead_psili, XK_Greek_IOTA, 0x1F3C,
3925 XK_acute, XK_dead_psili, XK_Greek_OMICRON, 0x1F4C,
3926 XK_acute, XK_dead_psili, XK_Greek_OMEGA, 0x1F6C,
3927 XK_acute, XK_dead_psili, XK_Greek_alpha, 0x1F04,
3928 XK_acute, XK_dead_psili, XK_Greek_epsilon, 0x1F14,
3929 XK_acute, XK_dead_psili, XK_Greek_eta, 0x1F24,
3930 XK_acute, XK_dead_psili, XK_Greek_iota, 0x1F34,
3931 XK_acute, XK_dead_psili, XK_Greek_omicron, 0x1F44,
3932 XK_acute, XK_dead_psili, XK_Greek_upsilon, 0x1F54,
3933 XK_acute, XK_dead_psili, XK_Greek_omega, 0x1F64,
3934 XK_acute, XK_dead_dasia, XK_Greek_ALPHA, 0x1F0D,
3935 XK_acute, XK_dead_dasia, XK_Greek_EPSILON, 0x1F1D,
3936 XK_acute, XK_dead_dasia, XK_Greek_ETA, 0x1F2D,
3937 XK_acute, XK_dead_dasia, XK_Greek_IOTA, 0x1F3D,
3938 XK_acute, XK_dead_dasia, XK_Greek_OMICRON, 0x1F4D,
3939 XK_acute, XK_dead_dasia, XK_Greek_UPSILON, 0x1F5D,
3940 XK_acute, XK_dead_dasia, XK_Greek_OMEGA, 0x1F6D,
3941 XK_acute, XK_dead_dasia, XK_Greek_alpha, 0x1F05,
3942 XK_acute, XK_dead_dasia, XK_Greek_epsilon, 0x1F15,
3943 XK_acute, XK_dead_dasia, XK_Greek_eta, 0x1F25,
3944 XK_acute, XK_dead_dasia, XK_Greek_iota, 0x1F35,
3945 XK_acute, XK_dead_dasia, XK_Greek_omicron, 0x1F45,
3946 XK_acute, XK_dead_dasia, XK_Greek_upsilon, 0x1F55,
3947 XK_acute, XK_dead_dasia, XK_Greek_omega, 0x1F65,
3948 XK_acute, XK_KP_Divide, XK_O, 0x01FE,
3949 XK_acute, XK_KP_Divide, XK_o, 0x01FF,
3950 0x05C1, 0x05BC, XK_hebrew_shin, 0xFB2C,
3951 0x05C2, 0x05BC, XK_hebrew_shin, 0xFB2D,
3952 XK_Greek_iota, XK_apostrophe, XK_Greek_alpha, 0x1FB4,
3953 XK_Greek_iota, XK_apostrophe, XK_Greek_eta, 0x1FC4,
3954 XK_Greek_iota, XK_apostrophe, XK_Greek_omega, 0x1FF4,
3955 XK_Greek_iota, XK_apostrophe, 0x1F00, 0x1F84,
3956 XK_Greek_iota, XK_apostrophe, 0x1F01, 0x1F85,
3957 XK_Greek_iota, XK_apostrophe, 0x1F08, 0x1F8C,
3958 XK_Greek_iota, XK_apostrophe, 0x1F09, 0x1F8D,
3959 XK_Greek_iota, XK_apostrophe, 0x1F20, 0x1F94,
3960 XK_Greek_iota, XK_apostrophe, 0x1F21, 0x1F95,
3961 XK_Greek_iota, XK_apostrophe, 0x1F28, 0x1F9C,
3962 XK_Greek_iota, XK_apostrophe, 0x1F29, 0x1F9D,
3963 XK_Greek_iota, XK_apostrophe, 0x1F60, 0x1FA4,
3964 XK_Greek_iota, XK_apostrophe, 0x1F61, 0x1FA5,
3965 XK_Greek_iota, XK_apostrophe, 0x1F68, 0x1FAC,
3966 XK_Greek_iota, XK_apostrophe, 0x1F69, 0x1FAD,
3967 XK_Greek_iota, XK_parenleft, XK_Greek_ALPHA, 0x1F89,
3968 XK_Greek_iota, XK_parenleft, XK_Greek_ETA, 0x1F99,
3969 XK_Greek_iota, XK_parenleft, XK_Greek_OMEGA, 0x1FA9,
3970 XK_Greek_iota, XK_parenleft, XK_Greek_alpha, 0x1F81,
3971 XK_Greek_iota, XK_parenleft, XK_Greek_eta, 0x1F91,
3972 XK_Greek_iota, XK_parenleft, XK_Greek_omega, 0x1FA1,
3973 XK_Greek_iota, XK_parenright, XK_Greek_ALPHA, 0x1F88,
3974 XK_Greek_iota, XK_parenright, XK_Greek_ETA, 0x1F98,
3975 XK_Greek_iota, XK_parenright, XK_Greek_OMEGA, 0x1FA8,
3976 XK_Greek_iota, XK_parenright, XK_Greek_alpha, 0x1F80,
3977 XK_Greek_iota, XK_parenright, XK_Greek_eta, 0x1F90,
3978 XK_Greek_iota, XK_parenright, XK_Greek_omega, 0x1FA0,
3979 XK_Greek_iota, XK_grave, XK_Greek_alpha, 0x1FB2,
3980 XK_Greek_iota, XK_grave, XK_Greek_eta, 0x1FC2,
3981 XK_Greek_iota, XK_grave, XK_Greek_omega, 0x1FF2,
3982 XK_Greek_iota, XK_grave, 0x1F00, 0x1F82,
3983 XK_Greek_iota, XK_grave, 0x1F01, 0x1F83,
3984 XK_Greek_iota, XK_grave, 0x1F08, 0x1F8A,
3985 XK_Greek_iota, XK_grave, 0x1F09, 0x1F8B,
3986 XK_Greek_iota, XK_grave, 0x1F20, 0x1F92,
3987 XK_Greek_iota, XK_grave, 0x1F21, 0x1F93,
3988 XK_Greek_iota, XK_grave, 0x1F28, 0x1F9A,
3989 XK_Greek_iota, XK_grave, 0x1F29, 0x1F9B,
3990 XK_Greek_iota, XK_grave, 0x1F60, 0x1FA2,
3991 XK_Greek_iota, XK_grave, 0x1F61, 0x1FA3,
3992 XK_Greek_iota, XK_grave, 0x1F68, 0x1FAA,
3993 XK_Greek_iota, XK_grave, 0x1F69, 0x1FAB,
3994 XK_Greek_iota, XK_asciitilde, XK_Greek_alpha, 0x1FB7,
3995 XK_Greek_iota, XK_asciitilde, XK_Greek_eta, 0x1FC7,
3996 XK_Greek_iota, XK_asciitilde, XK_Greek_omega, 0x1FF7,
3997 XK_Greek_iota, XK_asciitilde, 0x1F00, 0x1F86,
3998 XK_Greek_iota, XK_asciitilde, 0x1F01, 0x1F87,
3999 XK_Greek_iota, XK_asciitilde, 0x1F08, 0x1F8E,
4000 XK_Greek_iota, XK_asciitilde, 0x1F09, 0x1F8F,
4001 XK_Greek_iota, XK_asciitilde, 0x1F20, 0x1F96,
4002 XK_Greek_iota, XK_asciitilde, 0x1F21, 0x1F97,
4003 XK_Greek_iota, XK_asciitilde, 0x1F28, 0x1F9E,
4004 XK_Greek_iota, XK_asciitilde, 0x1F29, 0x1F9F,
4005 XK_Greek_iota, XK_asciitilde, 0x1F60, 0x1FA6,
4006 XK_Greek_iota, XK_asciitilde, 0x1F61, 0x1FA7,
4007 XK_Greek_iota, XK_asciitilde, 0x1F68, 0x1FAE,
4008 XK_Greek_iota, XK_asciitilde, 0x1F69, 0x1FAF,
4009 XK_Greek_iota, XK_acute, XK_Greek_alpha, 0x1FB4,
4010 XK_Greek_iota, XK_acute, XK_Greek_eta, 0x1FC4,
4011 XK_Greek_iota, XK_acute, XK_Greek_omega, 0x1FF4,
4012 XK_Greek_iota, XK_acute, 0x1F00, 0x1F84,
4013 XK_Greek_iota, XK_acute, 0x1F01, 0x1F85,
4014 XK_Greek_iota, XK_acute, 0x1F08, 0x1F8C,
4015 XK_Greek_iota, XK_acute, 0x1F09, 0x1F8D,
4016 XK_Greek_iota, XK_acute, 0x1F20, 0x1F94,
4017 XK_Greek_iota, XK_acute, 0x1F21, 0x1F95,
4018 XK_Greek_iota, XK_acute, 0x1F28, 0x1F9C,
4019 XK_Greek_iota, XK_acute, 0x1F29, 0x1F9D,
4020 XK_Greek_iota, XK_acute, 0x1F60, 0x1FA4,
4021 XK_Greek_iota, XK_acute, 0x1F61, 0x1FA5,
4022 XK_Greek_iota, XK_acute, 0x1F68, 0x1FAC,
4023 XK_Greek_iota, XK_acute, 0x1F69, 0x1FAD,
4024 XK_Greek_iota, XK_dead_grave, XK_Greek_alpha, 0x1FB2,
4025 XK_Greek_iota, XK_dead_grave, XK_Greek_eta, 0x1FC2,
4026 XK_Greek_iota, XK_dead_grave, XK_Greek_omega, 0x1FF2,
4027 XK_Greek_iota, XK_dead_grave, 0x1F00, 0x1F82,
4028 XK_Greek_iota, XK_dead_grave, 0x1F01, 0x1F83,
4029 XK_Greek_iota, XK_dead_grave, 0x1F08, 0x1F8A,
4030 XK_Greek_iota, XK_dead_grave, 0x1F09, 0x1F8B,
4031 XK_Greek_iota, XK_dead_grave, 0x1F20, 0x1F92,
4032 XK_Greek_iota, XK_dead_grave, 0x1F21, 0x1F93,
4033 XK_Greek_iota, XK_dead_grave, 0x1F28, 0x1F9A,
4034 XK_Greek_iota, XK_dead_grave, 0x1F29, 0x1F9B,
4035 XK_Greek_iota, XK_dead_grave, 0x1F60, 0x1FA2,
4036 XK_Greek_iota, XK_dead_grave, 0x1F61, 0x1FA3,
4037 XK_Greek_iota, XK_dead_grave, 0x1F68, 0x1FAA,
4038 XK_Greek_iota, XK_dead_grave, 0x1F69, 0x1FAB,
4039 XK_Greek_iota, XK_dead_acute, XK_Greek_alpha, 0x1FB4,
4040 XK_Greek_iota, XK_dead_acute, XK_Greek_eta, 0x1FC4,
4041 XK_Greek_iota, XK_dead_acute, XK_Greek_omega, 0x1FF4,
4042 XK_Greek_iota, XK_dead_acute, 0x1F00, 0x1F84,
4043 XK_Greek_iota, XK_dead_acute, 0x1F01, 0x1F85,
4044 XK_Greek_iota, XK_dead_acute, 0x1F08, 0x1F8C,
4045 XK_Greek_iota, XK_dead_acute, 0x1F09, 0x1F8D,
4046 XK_Greek_iota, XK_dead_acute, 0x1F20, 0x1F94,
4047 XK_Greek_iota, XK_dead_acute, 0x1F21, 0x1F95,
4048 XK_Greek_iota, XK_dead_acute, 0x1F28, 0x1F9C,
4049 XK_Greek_iota, XK_dead_acute, 0x1F29, 0x1F9D,
4050 XK_Greek_iota, XK_dead_acute, 0x1F60, 0x1FA4,
4051 XK_Greek_iota, XK_dead_acute, 0x1F61, 0x1FA5,
4052 XK_Greek_iota, XK_dead_acute, 0x1F68, 0x1FAC,
4053 XK_Greek_iota, XK_dead_acute, 0x1F69, 0x1FAD,
4054 XK_Greek_iota, XK_dead_tilde, XK_Greek_alpha, 0x1FB7,
4055 XK_Greek_iota, XK_dead_tilde, XK_Greek_eta, 0x1FC7,
4056 XK_Greek_iota, XK_dead_tilde, XK_Greek_omega, 0x1FF7,
4057 XK_Greek_iota, XK_dead_tilde, 0x1F00, 0x1F86,
4058 XK_Greek_iota, XK_dead_tilde, 0x1F01, 0x1F87,
4059 XK_Greek_iota, XK_dead_tilde, 0x1F08, 0x1F8E,
4060 XK_Greek_iota, XK_dead_tilde, 0x1F09, 0x1F8F,
4061 XK_Greek_iota, XK_dead_tilde, 0x1F20, 0x1F96,
4062 XK_Greek_iota, XK_dead_tilde, 0x1F21, 0x1F97,
4063 XK_Greek_iota, XK_dead_tilde, 0x1F28, 0x1F9E,
4064 XK_Greek_iota, XK_dead_tilde, 0x1F29, 0x1F9F,
4065 XK_Greek_iota, XK_dead_tilde, 0x1F60, 0x1FA6,
4066 XK_Greek_iota, XK_dead_tilde, 0x1F61, 0x1FA7,
4067 XK_Greek_iota, XK_dead_tilde, 0x1F68, 0x1FAE,
4068 XK_Greek_iota, XK_dead_tilde, 0x1F69, 0x1FAF,
4069 XK_Greek_iota, XK_dead_psili, XK_Greek_ALPHA, 0x1F88,
4070 XK_Greek_iota, XK_dead_psili, XK_Greek_ETA, 0x1F98,
4071 XK_Greek_iota, XK_dead_psili, XK_Greek_OMEGA, 0x1FA8,
4072 XK_Greek_iota, XK_dead_psili, XK_Greek_alpha, 0x1F80,
4073 XK_Greek_iota, XK_dead_psili, XK_Greek_eta, 0x1F90,
4074 XK_Greek_iota, XK_dead_psili, XK_Greek_omega, 0x1FA0,
4075 XK_Greek_iota, XK_dead_dasia, XK_Greek_ALPHA, 0x1F89,
4076 XK_Greek_iota, XK_dead_dasia, XK_Greek_ETA, 0x1F99,
4077 XK_Greek_iota, XK_dead_dasia, XK_Greek_OMEGA, 0x1FA9,
4078 XK_Greek_iota, XK_dead_dasia, XK_Greek_alpha, 0x1F81,
4079 XK_Greek_iota, XK_dead_dasia, XK_Greek_eta, 0x1F91,
4080 XK_Greek_iota, XK_dead_dasia, XK_Greek_omega, 0x1FA1,
4081 XK_parenleft, XK_1, XK_0, XK_parenright, 0x2469,
4082 XK_parenleft, XK_1, XK_1, XK_parenright, 0x246A,
4083 XK_parenleft, XK_1, XK_2, XK_parenright, 0x246B,
4084 XK_parenleft, XK_1, XK_3, XK_parenright, 0x246C,
4085 XK_parenleft, XK_1, XK_4, XK_parenright, 0x246D,
4086 XK_parenleft, XK_1, XK_5, XK_parenright, 0x246E,
4087 XK_parenleft, XK_1, XK_6, XK_parenright, 0x246F,
4088 XK_parenleft, XK_1, XK_7, XK_parenright, 0x2470,
4089 XK_parenleft, XK_1, XK_8, XK_parenright, 0x2471,
4090 XK_parenleft, XK_1, XK_9, XK_parenright, 0x2472,
4091 XK_parenleft, XK_1, XK_KP_Space, XK_parenright, 0x246B,
4092 XK_parenleft, XK_1, XK_KP_0, XK_parenright, 0x2469,
4093 XK_parenleft, XK_1, XK_KP_1, XK_parenright, 0x246A,
4094 XK_parenleft, XK_1, XK_KP_2, XK_parenright, 0x246B,
4095 XK_parenleft, XK_1, XK_KP_3, XK_parenright, 0x246C,
4096 XK_parenleft, XK_1, XK_KP_4, XK_parenright, 0x246D,
4097 XK_parenleft, XK_1, XK_KP_5, XK_parenright, 0x246E,
4098 XK_parenleft, XK_1, XK_KP_6, XK_parenright, 0x246F,
4099 XK_parenleft, XK_1, XK_KP_7, XK_parenright, 0x2470,
4100 XK_parenleft, XK_1, XK_KP_8, XK_parenright, 0x2471,
4101 XK_parenleft, XK_1, XK_KP_9, XK_parenright, 0x2472,
4102 XK_parenleft, XK_2, XK_0, XK_parenright, 0x2473,
4103 XK_parenleft, XK_2, XK_1, XK_parenright, 0x3251,
4104 XK_parenleft, XK_2, XK_2, XK_parenright, 0x3252,
4105 XK_parenleft, XK_2, XK_3, XK_parenright, 0x3253,
4106 XK_parenleft, XK_2, XK_4, XK_parenright, 0x3254,
4107 XK_parenleft, XK_2, XK_5, XK_parenright, 0x3255,
4108 XK_parenleft, XK_2, XK_6, XK_parenright, 0x3256,
4109 XK_parenleft, XK_2, XK_7, XK_parenright, 0x3257,
4110 XK_parenleft, XK_2, XK_8, XK_parenright, 0x3258,
4111 XK_parenleft, XK_2, XK_9, XK_parenright, 0x3259,
4112 XK_parenleft, XK_2, XK_KP_Space, XK_parenright, 0x3252,
4113 XK_parenleft, XK_2, XK_KP_0, XK_parenright, 0x2473,
4114 XK_parenleft, XK_2, XK_KP_1, XK_parenright, 0x3251,
4115 XK_parenleft, XK_2, XK_KP_2, XK_parenright, 0x3252,
4116 XK_parenleft, XK_2, XK_KP_3, XK_parenright, 0x3253,
4117 XK_parenleft, XK_2, XK_KP_4, XK_parenright, 0x3254,
4118 XK_parenleft, XK_2, XK_KP_5, XK_parenright, 0x3255,
4119 XK_parenleft, XK_2, XK_KP_6, XK_parenright, 0x3256,
4120 XK_parenleft, XK_2, XK_KP_7, XK_parenright, 0x3257,
4121 XK_parenleft, XK_2, XK_KP_8, XK_parenright, 0x3258,
4122 XK_parenleft, XK_2, XK_KP_9, XK_parenright, 0x3259,
4123 XK_parenleft, XK_3, XK_0, XK_parenright, 0x325A,
4124 XK_parenleft, XK_3, XK_1, XK_parenright, 0x325B,
4125 XK_parenleft, XK_3, XK_2, XK_parenright, 0x325C,
4126 XK_parenleft, XK_3, XK_3, XK_parenright, 0x325D,
4127 XK_parenleft, XK_3, XK_4, XK_parenright, 0x325E,
4128 XK_parenleft, XK_3, XK_5, XK_parenright, 0x325F,
4129 XK_parenleft, XK_3, XK_6, XK_parenright, 0x32B1,
4130 XK_parenleft, XK_3, XK_7, XK_parenright, 0x32B2,
4131 XK_parenleft, XK_3, XK_8, XK_parenright, 0x32B3,
4132 XK_parenleft, XK_3, XK_9, XK_parenright, 0x32B4,
4133 XK_parenleft, XK_3, XK_KP_Space, XK_parenright, 0x325C,
4134 XK_parenleft, XK_3, XK_KP_0, XK_parenright, 0x325A,
4135 XK_parenleft, XK_3, XK_KP_1, XK_parenright, 0x325B,
4136 XK_parenleft, XK_3, XK_KP_2, XK_parenright, 0x325C,
4137 XK_parenleft, XK_3, XK_KP_3, XK_parenright, 0x325D,
4138 XK_parenleft, XK_3, XK_KP_4, XK_parenright, 0x325E,
4139 XK_parenleft, XK_3, XK_KP_5, XK_parenright, 0x325F,
4140 XK_parenleft, XK_3, XK_KP_6, XK_parenright, 0x32B1,
4141 XK_parenleft, XK_3, XK_KP_7, XK_parenright, 0x32B2,
4142 XK_parenleft, XK_3, XK_KP_8, XK_parenright, 0x32B3,
4143 XK_parenleft, XK_3, XK_KP_9, XK_parenright, 0x32B4,
4144 XK_parenleft, XK_4, XK_0, XK_parenright, 0x32B5,
4145 XK_parenleft, XK_4, XK_1, XK_parenright, 0x32B6,
4146 XK_parenleft, XK_4, XK_2, XK_parenright, 0x32B7,
4147 XK_parenleft, XK_4, XK_3, XK_parenright, 0x32B8,
4148 XK_parenleft, XK_4, XK_4, XK_parenright, 0x32B9,
4149 XK_parenleft, XK_4, XK_5, XK_parenright, 0x32BA,
4150 XK_parenleft, XK_4, XK_6, XK_parenright, 0x32BB,
4151 XK_parenleft, XK_4, XK_7, XK_parenright, 0x32BC,
4152 XK_parenleft, XK_4, XK_8, XK_parenright, 0x32BD,
4153 XK_parenleft, XK_4, XK_9, XK_parenright, 0x32BE,
4154 XK_parenleft, XK_4, XK_KP_Space, XK_parenright, 0x32B7,
4155 XK_parenleft, XK_4, XK_KP_0, XK_parenright, 0x32B5,
4156 XK_parenleft, XK_4, XK_KP_1, XK_parenright, 0x32B6,
4157 XK_parenleft, XK_4, XK_KP_2, XK_parenright, 0x32B7,
4158 XK_parenleft, XK_4, XK_KP_3, XK_parenright, 0x32B8,
4159 XK_parenleft, XK_4, XK_KP_4, XK_parenright, 0x32B9,
4160 XK_parenleft, XK_4, XK_KP_5, XK_parenright, 0x32BA,
4161 XK_parenleft, XK_4, XK_KP_6, XK_parenright, 0x32BB,
4162 XK_parenleft, XK_4, XK_KP_7, XK_parenright, 0x32BC,
4163 XK_parenleft, XK_4, XK_KP_8, XK_parenright, 0x32BD,
4164 XK_parenleft, XK_4, XK_KP_9, XK_parenright, 0x32BE,
4165 XK_parenleft, XK_5, XK_KP_0, XK_parenright, 0x32BF,
4166 XK_parenleft, 0x1100, 0x1161, XK_parenright, 0x326E,
4167 XK_parenleft, 0x1102, 0x1161, XK_parenright, 0x326F,
4168 XK_parenleft, 0x1103, 0x1161, XK_parenright, 0x3270,
4169 XK_parenleft, 0x1105, 0x1161, XK_parenright, 0x3271,
4170 XK_parenleft, 0x1106, 0x1161, XK_parenright, 0x3272,
4171 XK_parenleft, 0x1107, 0x1161, XK_parenright, 0x3273,
4172 XK_parenleft, 0x1109, 0x1161, XK_parenright, 0x3274,
4173 XK_parenleft, 0x110B, 0x1161, XK_parenright, 0x3275,
4174 XK_parenleft, 0x110C, 0x1161, XK_parenright, 0x3276,
4175 XK_parenleft, 0x110E, 0x1161, XK_parenright, 0x3277,
4176 XK_parenleft, 0x110F, 0x1161, XK_parenright, 0x3278,
4177 XK_parenleft, 0x1110, 0x1161, XK_parenright, 0x3279,
4178 XK_parenleft, 0x1111, 0x1161, XK_parenright, 0x327A,
4179 XK_parenleft, 0x1112, 0x1161, XK_parenright, 0x327B,
4180 XK_parenleft, XK_KP_Space, XK_0, XK_parenright, 0x2473,
4181 XK_parenleft, XK_KP_Space, XK_1, XK_parenright, 0x3251,
4182 XK_parenleft, XK_KP_Space, XK_2, XK_parenright, 0x3252,
4183 XK_parenleft, XK_KP_Space, XK_3, XK_parenright, 0x3253,
4184 XK_parenleft, XK_KP_Space, XK_4, XK_parenright, 0x3254,
4185 XK_parenleft, XK_KP_Space, XK_5, XK_parenright, 0x3255,
4186 XK_parenleft, XK_KP_Space, XK_6, XK_parenright, 0x3256,
4187 XK_parenleft, XK_KP_Space, XK_7, XK_parenright, 0x3257,
4188 XK_parenleft, XK_KP_Space, XK_8, XK_parenright, 0x3258,
4189 XK_parenleft, XK_KP_Space, XK_9, XK_parenright, 0x3259,
4190 XK_parenleft, XK_KP_Space, XK_KP_Space, XK_parenright, 0x3252,
4191 XK_parenleft, XK_KP_Space, XK_KP_0, XK_parenright, 0x2473,
4192 XK_parenleft, XK_KP_Space, XK_KP_1, XK_parenright, 0x3251,
4193 XK_parenleft, XK_KP_Space, XK_KP_2, XK_parenright, 0x3252,
4194 XK_parenleft, XK_KP_Space, XK_KP_3, XK_parenright, 0x3253,
4195 XK_parenleft, XK_KP_Space, XK_KP_4, XK_parenright, 0x3254,
4196 XK_parenleft, XK_KP_Space, XK_KP_5, XK_parenright, 0x3255,
4197 XK_parenleft, XK_KP_Space, XK_KP_6, XK_parenright, 0x3256,
4198 XK_parenleft, XK_KP_Space, XK_KP_7, XK_parenright, 0x3257,
4199 XK_parenleft, XK_KP_Space, XK_KP_8, XK_parenright, 0x3258,
4200 XK_parenleft, XK_KP_Space, XK_KP_9, XK_parenright, 0x3259,
4201 XK_parenleft, XK_KP_1, XK_0, XK_parenright, 0x2469,
4202 XK_parenleft, XK_KP_1, XK_1, XK_parenright, 0x246A,
4203 XK_parenleft, XK_KP_1, XK_2, XK_parenright, 0x246B,
4204 XK_parenleft, XK_KP_1, XK_3, XK_parenright, 0x246C,
4205 XK_parenleft, XK_KP_1, XK_4, XK_parenright, 0x246D,
4206 XK_parenleft, XK_KP_1, XK_5, XK_parenright, 0x246E,
4207 XK_parenleft, XK_KP_1, XK_6, XK_parenright, 0x246F,
4208 XK_parenleft, XK_KP_1, XK_7, XK_parenright, 0x2470,
4209 XK_parenleft, XK_KP_1, XK_8, XK_parenright, 0x2471,
4210 XK_parenleft, XK_KP_1, XK_9, XK_parenright, 0x2472,
4211 XK_parenleft, XK_KP_1, XK_KP_Space, XK_parenright, 0x246B,
4212 XK_parenleft, XK_KP_1, XK_KP_0, XK_parenright, 0x2469,
4213 XK_parenleft, XK_KP_1, XK_KP_1, XK_parenright, 0x246A,
4214 XK_parenleft, XK_KP_1, XK_KP_2, XK_parenright, 0x246B,
4215 XK_parenleft, XK_KP_1, XK_KP_3, XK_parenright, 0x246C,
4216 XK_parenleft, XK_KP_1, XK_KP_4, XK_parenright, 0x246D,
4217 XK_parenleft, XK_KP_1, XK_KP_5, XK_parenright, 0x246E,
4218 XK_parenleft, XK_KP_1, XK_KP_6, XK_parenright, 0x246F,
4219 XK_parenleft, XK_KP_1, XK_KP_7, XK_parenright, 0x2470,
4220 XK_parenleft, XK_KP_1, XK_KP_8, XK_parenright, 0x2471,
4221 XK_parenleft, XK_KP_1, XK_KP_9, XK_parenright, 0x2472,
4222 XK_parenleft, XK_KP_2, XK_0, XK_parenright, 0x2473,
4223 XK_parenleft, XK_KP_2, XK_1, XK_parenright, 0x3251,
4224 XK_parenleft, XK_KP_2, XK_2, XK_parenright, 0x3252,
4225 XK_parenleft, XK_KP_2, XK_3, XK_parenright, 0x3253,
4226 XK_parenleft, XK_KP_2, XK_4, XK_parenright, 0x3254,
4227 XK_parenleft, XK_KP_2, XK_5, XK_parenright, 0x3255,
4228 XK_parenleft, XK_KP_2, XK_6, XK_parenright, 0x3256,
4229 XK_parenleft, XK_KP_2, XK_7, XK_parenright, 0x3257,
4230 XK_parenleft, XK_KP_2, XK_8, XK_parenright, 0x3258,
4231 XK_parenleft, XK_KP_2, XK_9, XK_parenright, 0x3259,
4232 XK_parenleft, XK_KP_2, XK_KP_Space, XK_parenright, 0x3252,
4233 XK_parenleft, XK_KP_2, XK_KP_0, XK_parenright, 0x2473,
4234 XK_parenleft, XK_KP_2, XK_KP_1, XK_parenright, 0x3251,
4235 XK_parenleft, XK_KP_2, XK_KP_2, XK_parenright, 0x3252,
4236 XK_parenleft, XK_KP_2, XK_KP_3, XK_parenright, 0x3253,
4237 XK_parenleft, XK_KP_2, XK_KP_4, XK_parenright, 0x3254,
4238 XK_parenleft, XK_KP_2, XK_KP_5, XK_parenright, 0x3255,
4239 XK_parenleft, XK_KP_2, XK_KP_6, XK_parenright, 0x3256,
4240 XK_parenleft, XK_KP_2, XK_KP_7, XK_parenright, 0x3257,
4241 XK_parenleft, XK_KP_2, XK_KP_8, XK_parenright, 0x3258,
4242 XK_parenleft, XK_KP_2, XK_KP_9, XK_parenright, 0x3259,
4243 XK_parenleft, XK_KP_3, XK_0, XK_parenright, 0x325A,
4244 XK_parenleft, XK_KP_3, XK_1, XK_parenright, 0x325B,
4245 XK_parenleft, XK_KP_3, XK_2, XK_parenright, 0x325C,
4246 XK_parenleft, XK_KP_3, XK_3, XK_parenright, 0x325D,
4247 XK_parenleft, XK_KP_3, XK_4, XK_parenright, 0x325E,
4248 XK_parenleft, XK_KP_3, XK_5, XK_parenright, 0x325F,
4249 XK_parenleft, XK_KP_3, XK_6, XK_parenright, 0x32B1,
4250 XK_parenleft, XK_KP_3, XK_7, XK_parenright, 0x32B2,
4251 XK_parenleft, XK_KP_3, XK_8, XK_parenright, 0x32B3,
4252 XK_parenleft, XK_KP_3, XK_9, XK_parenright, 0x32B4,
4253 XK_parenleft, XK_KP_3, XK_KP_Space, XK_parenright, 0x325C,
4254 XK_parenleft, XK_KP_3, XK_KP_0, XK_parenright, 0x325A,
4255 XK_parenleft, XK_KP_3, XK_KP_1, XK_parenright, 0x325B,
4256 XK_parenleft, XK_KP_3, XK_KP_2, XK_parenright, 0x325C,
4257 XK_parenleft, XK_KP_3, XK_KP_3, XK_parenright, 0x325D,
4258 XK_parenleft, XK_KP_3, XK_KP_4, XK_parenright, 0x325E,
4259 XK_parenleft, XK_KP_3, XK_KP_5, XK_parenright, 0x325F,
4260 XK_parenleft, XK_KP_3, XK_KP_6, XK_parenright, 0x32B1,
4261 XK_parenleft, XK_KP_3, XK_KP_7, XK_parenright, 0x32B2,
4262 XK_parenleft, XK_KP_3, XK_KP_8, XK_parenright, 0x32B3,
4263 XK_parenleft, XK_KP_3, XK_KP_9, XK_parenright, 0x32B4,
4264 XK_parenleft, XK_KP_4, XK_0, XK_parenright, 0x32B5,
4265 XK_parenleft, XK_KP_4, XK_1, XK_parenright, 0x32B6,
4266 XK_parenleft, XK_KP_4, XK_2, XK_parenright, 0x32B7,
4267 XK_parenleft, XK_KP_4, XK_3, XK_parenright, 0x32B8,
4268 XK_parenleft, XK_KP_4, XK_4, XK_parenright, 0x32B9,
4269 XK_parenleft, XK_KP_4, XK_5, XK_parenright, 0x32BA,
4270 XK_parenleft, XK_KP_4, XK_6, XK_parenright, 0x32BB,
4271 XK_parenleft, XK_KP_4, XK_7, XK_parenright, 0x32BC,
4272 XK_parenleft, XK_KP_4, XK_8, XK_parenright, 0x32BD,
4273 XK_parenleft, XK_KP_4, XK_9, XK_parenright, 0x32BE,
4274 XK_parenleft, XK_KP_4, XK_KP_Space, XK_parenright, 0x32B7,
4275 XK_parenleft, XK_KP_4, XK_KP_0, XK_parenright, 0x32B5,
4276 XK_parenleft, XK_KP_4, XK_KP_1, XK_parenright, 0x32B6,
4277 XK_parenleft, XK_KP_4, XK_KP_2, XK_parenright, 0x32B7,
4278 XK_parenleft, XK_KP_4, XK_KP_3, XK_parenright, 0x32B8,
4279 XK_parenleft, XK_KP_4, XK_KP_4, XK_parenright, 0x32B9,
4280 XK_parenleft, XK_KP_4, XK_KP_5, XK_parenright, 0x32BA,
4281 XK_parenleft, XK_KP_4, XK_KP_6, XK_parenright, 0x32BB,
4282 XK_parenleft, XK_KP_4, XK_KP_7, XK_parenright, 0x32BC,
4283 XK_parenleft, XK_KP_4, XK_KP_8, XK_parenright, 0x32BD,
4284 XK_parenleft, XK_KP_4, XK_KP_9, XK_parenright, 0x32BE,
4285 XK_parenleft, XK_KP_5, XK_KP_0, XK_parenright, 0x32BF,
4286 XK_Greek_iota, XK_apostrophe, XK_parenleft, XK_Greek_ALPHA, 0x1F8D,
4287 XK_Greek_iota, XK_apostrophe, XK_parenleft, XK_Greek_ETA, 0x1F9D,
4288 XK_Greek_iota, XK_apostrophe, XK_parenleft, XK_Greek_OMEGA, 0x1FAD,
4289 XK_Greek_iota, XK_apostrophe, XK_parenleft, XK_Greek_alpha, 0x1F85,
4290 XK_Greek_iota, XK_apostrophe, XK_parenleft, XK_Greek_eta, 0x1F95,
4291 XK_Greek_iota, XK_apostrophe, XK_parenleft, XK_Greek_omega, 0x1FA5,
4292 XK_Greek_iota, XK_apostrophe, XK_parenright, XK_Greek_ALPHA, 0x1F8C,
4293 XK_Greek_iota, XK_apostrophe, XK_parenright, XK_Greek_ETA, 0x1F9C,
4294 XK_Greek_iota, XK_apostrophe, XK_parenright, XK_Greek_OMEGA, 0x1FAC,
4295 XK_Greek_iota, XK_apostrophe, XK_parenright, XK_Greek_alpha, 0x1F84,
4296 XK_Greek_iota, XK_apostrophe, XK_parenright, XK_Greek_eta, 0x1F94,
4297 XK_Greek_iota, XK_apostrophe, XK_parenright, XK_Greek_omega, 0x1FA4,
4298 XK_Greek_iota, XK_apostrophe, XK_dead_psili, XK_Greek_ALPHA, 0x1F8C,
4299 XK_Greek_iota, XK_apostrophe, XK_dead_psili, XK_Greek_ETA, 0x1F9C,
4300 XK_Greek_iota, XK_apostrophe, XK_dead_psili, XK_Greek_OMEGA, 0x1FAC,
4301 XK_Greek_iota, XK_apostrophe, XK_dead_psili, XK_Greek_alpha, 0x1F84,
4302 XK_Greek_iota, XK_apostrophe, XK_dead_psili, XK_Greek_eta, 0x1F94,
4303 XK_Greek_iota, XK_apostrophe, XK_dead_psili, XK_Greek_omega, 0x1FA4,
4304 XK_Greek_iota, XK_apostrophe, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8D,
4305 XK_Greek_iota, XK_apostrophe, XK_dead_dasia, XK_Greek_ETA, 0x1F9D,
4306 XK_Greek_iota, XK_apostrophe, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAD,
4307 XK_Greek_iota, XK_apostrophe, XK_dead_dasia, XK_Greek_alpha, 0x1F85,
4308 XK_Greek_iota, XK_apostrophe, XK_dead_dasia, XK_Greek_eta, 0x1F95,
4309 XK_Greek_iota, XK_apostrophe, XK_dead_dasia, XK_Greek_omega, 0x1FA5,
4310 XK_Greek_iota, XK_grave, XK_parenleft, XK_Greek_ALPHA, 0x1F8B,
4311 XK_Greek_iota, XK_grave, XK_parenleft, XK_Greek_ETA, 0x1F9B,
4312 XK_Greek_iota, XK_grave, XK_parenleft, XK_Greek_OMEGA, 0x1FAB,
4313 XK_Greek_iota, XK_grave, XK_parenleft, XK_Greek_alpha, 0x1F83,
4314 XK_Greek_iota, XK_grave, XK_parenleft, XK_Greek_eta, 0x1F93,
4315 XK_Greek_iota, XK_grave, XK_parenleft, XK_Greek_omega, 0x1FA3,
4316 XK_Greek_iota, XK_grave, XK_parenright, XK_Greek_ALPHA, 0x1F8A,
4317 XK_Greek_iota, XK_grave, XK_parenright, XK_Greek_ETA, 0x1F9A,
4318 XK_Greek_iota, XK_grave, XK_parenright, XK_Greek_OMEGA, 0x1FAA,
4319 XK_Greek_iota, XK_grave, XK_parenright, XK_Greek_alpha, 0x1F82,
4320 XK_Greek_iota, XK_grave, XK_parenright, XK_Greek_eta, 0x1F92,
4321 XK_Greek_iota, XK_grave, XK_parenright, XK_Greek_omega, 0x1FA2,
4322 XK_Greek_iota, XK_grave, XK_dead_psili, XK_Greek_ALPHA, 0x1F8A,
4323 XK_Greek_iota, XK_grave, XK_dead_psili, XK_Greek_ETA, 0x1F9A,
4324 XK_Greek_iota, XK_grave, XK_dead_psili, XK_Greek_OMEGA, 0x1FAA,
4325 XK_Greek_iota, XK_grave, XK_dead_psili, XK_Greek_alpha, 0x1F82,
4326 XK_Greek_iota, XK_grave, XK_dead_psili, XK_Greek_eta, 0x1F92,
4327 XK_Greek_iota, XK_grave, XK_dead_psili, XK_Greek_omega, 0x1FA2,
4328 XK_Greek_iota, XK_grave, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8B,
4329 XK_Greek_iota, XK_grave, XK_dead_dasia, XK_Greek_ETA, 0x1F9B,
4330 XK_Greek_iota, XK_grave, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAB,
4331 XK_Greek_iota, XK_grave, XK_dead_dasia, XK_Greek_alpha, 0x1F83,
4332 XK_Greek_iota, XK_grave, XK_dead_dasia, XK_Greek_eta, 0x1F93,
4333 XK_Greek_iota, XK_grave, XK_dead_dasia, XK_Greek_omega, 0x1FA3,
4334 XK_Greek_iota, XK_asciitilde, XK_parenleft, XK_Greek_ALPHA, 0x1F8F,
4335 XK_Greek_iota, XK_asciitilde, XK_parenleft, XK_Greek_ETA, 0x1F9F,
4336 XK_Greek_iota, XK_asciitilde, XK_parenleft, XK_Greek_OMEGA, 0x1FAF,
4337 XK_Greek_iota, XK_asciitilde, XK_parenleft, XK_Greek_alpha, 0x1F87,
4338 XK_Greek_iota, XK_asciitilde, XK_parenleft, XK_Greek_eta, 0x1F97,
4339 XK_Greek_iota, XK_asciitilde, XK_parenleft, XK_Greek_omega, 0x1FA7,
4340 XK_Greek_iota, XK_asciitilde, XK_parenright, XK_Greek_ALPHA, 0x1F8E,
4341 XK_Greek_iota, XK_asciitilde, XK_parenright, XK_Greek_ETA, 0x1F9E,
4342 XK_Greek_iota, XK_asciitilde, XK_parenright, XK_Greek_OMEGA, 0x1FAE,
4343 XK_Greek_iota, XK_asciitilde, XK_parenright, XK_Greek_alpha, 0x1F86,
4344 XK_Greek_iota, XK_asciitilde, XK_parenright, XK_Greek_eta, 0x1F96,
4345 XK_Greek_iota, XK_asciitilde, XK_parenright, XK_Greek_omega, 0x1FA6,
4346 XK_Greek_iota, XK_asciitilde, XK_dead_psili, XK_Greek_ALPHA, 0x1F8E,
4347 XK_Greek_iota, XK_asciitilde, XK_dead_psili, XK_Greek_ETA, 0x1F9E,
4348 XK_Greek_iota, XK_asciitilde, XK_dead_psili, XK_Greek_OMEGA, 0x1FAE,
4349 XK_Greek_iota, XK_asciitilde, XK_dead_psili, XK_Greek_alpha, 0x1F86,
4350 XK_Greek_iota, XK_asciitilde, XK_dead_psili, XK_Greek_eta, 0x1F96,
4351 XK_Greek_iota, XK_asciitilde, XK_dead_psili, XK_Greek_omega, 0x1FA6,
4352 XK_Greek_iota, XK_asciitilde, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8F,
4353 XK_Greek_iota, XK_asciitilde, XK_dead_dasia, XK_Greek_ETA, 0x1F9F,
4354 XK_Greek_iota, XK_asciitilde, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAF,
4355 XK_Greek_iota, XK_asciitilde, XK_dead_dasia, XK_Greek_alpha, 0x1F87,
4356 XK_Greek_iota, XK_asciitilde, XK_dead_dasia, XK_Greek_eta, 0x1F97,
4357 XK_Greek_iota, XK_asciitilde, XK_dead_dasia, XK_Greek_omega, 0x1FA7,
4358 XK_Greek_iota, XK_acute, XK_parenleft, XK_Greek_ALPHA, 0x1F8D,
4359 XK_Greek_iota, XK_acute, XK_parenleft, XK_Greek_ETA, 0x1F9D,
4360 XK_Greek_iota, XK_acute, XK_parenleft, XK_Greek_OMEGA, 0x1FAD,
4361 XK_Greek_iota, XK_acute, XK_parenleft, XK_Greek_alpha, 0x1F85,
4362 XK_Greek_iota, XK_acute, XK_parenleft, XK_Greek_eta, 0x1F95,
4363 XK_Greek_iota, XK_acute, XK_parenleft, XK_Greek_omega, 0x1FA5,
4364 XK_Greek_iota, XK_acute, XK_parenright, XK_Greek_ALPHA, 0x1F8C,
4365 XK_Greek_iota, XK_acute, XK_parenright, XK_Greek_ETA, 0x1F9C,
4366 XK_Greek_iota, XK_acute, XK_parenright, XK_Greek_OMEGA, 0x1FAC,
4367 XK_Greek_iota, XK_acute, XK_parenright, XK_Greek_alpha, 0x1F84,
4368 XK_Greek_iota, XK_acute, XK_parenright, XK_Greek_eta, 0x1F94,
4369 XK_Greek_iota, XK_acute, XK_parenright, XK_Greek_omega, 0x1FA4,
4370 XK_Greek_iota, XK_acute, XK_dead_psili, XK_Greek_ALPHA, 0x1F8C,
4371 XK_Greek_iota, XK_acute, XK_dead_psili, XK_Greek_ETA, 0x1F9C,
4372 XK_Greek_iota, XK_acute, XK_dead_psili, XK_Greek_OMEGA, 0x1FAC,
4373 XK_Greek_iota, XK_acute, XK_dead_psili, XK_Greek_alpha, 0x1F84,
4374 XK_Greek_iota, XK_acute, XK_dead_psili, XK_Greek_eta, 0x1F94,
4375 XK_Greek_iota, XK_acute, XK_dead_psili, XK_Greek_omega, 0x1FA4,
4376 XK_Greek_iota, XK_acute, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8D,
4377 XK_Greek_iota, XK_acute, XK_dead_dasia, XK_Greek_ETA, 0x1F9D,
4378 XK_Greek_iota, XK_acute, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAD,
4379 XK_Greek_iota, XK_acute, XK_dead_dasia, XK_Greek_alpha, 0x1F85,
4380 XK_Greek_iota, XK_acute, XK_dead_dasia, XK_Greek_eta, 0x1F95,
4381 XK_Greek_iota, XK_acute, XK_dead_dasia, XK_Greek_omega, 0x1FA5,
4382 XK_Greek_iota, XK_dead_grave, XK_parenleft, XK_Greek_ALPHA, 0x1F8B,
4383 XK_Greek_iota, XK_dead_grave, XK_parenleft, XK_Greek_ETA, 0x1F9B,
4384 XK_Greek_iota, XK_dead_grave, XK_parenleft, XK_Greek_OMEGA, 0x1FAB,
4385 XK_Greek_iota, XK_dead_grave, XK_parenleft, XK_Greek_alpha, 0x1F83,
4386 XK_Greek_iota, XK_dead_grave, XK_parenleft, XK_Greek_eta, 0x1F93,
4387 XK_Greek_iota, XK_dead_grave, XK_parenleft, XK_Greek_omega, 0x1FA3,
4388 XK_Greek_iota, XK_dead_grave, XK_parenright, XK_Greek_ALPHA, 0x1F8A,
4389 XK_Greek_iota, XK_dead_grave, XK_parenright, XK_Greek_ETA, 0x1F9A,
4390 XK_Greek_iota, XK_dead_grave, XK_parenright, XK_Greek_OMEGA, 0x1FAA,
4391 XK_Greek_iota, XK_dead_grave, XK_parenright, XK_Greek_alpha, 0x1F82,
4392 XK_Greek_iota, XK_dead_grave, XK_parenright, XK_Greek_eta, 0x1F92,
4393 XK_Greek_iota, XK_dead_grave, XK_parenright, XK_Greek_omega, 0x1FA2,
4394 XK_Greek_iota, XK_dead_grave, XK_dead_psili, XK_Greek_ALPHA, 0x1F8A,
4395 XK_Greek_iota, XK_dead_grave, XK_dead_psili, XK_Greek_ETA, 0x1F9A,
4396 XK_Greek_iota, XK_dead_grave, XK_dead_psili, XK_Greek_OMEGA, 0x1FAA,
4397 XK_Greek_iota, XK_dead_grave, XK_dead_psili, XK_Greek_alpha, 0x1F82,
4398 XK_Greek_iota, XK_dead_grave, XK_dead_psili, XK_Greek_eta, 0x1F92,
4399 XK_Greek_iota, XK_dead_grave, XK_dead_psili, XK_Greek_omega, 0x1FA2,
4400 XK_Greek_iota, XK_dead_grave, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8B,
4401 XK_Greek_iota, XK_dead_grave, XK_dead_dasia, XK_Greek_ETA, 0x1F9B,
4402 XK_Greek_iota, XK_dead_grave, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAB,
4403 XK_Greek_iota, XK_dead_grave, XK_dead_dasia, XK_Greek_alpha, 0x1F83,
4404 XK_Greek_iota, XK_dead_grave, XK_dead_dasia, XK_Greek_eta, 0x1F93,
4405 XK_Greek_iota, XK_dead_grave, XK_dead_dasia, XK_Greek_omega, 0x1FA3,
4406 XK_Greek_iota, XK_dead_acute, XK_parenleft, XK_Greek_ALPHA, 0x1F8D,
4407 XK_Greek_iota, XK_dead_acute, XK_parenleft, XK_Greek_ETA, 0x1F9D,
4408 XK_Greek_iota, XK_dead_acute, XK_parenleft, XK_Greek_OMEGA, 0x1FAD,
4409 XK_Greek_iota, XK_dead_acute, XK_parenleft, XK_Greek_alpha, 0x1F85,
4410 XK_Greek_iota, XK_dead_acute, XK_parenleft, XK_Greek_eta, 0x1F95,
4411 XK_Greek_iota, XK_dead_acute, XK_parenleft, XK_Greek_omega, 0x1FA5,
4412 XK_Greek_iota, XK_dead_acute, XK_parenright, XK_Greek_ALPHA, 0x1F8C,
4413 XK_Greek_iota, XK_dead_acute, XK_parenright, XK_Greek_ETA, 0x1F9C,
4414 XK_Greek_iota, XK_dead_acute, XK_parenright, XK_Greek_OMEGA, 0x1FAC,
4415 XK_Greek_iota, XK_dead_acute, XK_parenright, XK_Greek_alpha, 0x1F84,
4416 XK_Greek_iota, XK_dead_acute, XK_parenright, XK_Greek_eta, 0x1F94,
4417 XK_Greek_iota, XK_dead_acute, XK_parenright, XK_Greek_omega, 0x1FA4,
4418 XK_Greek_iota, XK_dead_acute, XK_dead_psili, XK_Greek_ALPHA, 0x1F8C,
4419 XK_Greek_iota, XK_dead_acute, XK_dead_psili, XK_Greek_ETA, 0x1F9C,
4420 XK_Greek_iota, XK_dead_acute, XK_dead_psili, XK_Greek_OMEGA, 0x1FAC,
4421 XK_Greek_iota, XK_dead_acute, XK_dead_psili, XK_Greek_alpha, 0x1F84,
4422 XK_Greek_iota, XK_dead_acute, XK_dead_psili, XK_Greek_eta, 0x1F94,
4423 XK_Greek_iota, XK_dead_acute, XK_dead_psili, XK_Greek_omega, 0x1FA4,
4424 XK_Greek_iota, XK_dead_acute, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8D,
4425 XK_Greek_iota, XK_dead_acute, XK_dead_dasia, XK_Greek_ETA, 0x1F9D,
4426 XK_Greek_iota, XK_dead_acute, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAD,
4427 XK_Greek_iota, XK_dead_acute, XK_dead_dasia, XK_Greek_alpha, 0x1F85,
4428 XK_Greek_iota, XK_dead_acute, XK_dead_dasia, XK_Greek_eta, 0x1F95,
4429 XK_Greek_iota, XK_dead_acute, XK_dead_dasia, XK_Greek_omega, 0x1FA5,
4430 XK_Greek_iota, XK_dead_tilde, XK_parenleft, XK_Greek_ALPHA, 0x1F8F,
4431 XK_Greek_iota, XK_dead_tilde, XK_parenleft, XK_Greek_ETA, 0x1F9F,
4432 XK_Greek_iota, XK_dead_tilde, XK_parenleft, XK_Greek_OMEGA, 0x1FAF,
4433 XK_Greek_iota, XK_dead_tilde, XK_parenleft, XK_Greek_alpha, 0x1F87,
4434 XK_Greek_iota, XK_dead_tilde, XK_parenleft, XK_Greek_eta, 0x1F97,
4435 XK_Greek_iota, XK_dead_tilde, XK_parenleft, XK_Greek_omega, 0x1FA7,
4436 XK_Greek_iota, XK_dead_tilde, XK_parenright, XK_Greek_ALPHA, 0x1F8E,
4437 XK_Greek_iota, XK_dead_tilde, XK_parenright, XK_Greek_ETA, 0x1F9E,
4438 XK_Greek_iota, XK_dead_tilde, XK_parenright, XK_Greek_OMEGA, 0x1FAE,
4439 XK_Greek_iota, XK_dead_tilde, XK_parenright, XK_Greek_alpha, 0x1F86,
4440 XK_Greek_iota, XK_dead_tilde, XK_parenright, XK_Greek_eta, 0x1F96,
4441 XK_Greek_iota, XK_dead_tilde, XK_parenright, XK_Greek_omega, 0x1FA6,
4442 XK_Greek_iota, XK_dead_tilde, XK_dead_psili, XK_Greek_ALPHA, 0x1F8E,
4443 XK_Greek_iota, XK_dead_tilde, XK_dead_psili, XK_Greek_ETA, 0x1F9E,
4444 XK_Greek_iota, XK_dead_tilde, XK_dead_psili, XK_Greek_OMEGA, 0x1FAE,
4445 XK_Greek_iota, XK_dead_tilde, XK_dead_psili, XK_Greek_alpha, 0x1F86,
4446 XK_Greek_iota, XK_dead_tilde, XK_dead_psili, XK_Greek_eta, 0x1F96,
4447 XK_Greek_iota, XK_dead_tilde, XK_dead_psili, XK_Greek_omega, 0x1FA6,
4448 XK_Greek_iota, XK_dead_tilde, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8F,
4449 XK_Greek_iota, XK_dead_tilde, XK_dead_dasia, XK_Greek_ETA, 0x1F9F,
4450 XK_Greek_iota, XK_dead_tilde, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAF,
4451 XK_Greek_iota, XK_dead_tilde, XK_dead_dasia, XK_Greek_alpha, 0x1F87,
4452 XK_Greek_iota, XK_dead_tilde, XK_dead_dasia, XK_Greek_eta, 0x1F97,
4453 };
4454
4455 #endif
4456
4457
4458 // kate: indent-mode cstyle; space-indent on; indent-width 0;
0 {
1 "Keys": [ "fcitx" ]
2 }
0 /***************************************************************************
1 * Copyright (C) 2012~2013 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #ifndef KEYDATA_H
20 #define KEYDATA_H
21
22 struct _FcitxKeySymToUnicode{
23 uint16_t keysym;
24 uint16_t ucs;
25 };
26
27 struct _FcitxUnicodeToKeySym {
28 uint16_t keysym;
29 uint16_t ucs;
30 };
31
32 static const struct _FcitxKeySymToUnicode gdk_keysym_to_unicode_tab[] = {
33 { 0x01a1, 0x0104 }, /* Aogonek Ą LATIN CAPITAL LETTER A WITH OGONEK */
34 { 0x01a2, 0x02d8 }, /* breve ˘ BREVE */
35 { 0x01a3, 0x0141 }, /* Lstroke Ł LATIN CAPITAL LETTER L WITH STROKE */
36 { 0x01a5, 0x013d }, /* Lcaron Ľ LATIN CAPITAL LETTER L WITH CARON */
37 { 0x01a6, 0x015a }, /* Sacute Ś LATIN CAPITAL LETTER S WITH ACUTE */
38 { 0x01a9, 0x0160 }, /* Scaron Š LATIN CAPITAL LETTER S WITH CARON */
39 { 0x01aa, 0x015e }, /* Scedilla Ş LATIN CAPITAL LETTER S WITH CEDILLA */
40 { 0x01ab, 0x0164 }, /* Tcaron Ť LATIN CAPITAL LETTER T WITH CARON */
41 { 0x01ac, 0x0179 }, /* Zacute Ź LATIN CAPITAL LETTER Z WITH ACUTE */
42 { 0x01ae, 0x017d }, /* Zcaron Ž LATIN CAPITAL LETTER Z WITH CARON */
43 { 0x01af, 0x017b }, /* Zabovedot Ż LATIN CAPITAL LETTER Z WITH DOT ABOVE */
44 { 0x01b1, 0x0105 }, /* aogonek ą LATIN SMALL LETTER A WITH OGONEK */
45 { 0x01b2, 0x02db }, /* ogonek ˛ OGONEK */
46 { 0x01b3, 0x0142 }, /* lstroke ł LATIN SMALL LETTER L WITH STROKE */
47 { 0x01b5, 0x013e }, /* lcaron ľ LATIN SMALL LETTER L WITH CARON */
48 { 0x01b6, 0x015b }, /* sacute ś LATIN SMALL LETTER S WITH ACUTE */
49 { 0x01b7, 0x02c7 }, /* caron ˇ CARON */
50 { 0x01b9, 0x0161 }, /* scaron š LATIN SMALL LETTER S WITH CARON */
51 { 0x01ba, 0x015f }, /* scedilla ş LATIN SMALL LETTER S WITH CEDILLA */
52 { 0x01bb, 0x0165 }, /* tcaron ť LATIN SMALL LETTER T WITH CARON */
53 { 0x01bc, 0x017a }, /* zacute ź LATIN SMALL LETTER Z WITH ACUTE */
54 { 0x01bd, 0x02dd }, /* doubleacute ˝ DOUBLE ACUTE ACCENT */
55 { 0x01be, 0x017e }, /* zcaron ž LATIN SMALL LETTER Z WITH CARON */
56 { 0x01bf, 0x017c }, /* zabovedot ż LATIN SMALL LETTER Z WITH DOT ABOVE */
57 { 0x01c0, 0x0154 }, /* Racute Ŕ LATIN CAPITAL LETTER R WITH ACUTE */
58 { 0x01c3, 0x0102 }, /* Abreve Ă LATIN CAPITAL LETTER A WITH BREVE */
59 { 0x01c5, 0x0139 }, /* Lacute Ĺ LATIN CAPITAL LETTER L WITH ACUTE */
60 { 0x01c6, 0x0106 }, /* Cacute Ć LATIN CAPITAL LETTER C WITH ACUTE */
61 { 0x01c8, 0x010c }, /* Ccaron Č LATIN CAPITAL LETTER C WITH CARON */
62 { 0x01ca, 0x0118 }, /* Eogonek Ę LATIN CAPITAL LETTER E WITH OGONEK */
63 { 0x01cc, 0x011a }, /* Ecaron Ě LATIN CAPITAL LETTER E WITH CARON */
64 { 0x01cf, 0x010e }, /* Dcaron Ď LATIN CAPITAL LETTER D WITH CARON */
65 { 0x01d0, 0x0110 }, /* Dstroke Đ LATIN CAPITAL LETTER D WITH STROKE */
66 { 0x01d1, 0x0143 }, /* Nacute Ń LATIN CAPITAL LETTER N WITH ACUTE */
67 { 0x01d2, 0x0147 }, /* Ncaron Ň LATIN CAPITAL LETTER N WITH CARON */
68 { 0x01d5, 0x0150 }, /* Odoubleacute Ő LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */
69 { 0x01d8, 0x0158 }, /* Rcaron Ř LATIN CAPITAL LETTER R WITH CARON */
70 { 0x01d9, 0x016e }, /* Uring Ů LATIN CAPITAL LETTER U WITH RING ABOVE */
71 { 0x01db, 0x0170 }, /* Udoubleacute Ű LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */
72 { 0x01de, 0x0162 }, /* Tcedilla Ţ LATIN CAPITAL LETTER T WITH CEDILLA */
73 { 0x01e0, 0x0155 }, /* racute ŕ LATIN SMALL LETTER R WITH ACUTE */
74 { 0x01e3, 0x0103 }, /* abreve ă LATIN SMALL LETTER A WITH BREVE */
75 { 0x01e5, 0x013a }, /* lacute ĺ LATIN SMALL LETTER L WITH ACUTE */
76 { 0x01e6, 0x0107 }, /* cacute ć LATIN SMALL LETTER C WITH ACUTE */
77 { 0x01e8, 0x010d }, /* ccaron č LATIN SMALL LETTER C WITH CARON */
78 { 0x01ea, 0x0119 }, /* eogonek ę LATIN SMALL LETTER E WITH OGONEK */
79 { 0x01ec, 0x011b }, /* ecaron ě LATIN SMALL LETTER E WITH CARON */
80 { 0x01ef, 0x010f }, /* dcaron ď LATIN SMALL LETTER D WITH CARON */
81 { 0x01f0, 0x0111 }, /* dstroke đ LATIN SMALL LETTER D WITH STROKE */
82 { 0x01f1, 0x0144 }, /* nacute ń LATIN SMALL LETTER N WITH ACUTE */
83 { 0x01f2, 0x0148 }, /* ncaron ň LATIN SMALL LETTER N WITH CARON */
84 { 0x01f5, 0x0151 }, /* odoubleacute ő LATIN SMALL LETTER O WITH DOUBLE ACUTE */
85 { 0x01f8, 0x0159 }, /* rcaron ř LATIN SMALL LETTER R WITH CARON */
86 { 0x01f9, 0x016f }, /* uring ů LATIN SMALL LETTER U WITH RING ABOVE */
87 { 0x01fb, 0x0171 }, /* udoubleacute ű LATIN SMALL LETTER U WITH DOUBLE ACUTE */
88 { 0x01fe, 0x0163 }, /* tcedilla ţ LATIN SMALL LETTER T WITH CEDILLA */
89 { 0x01ff, 0x02d9 }, /* abovedot ˙ DOT ABOVE */
90 { 0x02a1, 0x0126 }, /* Hstroke Ħ LATIN CAPITAL LETTER H WITH STROKE */
91 { 0x02a6, 0x0124 }, /* Hcircumflex Ĥ LATIN CAPITAL LETTER H WITH CIRCUMFLEX */
92 { 0x02a9, 0x0130 }, /* Iabovedot İ LATIN CAPITAL LETTER I WITH DOT ABOVE */
93 { 0x02ab, 0x011e }, /* Gbreve Ğ LATIN CAPITAL LETTER G WITH BREVE */
94 { 0x02ac, 0x0134 }, /* Jcircumflex Ĵ LATIN CAPITAL LETTER J WITH CIRCUMFLEX */
95 { 0x02b1, 0x0127 }, /* hstroke ħ LATIN SMALL LETTER H WITH STROKE */
96 { 0x02b6, 0x0125 }, /* hcircumflex ĥ LATIN SMALL LETTER H WITH CIRCUMFLEX */
97 { 0x02b9, 0x0131 }, /* idotless ı LATIN SMALL LETTER DOTLESS I */
98 { 0x02bb, 0x011f }, /* gbreve ğ LATIN SMALL LETTER G WITH BREVE */
99 { 0x02bc, 0x0135 }, /* jcircumflex ĵ LATIN SMALL LETTER J WITH CIRCUMFLEX */
100 { 0x02c5, 0x010a }, /* Cabovedot Ċ LATIN CAPITAL LETTER C WITH DOT ABOVE */
101 { 0x02c6, 0x0108 }, /* Ccircumflex Ĉ LATIN CAPITAL LETTER C WITH CIRCUMFLEX */
102 { 0x02d5, 0x0120 }, /* Gabovedot Ġ LATIN CAPITAL LETTER G WITH DOT ABOVE */
103 { 0x02d8, 0x011c }, /* Gcircumflex Ĝ LATIN CAPITAL LETTER G WITH CIRCUMFLEX */
104 { 0x02dd, 0x016c }, /* Ubreve Ŭ LATIN CAPITAL LETTER U WITH BREVE */
105 { 0x02de, 0x015c }, /* Scircumflex Ŝ LATIN CAPITAL LETTER S WITH CIRCUMFLEX */
106 { 0x02e5, 0x010b }, /* cabovedot ċ LATIN SMALL LETTER C WITH DOT ABOVE */
107 { 0x02e6, 0x0109 }, /* ccircumflex ĉ LATIN SMALL LETTER C WITH CIRCUMFLEX */
108 { 0x02f5, 0x0121 }, /* gabovedot ġ LATIN SMALL LETTER G WITH DOT ABOVE */
109 { 0x02f8, 0x011d }, /* gcircumflex ĝ LATIN SMALL LETTER G WITH CIRCUMFLEX */
110 { 0x02fd, 0x016d }, /* ubreve ŭ LATIN SMALL LETTER U WITH BREVE */
111 { 0x02fe, 0x015d }, /* scircumflex ŝ LATIN SMALL LETTER S WITH CIRCUMFLEX */
112 { 0x03a2, 0x0138 }, /* kra ĸ LATIN SMALL LETTER KRA */
113 { 0x03a3, 0x0156 }, /* Rcedilla Ŗ LATIN CAPITAL LETTER R WITH CEDILLA */
114 { 0x03a5, 0x0128 }, /* Itilde Ĩ LATIN CAPITAL LETTER I WITH TILDE */
115 { 0x03a6, 0x013b }, /* Lcedilla Ļ LATIN CAPITAL LETTER L WITH CEDILLA */
116 { 0x03aa, 0x0112 }, /* Emacron Ē LATIN CAPITAL LETTER E WITH MACRON */
117 { 0x03ab, 0x0122 }, /* Gcedilla Ģ LATIN CAPITAL LETTER G WITH CEDILLA */
118 { 0x03ac, 0x0166 }, /* Tslash Ŧ LATIN CAPITAL LETTER T WITH STROKE */
119 { 0x03b3, 0x0157 }, /* rcedilla ŗ LATIN SMALL LETTER R WITH CEDILLA */
120 { 0x03b5, 0x0129 }, /* itilde ĩ LATIN SMALL LETTER I WITH TILDE */
121 { 0x03b6, 0x013c }, /* lcedilla ļ LATIN SMALL LETTER L WITH CEDILLA */
122 { 0x03ba, 0x0113 }, /* emacron ē LATIN SMALL LETTER E WITH MACRON */
123 { 0x03bb, 0x0123 }, /* gcedilla ģ LATIN SMALL LETTER G WITH CEDILLA */
124 { 0x03bc, 0x0167 }, /* tslash ŧ LATIN SMALL LETTER T WITH STROKE */
125 { 0x03bd, 0x014a }, /* ENG Ŋ LATIN CAPITAL LETTER ENG */
126 { 0x03bf, 0x014b }, /* eng ŋ LATIN SMALL LETTER ENG */
127 { 0x03c0, 0x0100 }, /* Amacron Ā LATIN CAPITAL LETTER A WITH MACRON */
128 { 0x03c7, 0x012e }, /* Iogonek Į LATIN CAPITAL LETTER I WITH OGONEK */
129 { 0x03cc, 0x0116 }, /* Eabovedot Ė LATIN CAPITAL LETTER E WITH DOT ABOVE */
130 { 0x03cf, 0x012a }, /* Imacron Ī LATIN CAPITAL LETTER I WITH MACRON */
131 { 0x03d1, 0x0145 }, /* Ncedilla Ņ LATIN CAPITAL LETTER N WITH CEDILLA */
132 { 0x03d2, 0x014c }, /* Omacron Ō LATIN CAPITAL LETTER O WITH MACRON */
133 { 0x03d3, 0x0136 }, /* Kcedilla Ķ LATIN CAPITAL LETTER K WITH CEDILLA */
134 { 0x03d9, 0x0172 }, /* Uogonek Ų LATIN CAPITAL LETTER U WITH OGONEK */
135 { 0x03dd, 0x0168 }, /* Utilde Ũ LATIN CAPITAL LETTER U WITH TILDE */
136 { 0x03de, 0x016a }, /* Umacron Ū LATIN CAPITAL LETTER U WITH MACRON */
137 { 0x03e0, 0x0101 }, /* amacron ā LATIN SMALL LETTER A WITH MACRON */
138 { 0x03e7, 0x012f }, /* iogonek į LATIN SMALL LETTER I WITH OGONEK */
139 { 0x03ec, 0x0117 }, /* eabovedot ė LATIN SMALL LETTER E WITH DOT ABOVE */
140 { 0x03ef, 0x012b }, /* imacron ī LATIN SMALL LETTER I WITH MACRON */
141 { 0x03f1, 0x0146 }, /* ncedilla ņ LATIN SMALL LETTER N WITH CEDILLA */
142 { 0x03f2, 0x014d }, /* omacron ō LATIN SMALL LETTER O WITH MACRON */
143 { 0x03f3, 0x0137 }, /* kcedilla ķ LATIN SMALL LETTER K WITH CEDILLA */
144 { 0x03f9, 0x0173 }, /* uogonek ų LATIN SMALL LETTER U WITH OGONEK */
145 { 0x03fd, 0x0169 }, /* utilde ũ LATIN SMALL LETTER U WITH TILDE */
146 { 0x03fe, 0x016b }, /* umacron ū LATIN SMALL LETTER U WITH MACRON */
147 { 0x047e, 0x203e }, /* overline ‾ OVERLINE */
148 { 0x04a1, 0x3002 }, /* kana_fullstop 。 IDEOGRAPHIC FULL STOP */
149 { 0x04a2, 0x300c }, /* kana_openingbracket 「 LEFT CORNER BRACKET */
150 { 0x04a3, 0x300d }, /* kana_closingbracket 」 RIGHT CORNER BRACKET */
151 { 0x04a4, 0x3001 }, /* kana_comma 、 IDEOGRAPHIC COMMA */
152 { 0x04a5, 0x30fb }, /* kana_conjunctive ・ KATAKANA MIDDLE DOT */
153 { 0x04a6, 0x30f2 }, /* kana_WO ヲ KATAKANA LETTER WO */
154 { 0x04a7, 0x30a1 }, /* kana_a ァ KATAKANA LETTER SMALL A */
155 { 0x04a8, 0x30a3 }, /* kana_i ィ KATAKANA LETTER SMALL I */
156 { 0x04a9, 0x30a5 }, /* kana_u ゥ KATAKANA LETTER SMALL U */
157 { 0x04aa, 0x30a7 }, /* kana_e ェ KATAKANA LETTER SMALL E */
158 { 0x04ab, 0x30a9 }, /* kana_o ォ KATAKANA LETTER SMALL O */
159 { 0x04ac, 0x30e3 }, /* kana_ya ャ KATAKANA LETTER SMALL YA */
160 { 0x04ad, 0x30e5 }, /* kana_yu ュ KATAKANA LETTER SMALL YU */
161 { 0x04ae, 0x30e7 }, /* kana_yo ョ KATAKANA LETTER SMALL YO */
162 { 0x04af, 0x30c3 }, /* kana_tsu ッ KATAKANA LETTER SMALL TU */
163 { 0x04b0, 0x30fc }, /* prolongedsound ー KATAKANA-HIRAGANA PROLONGED SOUND MARK */
164 { 0x04b1, 0x30a2 }, /* kana_A ア KATAKANA LETTER A */
165 { 0x04b2, 0x30a4 }, /* kana_I イ KATAKANA LETTER I */
166 { 0x04b3, 0x30a6 }, /* kana_U ウ KATAKANA LETTER U */
167 { 0x04b4, 0x30a8 }, /* kana_E エ KATAKANA LETTER E */
168 { 0x04b5, 0x30aa }, /* kana_O オ KATAKANA LETTER O */
169 { 0x04b6, 0x30ab }, /* kana_KA カ KATAKANA LETTER KA */
170 { 0x04b7, 0x30ad }, /* kana_KI キ KATAKANA LETTER KI */
171 { 0x04b8, 0x30af }, /* kana_KU ク KATAKANA LETTER KU */
172 { 0x04b9, 0x30b1 }, /* kana_KE ケ KATAKANA LETTER KE */
173 { 0x04ba, 0x30b3 }, /* kana_KO コ KATAKANA LETTER KO */
174 { 0x04bb, 0x30b5 }, /* kana_SA サ KATAKANA LETTER SA */
175 { 0x04bc, 0x30b7 }, /* kana_SHI シ KATAKANA LETTER SI */
176 { 0x04bd, 0x30b9 }, /* kana_SU ス KATAKANA LETTER SU */
177 { 0x04be, 0x30bb }, /* kana_SE セ KATAKANA LETTER SE */
178 { 0x04bf, 0x30bd }, /* kana_SO ソ KATAKANA LETTER SO */
179 { 0x04c0, 0x30bf }, /* kana_TA タ KATAKANA LETTER TA */
180 { 0x04c1, 0x30c1 }, /* kana_CHI チ KATAKANA LETTER TI */
181 { 0x04c2, 0x30c4 }, /* kana_TSU ツ KATAKANA LETTER TU */
182 { 0x04c3, 0x30c6 }, /* kana_TE テ KATAKANA LETTER TE */
183 { 0x04c4, 0x30c8 }, /* kana_TO ト KATAKANA LETTER TO */
184 { 0x04c5, 0x30ca }, /* kana_NA ナ KATAKANA LETTER NA */
185 { 0x04c6, 0x30cb }, /* kana_NI ニ KATAKANA LETTER NI */
186 { 0x04c7, 0x30cc }, /* kana_NU ヌ KATAKANA LETTER NU */
187 { 0x04c8, 0x30cd }, /* kana_NE ネ KATAKANA LETTER NE */
188 { 0x04c9, 0x30ce }, /* kana_NO ノ KATAKANA LETTER NO */
189 { 0x04ca, 0x30cf }, /* kana_HA ハ KATAKANA LETTER HA */
190 { 0x04cb, 0x30d2 }, /* kana_HI ヒ KATAKANA LETTER HI */
191 { 0x04cc, 0x30d5 }, /* kana_FU フ KATAKANA LETTER HU */
192 { 0x04cd, 0x30d8 }, /* kana_HE ヘ KATAKANA LETTER HE */
193 { 0x04ce, 0x30db }, /* kana_HO ホ KATAKANA LETTER HO */
194 { 0x04cf, 0x30de }, /* kana_MA マ KATAKANA LETTER MA */
195 { 0x04d0, 0x30df }, /* kana_MI ミ KATAKANA LETTER MI */
196 { 0x04d1, 0x30e0 }, /* kana_MU ム KATAKANA LETTER MU */
197 { 0x04d2, 0x30e1 }, /* kana_ME メ KATAKANA LETTER ME */
198 { 0x04d3, 0x30e2 }, /* kana_MO モ KATAKANA LETTER MO */
199 { 0x04d4, 0x30e4 }, /* kana_YA ヤ KATAKANA LETTER YA */
200 { 0x04d5, 0x30e6 }, /* kana_YU ユ KATAKANA LETTER YU */
201 { 0x04d6, 0x30e8 }, /* kana_YO ヨ KATAKANA LETTER YO */
202 { 0x04d7, 0x30e9 }, /* kana_RA ラ KATAKANA LETTER RA */
203 { 0x04d8, 0x30ea }, /* kana_RI リ KATAKANA LETTER RI */
204 { 0x04d9, 0x30eb }, /* kana_RU ル KATAKANA LETTER RU */
205 { 0x04da, 0x30ec }, /* kana_RE レ KATAKANA LETTER RE */
206 { 0x04db, 0x30ed }, /* kana_RO ロ KATAKANA LETTER RO */
207 { 0x04dc, 0x30ef }, /* kana_WA ワ KATAKANA LETTER WA */
208 { 0x04dd, 0x30f3 }, /* kana_N ン KATAKANA LETTER N */
209 { 0x04de, 0x309b }, /* voicedsound ゛ KATAKANA-HIRAGANA VOICED SOUND MARK */
210 { 0x04df, 0x309c }, /* semivoicedsound ゜ KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */
211 { 0x05ac, 0x060c }, /* Arabic_comma ، ARABIC COMMA */
212 { 0x05bb, 0x061b }, /* Arabic_semicolon ؛ ARABIC SEMICOLON */
213 { 0x05bf, 0x061f }, /* Arabic_question_mark ؟ ARABIC QUESTION MARK */
214 { 0x05c1, 0x0621 }, /* Arabic_hamza ء ARABIC LETTER HAMZA */
215 { 0x05c2, 0x0622 }, /* Arabic_maddaonalef آ ARABIC LETTER ALEF WITH MADDA ABOVE */
216 { 0x05c3, 0x0623 }, /* Arabic_hamzaonalef أ ARABIC LETTER ALEF WITH HAMZA ABOVE */
217 { 0x05c4, 0x0624 }, /* Arabic_hamzaonwaw ؤ ARABIC LETTER WAW WITH HAMZA ABOVE */
218 { 0x05c5, 0x0625 }, /* Arabic_hamzaunderalef إ ARABIC LETTER ALEF WITH HAMZA BELOW */
219 { 0x05c6, 0x0626 }, /* Arabic_hamzaonyeh ئ ARABIC LETTER YEH WITH HAMZA ABOVE */
220 { 0x05c7, 0x0627 }, /* Arabic_alef ا ARABIC LETTER ALEF */
221 { 0x05c8, 0x0628 }, /* Arabic_beh ب ARABIC LETTER BEH */
222 { 0x05c9, 0x0629 }, /* Arabic_tehmarbuta ة ARABIC LETTER TEH MARBUTA */
223 { 0x05ca, 0x062a }, /* Arabic_teh ت ARABIC LETTER TEH */
224 { 0x05cb, 0x062b }, /* Arabic_theh ث ARABIC LETTER THEH */
225 { 0x05cc, 0x062c }, /* Arabic_jeem ج ARABIC LETTER JEEM */
226 { 0x05cd, 0x062d }, /* Arabic_hah ح ARABIC LETTER HAH */
227 { 0x05ce, 0x062e }, /* Arabic_khah خ ARABIC LETTER KHAH */
228 { 0x05cf, 0x062f }, /* Arabic_dal د ARABIC LETTER DAL */
229 { 0x05d0, 0x0630 }, /* Arabic_thal ذ ARABIC LETTER THAL */
230 { 0x05d1, 0x0631 }, /* Arabic_ra ر ARABIC LETTER REH */
231 { 0x05d2, 0x0632 }, /* Arabic_zain ز ARABIC LETTER ZAIN */
232 { 0x05d3, 0x0633 }, /* Arabic_seen س ARABIC LETTER SEEN */
233 { 0x05d4, 0x0634 }, /* Arabic_sheen ش ARABIC LETTER SHEEN */
234 { 0x05d5, 0x0635 }, /* Arabic_sad ص ARABIC LETTER SAD */
235 { 0x05d6, 0x0636 }, /* Arabic_dad ض ARABIC LETTER DAD */
236 { 0x05d7, 0x0637 }, /* Arabic_tah ط ARABIC LETTER TAH */
237 { 0x05d8, 0x0638 }, /* Arabic_zah ظ ARABIC LETTER ZAH */
238 { 0x05d9, 0x0639 }, /* Arabic_ain ع ARABIC LETTER AIN */
239 { 0x05da, 0x063a }, /* Arabic_ghain غ ARABIC LETTER GHAIN */
240 { 0x05e0, 0x0640 }, /* Arabic_tatweel ـ ARABIC TATWEEL */
241 { 0x05e1, 0x0641 }, /* Arabic_feh ف ARABIC LETTER FEH */
242 { 0x05e2, 0x0642 }, /* Arabic_qaf ق ARABIC LETTER QAF */
243 { 0x05e3, 0x0643 }, /* Arabic_kaf ك ARABIC LETTER KAF */
244 { 0x05e4, 0x0644 }, /* Arabic_lam ل ARABIC LETTER LAM */
245 { 0x05e5, 0x0645 }, /* Arabic_meem م ARABIC LETTER MEEM */
246 { 0x05e6, 0x0646 }, /* Arabic_noon ن ARABIC LETTER NOON */
247 { 0x05e7, 0x0647 }, /* Arabic_ha ه ARABIC LETTER HEH */
248 { 0x05e8, 0x0648 }, /* Arabic_waw و ARABIC LETTER WAW */
249 { 0x05e9, 0x0649 }, /* Arabic_alefmaksura ى ARABIC LETTER ALEF MAKSURA */
250 { 0x05ea, 0x064a }, /* Arabic_yeh ي ARABIC LETTER YEH */
251 { 0x05eb, 0x064b }, /* Arabic_fathatan ً ARABIC FATHATAN */
252 { 0x05ec, 0x064c }, /* Arabic_dammatan ٌ ARABIC DAMMATAN */
253 { 0x05ed, 0x064d }, /* Arabic_kasratan ٍ ARABIC KASRATAN */
254 { 0x05ee, 0x064e }, /* Arabic_fatha َ ARABIC FATHA */
255 { 0x05ef, 0x064f }, /* Arabic_damma ُ ARABIC DAMMA */
256 { 0x05f0, 0x0650 }, /* Arabic_kasra ِ ARABIC KASRA */
257 { 0x05f1, 0x0651 }, /* Arabic_shadda ّ ARABIC SHADDA */
258 { 0x05f2, 0x0652 }, /* Arabic_sukun ْ ARABIC SUKUN */
259 { 0x06a1, 0x0452 }, /* Serbian_dje ђ CYRILLIC SMALL LETTER DJE */
260 { 0x06a2, 0x0453 }, /* Macedonia_gje ѓ CYRILLIC SMALL LETTER GJE */
261 { 0x06a3, 0x0451 }, /* Cyrillic_io ё CYRILLIC SMALL LETTER IO */
262 { 0x06a4, 0x0454 }, /* Ukrainian_ie є CYRILLIC SMALL LETTER UKRAINIAN IE */
263 { 0x06a5, 0x0455 }, /* Macedonia_dse ѕ CYRILLIC SMALL LETTER DZE */
264 { 0x06a6, 0x0456 }, /* Ukrainian_i і CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */
265 { 0x06a7, 0x0457 }, /* Ukrainian_yi ї CYRILLIC SMALL LETTER YI */
266 { 0x06a8, 0x0458 }, /* Cyrillic_je ј CYRILLIC SMALL LETTER JE */
267 { 0x06a9, 0x0459 }, /* Cyrillic_lje љ CYRILLIC SMALL LETTER LJE */
268 { 0x06aa, 0x045a }, /* Cyrillic_nje њ CYRILLIC SMALL LETTER NJE */
269 { 0x06ab, 0x045b }, /* Serbian_tshe ћ CYRILLIC SMALL LETTER TSHE */
270 { 0x06ac, 0x045c }, /* Macedonia_kje ќ CYRILLIC SMALL LETTER KJE */
271 { 0x06ad, 0x0491 }, /* Ukrainian_ghe_with_upturn ґ CYRILLIC SMALL LETTER GHE WITH UPTURN */
272 { 0x06ae, 0x045e }, /* Byelorussian_shortu ў CYRILLIC SMALL LETTER SHORT U */
273 { 0x06af, 0x045f }, /* Cyrillic_dzhe џ CYRILLIC SMALL LETTER DZHE */
274 { 0x06b0, 0x2116 }, /* numerosign № NUMERO SIGN */
275 { 0x06b1, 0x0402 }, /* Serbian_DJE Ђ CYRILLIC CAPITAL LETTER DJE */
276 { 0x06b2, 0x0403 }, /* Macedonia_GJE Ѓ CYRILLIC CAPITAL LETTER GJE */
277 { 0x06b3, 0x0401 }, /* Cyrillic_IO Ё CYRILLIC CAPITAL LETTER IO */
278 { 0x06b4, 0x0404 }, /* Ukrainian_IE Є CYRILLIC CAPITAL LETTER UKRAINIAN IE */
279 { 0x06b5, 0x0405 }, /* Macedonia_DSE Ѕ CYRILLIC CAPITAL LETTER DZE */
280 { 0x06b6, 0x0406 }, /* Ukrainian_I І CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */
281 { 0x06b7, 0x0407 }, /* Ukrainian_YI Ї CYRILLIC CAPITAL LETTER YI */
282 { 0x06b8, 0x0408 }, /* Cyrillic_JE Ј CYRILLIC CAPITAL LETTER JE */
283 { 0x06b9, 0x0409 }, /* Cyrillic_LJE Љ CYRILLIC CAPITAL LETTER LJE */
284 { 0x06ba, 0x040a }, /* Cyrillic_NJE Њ CYRILLIC CAPITAL LETTER NJE */
285 { 0x06bb, 0x040b }, /* Serbian_TSHE Ћ CYRILLIC CAPITAL LETTER TSHE */
286 { 0x06bc, 0x040c }, /* Macedonia_KJE Ќ CYRILLIC CAPITAL LETTER KJE */
287 { 0x06bd, 0x0490 }, /* Ukrainian_GHE_WITH_UPTURN Ґ CYRILLIC CAPITAL LETTER GHE WITH UPTURN */
288 { 0x06be, 0x040e }, /* Byelorussian_SHORTU Ў CYRILLIC CAPITAL LETTER SHORT U */
289 { 0x06bf, 0x040f }, /* Cyrillic_DZHE Џ CYRILLIC CAPITAL LETTER DZHE */
290 { 0x06c0, 0x044e }, /* Cyrillic_yu ю CYRILLIC SMALL LETTER YU */
291 { 0x06c1, 0x0430 }, /* Cyrillic_a а CYRILLIC SMALL LETTER A */
292 { 0x06c2, 0x0431 }, /* Cyrillic_be б CYRILLIC SMALL LETTER BE */
293 { 0x06c3, 0x0446 }, /* Cyrillic_tse ц CYRILLIC SMALL LETTER TSE */
294 { 0x06c4, 0x0434 }, /* Cyrillic_de д CYRILLIC SMALL LETTER DE */
295 { 0x06c5, 0x0435 }, /* Cyrillic_ie е CYRILLIC SMALL LETTER IE */
296 { 0x06c6, 0x0444 }, /* Cyrillic_ef ф CYRILLIC SMALL LETTER EF */
297 { 0x06c7, 0x0433 }, /* Cyrillic_ghe г CYRILLIC SMALL LETTER GHE */
298 { 0x06c8, 0x0445 }, /* Cyrillic_ha х CYRILLIC SMALL LETTER HA */
299 { 0x06c9, 0x0438 }, /* Cyrillic_i и CYRILLIC SMALL LETTER I */
300 { 0x06ca, 0x0439 }, /* Cyrillic_shorti й CYRILLIC SMALL LETTER SHORT I */
301 { 0x06cb, 0x043a }, /* Cyrillic_ka к CYRILLIC SMALL LETTER KA */
302 { 0x06cc, 0x043b }, /* Cyrillic_el л CYRILLIC SMALL LETTER EL */
303 { 0x06cd, 0x043c }, /* Cyrillic_em м CYRILLIC SMALL LETTER EM */
304 { 0x06ce, 0x043d }, /* Cyrillic_en н CYRILLIC SMALL LETTER EN */
305 { 0x06cf, 0x043e }, /* Cyrillic_o о CYRILLIC SMALL LETTER O */
306 { 0x06d0, 0x043f }, /* Cyrillic_pe п CYRILLIC SMALL LETTER PE */
307 { 0x06d1, 0x044f }, /* Cyrillic_ya я CYRILLIC SMALL LETTER YA */
308 { 0x06d2, 0x0440 }, /* Cyrillic_er р CYRILLIC SMALL LETTER ER */
309 { 0x06d3, 0x0441 }, /* Cyrillic_es с CYRILLIC SMALL LETTER ES */
310 { 0x06d4, 0x0442 }, /* Cyrillic_te т CYRILLIC SMALL LETTER TE */
311 { 0x06d5, 0x0443 }, /* Cyrillic_u у CYRILLIC SMALL LETTER U */
312 { 0x06d6, 0x0436 }, /* Cyrillic_zhe ж CYRILLIC SMALL LETTER ZHE */
313 { 0x06d7, 0x0432 }, /* Cyrillic_ve в CYRILLIC SMALL LETTER VE */
314 { 0x06d8, 0x044c }, /* Cyrillic_softsign ь CYRILLIC SMALL LETTER SOFT SIGN */
315 { 0x06d9, 0x044b }, /* Cyrillic_yeru ы CYRILLIC SMALL LETTER YERU */
316 { 0x06da, 0x0437 }, /* Cyrillic_ze з CYRILLIC SMALL LETTER ZE */
317 { 0x06db, 0x0448 }, /* Cyrillic_sha ш CYRILLIC SMALL LETTER SHA */
318 { 0x06dc, 0x044d }, /* Cyrillic_e э CYRILLIC SMALL LETTER E */
319 { 0x06dd, 0x0449 }, /* Cyrillic_shcha щ CYRILLIC SMALL LETTER SHCHA */
320 { 0x06de, 0x0447 }, /* Cyrillic_che ч CYRILLIC SMALL LETTER CHE */
321 { 0x06df, 0x044a }, /* Cyrillic_hardsign ъ CYRILLIC SMALL LETTER HARD SIGN */
322 { 0x06e0, 0x042e }, /* Cyrillic_YU Ю CYRILLIC CAPITAL LETTER YU */
323 { 0x06e1, 0x0410 }, /* Cyrillic_A А CYRILLIC CAPITAL LETTER A */
324 { 0x06e2, 0x0411 }, /* Cyrillic_BE Б CYRILLIC CAPITAL LETTER BE */
325 { 0x06e3, 0x0426 }, /* Cyrillic_TSE Ц CYRILLIC CAPITAL LETTER TSE */
326 { 0x06e4, 0x0414 }, /* Cyrillic_DE Д CYRILLIC CAPITAL LETTER DE */
327 { 0x06e5, 0x0415 }, /* Cyrillic_IE Е CYRILLIC CAPITAL LETTER IE */
328 { 0x06e6, 0x0424 }, /* Cyrillic_EF Ф CYRILLIC CAPITAL LETTER EF */
329 { 0x06e7, 0x0413 }, /* Cyrillic_GHE Г CYRILLIC CAPITAL LETTER GHE */
330 { 0x06e8, 0x0425 }, /* Cyrillic_HA Х CYRILLIC CAPITAL LETTER HA */
331 { 0x06e9, 0x0418 }, /* Cyrillic_I И CYRILLIC CAPITAL LETTER I */
332 { 0x06ea, 0x0419 }, /* Cyrillic_SHORTI Й CYRILLIC CAPITAL LETTER SHORT I */
333 { 0x06eb, 0x041a }, /* Cyrillic_KA К CYRILLIC CAPITAL LETTER KA */
334 { 0x06ec, 0x041b }, /* Cyrillic_EL Л CYRILLIC CAPITAL LETTER EL */
335 { 0x06ed, 0x041c }, /* Cyrillic_EM М CYRILLIC CAPITAL LETTER EM */
336 { 0x06ee, 0x041d }, /* Cyrillic_EN Н CYRILLIC CAPITAL LETTER EN */
337 { 0x06ef, 0x041e }, /* Cyrillic_O О CYRILLIC CAPITAL LETTER O */
338 { 0x06f0, 0x041f }, /* Cyrillic_PE П CYRILLIC CAPITAL LETTER PE */
339 { 0x06f1, 0x042f }, /* Cyrillic_YA Я CYRILLIC CAPITAL LETTER YA */
340 { 0x06f2, 0x0420 }, /* Cyrillic_ER Р CYRILLIC CAPITAL LETTER ER */
341 { 0x06f3, 0x0421 }, /* Cyrillic_ES С CYRILLIC CAPITAL LETTER ES */
342 { 0x06f4, 0x0422 }, /* Cyrillic_TE Т CYRILLIC CAPITAL LETTER TE */
343 { 0x06f5, 0x0423 }, /* Cyrillic_U У CYRILLIC CAPITAL LETTER U */
344 { 0x06f6, 0x0416 }, /* Cyrillic_ZHE Ж CYRILLIC CAPITAL LETTER ZHE */
345 { 0x06f7, 0x0412 }, /* Cyrillic_VE В CYRILLIC CAPITAL LETTER VE */
346 { 0x06f8, 0x042c }, /* Cyrillic_SOFTSIGN Ь CYRILLIC CAPITAL LETTER SOFT SIGN */
347 { 0x06f9, 0x042b }, /* Cyrillic_YERU Ы CYRILLIC CAPITAL LETTER YERU */
348 { 0x06fa, 0x0417 }, /* Cyrillic_ZE З CYRILLIC CAPITAL LETTER ZE */
349 { 0x06fb, 0x0428 }, /* Cyrillic_SHA Ш CYRILLIC CAPITAL LETTER SHA */
350 { 0x06fc, 0x042d }, /* Cyrillic_E Э CYRILLIC CAPITAL LETTER E */
351 { 0x06fd, 0x0429 }, /* Cyrillic_SHCHA Щ CYRILLIC CAPITAL LETTER SHCHA */
352 { 0x06fe, 0x0427 }, /* Cyrillic_CHE Ч CYRILLIC CAPITAL LETTER CHE */
353 { 0x06ff, 0x042a }, /* Cyrillic_HARDSIGN Ъ CYRILLIC CAPITAL LETTER HARD SIGN */
354 { 0x07a1, 0x0386 }, /* Greek_ALPHAaccent Ά GREEK CAPITAL LETTER ALPHA WITH TONOS */
355 { 0x07a2, 0x0388 }, /* Greek_EPSILONaccent Έ GREEK CAPITAL LETTER EPSILON WITH TONOS */
356 { 0x07a3, 0x0389 }, /* Greek_ETAaccent Ή GREEK CAPITAL LETTER ETA WITH TONOS */
357 { 0x07a4, 0x038a }, /* Greek_IOTAaccent Ί GREEK CAPITAL LETTER IOTA WITH TONOS */
358 { 0x07a5, 0x03aa }, /* Greek_IOTAdieresis Ϊ GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */
359 { 0x07a7, 0x038c }, /* Greek_OMICRONaccent Ό GREEK CAPITAL LETTER OMICRON WITH TONOS */
360 { 0x07a8, 0x038e }, /* Greek_UPSILONaccent Ύ GREEK CAPITAL LETTER UPSILON WITH TONOS */
361 { 0x07a9, 0x03ab }, /* Greek_UPSILONdieresis Ϋ GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */
362 { 0x07ab, 0x038f }, /* Greek_OMEGAaccent Ώ GREEK CAPITAL LETTER OMEGA WITH TONOS */
363 { 0x07ae, 0x0385 }, /* Greek_accentdieresis ΅ GREEK DIALYTIKA TONOS */
364 { 0x07af, 0x2015 }, /* Greek_horizbar ― HORIZONTAL BAR */
365 { 0x07b1, 0x03ac }, /* Greek_alphaaccent ά GREEK SMALL LETTER ALPHA WITH TONOS */
366 { 0x07b2, 0x03ad }, /* Greek_epsilonaccent έ GREEK SMALL LETTER EPSILON WITH TONOS */
367 { 0x07b3, 0x03ae }, /* Greek_etaaccent ή GREEK SMALL LETTER ETA WITH TONOS */
368 { 0x07b4, 0x03af }, /* Greek_iotaaccent ί GREEK SMALL LETTER IOTA WITH TONOS */
369 { 0x07b5, 0x03ca }, /* Greek_iotadieresis ϊ GREEK SMALL LETTER IOTA WITH DIALYTIKA */
370 { 0x07b6, 0x0390 }, /* Greek_iotaaccentdieresis ΐ GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */
371 { 0x07b7, 0x03cc }, /* Greek_omicronaccent ό GREEK SMALL LETTER OMICRON WITH TONOS */
372 { 0x07b8, 0x03cd }, /* Greek_upsilonaccent ύ GREEK SMALL LETTER UPSILON WITH TONOS */
373 { 0x07b9, 0x03cb }, /* Greek_upsilondieresis ϋ GREEK SMALL LETTER UPSILON WITH DIALYTIKA */
374 { 0x07ba, 0x03b0 }, /* Greek_upsilonaccentdieresis ΰ GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */
375 { 0x07bb, 0x03ce }, /* Greek_omegaaccent ώ GREEK SMALL LETTER OMEGA WITH TONOS */
376 { 0x07c1, 0x0391 }, /* Greek_ALPHA Α GREEK CAPITAL LETTER ALPHA */
377 { 0x07c2, 0x0392 }, /* Greek_BETA Β GREEK CAPITAL LETTER BETA */
378 { 0x07c3, 0x0393 }, /* Greek_GAMMA Γ GREEK CAPITAL LETTER GAMMA */
379 { 0x07c4, 0x0394 }, /* Greek_DELTA Δ GREEK CAPITAL LETTER DELTA */
380 { 0x07c5, 0x0395 }, /* Greek_EPSILON Ε GREEK CAPITAL LETTER EPSILON */
381 { 0x07c6, 0x0396 }, /* Greek_ZETA Ζ GREEK CAPITAL LETTER ZETA */
382 { 0x07c7, 0x0397 }, /* Greek_ETA Η GREEK CAPITAL LETTER ETA */
383 { 0x07c8, 0x0398 }, /* Greek_THETA Θ GREEK CAPITAL LETTER THETA */
384 { 0x07c9, 0x0399 }, /* Greek_IOTA Ι GREEK CAPITAL LETTER IOTA */
385 { 0x07ca, 0x039a }, /* Greek_KAPPA Κ GREEK CAPITAL LETTER KAPPA */
386 { 0x07cb, 0x039b }, /* Greek_LAMBDA Λ GREEK CAPITAL LETTER LAMDA */
387 { 0x07cc, 0x039c }, /* Greek_MU Μ GREEK CAPITAL LETTER MU */
388 { 0x07cd, 0x039d }, /* Greek_NU Ν GREEK CAPITAL LETTER NU */
389 { 0x07ce, 0x039e }, /* Greek_XI Ξ GREEK CAPITAL LETTER XI */
390 { 0x07cf, 0x039f }, /* Greek_OMICRON Ο GREEK CAPITAL LETTER OMICRON */
391 { 0x07d0, 0x03a0 }, /* Greek_PI Π GREEK CAPITAL LETTER PI */
392 { 0x07d1, 0x03a1 }, /* Greek_RHO Ρ GREEK CAPITAL LETTER RHO */
393 { 0x07d2, 0x03a3 }, /* Greek_SIGMA Σ GREEK CAPITAL LETTER SIGMA */
394 { 0x07d4, 0x03a4 }, /* Greek_TAU Τ GREEK CAPITAL LETTER TAU */
395 { 0x07d5, 0x03a5 }, /* Greek_UPSILON Υ GREEK CAPITAL LETTER UPSILON */
396 { 0x07d6, 0x03a6 }, /* Greek_PHI Φ GREEK CAPITAL LETTER PHI */
397 { 0x07d7, 0x03a7 }, /* Greek_CHI Χ GREEK CAPITAL LETTER CHI */
398 { 0x07d8, 0x03a8 }, /* Greek_PSI Ψ GREEK CAPITAL LETTER PSI */
399 { 0x07d9, 0x03a9 }, /* Greek_OMEGA Ω GREEK CAPITAL LETTER OMEGA */
400 { 0x07e1, 0x03b1 }, /* Greek_alpha α GREEK SMALL LETTER ALPHA */
401 { 0x07e2, 0x03b2 }, /* Greek_beta β GREEK SMALL LETTER BETA */
402 { 0x07e3, 0x03b3 }, /* Greek_gamma γ GREEK SMALL LETTER GAMMA */
403 { 0x07e4, 0x03b4 }, /* Greek_delta δ GREEK SMALL LETTER DELTA */
404 { 0x07e5, 0x03b5 }, /* Greek_epsilon ε GREEK SMALL LETTER EPSILON */
405 { 0x07e6, 0x03b6 }, /* Greek_zeta ζ GREEK SMALL LETTER ZETA */
406 { 0x07e7, 0x03b7 }, /* Greek_eta η GREEK SMALL LETTER ETA */
407 { 0x07e8, 0x03b8 }, /* Greek_theta θ GREEK SMALL LETTER THETA */
408 { 0x07e9, 0x03b9 }, /* Greek_iota ι GREEK SMALL LETTER IOTA */
409 { 0x07ea, 0x03ba }, /* Greek_kappa κ GREEK SMALL LETTER KAPPA */
410 { 0x07eb, 0x03bb }, /* Greek_lambda λ GREEK SMALL LETTER LAMDA */
411 { 0x07ec, 0x03bc }, /* Greek_mu μ GREEK SMALL LETTER MU */
412 { 0x07ed, 0x03bd }, /* Greek_nu ν GREEK SMALL LETTER NU */
413 { 0x07ee, 0x03be }, /* Greek_xi ξ GREEK SMALL LETTER XI */
414 { 0x07ef, 0x03bf }, /* Greek_omicron ο GREEK SMALL LETTER OMICRON */
415 { 0x07f0, 0x03c0 }, /* Greek_pi π GREEK SMALL LETTER PI */
416 { 0x07f1, 0x03c1 }, /* Greek_rho ρ GREEK SMALL LETTER RHO */
417 { 0x07f2, 0x03c3 }, /* Greek_sigma σ GREEK SMALL LETTER SIGMA */
418 { 0x07f3, 0x03c2 }, /* Greek_finalsmallsigma ς GREEK SMALL LETTER FINAL SIGMA */
419 { 0x07f4, 0x03c4 }, /* Greek_tau τ GREEK SMALL LETTER TAU */
420 { 0x07f5, 0x03c5 }, /* Greek_upsilon υ GREEK SMALL LETTER UPSILON */
421 { 0x07f6, 0x03c6 }, /* Greek_phi φ GREEK SMALL LETTER PHI */
422 { 0x07f7, 0x03c7 }, /* Greek_chi χ GREEK SMALL LETTER CHI */
423 { 0x07f8, 0x03c8 }, /* Greek_psi ψ GREEK SMALL LETTER PSI */
424 { 0x07f9, 0x03c9 }, /* Greek_omega ω GREEK SMALL LETTER OMEGA */
425 /* 0x08a1 leftradical ? ??? */
426 /* 0x08a2 topleftradical ? ??? */
427 /* 0x08a3 horizconnector ? ??? */
428 { 0x08a4, 0x2320 }, /* topintegral ⌠ TOP HALF INTEGRAL */
429 { 0x08a5, 0x2321 }, /* botintegral ⌡ BOTTOM HALF INTEGRAL */
430 { 0x08a6, 0x2502 }, /* vertconnector │ BOX DRAWINGS LIGHT VERTICAL */
431 /* 0x08a7 topleftsqbracket ? ??? */
432 /* 0x08a8 botleftsqbracket ? ??? */
433 /* 0x08a9 toprightsqbracket ? ??? */
434 /* 0x08aa botrightsqbracket ? ??? */
435 /* 0x08ab topleftparens ? ??? */
436 /* 0x08ac botleftparens ? ??? */
437 /* 0x08ad toprightparens ? ??? */
438 /* 0x08ae botrightparens ? ??? */
439 /* 0x08af leftmiddlecurlybrace ? ??? */
440 /* 0x08b0 rightmiddlecurlybrace ? ??? */
441 /* 0x08b1 topleftsummation ? ??? */
442 /* 0x08b2 botleftsummation ? ??? */
443 /* 0x08b3 topvertsummationconnector ? ??? */
444 /* 0x08b4 botvertsummationconnector ? ??? */
445 /* 0x08b5 toprightsummation ? ??? */
446 /* 0x08b6 botrightsummation ? ??? */
447 /* 0x08b7 rightmiddlesummation ? ??? */
448 { 0x08bc, 0x2264 }, /* lessthanequal ≤ LESS-THAN OR EQUAL TO */
449 { 0x08bd, 0x2260 }, /* notequal ≠ NOT EQUAL TO */
450 { 0x08be, 0x2265 }, /* greaterthanequal ≥ GREATER-THAN OR EQUAL TO */
451 { 0x08bf, 0x222b }, /* integral ∫ INTEGRAL */
452 { 0x08c0, 0x2234 }, /* therefore ∴ THEREFORE */
453 { 0x08c1, 0x221d }, /* variation ∝ PROPORTIONAL TO */
454 { 0x08c2, 0x221e }, /* infinity ∞ INFINITY */
455 { 0x08c5, 0x2207 }, /* nabla ∇ NABLA */
456 { 0x08c8, 0x2245 }, /* approximate ≅ APPROXIMATELY EQUAL TO */
457 /* 0x08c9 similarequal ? ??? */
458 { 0x08cd, 0x21d4 }, /* ifonlyif ⇔ LEFT RIGHT DOUBLE ARROW */
459 { 0x08ce, 0x21d2 }, /* implies ⇒ RIGHTWARDS DOUBLE ARROW */
460 { 0x08cf, 0x2261 }, /* identical ≡ IDENTICAL TO */
461 { 0x08d6, 0x221a }, /* radical √ SQUARE ROOT */
462 { 0x08da, 0x2282 }, /* includedin ⊂ SUBSET OF */
463 { 0x08db, 0x2283 }, /* includes ⊃ SUPERSET OF */
464 { 0x08dc, 0x2229 }, /* intersection ∩ INTERSECTION */
465 { 0x08dd, 0x222a }, /* union ∪ UNION */
466 { 0x08de, 0x2227 }, /* logicaland ∧ LOGICAL AND */
467 { 0x08df, 0x2228 }, /* logicalor ∨ LOGICAL OR */
468 { 0x08ef, 0x2202 }, /* partialderivative ∂ PARTIAL DIFFERENTIAL */
469 { 0x08f6, 0x0192 }, /* function ƒ LATIN SMALL LETTER F WITH HOOK */
470 { 0x08fb, 0x2190 }, /* leftarrow ← LEFTWARDS ARROW */
471 { 0x08fc, 0x2191 }, /* uparrow ↑ UPWARDS ARROW */
472 { 0x08fd, 0x2192 }, /* rightarrow → RIGHTWARDS ARROW */
473 { 0x08fe, 0x2193 }, /* downarrow ↓ DOWNWARDS ARROW */
474 { 0x09df, 0x2422 }, /* blank ␢ BLANK SYMBOL */
475 { 0x09e0, 0x25c6 }, /* soliddiamond ◆ BLACK DIAMOND */
476 { 0x09e1, 0x2592 }, /* checkerboard ▒ MEDIUM SHADE */
477 { 0x09e2, 0x2409 }, /* ht ␉ SYMBOL FOR HORIZONTAL TABULATION */
478 { 0x09e3, 0x240c }, /* ff ␌ SYMBOL FOR FORM FEED */
479 { 0x09e4, 0x240d }, /* cr ␍ SYMBOL FOR CARRIAGE RETURN */
480 { 0x09e5, 0x240a }, /* lf ␊ SYMBOL FOR LINE FEED */
481 { 0x09e8, 0x2424 }, /* nl ␤ SYMBOL FOR NEWLINE */
482 { 0x09e9, 0x240b }, /* vt ␋ SYMBOL FOR VERTICAL TABULATION */
483 { 0x09ea, 0x2518 }, /* lowrightcorner ┘ BOX DRAWINGS LIGHT UP AND LEFT */
484 { 0x09eb, 0x2510 }, /* uprightcorner ┐ BOX DRAWINGS LIGHT DOWN AND LEFT */
485 { 0x09ec, 0x250c }, /* upleftcorner ┌ BOX DRAWINGS LIGHT DOWN AND RIGHT */
486 { 0x09ed, 0x2514 }, /* lowleftcorner └ BOX DRAWINGS LIGHT UP AND RIGHT */
487 { 0x09ee, 0x253c }, /* crossinglines ┼ BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */
488 /* 0x09ef horizlinescan1 ? ??? */
489 /* 0x09f0 horizlinescan3 ? ??? */
490 { 0x09f1, 0x2500 }, /* horizlinescan5 ─ BOX DRAWINGS LIGHT HORIZONTAL */
491 /* 0x09f2 horizlinescan7 ? ??? */
492 /* 0x09f3 horizlinescan9 ? ??? */
493 { 0x09f4, 0x251c }, /* leftt ├ BOX DRAWINGS LIGHT VERTICAL AND RIGHT */
494 { 0x09f5, 0x2524 }, /* rightt ┤ BOX DRAWINGS LIGHT VERTICAL AND LEFT */
495 { 0x09f6, 0x2534 }, /* bott ┴ BOX DRAWINGS LIGHT UP AND HORIZONTAL */
496 { 0x09f7, 0x252c }, /* topt ┬ BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */
497 { 0x09f8, 0x2502 }, /* vertbar │ BOX DRAWINGS LIGHT VERTICAL */
498 { 0x0aa1, 0x2003 }, /* emspace   EM SPACE */
499 { 0x0aa2, 0x2002 }, /* enspace   EN SPACE */
500 { 0x0aa3, 0x2004 }, /* em3space   THREE-PER-EM SPACE */
501 { 0x0aa4, 0x2005 }, /* em4space   FOUR-PER-EM SPACE */
502 { 0x0aa5, 0x2007 }, /* digitspace   FIGURE SPACE */
503 { 0x0aa6, 0x2008 }, /* punctspace   PUNCTUATION SPACE */
504 { 0x0aa7, 0x2009 }, /* thinspace   THIN SPACE */
505 { 0x0aa8, 0x200a }, /* hairspace   HAIR SPACE */
506 { 0x0aa9, 0x2014 }, /* emdash — EM DASH */
507 { 0x0aaa, 0x2013 }, /* endash – EN DASH */
508 /* 0x0aac signifblank ? ??? */
509 { 0x0aae, 0x2026 }, /* ellipsis … HORIZONTAL ELLIPSIS */
510 /* 0x0aaf doubbaselinedot ? ??? */
511 { 0x0ab0, 0x2153 }, /* onethird ⅓ VULGAR FRACTION ONE THIRD */
512 { 0x0ab1, 0x2154 }, /* twothirds ⅔ VULGAR FRACTION TWO THIRDS */
513 { 0x0ab2, 0x2155 }, /* onefifth ⅕ VULGAR FRACTION ONE FIFTH */
514 { 0x0ab3, 0x2156 }, /* twofifths ⅖ VULGAR FRACTION TWO FIFTHS */
515 { 0x0ab4, 0x2157 }, /* threefifths ⅗ VULGAR FRACTION THREE FIFTHS */
516 { 0x0ab5, 0x2158 }, /* fourfifths ⅘ VULGAR FRACTION FOUR FIFTHS */
517 { 0x0ab6, 0x2159 }, /* onesixth ⅙ VULGAR FRACTION ONE SIXTH */
518 { 0x0ab7, 0x215a }, /* fivesixths ⅚ VULGAR FRACTION FIVE SIXTHS */
519 { 0x0ab8, 0x2105 }, /* careof ℅ CARE OF */
520 { 0x0abb, 0x2012 }, /* figdash ‒ FIGURE DASH */
521 { 0x0abc, 0x2329 }, /* leftanglebracket 〈 LEFT-POINTING ANGLE BRACKET */
522 { 0x0abd, 0x002e }, /* decimalpoint . FULL STOP */
523 { 0x0abe, 0x232a }, /* rightanglebracket 〉 RIGHT-POINTING ANGLE BRACKET */
524 /* 0x0abf marker ? ??? */
525 { 0x0ac3, 0x215b }, /* oneeighth ⅛ VULGAR FRACTION ONE EIGHTH */
526 { 0x0ac4, 0x215c }, /* threeeighths ⅜ VULGAR FRACTION THREE EIGHTHS */
527 { 0x0ac5, 0x215d }, /* fiveeighths ⅝ VULGAR FRACTION FIVE EIGHTHS */
528 { 0x0ac6, 0x215e }, /* seveneighths ⅞ VULGAR FRACTION SEVEN EIGHTHS */
529 { 0x0ac9, 0x2122 }, /* trademark ™ TRADE MARK SIGN */
530 { 0x0aca, 0x2613 }, /* signaturemark ☓ SALTIRE */
531 /* 0x0acb trademarkincircle ? ??? */
532 { 0x0acc, 0x25c1 }, /* leftopentriangle ◁ WHITE LEFT-POINTING TRIANGLE */
533 { 0x0acd, 0x25b7 }, /* rightopentriangle ▷ WHITE RIGHT-POINTING TRIANGLE */
534 { 0x0ace, 0x25cb }, /* emopencircle ○ WHITE CIRCLE */
535 { 0x0acf, 0x25a1 }, /* emopenrectangle □ WHITE SQUARE */
536 { 0x0ad0, 0x2018 }, /* leftsinglequotemark ‘ LEFT SINGLE QUOTATION MARK */
537 { 0x0ad1, 0x2019 }, /* rightsinglequotemark ’ RIGHT SINGLE QUOTATION MARK */
538 { 0x0ad2, 0x201c }, /* leftdoublequotemark “ LEFT DOUBLE QUOTATION MARK */
539 { 0x0ad3, 0x201d }, /* rightdoublequotemark ” RIGHT DOUBLE QUOTATION MARK */
540 { 0x0ad4, 0x211e }, /* prescription ℞ PRESCRIPTION TAKE */
541 { 0x0ad6, 0x2032 }, /* minutes ′ PRIME */
542 { 0x0ad7, 0x2033 }, /* seconds ″ DOUBLE PRIME */
543 { 0x0ad9, 0x271d }, /* latincross ✝ LATIN CROSS */
544 /* 0x0ada hexagram ? ??? */
545 { 0x0adb, 0x25ac }, /* filledrectbullet ▬ BLACK RECTANGLE */
546 { 0x0adc, 0x25c0 }, /* filledlefttribullet ◀ BLACK LEFT-POINTING TRIANGLE */
547 { 0x0add, 0x25b6 }, /* filledrighttribullet ▶ BLACK RIGHT-POINTING TRIANGLE */
548 { 0x0ade, 0x25cf }, /* emfilledcircle ● BLACK CIRCLE */
549 { 0x0adf, 0x25a0 }, /* emfilledrect ■ BLACK SQUARE */
550 { 0x0ae0, 0x25e6 }, /* enopencircbullet ◦ WHITE BULLET */
551 { 0x0ae1, 0x25ab }, /* enopensquarebullet ▫ WHITE SMALL SQUARE */
552 { 0x0ae2, 0x25ad }, /* openrectbullet ▭ WHITE RECTANGLE */
553 { 0x0ae3, 0x25b3 }, /* opentribulletup △ WHITE UP-POINTING TRIANGLE */
554 { 0x0ae4, 0x25bd }, /* opentribulletdown ▽ WHITE DOWN-POINTING TRIANGLE */
555 { 0x0ae5, 0x2606 }, /* openstar ☆ WHITE STAR */
556 { 0x0ae6, 0x2022 }, /* enfilledcircbullet • BULLET */
557 { 0x0ae7, 0x25aa }, /* enfilledsqbullet ▪ BLACK SMALL SQUARE */
558 { 0x0ae8, 0x25b2 }, /* filledtribulletup ▲ BLACK UP-POINTING TRIANGLE */
559 { 0x0ae9, 0x25bc }, /* filledtribulletdown ▼ BLACK DOWN-POINTING TRIANGLE */
560 { 0x0aea, 0x261c }, /* leftpointer ☜ WHITE LEFT POINTING INDEX */
561 { 0x0aeb, 0x261e }, /* rightpointer ☞ WHITE RIGHT POINTING INDEX */
562 { 0x0aec, 0x2663 }, /* club ♣ BLACK CLUB SUIT */
563 { 0x0aed, 0x2666 }, /* diamond ♦ BLACK DIAMOND SUIT */
564 { 0x0aee, 0x2665 }, /* heart ♥ BLACK HEART SUIT */
565 { 0x0af0, 0x2720 }, /* maltesecross ✠ MALTESE CROSS */
566 { 0x0af1, 0x2020 }, /* dagger † DAGGER */
567 { 0x0af2, 0x2021 }, /* doubledagger ‡ DOUBLE DAGGER */
568 { 0x0af3, 0x2713 }, /* checkmark ✓ CHECK MARK */
569 { 0x0af4, 0x2717 }, /* ballotcross ✗ BALLOT X */
570 { 0x0af5, 0x266f }, /* musicalsharp ♯ MUSIC SHARP SIGN */
571 { 0x0af6, 0x266d }, /* musicalflat ♭ MUSIC FLAT SIGN */
572 { 0x0af7, 0x2642 }, /* malesymbol ♂ MALE SIGN */
573 { 0x0af8, 0x2640 }, /* femalesymbol ♀ FEMALE SIGN */
574 { 0x0af9, 0x260e }, /* telephone ☎ BLACK TELEPHONE */
575 { 0x0afa, 0x2315 }, /* telephonerecorder ⌕ TELEPHONE RECORDER */
576 { 0x0afb, 0x2117 }, /* phonographcopyright ℗ SOUND RECORDING COPYRIGHT */
577 { 0x0afc, 0x2038 }, /* caret ‸ CARET */
578 { 0x0afd, 0x201a }, /* singlelowquotemark ‚ SINGLE LOW-9 QUOTATION MARK */
579 { 0x0afe, 0x201e }, /* doublelowquotemark „ DOUBLE LOW-9 QUOTATION MARK */
580 /* 0x0aff cursor ? ??? */
581 { 0x0ba3, 0x003c }, /* leftcaret < LESS-THAN SIGN */
582 { 0x0ba6, 0x003e }, /* rightcaret > GREATER-THAN SIGN */
583 { 0x0ba8, 0x2228 }, /* downcaret ∨ LOGICAL OR */
584 { 0x0ba9, 0x2227 }, /* upcaret ∧ LOGICAL AND */
585 { 0x0bc0, 0x00af }, /* overbar ¯ MACRON */
586 { 0x0bc2, 0x22a4 }, /* downtack ⊤ DOWN TACK */
587 { 0x0bc3, 0x2229 }, /* upshoe ∩ INTERSECTION */
588 { 0x0bc4, 0x230a }, /* downstile ⌊ LEFT FLOOR */
589 { 0x0bc6, 0x005f }, /* underbar _ LOW LINE */
590 { 0x0bca, 0x2218 }, /* jot ∘ RING OPERATOR */
591 { 0x0bcc, 0x2395 }, /* quad ⎕ APL FUNCTIONAL SYMBOL QUAD (Unicode 3.0) */
592 { 0x0bce, 0x22a5 }, /* uptack ⊥ UP TACK */
593 { 0x0bcf, 0x25cb }, /* circle ○ WHITE CIRCLE */
594 { 0x0bd3, 0x2308 }, /* upstile ⌈ LEFT CEILING */
595 { 0x0bd6, 0x222a }, /* downshoe ∪ UNION */
596 { 0x0bd8, 0x2283 }, /* rightshoe ⊃ SUPERSET OF */
597 { 0x0bda, 0x2282 }, /* leftshoe ⊂ SUBSET OF */
598 { 0x0bdc, 0x22a3 }, /* lefttack ⊣ LEFT TACK */
599 { 0x0bfc, 0x22a2 }, /* righttack ⊢ RIGHT TACK */
600 { 0x0cdf, 0x2017 }, /* hebrew_doublelowline ‗ DOUBLE LOW LINE */
601 { 0x0ce0, 0x05d0 }, /* hebrew_aleph א HEBREW LETTER ALEF */
602 { 0x0ce1, 0x05d1 }, /* hebrew_bet ב HEBREW LETTER BET */
603 { 0x0ce2, 0x05d2 }, /* hebrew_gimel ג HEBREW LETTER GIMEL */
604 { 0x0ce3, 0x05d3 }, /* hebrew_dalet ד HEBREW LETTER DALET */
605 { 0x0ce4, 0x05d4 }, /* hebrew_he ה HEBREW LETTER HE */
606 { 0x0ce5, 0x05d5 }, /* hebrew_waw ו HEBREW LETTER VAV */
607 { 0x0ce6, 0x05d6 }, /* hebrew_zain ז HEBREW LETTER ZAYIN */
608 { 0x0ce7, 0x05d7 }, /* hebrew_chet ח HEBREW LETTER HET */
609 { 0x0ce8, 0x05d8 }, /* hebrew_tet ט HEBREW LETTER TET */
610 { 0x0ce9, 0x05d9 }, /* hebrew_yod י HEBREW LETTER YOD */
611 { 0x0cea, 0x05da }, /* hebrew_finalkaph ך HEBREW LETTER FINAL KAF */
612 { 0x0ceb, 0x05db }, /* hebrew_kaph כ HEBREW LETTER KAF */
613 { 0x0cec, 0x05dc }, /* hebrew_lamed ל HEBREW LETTER LAMED */
614 { 0x0ced, 0x05dd }, /* hebrew_finalmem ם HEBREW LETTER FINAL MEM */
615 { 0x0cee, 0x05de }, /* hebrew_mem מ HEBREW LETTER MEM */
616 { 0x0cef, 0x05df }, /* hebrew_finalnun ן HEBREW LETTER FINAL NUN */
617 { 0x0cf0, 0x05e0 }, /* hebrew_nun נ HEBREW LETTER NUN */
618 { 0x0cf1, 0x05e1 }, /* hebrew_samech ס HEBREW LETTER SAMEKH */
619 { 0x0cf2, 0x05e2 }, /* hebrew_ayin ע HEBREW LETTER AYIN */
620 { 0x0cf3, 0x05e3 }, /* hebrew_finalpe ף HEBREW LETTER FINAL PE */
621 { 0x0cf4, 0x05e4 }, /* hebrew_pe פ HEBREW LETTER PE */
622 { 0x0cf5, 0x05e5 }, /* hebrew_finalzade ץ HEBREW LETTER FINAL TSADI */
623 { 0x0cf6, 0x05e6 }, /* hebrew_zade צ HEBREW LETTER TSADI */
624 { 0x0cf7, 0x05e7 }, /* hebrew_qoph ק HEBREW LETTER QOF */
625 { 0x0cf8, 0x05e8 }, /* hebrew_resh ר HEBREW LETTER RESH */
626 { 0x0cf9, 0x05e9 }, /* hebrew_shin ש HEBREW LETTER SHIN */
627 { 0x0cfa, 0x05ea }, /* hebrew_taw ת HEBREW LETTER TAV */
628 { 0x0da1, 0x0e01 }, /* Thai_kokai ก THAI CHARACTER KO KAI */
629 { 0x0da2, 0x0e02 }, /* Thai_khokhai ข THAI CHARACTER KHO KHAI */
630 { 0x0da3, 0x0e03 }, /* Thai_khokhuat ฃ THAI CHARACTER KHO KHUAT */
631 { 0x0da4, 0x0e04 }, /* Thai_khokhwai ค THAI CHARACTER KHO KHWAI */
632 { 0x0da5, 0x0e05 }, /* Thai_khokhon ฅ THAI CHARACTER KHO KHON */
633 { 0x0da6, 0x0e06 }, /* Thai_khorakhang ฆ THAI CHARACTER KHO RAKHANG */
634 { 0x0da7, 0x0e07 }, /* Thai_ngongu ง THAI CHARACTER NGO NGU */
635 { 0x0da8, 0x0e08 }, /* Thai_chochan จ THAI CHARACTER CHO CHAN */
636 { 0x0da9, 0x0e09 }, /* Thai_choching ฉ THAI CHARACTER CHO CHING */
637 { 0x0daa, 0x0e0a }, /* Thai_chochang ช THAI CHARACTER CHO CHANG */
638 { 0x0dab, 0x0e0b }, /* Thai_soso ซ THAI CHARACTER SO SO */
639 { 0x0dac, 0x0e0c }, /* Thai_chochoe ฌ THAI CHARACTER CHO CHOE */
640 { 0x0dad, 0x0e0d }, /* Thai_yoying ญ THAI CHARACTER YO YING */
641 { 0x0dae, 0x0e0e }, /* Thai_dochada ฎ THAI CHARACTER DO CHADA */
642 { 0x0daf, 0x0e0f }, /* Thai_topatak ฏ THAI CHARACTER TO PATAK */
643 { 0x0db0, 0x0e10 }, /* Thai_thothan ฐ THAI CHARACTER THO THAN */
644 { 0x0db1, 0x0e11 }, /* Thai_thonangmontho ฑ THAI CHARACTER THO NANGMONTHO */
645 { 0x0db2, 0x0e12 }, /* Thai_thophuthao ฒ THAI CHARACTER THO PHUTHAO */
646 { 0x0db3, 0x0e13 }, /* Thai_nonen ณ THAI CHARACTER NO NEN */
647 { 0x0db4, 0x0e14 }, /* Thai_dodek ด THAI CHARACTER DO DEK */
648 { 0x0db5, 0x0e15 }, /* Thai_totao ต THAI CHARACTER TO TAO */
649 { 0x0db6, 0x0e16 }, /* Thai_thothung ถ THAI CHARACTER THO THUNG */
650 { 0x0db7, 0x0e17 }, /* Thai_thothahan ท THAI CHARACTER THO THAHAN */
651 { 0x0db8, 0x0e18 }, /* Thai_thothong ธ THAI CHARACTER THO THONG */
652 { 0x0db9, 0x0e19 }, /* Thai_nonu น THAI CHARACTER NO NU */
653 { 0x0dba, 0x0e1a }, /* Thai_bobaimai บ THAI CHARACTER BO BAIMAI */
654 { 0x0dbb, 0x0e1b }, /* Thai_popla ป THAI CHARACTER PO PLA */
655 { 0x0dbc, 0x0e1c }, /* Thai_phophung ผ THAI CHARACTER PHO PHUNG */
656 { 0x0dbd, 0x0e1d }, /* Thai_fofa ฝ THAI CHARACTER FO FA */
657 { 0x0dbe, 0x0e1e }, /* Thai_phophan พ THAI CHARACTER PHO PHAN */
658 { 0x0dbf, 0x0e1f }, /* Thai_fofan ฟ THAI CHARACTER FO FAN */
659 { 0x0dc0, 0x0e20 }, /* Thai_phosamphao ภ THAI CHARACTER PHO SAMPHAO */
660 { 0x0dc1, 0x0e21 }, /* Thai_moma ม THAI CHARACTER MO MA */
661 { 0x0dc2, 0x0e22 }, /* Thai_yoyak ย THAI CHARACTER YO YAK */
662 { 0x0dc3, 0x0e23 }, /* Thai_rorua ร THAI CHARACTER RO RUA */
663 { 0x0dc4, 0x0e24 }, /* Thai_ru ฤ THAI CHARACTER RU */
664 { 0x0dc5, 0x0e25 }, /* Thai_loling ล THAI CHARACTER LO LING */
665 { 0x0dc6, 0x0e26 }, /* Thai_lu ฦ THAI CHARACTER LU */
666 { 0x0dc7, 0x0e27 }, /* Thai_wowaen ว THAI CHARACTER WO WAEN */
667 { 0x0dc8, 0x0e28 }, /* Thai_sosala ศ THAI CHARACTER SO SALA */
668 { 0x0dc9, 0x0e29 }, /* Thai_sorusi ษ THAI CHARACTER SO RUSI */
669 { 0x0dca, 0x0e2a }, /* Thai_sosua ส THAI CHARACTER SO SUA */
670 { 0x0dcb, 0x0e2b }, /* Thai_hohip ห THAI CHARACTER HO HIP */
671 { 0x0dcc, 0x0e2c }, /* Thai_lochula ฬ THAI CHARACTER LO CHULA */
672 { 0x0dcd, 0x0e2d }, /* Thai_oang อ THAI CHARACTER O ANG */
673 { 0x0dce, 0x0e2e }, /* Thai_honokhuk ฮ THAI CHARACTER HO NOKHUK */
674 { 0x0dcf, 0x0e2f }, /* Thai_paiyannoi ฯ THAI CHARACTER PAIYANNOI */
675 { 0x0dd0, 0x0e30 }, /* Thai_saraa ะ THAI CHARACTER SARA A */
676 { 0x0dd1, 0x0e31 }, /* Thai_maihanakat ั THAI CHARACTER MAI HAN-AKAT */
677 { 0x0dd2, 0x0e32 }, /* Thai_saraaa า THAI CHARACTER SARA AA */
678 { 0x0dd3, 0x0e33 }, /* Thai_saraam ำ THAI CHARACTER SARA AM */
679 { 0x0dd4, 0x0e34 }, /* Thai_sarai ิ THAI CHARACTER SARA I */
680 { 0x0dd5, 0x0e35 }, /* Thai_saraii ี THAI CHARACTER SARA II */
681 { 0x0dd6, 0x0e36 }, /* Thai_saraue ึ THAI CHARACTER SARA UE */
682 { 0x0dd7, 0x0e37 }, /* Thai_sarauee ื THAI CHARACTER SARA UEE */
683 { 0x0dd8, 0x0e38 }, /* Thai_sarau ุ THAI CHARACTER SARA U */
684 { 0x0dd9, 0x0e39 }, /* Thai_sarauu ู THAI CHARACTER SARA UU */
685 { 0x0dda, 0x0e3a }, /* Thai_phinthu ฺ THAI CHARACTER PHINTHU */
686 { 0x0dde, 0x0e3e }, /* Thai_maihanakat_maitho ฾ ??? */
687 { 0x0ddf, 0x0e3f }, /* Thai_baht ฿ THAI CURRENCY SYMBOL BAHT */
688 { 0x0de0, 0x0e40 }, /* Thai_sarae เ THAI CHARACTER SARA E */
689 { 0x0de1, 0x0e41 }, /* Thai_saraae แ THAI CHARACTER SARA AE */
690 { 0x0de2, 0x0e42 }, /* Thai_sarao โ THAI CHARACTER SARA O */
691 { 0x0de3, 0x0e43 }, /* Thai_saraaimaimuan ใ THAI CHARACTER SARA AI MAIMUAN */
692 { 0x0de4, 0x0e44 }, /* Thai_saraaimaimalai ไ THAI CHARACTER SARA AI MAIMALAI */
693 { 0x0de5, 0x0e45 }, /* Thai_lakkhangyao ๅ THAI CHARACTER LAKKHANGYAO */
694 { 0x0de6, 0x0e46 }, /* Thai_maiyamok ๆ THAI CHARACTER MAIYAMOK */
695 { 0x0de7, 0x0e47 }, /* Thai_maitaikhu ็ THAI CHARACTER MAITAIKHU */
696 { 0x0de8, 0x0e48 }, /* Thai_maiek ่ THAI CHARACTER MAI EK */
697 { 0x0de9, 0x0e49 }, /* Thai_maitho ้ THAI CHARACTER MAI THO */
698 { 0x0dea, 0x0e4a }, /* Thai_maitri ๊ THAI CHARACTER MAI TRI */
699 { 0x0deb, 0x0e4b }, /* Thai_maichattawa ๋ THAI CHARACTER MAI CHATTAWA */
700 { 0x0dec, 0x0e4c }, /* Thai_thanthakhat ์ THAI CHARACTER THANTHAKHAT */
701 { 0x0ded, 0x0e4d }, /* Thai_nikhahit ํ THAI CHARACTER NIKHAHIT */
702 { 0x0df0, 0x0e50 }, /* Thai_leksun ๐ THAI DIGIT ZERO */
703 { 0x0df1, 0x0e51 }, /* Thai_leknung ๑ THAI DIGIT ONE */
704 { 0x0df2, 0x0e52 }, /* Thai_leksong ๒ THAI DIGIT TWO */
705 { 0x0df3, 0x0e53 }, /* Thai_leksam ๓ THAI DIGIT THREE */
706 { 0x0df4, 0x0e54 }, /* Thai_leksi ๔ THAI DIGIT FOUR */
707 { 0x0df5, 0x0e55 }, /* Thai_lekha ๕ THAI DIGIT FIVE */
708 { 0x0df6, 0x0e56 }, /* Thai_lekhok ๖ THAI DIGIT SIX */
709 { 0x0df7, 0x0e57 }, /* Thai_lekchet ๗ THAI DIGIT SEVEN */
710 { 0x0df8, 0x0e58 }, /* Thai_lekpaet ๘ THAI DIGIT EIGHT */
711 { 0x0df9, 0x0e59 }, /* Thai_lekkao ๙ THAI DIGIT NINE */
712 { 0x0ea1, 0x3131 }, /* Hangul_Kiyeog ㄱ HANGUL LETTER KIYEOK */
713 { 0x0ea2, 0x3132 }, /* Hangul_SsangKiyeog ㄲ HANGUL LETTER SSANGKIYEOK */
714 { 0x0ea3, 0x3133 }, /* Hangul_KiyeogSios ㄳ HANGUL LETTER KIYEOK-SIOS */
715 { 0x0ea4, 0x3134 }, /* Hangul_Nieun ㄴ HANGUL LETTER NIEUN */
716 { 0x0ea5, 0x3135 }, /* Hangul_NieunJieuj ㄵ HANGUL LETTER NIEUN-CIEUC */
717 { 0x0ea6, 0x3136 }, /* Hangul_NieunHieuh ㄶ HANGUL LETTER NIEUN-HIEUH */
718 { 0x0ea7, 0x3137 }, /* Hangul_Dikeud ㄷ HANGUL LETTER TIKEUT */
719 { 0x0ea8, 0x3138 }, /* Hangul_SsangDikeud ㄸ HANGUL LETTER SSANGTIKEUT */
720 { 0x0ea9, 0x3139 }, /* Hangul_Rieul ㄹ HANGUL LETTER RIEUL */
721 { 0x0eaa, 0x313a }, /* Hangul_RieulKiyeog ㄺ HANGUL LETTER RIEUL-KIYEOK */
722 { 0x0eab, 0x313b }, /* Hangul_RieulMieum ㄻ HANGUL LETTER RIEUL-MIEUM */
723 { 0x0eac, 0x313c }, /* Hangul_RieulPieub ㄼ HANGUL LETTER RIEUL-PIEUP */
724 { 0x0ead, 0x313d }, /* Hangul_RieulSios ㄽ HANGUL LETTER RIEUL-SIOS */
725 { 0x0eae, 0x313e }, /* Hangul_RieulTieut ㄾ HANGUL LETTER RIEUL-THIEUTH */
726 { 0x0eaf, 0x313f }, /* Hangul_RieulPhieuf ㄿ HANGUL LETTER RIEUL-PHIEUPH */
727 { 0x0eb0, 0x3140 }, /* Hangul_RieulHieuh ㅀ HANGUL LETTER RIEUL-HIEUH */
728 { 0x0eb1, 0x3141 }, /* Hangul_Mieum ㅁ HANGUL LETTER MIEUM */
729 { 0x0eb2, 0x3142 }, /* Hangul_Pieub ㅂ HANGUL LETTER PIEUP */
730 { 0x0eb3, 0x3143 }, /* Hangul_SsangPieub ㅃ HANGUL LETTER SSANGPIEUP */
731 { 0x0eb4, 0x3144 }, /* Hangul_PieubSios ㅄ HANGUL LETTER PIEUP-SIOS */
732 { 0x0eb5, 0x3145 }, /* Hangul_Sios ㅅ HANGUL LETTER SIOS */
733 { 0x0eb6, 0x3146 }, /* Hangul_SsangSios ㅆ HANGUL LETTER SSANGSIOS */
734 { 0x0eb7, 0x3147 }, /* Hangul_Ieung ㅇ HANGUL LETTER IEUNG */
735 { 0x0eb8, 0x3148 }, /* Hangul_Jieuj ㅈ HANGUL LETTER CIEUC */
736 { 0x0eb9, 0x3149 }, /* Hangul_SsangJieuj ㅉ HANGUL LETTER SSANGCIEUC */
737 { 0x0eba, 0x314a }, /* Hangul_Cieuc ㅊ HANGUL LETTER CHIEUCH */
738 { 0x0ebb, 0x314b }, /* Hangul_Khieuq ㅋ HANGUL LETTER KHIEUKH */
739 { 0x0ebc, 0x314c }, /* Hangul_Tieut ㅌ HANGUL LETTER THIEUTH */
740 { 0x0ebd, 0x314d }, /* Hangul_Phieuf ㅍ HANGUL LETTER PHIEUPH */
741 { 0x0ebe, 0x314e }, /* Hangul_Hieuh ㅎ HANGUL LETTER HIEUH */
742 { 0x0ebf, 0x314f }, /* Hangul_A ㅏ HANGUL LETTER A */
743 { 0x0ec0, 0x3150 }, /* Hangul_AE ㅐ HANGUL LETTER AE */
744 { 0x0ec1, 0x3151 }, /* Hangul_YA ㅑ HANGUL LETTER YA */
745 { 0x0ec2, 0x3152 }, /* Hangul_YAE ㅒ HANGUL LETTER YAE */
746 { 0x0ec3, 0x3153 }, /* Hangul_EO ㅓ HANGUL LETTER EO */
747 { 0x0ec4, 0x3154 }, /* Hangul_E ㅔ HANGUL LETTER E */
748 { 0x0ec5, 0x3155 }, /* Hangul_YEO ㅕ HANGUL LETTER YEO */
749 { 0x0ec6, 0x3156 }, /* Hangul_YE ㅖ HANGUL LETTER YE */
750 { 0x0ec7, 0x3157 }, /* Hangul_O ㅗ HANGUL LETTER O */
751 { 0x0ec8, 0x3158 }, /* Hangul_WA ㅘ HANGUL LETTER WA */
752 { 0x0ec9, 0x3159 }, /* Hangul_WAE ㅙ HANGUL LETTER WAE */
753 { 0x0eca, 0x315a }, /* Hangul_OE ㅚ HANGUL LETTER OE */
754 { 0x0ecb, 0x315b }, /* Hangul_YO ㅛ HANGUL LETTER YO */
755 { 0x0ecc, 0x315c }, /* Hangul_U ㅜ HANGUL LETTER U */
756 { 0x0ecd, 0x315d }, /* Hangul_WEO ㅝ HANGUL LETTER WEO */
757 { 0x0ece, 0x315e }, /* Hangul_WE ㅞ HANGUL LETTER WE */
758 { 0x0ecf, 0x315f }, /* Hangul_WI ㅟ HANGUL LETTER WI */
759 { 0x0ed0, 0x3160 }, /* Hangul_YU ㅠ HANGUL LETTER YU */
760 { 0x0ed1, 0x3161 }, /* Hangul_EU ㅡ HANGUL LETTER EU */
761 { 0x0ed2, 0x3162 }, /* Hangul_YI ㅢ HANGUL LETTER YI */
762 { 0x0ed3, 0x3163 }, /* Hangul_I ㅣ HANGUL LETTER I */
763 { 0x0ed4, 0x11a8 }, /* Hangul_J_Kiyeog ᆨ HANGUL JONGSEONG KIYEOK */
764 { 0x0ed5, 0x11a9 }, /* Hangul_J_SsangKiyeog ᆩ HANGUL JONGSEONG SSANGKIYEOK */
765 { 0x0ed6, 0x11aa }, /* Hangul_J_KiyeogSios ᆪ HANGUL JONGSEONG KIYEOK-SIOS */
766 { 0x0ed7, 0x11ab }, /* Hangul_J_Nieun ᆫ HANGUL JONGSEONG NIEUN */
767 { 0x0ed8, 0x11ac }, /* Hangul_J_NieunJieuj ᆬ HANGUL JONGSEONG NIEUN-CIEUC */
768 { 0x0ed9, 0x11ad }, /* Hangul_J_NieunHieuh ᆭ HANGUL JONGSEONG NIEUN-HIEUH */
769 { 0x0eda, 0x11ae }, /* Hangul_J_Dikeud ᆮ HANGUL JONGSEONG TIKEUT */
770 { 0x0edb, 0x11af }, /* Hangul_J_Rieul ᆯ HANGUL JONGSEONG RIEUL */
771 { 0x0edc, 0x11b0 }, /* Hangul_J_RieulKiyeog ᆰ HANGUL JONGSEONG RIEUL-KIYEOK */
772 { 0x0edd, 0x11b1 }, /* Hangul_J_RieulMieum ᆱ HANGUL JONGSEONG RIEUL-MIEUM */
773 { 0x0ede, 0x11b2 }, /* Hangul_J_RieulPieub ᆲ HANGUL JONGSEONG RIEUL-PIEUP */
774 { 0x0edf, 0x11b3 }, /* Hangul_J_RieulSios ᆳ HANGUL JONGSEONG RIEUL-SIOS */
775 { 0x0ee0, 0x11b4 }, /* Hangul_J_RieulTieut ᆴ HANGUL JONGSEONG RIEUL-THIEUTH */
776 { 0x0ee1, 0x11b5 }, /* Hangul_J_RieulPhieuf ᆵ HANGUL JONGSEONG RIEUL-PHIEUPH */
777 { 0x0ee2, 0x11b6 }, /* Hangul_J_RieulHieuh ᆶ HANGUL JONGSEONG RIEUL-HIEUH */
778 { 0x0ee3, 0x11b7 }, /* Hangul_J_Mieum ᆷ HANGUL JONGSEONG MIEUM */
779 { 0x0ee4, 0x11b8 }, /* Hangul_J_Pieub ᆸ HANGUL JONGSEONG PIEUP */
780 { 0x0ee5, 0x11b9 }, /* Hangul_J_PieubSios ᆹ HANGUL JONGSEONG PIEUP-SIOS */
781 { 0x0ee6, 0x11ba }, /* Hangul_J_Sios ᆺ HANGUL JONGSEONG SIOS */
782 { 0x0ee7, 0x11bb }, /* Hangul_J_SsangSios ᆻ HANGUL JONGSEONG SSANGSIOS */
783 { 0x0ee8, 0x11bc }, /* Hangul_J_Ieung ᆼ HANGUL JONGSEONG IEUNG */
784 { 0x0ee9, 0x11bd }, /* Hangul_J_Jieuj ᆽ HANGUL JONGSEONG CIEUC */
785 { 0x0eea, 0x11be }, /* Hangul_J_Cieuc ᆾ HANGUL JONGSEONG CHIEUCH */
786 { 0x0eeb, 0x11bf }, /* Hangul_J_Khieuq ᆿ HANGUL JONGSEONG KHIEUKH */
787 { 0x0eec, 0x11c0 }, /* Hangul_J_Tieut ᇀ HANGUL JONGSEONG THIEUTH */
788 { 0x0eed, 0x11c1 }, /* Hangul_J_Phieuf ᇁ HANGUL JONGSEONG PHIEUPH */
789 { 0x0eee, 0x11c2 }, /* Hangul_J_Hieuh ᇂ HANGUL JONGSEONG HIEUH */
790 { 0x0eef, 0x316d }, /* Hangul_RieulYeorinHieuh ㅭ HANGUL LETTER RIEUL-YEORINHIEUH */
791 { 0x0ef0, 0x3171 }, /* Hangul_SunkyeongeumMieum ㅱ HANGUL LETTER KAPYEOUNMIEUM */
792 { 0x0ef1, 0x3178 }, /* Hangul_SunkyeongeumPieub ㅸ HANGUL LETTER KAPYEOUNPIEUP */
793 { 0x0ef2, 0x317f }, /* Hangul_PanSios ㅿ HANGUL LETTER PANSIOS */
794 /* 0x0ef3 Hangul_KkogjiDalrinIeung ? ??? */
795 { 0x0ef4, 0x3184 }, /* Hangul_SunkyeongeumPhieuf ㆄ HANGUL LETTER KAPYEOUNPHIEUPH */
796 { 0x0ef5, 0x3186 }, /* Hangul_YeorinHieuh ㆆ HANGUL LETTER YEORINHIEUH */
797 { 0x0ef6, 0x318d }, /* Hangul_AraeA ㆍ HANGUL LETTER ARAEA */
798 { 0x0ef7, 0x318e }, /* Hangul_AraeAE ㆎ HANGUL LETTER ARAEAE */
799 { 0x0ef8, 0x11eb }, /* Hangul_J_PanSios ᇫ HANGUL JONGSEONG PANSIOS */
800 /* 0x0ef9 Hangul_J_KkogjiDalrinIeung ? ??? */
801 { 0x0efa, 0x11f9 }, /* Hangul_J_YeorinHieuh ᇹ HANGUL JONGSEONG YEORINHIEUH */
802 { 0x0eff, 0x20a9 }, /* Korean_Won ₩ WON SIGN */
803 { 0x13bc, 0x0152 }, /* OE ΠLATIN CAPITAL LIGATURE OE */
804 { 0x13bd, 0x0153 }, /* oe œ LATIN SMALL LIGATURE OE */
805 { 0x13be, 0x0178 }, /* Ydiaeresis Ÿ LATIN CAPITAL LETTER Y WITH DIAERESIS */
806 { 0x20a0, 0x20a0 }, /* EcuSign ₠ EURO-CURRENCY SIGN */
807 { 0x20a1, 0x20a1 }, /* ColonSign ₡ COLON SIGN */
808 { 0x20a2, 0x20a2 }, /* CruzeiroSign ₢ CRUZEIRO SIGN */
809 { 0x20a3, 0x20a3 }, /* FFrancSign ₣ FRENCH FRANC SIGN */
810 { 0x20a4, 0x20a4 }, /* LiraSign ₤ LIRA SIGN */
811 { 0x20a5, 0x20a5 }, /* MillSign ₥ MILL SIGN */
812 { 0x20a6, 0x20a6 }, /* NairaSign ₦ NAIRA SIGN */
813 { 0x20a7, 0x20a7 }, /* PesetaSign ₧ PESETA SIGN */
814 { 0x20a8, 0x20a8 }, /* RupeeSign ₨ RUPEE SIGN */
815 { 0x20a9, 0x20a9 }, /* WonSign ₩ WON SIGN */
816 { 0x20aa, 0x20aa }, /* NewSheqelSign ₪ NEW SHEQEL SIGN */
817 { 0x20ab, 0x20ab }, /* DongSign ₫ DONG SIGN */
818 { 0x20ac, 0x20ac }, /* EuroSign € EURO SIGN */
819
820
821 /* Following items added to GTK, not in the xterm table */
822
823 /* A few ASCII control characters */
824
825 { 0xFF08 /* Backspace */, '\b' },
826 { 0xFF09 /* Tab */, '\t' },
827 { 0xFF0A /* Linefeed */, '\n' },
828 { 0xFF0B /* Vert. Tab */, '\v' },
829 { 0xFF0D /* Return */, '\r' },
830 { 0xFF1B /* Escape */, '\033' },
831
832 /* Numeric keypad */
833
834 { 0xFF80 /* Space */, ' ' },
835 { 0xFFAA /* Multiply */, '*' },
836 { 0xFFAB /* Add */, '+' },
837 { 0xFFAC /* Separator */, ',' },
838 { 0xFFAD /* Subtract */, '-' },
839 { 0xFFAE /* Decimal */, '.' },
840 { 0xFFAF /* Divide */, '/' },
841 { 0xFFB0 /* 0 */, '0' },
842 { 0xFFB1 /* 1 */, '1' },
843 { 0xFFB2 /* 2 */, '2' },
844 { 0xFFB3 /* 3 */, '3' },
845 { 0xFFB4 /* 4 */, '4' },
846 { 0xFFB5 /* 5 */, '5' },
847 { 0xFFB6 /* 6 */, '6' },
848 { 0xFFB7 /* 7 */, '7' },
849 { 0xFFB8 /* 8 */, '8' },
850 { 0xFFB9 /* 9 */, '9' },
851 { 0xFFBD /* Equal */, '=' },
852
853 /* End numeric keypad */
854
855 { 0xFFFF /* Delete */, '\177' }
856 };
857
858 static const struct _FcitxUnicodeToKeySym gdk_unicode_to_keysym_tab[] = {
859 { 0x0abd, 0x002e }, /* decimalpoint . FULL STOP */
860 { 0x0ba3, 0x003c }, /* leftcaret < LESS-THAN SIGN */
861 { 0x0ba6, 0x003e }, /* rightcaret > GREATER-THAN SIGN */
862 { 0x0bc6, 0x005f }, /* underbar _ LOW LINE */
863 { 0x0bc0, 0x00af }, /* overbar ¯ MACRON */
864 { 0x03c0, 0x0100 }, /* Amacron Ā LATIN CAPITAL LETTER A WITH MACRON */
865 { 0x03e0, 0x0101 }, /* amacron ā LATIN SMALL LETTER A WITH MACRON */
866 { 0x01c3, 0x0102 }, /* Abreve Ă LATIN CAPITAL LETTER A WITH BREVE */
867 { 0x01e3, 0x0103 }, /* abreve ă LATIN SMALL LETTER A WITH BREVE */
868 { 0x01a1, 0x0104 }, /* Aogonek Ą LATIN CAPITAL LETTER A WITH OGONEK */
869 { 0x01b1, 0x0105 }, /* aogonek ą LATIN SMALL LETTER A WITH OGONEK */
870 { 0x01c6, 0x0106 }, /* Cacute Ć LATIN CAPITAL LETTER C WITH ACUTE */
871 { 0x01e6, 0x0107 }, /* cacute ć LATIN SMALL LETTER C WITH ACUTE */
872 { 0x02c6, 0x0108 }, /* Ccircumflex Ĉ LATIN CAPITAL LETTER C WITH CIRCUMFLEX */
873 { 0x02e6, 0x0109 }, /* ccircumflex ĉ LATIN SMALL LETTER C WITH CIRCUMFLEX */
874 { 0x02c5, 0x010a }, /* Cabovedot Ċ LATIN CAPITAL LETTER C WITH DOT ABOVE */
875 { 0x02e5, 0x010b }, /* cabovedot ċ LATIN SMALL LETTER C WITH DOT ABOVE */
876 { 0x01c8, 0x010c }, /* Ccaron Č LATIN CAPITAL LETTER C WITH CARON */
877 { 0x01e8, 0x010d }, /* ccaron č LATIN SMALL LETTER C WITH CARON */
878 { 0x01cf, 0x010e }, /* Dcaron Ď LATIN CAPITAL LETTER D WITH CARON */
879 { 0x01ef, 0x010f }, /* dcaron ď LATIN SMALL LETTER D WITH CARON */
880 { 0x01d0, 0x0110 }, /* Dstroke Đ LATIN CAPITAL LETTER D WITH STROKE */
881 { 0x01f0, 0x0111 }, /* dstroke đ LATIN SMALL LETTER D WITH STROKE */
882 { 0x03aa, 0x0112 }, /* Emacron Ē LATIN CAPITAL LETTER E WITH MACRON */
883 { 0x03ba, 0x0113 }, /* emacron ē LATIN SMALL LETTER E WITH MACRON */
884 { 0x03cc, 0x0116 }, /* Eabovedot Ė LATIN CAPITAL LETTER E WITH DOT ABOVE */
885 { 0x03ec, 0x0117 }, /* eabovedot ė LATIN SMALL LETTER E WITH DOT ABOVE */
886 { 0x01ca, 0x0118 }, /* Eogonek Ę LATIN CAPITAL LETTER E WITH OGONEK */
887 { 0x01ea, 0x0119 }, /* eogonek ę LATIN SMALL LETTER E WITH OGONEK */
888 { 0x01cc, 0x011a }, /* Ecaron Ě LATIN CAPITAL LETTER E WITH CARON */
889 { 0x01ec, 0x011b }, /* ecaron ě LATIN SMALL LETTER E WITH CARON */
890 { 0x02d8, 0x011c }, /* Gcircumflex Ĝ LATIN CAPITAL LETTER G WITH CIRCUMFLEX */
891 { 0x02f8, 0x011d }, /* gcircumflex ĝ LATIN SMALL LETTER G WITH CIRCUMFLEX */
892 { 0x02ab, 0x011e }, /* Gbreve Ğ LATIN CAPITAL LETTER G WITH BREVE */
893 { 0x02bb, 0x011f }, /* gbreve ğ LATIN SMALL LETTER G WITH BREVE */
894 { 0x02d5, 0x0120 }, /* Gabovedot Ġ LATIN CAPITAL LETTER G WITH DOT ABOVE */
895 { 0x02f5, 0x0121 }, /* gabovedot ġ LATIN SMALL LETTER G WITH DOT ABOVE */
896 { 0x03ab, 0x0122 }, /* Gcedilla Ģ LATIN CAPITAL LETTER G WITH CEDILLA */
897 { 0x03bb, 0x0123 }, /* gcedilla ģ LATIN SMALL LETTER G WITH CEDILLA */
898 { 0x02a6, 0x0124 }, /* Hcircumflex Ĥ LATIN CAPITAL LETTER H WITH CIRCUMFLEX */
899 { 0x02b6, 0x0125 }, /* hcircumflex ĥ LATIN SMALL LETTER H WITH CIRCUMFLEX */
900 { 0x02a1, 0x0126 }, /* Hstroke Ħ LATIN CAPITAL LETTER H WITH STROKE */
901 { 0x02b1, 0x0127 }, /* hstroke ħ LATIN SMALL LETTER H WITH STROKE */
902 { 0x03a5, 0x0128 }, /* Itilde Ĩ LATIN CAPITAL LETTER I WITH TILDE */
903 { 0x03b5, 0x0129 }, /* itilde ĩ LATIN SMALL LETTER I WITH TILDE */
904 { 0x03cf, 0x012a }, /* Imacron Ī LATIN CAPITAL LETTER I WITH MACRON */
905 { 0x03ef, 0x012b }, /* imacron ī LATIN SMALL LETTER I WITH MACRON */
906 { 0x03c7, 0x012e }, /* Iogonek Į LATIN CAPITAL LETTER I WITH OGONEK */
907 { 0x03e7, 0x012f }, /* iogonek į LATIN SMALL LETTER I WITH OGONEK */
908 { 0x02a9, 0x0130 }, /* Iabovedot İ LATIN CAPITAL LETTER I WITH DOT ABOVE */
909 { 0x02b9, 0x0131 }, /* idotless ı LATIN SMALL LETTER DOTLESS I */
910 { 0x02ac, 0x0134 }, /* Jcircumflex Ĵ LATIN CAPITAL LETTER J WITH CIRCUMFLEX */
911 { 0x02bc, 0x0135 }, /* jcircumflex ĵ LATIN SMALL LETTER J WITH CIRCUMFLEX */
912 { 0x03d3, 0x0136 }, /* Kcedilla Ķ LATIN CAPITAL LETTER K WITH CEDILLA */
913 { 0x03f3, 0x0137 }, /* kcedilla ķ LATIN SMALL LETTER K WITH CEDILLA */
914 { 0x03a2, 0x0138 }, /* kra ĸ LATIN SMALL LETTER KRA */
915 { 0x01c5, 0x0139 }, /* Lacute Ĺ LATIN CAPITAL LETTER L WITH ACUTE */
916 { 0x01e5, 0x013a }, /* lacute ĺ LATIN SMALL LETTER L WITH ACUTE */
917 { 0x03a6, 0x013b }, /* Lcedilla Ļ LATIN CAPITAL LETTER L WITH CEDILLA */
918 { 0x03b6, 0x013c }, /* lcedilla ļ LATIN SMALL LETTER L WITH CEDILLA */
919 { 0x01a5, 0x013d }, /* Lcaron Ľ LATIN CAPITAL LETTER L WITH CARON */
920 { 0x01b5, 0x013e }, /* lcaron ľ LATIN SMALL LETTER L WITH CARON */
921 { 0x01a3, 0x0141 }, /* Lstroke Ł LATIN CAPITAL LETTER L WITH STROKE */
922 { 0x01b3, 0x0142 }, /* lstroke ł LATIN SMALL LETTER L WITH STROKE */
923 { 0x01d1, 0x0143 }, /* Nacute Ń LATIN CAPITAL LETTER N WITH ACUTE */
924 { 0x01f1, 0x0144 }, /* nacute ń LATIN SMALL LETTER N WITH ACUTE */
925 { 0x03d1, 0x0145 }, /* Ncedilla Ņ LATIN CAPITAL LETTER N WITH CEDILLA */
926 { 0x03f1, 0x0146 }, /* ncedilla ņ LATIN SMALL LETTER N WITH CEDILLA */
927 { 0x01d2, 0x0147 }, /* Ncaron Ň LATIN CAPITAL LETTER N WITH CARON */
928 { 0x01f2, 0x0148 }, /* ncaron ň LATIN SMALL LETTER N WITH CARON */
929 { 0x03bd, 0x014a }, /* ENG Ŋ LATIN CAPITAL LETTER ENG */
930 { 0x03bf, 0x014b }, /* eng ŋ LATIN SMALL LETTER ENG */
931 { 0x03d2, 0x014c }, /* Omacron Ō LATIN CAPITAL LETTER O WITH MACRON */
932 { 0x03f2, 0x014d }, /* omacron ō LATIN SMALL LETTER O WITH MACRON */
933 { 0x01d5, 0x0150 }, /* Odoubleacute Ő LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */
934 { 0x01f5, 0x0151 }, /* odoubleacute ő LATIN SMALL LETTER O WITH DOUBLE ACUTE */
935 { 0x13bc, 0x0152 }, /* OE ΠLATIN CAPITAL LIGATURE OE */
936 { 0x13bd, 0x0153 }, /* oe œ LATIN SMALL LIGATURE OE */
937 { 0x01c0, 0x0154 }, /* Racute Ŕ LATIN CAPITAL LETTER R WITH ACUTE */
938 { 0x01e0, 0x0155 }, /* racute ŕ LATIN SMALL LETTER R WITH ACUTE */
939 { 0x03a3, 0x0156 }, /* Rcedilla Ŗ LATIN CAPITAL LETTER R WITH CEDILLA */
940 { 0x03b3, 0x0157 }, /* rcedilla ŗ LATIN SMALL LETTER R WITH CEDILLA */
941 { 0x01d8, 0x0158 }, /* Rcaron Ř LATIN CAPITAL LETTER R WITH CARON */
942 { 0x01f8, 0x0159 }, /* rcaron ř LATIN SMALL LETTER R WITH CARON */
943 { 0x01a6, 0x015a }, /* Sacute Ś LATIN CAPITAL LETTER S WITH ACUTE */
944 { 0x01b6, 0x015b }, /* sacute ś LATIN SMALL LETTER S WITH ACUTE */
945 { 0x02de, 0x015c }, /* Scircumflex Ŝ LATIN CAPITAL LETTER S WITH CIRCUMFLEX */
946 { 0x02fe, 0x015d }, /* scircumflex ŝ LATIN SMALL LETTER S WITH CIRCUMFLEX */
947 { 0x01aa, 0x015e }, /* Scedilla Ş LATIN CAPITAL LETTER S WITH CEDILLA */
948 { 0x01ba, 0x015f }, /* scedilla ş LATIN SMALL LETTER S WITH CEDILLA */
949 { 0x01a9, 0x0160 }, /* Scaron Š LATIN CAPITAL LETTER S WITH CARON */
950 { 0x01b9, 0x0161 }, /* scaron š LATIN SMALL LETTER S WITH CARON */
951 { 0x01de, 0x0162 }, /* Tcedilla Ţ LATIN CAPITAL LETTER T WITH CEDILLA */
952 { 0x01fe, 0x0163 }, /* tcedilla ţ LATIN SMALL LETTER T WITH CEDILLA */
953 { 0x01ab, 0x0164 }, /* Tcaron Ť LATIN CAPITAL LETTER T WITH CARON */
954 { 0x01bb, 0x0165 }, /* tcaron ť LATIN SMALL LETTER T WITH CARON */
955 { 0x03ac, 0x0166 }, /* Tslash Ŧ LATIN CAPITAL LETTER T WITH STROKE */
956 { 0x03bc, 0x0167 }, /* tslash ŧ LATIN SMALL LETTER T WITH STROKE */
957 { 0x03dd, 0x0168 }, /* Utilde Ũ LATIN CAPITAL LETTER U WITH TILDE */
958 { 0x03fd, 0x0169 }, /* utilde ũ LATIN SMALL LETTER U WITH TILDE */
959 { 0x03de, 0x016a }, /* Umacron Ū LATIN CAPITAL LETTER U WITH MACRON */
960 { 0x03fe, 0x016b }, /* umacron ū LATIN SMALL LETTER U WITH MACRON */
961 { 0x02dd, 0x016c }, /* Ubreve Ŭ LATIN CAPITAL LETTER U WITH BREVE */
962 { 0x02fd, 0x016d }, /* ubreve ŭ LATIN SMALL LETTER U WITH BREVE */
963 { 0x01d9, 0x016e }, /* Uring Ů LATIN CAPITAL LETTER U WITH RING ABOVE */
964 { 0x01f9, 0x016f }, /* uring ů LATIN SMALL LETTER U WITH RING ABOVE */
965 { 0x01db, 0x0170 }, /* Udoubleacute Ű LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */
966 { 0x01fb, 0x0171 }, /* udoubleacute ű LATIN SMALL LETTER U WITH DOUBLE ACUTE */
967 { 0x03d9, 0x0172 }, /* Uogonek Ų LATIN CAPITAL LETTER U WITH OGONEK */
968 { 0x03f9, 0x0173 }, /* uogonek ų LATIN SMALL LETTER U WITH OGONEK */
969 { 0x13be, 0x0178 }, /* Ydiaeresis Ÿ LATIN CAPITAL LETTER Y WITH DIAERESIS */
970 { 0x01ac, 0x0179 }, /* Zacute Ź LATIN CAPITAL LETTER Z WITH ACUTE */
971 { 0x01bc, 0x017a }, /* zacute ź LATIN SMALL LETTER Z WITH ACUTE */
972 { 0x01af, 0x017b }, /* Zabovedot Ż LATIN CAPITAL LETTER Z WITH DOT ABOVE */
973 { 0x01bf, 0x017c }, /* zabovedot ż LATIN SMALL LETTER Z WITH DOT ABOVE */
974 { 0x01ae, 0x017d }, /* Zcaron Ž LATIN CAPITAL LETTER Z WITH CARON */
975 { 0x01be, 0x017e }, /* zcaron ž LATIN SMALL LETTER Z WITH CARON */
976 { 0x08f6, 0x0192 }, /* function ƒ LATIN SMALL LETTER F WITH HOOK */
977 { 0x01b7, 0x02c7 }, /* caron ˇ CARON */
978 { 0x01a2, 0x02d8 }, /* breve ˘ BREVE */
979 { 0x01ff, 0x02d9 }, /* abovedot ˙ DOT ABOVE */
980 { 0x01b2, 0x02db }, /* ogonek ˛ OGONEK */
981 { 0x01bd, 0x02dd }, /* doubleacute ˝ DOUBLE ACUTE ACCENT */
982 { 0x07ae, 0x0385 }, /* Greek_accentdieresis ΅ GREEK DIALYTIKA TONOS */
983 { 0x07a1, 0x0386 }, /* Greek_ALPHAaccent Ά GREEK CAPITAL LETTER ALPHA WITH TONOS */
984 { 0x07a2, 0x0388 }, /* Greek_EPSILONaccent Έ GREEK CAPITAL LETTER EPSILON WITH TONOS */
985 { 0x07a3, 0x0389 }, /* Greek_ETAaccent Ή GREEK CAPITAL LETTER ETA WITH TONOS */
986 { 0x07a4, 0x038a }, /* Greek_IOTAaccent Ί GREEK CAPITAL LETTER IOTA WITH TONOS */
987 { 0x07a7, 0x038c }, /* Greek_OMICRONaccent Ό GREEK CAPITAL LETTER OMICRON WITH TONOS */
988 { 0x07a8, 0x038e }, /* Greek_UPSILONaccent Ύ GREEK CAPITAL LETTER UPSILON WITH TONOS */
989 { 0x07ab, 0x038f }, /* Greek_OMEGAaccent Ώ GREEK CAPITAL LETTER OMEGA WITH TONOS */
990 { 0x07b6, 0x0390 }, /* Greek_iotaaccentdieresis ΐ GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */
991 { 0x07c1, 0x0391 }, /* Greek_ALPHA Α GREEK CAPITAL LETTER ALPHA */
992 { 0x07c2, 0x0392 }, /* Greek_BETA Β GREEK CAPITAL LETTER BETA */
993 { 0x07c3, 0x0393 }, /* Greek_GAMMA Γ GREEK CAPITAL LETTER GAMMA */
994 { 0x07c4, 0x0394 }, /* Greek_DELTA Δ GREEK CAPITAL LETTER DELTA */
995 { 0x07c5, 0x0395 }, /* Greek_EPSILON Ε GREEK CAPITAL LETTER EPSILON */
996 { 0x07c6, 0x0396 }, /* Greek_ZETA Ζ GREEK CAPITAL LETTER ZETA */
997 { 0x07c7, 0x0397 }, /* Greek_ETA Η GREEK CAPITAL LETTER ETA */
998 { 0x07c8, 0x0398 }, /* Greek_THETA Θ GREEK CAPITAL LETTER THETA */
999 { 0x07c9, 0x0399 }, /* Greek_IOTA Ι GREEK CAPITAL LETTER IOTA */
1000 { 0x07ca, 0x039a }, /* Greek_KAPPA Κ GREEK CAPITAL LETTER KAPPA */
1001 { 0x07cb, 0x039b }, /* Greek_LAMBDA Λ GREEK CAPITAL LETTER LAMDA */
1002 { 0x07cc, 0x039c }, /* Greek_MU Μ GREEK CAPITAL LETTER MU */
1003 { 0x07cd, 0x039d }, /* Greek_NU Ν GREEK CAPITAL LETTER NU */
1004 { 0x07ce, 0x039e }, /* Greek_XI Ξ GREEK CAPITAL LETTER XI */
1005 { 0x07cf, 0x039f }, /* Greek_OMICRON Ο GREEK CAPITAL LETTER OMICRON */
1006 { 0x07d0, 0x03a0 }, /* Greek_PI Π GREEK CAPITAL LETTER PI */
1007 { 0x07d1, 0x03a1 }, /* Greek_RHO Ρ GREEK CAPITAL LETTER RHO */
1008 { 0x07d2, 0x03a3 }, /* Greek_SIGMA Σ GREEK CAPITAL LETTER SIGMA */
1009 { 0x07d4, 0x03a4 }, /* Greek_TAU Τ GREEK CAPITAL LETTER TAU */
1010 { 0x07d5, 0x03a5 }, /* Greek_UPSILON Υ GREEK CAPITAL LETTER UPSILON */
1011 { 0x07d6, 0x03a6 }, /* Greek_PHI Φ GREEK CAPITAL LETTER PHI */
1012 { 0x07d7, 0x03a7 }, /* Greek_CHI Χ GREEK CAPITAL LETTER CHI */
1013 { 0x07d8, 0x03a8 }, /* Greek_PSI Ψ GREEK CAPITAL LETTER PSI */
1014 { 0x07d9, 0x03a9 }, /* Greek_OMEGA Ω GREEK CAPITAL LETTER OMEGA */
1015 { 0x07a5, 0x03aa }, /* Greek_IOTAdieresis Ϊ GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */
1016 { 0x07a9, 0x03ab }, /* Greek_UPSILONdieresis Ϋ GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */
1017 { 0x07b1, 0x03ac }, /* Greek_alphaaccent ά GREEK SMALL LETTER ALPHA WITH TONOS */
1018 { 0x07b2, 0x03ad }, /* Greek_epsilonaccent έ GREEK SMALL LETTER EPSILON WITH TONOS */
1019 { 0x07b3, 0x03ae }, /* Greek_etaaccent ή GREEK SMALL LETTER ETA WITH TONOS */
1020 { 0x07b4, 0x03af }, /* Greek_iotaaccent ί GREEK SMALL LETTER IOTA WITH TONOS */
1021 { 0x07ba, 0x03b0 }, /* Greek_upsilonaccentdieresis ΰ GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */
1022 { 0x07e1, 0x03b1 }, /* Greek_alpha α GREEK SMALL LETTER ALPHA */
1023 { 0x07e2, 0x03b2 }, /* Greek_beta β GREEK SMALL LETTER BETA */
1024 { 0x07e3, 0x03b3 }, /* Greek_gamma γ GREEK SMALL LETTER GAMMA */
1025 { 0x07e4, 0x03b4 }, /* Greek_delta δ GREEK SMALL LETTER DELTA */
1026 { 0x07e5, 0x03b5 }, /* Greek_epsilon ε GREEK SMALL LETTER EPSILON */
1027 { 0x07e6, 0x03b6 }, /* Greek_zeta ζ GREEK SMALL LETTER ZETA */
1028 { 0x07e7, 0x03b7 }, /* Greek_eta η GREEK SMALL LETTER ETA */
1029 { 0x07e8, 0x03b8 }, /* Greek_theta θ GREEK SMALL LETTER THETA */
1030 { 0x07e9, 0x03b9 }, /* Greek_iota ι GREEK SMALL LETTER IOTA */
1031 { 0x07ea, 0x03ba }, /* Greek_kappa κ GREEK SMALL LETTER KAPPA */
1032 { 0x07eb, 0x03bb }, /* Greek_lambda λ GREEK SMALL LETTER LAMDA */
1033 { 0x07ec, 0x03bc }, /* Greek_mu μ GREEK SMALL LETTER MU */
1034 { 0x07ed, 0x03bd }, /* Greek_nu ν GREEK SMALL LETTER NU */
1035 { 0x07ee, 0x03be }, /* Greek_xi ξ GREEK SMALL LETTER XI */
1036 { 0x07ef, 0x03bf }, /* Greek_omicron ο GREEK SMALL LETTER OMICRON */
1037 { 0x07f0, 0x03c0 }, /* Greek_pi π GREEK SMALL LETTER PI */
1038 { 0x07f1, 0x03c1 }, /* Greek_rho ρ GREEK SMALL LETTER RHO */
1039 { 0x07f3, 0x03c2 }, /* Greek_finalsmallsigma ς GREEK SMALL LETTER FINAL SIGMA */
1040 { 0x07f2, 0x03c3 }, /* Greek_sigma σ GREEK SMALL LETTER SIGMA */
1041 { 0x07f4, 0x03c4 }, /* Greek_tau τ GREEK SMALL LETTER TAU */
1042 { 0x07f5, 0x03c5 }, /* Greek_upsilon υ GREEK SMALL LETTER UPSILON */
1043 { 0x07f6, 0x03c6 }, /* Greek_phi φ GREEK SMALL LETTER PHI */
1044 { 0x07f7, 0x03c7 }, /* Greek_chi χ GREEK SMALL LETTER CHI */
1045 { 0x07f8, 0x03c8 }, /* Greek_psi ψ GREEK SMALL LETTER PSI */
1046 { 0x07f9, 0x03c9 }, /* Greek_omega ω GREEK SMALL LETTER OMEGA */
1047 { 0x07b5, 0x03ca }, /* Greek_iotadieresis ϊ GREEK SMALL LETTER IOTA WITH DIALYTIKA */
1048 { 0x07b9, 0x03cb }, /* Greek_upsilondieresis ϋ GREEK SMALL LETTER UPSILON WITH DIALYTIKA */
1049 { 0x07b7, 0x03cc }, /* Greek_omicronaccent ό GREEK SMALL LETTER OMICRON WITH TONOS */
1050 { 0x07b8, 0x03cd }, /* Greek_upsilonaccent ύ GREEK SMALL LETTER UPSILON WITH TONOS */
1051 { 0x07bb, 0x03ce }, /* Greek_omegaaccent ώ GREEK SMALL LETTER OMEGA WITH TONOS */
1052 { 0x06b3, 0x0401 }, /* Cyrillic_IO Ё CYRILLIC CAPITAL LETTER IO */
1053 { 0x06b1, 0x0402 }, /* Serbian_DJE Ђ CYRILLIC CAPITAL LETTER DJE */
1054 { 0x06b2, 0x0403 }, /* Macedonia_GJE Ѓ CYRILLIC CAPITAL LETTER GJE */
1055 { 0x06b4, 0x0404 }, /* Ukrainian_IE Є CYRILLIC CAPITAL LETTER UKRAINIAN IE */
1056 { 0x06b5, 0x0405 }, /* Macedonia_DSE Ѕ CYRILLIC CAPITAL LETTER DZE */
1057 { 0x06b6, 0x0406 }, /* Ukrainian_I І CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */
1058 { 0x06b7, 0x0407 }, /* Ukrainian_YI Ї CYRILLIC CAPITAL LETTER YI */
1059 { 0x06b8, 0x0408 }, /* Cyrillic_JE Ј CYRILLIC CAPITAL LETTER JE */
1060 { 0x06b9, 0x0409 }, /* Cyrillic_LJE Љ CYRILLIC CAPITAL LETTER LJE */
1061 { 0x06ba, 0x040a }, /* Cyrillic_NJE Њ CYRILLIC CAPITAL LETTER NJE */
1062 { 0x06bb, 0x040b }, /* Serbian_TSHE Ћ CYRILLIC CAPITAL LETTER TSHE */
1063 { 0x06bc, 0x040c }, /* Macedonia_KJE Ќ CYRILLIC CAPITAL LETTER KJE */
1064 { 0x06be, 0x040e }, /* Byelorussian_SHORTU Ў CYRILLIC CAPITAL LETTER SHORT U */
1065 { 0x06bf, 0x040f }, /* Cyrillic_DZHE Џ CYRILLIC CAPITAL LETTER DZHE */
1066 { 0x06e1, 0x0410 }, /* Cyrillic_A А CYRILLIC CAPITAL LETTER A */
1067 { 0x06e2, 0x0411 }, /* Cyrillic_BE Б CYRILLIC CAPITAL LETTER BE */
1068 { 0x06f7, 0x0412 }, /* Cyrillic_VE В CYRILLIC CAPITAL LETTER VE */
1069 { 0x06e7, 0x0413 }, /* Cyrillic_GHE Г CYRILLIC CAPITAL LETTER GHE */
1070 { 0x06e4, 0x0414 }, /* Cyrillic_DE Д CYRILLIC CAPITAL LETTER DE */
1071 { 0x06e5, 0x0415 }, /* Cyrillic_IE Е CYRILLIC CAPITAL LETTER IE */
1072 { 0x06f6, 0x0416 }, /* Cyrillic_ZHE Ж CYRILLIC CAPITAL LETTER ZHE */
1073 { 0x06fa, 0x0417 }, /* Cyrillic_ZE З CYRILLIC CAPITAL LETTER ZE */
1074 { 0x06e9, 0x0418 }, /* Cyrillic_I И CYRILLIC CAPITAL LETTER I */
1075 { 0x06ea, 0x0419 }, /* Cyrillic_SHORTI Й CYRILLIC CAPITAL LETTER SHORT I */
1076 { 0x06eb, 0x041a }, /* Cyrillic_KA К CYRILLIC CAPITAL LETTER KA */
1077 { 0x06ec, 0x041b }, /* Cyrillic_EL Л CYRILLIC CAPITAL LETTER EL */
1078 { 0x06ed, 0x041c }, /* Cyrillic_EM М CYRILLIC CAPITAL LETTER EM */
1079 { 0x06ee, 0x041d }, /* Cyrillic_EN Н CYRILLIC CAPITAL LETTER EN */
1080 { 0x06ef, 0x041e }, /* Cyrillic_O О CYRILLIC CAPITAL LETTER O */
1081 { 0x06f0, 0x041f }, /* Cyrillic_PE П CYRILLIC CAPITAL LETTER PE */
1082 { 0x06f2, 0x0420 }, /* Cyrillic_ER Р CYRILLIC CAPITAL LETTER ER */
1083 { 0x06f3, 0x0421 }, /* Cyrillic_ES С CYRILLIC CAPITAL LETTER ES */
1084 { 0x06f4, 0x0422 }, /* Cyrillic_TE Т CYRILLIC CAPITAL LETTER TE */
1085 { 0x06f5, 0x0423 }, /* Cyrillic_U У CYRILLIC CAPITAL LETTER U */
1086 { 0x06e6, 0x0424 }, /* Cyrillic_EF Ф CYRILLIC CAPITAL LETTER EF */
1087 { 0x06e8, 0x0425 }, /* Cyrillic_HA Х CYRILLIC CAPITAL LETTER HA */
1088 { 0x06e3, 0x0426 }, /* Cyrillic_TSE Ц CYRILLIC CAPITAL LETTER TSE */
1089 { 0x06fe, 0x0427 }, /* Cyrillic_CHE Ч CYRILLIC CAPITAL LETTER CHE */
1090 { 0x06fb, 0x0428 }, /* Cyrillic_SHA Ш CYRILLIC CAPITAL LETTER SHA */
1091 { 0x06fd, 0x0429 }, /* Cyrillic_SHCHA Щ CYRILLIC CAPITAL LETTER SHCHA */
1092 { 0x06ff, 0x042a }, /* Cyrillic_HARDSIGN Ъ CYRILLIC CAPITAL LETTER HARD SIGN */
1093 { 0x06f9, 0x042b }, /* Cyrillic_YERU Ы CYRILLIC CAPITAL LETTER YERU */
1094 { 0x06f8, 0x042c }, /* Cyrillic_SOFTSIGN Ь CYRILLIC CAPITAL LETTER SOFT SIGN */
1095 { 0x06fc, 0x042d }, /* Cyrillic_E Э CYRILLIC CAPITAL LETTER E */
1096 { 0x06e0, 0x042e }, /* Cyrillic_YU Ю CYRILLIC CAPITAL LETTER YU */
1097 { 0x06f1, 0x042f }, /* Cyrillic_YA Я CYRILLIC CAPITAL LETTER YA */
1098 { 0x06c1, 0x0430 }, /* Cyrillic_a а CYRILLIC SMALL LETTER A */
1099 { 0x06c2, 0x0431 }, /* Cyrillic_be б CYRILLIC SMALL LETTER BE */
1100 { 0x06d7, 0x0432 }, /* Cyrillic_ve в CYRILLIC SMALL LETTER VE */
1101 { 0x06c7, 0x0433 }, /* Cyrillic_ghe г CYRILLIC SMALL LETTER GHE */
1102 { 0x06c4, 0x0434 }, /* Cyrillic_de д CYRILLIC SMALL LETTER DE */
1103 { 0x06c5, 0x0435 }, /* Cyrillic_ie е CYRILLIC SMALL LETTER IE */
1104 { 0x06d6, 0x0436 }, /* Cyrillic_zhe ж CYRILLIC SMALL LETTER ZHE */
1105 { 0x06da, 0x0437 }, /* Cyrillic_ze з CYRILLIC SMALL LETTER ZE */
1106 { 0x06c9, 0x0438 }, /* Cyrillic_i и CYRILLIC SMALL LETTER I */
1107 { 0x06ca, 0x0439 }, /* Cyrillic_shorti й CYRILLIC SMALL LETTER SHORT I */
1108 { 0x06cb, 0x043a }, /* Cyrillic_ka к CYRILLIC SMALL LETTER KA */
1109 { 0x06cc, 0x043b }, /* Cyrillic_el л CYRILLIC SMALL LETTER EL */
1110 { 0x06cd, 0x043c }, /* Cyrillic_em м CYRILLIC SMALL LETTER EM */
1111 { 0x06ce, 0x043d }, /* Cyrillic_en н CYRILLIC SMALL LETTER EN */
1112 { 0x06cf, 0x043e }, /* Cyrillic_o о CYRILLIC SMALL LETTER O */
1113 { 0x06d0, 0x043f }, /* Cyrillic_pe п CYRILLIC SMALL LETTER PE */
1114 { 0x06d2, 0x0440 }, /* Cyrillic_er р CYRILLIC SMALL LETTER ER */
1115 { 0x06d3, 0x0441 }, /* Cyrillic_es с CYRILLIC SMALL LETTER ES */
1116 { 0x06d4, 0x0442 }, /* Cyrillic_te т CYRILLIC SMALL LETTER TE */
1117 { 0x06d5, 0x0443 }, /* Cyrillic_u у CYRILLIC SMALL LETTER U */
1118 { 0x06c6, 0x0444 }, /* Cyrillic_ef ф CYRILLIC SMALL LETTER EF */
1119 { 0x06c8, 0x0445 }, /* Cyrillic_ha х CYRILLIC SMALL LETTER HA */
1120 { 0x06c3, 0x0446 }, /* Cyrillic_tse ц CYRILLIC SMALL LETTER TSE */
1121 { 0x06de, 0x0447 }, /* Cyrillic_che ч CYRILLIC SMALL LETTER CHE */
1122 { 0x06db, 0x0448 }, /* Cyrillic_sha ш CYRILLIC SMALL LETTER SHA */
1123 { 0x06dd, 0x0449 }, /* Cyrillic_shcha щ CYRILLIC SMALL LETTER SHCHA */
1124 { 0x06df, 0x044a }, /* Cyrillic_hardsign ъ CYRILLIC SMALL LETTER HARD SIGN */
1125 { 0x06d9, 0x044b }, /* Cyrillic_yeru ы CYRILLIC SMALL LETTER YERU */
1126 { 0x06d8, 0x044c }, /* Cyrillic_softsign ь CYRILLIC SMALL LETTER SOFT SIGN */
1127 { 0x06dc, 0x044d }, /* Cyrillic_e э CYRILLIC SMALL LETTER E */
1128 { 0x06c0, 0x044e }, /* Cyrillic_yu ю CYRILLIC SMALL LETTER YU */
1129 { 0x06d1, 0x044f }, /* Cyrillic_ya я CYRILLIC SMALL LETTER YA */
1130 { 0x06a3, 0x0451 }, /* Cyrillic_io ё CYRILLIC SMALL LETTER IO */
1131 { 0x06a1, 0x0452 }, /* Serbian_dje ђ CYRILLIC SMALL LETTER DJE */
1132 { 0x06a2, 0x0453 }, /* Macedonia_gje ѓ CYRILLIC SMALL LETTER GJE */
1133 { 0x06a4, 0x0454 }, /* Ukrainian_ie є CYRILLIC SMALL LETTER UKRAINIAN IE */
1134 { 0x06a5, 0x0455 }, /* Macedonia_dse ѕ CYRILLIC SMALL LETTER DZE */
1135 { 0x06a6, 0x0456 }, /* Ukrainian_i і CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */
1136 { 0x06a7, 0x0457 }, /* Ukrainian_yi ї CYRILLIC SMALL LETTER YI */
1137 { 0x06a8, 0x0458 }, /* Cyrillic_je ј CYRILLIC SMALL LETTER JE */
1138 { 0x06a9, 0x0459 }, /* Cyrillic_lje љ CYRILLIC SMALL LETTER LJE */
1139 { 0x06aa, 0x045a }, /* Cyrillic_nje њ CYRILLIC SMALL LETTER NJE */
1140 { 0x06ab, 0x045b }, /* Serbian_tshe ћ CYRILLIC SMALL LETTER TSHE */
1141 { 0x06ac, 0x045c }, /* Macedonia_kje ќ CYRILLIC SMALL LETTER KJE */
1142 { 0x06ae, 0x045e }, /* Byelorussian_shortu ў CYRILLIC SMALL LETTER SHORT U */
1143 { 0x06af, 0x045f }, /* Cyrillic_dzhe џ CYRILLIC SMALL LETTER DZHE */
1144 { 0x0ce0, 0x05d0 }, /* hebrew_aleph א HEBREW LETTER ALEF */
1145 { 0x0ce1, 0x05d1 }, /* hebrew_bet ב HEBREW LETTER BET */
1146 { 0x0ce2, 0x05d2 }, /* hebrew_gimel ג HEBREW LETTER GIMEL */
1147 { 0x0ce3, 0x05d3 }, /* hebrew_dalet ד HEBREW LETTER DALET */
1148 { 0x0ce4, 0x05d4 }, /* hebrew_he ה HEBREW LETTER HE */
1149 { 0x0ce5, 0x05d5 }, /* hebrew_waw ו HEBREW LETTER VAV */
1150 { 0x0ce6, 0x05d6 }, /* hebrew_zain ז HEBREW LETTER ZAYIN */
1151 { 0x0ce7, 0x05d7 }, /* hebrew_chet ח HEBREW LETTER HET */
1152 { 0x0ce8, 0x05d8 }, /* hebrew_tet ט HEBREW LETTER TET */
1153 { 0x0ce9, 0x05d9 }, /* hebrew_yod י HEBREW LETTER YOD */
1154 { 0x0cea, 0x05da }, /* hebrew_finalkaph ך HEBREW LETTER FINAL KAF */
1155 { 0x0ceb, 0x05db }, /* hebrew_kaph כ HEBREW LETTER KAF */
1156 { 0x0cec, 0x05dc }, /* hebrew_lamed ל HEBREW LETTER LAMED */
1157 { 0x0ced, 0x05dd }, /* hebrew_finalmem ם HEBREW LETTER FINAL MEM */
1158 { 0x0cee, 0x05de }, /* hebrew_mem מ HEBREW LETTER MEM */
1159 { 0x0cef, 0x05df }, /* hebrew_finalnun ן HEBREW LETTER FINAL NUN */
1160 { 0x0cf0, 0x05e0 }, /* hebrew_nun נ HEBREW LETTER NUN */
1161 { 0x0cf1, 0x05e1 }, /* hebrew_samech ס HEBREW LETTER SAMEKH */
1162 { 0x0cf2, 0x05e2 }, /* hebrew_ayin ע HEBREW LETTER AYIN */
1163 { 0x0cf3, 0x05e3 }, /* hebrew_finalpe ף HEBREW LETTER FINAL PE */
1164 { 0x0cf4, 0x05e4 }, /* hebrew_pe פ HEBREW LETTER PE */
1165 { 0x0cf5, 0x05e5 }, /* hebrew_finalzade ץ HEBREW LETTER FINAL TSADI */
1166 { 0x0cf6, 0x05e6 }, /* hebrew_zade צ HEBREW LETTER TSADI */
1167 { 0x0cf7, 0x05e7 }, /* hebrew_qoph ק HEBREW LETTER QOF */
1168 { 0x0cf8, 0x05e8 }, /* hebrew_resh ר HEBREW LETTER RESH */
1169 { 0x0cf9, 0x05e9 }, /* hebrew_shin ש HEBREW LETTER SHIN */
1170 { 0x0cfa, 0x05ea }, /* hebrew_taw ת HEBREW LETTER TAV */
1171 { 0x05ac, 0x060c }, /* Arabic_comma ، ARABIC COMMA */
1172 { 0x05bb, 0x061b }, /* Arabic_semicolon ؛ ARABIC SEMICOLON */
1173 { 0x05bf, 0x061f }, /* Arabic_question_mark ؟ ARABIC QUESTION MARK */
1174 { 0x05c1, 0x0621 }, /* Arabic_hamza ء ARABIC LETTER HAMZA */
1175 { 0x05c2, 0x0622 }, /* Arabic_maddaonalef آ ARABIC LETTER ALEF WITH MADDA ABOVE */
1176 { 0x05c3, 0x0623 }, /* Arabic_hamzaonalef أ ARABIC LETTER ALEF WITH HAMZA ABOVE */
1177 { 0x05c4, 0x0624 }, /* Arabic_hamzaonwaw ؤ ARABIC LETTER WAW WITH HAMZA ABOVE */
1178 { 0x05c5, 0x0625 }, /* Arabic_hamzaunderalef إ ARABIC LETTER ALEF WITH HAMZA BELOW */
1179 { 0x05c6, 0x0626 }, /* Arabic_hamzaonyeh ئ ARABIC LETTER YEH WITH HAMZA ABOVE */
1180 { 0x05c7, 0x0627 }, /* Arabic_alef ا ARABIC LETTER ALEF */
1181 { 0x05c8, 0x0628 }, /* Arabic_beh ب ARABIC LETTER BEH */
1182 { 0x05c9, 0x0629 }, /* Arabic_tehmarbuta ة ARABIC LETTER TEH MARBUTA */
1183 { 0x05ca, 0x062a }, /* Arabic_teh ت ARABIC LETTER TEH */
1184 { 0x05cb, 0x062b }, /* Arabic_theh ث ARABIC LETTER THEH */
1185 { 0x05cc, 0x062c }, /* Arabic_jeem ج ARABIC LETTER JEEM */
1186 { 0x05cd, 0x062d }, /* Arabic_hah ح ARABIC LETTER HAH */
1187 { 0x05ce, 0x062e }, /* Arabic_khah خ ARABIC LETTER KHAH */
1188 { 0x05cf, 0x062f }, /* Arabic_dal د ARABIC LETTER DAL */
1189 { 0x05d0, 0x0630 }, /* Arabic_thal ذ ARABIC LETTER THAL */
1190 { 0x05d1, 0x0631 }, /* Arabic_ra ر ARABIC LETTER REH */
1191 { 0x05d2, 0x0632 }, /* Arabic_zain ز ARABIC LETTER ZAIN */
1192 { 0x05d3, 0x0633 }, /* Arabic_seen س ARABIC LETTER SEEN */
1193 { 0x05d4, 0x0634 }, /* Arabic_sheen ش ARABIC LETTER SHEEN */
1194 { 0x05d5, 0x0635 }, /* Arabic_sad ص ARABIC LETTER SAD */
1195 { 0x05d6, 0x0636 }, /* Arabic_dad ض ARABIC LETTER DAD */
1196 { 0x05d7, 0x0637 }, /* Arabic_tah ط ARABIC LETTER TAH */
1197 { 0x05d8, 0x0638 }, /* Arabic_zah ظ ARABIC LETTER ZAH */
1198 { 0x05d9, 0x0639 }, /* Arabic_ain ع ARABIC LETTER AIN */
1199 { 0x05da, 0x063a }, /* Arabic_ghain غ ARABIC LETTER GHAIN */
1200 { 0x05e0, 0x0640 }, /* Arabic_tatweel ـ ARABIC TATWEEL */
1201 { 0x05e1, 0x0641 }, /* Arabic_feh ف ARABIC LETTER FEH */
1202 { 0x05e2, 0x0642 }, /* Arabic_qaf ق ARABIC LETTER QAF */
1203 { 0x05e3, 0x0643 }, /* Arabic_kaf ك ARABIC LETTER KAF */
1204 { 0x05e4, 0x0644 }, /* Arabic_lam ل ARABIC LETTER LAM */
1205 { 0x05e5, 0x0645 }, /* Arabic_meem م ARABIC LETTER MEEM */
1206 { 0x05e6, 0x0646 }, /* Arabic_noon ن ARABIC LETTER NOON */
1207 { 0x05e7, 0x0647 }, /* Arabic_ha ه ARABIC LETTER HEH */
1208 { 0x05e8, 0x0648 }, /* Arabic_waw و ARABIC LETTER WAW */
1209 { 0x05e9, 0x0649 }, /* Arabic_alefmaksura ى ARABIC LETTER ALEF MAKSURA */
1210 { 0x05ea, 0x064a }, /* Arabic_yeh ي ARABIC LETTER YEH */
1211 { 0x05eb, 0x064b }, /* Arabic_fathatan ً ARABIC FATHATAN */
1212 { 0x05ec, 0x064c }, /* Arabic_dammatan ٌ ARABIC DAMMATAN */
1213 { 0x05ed, 0x064d }, /* Arabic_kasratan ٍ ARABIC KASRATAN */
1214 { 0x05ee, 0x064e }, /* Arabic_fatha َ ARABIC FATHA */
1215 { 0x05ef, 0x064f }, /* Arabic_damma ُ ARABIC DAMMA */
1216 { 0x05f0, 0x0650 }, /* Arabic_kasra ِ ARABIC KASRA */
1217 { 0x05f1, 0x0651 }, /* Arabic_shadda ّ ARABIC SHADDA */
1218 { 0x05f2, 0x0652 }, /* Arabic_sukun ْ ARABIC SUKUN */
1219 { 0x0da1, 0x0e01 }, /* Thai_kokai ก THAI CHARACTER KO KAI */
1220 { 0x0da2, 0x0e02 }, /* Thai_khokhai ข THAI CHARACTER KHO KHAI */
1221 { 0x0da3, 0x0e03 }, /* Thai_khokhuat ฃ THAI CHARACTER KHO KHUAT */
1222 { 0x0da4, 0x0e04 }, /* Thai_khokhwai ค THAI CHARACTER KHO KHWAI */
1223 { 0x0da5, 0x0e05 }, /* Thai_khokhon ฅ THAI CHARACTER KHO KHON */
1224 { 0x0da6, 0x0e06 }, /* Thai_khorakhang ฆ THAI CHARACTER KHO RAKHANG */
1225 { 0x0da7, 0x0e07 }, /* Thai_ngongu ง THAI CHARACTER NGO NGU */
1226 { 0x0da8, 0x0e08 }, /* Thai_chochan จ THAI CHARACTER CHO CHAN */
1227 { 0x0da9, 0x0e09 }, /* Thai_choching ฉ THAI CHARACTER CHO CHING */
1228 { 0x0daa, 0x0e0a }, /* Thai_chochang ช THAI CHARACTER CHO CHANG */
1229 { 0x0dab, 0x0e0b }, /* Thai_soso ซ THAI CHARACTER SO SO */
1230 { 0x0dac, 0x0e0c }, /* Thai_chochoe ฌ THAI CHARACTER CHO CHOE */
1231 { 0x0dad, 0x0e0d }, /* Thai_yoying ญ THAI CHARACTER YO YING */
1232 { 0x0dae, 0x0e0e }, /* Thai_dochada ฎ THAI CHARACTER DO CHADA */
1233 { 0x0daf, 0x0e0f }, /* Thai_topatak ฏ THAI CHARACTER TO PATAK */
1234 { 0x0db0, 0x0e10 }, /* Thai_thothan ฐ THAI CHARACTER THO THAN */
1235 { 0x0db1, 0x0e11 }, /* Thai_thonangmontho ฑ THAI CHARACTER THO NANGMONTHO */
1236 { 0x0db2, 0x0e12 }, /* Thai_thophuthao ฒ THAI CHARACTER THO PHUTHAO */
1237 { 0x0db3, 0x0e13 }, /* Thai_nonen ณ THAI CHARACTER NO NEN */
1238 { 0x0db4, 0x0e14 }, /* Thai_dodek ด THAI CHARACTER DO DEK */
1239 { 0x0db5, 0x0e15 }, /* Thai_totao ต THAI CHARACTER TO TAO */
1240 { 0x0db6, 0x0e16 }, /* Thai_thothung ถ THAI CHARACTER THO THUNG */
1241 { 0x0db7, 0x0e17 }, /* Thai_thothahan ท THAI CHARACTER THO THAHAN */
1242 { 0x0db8, 0x0e18 }, /* Thai_thothong ธ THAI CHARACTER THO THONG */
1243 { 0x0db9, 0x0e19 }, /* Thai_nonu น THAI CHARACTER NO NU */
1244 { 0x0dba, 0x0e1a }, /* Thai_bobaimai บ THAI CHARACTER BO BAIMAI */
1245 { 0x0dbb, 0x0e1b }, /* Thai_popla ป THAI CHARACTER PO PLA */
1246 { 0x0dbc, 0x0e1c }, /* Thai_phophung ผ THAI CHARACTER PHO PHUNG */
1247 { 0x0dbd, 0x0e1d }, /* Thai_fofa ฝ THAI CHARACTER FO FA */
1248 { 0x0dbe, 0x0e1e }, /* Thai_phophan พ THAI CHARACTER PHO PHAN */
1249 { 0x0dbf, 0x0e1f }, /* Thai_fofan ฟ THAI CHARACTER FO FAN */
1250 { 0x0dc0, 0x0e20 }, /* Thai_phosamphao ภ THAI CHARACTER PHO SAMPHAO */
1251 { 0x0dc1, 0x0e21 }, /* Thai_moma ม THAI CHARACTER MO MA */
1252 { 0x0dc2, 0x0e22 }, /* Thai_yoyak ย THAI CHARACTER YO YAK */
1253 { 0x0dc3, 0x0e23 }, /* Thai_rorua ร THAI CHARACTER RO RUA */
1254 { 0x0dc4, 0x0e24 }, /* Thai_ru ฤ THAI CHARACTER RU */
1255 { 0x0dc5, 0x0e25 }, /* Thai_loling ล THAI CHARACTER LO LING */
1256 { 0x0dc6, 0x0e26 }, /* Thai_lu ฦ THAI CHARACTER LU */
1257 { 0x0dc7, 0x0e27 }, /* Thai_wowaen ว THAI CHARACTER WO WAEN */
1258 { 0x0dc8, 0x0e28 }, /* Thai_sosala ศ THAI CHARACTER SO SALA */
1259 { 0x0dc9, 0x0e29 }, /* Thai_sorusi ษ THAI CHARACTER SO RUSI */
1260 { 0x0dca, 0x0e2a }, /* Thai_sosua ส THAI CHARACTER SO SUA */
1261 { 0x0dcb, 0x0e2b }, /* Thai_hohip ห THAI CHARACTER HO HIP */
1262 { 0x0dcc, 0x0e2c }, /* Thai_lochula ฬ THAI CHARACTER LO CHULA */
1263 { 0x0dcd, 0x0e2d }, /* Thai_oang อ THAI CHARACTER O ANG */
1264 { 0x0dce, 0x0e2e }, /* Thai_honokhuk ฮ THAI CHARACTER HO NOKHUK */
1265 { 0x0dcf, 0x0e2f }, /* Thai_paiyannoi ฯ THAI CHARACTER PAIYANNOI */
1266 { 0x0dd0, 0x0e30 }, /* Thai_saraa ะ THAI CHARACTER SARA A */
1267 { 0x0dd1, 0x0e31 }, /* Thai_maihanakat ั THAI CHARACTER MAI HAN-AKAT */
1268 { 0x0dd2, 0x0e32 }, /* Thai_saraaa า THAI CHARACTER SARA AA */
1269 { 0x0dd3, 0x0e33 }, /* Thai_saraam ำ THAI CHARACTER SARA AM */
1270 { 0x0dd4, 0x0e34 }, /* Thai_sarai ิ THAI CHARACTER SARA I */
1271 { 0x0dd5, 0x0e35 }, /* Thai_saraii ี THAI CHARACTER SARA II */
1272 { 0x0dd6, 0x0e36 }, /* Thai_saraue ึ THAI CHARACTER SARA UE */
1273 { 0x0dd7, 0x0e37 }, /* Thai_sarauee ื THAI CHARACTER SARA UEE */
1274 { 0x0dd8, 0x0e38 }, /* Thai_sarau ุ THAI CHARACTER SARA U */
1275 { 0x0dd9, 0x0e39 }, /* Thai_sarauu ู THAI CHARACTER SARA UU */
1276 { 0x0dda, 0x0e3a }, /* Thai_phinthu ฺ THAI CHARACTER PHINTHU */
1277 { 0x0ddf, 0x0e3f }, /* Thai_baht ฿ THAI CURRENCY SYMBOL BAHT */
1278 { 0x0de0, 0x0e40 }, /* Thai_sarae เ THAI CHARACTER SARA E */
1279 { 0x0de1, 0x0e41 }, /* Thai_saraae แ THAI CHARACTER SARA AE */
1280 { 0x0de2, 0x0e42 }, /* Thai_sarao โ THAI CHARACTER SARA O */
1281 { 0x0de3, 0x0e43 }, /* Thai_saraaimaimuan ใ THAI CHARACTER SARA AI MAIMUAN */
1282 { 0x0de4, 0x0e44 }, /* Thai_saraaimaimalai ไ THAI CHARACTER SARA AI MAIMALAI */
1283 { 0x0de5, 0x0e45 }, /* Thai_lakkhangyao ๅ THAI CHARACTER LAKKHANGYAO */
1284 { 0x0de6, 0x0e46 }, /* Thai_maiyamok ๆ THAI CHARACTER MAIYAMOK */
1285 { 0x0de7, 0x0e47 }, /* Thai_maitaikhu ็ THAI CHARACTER MAITAIKHU */
1286 { 0x0de8, 0x0e48 }, /* Thai_maiek ่ THAI CHARACTER MAI EK */
1287 { 0x0de9, 0x0e49 }, /* Thai_maitho ้ THAI CHARACTER MAI THO */
1288 { 0x0dea, 0x0e4a }, /* Thai_maitri ๊ THAI CHARACTER MAI TRI */
1289 { 0x0deb, 0x0e4b }, /* Thai_maichattawa ๋ THAI CHARACTER MAI CHATTAWA */
1290 { 0x0dec, 0x0e4c }, /* Thai_thanthakhat ์ THAI CHARACTER THANTHAKHAT */
1291 { 0x0ded, 0x0e4d }, /* Thai_nikhahit ํ THAI CHARACTER NIKHAHIT */
1292 { 0x0df0, 0x0e50 }, /* Thai_leksun ๐ THAI DIGIT ZERO */
1293 { 0x0df1, 0x0e51 }, /* Thai_leknung ๑ THAI DIGIT ONE */
1294 { 0x0df2, 0x0e52 }, /* Thai_leksong ๒ THAI DIGIT TWO */
1295 { 0x0df3, 0x0e53 }, /* Thai_leksam ๓ THAI DIGIT THREE */
1296 { 0x0df4, 0x0e54 }, /* Thai_leksi ๔ THAI DIGIT FOUR */
1297 { 0x0df5, 0x0e55 }, /* Thai_lekha ๕ THAI DIGIT FIVE */
1298 { 0x0df6, 0x0e56 }, /* Thai_lekhok ๖ THAI DIGIT SIX */
1299 { 0x0df7, 0x0e57 }, /* Thai_lekchet ๗ THAI DIGIT SEVEN */
1300 { 0x0df8, 0x0e58 }, /* Thai_lekpaet ๘ THAI DIGIT EIGHT */
1301 { 0x0df9, 0x0e59 }, /* Thai_lekkao ๙ THAI DIGIT NINE */
1302 { 0x0ed4, 0x11a8 }, /* Hangul_J_Kiyeog ᆨ HANGUL JONGSEONG KIYEOK */
1303 { 0x0ed5, 0x11a9 }, /* Hangul_J_SsangKiyeog ᆩ HANGUL JONGSEONG SSANGKIYEOK */
1304 { 0x0ed6, 0x11aa }, /* Hangul_J_KiyeogSios ᆪ HANGUL JONGSEONG KIYEOK-SIOS */
1305 { 0x0ed7, 0x11ab }, /* Hangul_J_Nieun ᆫ HANGUL JONGSEONG NIEUN */
1306 { 0x0ed8, 0x11ac }, /* Hangul_J_NieunJieuj ᆬ HANGUL JONGSEONG NIEUN-CIEUC */
1307 { 0x0ed9, 0x11ad }, /* Hangul_J_NieunHieuh ᆭ HANGUL JONGSEONG NIEUN-HIEUH */
1308 { 0x0eda, 0x11ae }, /* Hangul_J_Dikeud ᆮ HANGUL JONGSEONG TIKEUT */
1309 { 0x0edb, 0x11af }, /* Hangul_J_Rieul ᆯ HANGUL JONGSEONG RIEUL */
1310 { 0x0edc, 0x11b0 }, /* Hangul_J_RieulKiyeog ᆰ HANGUL JONGSEONG RIEUL-KIYEOK */
1311 { 0x0edd, 0x11b1 }, /* Hangul_J_RieulMieum ᆱ HANGUL JONGSEONG RIEUL-MIEUM */
1312 { 0x0ede, 0x11b2 }, /* Hangul_J_RieulPieub ᆲ HANGUL JONGSEONG RIEUL-PIEUP */
1313 { 0x0edf, 0x11b3 }, /* Hangul_J_RieulSios ᆳ HANGUL JONGSEONG RIEUL-SIOS */
1314 { 0x0ee0, 0x11b4 }, /* Hangul_J_RieulTieut ᆴ HANGUL JONGSEONG RIEUL-THIEUTH */
1315 { 0x0ee1, 0x11b5 }, /* Hangul_J_RieulPhieuf ᆵ HANGUL JONGSEONG RIEUL-PHIEUPH */
1316 { 0x0ee2, 0x11b6 }, /* Hangul_J_RieulHieuh ᆶ HANGUL JONGSEONG RIEUL-HIEUH */
1317 { 0x0ee3, 0x11b7 }, /* Hangul_J_Mieum ᆷ HANGUL JONGSEONG MIEUM */
1318 { 0x0ee4, 0x11b8 }, /* Hangul_J_Pieub ᆸ HANGUL JONGSEONG PIEUP */
1319 { 0x0ee5, 0x11b9 }, /* Hangul_J_PieubSios ᆹ HANGUL JONGSEONG PIEUP-SIOS */
1320 { 0x0ee6, 0x11ba }, /* Hangul_J_Sios ᆺ HANGUL JONGSEONG SIOS */
1321 { 0x0ee7, 0x11bb }, /* Hangul_J_SsangSios ᆻ HANGUL JONGSEONG SSANGSIOS */
1322 { 0x0ee8, 0x11bc }, /* Hangul_J_Ieung ᆼ HANGUL JONGSEONG IEUNG */
1323 { 0x0ee9, 0x11bd }, /* Hangul_J_Jieuj ᆽ HANGUL JONGSEONG CIEUC */
1324 { 0x0eea, 0x11be }, /* Hangul_J_Cieuc ᆾ HANGUL JONGSEONG CHIEUCH */
1325 { 0x0eeb, 0x11bf }, /* Hangul_J_Khieuq ᆿ HANGUL JONGSEONG KHIEUKH */
1326 { 0x0eec, 0x11c0 }, /* Hangul_J_Tieut ᇀ HANGUL JONGSEONG THIEUTH */
1327 { 0x0eed, 0x11c1 }, /* Hangul_J_Phieuf ᇁ HANGUL JONGSEONG PHIEUPH */
1328 { 0x0eee, 0x11c2 }, /* Hangul_J_Hieuh ᇂ HANGUL JONGSEONG HIEUH */
1329 { 0x0ef8, 0x11eb }, /* Hangul_J_PanSios ᇫ HANGUL JONGSEONG PANSIOS */
1330 { 0x0efa, 0x11f9 }, /* Hangul_J_YeorinHieuh ᇹ HANGUL JONGSEONG YEORINHIEUH */
1331 { 0x0aa2, 0x2002 }, /* enspace   EN SPACE */
1332 { 0x0aa1, 0x2003 }, /* emspace   EM SPACE */
1333 { 0x0aa3, 0x2004 }, /* em3space   THREE-PER-EM SPACE */
1334 { 0x0aa4, 0x2005 }, /* em4space   FOUR-PER-EM SPACE */
1335 { 0x0aa5, 0x2007 }, /* digitspace   FIGURE SPACE */
1336 { 0x0aa6, 0x2008 }, /* punctspace   PUNCTUATION SPACE */
1337 { 0x0aa7, 0x2009 }, /* thinspace   THIN SPACE */
1338 { 0x0aa8, 0x200a }, /* hairspace   HAIR SPACE */
1339 { 0x0abb, 0x2012 }, /* figdash ‒ FIGURE DASH */
1340 { 0x0aaa, 0x2013 }, /* endash – EN DASH */
1341 { 0x0aa9, 0x2014 }, /* emdash — EM DASH */
1342 { 0x07af, 0x2015 }, /* Greek_horizbar ― HORIZONTAL BAR */
1343 { 0x0cdf, 0x2017 }, /* hebrew_doublelowline ‗ DOUBLE LOW LINE */
1344 { 0x0ad0, 0x2018 }, /* leftsinglequotemark ‘ LEFT SINGLE QUOTATION MARK */
1345 { 0x0ad1, 0x2019 }, /* rightsinglequotemark ’ RIGHT SINGLE QUOTATION MARK */
1346 { 0x0afd, 0x201a }, /* singlelowquotemark ‚ SINGLE LOW-9 QUOTATION MARK */
1347 { 0x0ad2, 0x201c }, /* leftdoublequotemark “ LEFT DOUBLE QUOTATION MARK */
1348 { 0x0ad3, 0x201d }, /* rightdoublequotemark ” RIGHT DOUBLE QUOTATION MARK */
1349 { 0x0afe, 0x201e }, /* doublelowquotemark „ DOUBLE LOW-9 QUOTATION MARK */
1350 { 0x0af1, 0x2020 }, /* dagger † DAGGER */
1351 { 0x0af2, 0x2021 }, /* doubledagger ‡ DOUBLE DAGGER */
1352 { 0x0ae6, 0x2022 }, /* enfilledcircbullet • BULLET */
1353 { 0x0aae, 0x2026 }, /* ellipsis … HORIZONTAL ELLIPSIS */
1354 { 0x0ad6, 0x2032 }, /* minutes ′ PRIME */
1355 { 0x0ad7, 0x2033 }, /* seconds ″ DOUBLE PRIME */
1356 { 0x0afc, 0x2038 }, /* caret ‸ CARET */
1357 { 0x047e, 0x203e }, /* overline ‾ OVERLINE */
1358 { 0x20a0, 0x20a0 }, /* EcuSign ₠ EURO-CURRENCY SIGN */
1359 { 0x20a1, 0x20a1 }, /* ColonSign ₡ COLON SIGN */
1360 { 0x20a2, 0x20a2 }, /* CruzeiroSign ₢ CRUZEIRO SIGN */
1361 { 0x20a3, 0x20a3 }, /* FFrancSign ₣ FRENCH FRANC SIGN */
1362 { 0x20a4, 0x20a4 }, /* LiraSign ₤ LIRA SIGN */
1363 { 0x20a5, 0x20a5 }, /* MillSign ₥ MILL SIGN */
1364 { 0x20a6, 0x20a6 }, /* NairaSign ₦ NAIRA SIGN */
1365 { 0x20a7, 0x20a7 }, /* PesetaSign ₧ PESETA SIGN */
1366 { 0x20a8, 0x20a8 }, /* RupeeSign ₨ RUPEE SIGN */
1367 { 0x0eff, 0x20a9 }, /* Korean_Won ₩ WON SIGN */
1368 { 0x20a9, 0x20a9 }, /* WonSign ₩ WON SIGN */
1369 { 0x20aa, 0x20aa }, /* NewSheqelSign ₪ NEW SHEQEL SIGN */
1370 { 0x20ab, 0x20ab }, /* DongSign ₫ DONG SIGN */
1371 { 0x20ac, 0x20ac }, /* EuroSign € EURO SIGN */
1372 { 0x0ab8, 0x2105 }, /* careof ℅ CARE OF */
1373 { 0x06b0, 0x2116 }, /* numerosign № NUMERO SIGN */
1374 { 0x0afb, 0x2117 }, /* phonographcopyright ℗ SOUND RECORDING COPYRIGHT */
1375 { 0x0ad4, 0x211e }, /* prescription ℞ PRESCRIPTION TAKE */
1376 { 0x0ac9, 0x2122 }, /* trademark ™ TRADE MARK SIGN */
1377 { 0x0ab0, 0x2153 }, /* onethird ⅓ VULGAR FRACTION ONE THIRD */
1378 { 0x0ab1, 0x2154 }, /* twothirds ⅔ VULGAR FRACTION TWO THIRDS */
1379 { 0x0ab2, 0x2155 }, /* onefifth ⅕ VULGAR FRACTION ONE FIFTH */
1380 { 0x0ab3, 0x2156 }, /* twofifths ⅖ VULGAR FRACTION TWO FIFTHS */
1381 { 0x0ab4, 0x2157 }, /* threefifths ⅗ VULGAR FRACTION THREE FIFTHS */
1382 { 0x0ab5, 0x2158 }, /* fourfifths ⅘ VULGAR FRACTION FOUR FIFTHS */
1383 { 0x0ab6, 0x2159 }, /* onesixth ⅙ VULGAR FRACTION ONE SIXTH */
1384 { 0x0ab7, 0x215a }, /* fivesixths ⅚ VULGAR FRACTION FIVE SIXTHS */
1385 { 0x0ac3, 0x215b }, /* oneeighth ⅛ VULGAR FRACTION ONE EIGHTH */
1386 { 0x0ac4, 0x215c }, /* threeeighths ⅜ VULGAR FRACTION THREE EIGHTHS */
1387 { 0x0ac5, 0x215d }, /* fiveeighths ⅝ VULGAR FRACTION FIVE EIGHTHS */
1388 { 0x0ac6, 0x215e }, /* seveneighths ⅞ VULGAR FRACTION SEVEN EIGHTHS */
1389 { 0x08fb, 0x2190 }, /* leftarrow ← LEFTWARDS ARROW */
1390 { 0x08fc, 0x2191 }, /* uparrow ↑ UPWARDS ARROW */
1391 { 0x08fd, 0x2192 }, /* rightarrow → RIGHTWARDS ARROW */
1392 { 0x08fe, 0x2193 }, /* downarrow ↓ DOWNWARDS ARROW */
1393 { 0x08ce, 0x21d2 }, /* implies ⇒ RIGHTWARDS DOUBLE ARROW */
1394 { 0x08cd, 0x21d4 }, /* ifonlyif ⇔ LEFT RIGHT DOUBLE ARROW */
1395 { 0x08ef, 0x2202 }, /* partialderivative ∂ PARTIAL DIFFERENTIAL */
1396 { 0x08c5, 0x2207 }, /* nabla ∇ NABLA */
1397 { 0x0bca, 0x2218 }, /* jot ∘ RING OPERATOR */
1398 { 0x08d6, 0x221a }, /* radical √ SQUARE ROOT */
1399 { 0x08c1, 0x221d }, /* variation ∝ PROPORTIONAL TO */
1400 { 0x08c2, 0x221e }, /* infinity ∞ INFINITY */
1401 { 0x08de, 0x2227 }, /* logicaland ∧ LOGICAL AND */
1402 { 0x0ba9, 0x2227 }, /* upcaret ∧ LOGICAL AND */
1403 { 0x08df, 0x2228 }, /* logicalor ∨ LOGICAL OR */
1404 { 0x0ba8, 0x2228 }, /* downcaret ∨ LOGICAL OR */
1405 { 0x08dc, 0x2229 }, /* intersection ∩ INTERSECTION */
1406 { 0x0bc3, 0x2229 }, /* upshoe ∩ INTERSECTION */
1407 { 0x08dd, 0x222a }, /* union ∪ UNION */
1408 { 0x0bd6, 0x222a }, /* downshoe ∪ UNION */
1409 { 0x08bf, 0x222b }, /* integral ∫ INTEGRAL */
1410 { 0x08c0, 0x2234 }, /* therefore ∴ THEREFORE */
1411 { 0x08c8, 0x2245 }, /* approximate ≅ APPROXIMATELY EQUAL TO */
1412 { 0x08bd, 0x2260 }, /* notequal ≠ NOT EQUAL TO */
1413 { 0x08cf, 0x2261 }, /* identical ≡ IDENTICAL TO */
1414 { 0x08bc, 0x2264 }, /* lessthanequal ≤ LESS-THAN OR EQUAL TO */
1415 { 0x08be, 0x2265 }, /* greaterthanequal ≥ GREATER-THAN OR EQUAL TO */
1416 { 0x08da, 0x2282 }, /* includedin ⊂ SUBSET OF */
1417 { 0x0bda, 0x2282 }, /* leftshoe ⊂ SUBSET OF */
1418 { 0x08db, 0x2283 }, /* includes ⊃ SUPERSET OF */
1419 { 0x0bd8, 0x2283 }, /* rightshoe ⊃ SUPERSET OF */
1420 { 0x0bfc, 0x22a2 }, /* righttack ⊢ RIGHT TACK */
1421 { 0x0bdc, 0x22a3 }, /* lefttack ⊣ LEFT TACK */
1422 { 0x0bc2, 0x22a4 }, /* downtack ⊤ DOWN TACK */
1423 { 0x0bce, 0x22a5 }, /* uptack ⊥ UP TACK */
1424 { 0x0bd3, 0x2308 }, /* upstile ⌈ LEFT CEILING */
1425 { 0x0bc4, 0x230a }, /* downstile ⌊ LEFT FLOOR */
1426 { 0x0afa, 0x2315 }, /* telephonerecorder ⌕ TELEPHONE RECORDER */
1427 { 0x08a4, 0x2320 }, /* topintegral ⌠ TOP HALF INTEGRAL */
1428 { 0x08a5, 0x2321 }, /* botintegral ⌡ BOTTOM HALF INTEGRAL */
1429 { 0x0abc, 0x2329 }, /* leftanglebracket 〈 LEFT-POINTING ANGLE BRACKET */
1430 { 0x0abe, 0x232a }, /* rightanglebracket 〉 RIGHT-POINTING ANGLE BRACKET */
1431 { 0x0bcc, 0x2395 }, /* quad ⎕ APL FUNCTIONAL SYMBOL QUAD (Unicode 3.0) */
1432 { 0x09e2, 0x2409 }, /* ht ␉ SYMBOL FOR HORIZONTAL TABULATION */
1433 { 0x09e5, 0x240a }, /* lf ␊ SYMBOL FOR LINE FEED */
1434 { 0x09e9, 0x240b }, /* vt ␋ SYMBOL FOR VERTICAL TABULATION */
1435 { 0x09e3, 0x240c }, /* ff ␌ SYMBOL FOR FORM FEED */
1436 { 0x09e4, 0x240d }, /* cr ␍ SYMBOL FOR CARRIAGE RETURN */
1437 { 0x09df, 0x2422 }, /* blank ␢ BLANK SYMBOL */
1438 { 0x09e8, 0x2424 }, /* nl ␤ SYMBOL FOR NEWLINE */
1439 { 0x09f1, 0x2500 }, /* horizlinescan5 ─ BOX DRAWINGS LIGHT HORIZONTAL */
1440 { 0x08a6, 0x2502 }, /* vertconnector │ BOX DRAWINGS LIGHT VERTICAL */
1441 { 0x09f8, 0x2502 }, /* vertbar │ BOX DRAWINGS LIGHT VERTICAL */
1442 { 0x09ec, 0x250c }, /* upleftcorner ┌ BOX DRAWINGS LIGHT DOWN AND RIGHT */
1443 { 0x09eb, 0x2510 }, /* uprightcorner ┐ BOX DRAWINGS LIGHT DOWN AND LEFT */
1444 { 0x09ed, 0x2514 }, /* lowleftcorner └ BOX DRAWINGS LIGHT UP AND RIGHT */
1445 { 0x09ea, 0x2518 }, /* lowrightcorner ┘ BOX DRAWINGS LIGHT UP AND LEFT */
1446 { 0x09f4, 0x251c }, /* leftt ├ BOX DRAWINGS LIGHT VERTICAL AND RIGHT */
1447 { 0x09f5, 0x2524 }, /* rightt ┤ BOX DRAWINGS LIGHT VERTICAL AND LEFT */
1448 { 0x09f7, 0x252c }, /* topt ┬ BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */
1449 { 0x09f6, 0x2534 }, /* bott ┴ BOX DRAWINGS LIGHT UP AND HORIZONTAL */
1450 { 0x09ee, 0x253c }, /* crossinglines ┼ BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */
1451 { 0x09e1, 0x2592 }, /* checkerboard ▒ MEDIUM SHADE */
1452 { 0x0adf, 0x25a0 }, /* emfilledrect ■ BLACK SQUARE */
1453 { 0x0acf, 0x25a1 }, /* emopenrectangle □ WHITE SQUARE */
1454 { 0x0ae7, 0x25aa }, /* enfilledsqbullet ▪ BLACK SMALL SQUARE */
1455 { 0x0ae1, 0x25ab }, /* enopensquarebullet ▫ WHITE SMALL SQUARE */
1456 { 0x0adb, 0x25ac }, /* filledrectbullet ▬ BLACK RECTANGLE */
1457 { 0x0ae2, 0x25ad }, /* openrectbullet ▭ WHITE RECTANGLE */
1458 { 0x0ae8, 0x25b2 }, /* filledtribulletup ▲ BLACK UP-POINTING TRIANGLE */
1459 { 0x0ae3, 0x25b3 }, /* opentribulletup △ WHITE UP-POINTING TRIANGLE */
1460 { 0x0add, 0x25b6 }, /* filledrighttribullet ▶ BLACK RIGHT-POINTING TRIANGLE */
1461 { 0x0acd, 0x25b7 }, /* rightopentriangle ▷ WHITE RIGHT-POINTING TRIANGLE */
1462 { 0x0ae9, 0x25bc }, /* filledtribulletdown ▼ BLACK DOWN-POINTING TRIANGLE */
1463 { 0x0ae4, 0x25bd }, /* opentribulletdown ▽ WHITE DOWN-POINTING TRIANGLE */
1464 { 0x0adc, 0x25c0 }, /* filledlefttribullet ◀ BLACK LEFT-POINTING TRIANGLE */
1465 { 0x0acc, 0x25c1 }, /* leftopentriangle ◁ WHITE LEFT-POINTING TRIANGLE */
1466 { 0x09e0, 0x25c6 }, /* soliddiamond ◆ BLACK DIAMOND */
1467 { 0x0ace, 0x25cb }, /* emopencircle ○ WHITE CIRCLE */
1468 { 0x0bcf, 0x25cb }, /* circle ○ WHITE CIRCLE */
1469 { 0x0ade, 0x25cf }, /* emfilledcircle ● BLACK CIRCLE */
1470 { 0x0ae0, 0x25e6 }, /* enopencircbullet ◦ WHITE BULLET */
1471 { 0x0ae5, 0x2606 }, /* openstar ☆ WHITE STAR */
1472 { 0x0af9, 0x260e }, /* telephone ☎ BLACK TELEPHONE */
1473 { 0x0aca, 0x2613 }, /* signaturemark ☓ SALTIRE */
1474 { 0x0aea, 0x261c }, /* leftpointer ☜ WHITE LEFT POINTING INDEX */
1475 { 0x0aeb, 0x261e }, /* rightpointer ☞ WHITE RIGHT POINTING INDEX */
1476 { 0x0af8, 0x2640 }, /* femalesymbol ♀ FEMALE SIGN */
1477 { 0x0af7, 0x2642 }, /* malesymbol ♂ MALE SIGN */
1478 { 0x0aec, 0x2663 }, /* club ♣ BLACK CLUB SUIT */
1479 { 0x0aee, 0x2665 }, /* heart ♥ BLACK HEART SUIT */
1480 { 0x0aed, 0x2666 }, /* diamond ♦ BLACK DIAMOND SUIT */
1481 { 0x0af6, 0x266d }, /* musicalflat ♭ MUSIC FLAT SIGN */
1482 { 0x0af5, 0x266f }, /* musicalsharp ♯ MUSIC SHARP SIGN */
1483 { 0x0af3, 0x2713 }, /* checkmark ✓ CHECK MARK */
1484 { 0x0af4, 0x2717 }, /* ballotcross ✗ BALLOT X */
1485 { 0x0ad9, 0x271d }, /* latincross ✝ LATIN CROSS */
1486 { 0x0af0, 0x2720 }, /* maltesecross ✠ MALTESE CROSS */
1487 { 0x04a4, 0x3001 }, /* kana_comma 、 IDEOGRAPHIC COMMA */
1488 { 0x04a1, 0x3002 }, /* kana_fullstop 。 IDEOGRAPHIC FULL STOP */
1489 { 0x04a2, 0x300c }, /* kana_openingbracket 「 LEFT CORNER BRACKET */
1490 { 0x04a3, 0x300d }, /* kana_closingbracket 」 RIGHT CORNER BRACKET */
1491 { 0x04de, 0x309b }, /* voicedsound ゛ KATAKANA-HIRAGANA VOICED SOUND MARK */
1492 { 0x04df, 0x309c }, /* semivoicedsound ゜ KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */
1493 { 0x04a7, 0x30a1 }, /* kana_a ァ KATAKANA LETTER SMALL A */
1494 { 0x04b1, 0x30a2 }, /* kana_A ア KATAKANA LETTER A */
1495 { 0x04a8, 0x30a3 }, /* kana_i ィ KATAKANA LETTER SMALL I */
1496 { 0x04b2, 0x30a4 }, /* kana_I イ KATAKANA LETTER I */
1497 { 0x04a9, 0x30a5 }, /* kana_u ゥ KATAKANA LETTER SMALL U */
1498 { 0x04b3, 0x30a6 }, /* kana_U ウ KATAKANA LETTER U */
1499 { 0x04aa, 0x30a7 }, /* kana_e ェ KATAKANA LETTER SMALL E */
1500 { 0x04b4, 0x30a8 }, /* kana_E エ KATAKANA LETTER E */
1501 { 0x04ab, 0x30a9 }, /* kana_o ォ KATAKANA LETTER SMALL O */
1502 { 0x04b5, 0x30aa }, /* kana_O オ KATAKANA LETTER O */
1503 { 0x04b6, 0x30ab }, /* kana_KA カ KATAKANA LETTER KA */
1504 { 0x04b7, 0x30ad }, /* kana_KI キ KATAKANA LETTER KI */
1505 { 0x04b8, 0x30af }, /* kana_KU ク KATAKANA LETTER KU */
1506 { 0x04b9, 0x30b1 }, /* kana_KE ケ KATAKANA LETTER KE */
1507 { 0x04ba, 0x30b3 }, /* kana_KO コ KATAKANA LETTER KO */
1508 { 0x04bb, 0x30b5 }, /* kana_SA サ KATAKANA LETTER SA */
1509 { 0x04bc, 0x30b7 }, /* kana_SHI シ KATAKANA LETTER SI */
1510 { 0x04bd, 0x30b9 }, /* kana_SU ス KATAKANA LETTER SU */
1511 { 0x04be, 0x30bb }, /* kana_SE セ KATAKANA LETTER SE */
1512 { 0x04bf, 0x30bd }, /* kana_SO ソ KATAKANA LETTER SO */
1513 { 0x04c0, 0x30bf }, /* kana_TA タ KATAKANA LETTER TA */
1514 { 0x04c1, 0x30c1 }, /* kana_CHI チ KATAKANA LETTER TI */
1515 { 0x04af, 0x30c3 }, /* kana_tsu ッ KATAKANA LETTER SMALL TU */
1516 { 0x04c2, 0x30c4 }, /* kana_TSU ツ KATAKANA LETTER TU */
1517 { 0x04c3, 0x30c6 }, /* kana_TE テ KATAKANA LETTER TE */
1518 { 0x04c4, 0x30c8 }, /* kana_TO ト KATAKANA LETTER TO */
1519 { 0x04c5, 0x30ca }, /* kana_NA ナ KATAKANA LETTER NA */
1520 { 0x04c6, 0x30cb }, /* kana_NI ニ KATAKANA LETTER NI */
1521 { 0x04c7, 0x30cc }, /* kana_NU ヌ KATAKANA LETTER NU */
1522 { 0x04c8, 0x30cd }, /* kana_NE ネ KATAKANA LETTER NE */
1523 { 0x04c9, 0x30ce }, /* kana_NO ノ KATAKANA LETTER NO */
1524 { 0x04ca, 0x30cf }, /* kana_HA ハ KATAKANA LETTER HA */
1525 { 0x04cb, 0x30d2 }, /* kana_HI ヒ KATAKANA LETTER HI */
1526 { 0x04cc, 0x30d5 }, /* kana_FU フ KATAKANA LETTER HU */
1527 { 0x04cd, 0x30d8 }, /* kana_HE ヘ KATAKANA LETTER HE */
1528 { 0x04ce, 0x30db }, /* kana_HO ホ KATAKANA LETTER HO */
1529 { 0x04cf, 0x30de }, /* kana_MA マ KATAKANA LETTER MA */
1530 { 0x04d0, 0x30df }, /* kana_MI ミ KATAKANA LETTER MI */
1531 { 0x04d1, 0x30e0 }, /* kana_MU ム KATAKANA LETTER MU */
1532 { 0x04d2, 0x30e1 }, /* kana_ME メ KATAKANA LETTER ME */
1533 { 0x04d3, 0x30e2 }, /* kana_MO モ KATAKANA LETTER MO */
1534 { 0x04ac, 0x30e3 }, /* kana_ya ャ KATAKANA LETTER SMALL YA */
1535 { 0x04d4, 0x30e4 }, /* kana_YA ヤ KATAKANA LETTER YA */
1536 { 0x04ad, 0x30e5 }, /* kana_yu ュ KATAKANA LETTER SMALL YU */
1537 { 0x04d5, 0x30e6 }, /* kana_YU ユ KATAKANA LETTER YU */
1538 { 0x04ae, 0x30e7 }, /* kana_yo ョ KATAKANA LETTER SMALL YO */
1539 { 0x04d6, 0x30e8 }, /* kana_YO ヨ KATAKANA LETTER YO */
1540 { 0x04d7, 0x30e9 }, /* kana_RA ラ KATAKANA LETTER RA */
1541 { 0x04d8, 0x30ea }, /* kana_RI リ KATAKANA LETTER RI */
1542 { 0x04d9, 0x30eb }, /* kana_RU ル KATAKANA LETTER RU */
1543 { 0x04da, 0x30ec }, /* kana_RE レ KATAKANA LETTER RE */
1544 { 0x04db, 0x30ed }, /* kana_RO ロ KATAKANA LETTER RO */
1545 { 0x04dc, 0x30ef }, /* kana_WA ワ KATAKANA LETTER WA */
1546 { 0x04a6, 0x30f2 }, /* kana_WO ヲ KATAKANA LETTER WO */
1547 { 0x04dd, 0x30f3 }, /* kana_N ン KATAKANA LETTER N */
1548 { 0x04a5, 0x30fb }, /* kana_conjunctive ・ KATAKANA MIDDLE DOT */
1549 { 0x04b0, 0x30fc }, /* prolongedsound ー KATAKANA-HIRAGANA PROLONGED SOUND MARK */
1550 { 0x0ea1, 0x3131 }, /* Hangul_Kiyeog ㄱ HANGUL LETTER KIYEOK */
1551 { 0x0ea2, 0x3132 }, /* Hangul_SsangKiyeog ㄲ HANGUL LETTER SSANGKIYEOK */
1552 { 0x0ea3, 0x3133 }, /* Hangul_KiyeogSios ㄳ HANGUL LETTER KIYEOK-SIOS */
1553 { 0x0ea4, 0x3134 }, /* Hangul_Nieun ㄴ HANGUL LETTER NIEUN */
1554 { 0x0ea5, 0x3135 }, /* Hangul_NieunJieuj ㄵ HANGUL LETTER NIEUN-CIEUC */
1555 { 0x0ea6, 0x3136 }, /* Hangul_NieunHieuh ㄶ HANGUL LETTER NIEUN-HIEUH */
1556 { 0x0ea7, 0x3137 }, /* Hangul_Dikeud ㄷ HANGUL LETTER TIKEUT */
1557 { 0x0ea8, 0x3138 }, /* Hangul_SsangDikeud ㄸ HANGUL LETTER SSANGTIKEUT */
1558 { 0x0ea9, 0x3139 }, /* Hangul_Rieul ㄹ HANGUL LETTER RIEUL */
1559 { 0x0eaa, 0x313a }, /* Hangul_RieulKiyeog ㄺ HANGUL LETTER RIEUL-KIYEOK */
1560 { 0x0eab, 0x313b }, /* Hangul_RieulMieum ㄻ HANGUL LETTER RIEUL-MIEUM */
1561 { 0x0eac, 0x313c }, /* Hangul_RieulPieub ㄼ HANGUL LETTER RIEUL-PIEUP */
1562 { 0x0ead, 0x313d }, /* Hangul_RieulSios ㄽ HANGUL LETTER RIEUL-SIOS */
1563 { 0x0eae, 0x313e }, /* Hangul_RieulTieut ㄾ HANGUL LETTER RIEUL-THIEUTH */
1564 { 0x0eaf, 0x313f }, /* Hangul_RieulPhieuf ㄿ HANGUL LETTER RIEUL-PHIEUPH */
1565 { 0x0eb0, 0x3140 }, /* Hangul_RieulHieuh ㅀ HANGUL LETTER RIEUL-HIEUH */
1566 { 0x0eb1, 0x3141 }, /* Hangul_Mieum ㅁ HANGUL LETTER MIEUM */
1567 { 0x0eb2, 0x3142 }, /* Hangul_Pieub ㅂ HANGUL LETTER PIEUP */
1568 { 0x0eb3, 0x3143 }, /* Hangul_SsangPieub ㅃ HANGUL LETTER SSANGPIEUP */
1569 { 0x0eb4, 0x3144 }, /* Hangul_PieubSios ㅄ HANGUL LETTER PIEUP-SIOS */
1570 { 0x0eb5, 0x3145 }, /* Hangul_Sios ㅅ HANGUL LETTER SIOS */
1571 { 0x0eb6, 0x3146 }, /* Hangul_SsangSios ㅆ HANGUL LETTER SSANGSIOS */
1572 { 0x0eb7, 0x3147 }, /* Hangul_Ieung ㅇ HANGUL LETTER IEUNG */
1573 { 0x0eb8, 0x3148 }, /* Hangul_Jieuj ㅈ HANGUL LETTER CIEUC */
1574 { 0x0eb9, 0x3149 }, /* Hangul_SsangJieuj ㅉ HANGUL LETTER SSANGCIEUC */
1575 { 0x0eba, 0x314a }, /* Hangul_Cieuc ㅊ HANGUL LETTER CHIEUCH */
1576 { 0x0ebb, 0x314b }, /* Hangul_Khieuq ㅋ HANGUL LETTER KHIEUKH */
1577 { 0x0ebc, 0x314c }, /* Hangul_Tieut ㅌ HANGUL LETTER THIEUTH */
1578 { 0x0ebd, 0x314d }, /* Hangul_Phieuf ㅍ HANGUL LETTER PHIEUPH */
1579 { 0x0ebe, 0x314e }, /* Hangul_Hieuh ㅎ HANGUL LETTER HIEUH */
1580 { 0x0ebf, 0x314f }, /* Hangul_A ㅏ HANGUL LETTER A */
1581 { 0x0ec0, 0x3150 }, /* Hangul_AE ㅐ HANGUL LETTER AE */
1582 { 0x0ec1, 0x3151 }, /* Hangul_YA ㅑ HANGUL LETTER YA */
1583 { 0x0ec2, 0x3152 }, /* Hangul_YAE ㅒ HANGUL LETTER YAE */
1584 { 0x0ec3, 0x3153 }, /* Hangul_EO ㅓ HANGUL LETTER EO */
1585 { 0x0ec4, 0x3154 }, /* Hangul_E ㅔ HANGUL LETTER E */
1586 { 0x0ec5, 0x3155 }, /* Hangul_YEO ㅕ HANGUL LETTER YEO */
1587 { 0x0ec6, 0x3156 }, /* Hangul_YE ㅖ HANGUL LETTER YE */
1588 { 0x0ec7, 0x3157 }, /* Hangul_O ㅗ HANGUL LETTER O */
1589 { 0x0ec8, 0x3158 }, /* Hangul_WA ㅘ HANGUL LETTER WA */
1590 { 0x0ec9, 0x3159 }, /* Hangul_WAE ㅙ HANGUL LETTER WAE */
1591 { 0x0eca, 0x315a }, /* Hangul_OE ㅚ HANGUL LETTER OE */
1592 { 0x0ecb, 0x315b }, /* Hangul_YO ㅛ HANGUL LETTER YO */
1593 { 0x0ecc, 0x315c }, /* Hangul_U ㅜ HANGUL LETTER U */
1594 { 0x0ecd, 0x315d }, /* Hangul_WEO ㅝ HANGUL LETTER WEO */
1595 { 0x0ece, 0x315e }, /* Hangul_WE ㅞ HANGUL LETTER WE */
1596 { 0x0ecf, 0x315f }, /* Hangul_WI ㅟ HANGUL LETTER WI */
1597 { 0x0ed0, 0x3160 }, /* Hangul_YU ㅠ HANGUL LETTER YU */
1598 { 0x0ed1, 0x3161 }, /* Hangul_EU ㅡ HANGUL LETTER EU */
1599 { 0x0ed2, 0x3162 }, /* Hangul_YI ㅢ HANGUL LETTER YI */
1600 { 0x0ed3, 0x3163 }, /* Hangul_I ㅣ HANGUL LETTER I */
1601 { 0x0eef, 0x316d }, /* Hangul_RieulYeorinHieuh ㅭ HANGUL LETTER RIEUL-YEORINHIEUH */
1602 { 0x0ef0, 0x3171 }, /* Hangul_SunkyeongeumMieum ㅱ HANGUL LETTER KAPYEOUNMIEUM */
1603 { 0x0ef1, 0x3178 }, /* Hangul_SunkyeongeumPieub ㅸ HANGUL LETTER KAPYEOUNPIEUP */
1604 { 0x0ef2, 0x317f }, /* Hangul_PanSios ㅿ HANGUL LETTER PANSIOS */
1605 { 0x0ef4, 0x3184 }, /* Hangul_SunkyeongeumPhieuf ㆄ HANGUL LETTER KAPYEOUNPHIEUPH */
1606 { 0x0ef5, 0x3186 }, /* Hangul_YeorinHieuh ㆆ HANGUL LETTER YEORINHIEUH */
1607 { 0x0ef6, 0x318d }, /* Hangul_AraeA ㆍ HANGUL LETTER ARAEA */
1608 { 0x0ef7, 0x318e }, /* Hangul_AraeAE ㆎ HANGUL LETTER ARAEAE */
1609 };
1610
1611 #endif // KEYDATA_H
0 /*
1 Copyright (C) 2001 Ellis Whitehead <ellis@kde.org>
2
3 Win32 port:
4 Copyright (C) 2004 Jaroslaw Staniek <js@iidea.pl>
5
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version.
10
11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details.
15
16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 Boston, MA 02110-1301, USA.
20 */
21
22 #ifndef KEYSERVER_X11_H
23 #define KEYSERVER_X11_H
24
25 #include <X11/keysym.h>
26
27 struct TransKey {
28 int keySymQt;
29 uint keySymX;
30 };
31
32 static const TransKey g_rgQtToSymX[] = {
33 { Qt::Key_Escape, XK_Escape },
34 { Qt::Key_Tab, XK_Tab },
35 { Qt::Key_Backtab, XK_ISO_Left_Tab },
36 { Qt::Key_Backspace, XK_BackSpace },
37 { Qt::Key_Return, XK_Return },
38 { Qt::Key_Enter, XK_KP_Enter },
39 { Qt::Key_Insert, XK_Insert },
40 { Qt::Key_Delete, XK_Delete },
41 { Qt::Key_Pause, XK_Pause },
42 #ifdef sun
43 { Qt::Key_Print, XK_F22 },
44 #else
45 { Qt::Key_Print, XK_Print },
46 #endif
47 { Qt::Key_SysReq, XK_Sys_Req },
48 { Qt::Key_Home, XK_Home },
49 { Qt::Key_End, XK_End },
50 { Qt::Key_Left, XK_Left },
51 { Qt::Key_Up, XK_Up },
52 { Qt::Key_Right, XK_Right },
53 { Qt::Key_Down, XK_Down },
54 //{ Qt::Key_Shift, 0 },
55 //{ Qt::Key_Control, 0 },
56 //{ Qt::Key_Meta, 0 },
57 //{ Qt::Key_Alt, 0 },
58 { Qt::Key_CapsLock, XK_Caps_Lock },
59 { Qt::Key_NumLock, XK_Num_Lock },
60 { Qt::Key_ScrollLock, XK_Scroll_Lock },
61 { Qt::Key_F1, XK_F1 },
62 { Qt::Key_F2, XK_F2 },
63 { Qt::Key_F3, XK_F3 },
64 { Qt::Key_F4, XK_F4 },
65 { Qt::Key_F5, XK_F5 },
66 { Qt::Key_F6, XK_F6 },
67 { Qt::Key_F7, XK_F7 },
68 { Qt::Key_F8, XK_F8 },
69 { Qt::Key_F9, XK_F9 },
70 { Qt::Key_F10, XK_F10 },
71 { Qt::Key_F11, XK_F11 },
72 { Qt::Key_F12, XK_F12 },
73 { Qt::Key_F13, XK_F13 },
74 { Qt::Key_F14, XK_F14 },
75 { Qt::Key_F15, XK_F15 },
76 { Qt::Key_F16, XK_F16 },
77 { Qt::Key_F17, XK_F17 },
78 { Qt::Key_F18, XK_F18 },
79 { Qt::Key_F19, XK_F19 },
80 { Qt::Key_F20, XK_F20 },
81 { Qt::Key_F21, XK_F21 },
82 { Qt::Key_F22, XK_F22 },
83 { Qt::Key_F23, XK_F23 },
84 { Qt::Key_F24, XK_F24 },
85 { Qt::Key_F25, XK_F25 },
86 { Qt::Key_F26, XK_F26 },
87 { Qt::Key_F27, XK_F27 },
88 { Qt::Key_F28, XK_F28 },
89 { Qt::Key_F29, XK_F29 },
90 { Qt::Key_F30, XK_F30 },
91 { Qt::Key_F31, XK_F31 },
92 { Qt::Key_F32, XK_F32 },
93 { Qt::Key_F33, XK_F33 },
94 { Qt::Key_F34, XK_F34 },
95 { Qt::Key_F35, XK_F35 },
96 { Qt::Key_Super_L, XK_Super_L },
97 { Qt::Key_Super_R, XK_Super_R },
98 { Qt::Key_Menu, XK_Menu },
99 { Qt::Key_Hyper_L, XK_Hyper_L },
100 { Qt::Key_Hyper_R, XK_Hyper_R },
101 { Qt::Key_Help, XK_Help },
102
103 { '/', XK_KP_Divide },
104 { '*', XK_KP_Multiply },
105 { '-', XK_KP_Subtract },
106 { '+', XK_KP_Add },
107 { Qt::Key_Return, XK_KP_Enter },
108 {Qt::Key_Multi_key, XK_Multi_key},
109 {Qt::Key_Codeinput, XK_Codeinput},
110 {Qt::Key_SingleCandidate, XK_SingleCandidate},
111 {Qt::Key_MultipleCandidate, XK_MultipleCandidate},
112 {Qt::Key_PreviousCandidate, XK_PreviousCandidate},
113 {Qt::Key_Mode_switch, XK_Mode_switch},
114 {Qt::Key_Kanji, XK_Kanji},
115 {Qt::Key_Muhenkan, XK_Muhenkan},
116 {Qt::Key_Henkan, XK_Henkan},
117 {Qt::Key_Romaji, XK_Romaji},
118 {Qt::Key_Hiragana, XK_Hiragana},
119 {Qt::Key_Katakana, XK_Katakana},
120 {Qt::Key_Hiragana_Katakana, XK_Hiragana_Katakana},
121 {Qt::Key_Zenkaku, XK_Zenkaku},
122 {Qt::Key_Hankaku, XK_Hankaku},
123 {Qt::Key_Zenkaku_Hankaku, XK_Zenkaku_Hankaku},
124 {Qt::Key_Touroku, XK_Touroku},
125 {Qt::Key_Massyo, XK_Massyo},
126 {Qt::Key_Kana_Lock, XK_Kana_Lock},
127 {Qt::Key_Kana_Shift, XK_Kana_Shift},
128 {Qt::Key_Eisu_Shift, XK_Eisu_Shift},
129 {Qt::Key_Eisu_toggle, XK_Eisu_toggle},
130 {Qt::Key_Hangul, XK_Hangul},
131 {Qt::Key_Hangul_Start, XK_Hangul_Start},
132 {Qt::Key_Hangul_End, XK_Hangul_End},
133 {Qt::Key_Hangul_Hanja, XK_Hangul_Hanja},
134 {Qt::Key_Hangul_Jamo, XK_Hangul_Jamo},
135 {Qt::Key_Hangul_Romaja, XK_Hangul_Romaja},
136 {Qt::Key_Hangul_Jeonja, XK_Hangul_Jeonja},
137 {Qt::Key_Hangul_Banja, XK_Hangul_Banja},
138 {Qt::Key_Hangul_PreHanja, XK_Hangul_PreHanja},
139 {Qt::Key_Hangul_PostHanja, XK_Hangul_PostHanja},
140 {Qt::Key_Hangul_Special, XK_Hangul_Special},
141 };
142
143 #include <qstring.h>
144
145 inline int map_sym_to_qt(uint keySym)
146 {
147 if (keySym < 0x1000) {
148 if (keySym >= 'a' && keySym <= 'z')
149 return QChar(keySym).toUpper().unicode();
150 return keySym;
151 }
152 #ifdef Q_WS_WIN
153 if (keySym < 0x3000)
154 return keySym;
155 #else
156 if (keySym < 0x3000)
157 return keySym | Qt::UNICODE_ACCEL;
158
159 for (uint i = 0; i < sizeof(g_rgQtToSymX) / sizeof(TransKey); i++)
160 if (g_rgQtToSymX[i].keySymX == keySym)
161 return g_rgQtToSymX[i].keySymQt;
162 #endif
163 return Qt::Key_unknown;
164 }
165
166 static bool symToKeyQt(uint keySym, int& keyQt)
167 {
168 keyQt = map_sym_to_qt(keySym);
169 return (keyQt != Qt::Key_unknown);
170 }
171
172 #endif
0 /***************************************************************************
1 * Copyright (C) 2012~2013 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #include <stdint.h>
20 #include "keyuni.h"
21 #include "keydata.h"
22
23 uint32_t
24 FcitxKeySymToUnicode (uint32_t keyval)
25 {
26 int min = 0;
27 int max = sizeof (gdk_keysym_to_unicode_tab) / sizeof(gdk_keysym_to_unicode_tab[0]) - 1;
28 int mid;
29
30 /* First check for Latin-1 characters (1:1 mapping) */
31 if ((keyval >= 0x0020 && keyval <= 0x007e) ||
32 (keyval >= 0x00a0 && keyval <= 0x00ff))
33 return keyval;
34
35 /* Also check for directly encoded 24-bit UCS characters:
36 */
37 if ((keyval & 0xff000000) == 0x01000000)
38 return keyval & 0x00ffffff;
39
40 /* binary search in table */
41 while (max >= min) {
42 mid = (min + max) / 2;
43 if (gdk_keysym_to_unicode_tab[mid].keysym < keyval)
44 min = mid + 1;
45 else if (gdk_keysym_to_unicode_tab[mid].keysym > keyval)
46 max = mid - 1;
47 else {
48 /* found it */
49 return gdk_keysym_to_unicode_tab[mid].ucs;
50 }
51 }
52
53 /* No matching Unicode value found */
54 return 0;
55 }
0 /***************************************************************************
1 * Copyright (C) 2012~2013 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #ifndef KEYUNI_H
20 #define KEYUNI_H
21
22 #include <qglobal.h>
23
24 quint32
25 FcitxKeySymToUnicode (quint32 keyval);
26
27
28 #endif // KEYUNI_H
0 /***************************************************************************
1 * Copyright (C) 2012~2013 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #include "main.h"
20
21
22 QStringList QFcitxPlatformInputContextPlugin::keys() const
23 {
24 return QStringList(QStringLiteral("fcitx"));
25
26 }
27
28 QFcitxPlatformInputContext *QFcitxPlatformInputContextPlugin::create(const QString& system, const QStringList& paramList)
29 {
30 Q_UNUSED(paramList);
31 if (system.compare(system, QStringLiteral("fcitx"), Qt::CaseInsensitive) == 0)
32 return new QFcitxPlatformInputContext;
33 return 0;
34 }
0 /***************************************************************************
1 * Copyright (C) 2012~2013 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #ifndef MAIN_H
20 #define MAIN_H
21
22 #include <qpa/qplatforminputcontextplugin_p.h>
23 #include <QtCore/QStringList>
24
25 #include "qfcitxplatforminputcontext.h"
26
27 class QFcitxPlatformInputContextPlugin : public QPlatformInputContextPlugin
28 {
29 Q_OBJECT
30 public:
31 Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QPlatformInputContextFactoryInterface" FILE "fcitx.json")
32 QStringList keys() const;
33 QFcitxPlatformInputContext *create(const QString& system, const QStringList& paramList);
34 };
35
36 #endif // MAIN_H
0 /***************************************************************************
1 * Copyright (C) 2011~2013 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #include <QKeyEvent>
20 #include <QDBusConnection>
21 #include <QGuiApplication>
22 #include <QInputMethod>
23 #include <QTextCharFormat>
24 #include <QPalette>
25 #include <QWindow>
26
27 #include <unistd.h>
28 #include <errno.h>
29 #include <signal.h>
30
31 #include "keyserver_x11.h"
32 #include "fcitx-compose-data.h"
33
34 #include "qfcitxplatforminputcontext.h"
35 #include "fcitxqtinputcontextproxy.h"
36 #include "fcitxqtinputmethodproxy.h"
37 #include "fcitxqtconnection.h"
38 #include "keyuni.h"
39 #include "utils.h"
40
41 typedef struct _FcitxComposeTableCompact FcitxComposeTableCompact;
42 struct _FcitxComposeTableCompact {
43 const quint32 *data;
44 int max_seq_len;
45 int n_index_size;
46 int n_index_stride;
47 };
48
49 static const FcitxComposeTableCompact fcitx_compose_table_compact = {
50 fcitx_compose_seqs_compact,
51 5,
52 23,
53 6
54 };
55
56 static const uint fcitx_compose_ignore[] = {
57 XK_Shift_L,
58 XK_Shift_R,
59 XK_Control_L,
60 XK_Control_R,
61 XK_Caps_Lock,
62 XK_Shift_Lock,
63 XK_Meta_L,
64 XK_Meta_R,
65 XK_Alt_L,
66 XK_Alt_R,
67 XK_Super_L,
68 XK_Super_R,
69 XK_Hyper_L,
70 XK_Hyper_R,
71 XK_Mode_switch,
72 XK_ISO_Level3_Shift,
73 XK_VoidSymbol
74 };
75
76 static bool key_filtered = false;
77
78 static bool
79 get_boolean_env(const char *name,
80 bool defval)
81 {
82 const char *value = getenv(name);
83
84 if (value == NULL)
85 return defval;
86
87 if (strcmp(value, "") == 0 ||
88 strcmp(value, "0") == 0 ||
89 strcmp(value, "false") == 0 ||
90 strcmp(value, "False") == 0 ||
91 strcmp(value, "FALSE") == 0)
92 return false;
93
94 return true;
95 }
96
97 static int
98 compare_seq_index(const void *key, const void *value)
99 {
100 const uint *keysyms = (const uint *)key;
101 const quint32 *seq = (const quint32 *)value;
102
103 if (keysyms[0] < seq[0])
104 return -1;
105 else if (keysyms[0] > seq[0])
106 return 1;
107 return 0;
108 }
109
110 static int
111 compare_seq(const void *key, const void *value)
112 {
113 int i = 0;
114 const uint *keysyms = (const uint *)key;
115 const quint32 *seq = (const quint32 *)value;
116
117 while (keysyms[i]) {
118 if (keysyms[i] < seq[i])
119 return -1;
120 else if (keysyms[i] > seq[i])
121 return 1;
122 i++;
123 }
124
125 return 0;
126 }
127
128
129 QFcitxPlatformInputContext::QFcitxPlatformInputContext() :
130 m_connection(new FcitxQtConnection(this)),
131 m_improxy(0),
132 m_n_compose(0),
133 m_cursorPos(0),
134 m_useSurroundingText(false),
135 m_syncMode(true),
136 m_lastWId(0),
137 m_destroy(false)
138 {
139 FcitxQtFormattedPreedit::registerMetaType();
140
141 memset(m_compose_buffer, 0, sizeof(uint) * (MAX_COMPOSE_LEN + 1));
142 connect(m_connection, SIGNAL(connected()), this, SLOT(connected()));
143 connect(m_connection, SIGNAL(disconnected()), this, SLOT(cleanUp()));
144
145 m_connection->startConnection();
146 }
147
148 QFcitxPlatformInputContext::~QFcitxPlatformInputContext()
149 {
150 m_destroy = true;
151 cleanUp();
152 }
153
154 void QFcitxPlatformInputContext::connected()
155 {
156 if (!m_connection->isConnected())
157 return;
158
159 // qDebug() << "create Input Context" << m_connection->name();
160 if (m_improxy) {
161 delete m_improxy;
162 m_improxy = 0;
163 }
164 m_improxy = new FcitxQtInputMethodProxy(m_connection->serviceName(), QLatin1String("/inputmethod"), *m_connection->connection(), this);
165
166 QWindow* w = qApp->focusWindow();
167 if (w)
168 createICData(w);
169 }
170
171 void QFcitxPlatformInputContext::cleanUp()
172 {
173 for(QHash<WId, FcitxQtICData *>::const_iterator i = m_icMap.constBegin(),
174 e = m_icMap.constEnd(); i != e; ++i) {
175 FcitxQtICData* data = i.value();
176
177 if (data->proxy)
178 delete data->proxy;
179 }
180
181 m_icMap.clear();
182
183 if (m_improxy) {
184 delete m_improxy;
185 m_improxy = 0;
186 }
187
188 if (!m_destroy) {
189 commitPreedit();
190 }
191 }
192
193 bool QFcitxPlatformInputContext::isValid() const
194 {
195 return true;
196 }
197
198 void QFcitxPlatformInputContext::invokeAction(QInputMethod::Action action, int cursorPosition)
199 {
200 if (action == QInputMethod::Click
201 && (cursorPosition <= 0 || cursorPosition >= m_preedit.length())
202 )
203 {
204 // qDebug() << action << cursorPosition;
205 commitPreedit();
206 }
207 }
208
209 void QFcitxPlatformInputContext::commitPreedit()
210 {
211 QObject *input = qApp->focusObject();
212 if (!input)
213 return;
214 if (m_commitPreedit.length() <= 0)
215 return;
216 QInputMethodEvent e;
217 e.setCommitString(m_commitPreedit);
218 QCoreApplication::sendEvent(input, &e);
219 m_commitPreedit.clear();
220 }
221
222
223 void QFcitxPlatformInputContext::reset()
224 {
225 commitPreedit();
226 FcitxQtInputContextProxy* proxy = validIC();
227 if (proxy)
228 proxy->Reset();
229 QPlatformInputContext::reset();
230 }
231
232 void QFcitxPlatformInputContext::update(Qt::InputMethodQueries queries )
233 {
234 QWindow* window = qApp->focusWindow();
235 FcitxQtInputContextProxy* proxy = validICByWindow(window);
236 if (!proxy)
237 return;
238
239 FcitxQtICData* data = m_icMap.value(window->winId());
240
241 QInputMethod *method = qApp->inputMethod();
242 QObject *input = qApp->focusObject();
243 if (!input)
244 return;
245
246 QInputMethodQueryEvent query(queries);
247 QGuiApplication::sendEvent(input, &query);
248
249 if (queries & Qt::ImCursorRectangle) {
250 cursorRectChanged();
251 }
252
253 if (queries & Qt::ImHints) {
254 Qt::InputMethodHints hints = Qt::InputMethodHints(query.value(Qt::ImHints).toUInt());
255
256
257 #define CHECK_HINTS(_HINTS, _CAPACITY) \
258 if (hints & _HINTS) \
259 addCapacity(data, _CAPACITY); \
260 else \
261 removeCapacity(data, _CAPACITY);
262
263 CHECK_HINTS(Qt::ImhNoAutoUppercase, CAPACITY_NOAUTOUPPERCASE)
264 CHECK_HINTS(Qt::ImhPreferNumbers, CAPACITY_NUMBER)
265 CHECK_HINTS(Qt::ImhPreferUppercase, CAPACITY_UPPERCASE)
266 CHECK_HINTS(Qt::ImhPreferLowercase, CAPACITY_LOWERCASE)
267 CHECK_HINTS(Qt::ImhNoPredictiveText, CAPACITY_NO_SPELLCHECK)
268 CHECK_HINTS(Qt::ImhDigitsOnly, CAPACITY_DIGIT)
269 CHECK_HINTS(Qt::ImhFormattedNumbersOnly, CAPACITY_NUMBER)
270 CHECK_HINTS(Qt::ImhUppercaseOnly, CAPACITY_UPPERCASE)
271 CHECK_HINTS(Qt::ImhLowercaseOnly, CAPACITY_LOWERCASE)
272 CHECK_HINTS(Qt::ImhDialableCharactersOnly, CAPACITY_DIALABLE)
273 CHECK_HINTS(Qt::ImhEmailCharactersOnly, CAPACITY_EMAIL)
274 }
275
276 bool setSurrounding = false;
277 do {
278 if (!m_useSurroundingText)
279 break;
280 if (!((queries & Qt::ImSurroundingText) && (queries & Qt::ImCursorPosition)))
281 break;
282 if (data->capacity.testFlag(CAPACITY_PASSWORD))
283 break;
284 QVariant var = query.value(Qt::ImSurroundingText);
285 QVariant var1 = query.value(Qt::ImCursorPosition);
286 QVariant var2 = query.value(Qt::ImAnchorPosition);
287 if (!var.isValid() || !var1.isValid())
288 break;
289 QString text = var.toString();
290 /* we don't want to waste too much memory here */
291 #define SURROUNDING_THRESHOLD 4096
292 if (text.length() < SURROUNDING_THRESHOLD) {
293 if (_utf8_check_string(text.toUtf8().data())) {
294 addCapacity(data, CAPACITY_SURROUNDING_TEXT);
295
296 int cursor = var1.toInt();
297 int anchor;
298 if (var2.isValid())
299 anchor = var2.toInt();
300 else
301 anchor = cursor;
302 if (data->surroundingText != text) {
303 data->surroundingText = text;
304 proxy->SetSurroundingText(text, cursor, anchor);
305 }
306 else {
307 if (data->surroundingAnchor != anchor ||
308 data->surroundingCursor != cursor)
309 proxy->SetSurroundingTextPosition(cursor, anchor);
310 }
311 data->surroundingCursor = cursor;
312 data->surroundingAnchor = anchor;
313 setSurrounding = true;
314 }
315 }
316 if (!setSurrounding) {
317 data->surroundingAnchor = -1;
318 data->surroundingCursor = -1;
319 data->surroundingText = QString::null;
320 removeCapacity(data, CAPACITY_SURROUNDING_TEXT);
321 }
322 } while(0);
323 }
324
325 void QFcitxPlatformInputContext::commit()
326 {
327 QPlatformInputContext::commit();
328 }
329
330 void QFcitxPlatformInputContext::setFocusObject(QObject* object)
331 {
332 FcitxQtInputContextProxy* proxy = validICByWId(m_lastWId);
333 if (proxy) {
334 proxy->FocusOut();
335 }
336
337 QWindow *window = qApp->focusWindow();
338 if (window) {
339 m_lastWId = window->winId();
340 } else {
341 m_lastWId = 0;
342 return;
343 }
344 proxy = validICByWindow(window);
345 if (proxy)
346 proxy->FocusIn();
347 else {
348 FcitxQtICData* data = m_icMap.value(window->winId());
349 if (!data) {
350 createICData(window);
351 return;
352 }
353 }
354 }
355
356 void QFcitxPlatformInputContext::windowDestroyed(QObject* object)
357 {
358 /* access QWindow is not possible here, so we use our own map to do so */
359 WId wid = m_windowToWidMap.take(object);
360 if (!wid)
361 return;
362 FcitxQtICData* data = m_icMap.take(wid);
363 if (!data)
364 return;
365
366 delete data;
367 // qDebug() << "Window Destroyed and we destroy IC correctly, horray!";
368 }
369
370 void QFcitxPlatformInputContext::cursorRectChanged()
371 {
372 QWindow *inputWindow = qApp->focusWindow();
373 if (!inputWindow)
374 return;
375 FcitxQtInputContextProxy* proxy = validICByWindow(inputWindow);
376 if (!proxy)
377 return;
378
379 FcitxQtICData* data = m_icMap.value(inputWindow->winId());
380
381 QRect r = qApp->inputMethod()->cursorRectangle().toRect();
382 if(!r.isValid())
383 return;
384
385 r.moveTopLeft(inputWindow->mapToGlobal(r.topLeft()));
386
387 if (data->rect != r) {
388 data->rect = r;
389 proxy->SetCursorRect(r.x(), r.y(), r.width(), r.height());
390 }
391 }
392
393 void QFcitxPlatformInputContext::createInputContext(WId w)
394 {
395 if (!m_connection->isConnected())
396 return;
397
398 // qDebug() << "create Input Context" << m_connection->connection()->name();
399
400 if (m_improxy) {
401 delete m_improxy;
402 m_improxy = NULL;
403 }
404 m_improxy = new FcitxQtInputMethodProxy(m_connection->serviceName(), QLatin1String("/inputmethod"), *m_connection->connection(), this);
405
406 if (!m_improxy->isValid())
407 return;
408
409 QFileInfo info(QCoreApplication::applicationFilePath());
410 QDBusPendingReply< int, bool, uint, uint, uint, uint > result = m_improxy->CreateICv3(info.fileName(), QCoreApplication::applicationPid());
411 QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(result);
412 watcher->setProperty("wid", (qulonglong) w);
413 connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), this, SLOT(createInputContextFinished(QDBusPendingCallWatcher*)));
414 }
415
416 void QFcitxPlatformInputContext::createInputContextFinished(QDBusPendingCallWatcher* watcher)
417 {
418 WId w = watcher->property("wid").toULongLong();
419 FcitxQtICData* data = m_icMap.value(w);
420 if (!data)
421 return;
422
423 QDBusPendingReply< int, bool, uint, uint, uint, uint > result = *watcher;
424
425 do {
426 if (result.isError()) {
427 break;
428 }
429
430 if (!m_connection->isConnected())
431 break;
432
433 int id = qdbus_cast<int>(result.argumentAt(0));
434 QString path = QString("/inputcontext_%1").arg(id);
435 if (data->proxy) {
436 delete data->proxy;
437 }
438 data->proxy = new FcitxQtInputContextProxy(m_connection->serviceName(), path, *m_connection->connection(), this);
439 connect(data->proxy, SIGNAL(CommitString(QString)), this, SLOT(commitString(QString)));
440 connect(data->proxy, SIGNAL(ForwardKey(uint, uint, int)), this, SLOT(forwardKey(uint, uint, int)));
441 connect(data->proxy, SIGNAL(UpdateFormattedPreedit(FcitxQtFormattedPreeditList,int)), this, SLOT(updateFormattedPreedit(FcitxQtFormattedPreeditList,int)));
442 connect(data->proxy, SIGNAL(DeleteSurroundingText(int,uint)), this, SLOT(deleteSurroundingText(int,uint)));
443
444 if (data->proxy->isValid()) {
445 QWindow* window = qApp->focusWindow();
446 if (window && window->winId() == w)
447 data->proxy->FocusIn();
448 }
449
450 QFlags<FcitxCapacityFlags> flag;
451 flag |= CAPACITY_PREEDIT;
452 flag |= CAPACITY_FORMATTED_PREEDIT;
453 flag |= CAPACITY_CLIENT_UNFOCUS_COMMIT;
454 m_useSurroundingText = get_boolean_env("FCITX_QT_ENABLE_SURROUNDING_TEXT", true);
455 if (m_useSurroundingText)
456 flag |= CAPACITY_SURROUNDING_TEXT;
457
458 /*
459 * event loop will cause some problem, so we tries to use async way.
460 */
461 m_syncMode = get_boolean_env("FCITX_QT_USE_SYNC", false);
462
463 addCapacity(data, flag, true);
464 } while(0);
465 delete watcher;
466 }
467
468 void QFcitxPlatformInputContext::updateCapacity(FcitxQtICData* data)
469 {
470 if (!data->proxy || !data->proxy->isValid())
471 return;
472
473 QDBusPendingReply< void > result = data->proxy->SetCapacity((uint) data->capacity);
474 }
475
476 void QFcitxPlatformInputContext::commitString(const QString& str)
477 {
478 m_cursorPos = 0;
479 m_preeditList.clear();
480 m_commitPreedit.clear();
481 QObject *input = qApp->focusObject();
482 if (!input)
483 return;
484
485 QInputMethodEvent event;
486 event.setCommitString(str);
487 QCoreApplication::sendEvent(input, &event);
488 }
489
490 void QFcitxPlatformInputContext::updateFormattedPreedit(const FcitxQtFormattedPreeditList& preeditList, int cursorPos)
491 {
492 QObject *input = qApp->focusObject();
493 if (!input)
494 return;
495 if (cursorPos == m_cursorPos && preeditList == m_preeditList)
496 return;
497 m_preeditList = preeditList;
498 m_cursorPos = cursorPos;
499 QString str, commitStr;
500 int pos = 0;
501 QList<QInputMethodEvent::Attribute> attrList;
502 Q_FOREACH(const FcitxQtFormattedPreedit& preedit, preeditList)
503 {
504 str += preedit.string();
505 if (!(preedit.format() & MSG_DONOT_COMMIT_WHEN_UNFOCUS))
506 commitStr += preedit.string();
507 QTextCharFormat format;
508 if ((preedit.format() & MSG_NOUNDERLINE) == 0) {
509 format.setUnderlineStyle(QTextCharFormat::DashUnderline);
510 }
511 if (preedit.format() & MSG_HIGHLIGHT) {
512 QBrush brush;
513 QPalette palette;
514 palette = QGuiApplication::palette();
515 format.setBackground(QBrush(QColor(palette.color(QPalette::Active, QPalette::Highlight))));
516 format.setForeground(QBrush(QColor(palette.color(QPalette::Active, QPalette::HighlightedText))));
517 }
518 attrList.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, pos, preedit.string().length(), format));
519 pos += preedit.string().length();
520 }
521
522 QByteArray array = str.toUtf8();
523 array.truncate(cursorPos);
524 cursorPos = QString::fromUtf8(array).length();
525
526 attrList.append(QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, cursorPos, 1, 0));
527 m_preedit = str;
528 m_commitPreedit = commitStr;
529 QInputMethodEvent event(str, attrList);
530 QCoreApplication::sendEvent(input, &event);
531 update(Qt::ImCursorRectangle);
532 }
533
534 void QFcitxPlatformInputContext::deleteSurroundingText(int offset, uint nchar)
535 {
536 QObject *input = qApp->focusObject();
537 if (!input)
538 return;
539
540 QInputMethodEvent event;
541 event.setCommitString("", offset, nchar);
542 QCoreApplication::sendEvent(input, &event);
543 }
544
545 void QFcitxPlatformInputContext::forwardKey(uint keyval, uint state, int type)
546 {
547 QObject *input = qApp->focusObject();
548 if (input != NULL) {
549 key_filtered = true;
550 QKeyEvent *keyevent = createKeyEvent(keyval, state, type);
551 QCoreApplication::sendEvent(input, keyevent);
552 delete keyevent;
553 key_filtered = false;
554 }
555 }
556
557 void QFcitxPlatformInputContext::createICData(QWindow* w)
558 {
559 FcitxQtICData* data = m_icMap.value(w->winId());
560 if (!data) {
561 data = new FcitxQtICData;
562 m_icMap[w->winId()] = data;
563 m_windowToWidMap[w] = w->winId();
564 connect(w, SIGNAL(destroyed(QObject*)), this, SLOT(windowDestroyed(QObject*)));
565 }
566 createInputContext(w->winId());
567 }
568
569 QKeyEvent* QFcitxPlatformInputContext::createKeyEvent(uint keyval, uint state, int type)
570 {
571 Qt::KeyboardModifiers qstate = Qt::NoModifier;
572
573 int count = 1;
574 if (state & FcitxKeyState_Alt) {
575 qstate |= Qt::AltModifier;
576 count ++;
577 }
578
579 if (state & FcitxKeyState_Shift) {
580 qstate |= Qt::ShiftModifier;
581 count ++;
582 }
583
584 if (state & FcitxKeyState_Ctrl) {
585 qstate |= Qt::ControlModifier;
586 count ++;
587 }
588
589 int key;
590 symToKeyQt(keyval, key);
591
592 QKeyEvent* keyevent = new QKeyEvent(
593 (type == FCITX_PRESS_KEY) ? (QEvent::KeyPress) : (QEvent::KeyRelease),
594 key,
595 qstate,
596 QString(),
597 false,
598 count
599 );
600
601 return keyevent;
602 }
603
604 bool QFcitxPlatformInputContext::filterEvent(const QEvent* event)
605 {
606 do {
607 if (event->type() != QEvent::KeyPress && event->type() != QEvent::KeyRelease) {
608 break;
609 }
610
611 const QKeyEvent* keyEvent = static_cast<const QKeyEvent*>(event);
612 quint32 keyval = keyEvent->nativeVirtualKey();
613 quint32 keycode = keyEvent->nativeScanCode();
614 quint32 state = keyEvent->nativeModifiers();
615 bool press = keyEvent->type() == QEvent::KeyPress;
616
617 if (key_filtered) {
618 break;
619 }
620
621 if (!inputMethodAccepted())
622 break;
623
624 QObject *input = qApp->focusObject();
625
626 if (!input) {
627 break;
628 }
629
630 FcitxQtInputContextProxy* proxy = validICByWindow(qApp->focusWindow());
631
632 if (!proxy) {
633 if (filterEventFallback(keyval, keycode, state, press)) {
634 return true;
635 } else {
636 break;
637 }
638 }
639
640 proxy->FocusIn();
641
642 QDBusPendingReply< int > result = proxy->ProcessKeyEvent(
643 keyval,
644 keycode,
645 state,
646 (press) ? FCITX_PRESS_KEY : FCITX_RELEASE_KEY,
647 QDateTime::currentDateTime().toTime_t()
648 );
649 do {
650 QCoreApplication::processEvents (QEventLoop::WaitForMoreEvents);
651 } while (QCoreApplication::hasPendingEvents () || !result.isFinished ());
652
653 if (!m_connection->isConnected() || !result.isFinished() || result.isError() || result.value() <= 0) {
654 if (filterEventFallback(keyval, keycode, state, press)) {
655 return true;
656 } else {
657 break;
658 }
659 } else {
660 update(Qt::ImCursorRectangle);
661 return true;
662 }
663 } while(0);
664 return QPlatformInputContext::filterEvent(event);
665 }
666
667 bool QFcitxPlatformInputContext::filterEventFallback(uint keyval, uint keycode, uint state, bool press)
668 {
669 Q_UNUSED(keycode);
670 if (processCompose(keyval, state, (press) ? FCITX_PRESS_KEY : FCITX_RELEASE_KEY)) {
671 return true;
672 }
673 return false;
674 }
675
676 FcitxQtInputContextProxy* QFcitxPlatformInputContext::validIC()
677 {
678 if (m_icMap.isEmpty()) {
679 return 0;
680 }
681 QWindow* window = qApp->focusWindow();
682 return validICByWindow(window);
683 }
684
685 FcitxQtInputContextProxy* QFcitxPlatformInputContext::validICByWId(WId wid)
686 {
687 if (m_icMap.isEmpty()) {
688 return 0;
689 }
690 FcitxQtICData* icData = m_icMap.value(wid);
691 if (!icData)
692 return 0;
693 if (icData->proxy.isNull()) {
694 return 0;
695 } else if (icData->proxy->isValid()) {
696 return icData->proxy.data();
697 }
698 return 0;
699 }
700
701 FcitxQtInputContextProxy* QFcitxPlatformInputContext::validICByWindow(QWindow* w)
702 {
703 if (!w) {
704 return 0;
705 }
706
707 if (m_icMap.isEmpty()) {
708 return 0;
709 }
710 return validICByWId(w->winId());
711 }
712
713
714 bool QFcitxPlatformInputContext::processCompose(uint keyval, uint state, FcitxKeyEventType event)
715 {
716 Q_UNUSED(state);
717 int i;
718
719 if (event == FCITX_RELEASE_KEY)
720 return false;
721
722 for (i = 0; fcitx_compose_ignore[i] != XK_VoidSymbol; i++) {
723 if (keyval == fcitx_compose_ignore[i])
724 return false;
725 }
726
727 m_compose_buffer[m_n_compose ++] = keyval;
728 m_compose_buffer[m_n_compose] = 0;
729
730 if (checkCompactTable(&fcitx_compose_table_compact)) {
731 // qDebug () << "checkCompactTable ->true";
732 return true;
733 }
734
735 if (checkAlgorithmically()) {
736 // qDebug () << "checkAlgorithmically ->true";
737 return true;
738 }
739
740 if (m_n_compose > 1) {
741 m_compose_buffer[0] = 0;
742 m_n_compose = 0;
743 return true;
744 } else {
745 m_compose_buffer[0] = 0;
746 m_n_compose = 0;
747 return false;
748 }
749 }
750
751 #define IS_DEAD_KEY(k) \
752 ((k) >= XK_dead_grave && (k) <= (XK_dead_dasia+1))
753
754 bool QFcitxPlatformInputContext::checkAlgorithmically()
755 {
756 int i;
757 quint32 combination_buffer[MAX_COMPOSE_LEN];
758
759 if (m_n_compose >= MAX_COMPOSE_LEN)
760 return false;
761
762 for (i = 0; i < m_n_compose && IS_DEAD_KEY(m_compose_buffer[i]); i++);
763 if (i == m_n_compose)
764 return true;
765
766 if (i > 0 && i == m_n_compose - 1) {
767 combination_buffer[0] = FcitxKeySymToUnicode(m_compose_buffer[i]);
768 combination_buffer[m_n_compose] = 0;
769 i--;
770 while (i >= 0) {
771 switch (m_compose_buffer[i]) {
772 #define CASE(keysym, unicode) \
773 case XK_dead_##keysym: combination_buffer[i + 1] = unicode; break
774 CASE(grave, 0x0300);
775 CASE(acute, 0x0301);
776 CASE(circumflex, 0x0302);
777 CASE(tilde, 0x0303); /* Also used with perispomeni, 0x342. */
778 CASE(macron, 0x0304);
779 CASE(breve, 0x0306);
780 CASE(abovedot, 0x0307);
781 CASE(diaeresis, 0x0308);
782 CASE(hook, 0x0309);
783 CASE(abovering, 0x030A);
784 CASE(doubleacute, 0x030B);
785 CASE(caron, 0x030C);
786 CASE(abovecomma, 0x0313); /* Equivalent to psili */
787 CASE(abovereversedcomma, 0x0314); /* Equivalent to dasia */
788 CASE(horn, 0x031B); /* Legacy use for psili, 0x313 (or 0x343). */
789 CASE(belowdot, 0x0323);
790 CASE(cedilla, 0x0327);
791 CASE(ogonek, 0x0328); /* Legacy use for dasia, 0x314.*/
792 CASE(iota, 0x0345);
793 CASE(voiced_sound, 0x3099); /* Per Markus Kuhn keysyms.txt file. */
794 CASE(semivoiced_sound, 0x309A); /* Per Markus Kuhn keysyms.txt file. */
795 /* The following cases are to be removed once xkeyboard-config,
796 * xorg are fully updated.
797 **/
798 /* Workaround for typo in 1.4.x xserver-xorg */
799 case 0xfe66:
800 combination_buffer[i + 1] = 0x314;
801 break;
802 /* CASE (dasia, 0x314); */
803 /* CASE (perispomeni, 0x342); */
804 /* CASE (psili, 0x343); */
805 #undef CASE
806 default:
807 combination_buffer[i + 1] = FcitxKeySymToUnicode(m_compose_buffer[i]);
808 }
809 i--;
810 }
811
812 /* If the buffer normalizes to a single character,
813 * then modify the order of combination_buffer accordingly, if necessary,
814 * and return TRUE.
815 **/
816 #if 0
817 if (check_normalize_nfc(combination_buffer, m_n_compose)) {
818 gunichar value;
819 combination_utf8 = g_ucs4_to_utf8(combination_buffer, -1, NULL, NULL, NULL);
820 nfc = g_utf8_normalize(combination_utf8, -1, G_NORMALIZE_NFC);
821
822 value = g_utf8_get_char(nfc);
823 gtk_im_context_simple_commit_char(GTK_IM_CONTEXT(context_simple), value);
824 context_simple->compose_buffer[0] = 0;
825
826 g_free(combination_utf8);
827 g_free(nfc);
828
829 return TRUE;
830 }
831 #endif
832 QString s(QString::fromUcs4(combination_buffer, m_n_compose));
833 s = s.normalized(QString::NormalizationForm_C);
834
835 // qDebug () << "combination_buffer = " << QString::fromUcs4(combination_buffer, m_n_compose) << "m_n_compose" << m_n_compose;
836 // qDebug () << "result = " << s << "i = " << s.length();
837
838 if (s.length() == 1) {
839 commitString(QString(s[0]));
840 m_compose_buffer[0] = 0;
841 m_n_compose = 0;
842 return true;
843 }
844 }
845 return false;
846 }
847
848
849 bool
850 QFcitxPlatformInputContext::checkCompactTable(const FcitxComposeTableCompact *table)
851 {
852 int row_stride;
853 const quint32 *seq_index;
854 const quint32 *seq;
855 int i;
856
857 /* Will never match, if the sequence in the compose buffer is longer
858 * than the sequences in the table. Further, compare_seq (key, val)
859 * will overrun val if key is longer than val. */
860 if (m_n_compose > table->max_seq_len)
861 return false;
862
863 seq_index = (const quint32 *)bsearch(m_compose_buffer,
864 table->data, table->n_index_size,
865 sizeof(quint32) * table->n_index_stride,
866 compare_seq_index);
867
868 if (!seq_index) {
869 return false;
870 }
871
872 if (seq_index && m_n_compose == 1) {
873 return true;
874 }
875
876 seq = NULL;
877 for (i = m_n_compose - 1; i < table->max_seq_len; i++) {
878 row_stride = i + 1;
879
880 if (seq_index[i + 1] - seq_index[i] > 0) {
881 seq = (const quint32 *) bsearch(m_compose_buffer + 1,
882 table->data + seq_index[i], (seq_index[i + 1] - seq_index[i]) / row_stride,
883 sizeof(quint32) * row_stride,
884 compare_seq);
885 if (seq) {
886 if (i == m_n_compose - 1)
887 break;
888 else {
889 return true;
890 }
891 }
892 }
893 }
894
895 if (!seq) {
896 return false;
897 } else {
898 uint value;
899 value = seq[row_stride - 1];
900 commitString(QString(QChar(value)));
901 m_compose_buffer[0] = 0;
902 m_n_compose = 0;
903 return true;
904 }
905 return false;
906 }
907
908 // kate: indent-mode cstyle; space-indent on; indent-width 0;
0 /***************************************************************************
1 * Copyright (C) 2012~2013 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #ifndef QFCITXPLATFORMINPUTCONTEXT_H
20 #define QFCITXPLATFORMINPUTCONTEXT_H
21
22 #include <qpa/qplatforminputcontext.h>
23 #include <QWindow>
24 #include <QDBusConnection>
25 #include <QDBusServiceWatcher>
26 #include <QPointer>
27 #include <QFileSystemWatcher>
28 #include <QRect>
29 #include "fcitxqtformattedpreedit.h"
30 #include "fcitxqtinputcontextproxy.h"
31
32 #define MAX_COMPOSE_LEN 7
33
34 class FcitxQtConnection;
35 class QFileSystemWatcher;
36 enum FcitxKeyEventType {
37 FCITX_PRESS_KEY,
38 FCITX_RELEASE_KEY
39 };
40
41 enum FcitxCapacityFlags {
42 CAPACITY_NONE = 0,
43 CAPACITY_CLIENT_SIDE_UI = (1 << 0),
44 CAPACITY_PREEDIT = (1 << 1),
45 CAPACITY_CLIENT_SIDE_CONTROL_STATE = (1 << 2),
46 CAPACITY_PASSWORD = (1 << 3),
47 CAPACITY_FORMATTED_PREEDIT = (1 << 4),
48 CAPACITY_CLIENT_UNFOCUS_COMMIT = (1 << 5),
49 CAPACITY_SURROUNDING_TEXT = (1 << 6),
50 CAPACITY_EMAIL = (1 << 7),
51 CAPACITY_DIGIT = (1 << 8),
52 CAPACITY_UPPERCASE = (1 << 9),
53 CAPACITY_LOWERCASE = (1 << 10),
54 CAPACITY_NOAUTOUPPERCASE = (1 << 11),
55 CAPACITY_URL = (1 << 12),
56 CAPACITY_DIALABLE = (1 << 13),
57 CAPACITY_NUMBER = (1 << 14),
58 CAPACITY_NO_ON_SCREEN_KEYBOARD = (1 << 15),
59 CAPACITY_SPELLCHECK = (1 << 16),
60 CAPACITY_NO_SPELLCHECK = (1 << 17),
61 CAPACITY_WORD_COMPLETION = (1 << 18),
62 CAPACITY_UPPERCASE_WORDS = (1 << 19),
63 CAPACITY_UPPERCASE_SENTENCES = (1 << 20),
64 CAPACITY_ALPHA = (1 << 21),
65 CAPACITY_NAME = (1 << 22)
66 } ;
67
68 /** message type and flags */
69 enum FcitxMessageType {
70 MSG_TYPE_FIRST = 0,
71 MSG_TYPE_LAST = 6,
72 MSG_TIPS = 0, /**< Hint Text */
73 MSG_INPUT = 1, /**< User Input */
74 MSG_INDEX = 2, /**< Index Number */
75 MSG_FIRSTCAND = 3, /**< First candidate */
76 MSG_USERPHR = 4, /**< User Phrase */
77 MSG_CODE = 5, /**< Typed character */
78 MSG_OTHER = 6, /**< Other Text */
79 MSG_NOUNDERLINE = (1 << 3), /**< backward compatible, no underline is a flag */
80 MSG_HIGHLIGHT = (1 << 4), /**< highlight the preedit */
81 MSG_DONOT_COMMIT_WHEN_UNFOCUS = (1 << 5), /**< backward compatible */
82 MSG_REGULAR_MASK = 0x7 /**< regular color type mask */
83 };
84
85
86 enum FcitxKeyState {
87 FcitxKeyState_None = 0,
88 FcitxKeyState_Shift = 1 << 0,
89 FcitxKeyState_CapsLock = 1 << 1,
90 FcitxKeyState_Ctrl = 1 << 2,
91 FcitxKeyState_Alt = 1 << 3,
92 FcitxKeyState_Alt_Shift = FcitxKeyState_Alt | FcitxKeyState_Shift,
93 FcitxKeyState_Ctrl_Shift = FcitxKeyState_Ctrl | FcitxKeyState_Shift,
94 FcitxKeyState_Ctrl_Alt = FcitxKeyState_Ctrl | FcitxKeyState_Alt,
95 FcitxKeyState_Ctrl_Alt_Shift = FcitxKeyState_Ctrl | FcitxKeyState_Alt | FcitxKeyState_Shift,
96 FcitxKeyState_NumLock = 1 << 4,
97 FcitxKeyState_Super = 1 << 6,
98 FcitxKeyState_ScrollLock = 1 << 7,
99 FcitxKeyState_MousePressed = 1 << 8,
100 FcitxKeyState_HandledMask = 1 << 24,
101 FcitxKeyState_IgnoredMask = 1 << 25,
102 FcitxKeyState_Super2 = 1 << 26,
103 FcitxKeyState_Hyper = 1 << 27,
104 FcitxKeyState_Meta = 1 << 28,
105 FcitxKeyState_UsedMask = 0x5c001fff
106 };
107
108 struct FcitxQtICData {
109 FcitxQtICData() : capacity(0), proxy(0), surroundingAnchor(-1), surroundingCursor(-1) {}
110 ~FcitxQtICData() {
111 if (proxy && proxy->isValid()) {
112 proxy->DestroyIC();
113 delete proxy;
114 }
115 }
116 QFlags<FcitxCapacityFlags> capacity;
117 QPointer<FcitxQtInputContextProxy> proxy;
118 QRect rect;
119 QString surroundingText;
120 int surroundingAnchor;
121 int surroundingCursor;
122 };
123
124 class FcitxQtInputMethodProxy;
125
126 class QFcitxPlatformInputContext : public QPlatformInputContext
127 {
128 Q_OBJECT
129 public:
130 QFcitxPlatformInputContext();
131 virtual ~QFcitxPlatformInputContext();
132
133 virtual bool filterEvent(const QEvent* event);
134 virtual bool isValid() const;
135 virtual void invokeAction(QInputMethod::Action , int cursorPosition);
136 virtual void reset();
137 virtual void commit();
138 virtual void update(Qt::InputMethodQueries quries );
139 virtual void setFocusObject(QObject* object);
140
141
142 public Q_SLOTS:
143 void cursorRectChanged();
144 void commitString(const QString& str);
145 void updateFormattedPreedit(const FcitxQtFormattedPreeditList& preeditList, int cursorPos);
146 void deleteSurroundingText(int offset, uint nchar);
147 void forwardKey(uint keyval, uint state, int type);
148 void createInputContextFinished(QDBusPendingCallWatcher* watcher);
149 void connected();
150 void cleanUp();
151 void windowDestroyed(QObject* object);
152
153
154 private:
155 void createInputContext(WId w);
156 bool processCompose(uint keyval, uint state, FcitxKeyEventType event);
157 bool checkAlgorithmically();
158 bool checkCompactTable(const struct _FcitxComposeTableCompact *table);
159 QKeyEvent* createKeyEvent(uint keyval, uint state, int type);
160
161
162 void addCapacity(FcitxQtICData* data, QFlags<FcitxCapacityFlags> capacity, bool forceUpdate = false)
163 {
164 QFlags< FcitxCapacityFlags > newcaps = data->capacity | capacity;
165 if (data->capacity != newcaps || forceUpdate) {
166 data->capacity = newcaps;
167 updateCapacity(data);
168 }
169 }
170
171 void removeCapacity(FcitxQtICData* data, QFlags<FcitxCapacityFlags> capacity, bool forceUpdate = false)
172 {
173 QFlags< FcitxCapacityFlags > newcaps = data->capacity & (~capacity);
174 if (data->capacity != newcaps || forceUpdate) {
175 data->capacity = newcaps;
176 updateCapacity(data);
177 }
178 }
179
180 void updateCapacity(FcitxQtICData* data);
181 void commitPreedit();
182 void createICData(QWindow* w);
183 FcitxQtInputContextProxy* validIC();
184 FcitxQtInputContextProxy* validICByWindow(QWindow* window);
185 FcitxQtInputContextProxy* validICByWId(WId wid);
186 bool filterEventFallback(uint keyval, uint keycode, uint state, bool press);
187
188 FcitxQtInputMethodProxy* m_improxy;
189 uint m_compose_buffer[MAX_COMPOSE_LEN + 1];
190 int m_n_compose;
191 QString m_preedit;
192 QString m_commitPreedit;
193 FcitxQtFormattedPreeditList m_preeditList;
194 int m_cursorPos;
195 bool m_useSurroundingText;
196 bool m_syncMode;
197 FcitxQtConnection* m_connection;
198 QString m_lastSurroundingText;
199 int m_lastSurroundingAnchor;
200 int m_lastSurroundingCursor;
201 QHash<WId, FcitxQtICData*> m_icMap;
202 QHash<QObject*, WId> m_windowToWidMap;
203 WId m_lastWId;
204 bool m_destroy;
205 };
206
207 #endif // QFCITXPLATFORMINPUTCONTEXT_H
0 /***************************************************************************
1 * Copyright (C) 2012~2013 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #include "utils.h"
20 /** check utf8 character */
21 #define ISUTF8_CB(c) (((c)&0xc0) == 0x80)
22
23 #define CONT(i) ISUTF8_CB(in[i])
24 #define VAL(i, s) ((in[i]&0x3f) << s)
25
26 #define UTF8_LENGTH(Char) \
27 ((Char) < 0x80 ? 1 : \
28 ((Char) < 0x800 ? 2 : \
29 ((Char) < 0x10000 ? 3 : \
30 ((Char) < 0x200000 ? 4 : \
31 ((Char) < 0x4000000 ? 5 : 6)))))
32
33 #define UNICODE_VALID(Char) \
34 ((Char) < 0x110000 && \
35 (((Char) & 0xFFFFF800) != 0xD800) && \
36 ((Char) < 0xFDD0 || (Char) > 0xFDEF) && \
37 ((Char) & 0xFFFE) != 0xFFFE)
38
39 int
40 _utf8_get_char_extended(const char *s,
41 int max_len)
42 {
43 const unsigned char*p = (const unsigned char*)s;
44 int i, len;
45 unsigned int wc = (unsigned char) * p;
46
47 if (wc < 0x80) {
48 return wc;
49 } else if (wc < 0xc0) {
50 return (unsigned int) - 1;
51 } else if (wc < 0xe0) {
52 len = 2;
53 wc &= 0x1f;
54 } else if (wc < 0xf0) {
55 len = 3;
56 wc &= 0x0f;
57 } else if (wc < 0xf8) {
58 len = 4;
59 wc &= 0x07;
60 } else if (wc < 0xfc) {
61 len = 5;
62 wc &= 0x03;
63 } else if (wc < 0xfe) {
64 len = 6;
65 wc &= 0x01;
66 } else {
67 return (unsigned int) - 1;
68 }
69
70 if (max_len >= 0 && len > max_len) {
71 for (i = 1; i < max_len; i++) {
72 if ((((unsigned char *)p)[i] & 0xc0) != 0x80)
73 return (unsigned int) - 1;
74 }
75
76 return (unsigned int) - 2;
77 }
78
79 for (i = 1; i < len; ++i) {
80 unsigned int ch = ((unsigned char *)p)[i];
81
82 if ((ch & 0xc0) != 0x80) {
83 if (ch)
84 return (unsigned int) - 1;
85 else
86 return (unsigned int) - 2;
87 }
88
89 wc <<= 6;
90
91 wc |= (ch & 0x3f);
92 }
93
94 if (UTF8_LENGTH(wc) != len)
95 return (unsigned int) - 1;
96
97 return wc;
98 }
99
100 int _utf8_get_char_validated(const char *p,
101 int max_len)
102 {
103 int result;
104
105 if (max_len == 0)
106 return -2;
107
108 result = _utf8_get_char_extended(p, max_len);
109
110 if (result & 0x80000000)
111 return result;
112 else if (!UNICODE_VALID(result))
113 return -1;
114 else
115 return result;
116 }
117
118
119 char *
120 _utf8_get_char(const char *i, uint32_t *chr)
121 {
122 const unsigned char* in = (const unsigned char *)i;
123 if (!(in[0] & 0x80)) {
124 *(chr) = *(in);
125 return (char *)in + 1;
126 }
127
128 /* 2-byte, 0x80-0x7ff */
129 if ((in[0] & 0xe0) == 0xc0 && CONT(1)) {
130 *chr = ((in[0] & 0x1f) << 6) | VAL(1, 0);
131 return (char *)in + 2;
132 }
133
134 /* 3-byte, 0x800-0xffff */
135 if ((in[0] & 0xf0) == 0xe0 && CONT(1) && CONT(2)) {
136 *chr = ((in[0] & 0xf) << 12) | VAL(1, 6) | VAL(2, 0);
137 return (char *)in + 3;
138 }
139
140 /* 4-byte, 0x10000-0x1FFFFF */
141 if ((in[0] & 0xf8) == 0xf0 && CONT(1) && CONT(2) && CONT(3)) {
142 *chr = ((in[0] & 0x7) << 18) | VAL(1, 12) | VAL(2, 6) | VAL(3, 0);
143 return (char *)in + 4;
144 }
145
146 /* 5-byte, 0x200000-0x3FFFFFF */
147 if ((in[0] & 0xfc) == 0xf8 && CONT(1) && CONT(2) && CONT(3) && CONT(4)) {
148 *chr = ((in[0] & 0x3) << 24) | VAL(1, 18) | VAL(2, 12) | VAL(3, 6) | VAL(4, 0);
149 return (char *)in + 5;
150 }
151
152 /* 6-byte, 0x400000-0x7FFFFFF */
153 if ((in[0] & 0xfe) == 0xfc && CONT(1) && CONT(2) && CONT(3) && CONT(4) && CONT(5)) {
154 *chr = ((in[0] & 0x1) << 30) | VAL(1, 24) | VAL(2, 18) | VAL(3, 12) | VAL(4, 6) | VAL(5, 0);
155 return (char *)in + 6;
156 }
157
158 *chr = *in;
159
160 return (char *)in + 1;
161 }
162
163
164 int _utf8_check_string(const char *s)
165 {
166 while (*s) {
167 uint32_t chr;
168
169 if (_utf8_get_char_validated(s, 6) < 0)
170 return 0;
171
172 s = _utf8_get_char(s, &chr);
173 }
174
175 return 1;
176 }
0 /***************************************************************************
1 * Copyright (C) 2012~2013 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #ifndef UTILS_H
20 #define UTILS_H
21
22 #include <stdint.h>
23
24 int
25 _utf8_get_char_extended(const char *s,
26 int max_len);
27 int _utf8_get_char_validated(const char *p,
28 int max_len);
29 char *
30 _utf8_get_char(const char *i, uint32_t *chr);
31 int _utf8_check_string(const char *s);
32
33
34 #endif // UTILS_H
+0
-40
src/CMakeLists.txt less more
0 include_directories(${Qt5Core_INCLUDE_DIRS}
1 ${Qt5Gui_INCLUDE_DIRS}
2 ${Qt5DBus_INCLUDE_DIRS}
3 )
4
5 find_path(Qt5Gui_INCLUDE_DIRECTORY
6 NAMES QtGuiVersion
7 HINTS ${Qt5Gui_INCLUDE_DIRS})
8
9 include_directories(${Qt5Gui_INCLUDE_DIRECTORY}/${Qt5Gui_VERSION}/QtGui)
10
11
12 set(plugin_SRCS
13 qfcitxplatforminputcontext.cpp
14 keyuni.cpp
15 main.cpp
16 utils.cpp
17 )
18
19 set(plugin_MOC_HDRS
20 qfcitxplatforminputcontext.h
21 main.h
22 )
23
24 qt5_wrap_cpp(plugin_MOCS ${plugin_MOC_HDRS})
25
26 add_library(fcitxplatforminputcontextplugin MODULE ${plugin_SRCS} ${plugin_MOCS})
27 set_target_properties(fcitxplatforminputcontextplugin PROPERTIES
28 COMPILE_FLAGS "-fvisibility=hidden"
29 LINK_FLAGS "-Wl,--no-undefined"
30 )
31
32 target_link_libraries(fcitxplatforminputcontextplugin
33 ${Qt5Core_LIBRARIES}
34 ${Qt5Gui_LIBRARIES}
35 ${Qt5DBus_LIBRARIES}
36 fcitx-qt5
37 )
38
39 install(TARGETS fcitxplatforminputcontextplugin DESTINATION ${_Qt5_PLUGIN_INSTALL_DIR}/platforminputcontexts)
+0
-4459
src/fcitx-compose-data.h less more
0 /***************************************************************************
1 * Copyright (C) 2012~2012 by CSSlayer *
2 * wengxt@gmail.com *
3 * *
4 * This program is free software; you can redistribute it and/or modify *
5 * it under the terms of the GNU General Public License as published by *
6 * the Free Software Foundation; either version 2 of the License, or *
7 * (at your option) any later version. *
8 * *
9 * This program is distributed in the hope that it will be useful, *
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
12 * GNU General Public License for more details. *
13 * *
14 * You should have received a copy of the GNU General Public License *
15 * along with this program; if not, write to the *
16 * Free Software Foundation, Inc., *
17 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
18 ***************************************************************************/
19
20 #ifndef __FcitxKey_COMPOSE_DATA_H_
21 #define __FcitxKey_COMPOSE_DATA_H_
22
23 #ifndef XK_TECHNICAL
24 #define XK_TECHNICAL
25 #endif
26
27 #ifndef XK_APL
28 #define XK_APL
29 #endif
30
31 #include <X11/keysym.h>
32
33 static const quint32 fcitx_compose_seqs_compact[] = {
34 XK_dead_stroke, 138, 226, 235, 235, 235,
35 XK_Greek_accentdieresis, 235, 239, 239, 239, 239,
36 XK_dead_grave, 239, 299, 386, 598, 598,
37 XK_dead_acute, 598, 664, 760, 1036, 1036,
38 XK_dead_circumflex, 1036, 1176, 1176, 1376, 1376,
39 XK_dead_tilde, 1376, 1458, 1521, 1661, 1661,
40 XK_dead_macron, 1661, 1707, 1707, 1779, 1779,
41 XK_dead_breve, 1779, 1833, 1833, 1857, 1857,
42 XK_dead_abovedot, 1857, 1887, 1890, 1922, 1922,
43 XK_dead_diaeresis, 1922, 2010, 2019, 2043, 2043,
44 XK_dead_abovering, 2043, 2053, 2053, 2053, 2053,
45 XK_dead_doubleacute, 2053, 2063, 2063, 2063, 2063,
46 XK_dead_caron, 2063, 2089, 2089, 2097, 2097,
47 XK_dead_cedilla, 2097, 2111, 2111, 2111, 2111,
48 XK_dead_ogonek, 2111, 2121, 2121, 2121, 2121,
49 XK_dead_iota, 2121, 2143, 2242, 2674, 3334,
50 XK_dead_voiced_sound, 3334, 3380, 3380, 3380, 3380,
51 XK_dead_semivoiced_sound, 3380, 3390, 3390, 3390, 3390,
52 XK_dead_belowdot, 3390, 3400, 3400, 3416, 3416,
53 XK_dead_hook, 3416, 3494, 3494, 3550, 3550,
54 XK_dead_psili, 3550, 3578, 3578, 3578, 3578,
55 XK_dead_dasia, 3578, 3610, 3610, 3610, 3610,
56 XK_Multi_key, 3610, 3610, 9589, 13297, 15157,
57 XK_space, 0x002F,
58 XK_2, 0x01BB,
59 XK_A, 0x023A,
60 XK_B, 0x0243,
61 XK_C, 0x023B,
62 XK_D, 0x0110,
63 XK_E, 0x0246,
64 XK_G, 0x01E4,
65 XK_H, 0x0126,
66 XK_I, 0x0197,
67 XK_J, 0x0248,
68 XK_L, 0x0141,
69 XK_O, 0x00D8,
70 XK_P, 0x2C63,
71 XK_R, 0x024C,
72 XK_T, 0x0166,
73 XK_U, 0x0244,
74 XK_Y, 0x024E,
75 XK_Z, 0x01B5,
76 XK_a, 0x2C65,
77 XK_b, 0x0180,
78 XK_c, 0x023C,
79 XK_d, 0x0111,
80 XK_e, 0x0247,
81 XK_g, 0x01E5,
82 XK_h, 0x0127,
83 XK_i, 0x0268,
84 XK_j, 0x0249,
85 XK_l, 0x0142,
86 XK_o, 0x00F8,
87 XK_p, 0x1D7D,
88 XK_r, 0x024D,
89 XK_t, 0x0167,
90 XK_u, 0x0289,
91 XK_y, 0x024F,
92 XK_z, 0x01B6,
93 XK_nobreakspace, 0x0338,
94 XK_Oacute, 0x01FE,
95 XK_oacute, 0x01FF,
96 0x0237, 0x025F,
97 0x0269, 0x1D7C,
98 XK_dead_stroke, 0x002F,
99 XK_lessthanequal, 0x2270,
100 XK_greaterthanequal, 0x2271,
101 XK_dead_acute, XK_O, 0x01FE,
102 XK_dead_acute, XK_o, 0x01FF,
103 XK_dead_abovedot, XK_j, 0x025F,
104 XK_Greek_iota, 0x0390,
105 XK_Greek_upsilon, 0x03B0,
106 XK_space, 0x0060,
107 XK_V, 0x01DB,
108 XK_v, 0x01DC,
109 XK_Abreve, 0x1EB0,
110 XK_abreve, 0x1EB1,
111 XK_Emacron, 0x1E14,
112 XK_emacron, 0x1E15,
113 XK_Omacron, 0x1E50,
114 XK_omacron, 0x1E51,
115 XK_Cyrillic_ie, 0x0450,
116 XK_Cyrillic_i, 0x045D,
117 XK_Cyrillic_IE, 0x0400,
118 XK_Cyrillic_I, 0x040D,
119 XK_Greek_iotadieresis, 0x1FD2,
120 XK_Greek_upsilondieresis, 0x1FE2,
121 XK_Greek_ALPHA, 0x1FBA,
122 XK_Greek_EPSILON, 0x1FC8,
123 XK_Greek_ETA, 0x1FCA,
124 XK_Greek_IOTA, 0x1FDA,
125 XK_Greek_OMICRON, 0x1FF8,
126 XK_Greek_UPSILON, 0x1FEA,
127 XK_Greek_OMEGA, 0x1FFA,
128 XK_Greek_alpha, 0x1F70,
129 XK_Greek_epsilon, 0x1F72,
130 XK_Greek_eta, 0x1F74,
131 XK_Greek_iota, 0x1F76,
132 XK_Greek_omicron, 0x1F78,
133 XK_Greek_upsilon, 0x1F7A,
134 XK_Greek_omega, 0x1F7C,
135 XK_dead_grave, 0x0060,
136 XK_dead_diaeresis, XK_Greek_iota, 0x1FD2,
137 XK_dead_diaeresis, XK_Greek_upsilon, 0x1FE2,
138 XK_dead_psili, XK_Greek_ALPHA, 0x1F0A,
139 XK_dead_psili, XK_Greek_EPSILON, 0x1F1A,
140 XK_dead_psili, XK_Greek_ETA, 0x1F2A,
141 XK_dead_psili, XK_Greek_IOTA, 0x1F3A,
142 XK_dead_psili, XK_Greek_OMICRON, 0x1F4A,
143 XK_dead_psili, XK_Greek_OMEGA, 0x1F6A,
144 XK_dead_psili, XK_Greek_alpha, 0x1F02,
145 XK_dead_psili, XK_Greek_epsilon, 0x1F12,
146 XK_dead_psili, XK_Greek_eta, 0x1F22,
147 XK_dead_psili, XK_Greek_iota, 0x1F32,
148 XK_dead_psili, XK_Greek_omicron, 0x1F42,
149 XK_dead_psili, XK_Greek_upsilon, 0x1F52,
150 XK_dead_psili, XK_Greek_omega, 0x1F62,
151 XK_dead_dasia, XK_Greek_ALPHA, 0x1F0B,
152 XK_dead_dasia, XK_Greek_EPSILON, 0x1F1B,
153 XK_dead_dasia, XK_Greek_ETA, 0x1F2B,
154 XK_dead_dasia, XK_Greek_IOTA, 0x1F3B,
155 XK_dead_dasia, XK_Greek_OMICRON, 0x1F4B,
156 XK_dead_dasia, XK_Greek_UPSILON, 0x1F5B,
157 XK_dead_dasia, XK_Greek_OMEGA, 0x1F6B,
158 XK_dead_dasia, XK_Greek_alpha, 0x1F03,
159 XK_dead_dasia, XK_Greek_epsilon, 0x1F13,
160 XK_dead_dasia, XK_Greek_eta, 0x1F23,
161 XK_dead_dasia, XK_Greek_iota, 0x1F33,
162 XK_dead_dasia, XK_Greek_omicron, 0x1F43,
163 XK_dead_dasia, XK_Greek_upsilon, 0x1F53,
164 XK_dead_dasia, XK_Greek_omega, 0x1F63,
165 XK_Multi_key, XK_quotedbl, XK_U, 0x01DB,
166 XK_Multi_key, XK_quotedbl, XK_u, 0x01DC,
167 XK_Multi_key, XK_quotedbl, XK_Greek_iota, 0x1FD2,
168 XK_Multi_key, XK_quotedbl, XK_Greek_upsilon, 0x1FE2,
169 XK_Multi_key, XK_parenleft, XK_Greek_ALPHA, 0x1F0B,
170 XK_Multi_key, XK_parenleft, XK_Greek_EPSILON, 0x1F1B,
171 XK_Multi_key, XK_parenleft, XK_Greek_ETA, 0x1F2B,
172 XK_Multi_key, XK_parenleft, XK_Greek_IOTA, 0x1F3B,
173 XK_Multi_key, XK_parenleft, XK_Greek_OMICRON, 0x1F4B,
174 XK_Multi_key, XK_parenleft, XK_Greek_UPSILON, 0x1F5B,
175 XK_Multi_key, XK_parenleft, XK_Greek_OMEGA, 0x1F6B,
176 XK_Multi_key, XK_parenleft, XK_Greek_alpha, 0x1F03,
177 XK_Multi_key, XK_parenleft, XK_Greek_epsilon, 0x1F13,
178 XK_Multi_key, XK_parenleft, XK_Greek_eta, 0x1F23,
179 XK_Multi_key, XK_parenleft, XK_Greek_iota, 0x1F33,
180 XK_Multi_key, XK_parenleft, XK_Greek_omicron, 0x1F43,
181 XK_Multi_key, XK_parenleft, XK_Greek_upsilon, 0x1F53,
182 XK_Multi_key, XK_parenleft, XK_Greek_omega, 0x1F63,
183 XK_Multi_key, XK_parenright, XK_Greek_ALPHA, 0x1F0A,
184 XK_Multi_key, XK_parenright, XK_Greek_EPSILON, 0x1F1A,
185 XK_Multi_key, XK_parenright, XK_Greek_ETA, 0x1F2A,
186 XK_Multi_key, XK_parenright, XK_Greek_IOTA, 0x1F3A,
187 XK_Multi_key, XK_parenright, XK_Greek_OMICRON, 0x1F4A,
188 XK_Multi_key, XK_parenright, XK_Greek_OMEGA, 0x1F6A,
189 XK_Multi_key, XK_parenright, XK_Greek_alpha, 0x1F02,
190 XK_Multi_key, XK_parenright, XK_Greek_epsilon, 0x1F12,
191 XK_Multi_key, XK_parenright, XK_Greek_eta, 0x1F22,
192 XK_Multi_key, XK_parenright, XK_Greek_iota, 0x1F32,
193 XK_Multi_key, XK_parenright, XK_Greek_omicron, 0x1F42,
194 XK_Multi_key, XK_parenright, XK_Greek_upsilon, 0x1F52,
195 XK_Multi_key, XK_parenright, XK_Greek_omega, 0x1F62,
196 XK_Multi_key, XK_plus, XK_O, 0x1EDC,
197 XK_Multi_key, XK_plus, XK_U, 0x1EEA,
198 XK_Multi_key, XK_plus, XK_o, 0x1EDD,
199 XK_Multi_key, XK_plus, XK_u, 0x1EEB,
200 XK_Multi_key, XK_U, XK_A, 0x1EB0,
201 XK_Multi_key, XK_U, XK_a, 0x1EB1,
202 XK_Multi_key, XK_asciicircum, XK_A, 0x1EA6,
203 XK_Multi_key, XK_asciicircum, XK_E, 0x1EC0,
204 XK_Multi_key, XK_asciicircum, XK_O, 0x1ED2,
205 XK_Multi_key, XK_asciicircum, XK_a, 0x1EA7,
206 XK_Multi_key, XK_asciicircum, XK_e, 0x1EC1,
207 XK_Multi_key, XK_asciicircum, XK_o, 0x1ED3,
208 XK_Multi_key, XK_underscore, XK_E, 0x1E14,
209 XK_Multi_key, XK_underscore, XK_O, 0x1E50,
210 XK_Multi_key, XK_underscore, XK_e, 0x1E15,
211 XK_Multi_key, XK_underscore, XK_o, 0x1E51,
212 XK_Multi_key, XK_b, XK_A, 0x1EB0,
213 XK_Multi_key, XK_b, XK_a, 0x1EB1,
214 XK_Multi_key, XK_macron, XK_E, 0x1E14,
215 XK_Multi_key, XK_macron, XK_O, 0x1E50,
216 XK_Multi_key, XK_macron, XK_e, 0x1E15,
217 XK_Multi_key, XK_macron, XK_o, 0x1E51,
218 XK_space, 0x0027,
219 XK_V, 0x01D7,
220 XK_v, 0x01D8,
221 XK_Abreve, 0x1EAE,
222 XK_abreve, 0x1EAF,
223 XK_Emacron, 0x1E16,
224 XK_emacron, 0x1E17,
225 XK_Utilde, 0x1E78,
226 XK_omacron, 0x1E53,
227 XK_utilde, 0x1E79,
228 XK_Cyrillic_ghe, 0x0453,
229 XK_Cyrillic_ka, 0x045C,
230 XK_Cyrillic_GHE, 0x0403,
231 XK_Cyrillic_KA, 0x040C,
232 XK_Greek_iotadieresis, 0x0390,
233 XK_Greek_upsilondieresis, 0x03B0,
234 XK_Greek_ALPHA, 0x0386,
235 XK_Greek_EPSILON, 0x0388,
236 XK_Greek_ETA, 0x0389,
237 XK_Greek_IOTA, 0x038A,
238 XK_Greek_OMICRON, 0x038C,
239 XK_Greek_UPSILON, 0x038E,
240 XK_Greek_OMEGA, 0x038F,
241 XK_Greek_alpha, 0x03AC,
242 XK_Greek_epsilon, 0x03AD,
243 XK_Greek_eta, 0x03AE,
244 XK_Greek_iota, 0x03AF,
245 XK_Greek_omicron, 0x03CC,
246 XK_Greek_upsilon, 0x03CD,
247 XK_Greek_omega, 0x03CE,
248 XK_Sabovedot, 0x1E64,
249 XK_sabovedot, 0x1E65,
250 XK_dead_acute, 0x00B4,
251 XK_dead_stroke, XK_O, 0x01FE,
252 XK_dead_stroke, XK_o, 0x01FF,
253 XK_dead_diaeresis, XK_space, 0x0385,
254 XK_dead_diaeresis, XK_Greek_iota, 0x0390,
255 XK_dead_diaeresis, XK_Greek_upsilon, 0x03B0,
256 XK_dead_psili, XK_Greek_ALPHA, 0x1F0C,
257 XK_dead_psili, XK_Greek_EPSILON, 0x1F1C,
258 XK_dead_psili, XK_Greek_ETA, 0x1F2C,
259 XK_dead_psili, XK_Greek_IOTA, 0x1F3C,
260 XK_dead_psili, XK_Greek_OMICRON, 0x1F4C,
261 XK_dead_psili, XK_Greek_OMEGA, 0x1F6C,
262 XK_dead_psili, XK_Greek_alpha, 0x1F04,
263 XK_dead_psili, XK_Greek_epsilon, 0x1F14,
264 XK_dead_psili, XK_Greek_eta, 0x1F24,
265 XK_dead_psili, XK_Greek_iota, 0x1F34,
266 XK_dead_psili, XK_Greek_omicron, 0x1F44,
267 XK_dead_psili, XK_Greek_upsilon, 0x1F54,
268 XK_dead_psili, XK_Greek_omega, 0x1F64,
269 XK_dead_dasia, XK_Greek_ALPHA, 0x1F0D,
270 XK_dead_dasia, XK_Greek_EPSILON, 0x1F1D,
271 XK_dead_dasia, XK_Greek_ETA, 0x1F2D,
272 XK_dead_dasia, XK_Greek_IOTA, 0x1F3D,
273 XK_dead_dasia, XK_Greek_OMICRON, 0x1F4D,
274 XK_dead_dasia, XK_Greek_UPSILON, 0x1F5D,
275 XK_dead_dasia, XK_Greek_OMEGA, 0x1F6D,
276 XK_dead_dasia, XK_Greek_alpha, 0x1F05,
277 XK_dead_dasia, XK_Greek_epsilon, 0x1F15,
278 XK_dead_dasia, XK_Greek_eta, 0x1F25,
279 XK_dead_dasia, XK_Greek_iota, 0x1F35,
280 XK_dead_dasia, XK_Greek_omicron, 0x1F45,
281 XK_dead_dasia, XK_Greek_upsilon, 0x1F55,
282 XK_dead_dasia, XK_Greek_omega, 0x1F65,
283 XK_Multi_key, XK_quotedbl, XK_I, 0x1E2E,
284 XK_Multi_key, XK_quotedbl, XK_U, 0x01D7,
285 XK_Multi_key, XK_quotedbl, XK_i, 0x1E2F,
286 XK_Multi_key, XK_quotedbl, XK_u, 0x01D8,
287 XK_Multi_key, XK_quotedbl, XK_Greek_iota, 0x0390,
288 XK_Multi_key, XK_quotedbl, XK_Greek_upsilon, 0x03B0,
289 XK_Multi_key, XK_parenleft, XK_Greek_ALPHA, 0x1F0D,
290 XK_Multi_key, XK_parenleft, XK_Greek_EPSILON, 0x1F1D,
291 XK_Multi_key, XK_parenleft, XK_Greek_ETA, 0x1F2D,
292 XK_Multi_key, XK_parenleft, XK_Greek_IOTA, 0x1F3D,
293 XK_Multi_key, XK_parenleft, XK_Greek_OMICRON, 0x1F4D,
294 XK_Multi_key, XK_parenleft, XK_Greek_UPSILON, 0x1F5D,
295 XK_Multi_key, XK_parenleft, XK_Greek_OMEGA, 0x1F6D,
296 XK_Multi_key, XK_parenleft, XK_Greek_alpha, 0x1F05,
297 XK_Multi_key, XK_parenleft, XK_Greek_epsilon, 0x1F15,
298 XK_Multi_key, XK_parenleft, XK_Greek_eta, 0x1F25,
299 XK_Multi_key, XK_parenleft, XK_Greek_iota, 0x1F35,
300 XK_Multi_key, XK_parenleft, XK_Greek_omicron, 0x1F45,
301 XK_Multi_key, XK_parenleft, XK_Greek_upsilon, 0x1F55,
302 XK_Multi_key, XK_parenleft, XK_Greek_omega, 0x1F65,
303 XK_Multi_key, XK_parenright, XK_Greek_ALPHA, 0x1F0C,
304 XK_Multi_key, XK_parenright, XK_Greek_EPSILON, 0x1F1C,
305 XK_Multi_key, XK_parenright, XK_Greek_ETA, 0x1F2C,
306 XK_Multi_key, XK_parenright, XK_Greek_IOTA, 0x1F3C,
307 XK_Multi_key, XK_parenright, XK_Greek_OMICRON, 0x1F4C,
308 XK_Multi_key, XK_parenright, XK_Greek_OMEGA, 0x1F6C,
309 XK_Multi_key, XK_parenright, XK_Greek_alpha, 0x1F04,
310 XK_Multi_key, XK_parenright, XK_Greek_epsilon, 0x1F14,
311 XK_Multi_key, XK_parenright, XK_Greek_eta, 0x1F24,
312 XK_Multi_key, XK_parenright, XK_Greek_iota, 0x1F34,
313 XK_Multi_key, XK_parenright, XK_Greek_omicron, 0x1F44,
314 XK_Multi_key, XK_parenright, XK_Greek_upsilon, 0x1F54,
315 XK_Multi_key, XK_parenright, XK_Greek_omega, 0x1F64,
316 XK_Multi_key, XK_plus, XK_O, 0x1EDA,
317 XK_Multi_key, XK_plus, XK_U, 0x1EE8,
318 XK_Multi_key, XK_plus, XK_o, 0x1EDB,
319 XK_Multi_key, XK_plus, XK_u, 0x1EE9,
320 XK_Multi_key, XK_comma, XK_C, 0x1E08,
321 XK_Multi_key, XK_comma, XK_c, 0x1E09,
322 XK_Multi_key, XK_slash, XK_O, 0x01FE,
323 XK_Multi_key, XK_slash, XK_o, 0x01FF,
324 XK_Multi_key, XK_U, XK_A, 0x1EAE,
325 XK_Multi_key, XK_U, XK_a, 0x1EAF,
326 XK_Multi_key, XK_asciicircum, XK_A, 0x1EA4,
327 XK_Multi_key, XK_asciicircum, XK_E, 0x1EBE,
328 XK_Multi_key, XK_asciicircum, XK_O, 0x1ED0,
329 XK_Multi_key, XK_asciicircum, XK_a, 0x1EA5,
330 XK_Multi_key, XK_asciicircum, XK_e, 0x1EBF,
331 XK_Multi_key, XK_asciicircum, XK_o, 0x1ED1,
332 XK_Multi_key, XK_underscore, XK_E, 0x1E16,
333 XK_Multi_key, XK_underscore, XK_O, 0x1E52,
334 XK_Multi_key, XK_underscore, XK_e, 0x1E17,
335 XK_Multi_key, XK_underscore, XK_o, 0x1E53,
336 XK_Multi_key, XK_b, XK_A, 0x1EAE,
337 XK_Multi_key, XK_b, XK_a, 0x1EAF,
338 XK_Multi_key, XK_o, XK_A, 0x01FA,
339 XK_Multi_key, XK_o, XK_a, 0x01FB,
340 XK_Multi_key, XK_asciitilde, XK_O, 0x1E4C,
341 XK_Multi_key, XK_asciitilde, XK_U, 0x1E78,
342 XK_Multi_key, XK_asciitilde, XK_o, 0x1E4D,
343 XK_Multi_key, XK_asciitilde, XK_u, 0x1E79,
344 XK_Multi_key, XK_macron, XK_E, 0x1E16,
345 XK_Multi_key, XK_macron, XK_O, 0x1E52,
346 XK_Multi_key, XK_macron, XK_e, 0x1E17,
347 XK_Multi_key, XK_macron, XK_o, 0x1E53,
348 XK_Multi_key, XK_cedilla, XK_C, 0x1E08,
349 XK_Multi_key, XK_cedilla, XK_c, 0x1E09,
350 XK_Multi_key, XK_KP_Divide, XK_O, 0x01FE,
351 XK_Multi_key, XK_KP_Divide, XK_o, 0x01FF,
352 XK_space, 0x005E,
353 XK_parenleft, 0x207D,
354 XK_parenright, 0x207E,
355 XK_plus, 0x207A,
356 XK_minus, 0x207B,
357 XK_0, 0x2070,
358 XK_1, 0x00B9,
359 XK_2, 0x00B2,
360 XK_3, 0x00B3,
361 XK_4, 0x2074,
362 XK_5, 0x2075,
363 XK_6, 0x2076,
364 XK_7, 0x2077,
365 XK_8, 0x2078,
366 XK_9, 0x2079,
367 XK_equal, 0x207C,
368 XK_nobreakspace, 0x0302,
369 XK_Agrave, 0x1EA6,
370 XK_Aacute, 0x1EA4,
371 XK_Atilde, 0x1EAA,
372 XK_Egrave, 0x1EC0,
373 XK_Eacute, 0x1EBE,
374 XK_Ograve, 0x1ED2,
375 XK_Oacute, 0x1ED0,
376 XK_Otilde, 0x1ED6,
377 XK_agrave, 0x1EA7,
378 XK_aacute, 0x1EA5,
379 XK_atilde, 0x1EAB,
380 XK_egrave, 0x1EC1,
381 XK_eacute, 0x1EBF,
382 XK_ograve, 0x1ED3,
383 XK_oacute, 0x1ED1,
384 XK_otilde, 0x1ED7,
385 XK_Ahook, 0x1EA8,
386 XK_ahook, 0x1EA9,
387 XK_Ehook, 0x1EC2,
388 XK_ehook, 0x1EC3,
389 XK_Etilde, 0x1EC4,
390 XK_etilde, 0x1EC5,
391 XK_Ohook, 0x1ED4,
392 XK_ohook, 0x1ED5,
393 0x2212, 0x207B,
394 0x4E00, 0x3192,
395 0x4E01, 0x319C,
396 0x4E09, 0x3194,
397 0x4E0A, 0x3196,
398 0x4E0B, 0x3198,
399 0x4E19, 0x319B,
400 0x4E2D, 0x3197,
401 0x4E59, 0x319A,
402 0x4E8C, 0x3193,
403 0x4EBA, 0x319F,
404 0x56DB, 0x3195,
405 0x5730, 0x319E,
406 0x5929, 0x319D,
407 0x7532, 0x3199,
408 XK_dead_circumflex, 0x005E,
409 XK_KP_Space, 0x00B2,
410 XK_KP_Add, 0x207A,
411 XK_KP_0, 0x2070,
412 XK_KP_1, 0x00B9,
413 XK_KP_2, 0x00B2,
414 XK_KP_3, 0x00B3,
415 XK_KP_4, 0x2074,
416 XK_KP_5, 0x2075,
417 XK_KP_6, 0x2076,
418 XK_KP_7, 0x2077,
419 XK_KP_8, 0x2078,
420 XK_KP_9, 0x2079,
421 XK_KP_Equal, 0x207C,
422 XK_Multi_key, XK_exclam, XK_A, 0x1EAC,
423 XK_Multi_key, XK_exclam, XK_E, 0x1EC6,
424 XK_Multi_key, XK_exclam, XK_O, 0x1ED8,
425 XK_Multi_key, XK_exclam, XK_a, 0x1EAD,
426 XK_Multi_key, XK_exclam, XK_e, 0x1EC7,
427 XK_Multi_key, XK_exclam, XK_o, 0x1ED9,
428 XK_Multi_key, XK_S, XK_M, 0x2120,
429 XK_Multi_key, XK_S, XK_m, 0x2120,
430 XK_Multi_key, XK_T, XK_M, 0x2122,
431 XK_Multi_key, XK_T, XK_m, 0x2122,
432 XK_Multi_key, XK_underscore, XK_a, 0x00AA,
433 XK_Multi_key, XK_underscore, XK_h, 0x02B0,
434 XK_Multi_key, XK_underscore, XK_i, 0x2071,
435 XK_Multi_key, XK_underscore, XK_j, 0x02B2,
436 XK_Multi_key, XK_underscore, XK_l, 0x02E1,
437 XK_Multi_key, XK_underscore, XK_n, 0x207F,
438 XK_Multi_key, XK_underscore, XK_o, 0x00BA,
439 XK_Multi_key, XK_underscore, XK_r, 0x02B3,
440 XK_Multi_key, XK_underscore, XK_s, 0x02E2,
441 XK_Multi_key, XK_underscore, XK_w, 0x02B7,
442 XK_Multi_key, XK_underscore, XK_x, 0x02E3,
443 XK_Multi_key, XK_underscore, XK_y, 0x02B8,
444 XK_Multi_key, XK_underscore, 0x0263, 0x02E0,
445 XK_Multi_key, XK_underscore, 0x0266, 0x02B1,
446 XK_Multi_key, XK_underscore, 0x0279, 0x02B4,
447 XK_Multi_key, XK_underscore, 0x027B, 0x02B5,
448 XK_Multi_key, XK_underscore, 0x0281, 0x02B6,
449 XK_Multi_key, XK_underscore, 0x0295, 0x02E4,
450 XK_Multi_key, XK_s, XK_M, 0x2120,
451 XK_Multi_key, XK_s, XK_m, 0x2120,
452 XK_Multi_key, XK_t, XK_M, 0x2122,
453 XK_Multi_key, XK_t, XK_m, 0x2122,
454 XK_Multi_key, XK_underbar, XK_a, 0x00AA,
455 XK_Multi_key, XK_underbar, XK_h, 0x02B0,
456 XK_Multi_key, XK_underbar, XK_i, 0x2071,
457 XK_Multi_key, XK_underbar, XK_j, 0x02B2,
458 XK_Multi_key, XK_underbar, XK_l, 0x02E1,
459 XK_Multi_key, XK_underbar, XK_n, 0x207F,
460 XK_Multi_key, XK_underbar, XK_o, 0x00BA,
461 XK_Multi_key, XK_underbar, XK_r, 0x02B3,
462 XK_Multi_key, XK_underbar, XK_s, 0x02E2,
463 XK_Multi_key, XK_underbar, XK_w, 0x02B7,
464 XK_Multi_key, XK_underbar, XK_x, 0x02E3,
465 XK_Multi_key, XK_underbar, XK_y, 0x02B8,
466 XK_Multi_key, XK_underbar, 0x0263, 0x02E0,
467 XK_Multi_key, XK_underbar, 0x0266, 0x02B1,
468 XK_Multi_key, XK_underbar, 0x0279, 0x02B4,
469 XK_Multi_key, XK_underbar, 0x027B, 0x02B5,
470 XK_Multi_key, XK_underbar, 0x0281, 0x02B6,
471 XK_Multi_key, XK_underbar, 0x0295, 0x02E4,
472 XK_space, 0x007E,
473 XK_less, 0x2272,
474 XK_equal, 0x2243,
475 XK_greater, 0x2273,
476 XK_Oacute, 0x1E4C,
477 XK_Odiaeresis, 0x1E4E,
478 XK_Uacute, 0x1E78,
479 XK_oacute, 0x1E4D,
480 XK_odiaeresis, 0x1E4F,
481 XK_uacute, 0x1E79,
482 XK_Abreve, 0x1EB4,
483 XK_abreve, 0x1EB5,
484 XK_Omacron, 0x022C,
485 XK_omacron, 0x022D,
486 XK_Greek_iotadieresis, 0x1FD7,
487 XK_Greek_upsilondieresis, 0x1FE7,
488 XK_Greek_alpha, 0x1FB6,
489 XK_Greek_eta, 0x1FC6,
490 XK_Greek_iota, 0x1FD6,
491 XK_Greek_upsilon, 0x1FE6,
492 XK_Greek_omega, 0x1FF6,
493 0x1F00, 0x1F06,
494 0x1F01, 0x1F07,
495 0x1F08, 0x1F0E,
496 0x1F09, 0x1F0F,
497 0x1F20, 0x1F26,
498 0x1F21, 0x1F27,
499 0x1F28, 0x1F2E,
500 0x1F29, 0x1F2F,
501 0x1F30, 0x1F36,
502 0x1F31, 0x1F37,
503 0x1F38, 0x1F3E,
504 0x1F39, 0x1F3F,
505 0x1F50, 0x1F56,
506 0x1F51, 0x1F57,
507 0x1F59, 0x1F5F,
508 0x1F60, 0x1F66,
509 0x1F61, 0x1F67,
510 0x1F68, 0x1F6E,
511 0x1F69, 0x1F6F,
512 XK_dead_tilde, 0x007E,
513 XK_dead_diaeresis, XK_Greek_iota, 0x1FD7,
514 XK_dead_diaeresis, XK_Greek_upsilon, 0x1FE7,
515 XK_dead_psili, XK_Greek_ALPHA, 0x1F0E,
516 XK_dead_psili, XK_Greek_ETA, 0x1F2E,
517 XK_dead_psili, XK_Greek_IOTA, 0x1F3E,
518 XK_dead_psili, XK_Greek_OMEGA, 0x1F6E,
519 XK_dead_psili, XK_Greek_alpha, 0x1F06,
520 XK_dead_psili, XK_Greek_eta, 0x1F26,
521 XK_dead_psili, XK_Greek_iota, 0x1F36,
522 XK_dead_psili, XK_Greek_upsilon, 0x1F56,
523 XK_dead_psili, XK_Greek_omega, 0x1F66,
524 XK_dead_dasia, XK_Greek_ALPHA, 0x1F0F,
525 XK_dead_dasia, XK_Greek_ETA, 0x1F2F,
526 XK_dead_dasia, XK_Greek_IOTA, 0x1F3F,
527 XK_dead_dasia, XK_Greek_UPSILON, 0x1F5F,
528 XK_dead_dasia, XK_Greek_OMEGA, 0x1F6F,
529 XK_dead_dasia, XK_Greek_alpha, 0x1F07,
530 XK_dead_dasia, XK_Greek_eta, 0x1F27,
531 XK_dead_dasia, XK_Greek_iota, 0x1F37,
532 XK_dead_dasia, XK_Greek_upsilon, 0x1F57,
533 XK_dead_dasia, XK_Greek_omega, 0x1F67,
534 XK_Multi_key, XK_quotedbl, XK_Greek_iota, 0x1FD7,
535 XK_Multi_key, XK_quotedbl, XK_Greek_upsilon, 0x1FE7,
536 XK_Multi_key, XK_parenleft, XK_Greek_ALPHA, 0x1F0F,
537 XK_Multi_key, XK_parenleft, XK_Greek_ETA, 0x1F2F,
538 XK_Multi_key, XK_parenleft, XK_Greek_IOTA, 0x1F3F,
539 XK_Multi_key, XK_parenleft, XK_Greek_UPSILON, 0x1F5F,
540 XK_Multi_key, XK_parenleft, XK_Greek_OMEGA, 0x1F6F,
541 XK_Multi_key, XK_parenleft, XK_Greek_alpha, 0x1F07,
542 XK_Multi_key, XK_parenleft, XK_Greek_eta, 0x1F27,
543 XK_Multi_key, XK_parenleft, XK_Greek_iota, 0x1F37,
544 XK_Multi_key, XK_parenleft, XK_Greek_upsilon, 0x1F57,
545 XK_Multi_key, XK_parenleft, XK_Greek_omega, 0x1F67,
546 XK_Multi_key, XK_parenright, XK_Greek_ALPHA, 0x1F0E,
547 XK_Multi_key, XK_parenright, XK_Greek_ETA, 0x1F2E,
548 XK_Multi_key, XK_parenright, XK_Greek_IOTA, 0x1F3E,
549 XK_Multi_key, XK_parenright, XK_Greek_OMEGA, 0x1F6E,
550 XK_Multi_key, XK_parenright, XK_Greek_alpha, 0x1F06,
551 XK_Multi_key, XK_parenright, XK_Greek_eta, 0x1F26,
552 XK_Multi_key, XK_parenright, XK_Greek_iota, 0x1F36,
553 XK_Multi_key, XK_parenright, XK_Greek_upsilon, 0x1F56,
554 XK_Multi_key, XK_parenright, XK_Greek_omega, 0x1F66,
555 XK_Multi_key, XK_plus, XK_O, 0x1EE0,
556 XK_Multi_key, XK_plus, XK_U, 0x1EEE,
557 XK_Multi_key, XK_plus, XK_o, 0x1EE1,
558 XK_Multi_key, XK_plus, XK_u, 0x1EEF,
559 XK_Multi_key, XK_U, XK_A, 0x1EB4,
560 XK_Multi_key, XK_U, XK_a, 0x1EB5,
561 XK_Multi_key, XK_asciicircum, XK_A, 0x1EAA,
562 XK_Multi_key, XK_asciicircum, XK_E, 0x1EC4,
563 XK_Multi_key, XK_asciicircum, XK_O, 0x1ED6,
564 XK_Multi_key, XK_asciicircum, XK_a, 0x1EAB,
565 XK_Multi_key, XK_asciicircum, XK_e, 0x1EC5,
566 XK_Multi_key, XK_asciicircum, XK_o, 0x1ED7,
567 XK_Multi_key, XK_b, XK_A, 0x1EB4,
568 XK_Multi_key, XK_b, XK_a, 0x1EB5,
569 XK_space, 0x00AF,
570 XK_V, 0x01D5,
571 XK_v, 0x01D6,
572 XK_nobreakspace, 0x0304,
573 XK_Egrave, 0x1E14,
574 XK_Eacute, 0x1E16,
575 XK_Ograve, 0x1E50,
576 XK_Oacute, 0x1E52,
577 XK_egrave, 0x1E15,
578 XK_eacute, 0x1E17,
579 XK_ograve, 0x1E51,
580 XK_oacute, 0x1E53,
581 XK_Cyrillic_i, 0x04E3,
582 XK_Cyrillic_u, 0x04EF,
583 XK_Cyrillic_I, 0x04E2,
584 XK_Cyrillic_U, 0x04EE,
585 XK_Greek_ALPHA, 0x1FB9,
586 XK_Greek_IOTA, 0x1FD9,
587 XK_Greek_UPSILON, 0x1FE9,
588 XK_Greek_alpha, 0x1FB1,
589 XK_Greek_iota, 0x1FD1,
590 XK_Greek_upsilon, 0x1FE1,
591 XK_dead_macron, 0x00AF,
592 XK_Multi_key, XK_exclam, XK_L, 0x1E38,
593 XK_Multi_key, XK_exclam, XK_R, 0x1E5C,
594 XK_Multi_key, XK_exclam, XK_l, 0x1E39,
595 XK_Multi_key, XK_exclam, XK_r, 0x1E5D,
596 XK_Multi_key, XK_quotedbl, XK_A, 0x01DE,
597 XK_Multi_key, XK_quotedbl, XK_O, 0x022A,
598 XK_Multi_key, XK_quotedbl, XK_U, 0x01D5,
599 XK_Multi_key, XK_quotedbl, XK_a, 0x01DF,
600 XK_Multi_key, XK_quotedbl, XK_o, 0x022B,
601 XK_Multi_key, XK_quotedbl, XK_u, 0x01D6,
602 XK_Multi_key, XK_period, XK_A, 0x01E0,
603 XK_Multi_key, XK_period, XK_O, 0x0230,
604 XK_Multi_key, XK_period, XK_a, 0x01E1,
605 XK_Multi_key, XK_period, XK_o, 0x0231,
606 XK_Multi_key, XK_semicolon, XK_O, 0x01EC,
607 XK_Multi_key, XK_semicolon, XK_o, 0x01ED,
608 XK_Multi_key, XK_asciitilde, XK_O, 0x022C,
609 XK_Multi_key, XK_asciitilde, XK_o, 0x022D,
610 XK_space, 0x02D8,
611 XK_nobreakspace, 0x0306,
612 XK_Agrave, 0x1EB0,
613 XK_Aacute, 0x1EAE,
614 XK_Atilde, 0x1EB4,
615 XK_agrave, 0x1EB1,
616 XK_aacute, 0x1EAF,
617 XK_atilde, 0x1EB5,
618 XK_Cyrillic_a, 0x04D1,
619 XK_Cyrillic_ie, 0x04D7,
620 XK_Cyrillic_i, 0x0439,
621 XK_Cyrillic_u, 0x045E,
622 XK_Cyrillic_zhe, 0x04C2,
623 XK_Cyrillic_A, 0x04D0,
624 XK_Cyrillic_IE, 0x04D6,
625 XK_Cyrillic_I, 0x0419,
626 XK_Cyrillic_U, 0x040E,
627 XK_Cyrillic_ZHE, 0x04C1,
628 XK_Greek_ALPHA, 0x1FB8,
629 XK_Greek_IOTA, 0x1FD8,
630 XK_Greek_UPSILON, 0x1FE8,
631 XK_Greek_alpha, 0x1FB0,
632 XK_Greek_iota, 0x1FD0,
633 XK_Greek_upsilon, 0x1FE0,
634 XK_Ahook, 0x1EB2,
635 XK_ahook, 0x1EB3,
636 XK_dead_breve, 0x02D8,
637 XK_Multi_key, XK_exclam, XK_A, 0x1EB6,
638 XK_Multi_key, XK_exclam, XK_a, 0x1EB7,
639 XK_Multi_key, XK_comma, XK_E, 0x1E1C,
640 XK_Multi_key, XK_comma, XK_e, 0x1E1D,
641 XK_Multi_key, XK_cedilla, XK_E, 0x1E1C,
642 XK_Multi_key, XK_cedilla, XK_e, 0x1E1D,
643 XK_space, 0x02D9,
644 XK_L, 0x013F,
645 XK_i, 0x0131,
646 XK_j, 0x0237,
647 XK_l, 0x0140,
648 XK_nobreakspace, 0x0307,
649 XK_Sacute, 0x1E64,
650 XK_Scaron, 0x1E66,
651 XK_sacute, 0x1E65,
652 XK_scaron, 0x1E67,
653 XK_Amacron, 0x01E0,
654 XK_Omacron, 0x0230,
655 XK_amacron, 0x01E1,
656 XK_omacron, 0x0231,
657 XK_dead_abovedot, 0x02D9,
658 XK_dead_stroke, XK_j, 0x025F,
659 XK_Multi_key, XK_exclam, XK_S, 0x1E68,
660 XK_Multi_key, XK_exclam, XK_s, 0x1E69,
661 XK_Multi_key, XK_apostrophe, XK_S, 0x1E64,
662 XK_Multi_key, XK_apostrophe, XK_s, 0x1E65,
663 XK_Multi_key, XK_c, XK_S, 0x1E66,
664 XK_Multi_key, XK_c, XK_s, 0x1E67,
665 XK_Multi_key, XK_acute, XK_S, 0x1E64,
666 XK_Multi_key, XK_acute, XK_s, 0x1E65,
667 XK_space, 0x0022,
668 XK_apostrophe, 0x0344,
669 XK_nobreakspace, 0x0308,
670 XK_acute, 0x0344,
671 XK_Iacute, 0x1E2E,
672 XK_Ugrave, 0x01DB,
673 XK_Uacute, 0x01D7,
674 XK_iacute, 0x1E2F,
675 XK_ugrave, 0x01DC,
676 XK_uacute, 0x01D8,
677 0x01D3, 0x01D9,
678 0x01D4, 0x01DA,
679 XK_Amacron, 0x01DE,
680 XK_Umacron, 0x1E7A,
681 XK_amacron, 0x01DF,
682 XK_omacron, 0x022B,
683 XK_umacron, 0x1E7B,
684 XK_Ukrainian_i, 0x0457,
685 XK_Ukrainian_I, 0x0407,
686 XK_Cyrillic_a, 0x04D3,
687 XK_Cyrillic_ie, 0x0451,
688 XK_Cyrillic_i, 0x04E5,
689 XK_Cyrillic_o, 0x04E7,
690 XK_Cyrillic_u, 0x04F1,
691 XK_Cyrillic_zhe, 0x04DD,
692 XK_Cyrillic_yeru, 0x04F9,
693 XK_Cyrillic_ze, 0x04DF,
694 XK_Cyrillic_e, 0x04ED,
695 XK_Cyrillic_che, 0x04F5,
696 XK_Cyrillic_A, 0x04D2,
697 XK_Cyrillic_IE, 0x0401,
698 XK_Cyrillic_I, 0x04E4,
699 XK_Cyrillic_O, 0x04E6,
700 XK_Cyrillic_U, 0x04F0,
701 XK_Cyrillic_ZHE, 0x04DC,
702 XK_Cyrillic_YERU, 0x04F8,
703 XK_Cyrillic_ZE, 0x04DE,
704 XK_Cyrillic_E, 0x04EC,
705 XK_Cyrillic_CHE, 0x04F4,
706 XK_Greek_IOTA, 0x03AA,
707 XK_Greek_UPSILON, 0x03AB,
708 XK_Greek_iota, 0x03CA,
709 XK_Greek_upsilon, 0x03CB,
710 XK_dead_diaeresis, 0x00A8,
711 XK_dead_acute, XK_space, 0x0385,
712 XK_dead_acute, XK_Greek_iota, 0x0390,
713 XK_dead_acute, XK_Greek_upsilon, 0x03B0,
714 XK_Multi_key, XK_underscore, XK_U, 0x1E7A,
715 XK_Multi_key, XK_underscore, XK_u, 0x1E7B,
716 XK_Multi_key, XK_asciitilde, XK_O, 0x1E4E,
717 XK_Multi_key, XK_asciitilde, XK_o, 0x1E4F,
718 XK_Multi_key, XK_macron, XK_U, 0x1E7A,
719 XK_Multi_key, XK_macron, XK_u, 0x1E7B,
720 XK_space, 0x00B0,
721 XK_nobreakspace, 0x030A,
722 XK_Aacute, 0x01FA,
723 XK_aacute, 0x01FB,
724 XK_dead_abovering, 0x00B0,
725 XK_space, 0x02DD,
726 XK_nobreakspace, 0x030B,
727 XK_Cyrillic_u, 0x04F3,
728 XK_Cyrillic_U, 0x04F2,
729 XK_dead_doubleacute, 0x02DD,
730 XK_space, 0x02C7,
731 XK_parenleft, 0x208D,
732 XK_parenright, 0x208E,
733 XK_plus, 0x208A,
734 XK_minus, 0x208B,
735 XK_equal, 0x208C,
736 XK_V, 0x01D9,
737 XK_v, 0x01DA,
738 XK_nobreakspace, 0x030C,
739 0x01F2, 0x01C5,
740 XK_Sabovedot, 0x1E66,
741 XK_sabovedot, 0x1E67,
742 XK_dead_caron, 0x02C7,
743 XK_Multi_key, XK_quotedbl, XK_U, 0x01D9,
744 XK_Multi_key, XK_quotedbl, XK_u, 0x01DA,
745 XK_space, 0x00B8,
746 XK_nobreakspace, 0x0327,
747 XK_cent, 0x20B5,
748 XK_Cacute, 0x1E08,
749 XK_cacute, 0x1E09,
750 XK_ColonSign, 0x20B5,
751 XK_dead_cedilla, 0x00B8,
752 XK_space, 0x02DB,
753 XK_nobreakspace, 0x0328,
754 XK_Omacron, 0x01EC,
755 XK_omacron, 0x01ED,
756 XK_dead_ogonek, 0x02DB,
757 XK_space, 0x037A,
758 XK_Greek_alphaaccent, 0x1FB4,
759 XK_Greek_etaaccent, 0x1FC4,
760 XK_Greek_omegaaccent, 0x1FF4,
761 XK_Greek_ALPHA, 0x1FBC,
762 XK_Greek_ETA, 0x1FCC,
763 XK_Greek_OMEGA, 0x1FFC,
764 XK_Greek_alpha, 0x1FB3,
765 XK_Greek_eta, 0x1FC3,
766 XK_Greek_omega, 0x1FF3,
767 XK_dead_iota, 0x037A,
768 XK_dead_grave, XK_Greek_alpha, 0x1FB2,
769 XK_dead_grave, XK_Greek_eta, 0x1FC2,
770 XK_dead_grave, XK_Greek_omega, 0x1FF2,
771 XK_dead_acute, XK_Greek_alpha, 0x1FB4,
772 XK_dead_acute, XK_Greek_eta, 0x1FC4,
773 XK_dead_acute, XK_Greek_omega, 0x1FF4,
774 XK_dead_tilde, XK_Greek_alpha, 0x1FB7,
775 XK_dead_tilde, XK_Greek_eta, 0x1FC7,
776 XK_dead_tilde, XK_Greek_omega, 0x1FF7,
777 XK_dead_tilde, 0x1F00, 0x1F86,
778 XK_dead_tilde, 0x1F01, 0x1F87,
779 XK_dead_tilde, 0x1F08, 0x1F8E,
780 XK_dead_tilde, 0x1F09, 0x1F8F,
781 XK_dead_tilde, 0x1F20, 0x1F96,
782 XK_dead_tilde, 0x1F21, 0x1F97,
783 XK_dead_tilde, 0x1F28, 0x1F9E,
784 XK_dead_tilde, 0x1F29, 0x1F9F,
785 XK_dead_tilde, 0x1F60, 0x1FA6,
786 XK_dead_tilde, 0x1F61, 0x1FA7,
787 XK_dead_tilde, 0x1F68, 0x1FAE,
788 XK_dead_tilde, 0x1F69, 0x1FAF,
789 XK_dead_psili, XK_Greek_ALPHA, 0x1F88,
790 XK_dead_psili, XK_Greek_ETA, 0x1F98,
791 XK_dead_psili, XK_Greek_OMEGA, 0x1FA8,
792 XK_dead_psili, XK_Greek_alpha, 0x1F80,
793 XK_dead_psili, XK_Greek_eta, 0x1F90,
794 XK_dead_psili, XK_Greek_omega, 0x1FA0,
795 XK_dead_dasia, XK_Greek_ALPHA, 0x1F89,
796 XK_dead_dasia, XK_Greek_ETA, 0x1F99,
797 XK_dead_dasia, XK_Greek_OMEGA, 0x1FA9,
798 XK_dead_dasia, XK_Greek_alpha, 0x1F81,
799 XK_dead_dasia, XK_Greek_eta, 0x1F91,
800 XK_dead_dasia, XK_Greek_omega, 0x1FA1,
801 XK_dead_grave, XK_dead_psili, XK_Greek_ALPHA, 0x1F8A,
802 XK_dead_grave, XK_dead_psili, XK_Greek_ETA, 0x1F9A,
803 XK_dead_grave, XK_dead_psili, XK_Greek_OMEGA, 0x1FAA,
804 XK_dead_grave, XK_dead_psili, XK_Greek_alpha, 0x1F82,
805 XK_dead_grave, XK_dead_psili, XK_Greek_eta, 0x1F92,
806 XK_dead_grave, XK_dead_psili, XK_Greek_omega, 0x1FA2,
807 XK_dead_grave, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8B,
808 XK_dead_grave, XK_dead_dasia, XK_Greek_ETA, 0x1F9B,
809 XK_dead_grave, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAB,
810 XK_dead_grave, XK_dead_dasia, XK_Greek_alpha, 0x1F83,
811 XK_dead_grave, XK_dead_dasia, XK_Greek_eta, 0x1F93,
812 XK_dead_grave, XK_dead_dasia, XK_Greek_omega, 0x1FA3,
813 XK_dead_acute, XK_dead_psili, XK_Greek_ALPHA, 0x1F8C,
814 XK_dead_acute, XK_dead_psili, XK_Greek_ETA, 0x1F9C,
815 XK_dead_acute, XK_dead_psili, XK_Greek_OMEGA, 0x1FAC,
816 XK_dead_acute, XK_dead_psili, XK_Greek_alpha, 0x1F84,
817 XK_dead_acute, XK_dead_psili, XK_Greek_eta, 0x1F94,
818 XK_dead_acute, XK_dead_psili, XK_Greek_omega, 0x1FA4,
819 XK_dead_acute, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8D,
820 XK_dead_acute, XK_dead_dasia, XK_Greek_ETA, 0x1F9D,
821 XK_dead_acute, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAD,
822 XK_dead_acute, XK_dead_dasia, XK_Greek_alpha, 0x1F85,
823 XK_dead_acute, XK_dead_dasia, XK_Greek_eta, 0x1F95,
824 XK_dead_acute, XK_dead_dasia, XK_Greek_omega, 0x1FA5,
825 XK_dead_tilde, XK_dead_psili, XK_Greek_ALPHA, 0x1F8E,
826 XK_dead_tilde, XK_dead_psili, XK_Greek_ETA, 0x1F9E,
827 XK_dead_tilde, XK_dead_psili, XK_Greek_OMEGA, 0x1FAE,
828 XK_dead_tilde, XK_dead_psili, XK_Greek_alpha, 0x1F86,
829 XK_dead_tilde, XK_dead_psili, XK_Greek_eta, 0x1F96,
830 XK_dead_tilde, XK_dead_psili, XK_Greek_omega, 0x1FA6,
831 XK_dead_tilde, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8F,
832 XK_dead_tilde, XK_dead_dasia, XK_Greek_ETA, 0x1F9F,
833 XK_dead_tilde, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAF,
834 XK_dead_tilde, XK_dead_dasia, XK_Greek_alpha, 0x1F87,
835 XK_dead_tilde, XK_dead_dasia, XK_Greek_eta, 0x1F97,
836 XK_dead_tilde, XK_dead_dasia, XK_Greek_omega, 0x1FA7,
837 XK_Multi_key, XK_apostrophe, XK_Greek_alpha, 0x1FB4,
838 XK_Multi_key, XK_apostrophe, XK_Greek_eta, 0x1FC4,
839 XK_Multi_key, XK_apostrophe, XK_Greek_omega, 0x1FF4,
840 XK_Multi_key, XK_apostrophe, 0x1F00, 0x1F84,
841 XK_Multi_key, XK_apostrophe, 0x1F01, 0x1F85,
842 XK_Multi_key, XK_apostrophe, 0x1F08, 0x1F8C,
843 XK_Multi_key, XK_apostrophe, 0x1F09, 0x1F8D,
844 XK_Multi_key, XK_apostrophe, 0x1F20, 0x1F94,
845 XK_Multi_key, XK_apostrophe, 0x1F21, 0x1F95,
846 XK_Multi_key, XK_apostrophe, 0x1F28, 0x1F9C,
847 XK_Multi_key, XK_apostrophe, 0x1F29, 0x1F9D,
848 XK_Multi_key, XK_apostrophe, 0x1F60, 0x1FA4,
849 XK_Multi_key, XK_apostrophe, 0x1F61, 0x1FA5,
850 XK_Multi_key, XK_apostrophe, 0x1F68, 0x1FAC,
851 XK_Multi_key, XK_apostrophe, 0x1F69, 0x1FAD,
852 XK_Multi_key, XK_parenleft, XK_Greek_ALPHA, 0x1F89,
853 XK_Multi_key, XK_parenleft, XK_Greek_ETA, 0x1F99,
854 XK_Multi_key, XK_parenleft, XK_Greek_OMEGA, 0x1FA9,
855 XK_Multi_key, XK_parenleft, XK_Greek_alpha, 0x1F81,
856 XK_Multi_key, XK_parenleft, XK_Greek_eta, 0x1F91,
857 XK_Multi_key, XK_parenleft, XK_Greek_omega, 0x1FA1,
858 XK_Multi_key, XK_parenright, XK_Greek_ALPHA, 0x1F88,
859 XK_Multi_key, XK_parenright, XK_Greek_ETA, 0x1F98,
860 XK_Multi_key, XK_parenright, XK_Greek_OMEGA, 0x1FA8,
861 XK_Multi_key, XK_parenright, XK_Greek_alpha, 0x1F80,
862 XK_Multi_key, XK_parenright, XK_Greek_eta, 0x1F90,
863 XK_Multi_key, XK_parenright, XK_Greek_omega, 0x1FA0,
864 XK_Multi_key, XK_grave, XK_Greek_alpha, 0x1FB2,
865 XK_Multi_key, XK_grave, XK_Greek_eta, 0x1FC2,
866 XK_Multi_key, XK_grave, XK_Greek_omega, 0x1FF2,
867 XK_Multi_key, XK_grave, 0x1F00, 0x1F82,
868 XK_Multi_key, XK_grave, 0x1F01, 0x1F83,
869 XK_Multi_key, XK_grave, 0x1F08, 0x1F8A,
870 XK_Multi_key, XK_grave, 0x1F09, 0x1F8B,
871 XK_Multi_key, XK_grave, 0x1F20, 0x1F92,
872 XK_Multi_key, XK_grave, 0x1F21, 0x1F93,
873 XK_Multi_key, XK_grave, 0x1F28, 0x1F9A,
874 XK_Multi_key, XK_grave, 0x1F29, 0x1F9B,
875 XK_Multi_key, XK_grave, 0x1F60, 0x1FA2,
876 XK_Multi_key, XK_grave, 0x1F61, 0x1FA3,
877 XK_Multi_key, XK_grave, 0x1F68, 0x1FAA,
878 XK_Multi_key, XK_grave, 0x1F69, 0x1FAB,
879 XK_Multi_key, XK_asciitilde, XK_Greek_alpha, 0x1FB7,
880 XK_Multi_key, XK_asciitilde, XK_Greek_eta, 0x1FC7,
881 XK_Multi_key, XK_asciitilde, XK_Greek_omega, 0x1FF7,
882 XK_Multi_key, XK_asciitilde, 0x1F00, 0x1F86,
883 XK_Multi_key, XK_asciitilde, 0x1F01, 0x1F87,
884 XK_Multi_key, XK_asciitilde, 0x1F08, 0x1F8E,
885 XK_Multi_key, XK_asciitilde, 0x1F09, 0x1F8F,
886 XK_Multi_key, XK_asciitilde, 0x1F20, 0x1F96,
887 XK_Multi_key, XK_asciitilde, 0x1F21, 0x1F97,
888 XK_Multi_key, XK_asciitilde, 0x1F28, 0x1F9E,
889 XK_Multi_key, XK_asciitilde, 0x1F29, 0x1F9F,
890 XK_Multi_key, XK_asciitilde, 0x1F60, 0x1FA6,
891 XK_Multi_key, XK_asciitilde, 0x1F61, 0x1FA7,
892 XK_Multi_key, XK_asciitilde, 0x1F68, 0x1FAE,
893 XK_Multi_key, XK_asciitilde, 0x1F69, 0x1FAF,
894 XK_Multi_key, XK_acute, XK_Greek_alpha, 0x1FB4,
895 XK_Multi_key, XK_acute, XK_Greek_eta, 0x1FC4,
896 XK_Multi_key, XK_acute, XK_Greek_omega, 0x1FF4,
897 XK_Multi_key, XK_acute, 0x1F00, 0x1F84,
898 XK_Multi_key, XK_acute, 0x1F01, 0x1F85,
899 XK_Multi_key, XK_acute, 0x1F08, 0x1F8C,
900 XK_Multi_key, XK_acute, 0x1F09, 0x1F8D,
901 XK_Multi_key, XK_acute, 0x1F20, 0x1F94,
902 XK_Multi_key, XK_acute, 0x1F21, 0x1F95,
903 XK_Multi_key, XK_acute, 0x1F28, 0x1F9C,
904 XK_Multi_key, XK_acute, 0x1F29, 0x1F9D,
905 XK_Multi_key, XK_acute, 0x1F60, 0x1FA4,
906 XK_Multi_key, XK_acute, 0x1F61, 0x1FA5,
907 XK_Multi_key, XK_acute, 0x1F68, 0x1FAC,
908 XK_Multi_key, XK_acute, 0x1F69, 0x1FAD,
909 XK_dead_grave, XK_Multi_key, XK_parenleft, XK_Greek_ALPHA, 0x1F8B,
910 XK_dead_grave, XK_Multi_key, XK_parenleft, XK_Greek_ETA, 0x1F9B,
911 XK_dead_grave, XK_Multi_key, XK_parenleft, XK_Greek_OMEGA, 0x1FAB,
912 XK_dead_grave, XK_Multi_key, XK_parenleft, XK_Greek_alpha, 0x1F83,
913 XK_dead_grave, XK_Multi_key, XK_parenleft, XK_Greek_eta, 0x1F93,
914 XK_dead_grave, XK_Multi_key, XK_parenleft, XK_Greek_omega, 0x1FA3,
915 XK_dead_grave, XK_Multi_key, XK_parenright, XK_Greek_ALPHA, 0x1F8A,
916 XK_dead_grave, XK_Multi_key, XK_parenright, XK_Greek_ETA, 0x1F9A,
917 XK_dead_grave, XK_Multi_key, XK_parenright, XK_Greek_OMEGA, 0x1FAA,
918 XK_dead_grave, XK_Multi_key, XK_parenright, XK_Greek_alpha, 0x1F82,
919 XK_dead_grave, XK_Multi_key, XK_parenright, XK_Greek_eta, 0x1F92,
920 XK_dead_grave, XK_Multi_key, XK_parenright, XK_Greek_omega, 0x1FA2,
921 XK_dead_acute, XK_Multi_key, XK_parenleft, XK_Greek_ALPHA, 0x1F8D,
922 XK_dead_acute, XK_Multi_key, XK_parenleft, XK_Greek_ETA, 0x1F9D,
923 XK_dead_acute, XK_Multi_key, XK_parenleft, XK_Greek_OMEGA, 0x1FAD,
924 XK_dead_acute, XK_Multi_key, XK_parenleft, XK_Greek_alpha, 0x1F85,
925 XK_dead_acute, XK_Multi_key, XK_parenleft, XK_Greek_eta, 0x1F95,
926 XK_dead_acute, XK_Multi_key, XK_parenleft, XK_Greek_omega, 0x1FA5,
927 XK_dead_acute, XK_Multi_key, XK_parenright, XK_Greek_ALPHA, 0x1F8C,
928 XK_dead_acute, XK_Multi_key, XK_parenright, XK_Greek_ETA, 0x1F9C,
929 XK_dead_acute, XK_Multi_key, XK_parenright, XK_Greek_OMEGA, 0x1FAC,
930 XK_dead_acute, XK_Multi_key, XK_parenright, XK_Greek_alpha, 0x1F84,
931 XK_dead_acute, XK_Multi_key, XK_parenright, XK_Greek_eta, 0x1F94,
932 XK_dead_acute, XK_Multi_key, XK_parenright, XK_Greek_omega, 0x1FA4,
933 XK_dead_tilde, XK_Multi_key, XK_parenleft, XK_Greek_ALPHA, 0x1F8F,
934 XK_dead_tilde, XK_Multi_key, XK_parenleft, XK_Greek_ETA, 0x1F9F,
935 XK_dead_tilde, XK_Multi_key, XK_parenleft, XK_Greek_OMEGA, 0x1FAF,
936 XK_dead_tilde, XK_Multi_key, XK_parenleft, XK_Greek_alpha, 0x1F87,
937 XK_dead_tilde, XK_Multi_key, XK_parenleft, XK_Greek_eta, 0x1F97,
938 XK_dead_tilde, XK_Multi_key, XK_parenleft, XK_Greek_omega, 0x1FA7,
939 XK_dead_tilde, XK_Multi_key, XK_parenright, XK_Greek_ALPHA, 0x1F8E,
940 XK_dead_tilde, XK_Multi_key, XK_parenright, XK_Greek_ETA, 0x1F9E,
941 XK_dead_tilde, XK_Multi_key, XK_parenright, XK_Greek_OMEGA, 0x1FAE,
942 XK_dead_tilde, XK_Multi_key, XK_parenright, XK_Greek_alpha, 0x1F86,
943 XK_dead_tilde, XK_Multi_key, XK_parenright, XK_Greek_eta, 0x1F96,
944 XK_dead_tilde, XK_Multi_key, XK_parenright, XK_Greek_omega, 0x1FA6,
945 XK_Multi_key, XK_apostrophe, XK_parenleft, XK_Greek_ALPHA, 0x1F8D,
946 XK_Multi_key, XK_apostrophe, XK_parenleft, XK_Greek_ETA, 0x1F9D,
947 XK_Multi_key, XK_apostrophe, XK_parenleft, XK_Greek_OMEGA, 0x1FAD,
948 XK_Multi_key, XK_apostrophe, XK_parenleft, XK_Greek_alpha, 0x1F85,
949 XK_Multi_key, XK_apostrophe, XK_parenleft, XK_Greek_eta, 0x1F95,
950 XK_Multi_key, XK_apostrophe, XK_parenleft, XK_Greek_omega, 0x1FA5,
951 XK_Multi_key, XK_apostrophe, XK_parenright, XK_Greek_ALPHA, 0x1F8C,
952 XK_Multi_key, XK_apostrophe, XK_parenright, XK_Greek_ETA, 0x1F9C,
953 XK_Multi_key, XK_apostrophe, XK_parenright, XK_Greek_OMEGA, 0x1FAC,
954 XK_Multi_key, XK_apostrophe, XK_parenright, XK_Greek_alpha, 0x1F84,
955 XK_Multi_key, XK_apostrophe, XK_parenright, XK_Greek_eta, 0x1F94,
956 XK_Multi_key, XK_apostrophe, XK_parenright, XK_Greek_omega, 0x1FA4,
957 XK_Multi_key, XK_apostrophe, XK_dead_psili, XK_Greek_ALPHA, 0x1F8C,
958 XK_Multi_key, XK_apostrophe, XK_dead_psili, XK_Greek_ETA, 0x1F9C,
959 XK_Multi_key, XK_apostrophe, XK_dead_psili, XK_Greek_OMEGA, 0x1FAC,
960 XK_Multi_key, XK_apostrophe, XK_dead_psili, XK_Greek_alpha, 0x1F84,
961 XK_Multi_key, XK_apostrophe, XK_dead_psili, XK_Greek_eta, 0x1F94,
962 XK_Multi_key, XK_apostrophe, XK_dead_psili, XK_Greek_omega, 0x1FA4,
963 XK_Multi_key, XK_apostrophe, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8D,
964 XK_Multi_key, XK_apostrophe, XK_dead_dasia, XK_Greek_ETA, 0x1F9D,
965 XK_Multi_key, XK_apostrophe, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAD,
966 XK_Multi_key, XK_apostrophe, XK_dead_dasia, XK_Greek_alpha, 0x1F85,
967 XK_Multi_key, XK_apostrophe, XK_dead_dasia, XK_Greek_eta, 0x1F95,
968 XK_Multi_key, XK_apostrophe, XK_dead_dasia, XK_Greek_omega, 0x1FA5,
969 XK_Multi_key, XK_grave, XK_parenleft, XK_Greek_ALPHA, 0x1F8B,
970 XK_Multi_key, XK_grave, XK_parenleft, XK_Greek_ETA, 0x1F9B,
971 XK_Multi_key, XK_grave, XK_parenleft, XK_Greek_OMEGA, 0x1FAB,
972 XK_Multi_key, XK_grave, XK_parenleft, XK_Greek_alpha, 0x1F83,
973 XK_Multi_key, XK_grave, XK_parenleft, XK_Greek_eta, 0x1F93,
974 XK_Multi_key, XK_grave, XK_parenleft, XK_Greek_omega, 0x1FA3,
975 XK_Multi_key, XK_grave, XK_parenright, XK_Greek_ALPHA, 0x1F8A,
976 XK_Multi_key, XK_grave, XK_parenright, XK_Greek_ETA, 0x1F9A,
977 XK_Multi_key, XK_grave, XK_parenright, XK_Greek_OMEGA, 0x1FAA,
978 XK_Multi_key, XK_grave, XK_parenright, XK_Greek_alpha, 0x1F82,
979 XK_Multi_key, XK_grave, XK_parenright, XK_Greek_eta, 0x1F92,
980 XK_Multi_key, XK_grave, XK_parenright, XK_Greek_omega, 0x1FA2,
981 XK_Multi_key, XK_grave, XK_dead_psili, XK_Greek_ALPHA, 0x1F8A,
982 XK_Multi_key, XK_grave, XK_dead_psili, XK_Greek_ETA, 0x1F9A,
983 XK_Multi_key, XK_grave, XK_dead_psili, XK_Greek_OMEGA, 0x1FAA,
984 XK_Multi_key, XK_grave, XK_dead_psili, XK_Greek_alpha, 0x1F82,
985 XK_Multi_key, XK_grave, XK_dead_psili, XK_Greek_eta, 0x1F92,
986 XK_Multi_key, XK_grave, XK_dead_psili, XK_Greek_omega, 0x1FA2,
987 XK_Multi_key, XK_grave, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8B,
988 XK_Multi_key, XK_grave, XK_dead_dasia, XK_Greek_ETA, 0x1F9B,
989 XK_Multi_key, XK_grave, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAB,
990 XK_Multi_key, XK_grave, XK_dead_dasia, XK_Greek_alpha, 0x1F83,
991 XK_Multi_key, XK_grave, XK_dead_dasia, XK_Greek_eta, 0x1F93,
992 XK_Multi_key, XK_grave, XK_dead_dasia, XK_Greek_omega, 0x1FA3,
993 XK_Multi_key, XK_asciitilde, XK_parenleft, XK_Greek_ALPHA, 0x1F8F,
994 XK_Multi_key, XK_asciitilde, XK_parenleft, XK_Greek_ETA, 0x1F9F,
995 XK_Multi_key, XK_asciitilde, XK_parenleft, XK_Greek_OMEGA, 0x1FAF,
996 XK_Multi_key, XK_asciitilde, XK_parenleft, XK_Greek_alpha, 0x1F87,
997 XK_Multi_key, XK_asciitilde, XK_parenleft, XK_Greek_eta, 0x1F97,
998 XK_Multi_key, XK_asciitilde, XK_parenleft, XK_Greek_omega, 0x1FA7,
999 XK_Multi_key, XK_asciitilde, XK_parenright, XK_Greek_ALPHA, 0x1F8E,
1000 XK_Multi_key, XK_asciitilde, XK_parenright, XK_Greek_ETA, 0x1F9E,
1001 XK_Multi_key, XK_asciitilde, XK_parenright, XK_Greek_OMEGA, 0x1FAE,
1002 XK_Multi_key, XK_asciitilde, XK_parenright, XK_Greek_alpha, 0x1F86,
1003 XK_Multi_key, XK_asciitilde, XK_parenright, XK_Greek_eta, 0x1F96,
1004 XK_Multi_key, XK_asciitilde, XK_parenright, XK_Greek_omega, 0x1FA6,
1005 XK_Multi_key, XK_asciitilde, XK_dead_psili, XK_Greek_ALPHA, 0x1F8E,
1006 XK_Multi_key, XK_asciitilde, XK_dead_psili, XK_Greek_ETA, 0x1F9E,
1007 XK_Multi_key, XK_asciitilde, XK_dead_psili, XK_Greek_OMEGA, 0x1FAE,
1008 XK_Multi_key, XK_asciitilde, XK_dead_psili, XK_Greek_alpha, 0x1F86,
1009 XK_Multi_key, XK_asciitilde, XK_dead_psili, XK_Greek_eta, 0x1F96,
1010 XK_Multi_key, XK_asciitilde, XK_dead_psili, XK_Greek_omega, 0x1FA6,
1011 XK_Multi_key, XK_asciitilde, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8F,
1012 XK_Multi_key, XK_asciitilde, XK_dead_dasia, XK_Greek_ETA, 0x1F9F,
1013 XK_Multi_key, XK_asciitilde, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAF,
1014 XK_Multi_key, XK_asciitilde, XK_dead_dasia, XK_Greek_alpha, 0x1F87,
1015 XK_Multi_key, XK_asciitilde, XK_dead_dasia, XK_Greek_eta, 0x1F97,
1016 XK_Multi_key, XK_asciitilde, XK_dead_dasia, XK_Greek_omega, 0x1FA7,
1017 XK_Multi_key, XK_acute, XK_parenleft, XK_Greek_ALPHA, 0x1F8D,
1018 XK_Multi_key, XK_acute, XK_parenleft, XK_Greek_ETA, 0x1F9D,
1019 XK_Multi_key, XK_acute, XK_parenleft, XK_Greek_OMEGA, 0x1FAD,
1020 XK_Multi_key, XK_acute, XK_parenleft, XK_Greek_alpha, 0x1F85,
1021 XK_Multi_key, XK_acute, XK_parenleft, XK_Greek_eta, 0x1F95,
1022 XK_Multi_key, XK_acute, XK_parenleft, XK_Greek_omega, 0x1FA5,
1023 XK_Multi_key, XK_acute, XK_parenright, XK_Greek_ALPHA, 0x1F8C,
1024 XK_Multi_key, XK_acute, XK_parenright, XK_Greek_ETA, 0x1F9C,
1025 XK_Multi_key, XK_acute, XK_parenright, XK_Greek_OMEGA, 0x1FAC,
1026 XK_Multi_key, XK_acute, XK_parenright, XK_Greek_alpha, 0x1F84,
1027 XK_Multi_key, XK_acute, XK_parenright, XK_Greek_eta, 0x1F94,
1028 XK_Multi_key, XK_acute, XK_parenright, XK_Greek_omega, 0x1FA4,
1029 XK_Multi_key, XK_acute, XK_dead_psili, XK_Greek_ALPHA, 0x1F8C,
1030 XK_Multi_key, XK_acute, XK_dead_psili, XK_Greek_ETA, 0x1F9C,
1031 XK_Multi_key, XK_acute, XK_dead_psili, XK_Greek_OMEGA, 0x1FAC,
1032 XK_Multi_key, XK_acute, XK_dead_psili, XK_Greek_alpha, 0x1F84,
1033 XK_Multi_key, XK_acute, XK_dead_psili, XK_Greek_eta, 0x1F94,
1034 XK_Multi_key, XK_acute, XK_dead_psili, XK_Greek_omega, 0x1FA4,
1035 XK_Multi_key, XK_acute, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8D,
1036 XK_Multi_key, XK_acute, XK_dead_dasia, XK_Greek_ETA, 0x1F9D,
1037 XK_Multi_key, XK_acute, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAD,
1038 XK_Multi_key, XK_acute, XK_dead_dasia, XK_Greek_alpha, 0x1F85,
1039 XK_Multi_key, XK_acute, XK_dead_dasia, XK_Greek_eta, 0x1F95,
1040 XK_Multi_key, XK_acute, XK_dead_dasia, XK_Greek_omega, 0x1FA5,
1041 XK_kana_WO, 0x30FA,
1042 XK_kana_U, 0x30F4,
1043 XK_kana_KA, 0x30AC,
1044 XK_kana_KI, 0x30AE,
1045 XK_kana_KU, 0x30B0,
1046 XK_kana_KE, 0x30B2,
1047 XK_kana_KO, 0x30B4,
1048 XK_kana_SA, 0x30B6,
1049 XK_kana_SHI, 0x30B8,
1050 XK_kana_SU, 0x30BA,
1051 XK_kana_SE, 0x30BC,
1052 XK_kana_SO, 0x30BE,
1053 XK_kana_TA, 0x30C0,
1054 XK_kana_CHI, 0x30C2,
1055 XK_kana_TSU, 0x30C5,
1056 XK_kana_TE, 0x30C7,
1057 XK_kana_TO, 0x30C9,
1058 XK_kana_HA, 0x30D0,
1059 XK_kana_HI, 0x30D3,
1060 XK_kana_FU, 0x30D6,
1061 XK_kana_HE, 0x30D9,
1062 XK_kana_HO, 0x30DC,
1063 XK_kana_WA, 0x30F7,
1064 XK_kana_HA, 0x30D1,
1065 XK_kana_HI, 0x30D4,
1066 XK_kana_FU, 0x30D7,
1067 XK_kana_HE, 0x30DA,
1068 XK_kana_HO, 0x30DD,
1069 XK_plus, 0x2A25,
1070 XK_minus, 0x2A2A,
1071 XK_equal, 0x2A66,
1072 XK_Abreve, 0x1EB6,
1073 XK_abreve, 0x1EB7,
1074 XK_Multi_key, XK_plus, XK_O, 0x1EE2,
1075 XK_Multi_key, XK_plus, XK_U, 0x1EF0,
1076 XK_Multi_key, XK_plus, XK_o, 0x1EE3,
1077 XK_Multi_key, XK_plus, XK_u, 0x1EF1,
1078 XK_space, 0x0309,
1079 XK_B, 0x0181,
1080 XK_C, 0x0187,
1081 XK_D, 0x018A,
1082 XK_F, 0x0191,
1083 XK_G, 0x0193,
1084 XK_K, 0x0198,
1085 XK_M, 0x2C6E,
1086 XK_N, 0x019D,
1087 XK_P, 0x01A4,
1088 XK_T, 0x01AC,
1089 XK_V, 0x01B2,
1090 XK_W, 0x2C72,
1091 XK_Z, 0x0224,
1092 XK_b, 0x0253,
1093 XK_c, 0x0188,
1094 XK_d, 0x0257,
1095 XK_f, 0x0192,
1096 XK_g, 0x0260,
1097 XK_h, 0x0266,
1098 XK_k, 0x0199,
1099 XK_m, 0x0271,
1100 XK_n, 0x0272,
1101 XK_p, 0x01A5,
1102 XK_q, 0x02A0,
1103 XK_s, 0x0282,
1104 XK_t, 0x01AD,
1105 XK_v, 0x028B,
1106 XK_w, 0x2C73,
1107 XK_z, 0x0225,
1108 XK_nobreakspace, 0x0309,
1109 XK_Abreve, 0x1EB2,
1110 XK_abreve, 0x1EB3,
1111 0x0256, 0x1D91,
1112 XK_schwa, 0x025A,
1113 0x025C, 0x025D,
1114 0x025F, 0x0284,
1115 0x0279, 0x027B,
1116 XK_dead_hook, 0x0309,
1117 XK_Multi_key, XK_plus, XK_O, 0x1EDE,
1118 XK_Multi_key, XK_plus, XK_U, 0x1EEC,
1119 XK_Multi_key, XK_plus, XK_o, 0x1EDF,
1120 XK_Multi_key, XK_plus, XK_u, 0x1EED,
1121 XK_Multi_key, XK_U, XK_A, 0x1EB2,
1122 XK_Multi_key, XK_U, XK_a, 0x1EB3,
1123 XK_Multi_key, XK_asciicircum, XK_A, 0x1EA8,
1124 XK_Multi_key, XK_asciicircum, XK_E, 0x1EC2,
1125 XK_Multi_key, XK_asciicircum, XK_O, 0x1ED4,
1126 XK_Multi_key, XK_asciicircum, XK_a, 0x1EA9,
1127 XK_Multi_key, XK_asciicircum, XK_e, 0x1EC3,
1128 XK_Multi_key, XK_asciicircum, XK_o, 0x1ED5,
1129 XK_Multi_key, XK_b, XK_A, 0x1EB2,
1130 XK_Multi_key, XK_b, XK_a, 0x1EB3,
1131 XK_Greek_ALPHA, 0x1F08,
1132 XK_Greek_EPSILON, 0x1F18,
1133 XK_Greek_ETA, 0x1F28,
1134 XK_Greek_IOTA, 0x1F38,
1135 XK_Greek_OMICRON, 0x1F48,
1136 XK_Greek_OMEGA, 0x1F68,
1137 XK_Greek_alpha, 0x1F00,
1138 XK_Greek_epsilon, 0x1F10,
1139 XK_Greek_eta, 0x1F20,
1140 XK_Greek_iota, 0x1F30,
1141 XK_Greek_omicron, 0x1F40,
1142 XK_Greek_rho, 0x1FE4,
1143 XK_Greek_upsilon, 0x1F50,
1144 XK_Greek_omega, 0x1F60,
1145 XK_Greek_ALPHA, 0x1F09,
1146 XK_Greek_EPSILON, 0x1F19,
1147 XK_Greek_ETA, 0x1F29,
1148 XK_Greek_IOTA, 0x1F39,
1149 XK_Greek_OMICRON, 0x1F49,
1150 XK_Greek_RHO, 0x1FEC,
1151 XK_Greek_UPSILON, 0x1F59,
1152 XK_Greek_OMEGA, 0x1F69,
1153 XK_Greek_alpha, 0x1F01,
1154 XK_Greek_epsilon, 0x1F11,
1155 XK_Greek_eta, 0x1F21,
1156 XK_Greek_iota, 0x1F31,
1157 XK_Greek_omicron, 0x1F41,
1158 XK_Greek_rho, 0x1FE5,
1159 XK_Greek_upsilon, 0x1F51,
1160 XK_Greek_omega, 0x1F61,
1161 XK_space, XK_space, 0x00A0,
1162 XK_space, XK_apostrophe, 0x0027,
1163 XK_space, XK_parenleft, 0x02D8,
1164 XK_space, XK_comma, 0x00B8,
1165 XK_space, XK_minus, 0x007E,
1166 XK_space, XK_period, 0x2008,
1167 XK_space, XK_less, 0x02C7,
1168 XK_space, XK_greater, 0x005E,
1169 XK_space, XK_asciicircum, 0x005E,
1170 XK_space, XK_grave, 0x0060,
1171 XK_space, XK_asciitilde, 0x007E,
1172 XK_exclam, XK_exclam, 0x00A1,
1173 XK_exclam, XK_question, 0x203D,
1174 XK_exclam, XK_A, 0x1EA0,
1175 XK_exclam, XK_B, 0x1E04,
1176 XK_exclam, XK_D, 0x1E0C,
1177 XK_exclam, XK_E, 0x1EB8,
1178 XK_exclam, XK_H, 0x1E24,
1179 XK_exclam, XK_I, 0x1ECA,
1180 XK_exclam, XK_K, 0x1E32,
1181 XK_exclam, XK_L, 0x1E36,
1182 XK_exclam, XK_M, 0x1E42,
1183 XK_exclam, XK_N, 0x1E46,
1184 XK_exclam, XK_O, 0x1ECC,
1185 XK_exclam, XK_P, 0x00B6,
1186 XK_exclam, XK_R, 0x1E5A,
1187 XK_exclam, XK_S, 0x00A7,
1188 XK_exclam, XK_T, 0x1E6C,
1189 XK_exclam, XK_U, 0x1EE4,
1190 XK_exclam, XK_V, 0x1E7E,
1191 XK_exclam, XK_W, 0x1E88,
1192 XK_exclam, XK_Y, 0x1EF4,
1193 XK_exclam, XK_Z, 0x1E92,
1194 XK_exclam, XK_asciicircum, 0x00A6,
1195 XK_exclam, XK_a, 0x1EA1,
1196 XK_exclam, XK_b, 0x1E05,
1197 XK_exclam, XK_d, 0x1E0D,
1198 XK_exclam, XK_e, 0x1EB9,
1199 XK_exclam, XK_h, 0x1E25,
1200 XK_exclam, XK_i, 0x1ECB,
1201 XK_exclam, XK_k, 0x1E33,
1202 XK_exclam, XK_l, 0x1E37,
1203 XK_exclam, XK_m, 0x1E43,
1204 XK_exclam, XK_n, 0x1E47,
1205 XK_exclam, XK_o, 0x1ECD,
1206 XK_exclam, XK_p, 0x00B6,
1207 XK_exclam, XK_r, 0x1E5B,
1208 XK_exclam, XK_s, 0x00A7,
1209 XK_exclam, XK_t, 0x1E6D,
1210 XK_exclam, XK_u, 0x1EE5,
1211 XK_exclam, XK_v, 0x1E7F,
1212 XK_exclam, XK_w, 0x1E89,
1213 XK_exclam, XK_y, 0x1EF5,
1214 XK_exclam, XK_z, 0x1E93,
1215 XK_exclam, XK_Ohorn, 0x1EE2,
1216 XK_exclam, XK_ohorn, 0x1EE3,
1217 XK_exclam, XK_Uhorn, 0x1EF0,
1218 XK_exclam, XK_uhorn, 0x1EF1,
1219 XK_quotedbl, XK_quotedbl, 0x00A8,
1220 XK_quotedbl, XK_apostrophe, 0x0344,
1221 XK_quotedbl, XK_comma, 0x201E,
1222 XK_quotedbl, XK_slash, 0x301E,
1223 XK_quotedbl, XK_less, 0x201C,
1224 XK_quotedbl, XK_greater, 0x201D,
1225 XK_quotedbl, XK_A, 0x00C4,
1226 XK_quotedbl, XK_E, 0x00CB,
1227 XK_quotedbl, XK_H, 0x1E26,
1228 XK_quotedbl, XK_I, 0x00CF,
1229 XK_quotedbl, XK_O, 0x00D6,
1230 XK_quotedbl, XK_U, 0x00DC,
1231 XK_quotedbl, XK_W, 0x1E84,
1232 XK_quotedbl, XK_X, 0x1E8C,
1233 XK_quotedbl, XK_Y, 0x0178,
1234 XK_quotedbl, XK_backslash, 0x301D,
1235 XK_quotedbl, XK_a, 0x00E4,
1236 XK_quotedbl, XK_e, 0x00EB,
1237 XK_quotedbl, XK_h, 0x1E27,
1238 XK_quotedbl, XK_i, 0x00EF,
1239 XK_quotedbl, XK_o, 0x00F6,
1240 XK_quotedbl, XK_t, 0x1E97,
1241 XK_quotedbl, XK_u, 0x00FC,
1242 XK_quotedbl, XK_w, 0x1E85,
1243 XK_quotedbl, XK_x, 0x1E8D,
1244 XK_quotedbl, XK_y, 0x00FF,
1245 XK_quotedbl, XK_acute, 0x0344,
1246 XK_quotedbl, XK_Otilde, 0x1E4E,
1247 XK_quotedbl, XK_otilde, 0x1E4F,
1248 XK_quotedbl, 0x03D2, 0x03D4,
1249 XK_quotedbl, XK_Umacron, 0x1E7A,
1250 XK_quotedbl, XK_umacron, 0x1E7B,
1251 XK_quotedbl, 0x04D8, 0x04DA,
1252 XK_quotedbl, 0x04D9, 0x04DB,
1253 XK_quotedbl, 0x04E8, 0x04EA,
1254 XK_quotedbl, 0x04E9, 0x04EB,
1255 XK_quotedbl, XK_Ukrainian_i, 0x0457,
1256 XK_quotedbl, XK_Ukrainian_I, 0x0407,
1257 XK_quotedbl, XK_Cyrillic_a, 0x04D3,
1258 XK_quotedbl, XK_Cyrillic_ie, 0x0451,
1259 XK_quotedbl, XK_Cyrillic_i, 0x04E5,
1260 XK_quotedbl, XK_Cyrillic_o, 0x04E7,
1261 XK_quotedbl, XK_Cyrillic_u, 0x04F1,
1262 XK_quotedbl, XK_Cyrillic_zhe, 0x04DD,
1263 XK_quotedbl, XK_Cyrillic_yeru, 0x04F9,
1264 XK_quotedbl, XK_Cyrillic_ze, 0x04DF,
1265 XK_quotedbl, XK_Cyrillic_e, 0x04ED,
1266 XK_quotedbl, XK_Cyrillic_che, 0x04F5,
1267 XK_quotedbl, XK_Cyrillic_A, 0x04D2,
1268 XK_quotedbl, XK_Cyrillic_IE, 0x0401,
1269 XK_quotedbl, XK_Cyrillic_I, 0x04E4,
1270 XK_quotedbl, XK_Cyrillic_O, 0x04E6,
1271 XK_quotedbl, XK_Cyrillic_U, 0x04F0,
1272 XK_quotedbl, XK_Cyrillic_ZHE, 0x04DC,
1273 XK_quotedbl, XK_Cyrillic_YERU, 0x04F8,
1274 XK_quotedbl, XK_Cyrillic_ZE, 0x04DE,
1275 XK_quotedbl, XK_Cyrillic_E, 0x04EC,
1276 XK_quotedbl, XK_Cyrillic_CHE, 0x04F4,
1277 XK_quotedbl, XK_Greek_IOTA, 0x03AA,
1278 XK_quotedbl, XK_Greek_UPSILON, 0x03AB,
1279 XK_quotedbl, XK_Greek_iota, 0x03CA,
1280 XK_quotedbl, XK_Greek_upsilon, 0x03CB,
1281 XK_quotedbl, XK_dead_acute, 0x0344,
1282 XK_numbersign, XK_numbersign, 0x266F,
1283 XK_numbersign, XK_b, 0x266D,
1284 XK_numbersign, XK_f, 0x266E,
1285 XK_percent, XK_o, 0x2030,
1286 XK_apostrophe, XK_space, 0x0027,
1287 XK_apostrophe, XK_apostrophe, 0x00B4,
1288 XK_apostrophe, XK_comma, 0x201A,
1289 XK_apostrophe, XK_less, 0x2018,
1290 XK_apostrophe, XK_greater, 0x2019,
1291 XK_apostrophe, XK_A, 0x00C1,
1292 XK_apostrophe, XK_C, 0x0106,
1293 XK_apostrophe, XK_E, 0x00C9,
1294 XK_apostrophe, XK_G, 0x01F4,
1295 XK_apostrophe, XK_I, 0x00CD,
1296 XK_apostrophe, XK_K, 0x1E30,
1297 XK_apostrophe, XK_L, 0x0139,
1298 XK_apostrophe, XK_M, 0x1E3E,
1299 XK_apostrophe, XK_N, 0x0143,
1300 XK_apostrophe, XK_O, 0x00D3,
1301 XK_apostrophe, XK_P, 0x1E54,
1302 XK_apostrophe, XK_R, 0x0154,
1303 XK_apostrophe, XK_S, 0x015A,
1304 XK_apostrophe, XK_U, 0x00DA,
1305 XK_apostrophe, XK_W, 0x1E82,
1306 XK_apostrophe, XK_Y, 0x00DD,
1307 XK_apostrophe, XK_Z, 0x0179,
1308 XK_apostrophe, XK_a, 0x00E1,
1309 XK_apostrophe, XK_c, 0x0107,
1310 XK_apostrophe, XK_e, 0x00E9,
1311 XK_apostrophe, XK_g, 0x01F5,
1312 XK_apostrophe, XK_i, 0x00ED,
1313 XK_apostrophe, XK_k, 0x1E31,
1314 XK_apostrophe, XK_l, 0x013A,
1315 XK_apostrophe, XK_m, 0x1E3F,
1316 XK_apostrophe, XK_n, 0x0144,
1317 XK_apostrophe, XK_o, 0x00F3,
1318 XK_apostrophe, XK_p, 0x1E55,
1319 XK_apostrophe, XK_r, 0x0155,
1320 XK_apostrophe, XK_s, 0x015B,
1321 XK_apostrophe, XK_u, 0x00FA,
1322 XK_apostrophe, XK_w, 0x1E83,
1323 XK_apostrophe, XK_y, 0x00FD,
1324 XK_apostrophe, XK_z, 0x017A,
1325 XK_apostrophe, XK_Acircumflex, 0x1EA4,
1326 XK_apostrophe, XK_Aring, 0x01FA,
1327 XK_apostrophe, XK_AE, 0x01FC,
1328 XK_apostrophe, XK_Ccedilla, 0x1E08,
1329 XK_apostrophe, XK_Ecircumflex, 0x1EBE,
1330 XK_apostrophe, XK_Idiaeresis, 0x1E2E,
1331 XK_apostrophe, XK_Ocircumflex, 0x1ED0,
1332 XK_apostrophe, XK_Otilde, 0x1E4C,
1333 XK_apostrophe, XK_Ooblique, 0x01FE,
1334 XK_apostrophe, 0x00DC, 0x01D7,
1335 XK_apostrophe, XK_acircumflex, 0x1EA5,
1336 XK_apostrophe, XK_aring, 0x01FB,
1337 XK_apostrophe, XK_ae, 0x01FD,
1338 XK_apostrophe, XK_ccedilla, 0x1E09,
1339 XK_apostrophe, XK_ecircumflex, 0x1EBF,
1340 XK_apostrophe, XK_idiaeresis, 0x1E2F,
1341 XK_apostrophe, XK_ocircumflex, 0x1ED1,
1342 XK_apostrophe, XK_otilde, 0x1E4D,
1343 XK_apostrophe, XK_oslash, 0x01FF,
1344 XK_apostrophe, XK_udiaeresis, 0x01D8,
1345 XK_apostrophe, XK_Ohorn, 0x1EDA,
1346 XK_apostrophe, XK_ohorn, 0x1EDB,
1347 XK_apostrophe, XK_Uhorn, 0x1EE8,
1348 XK_apostrophe, XK_uhorn, 0x1EE9,
1349 XK_apostrophe, XK_Abreve, 0x1EAE,
1350 XK_apostrophe, XK_abreve, 0x1EAF,
1351 XK_apostrophe, XK_Emacron, 0x1E16,
1352 XK_apostrophe, XK_emacron, 0x1E17,
1353 XK_apostrophe, XK_Omacron, 0x1E52,
1354 XK_apostrophe, XK_Utilde, 0x1E78,
1355 XK_apostrophe, XK_omacron, 0x1E53,
1356 XK_apostrophe, XK_utilde, 0x1E79,
1357 XK_apostrophe, XK_Cyrillic_ghe, 0x0453,
1358 XK_apostrophe, XK_Cyrillic_ka, 0x045C,
1359 XK_apostrophe, XK_Cyrillic_GHE, 0x0403,
1360 XK_apostrophe, XK_Cyrillic_KA, 0x040C,
1361 XK_apostrophe, XK_Greek_iotadieresis, 0x0390,
1362 XK_apostrophe, XK_Greek_upsilondieresis, 0x03B0,
1363 XK_apostrophe, XK_Greek_ALPHA, 0x0386,
1364 XK_apostrophe, XK_Greek_EPSILON, 0x0388,
1365 XK_apostrophe, XK_Greek_ETA, 0x0389,
1366 XK_apostrophe, XK_Greek_IOTA, 0x038A,
1367 XK_apostrophe, XK_Greek_OMICRON, 0x038C,
1368 XK_apostrophe, XK_Greek_UPSILON, 0x038E,
1369 XK_apostrophe, XK_Greek_OMEGA, 0x038F,
1370 XK_apostrophe, XK_Greek_alpha, 0x03AC,
1371 XK_apostrophe, XK_Greek_epsilon, 0x03AD,
1372 XK_apostrophe, XK_Greek_eta, 0x03AE,
1373 XK_apostrophe, XK_Greek_iota, 0x03AF,
1374 XK_apostrophe, XK_Greek_omicron, 0x03CC,
1375 XK_apostrophe, XK_Greek_upsilon, 0x03CD,
1376 XK_apostrophe, XK_Greek_omega, 0x03CE,
1377 XK_apostrophe, 0x1F00, 0x1F04,
1378 XK_apostrophe, 0x1F01, 0x1F05,
1379 XK_apostrophe, 0x1F08, 0x1F0C,
1380 XK_apostrophe, 0x1F09, 0x1F0D,
1381 XK_apostrophe, 0x1F10, 0x1F14,
1382 XK_apostrophe, 0x1F11, 0x1F15,
1383 XK_apostrophe, 0x1F18, 0x1F1C,
1384 XK_apostrophe, 0x1F19, 0x1F1D,
1385 XK_apostrophe, 0x1F20, 0x1F24,
1386 XK_apostrophe, 0x1F21, 0x1F25,
1387 XK_apostrophe, 0x1F28, 0x1F2C,
1388 XK_apostrophe, 0x1F29, 0x1F2D,
1389 XK_apostrophe, 0x1F30, 0x1F34,
1390 XK_apostrophe, 0x1F31, 0x1F35,
1391 XK_apostrophe, 0x1F38, 0x1F3C,
1392 XK_apostrophe, 0x1F39, 0x1F3D,
1393 XK_apostrophe, 0x1F40, 0x1F44,
1394 XK_apostrophe, 0x1F41, 0x1F45,
1395 XK_apostrophe, 0x1F48, 0x1F4C,
1396 XK_apostrophe, 0x1F49, 0x1F4D,
1397 XK_apostrophe, 0x1F50, 0x1F54,
1398 XK_apostrophe, 0x1F51, 0x1F55,
1399 XK_apostrophe, 0x1F59, 0x1F5D,
1400 XK_apostrophe, 0x1F60, 0x1F64,
1401 XK_apostrophe, 0x1F61, 0x1F65,
1402 XK_apostrophe, 0x1F68, 0x1F6C,
1403 XK_apostrophe, 0x1F69, 0x1F6D,
1404 XK_parenleft, XK_space, 0x02D8,
1405 XK_parenleft, XK_parenleft, 0x005B,
1406 XK_parenleft, XK_minus, 0x007B,
1407 XK_parenleft, XK_A, 0x0102,
1408 XK_parenleft, XK_G, 0x011E,
1409 XK_parenleft, XK_a, 0x0103,
1410 XK_parenleft, XK_c, 0x00A9,
1411 XK_parenleft, XK_g, 0x011F,
1412 XK_parenleft, XK_r, 0x00AE,
1413 XK_parenleft, XK_Greek_ALPHA, 0x1F09,
1414 XK_parenleft, XK_Greek_EPSILON, 0x1F19,
1415 XK_parenleft, XK_Greek_ETA, 0x1F29,
1416 XK_parenleft, XK_Greek_IOTA, 0x1F39,
1417 XK_parenleft, XK_Greek_OMICRON, 0x1F49,
1418 XK_parenleft, XK_Greek_RHO, 0x1FEC,
1419 XK_parenleft, XK_Greek_UPSILON, 0x1F59,
1420 XK_parenleft, XK_Greek_OMEGA, 0x1F69,
1421 XK_parenleft, XK_Greek_alpha, 0x1F01,
1422 XK_parenleft, XK_Greek_epsilon, 0x1F11,
1423 XK_parenleft, XK_Greek_eta, 0x1F21,
1424 XK_parenleft, XK_Greek_iota, 0x1F31,
1425 XK_parenleft, XK_Greek_omicron, 0x1F41,
1426 XK_parenleft, XK_Greek_rho, 0x1FE5,
1427 XK_parenleft, XK_Greek_upsilon, 0x1F51,
1428 XK_parenleft, XK_Greek_omega, 0x1F61,
1429 XK_parenright, XK_parenright, 0x005D,
1430 XK_parenright, XK_minus, 0x007D,
1431 XK_parenright, XK_Greek_ALPHA, 0x1F08,
1432 XK_parenright, XK_Greek_EPSILON, 0x1F18,
1433 XK_parenright, XK_Greek_ETA, 0x1F28,
1434 XK_parenright, XK_Greek_IOTA, 0x1F38,
1435 XK_parenright, XK_Greek_OMICRON, 0x1F48,
1436 XK_parenright, XK_Greek_OMEGA, 0x1F68,
1437 XK_parenright, XK_Greek_alpha, 0x1F00,
1438 XK_parenright, XK_Greek_epsilon, 0x1F10,
1439 XK_parenright, XK_Greek_eta, 0x1F20,
1440 XK_parenright, XK_Greek_iota, 0x1F30,
1441 XK_parenright, XK_Greek_omicron, 0x1F40,
1442 XK_parenright, XK_Greek_rho, 0x1FE4,
1443 XK_parenright, XK_Greek_upsilon, 0x1F50,
1444 XK_parenright, XK_Greek_omega, 0x1F60,
1445 XK_asterisk, XK_0, 0x00B0,
1446 XK_asterisk, XK_A, 0x00C5,
1447 XK_asterisk, XK_U, 0x016E,
1448 XK_asterisk, XK_a, 0x00E5,
1449 XK_asterisk, XK_u, 0x016F,
1450 XK_plus, XK_plus, 0x0023,
1451 XK_plus, XK_minus, 0x00B1,
1452 XK_plus, XK_O, 0x01A0,
1453 XK_plus, XK_U, 0x01AF,
1454 XK_plus, XK_o, 0x01A1,
1455 XK_plus, XK_u, 0x01B0,
1456 XK_comma, XK_space, 0x00B8,
1457 XK_comma, XK_quotedbl, 0x201E,
1458 XK_comma, XK_apostrophe, 0x201A,
1459 XK_comma, XK_comma, 0x00B8,
1460 XK_comma, XK_minus, 0x00AC,
1461 XK_comma, XK_A, 0x0104,
1462 XK_comma, XK_C, 0x00C7,
1463 XK_comma, XK_D, 0x1E10,
1464 XK_comma, XK_E, 0x0118,
1465 XK_comma, XK_G, 0x0122,
1466 XK_comma, XK_H, 0x1E28,
1467 XK_comma, XK_I, 0x012E,
1468 XK_comma, XK_K, 0x0136,
1469 XK_comma, XK_L, 0x013B,
1470 XK_comma, XK_N, 0x0145,
1471 XK_comma, XK_R, 0x0156,
1472 XK_comma, XK_S, 0x015E,
1473 XK_comma, XK_T, 0x0162,
1474 XK_comma, XK_U, 0x0172,
1475 XK_comma, XK_a, 0x0105,
1476 XK_comma, XK_c, 0x00E7,
1477 XK_comma, XK_d, 0x1E11,
1478 XK_comma, XK_e, 0x0119,
1479 XK_comma, XK_g, 0x0123,
1480 XK_comma, XK_h, 0x1E29,
1481 XK_comma, XK_i, 0x012F,
1482 XK_comma, XK_k, 0x0137,
1483 XK_comma, XK_l, 0x013C,
1484 XK_comma, XK_n, 0x0146,
1485 XK_comma, XK_r, 0x0157,
1486 XK_comma, XK_s, 0x015F,
1487 XK_comma, XK_t, 0x0163,
1488 XK_comma, XK_u, 0x0173,
1489 XK_minus, XK_space, 0x007E,
1490 XK_minus, XK_parenleft, 0x007B,
1491 XK_minus, XK_parenright, 0x007D,
1492 XK_minus, XK_plus, 0x00B1,
1493 XK_minus, XK_comma, 0x00AC,
1494 XK_minus, XK_colon, 0x00F7,
1495 XK_minus, XK_A, 0x00C3,
1496 XK_minus, XK_D, 0x0110,
1497 XK_minus, XK_E, 0x0112,
1498 XK_minus, XK_I, 0x012A,
1499 XK_minus, XK_L, 0x00A3,
1500 XK_minus, XK_N, 0x00D1,
1501 XK_minus, XK_O, 0x00D5,
1502 XK_minus, XK_U, 0x016A,
1503 XK_minus, XK_Y, 0x00A5,
1504 XK_minus, XK_asciicircum, 0x00AF,
1505 XK_minus, XK_a, 0x00E3,
1506 XK_minus, XK_d, 0x0111,
1507 XK_minus, XK_e, 0x0113,
1508 XK_minus, XK_i, 0x012B,
1509 XK_minus, XK_l, 0x00A3,
1510 XK_minus, XK_n, 0x00F1,
1511 XK_minus, XK_o, 0x00F5,
1512 XK_minus, XK_u, 0x016B,
1513 XK_minus, XK_y, 0x00A5,
1514 XK_period, XK_minus, 0x00B7,
1515 XK_period, XK_period, 0x02D9,
1516 XK_period, XK_less, 0x2039,
1517 XK_period, XK_equal, 0x2022,
1518 XK_period, XK_greater, 0x203A,
1519 XK_period, XK_A, 0x0226,
1520 XK_period, XK_B, 0x1E02,
1521 XK_period, XK_C, 0x010A,
1522 XK_period, XK_D, 0x1E0A,
1523 XK_period, XK_E, 0x0116,
1524 XK_period, XK_F, 0x1E1E,
1525 XK_period, XK_G, 0x0120,
1526 XK_period, XK_H, 0x1E22,
1527 XK_period, XK_I, 0x0130,
1528 XK_period, XK_M, 0x1E40,
1529 XK_period, XK_N, 0x1E44,
1530 XK_period, XK_O, 0x022E,
1531 XK_period, XK_P, 0x1E56,
1532 XK_period, XK_R, 0x1E58,
1533 XK_period, XK_S, 0x1E60,
1534 XK_period, XK_T, 0x1E6A,
1535 XK_period, XK_W, 0x1E86,
1536 XK_period, XK_X, 0x1E8A,
1537 XK_period, XK_Y, 0x1E8E,
1538 XK_period, XK_Z, 0x017B,
1539 XK_period, XK_asciicircum, 0x00B7,
1540 XK_period, XK_a, 0x0227,
1541 XK_period, XK_b, 0x1E03,
1542 XK_period, XK_c, 0x010B,
1543 XK_period, XK_d, 0x1E0B,
1544 XK_period, XK_e, 0x0117,
1545 XK_period, XK_f, 0x1E1F,
1546 XK_period, XK_g, 0x0121,
1547 XK_period, XK_h, 0x1E23,
1548 XK_period, XK_i, 0x0131,
1549 XK_period, XK_m, 0x1E41,
1550 XK_period, XK_n, 0x1E45,
1551 XK_period, XK_o, 0x022F,
1552 XK_period, XK_p, 0x1E57,
1553 XK_period, XK_r, 0x1E59,
1554 XK_period, XK_s, 0x1E61,
1555 XK_period, XK_t, 0x1E6B,
1556 XK_period, XK_w, 0x1E87,
1557 XK_period, XK_x, 0x1E8B,
1558 XK_period, XK_y, 0x1E8F,
1559 XK_period, XK_z, 0x017C,
1560 XK_period, 0x017F, 0x1E9B,
1561 XK_period, XK_Sacute, 0x1E64,
1562 XK_period, XK_Scaron, 0x1E66,
1563 XK_period, XK_sacute, 0x1E65,
1564 XK_period, XK_scaron, 0x1E67,
1565 XK_period, 0x1E62, 0x1E68,
1566 XK_period, 0x1E63, 0x1E69,
1567 XK_slash, XK_slash, 0x005C,
1568 XK_slash, XK_less, 0x005C,
1569 XK_slash, XK_C, 0x00A2,
1570 XK_slash, XK_D, 0x0110,
1571 XK_slash, XK_G, 0x01E4,
1572 XK_slash, XK_H, 0x0126,
1573 XK_slash, XK_I, 0x0197,
1574 XK_slash, XK_L, 0x0141,
1575 XK_slash, XK_O, 0x00D8,
1576 XK_slash, XK_T, 0x0166,
1577 XK_slash, XK_U, 0x00B5,
1578 XK_slash, XK_Z, 0x01B5,
1579 XK_slash, XK_asciicircum, 0x007C,
1580 XK_slash, XK_b, 0x0180,
1581 XK_slash, XK_c, 0x00A2,
1582 XK_slash, XK_d, 0x0111,
1583 XK_slash, XK_g, 0x01E5,
1584 XK_slash, XK_h, 0x0127,
1585 XK_slash, XK_i, 0x0268,
1586 XK_slash, XK_l, 0x0142,
1587 XK_slash, XK_m, 0x20A5,
1588 XK_slash, XK_o, 0x00F8,
1589 XK_slash, XK_t, 0x0167,
1590 XK_slash, XK_u, 0x00B5,
1591 XK_slash, XK_z, 0x01B6,
1592 XK_slash, 0x0294, 0x02A1,
1593 XK_slash, 0x04AE, 0x04B0,
1594 XK_slash, 0x04AF, 0x04B1,
1595 XK_slash, XK_Cyrillic_ghe, 0x0493,
1596 XK_slash, XK_Cyrillic_ka, 0x049F,
1597 XK_slash, XK_Cyrillic_GHE, 0x0492,
1598 XK_slash, XK_Cyrillic_KA, 0x049E,
1599 XK_slash, XK_leftarrow, 0x219A,
1600 XK_slash, XK_rightarrow, 0x219B,
1601 XK_slash, 0x2194, 0x21AE,
1602 XK_0, XK_asterisk, 0x00B0,
1603 XK_0, XK_C, 0x00A9,
1604 XK_0, XK_S, 0x00A7,
1605 XK_0, XK_X, 0x00A4,
1606 XK_0, XK_asciicircum, 0x00B0,
1607 XK_0, XK_c, 0x00A9,
1608 XK_0, XK_s, 0x00A7,
1609 XK_0, XK_x, 0x00A4,
1610 XK_1, XK_2, 0x00BD,
1611 XK_1, XK_3, 0x2153,
1612 XK_1, XK_4, 0x00BC,
1613 XK_1, XK_5, 0x2155,
1614 XK_1, XK_6, 0x2159,
1615 XK_1, XK_8, 0x215B,
1616 XK_1, XK_S, 0x00B9,
1617 XK_1, XK_asciicircum, 0x00B9,
1618 XK_1, XK_s, 0x00B9,
1619 XK_2, XK_3, 0x2154,
1620 XK_2, XK_5, 0x2156,
1621 XK_2, XK_S, 0x00B2,
1622 XK_2, XK_asciicircum, 0x00B2,
1623 XK_2, XK_s, 0x00B2,
1624 XK_3, XK_4, 0x00BE,
1625 XK_3, XK_5, 0x2157,
1626 XK_3, XK_8, 0x215C,
1627 XK_3, XK_S, 0x00B3,
1628 XK_3, XK_asciicircum, 0x00B3,
1629 XK_3, XK_s, 0x00B3,
1630 XK_4, XK_5, 0x2158,
1631 XK_5, XK_6, 0x215A,
1632 XK_5, XK_8, 0x215D,
1633 XK_7, XK_8, 0x215E,
1634 XK_colon, XK_minus, 0x00F7,
1635 XK_semicolon, XK_A, 0x0104,
1636 XK_semicolon, XK_E, 0x0118,
1637 XK_semicolon, XK_I, 0x012E,
1638 XK_semicolon, XK_O, 0x01EA,
1639 XK_semicolon, XK_U, 0x0172,
1640 XK_semicolon, XK_a, 0x0105,
1641 XK_semicolon, XK_e, 0x0119,
1642 XK_semicolon, XK_i, 0x012F,
1643 XK_semicolon, XK_o, 0x01EB,
1644 XK_semicolon, XK_u, 0x0173,
1645 XK_less, XK_space, 0x02C7,
1646 XK_less, XK_quotedbl, 0x201C,
1647 XK_less, XK_apostrophe, 0x2018,
1648 XK_less, XK_slash, 0x005C,
1649 XK_less, XK_less, 0x00AB,
1650 XK_less, XK_C, 0x010C,
1651 XK_less, XK_D, 0x010E,
1652 XK_less, XK_E, 0x011A,
1653 XK_less, XK_L, 0x013D,
1654 XK_less, XK_N, 0x0147,
1655 XK_less, XK_R, 0x0158,
1656 XK_less, XK_S, 0x0160,
1657 XK_less, XK_T, 0x0164,
1658 XK_less, XK_Z, 0x017D,
1659 XK_less, XK_c, 0x010D,
1660 XK_less, XK_d, 0x010F,
1661 XK_less, XK_e, 0x011B,
1662 XK_less, XK_l, 0x013E,
1663 XK_less, XK_n, 0x0148,
1664 XK_less, XK_r, 0x0159,
1665 XK_less, XK_s, 0x0161,
1666 XK_less, XK_t, 0x0165,
1667 XK_less, XK_z, 0x017E,
1668 XK_less, 0x0338, 0x226E,
1669 XK_equal, XK_C, 0x20AC,
1670 XK_equal, XK_E, 0x20AC,
1671 XK_equal, XK_L, 0x00A3,
1672 XK_equal, XK_N, 0x20A6,
1673 XK_equal, XK_O, 0x0150,
1674 XK_equal, XK_U, 0x0170,
1675 XK_equal, XK_W, 0x20A9,
1676 XK_equal, XK_Y, 0x00A5,
1677 XK_equal, XK_c, 0x20AC,
1678 XK_equal, XK_e, 0x20AC,
1679 XK_equal, XK_l, 0x00A3,
1680 XK_equal, XK_o, 0x0151,
1681 XK_equal, XK_u, 0x0171,
1682 XK_equal, XK_y, 0x00A5,
1683 XK_equal, 0x0338, 0x2260,
1684 XK_equal, XK_Cyrillic_u, 0x04F3,
1685 XK_equal, XK_Cyrillic_IE, 0x20AC,
1686 XK_equal, XK_Cyrillic_ES, 0x20AC,
1687 XK_equal, XK_Cyrillic_U, 0x04F2,
1688 XK_greater, XK_space, 0x005E,
1689 XK_greater, XK_quotedbl, 0x201D,
1690 XK_greater, XK_apostrophe, 0x2019,
1691 XK_greater, XK_greater, 0x00BB,
1692 XK_greater, XK_A, 0x00C2,
1693 XK_greater, XK_E, 0x00CA,
1694 XK_greater, XK_I, 0x00CE,
1695 XK_greater, XK_O, 0x00D4,
1696 XK_greater, XK_U, 0x00DB,
1697 XK_greater, XK_a, 0x00E2,
1698 XK_greater, XK_e, 0x00EA,
1699 XK_greater, XK_i, 0x00EE,
1700 XK_greater, XK_o, 0x00F4,
1701 XK_greater, XK_u, 0x00FB,
1702 XK_greater, 0x0338, 0x226F,
1703 XK_question, XK_exclam, 0x203D,
1704 XK_question, XK_question, 0x00BF,
1705 XK_question, XK_A, 0x1EA2,
1706 XK_question, XK_E, 0x1EBA,
1707 XK_question, XK_I, 0x1EC8,
1708 XK_question, XK_O, 0x1ECE,
1709 XK_question, XK_U, 0x1EE6,
1710 XK_question, XK_Y, 0x1EF6,
1711 XK_question, XK_a, 0x1EA3,
1712 XK_question, XK_e, 0x1EBB,
1713 XK_question, XK_i, 0x1EC9,
1714 XK_question, XK_o, 0x1ECF,
1715 XK_question, XK_u, 0x1EE7,
1716 XK_question, XK_y, 0x1EF7,
1717 XK_question, XK_Acircumflex, 0x1EA8,
1718 XK_question, XK_Ecircumflex, 0x1EC2,
1719 XK_question, XK_Ocircumflex, 0x1ED4,
1720 XK_question, XK_acircumflex, 0x1EA9,
1721 XK_question, XK_ecircumflex, 0x1EC3,
1722 XK_question, XK_ocircumflex, 0x1ED5,
1723 XK_question, XK_Ohorn, 0x1EDE,
1724 XK_question, XK_ohorn, 0x1EDF,
1725 XK_question, XK_Uhorn, 0x1EEC,
1726 XK_question, XK_uhorn, 0x1EED,
1727 XK_question, XK_Abreve, 0x1EB2,
1728 XK_question, XK_abreve, 0x1EB3,
1729 XK_A, XK_quotedbl, 0x00C4,
1730 XK_A, XK_apostrophe, 0x00C1,
1731 XK_A, XK_parenleft, 0x0102,
1732 XK_A, XK_asterisk, 0x00C5,
1733 XK_A, XK_comma, 0x0104,
1734 XK_A, XK_minus, 0x00C3,
1735 XK_A, XK_greater, 0x00C2,
1736 XK_A, XK_A, 0x00C5,
1737 XK_A, XK_E, 0x00C6,
1738 XK_A, XK_T, 0x0040,
1739 XK_A, XK_asciicircum, 0x00C2,
1740 XK_A, XK_underscore, 0x00AA,
1741 XK_A, XK_grave, 0x00C0,
1742 XK_A, XK_asciitilde, 0x00C3,
1743 XK_A, XK_diaeresis, 0x00C4,
1744 XK_A, XK_acute, 0x00C1,
1745 XK_B, XK_period, 0x1E02,
1746 XK_C, XK_apostrophe, 0x0106,
1747 XK_C, XK_comma, 0x00C7,
1748 XK_C, XK_period, 0x010A,
1749 XK_C, XK_slash, 0x00A2,
1750 XK_C, XK_0, 0x00A9,
1751 XK_C, XK_less, 0x010C,
1752 XK_C, XK_equal, 0x20AC,
1753 XK_C, XK_E, 0x20A0,
1754 XK_C, XK_O, 0x00A9,
1755 XK_C, XK_o, 0x00A9,
1756 XK_C, XK_r, 0x20A2,
1757 XK_C, XK_bar, 0x00A2,
1758 XK_D, XK_minus, 0x0110,
1759 XK_D, XK_period, 0x1E0A,
1760 XK_D, XK_less, 0x010E,
1761 XK_D, XK_H, 0x00D0,
1762 XK_E, XK_quotedbl, 0x00CB,
1763 XK_E, XK_apostrophe, 0x00C9,
1764 XK_E, XK_comma, 0x0118,
1765 XK_E, XK_minus, 0x0112,
1766 XK_E, XK_period, 0x0116,
1767 XK_E, XK_less, 0x011A,
1768 XK_E, XK_equal, 0x20AC,
1769 XK_E, XK_greater, 0x00CA,
1770 XK_E, XK_asciicircum, 0x00CA,
1771 XK_E, XK_underscore, 0x0112,
1772 XK_E, XK_grave, 0x00C8,
1773 XK_E, XK_diaeresis, 0x00CB,
1774 XK_E, XK_acute, 0x00C9,
1775 XK_F, XK_period, 0x1E1E,
1776 XK_F, XK_r, 0x20A3,
1777 XK_G, XK_parenleft, 0x011E,
1778 XK_G, XK_comma, 0x0122,
1779 XK_G, XK_period, 0x0120,
1780 XK_G, XK_U, 0x011E,
1781 XK_G, XK_breve, 0x011E,
1782 XK_I, XK_quotedbl, 0x00CF,
1783 XK_I, XK_apostrophe, 0x00CD,
1784 XK_I, XK_comma, 0x012E,
1785 XK_I, XK_minus, 0x012A,
1786 XK_I, XK_period, 0x0130,
1787 XK_I, XK_greater, 0x00CE,
1788 XK_I, XK_asciicircum, 0x00CE,
1789 XK_I, XK_underscore, 0x012A,
1790 XK_I, XK_grave, 0x00CC,
1791 XK_I, XK_asciitilde, 0x0128,
1792 XK_I, XK_diaeresis, 0x00CF,
1793 XK_I, XK_acute, 0x00CD,
1794 XK_K, XK_comma, 0x0136,
1795 XK_L, XK_apostrophe, 0x0139,
1796 XK_L, XK_comma, 0x013B,
1797 XK_L, XK_minus, 0x00A3,
1798 XK_L, XK_slash, 0x0141,
1799 XK_L, XK_less, 0x013D,
1800 XK_L, XK_equal, 0x00A3,
1801 XK_L, XK_V, 0x007C,
1802 XK_M, XK_period, 0x1E40,
1803 XK_N, XK_apostrophe, 0x0143,
1804 XK_N, XK_comma, 0x0145,
1805 XK_N, XK_minus, 0x00D1,
1806 XK_N, XK_less, 0x0147,
1807 XK_N, XK_equal, 0x20A6,
1808 XK_N, XK_G, 0x014A,
1809 XK_N, XK_O, 0x2116,
1810 XK_N, XK_o, 0x2116,
1811 XK_N, XK_asciitilde, 0x00D1,
1812 XK_O, XK_quotedbl, 0x00D6,
1813 XK_O, XK_apostrophe, 0x00D3,
1814 XK_O, XK_minus, 0x00D5,
1815 XK_O, XK_slash, 0x00D8,
1816 XK_O, XK_greater, 0x00D4,
1817 XK_O, XK_C, 0x00A9,
1818 XK_O, XK_E, 0x0152,
1819 XK_O, XK_R, 0x00AE,
1820 XK_O, XK_S, 0x00A7,
1821 XK_O, XK_X, 0x00A4,
1822 XK_O, XK_asciicircum, 0x00D4,
1823 XK_O, XK_underscore, 0x00BA,
1824 XK_O, XK_grave, 0x00D2,
1825 XK_O, XK_c, 0x00A9,
1826 XK_O, XK_r, 0x00AE,
1827 XK_O, XK_x, 0x00A4,
1828 XK_O, XK_asciitilde, 0x00D5,
1829 XK_O, XK_diaeresis, 0x00D6,
1830 XK_O, XK_acute, 0x00D3,
1831 XK_P, XK_exclam, 0x00B6,
1832 XK_P, XK_period, 0x1E56,
1833 XK_P, XK_P, 0x00B6,
1834 XK_P, XK_t, 0x20A7,
1835 XK_R, XK_apostrophe, 0x0154,
1836 XK_R, XK_comma, 0x0156,
1837 XK_R, XK_less, 0x0158,
1838 XK_R, XK_O, 0x00AE,
1839 XK_R, XK_s, 0x20A8,
1840 XK_S, XK_exclam, 0x00A7,
1841 XK_S, XK_apostrophe, 0x015A,
1842 XK_S, XK_comma, 0x015E,
1843 XK_S, XK_period, 0x1E60,
1844 XK_S, XK_0, 0x00A7,
1845 XK_S, XK_1, 0x00B9,
1846 XK_S, XK_2, 0x00B2,
1847 XK_S, XK_3, 0x00B3,
1848 XK_S, XK_less, 0x0160,
1849 XK_S, XK_M, 0x2120,
1850 XK_S, XK_O, 0x00A7,
1851 XK_S, XK_m, 0x2120,
1852 XK_S, XK_cedilla, 0x015E,
1853 XK_T, XK_minus, 0x0166,
1854 XK_T, XK_period, 0x1E6A,
1855 XK_T, XK_slash, 0x0166,
1856 XK_T, XK_less, 0x0164,
1857 XK_T, XK_H, 0x00DE,
1858 XK_T, XK_M, 0x2122,
1859 XK_T, XK_m, 0x2122,
1860 XK_U, XK_quotedbl, 0x00DC,
1861 XK_U, XK_apostrophe, 0x00DA,
1862 XK_U, XK_asterisk, 0x016E,
1863 XK_U, XK_comma, 0x0172,
1864 XK_U, XK_minus, 0x016A,
1865 XK_U, XK_slash, 0x00B5,
1866 XK_U, XK_greater, 0x00DB,
1867 XK_U, XK_A, 0x0102,
1868 XK_U, XK_E, 0x0114,
1869 XK_U, XK_G, 0x011E,
1870 XK_U, XK_I, 0x012C,
1871 XK_U, XK_O, 0x014E,
1872 XK_U, XK_U, 0x016C,
1873 XK_U, XK_asciicircum, 0x00DB,
1874 XK_U, XK_underscore, 0x016A,
1875 XK_U, XK_grave, 0x00D9,
1876 XK_U, XK_a, 0x0103,
1877 XK_U, XK_e, 0x0115,
1878 XK_U, XK_g, 0x011F,
1879 XK_U, XK_i, 0x012D,
1880 XK_U, XK_o, 0x014F,
1881 XK_U, XK_u, 0x016D,
1882 XK_U, XK_asciitilde, 0x0168,
1883 XK_U, XK_diaeresis, 0x00DC,
1884 XK_U, XK_acute, 0x00DA,
1885 XK_U, 0x0228, 0x1E1C,
1886 XK_U, 0x0229, 0x1E1D,
1887 XK_U, XK_Cyrillic_a, 0x04D1,
1888 XK_U, XK_Cyrillic_ie, 0x04D7,
1889 XK_U, XK_Cyrillic_i, 0x0439,
1890 XK_U, XK_Cyrillic_u, 0x045E,
1891 XK_U, XK_Cyrillic_zhe, 0x04C2,
1892 XK_U, XK_Cyrillic_A, 0x04D0,
1893 XK_U, XK_Cyrillic_IE, 0x04D6,
1894 XK_U, XK_Cyrillic_I, 0x0419,
1895 XK_U, XK_Cyrillic_U, 0x040E,
1896 XK_U, XK_Cyrillic_ZHE, 0x04C1,
1897 XK_U, XK_Greek_ALPHA, 0x1FB8,
1898 XK_U, XK_Greek_IOTA, 0x1FD8,
1899 XK_U, XK_Greek_UPSILON, 0x1FE8,
1900 XK_U, XK_Greek_alpha, 0x1FB0,
1901 XK_U, XK_Greek_iota, 0x1FD0,
1902 XK_U, XK_Greek_upsilon, 0x1FE0,
1903 XK_U, 0x1EA0, 0x1EB6,
1904 XK_U, 0x1EA1, 0x1EB7,
1905 XK_V, XK_L, 0x007C,
1906 XK_W, XK_equal, 0x20A9,
1907 XK_W, XK_asciicircum, 0x0174,
1908 XK_X, XK_0, 0x00A4,
1909 XK_X, XK_O, 0x00A4,
1910 XK_X, XK_o, 0x00A4,
1911 XK_Y, XK_quotedbl, 0x0178,
1912 XK_Y, XK_apostrophe, 0x00DD,
1913 XK_Y, XK_minus, 0x00A5,
1914 XK_Y, XK_equal, 0x00A5,
1915 XK_Y, XK_asciicircum, 0x0176,
1916 XK_Y, XK_diaeresis, 0x0178,
1917 XK_Y, XK_acute, 0x00DD,
1918 XK_Z, XK_apostrophe, 0x0179,
1919 XK_Z, XK_period, 0x017B,
1920 XK_Z, XK_less, 0x017D,
1921 XK_asciicircum, XK_space, 0x005E,
1922 XK_asciicircum, XK_parenleft, 0x207D,
1923 XK_asciicircum, XK_parenright, 0x207E,
1924 XK_asciicircum, XK_plus, 0x207A,
1925 XK_asciicircum, XK_minus, 0x00AF,
1926 XK_asciicircum, XK_period, 0x00B7,
1927 XK_asciicircum, XK_slash, 0x007C,
1928 XK_asciicircum, XK_0, 0x00B0,
1929 XK_asciicircum, XK_1, 0x00B9,
1930 XK_asciicircum, XK_2, 0x00B2,
1931 XK_asciicircum, XK_3, 0x00B3,
1932 XK_asciicircum, XK_4, 0x2074,
1933 XK_asciicircum, XK_5, 0x2075,
1934 XK_asciicircum, XK_6, 0x2076,
1935 XK_asciicircum, XK_7, 0x2077,
1936 XK_asciicircum, XK_8, 0x2078,
1937 XK_asciicircum, XK_9, 0x2079,
1938 XK_asciicircum, XK_equal, 0x207C,
1939 XK_asciicircum, XK_A, 0x00C2,
1940 XK_asciicircum, XK_C, 0x0108,
1941 XK_asciicircum, XK_E, 0x00CA,
1942 XK_asciicircum, XK_G, 0x011C,
1943 XK_asciicircum, XK_H, 0x0124,
1944 XK_asciicircum, XK_I, 0x00CE,
1945 XK_asciicircum, XK_J, 0x0134,
1946 XK_asciicircum, XK_O, 0x00D4,
1947 XK_asciicircum, XK_S, 0x015C,
1948 XK_asciicircum, XK_U, 0x00DB,
1949 XK_asciicircum, XK_W, 0x0174,
1950 XK_asciicircum, XK_Y, 0x0176,
1951 XK_asciicircum, XK_Z, 0x1E90,
1952 XK_asciicircum, XK_underscore, 0x00AF,
1953 XK_asciicircum, XK_a, 0x00E2,
1954 XK_asciicircum, XK_c, 0x0109,
1955 XK_asciicircum, XK_e, 0x00EA,
1956 XK_asciicircum, XK_g, 0x011D,
1957 XK_asciicircum, XK_h, 0x0125,
1958 XK_asciicircum, XK_i, 0x00EE,
1959 XK_asciicircum, XK_j, 0x0135,
1960 XK_asciicircum, XK_o, 0x00F4,
1961 XK_asciicircum, XK_s, 0x015D,
1962 XK_asciicircum, XK_u, 0x00FB,
1963 XK_asciicircum, XK_w, 0x0175,
1964 XK_asciicircum, XK_y, 0x0177,
1965 XK_asciicircum, XK_z, 0x1E91,
1966 XK_asciicircum, 0x1EA0, 0x1EAC,
1967 XK_asciicircum, 0x1EA1, 0x1EAD,
1968 XK_asciicircum, 0x1EB8, 0x1EC6,
1969 XK_asciicircum, 0x1EB9, 0x1EC7,
1970 XK_asciicircum, 0x1ECC, 0x1ED8,
1971 XK_asciicircum, 0x1ECD, 0x1ED9,
1972 XK_asciicircum, 0x2212, 0x207B,
1973 XK_asciicircum, 0x4E00, 0x3192,
1974 XK_asciicircum, 0x4E01, 0x319C,
1975 XK_asciicircum, 0x4E09, 0x3194,
1976 XK_asciicircum, 0x4E0A, 0x3196,
1977 XK_asciicircum, 0x4E0B, 0x3198,
1978 XK_asciicircum, 0x4E19, 0x319B,
1979 XK_asciicircum, 0x4E2D, 0x3197,
1980 XK_asciicircum, 0x4E59, 0x319A,
1981 XK_asciicircum, 0x4E8C, 0x3193,
1982 XK_asciicircum, 0x4EBA, 0x319F,
1983 XK_asciicircum, 0x56DB, 0x3195,
1984 XK_asciicircum, 0x5730, 0x319E,
1985 XK_asciicircum, 0x5929, 0x319D,
1986 XK_asciicircum, 0x7532, 0x3199,
1987 XK_asciicircum, XK_KP_Space, 0x00B2,
1988 XK_asciicircum, XK_KP_Add, 0x207A,
1989 XK_asciicircum, XK_KP_0, 0x2070,
1990 XK_asciicircum, XK_KP_1, 0x00B9,
1991 XK_asciicircum, XK_KP_2, 0x00B2,
1992 XK_asciicircum, XK_KP_3, 0x00B3,
1993 XK_asciicircum, XK_KP_4, 0x2074,
1994 XK_asciicircum, XK_KP_5, 0x2075,
1995 XK_asciicircum, XK_KP_6, 0x2076,
1996 XK_asciicircum, XK_KP_7, 0x2077,
1997 XK_asciicircum, XK_KP_8, 0x2078,
1998 XK_asciicircum, XK_KP_9, 0x2079,
1999 XK_asciicircum, XK_KP_Equal, 0x207C,
2000 XK_underscore, XK_parenleft, 0x208D,
2001 XK_underscore, XK_parenright, 0x208E,
2002 XK_underscore, XK_plus, 0x208A,
2003 XK_underscore, XK_0, 0x2080,
2004 XK_underscore, XK_1, 0x2081,
2005 XK_underscore, XK_2, 0x2082,
2006 XK_underscore, XK_3, 0x2083,
2007 XK_underscore, XK_4, 0x2084,
2008 XK_underscore, XK_5, 0x2085,
2009 XK_underscore, XK_6, 0x2086,
2010 XK_underscore, XK_7, 0x2087,
2011 XK_underscore, XK_8, 0x2088,
2012 XK_underscore, XK_9, 0x2089,
2013 XK_underscore, XK_equal, 0x208C,
2014 XK_underscore, XK_A, 0x00AA,
2015 XK_underscore, XK_E, 0x0112,
2016 XK_underscore, XK_G, 0x1E20,
2017 XK_underscore, XK_I, 0x012A,
2018 XK_underscore, XK_O, 0x00BA,
2019 XK_underscore, XK_U, 0x016A,
2020 XK_underscore, XK_Y, 0x0232,
2021 XK_underscore, XK_asciicircum, 0x00AF,
2022 XK_underscore, XK_underscore, 0x00AF,
2023 XK_underscore, XK_a, 0x00AA,
2024 XK_underscore, XK_e, 0x0113,
2025 XK_underscore, XK_g, 0x1E21,
2026 XK_underscore, XK_i, 0x012B,
2027 XK_underscore, XK_o, 0x00BA,
2028 XK_underscore, XK_u, 0x016B,
2029 XK_underscore, XK_y, 0x0233,
2030 XK_underscore, XK_Adiaeresis, 0x01DE,
2031 XK_underscore, XK_AE, 0x01E2,
2032 XK_underscore, XK_Otilde, 0x022C,
2033 XK_underscore, XK_Odiaeresis, 0x022A,
2034 XK_underscore, 0x00DC, 0x01D5,
2035 XK_underscore, XK_adiaeresis, 0x01DF,
2036 XK_underscore, XK_ae, 0x01E3,
2037 XK_underscore, XK_otilde, 0x022D,
2038 XK_underscore, XK_odiaeresis, 0x022B,
2039 XK_underscore, XK_udiaeresis, 0x01D6,
2040 XK_underscore, 0x01EA, 0x01EC,
2041 XK_underscore, 0x01EB, 0x01ED,
2042 XK_underscore, 0x0226, 0x01E0,
2043 XK_underscore, 0x0227, 0x01E1,
2044 XK_underscore, 0x022E, 0x0230,
2045 XK_underscore, 0x022F, 0x0231,
2046 XK_underscore, XK_Cyrillic_i, 0x04E3,
2047 XK_underscore, XK_Cyrillic_u, 0x04EF,
2048 XK_underscore, XK_Cyrillic_I, 0x04E2,
2049 XK_underscore, XK_Cyrillic_U, 0x04EE,
2050 XK_underscore, XK_Greek_ALPHA, 0x1FB9,
2051 XK_underscore, XK_Greek_IOTA, 0x1FD9,
2052 XK_underscore, XK_Greek_UPSILON, 0x1FE9,
2053 XK_underscore, XK_Greek_alpha, 0x1FB1,
2054 XK_underscore, XK_Greek_iota, 0x1FD1,
2055 XK_underscore, XK_Greek_upsilon, 0x1FE1,
2056 XK_underscore, 0x1E36, 0x1E38,
2057 XK_underscore, 0x1E37, 0x1E39,
2058 XK_underscore, 0x1E5A, 0x1E5C,
2059 XK_underscore, 0x1E5B, 0x1E5D,
2060 XK_underscore, 0x2212, 0x208B,
2061 XK_underscore, XK_KP_Space, 0x2082,
2062 XK_underscore, XK_KP_Add, 0x208A,
2063 XK_underscore, XK_KP_0, 0x2080,
2064 XK_underscore, XK_KP_1, 0x2081,
2065 XK_underscore, XK_KP_2, 0x2082,
2066 XK_underscore, XK_KP_3, 0x2083,
2067 XK_underscore, XK_KP_4, 0x2084,
2068 XK_underscore, XK_KP_5, 0x2085,
2069 XK_underscore, XK_KP_6, 0x2086,
2070 XK_underscore, XK_KP_7, 0x2087,
2071 XK_underscore, XK_KP_8, 0x2088,
2072 XK_underscore, XK_KP_9, 0x2089,
2073 XK_underscore, XK_KP_Equal, 0x208C,
2074 XK_grave, XK_space, 0x0060,
2075 XK_grave, XK_A, 0x00C0,
2076 XK_grave, XK_E, 0x00C8,
2077 XK_grave, XK_I, 0x00CC,
2078 XK_grave, XK_N, 0x01F8,
2079 XK_grave, XK_O, 0x00D2,
2080 XK_grave, XK_U, 0x00D9,
2081 XK_grave, XK_W, 0x1E80,
2082 XK_grave, XK_Y, 0x1EF2,
2083 XK_grave, XK_a, 0x00E0,
2084 XK_grave, XK_e, 0x00E8,
2085 XK_grave, XK_i, 0x00EC,
2086 XK_grave, XK_n, 0x01F9,
2087 XK_grave, XK_o, 0x00F2,
2088 XK_grave, XK_u, 0x00F9,
2089 XK_grave, XK_w, 0x1E81,
2090 XK_grave, XK_y, 0x1EF3,
2091 XK_grave, XK_Acircumflex, 0x1EA6,
2092 XK_grave, XK_Ecircumflex, 0x1EC0,
2093 XK_grave, XK_Ocircumflex, 0x1ED2,
2094 XK_grave, 0x00DC, 0x01DB,
2095 XK_grave, XK_acircumflex, 0x1EA7,
2096 XK_grave, XK_ecircumflex, 0x1EC1,
2097 XK_grave, XK_ocircumflex, 0x1ED3,
2098 XK_grave, XK_udiaeresis, 0x01DC,
2099 XK_grave, XK_Ohorn, 0x1EDC,
2100 XK_grave, XK_ohorn, 0x1EDD,
2101 XK_grave, XK_Uhorn, 0x1EEA,
2102 XK_grave, XK_uhorn, 0x1EEB,
2103 XK_grave, XK_Abreve, 0x1EB0,
2104 XK_grave, XK_abreve, 0x1EB1,
2105 XK_grave, XK_Emacron, 0x1E14,
2106 XK_grave, XK_emacron, 0x1E15,
2107 XK_grave, XK_Omacron, 0x1E50,
2108 XK_grave, XK_omacron, 0x1E51,
2109 XK_grave, XK_Cyrillic_ie, 0x0450,
2110 XK_grave, XK_Cyrillic_i, 0x045D,
2111 XK_grave, XK_Cyrillic_IE, 0x0400,
2112 XK_grave, XK_Cyrillic_I, 0x040D,
2113 XK_grave, XK_Greek_iotadieresis, 0x1FD2,
2114 XK_grave, XK_Greek_upsilondieresis, 0x1FE2,
2115 XK_grave, XK_Greek_ALPHA, 0x1FBA,
2116 XK_grave, XK_Greek_EPSILON, 0x1FC8,
2117 XK_grave, XK_Greek_ETA, 0x1FCA,
2118 XK_grave, XK_Greek_IOTA, 0x1FDA,
2119 XK_grave, XK_Greek_OMICRON, 0x1FF8,
2120 XK_grave, XK_Greek_UPSILON, 0x1FEA,
2121 XK_grave, XK_Greek_OMEGA, 0x1FFA,
2122 XK_grave, XK_Greek_alpha, 0x1F70,
2123 XK_grave, XK_Greek_epsilon, 0x1F72,
2124 XK_grave, XK_Greek_eta, 0x1F74,
2125 XK_grave, XK_Greek_iota, 0x1F76,
2126 XK_grave, XK_Greek_omicron, 0x1F78,
2127 XK_grave, XK_Greek_upsilon, 0x1F7A,
2128 XK_grave, XK_Greek_omega, 0x1F7C,
2129 XK_grave, 0x1F00, 0x1F02,
2130 XK_grave, 0x1F01, 0x1F03,
2131 XK_grave, 0x1F08, 0x1F0A,
2132 XK_grave, 0x1F09, 0x1F0B,
2133 XK_grave, 0x1F10, 0x1F12,
2134 XK_grave, 0x1F11, 0x1F13,
2135 XK_grave, 0x1F18, 0x1F1A,
2136 XK_grave, 0x1F19, 0x1F1B,
2137 XK_grave, 0x1F20, 0x1F22,
2138 XK_grave, 0x1F21, 0x1F23,
2139 XK_grave, 0x1F28, 0x1F2A,
2140 XK_grave, 0x1F29, 0x1F2B,
2141 XK_grave, 0x1F30, 0x1F32,
2142 XK_grave, 0x1F31, 0x1F33,
2143 XK_grave, 0x1F38, 0x1F3A,
2144 XK_grave, 0x1F39, 0x1F3B,
2145 XK_grave, 0x1F40, 0x1F42,
2146 XK_grave, 0x1F41, 0x1F43,
2147 XK_grave, 0x1F48, 0x1F4A,
2148 XK_grave, 0x1F49, 0x1F4B,
2149 XK_grave, 0x1F50, 0x1F52,
2150 XK_grave, 0x1F51, 0x1F53,
2151 XK_grave, 0x1F59, 0x1F5B,
2152 XK_grave, 0x1F60, 0x1F62,
2153 XK_grave, 0x1F61, 0x1F63,
2154 XK_grave, 0x1F68, 0x1F6A,
2155 XK_grave, 0x1F69, 0x1F6B,
2156 XK_a, XK_quotedbl, 0x00E4,
2157 XK_a, XK_apostrophe, 0x00E1,
2158 XK_a, XK_parenleft, 0x0103,
2159 XK_a, XK_asterisk, 0x00E5,
2160 XK_a, XK_comma, 0x0105,
2161 XK_a, XK_minus, 0x00E3,
2162 XK_a, XK_greater, 0x00E2,
2163 XK_a, XK_asciicircum, 0x00E2,
2164 XK_a, XK_underscore, 0x00AA,
2165 XK_a, XK_grave, 0x00E0,
2166 XK_a, XK_a, 0x00E5,
2167 XK_a, XK_e, 0x00E6,
2168 XK_a, XK_asciitilde, 0x00E3,
2169 XK_a, XK_diaeresis, 0x00E4,
2170 XK_a, XK_acute, 0x00E1,
2171 XK_b, XK_period, 0x1E03,
2172 XK_b, XK_A, 0x0102,
2173 XK_b, XK_E, 0x0114,
2174 XK_b, XK_G, 0x011E,
2175 XK_b, XK_I, 0x012C,
2176 XK_b, XK_O, 0x014E,
2177 XK_b, XK_U, 0x016C,
2178 XK_b, XK_a, 0x0103,
2179 XK_b, XK_e, 0x0115,
2180 XK_b, XK_g, 0x011F,
2181 XK_b, XK_i, 0x012D,
2182 XK_b, XK_o, 0x014F,
2183 XK_b, XK_u, 0x016D,
2184 XK_b, 0x0228, 0x1E1C,
2185 XK_b, 0x0229, 0x1E1D,
2186 XK_b, XK_Cyrillic_a, 0x04D1,
2187 XK_b, XK_Cyrillic_ie, 0x04D7,
2188 XK_b, XK_Cyrillic_i, 0x0439,
2189 XK_b, XK_Cyrillic_u, 0x045E,
2190 XK_b, XK_Cyrillic_zhe, 0x04C2,
2191 XK_b, XK_Cyrillic_A, 0x04D0,
2192 XK_b, XK_Cyrillic_IE, 0x04D6,
2193 XK_b, XK_Cyrillic_I, 0x0419,
2194 XK_b, XK_Cyrillic_U, 0x040E,
2195 XK_b, XK_Cyrillic_ZHE, 0x04C1,
2196 XK_b, XK_Greek_ALPHA, 0x1FB8,
2197 XK_b, XK_Greek_IOTA, 0x1FD8,
2198 XK_b, XK_Greek_UPSILON, 0x1FE8,
2199 XK_b, XK_Greek_alpha, 0x1FB0,
2200 XK_b, XK_Greek_iota, 0x1FD0,
2201 XK_b, XK_Greek_upsilon, 0x1FE0,
2202 XK_b, 0x1EA0, 0x1EB6,
2203 XK_b, 0x1EA1, 0x1EB7,
2204 XK_c, XK_apostrophe, 0x0107,
2205 XK_c, XK_comma, 0x00E7,
2206 XK_c, XK_period, 0x010B,
2207 XK_c, XK_slash, 0x00A2,
2208 XK_c, XK_0, 0x00A9,
2209 XK_c, XK_less, 0x010D,
2210 XK_c, XK_equal, 0x20AC,
2211 XK_c, XK_A, 0x01CD,
2212 XK_c, XK_C, 0x010C,
2213 XK_c, XK_D, 0x010E,
2214 XK_c, XK_E, 0x011A,
2215 XK_c, XK_G, 0x01E6,
2216 XK_c, XK_H, 0x021E,
2217 XK_c, XK_I, 0x01CF,
2218 XK_c, XK_K, 0x01E8,
2219 XK_c, XK_L, 0x013D,
2220 XK_c, XK_N, 0x0147,
2221 XK_c, XK_O, 0x00A9,
2222 XK_c, XK_R, 0x0158,
2223 XK_c, XK_S, 0x0160,
2224 XK_c, XK_T, 0x0164,
2225 XK_c, XK_U, 0x01D3,
2226 XK_c, XK_Z, 0x017D,
2227 XK_c, XK_a, 0x01CE,
2228 XK_c, XK_c, 0x010D,
2229 XK_c, XK_d, 0x010F,
2230 XK_c, XK_e, 0x011B,
2231 XK_c, XK_g, 0x01E7,
2232 XK_c, XK_h, 0x021F,
2233 XK_c, XK_i, 0x01D0,
2234 XK_c, XK_j, 0x01F0,
2235 XK_c, XK_k, 0x01E9,
2236 XK_c, XK_l, 0x013E,
2237 XK_c, XK_n, 0x0148,
2238 XK_c, XK_o, 0x00A9,
2239 XK_c, XK_r, 0x0159,
2240 XK_c, XK_s, 0x0161,
2241 XK_c, XK_t, 0x0165,
2242 XK_c, XK_u, 0x01D4,
2243 XK_c, XK_z, 0x017E,
2244 XK_c, XK_bar, 0x00A2,
2245 XK_c, 0x00DC, 0x01D9,
2246 XK_c, XK_udiaeresis, 0x01DA,
2247 XK_c, 0x01B7, 0x01EE,
2248 XK_c, 0x0292, 0x01EF,
2249 XK_d, XK_minus, 0x0111,
2250 XK_d, XK_period, 0x1E0B,
2251 XK_d, XK_less, 0x010F,
2252 XK_d, XK_h, 0x00F0,
2253 XK_e, XK_quotedbl, 0x00EB,
2254 XK_e, XK_apostrophe, 0x00E9,
2255 XK_e, XK_comma, 0x0119,
2256 XK_e, XK_minus, 0x0113,
2257 XK_e, XK_period, 0x0117,
2258 XK_e, XK_less, 0x011B,
2259 XK_e, XK_equal, 0x20AC,
2260 XK_e, XK_greater, 0x00EA,
2261 XK_e, XK_asciicircum, 0x00EA,
2262 XK_e, XK_underscore, 0x0113,
2263 XK_e, XK_grave, 0x00E8,
2264 XK_e, XK_e, 0x0259,
2265 XK_e, XK_diaeresis, 0x00EB,
2266 XK_e, XK_acute, 0x00E9,
2267 XK_f, XK_period, 0x1E1F,
2268 XK_f, XK_S, 0x017F,
2269 XK_f, XK_s, 0x017F,
2270 XK_g, XK_parenleft, 0x011F,
2271 XK_g, XK_comma, 0x0123,
2272 XK_g, XK_period, 0x0121,
2273 XK_g, XK_U, 0x011F,
2274 XK_g, XK_breve, 0x011F,
2275 XK_i, XK_quotedbl, 0x00EF,
2276 XK_i, XK_apostrophe, 0x00ED,
2277 XK_i, XK_comma, 0x012F,
2278 XK_i, XK_minus, 0x012B,
2279 XK_i, XK_period, 0x0131,
2280 XK_i, XK_greater, 0x00EE,
2281 XK_i, XK_asciicircum, 0x00EE,
2282 XK_i, XK_underscore, 0x012B,
2283 XK_i, XK_grave, 0x00EC,
2284 XK_i, XK_asciitilde, 0x0129,
2285 XK_i, XK_diaeresis, 0x00EF,
2286 XK_i, XK_acute, 0x00ED,
2287 XK_k, XK_comma, 0x0137,
2288 XK_k, XK_k, 0x0138,
2289 XK_l, XK_apostrophe, 0x013A,
2290 XK_l, XK_comma, 0x013C,
2291 XK_l, XK_minus, 0x00A3,
2292 XK_l, XK_slash, 0x0142,
2293 XK_l, XK_less, 0x013E,
2294 XK_l, XK_equal, 0x00A3,
2295 XK_l, XK_v, 0x007C,
2296 XK_m, XK_period, 0x1E41,
2297 XK_m, XK_slash, 0x20A5,
2298 XK_m, XK_u, 0x00B5,
2299 XK_n, XK_apostrophe, 0x0144,
2300 XK_n, XK_comma, 0x0146,
2301 XK_n, XK_minus, 0x00F1,
2302 XK_n, XK_less, 0x0148,
2303 XK_n, XK_g, 0x014B,
2304 XK_n, XK_asciitilde, 0x00F1,
2305 XK_o, XK_quotedbl, 0x00F6,
2306 XK_o, XK_apostrophe, 0x00F3,
2307 XK_o, XK_minus, 0x00F5,
2308 XK_o, XK_slash, 0x00F8,
2309 XK_o, XK_greater, 0x00F4,
2310 XK_o, XK_A, 0x00C5,
2311 XK_o, XK_C, 0x00A9,
2312 XK_o, XK_R, 0x00AE,
2313 XK_o, XK_U, 0x016E,
2314 XK_o, XK_X, 0x00A4,
2315 XK_o, XK_asciicircum, 0x00F4,
2316 XK_o, XK_underscore, 0x00BA,
2317 XK_o, XK_grave, 0x00F2,
2318 XK_o, XK_a, 0x00E5,
2319 XK_o, XK_c, 0x00A9,
2320 XK_o, XK_e, 0x0153,
2321 XK_o, XK_o, 0x00B0,
2322 XK_o, XK_r, 0x00AE,
2323 XK_o, XK_s, 0x00A7,
2324 XK_o, XK_u, 0x016F,
2325 XK_o, XK_w, 0x1E98,
2326 XK_o, XK_x, 0x00A4,
2327 XK_o, XK_y, 0x1E99,
2328 XK_o, XK_asciitilde, 0x00F5,
2329 XK_o, XK_diaeresis, 0x00F6,
2330 XK_o, XK_acute, 0x00F3,
2331 XK_p, XK_exclam, 0x00B6,
2332 XK_p, XK_period, 0x1E57,
2333 XK_r, XK_apostrophe, 0x0155,
2334 XK_r, XK_comma, 0x0157,
2335 XK_r, XK_less, 0x0159,
2336 XK_s, XK_exclam, 0x00A7,
2337 XK_s, XK_apostrophe, 0x015B,
2338 XK_s, XK_comma, 0x015F,
2339 XK_s, XK_period, 0x1E61,
2340 XK_s, XK_0, 0x00A7,
2341 XK_s, XK_1, 0x00B9,
2342 XK_s, XK_2, 0x00B2,
2343 XK_s, XK_3, 0x00B3,
2344 XK_s, XK_less, 0x0161,
2345 XK_s, XK_M, 0x2120,
2346 XK_s, XK_m, 0x2120,
2347 XK_s, XK_o, 0x00A7,
2348 XK_s, XK_s, 0x00DF,
2349 XK_s, XK_cedilla, 0x015F,
2350 XK_t, XK_minus, 0x0167,
2351 XK_t, XK_period, 0x1E6B,
2352 XK_t, XK_slash, 0x0167,
2353 XK_t, XK_less, 0x0165,
2354 XK_t, XK_M, 0x2122,
2355 XK_t, XK_h, 0x00FE,
2356 XK_t, XK_m, 0x2122,
2357 XK_u, XK_quotedbl, 0x00FC,
2358 XK_u, XK_apostrophe, 0x00FA,
2359 XK_u, XK_asterisk, 0x016F,
2360 XK_u, XK_comma, 0x0173,
2361 XK_u, XK_minus, 0x016B,
2362 XK_u, XK_slash, 0x00B5,
2363 XK_u, XK_greater, 0x00FB,
2364 XK_u, XK_asciicircum, 0x00FB,
2365 XK_u, XK_underscore, 0x016B,
2366 XK_u, XK_grave, 0x00F9,
2367 XK_u, XK_u, 0x016D,
2368 XK_u, XK_asciitilde, 0x0169,
2369 XK_u, XK_diaeresis, 0x00FC,
2370 XK_u, XK_acute, 0x00FA,
2371 XK_v, XK_Z, 0x017D,
2372 XK_v, XK_l, 0x007C,
2373 XK_v, XK_z, 0x017E,
2374 XK_w, XK_asciicircum, 0x0175,
2375 XK_x, XK_0, 0x00A4,
2376 XK_x, XK_O, 0x00A4,
2377 XK_x, XK_o, 0x00A4,
2378 XK_x, XK_x, 0x00D7,
2379 XK_y, XK_quotedbl, 0x00FF,
2380 XK_y, XK_apostrophe, 0x00FD,
2381 XK_y, XK_minus, 0x00A5,
2382 XK_y, XK_equal, 0x00A5,
2383 XK_y, XK_asciicircum, 0x0177,
2384 XK_y, XK_diaeresis, 0x00FF,
2385 XK_y, XK_acute, 0x00FD,
2386 XK_z, XK_apostrophe, 0x017A,
2387 XK_z, XK_period, 0x017C,
2388 XK_z, XK_less, 0x017E,
2389 XK_bar, XK_C, 0x00A2,
2390 XK_bar, XK_c, 0x00A2,
2391 XK_asciitilde, XK_space, 0x007E,
2392 XK_asciitilde, XK_A, 0x00C3,
2393 XK_asciitilde, XK_E, 0x1EBC,
2394 XK_asciitilde, XK_I, 0x0128,
2395 XK_asciitilde, XK_N, 0x00D1,
2396 XK_asciitilde, XK_O, 0x00D5,
2397 XK_asciitilde, XK_U, 0x0168,
2398 XK_asciitilde, XK_V, 0x1E7C,
2399 XK_asciitilde, XK_Y, 0x1EF8,
2400 XK_asciitilde, XK_a, 0x00E3,
2401 XK_asciitilde, XK_e, 0x1EBD,
2402 XK_asciitilde, XK_i, 0x0129,
2403 XK_asciitilde, XK_n, 0x00F1,
2404 XK_asciitilde, XK_o, 0x00F5,
2405 XK_asciitilde, XK_u, 0x0169,
2406 XK_asciitilde, XK_v, 0x1E7D,
2407 XK_asciitilde, XK_y, 0x1EF9,
2408 XK_asciitilde, XK_Acircumflex, 0x1EAA,
2409 XK_asciitilde, XK_Ecircumflex, 0x1EC4,
2410 XK_asciitilde, XK_Ocircumflex, 0x1ED6,
2411 XK_asciitilde, XK_acircumflex, 0x1EAB,
2412 XK_asciitilde, XK_ecircumflex, 0x1EC5,
2413 XK_asciitilde, XK_ocircumflex, 0x1ED7,
2414 XK_asciitilde, XK_Ohorn, 0x1EE0,
2415 XK_asciitilde, XK_ohorn, 0x1EE1,
2416 XK_asciitilde, XK_Uhorn, 0x1EEE,
2417 XK_asciitilde, XK_uhorn, 0x1EEF,
2418 XK_asciitilde, XK_Abreve, 0x1EB4,
2419 XK_asciitilde, XK_abreve, 0x1EB5,
2420 XK_asciitilde, XK_Greek_iotadieresis, 0x1FD7,
2421 XK_asciitilde, XK_Greek_upsilondieresis, 0x1FE7,
2422 XK_asciitilde, XK_Greek_alpha, 0x1FB6,
2423 XK_asciitilde, XK_Greek_eta, 0x1FC6,
2424 XK_asciitilde, XK_Greek_iota, 0x1FD6,
2425 XK_asciitilde, XK_Greek_upsilon, 0x1FE6,
2426 XK_asciitilde, XK_Greek_omega, 0x1FF6,
2427 XK_asciitilde, 0x1F00, 0x1F06,
2428 XK_asciitilde, 0x1F01, 0x1F07,
2429 XK_asciitilde, 0x1F08, 0x1F0E,
2430 XK_asciitilde, 0x1F09, 0x1F0F,
2431 XK_asciitilde, 0x1F20, 0x1F26,
2432 XK_asciitilde, 0x1F21, 0x1F27,
2433 XK_asciitilde, 0x1F28, 0x1F2E,
2434 XK_asciitilde, 0x1F29, 0x1F2F,
2435 XK_asciitilde, 0x1F30, 0x1F36,
2436 XK_asciitilde, 0x1F31, 0x1F37,
2437 XK_asciitilde, 0x1F38, 0x1F3E,
2438 XK_asciitilde, 0x1F39, 0x1F3F,
2439 XK_asciitilde, 0x1F50, 0x1F56,
2440 XK_asciitilde, 0x1F51, 0x1F57,
2441 XK_asciitilde, 0x1F59, 0x1F5F,
2442 XK_asciitilde, 0x1F60, 0x1F66,
2443 XK_asciitilde, 0x1F61, 0x1F67,
2444 XK_asciitilde, 0x1F68, 0x1F6E,
2445 XK_asciitilde, 0x1F69, 0x1F6F,
2446 XK_diaeresis, XK_apostrophe, 0x0385,
2447 XK_diaeresis, XK_A, 0x00C4,
2448 XK_diaeresis, XK_E, 0x00CB,
2449 XK_diaeresis, XK_I, 0x00CF,
2450 XK_diaeresis, XK_O, 0x00D6,
2451 XK_diaeresis, XK_U, 0x00DC,
2452 XK_diaeresis, XK_Y, 0x0178,
2453 XK_diaeresis, XK_grave, 0x1FED,
2454 XK_diaeresis, XK_a, 0x00E4,
2455 XK_diaeresis, XK_e, 0x00EB,
2456 XK_diaeresis, XK_i, 0x00EF,
2457 XK_diaeresis, XK_o, 0x00F6,
2458 XK_diaeresis, XK_u, 0x00FC,
2459 XK_diaeresis, XK_y, 0x00FF,
2460 XK_diaeresis, XK_asciitilde, 0x1FC1,
2461 XK_diaeresis, XK_acute, 0x0385,
2462 XK_diaeresis, XK_dead_grave, 0x1FED,
2463 XK_diaeresis, XK_dead_acute, 0x0385,
2464 XK_diaeresis, XK_dead_tilde, 0x1FC1,
2465 XK_macron, XK_A, 0x0100,
2466 XK_macron, XK_E, 0x0112,
2467 XK_macron, XK_G, 0x1E20,
2468 XK_macron, XK_I, 0x012A,
2469 XK_macron, XK_O, 0x014C,
2470 XK_macron, XK_U, 0x016A,
2471 XK_macron, XK_Y, 0x0232,
2472 XK_macron, XK_a, 0x0101,
2473 XK_macron, XK_e, 0x0113,
2474 XK_macron, XK_g, 0x1E21,
2475 XK_macron, XK_i, 0x012B,
2476 XK_macron, XK_o, 0x014D,
2477 XK_macron, XK_u, 0x016B,
2478 XK_macron, XK_y, 0x0233,
2479 XK_macron, XK_Adiaeresis, 0x01DE,
2480 XK_macron, XK_AE, 0x01E2,
2481 XK_macron, XK_Otilde, 0x022C,
2482 XK_macron, XK_Odiaeresis, 0x022A,
2483 XK_macron, 0x00DC, 0x01D5,
2484 XK_macron, XK_adiaeresis, 0x01DF,
2485 XK_macron, XK_ae, 0x01E3,
2486 XK_macron, XK_otilde, 0x022D,
2487 XK_macron, XK_odiaeresis, 0x022B,
2488 XK_macron, XK_udiaeresis, 0x01D6,
2489 XK_macron, 0x01EA, 0x01EC,
2490 XK_macron, 0x01EB, 0x01ED,
2491 XK_macron, 0x0226, 0x01E0,
2492 XK_macron, 0x0227, 0x01E1,
2493 XK_macron, 0x022E, 0x0230,
2494 XK_macron, 0x022F, 0x0231,
2495 XK_macron, XK_Cyrillic_i, 0x04E3,
2496 XK_macron, XK_Cyrillic_u, 0x04EF,
2497 XK_macron, XK_Cyrillic_I, 0x04E2,
2498 XK_macron, XK_Cyrillic_U, 0x04EE,
2499 XK_macron, XK_Greek_ALPHA, 0x1FB9,
2500 XK_macron, XK_Greek_IOTA, 0x1FD9,
2501 XK_macron, XK_Greek_UPSILON, 0x1FE9,
2502 XK_macron, XK_Greek_alpha, 0x1FB1,
2503 XK_macron, XK_Greek_iota, 0x1FD1,
2504 XK_macron, XK_Greek_upsilon, 0x1FE1,
2505 XK_macron, 0x1E36, 0x1E38,
2506 XK_macron, 0x1E37, 0x1E39,
2507 XK_macron, 0x1E5A, 0x1E5C,
2508 XK_macron, 0x1E5B, 0x1E5D,
2509 XK_acute, XK_A, 0x00C1,
2510 XK_acute, XK_C, 0x0106,
2511 XK_acute, XK_E, 0x00C9,
2512 XK_acute, XK_G, 0x01F4,
2513 XK_acute, XK_I, 0x00CD,
2514 XK_acute, XK_K, 0x1E30,
2515 XK_acute, XK_L, 0x0139,
2516 XK_acute, XK_M, 0x1E3E,
2517 XK_acute, XK_N, 0x0143,
2518 XK_acute, XK_O, 0x00D3,
2519 XK_acute, XK_P, 0x1E54,
2520 XK_acute, XK_R, 0x0154,
2521 XK_acute, XK_S, 0x015A,
2522 XK_acute, XK_U, 0x00DA,
2523 XK_acute, XK_W, 0x1E82,
2524 XK_acute, XK_Y, 0x00DD,
2525 XK_acute, XK_Z, 0x0179,
2526 XK_acute, XK_a, 0x00E1,
2527 XK_acute, XK_c, 0x0107,
2528 XK_acute, XK_e, 0x00E9,
2529 XK_acute, XK_g, 0x01F5,
2530 XK_acute, XK_i, 0x00ED,
2531 XK_acute, XK_k, 0x1E31,
2532 XK_acute, XK_l, 0x013A,
2533 XK_acute, XK_m, 0x1E3F,
2534 XK_acute, XK_n, 0x0144,
2535 XK_acute, XK_o, 0x00F3,
2536 XK_acute, XK_p, 0x1E55,
2537 XK_acute, XK_r, 0x0155,
2538 XK_acute, XK_s, 0x015B,
2539 XK_acute, XK_u, 0x00FA,
2540 XK_acute, XK_w, 0x1E83,
2541 XK_acute, XK_y, 0x00FD,
2542 XK_acute, XK_z, 0x017A,
2543 XK_acute, XK_Acircumflex, 0x1EA4,
2544 XK_acute, XK_Aring, 0x01FA,
2545 XK_acute, XK_AE, 0x01FC,
2546 XK_acute, XK_Ccedilla, 0x1E08,
2547 XK_acute, XK_Ecircumflex, 0x1EBE,
2548 XK_acute, XK_Idiaeresis, 0x1E2E,
2549 XK_acute, XK_Ocircumflex, 0x1ED0,
2550 XK_acute, XK_Otilde, 0x1E4C,
2551 XK_acute, XK_Ooblique, 0x01FE,
2552 XK_acute, 0x00DC, 0x01D7,
2553 XK_acute, XK_acircumflex, 0x1EA5,
2554 XK_acute, XK_aring, 0x01FB,
2555 XK_acute, XK_ae, 0x01FD,
2556 XK_acute, XK_ccedilla, 0x1E09,
2557 XK_acute, XK_ecircumflex, 0x1EBF,
2558 XK_acute, XK_idiaeresis, 0x1E2F,
2559 XK_acute, XK_ocircumflex, 0x1ED1,
2560 XK_acute, XK_otilde, 0x1E4D,
2561 XK_acute, XK_oslash, 0x01FF,
2562 XK_acute, XK_udiaeresis, 0x01D8,
2563 XK_acute, XK_Ohorn, 0x1EDA,
2564 XK_acute, XK_ohorn, 0x1EDB,
2565 XK_acute, XK_Uhorn, 0x1EE8,
2566 XK_acute, XK_uhorn, 0x1EE9,
2567 XK_acute, XK_Abreve, 0x1EAE,
2568 XK_acute, XK_abreve, 0x1EAF,
2569 XK_acute, XK_Emacron, 0x1E16,
2570 XK_acute, XK_emacron, 0x1E17,
2571 XK_acute, XK_Omacron, 0x1E52,
2572 XK_acute, XK_Utilde, 0x1E78,
2573 XK_acute, XK_omacron, 0x1E53,
2574 XK_acute, XK_utilde, 0x1E79,
2575 XK_acute, XK_Cyrillic_ghe, 0x0453,
2576 XK_acute, XK_Cyrillic_ka, 0x045C,
2577 XK_acute, XK_Cyrillic_GHE, 0x0403,
2578 XK_acute, XK_Cyrillic_KA, 0x040C,
2579 XK_acute, XK_Greek_iotadieresis, 0x0390,
2580 XK_acute, XK_Greek_upsilondieresis, 0x03B0,
2581 XK_acute, XK_Greek_ALPHA, 0x0386,
2582 XK_acute, XK_Greek_EPSILON, 0x0388,
2583 XK_acute, XK_Greek_ETA, 0x0389,
2584 XK_acute, XK_Greek_IOTA, 0x038A,
2585 XK_acute, XK_Greek_OMICRON, 0x038C,
2586 XK_acute, XK_Greek_UPSILON, 0x038E,
2587 XK_acute, XK_Greek_OMEGA, 0x038F,
2588 XK_acute, XK_Greek_alpha, 0x03AC,
2589 XK_acute, XK_Greek_epsilon, 0x03AD,
2590 XK_acute, XK_Greek_eta, 0x03AE,
2591 XK_acute, XK_Greek_iota, 0x03AF,
2592 XK_acute, XK_Greek_omicron, 0x03CC,
2593 XK_acute, XK_Greek_upsilon, 0x03CD,
2594 XK_acute, XK_Greek_omega, 0x03CE,
2595 XK_acute, 0x1F00, 0x1F04,
2596 XK_acute, 0x1F01, 0x1F05,
2597 XK_acute, 0x1F08, 0x1F0C,
2598 XK_acute, 0x1F09, 0x1F0D,
2599 XK_acute, 0x1F10, 0x1F14,
2600 XK_acute, 0x1F11, 0x1F15,
2601 XK_acute, 0x1F18, 0x1F1C,
2602 XK_acute, 0x1F19, 0x1F1D,
2603 XK_acute, 0x1F20, 0x1F24,
2604 XK_acute, 0x1F21, 0x1F25,
2605 XK_acute, 0x1F28, 0x1F2C,
2606 XK_acute, 0x1F29, 0x1F2D,
2607 XK_acute, 0x1F30, 0x1F34,
2608 XK_acute, 0x1F31, 0x1F35,
2609 XK_acute, 0x1F38, 0x1F3C,
2610 XK_acute, 0x1F39, 0x1F3D,
2611 XK_acute, 0x1F40, 0x1F44,
2612 XK_acute, 0x1F41, 0x1F45,
2613 XK_acute, 0x1F48, 0x1F4C,
2614 XK_acute, 0x1F49, 0x1F4D,
2615 XK_acute, 0x1F50, 0x1F54,
2616 XK_acute, 0x1F51, 0x1F55,
2617 XK_acute, 0x1F59, 0x1F5D,
2618 XK_acute, 0x1F60, 0x1F64,
2619 XK_acute, 0x1F61, 0x1F65,
2620 XK_acute, 0x1F68, 0x1F6C,
2621 XK_acute, 0x1F69, 0x1F6D,
2622 XK_cedilla, XK_C, 0x00C7,
2623 XK_cedilla, XK_D, 0x1E10,
2624 XK_cedilla, XK_E, 0x0228,
2625 XK_cedilla, XK_G, 0x0122,
2626 XK_cedilla, XK_H, 0x1E28,
2627 XK_cedilla, XK_K, 0x0136,
2628 XK_cedilla, XK_L, 0x013B,
2629 XK_cedilla, XK_N, 0x0145,
2630 XK_cedilla, XK_R, 0x0156,
2631 XK_cedilla, XK_S, 0x015E,
2632 XK_cedilla, XK_T, 0x0162,
2633 XK_cedilla, XK_c, 0x00E7,
2634 XK_cedilla, XK_d, 0x1E11,
2635 XK_cedilla, XK_e, 0x0229,
2636 XK_cedilla, XK_g, 0x0123,
2637 XK_cedilla, XK_h, 0x1E29,
2638 XK_cedilla, XK_k, 0x0137,
2639 XK_cedilla, XK_l, 0x013C,
2640 XK_cedilla, XK_n, 0x0146,
2641 XK_cedilla, XK_r, 0x0157,
2642 XK_cedilla, XK_s, 0x015F,
2643 XK_cedilla, XK_t, 0x0163,
2644 XK_breve, XK_G, 0x011E,
2645 XK_breve, XK_g, 0x011F,
2646 0x05B4, XK_hebrew_yod, 0xFB1D,
2647 0x05B7, 0x05F2, 0xFB1F,
2648 0x05B7, XK_hebrew_aleph, 0xFB2E,
2649 0x05B8, XK_hebrew_aleph, 0xFB2F,
2650 0x05B9, XK_hebrew_waw, 0xFB4B,
2651 0x05BC, XK_hebrew_aleph, 0xFB30,
2652 0x05BC, XK_hebrew_beth, 0xFB31,
2653 0x05BC, XK_hebrew_gimmel, 0xFB32,
2654 0x05BC, XK_hebrew_daleth, 0xFB33,
2655 0x05BC, XK_hebrew_he, 0xFB34,
2656 0x05BC, XK_hebrew_waw, 0xFB35,
2657 0x05BC, XK_hebrew_zayin, 0xFB36,
2658 0x05BC, XK_hebrew_teth, 0xFB38,
2659 0x05BC, XK_hebrew_yod, 0xFB39,
2660 0x05BC, XK_hebrew_finalkaph, 0xFB3A,
2661 0x05BC, XK_hebrew_kaph, 0xFB3B,
2662 0x05BC, XK_hebrew_lamed, 0xFB3C,
2663 0x05BC, XK_hebrew_mem, 0xFB3E,
2664 0x05BC, XK_hebrew_nun, 0xFB40,
2665 0x05BC, XK_hebrew_samekh, 0xFB41,
2666 0x05BC, XK_hebrew_finalpe, 0xFB43,
2667 0x05BC, XK_hebrew_pe, 0xFB44,
2668 0x05BC, XK_hebrew_zadi, 0xFB46,
2669 0x05BC, XK_hebrew_qoph, 0xFB47,
2670 0x05BC, XK_hebrew_resh, 0xFB48,
2671 0x05BC, XK_hebrew_shin, 0xFB49,
2672 0x05BC, XK_hebrew_taw, 0xFB4A,
2673 0x05BF, XK_hebrew_beth, 0xFB4C,
2674 0x05BF, XK_hebrew_kaph, 0xFB4D,
2675 0x05BF, XK_hebrew_pe, 0xFB4E,
2676 0x05C1, XK_hebrew_shin, 0xFB2A,
2677 0x05C1, 0xFB49, 0xFB2C,
2678 0x05C2, XK_hebrew_shin, 0xFB2B,
2679 0x05C2, 0xFB49, 0xFB2D,
2680 0x0653, XK_Arabic_alef, 0x0622,
2681 0x0654, XK_Arabic_alef, 0x0623,
2682 0x0654, XK_Arabic_waw, 0x0624,
2683 0x0654, XK_Arabic_yeh, 0x0626,
2684 0x0654, 0x06C1, 0x06C2,
2685 0x0654, 0x06D2, 0x06D3,
2686 0x0654, 0x06D5, 0x06C0,
2687 0x0655, XK_Arabic_alef, 0x0625,
2688 XK_Cyrillic_pe, XK_Cyrillic_a, 0x00A7,
2689 XK_Cyrillic_IE, XK_equal, 0x20AC,
2690 XK_Cyrillic_EN, XK_Cyrillic_o, 0x2116,
2691 XK_Cyrillic_EN, XK_Cyrillic_O, 0x2116,
2692 XK_Cyrillic_ES, XK_equal, 0x20AC,
2693 XK_Greek_ALPHA, XK_apostrophe, 0x0386,
2694 XK_Greek_EPSILON, XK_apostrophe, 0x0388,
2695 XK_Greek_ETA, XK_apostrophe, 0x0389,
2696 XK_Greek_IOTA, XK_quotedbl, 0x03AA,
2697 XK_Greek_IOTA, XK_apostrophe, 0x038A,
2698 XK_Greek_OMICRON, XK_apostrophe, 0x038C,
2699 XK_Greek_UPSILON, XK_quotedbl, 0x03AB,
2700 XK_Greek_UPSILON, XK_apostrophe, 0x038E,
2701 XK_Greek_OMEGA, XK_apostrophe, 0x038F,
2702 XK_Greek_alpha, XK_apostrophe, 0x03AC,
2703 XK_Greek_epsilon, XK_apostrophe, 0x03AD,
2704 XK_Greek_eta, XK_apostrophe, 0x03AE,
2705 XK_Greek_iota, XK_quotedbl, 0x03CA,
2706 XK_Greek_iota, XK_apostrophe, 0x03AF,
2707 XK_Greek_iota, XK_Greek_alphaaccent, 0x1FB4,
2708 XK_Greek_iota, XK_Greek_etaaccent, 0x1FC4,
2709 XK_Greek_iota, XK_Greek_omegaaccent, 0x1FF4,
2710 XK_Greek_iota, XK_Greek_ALPHA, 0x1FBC,
2711 XK_Greek_iota, XK_Greek_ETA, 0x1FCC,
2712 XK_Greek_iota, XK_Greek_OMEGA, 0x1FFC,
2713 XK_Greek_iota, XK_Greek_alpha, 0x1FB3,
2714 XK_Greek_iota, XK_Greek_eta, 0x1FC3,
2715 XK_Greek_iota, XK_Greek_omega, 0x1FF3,
2716 XK_Greek_iota, 0x1F00, 0x1F80,
2717 XK_Greek_iota, 0x1F01, 0x1F81,
2718 XK_Greek_iota, 0x1F02, 0x1F82,
2719 XK_Greek_iota, 0x1F03, 0x1F83,
2720 XK_Greek_iota, 0x1F04, 0x1F84,
2721 XK_Greek_iota, 0x1F05, 0x1F85,
2722 XK_Greek_iota, 0x1F06, 0x1F86,
2723 XK_Greek_iota, 0x1F07, 0x1F87,
2724 XK_Greek_iota, 0x1F08, 0x1F88,
2725 XK_Greek_iota, 0x1F09, 0x1F89,
2726 XK_Greek_iota, 0x1F0A, 0x1F8A,
2727 XK_Greek_iota, 0x1F0B, 0x1F8B,
2728 XK_Greek_iota, 0x1F0C, 0x1F8C,
2729 XK_Greek_iota, 0x1F0D, 0x1F8D,
2730 XK_Greek_iota, 0x1F0E, 0x1F8E,
2731 XK_Greek_iota, 0x1F0F, 0x1F8F,
2732 XK_Greek_iota, 0x1F20, 0x1F90,
2733 XK_Greek_iota, 0x1F21, 0x1F91,
2734 XK_Greek_iota, 0x1F22, 0x1F92,
2735 XK_Greek_iota, 0x1F23, 0x1F93,
2736 XK_Greek_iota, 0x1F24, 0x1F94,
2737 XK_Greek_iota, 0x1F25, 0x1F95,
2738 XK_Greek_iota, 0x1F26, 0x1F96,
2739 XK_Greek_iota, 0x1F27, 0x1F97,
2740 XK_Greek_iota, 0x1F28, 0x1F98,
2741 XK_Greek_iota, 0x1F29, 0x1F99,
2742 XK_Greek_iota, 0x1F2A, 0x1F9A,
2743 XK_Greek_iota, 0x1F2B, 0x1F9B,
2744 XK_Greek_iota, 0x1F2C, 0x1F9C,
2745 XK_Greek_iota, 0x1F2D, 0x1F9D,
2746 XK_Greek_iota, 0x1F2E, 0x1F9E,
2747 XK_Greek_iota, 0x1F2F, 0x1F9F,
2748 XK_Greek_iota, 0x1F60, 0x1FA0,
2749 XK_Greek_iota, 0x1F61, 0x1FA1,
2750 XK_Greek_iota, 0x1F62, 0x1FA2,
2751 XK_Greek_iota, 0x1F63, 0x1FA3,
2752 XK_Greek_iota, 0x1F64, 0x1FA4,
2753 XK_Greek_iota, 0x1F65, 0x1FA5,
2754 XK_Greek_iota, 0x1F66, 0x1FA6,
2755 XK_Greek_iota, 0x1F67, 0x1FA7,
2756 XK_Greek_iota, 0x1F68, 0x1FA8,
2757 XK_Greek_iota, 0x1F69, 0x1FA9,
2758 XK_Greek_iota, 0x1F6A, 0x1FAA,
2759 XK_Greek_iota, 0x1F6B, 0x1FAB,
2760 XK_Greek_iota, 0x1F6C, 0x1FAC,
2761 XK_Greek_iota, 0x1F6D, 0x1FAD,
2762 XK_Greek_iota, 0x1F6E, 0x1FAE,
2763 XK_Greek_iota, 0x1F6F, 0x1FAF,
2764 XK_Greek_iota, 0x1F70, 0x1FB2,
2765 XK_Greek_iota, 0x1F74, 0x1FC2,
2766 XK_Greek_iota, 0x1F7C, 0x1FF2,
2767 XK_Greek_iota, 0x1FB6, 0x1FB7,
2768 XK_Greek_iota, 0x1FC6, 0x1FC7,
2769 XK_Greek_iota, 0x1FF6, 0x1FF7,
2770 XK_Greek_omicron, XK_apostrophe, 0x03CC,
2771 XK_Greek_upsilon, XK_quotedbl, 0x03CB,
2772 XK_Greek_upsilon, XK_apostrophe, 0x03CD,
2773 XK_Greek_omega, XK_apostrophe, 0x03CE,
2774 XK_lessthanequal, 0x0338, 0x2270,
2775 XK_greaterthanequal, 0x0338, 0x2271,
2776 XK_approximate, 0x0338, 0x2247,
2777 XK_identical, 0x0338, 0x2262,
2778 XK_includedin, 0x0338, 0x2284,
2779 XK_includes, 0x0338, 0x2285,
2780 0x093C, 0x0915, 0x0958,
2781 0x093C, 0x0916, 0x0959,
2782 0x093C, 0x0917, 0x095A,
2783 0x093C, 0x091C, 0x095B,
2784 0x093C, 0x0921, 0x095C,
2785 0x093C, 0x0922, 0x095D,
2786 0x093C, 0x0928, 0x0929,
2787 0x093C, 0x092B, 0x095E,
2788 0x093C, 0x092F, 0x095F,
2789 0x093C, 0x0930, 0x0931,
2790 0x093C, 0x0933, 0x0934,
2791 0x09BC, 0x09A1, 0x09DC,
2792 0x09BC, 0x09A2, 0x09DD,
2793 0x09BC, 0x09AF, 0x09DF,
2794 0x09C7, 0x09BE, 0x09CB,
2795 0x09C7, 0x09D7, 0x09CC,
2796 0x0A3C, 0x0A16, 0x0A59,
2797 0x0A3C, 0x0A17, 0x0A5A,
2798 0x0A3C, 0x0A1C, 0x0A5B,
2799 0x0A3C, 0x0A2B, 0x0A5E,
2800 0x0A3C, 0x0A32, 0x0A33,
2801 0x0A3C, 0x0A38, 0x0A36,
2802 0x0B3C, 0x0B21, 0x0B5C,
2803 0x0B3C, 0x0B22, 0x0B5D,
2804 0x0B47, 0x0B3E, 0x0B4B,
2805 0x0B47, 0x0B56, 0x0B48,
2806 0x0B47, 0x0B57, 0x0B4C,
2807 XK_leftcaret, 0x0338, 0x226E,
2808 XK_rightcaret, 0x0338, 0x226F,
2809 XK_underbar, XK_parenleft, 0x208D,
2810 XK_underbar, XK_parenright, 0x208E,
2811 XK_underbar, XK_plus, 0x208A,
2812 XK_underbar, XK_0, 0x2080,
2813 XK_underbar, XK_1, 0x2081,
2814 XK_underbar, XK_2, 0x2082,
2815 XK_underbar, XK_3, 0x2083,
2816 XK_underbar, XK_4, 0x2084,
2817 XK_underbar, XK_5, 0x2085,
2818 XK_underbar, XK_6, 0x2086,
2819 XK_underbar, XK_7, 0x2087,
2820 XK_underbar, XK_8, 0x2088,
2821 XK_underbar, XK_9, 0x2089,
2822 XK_underbar, XK_equal, 0x208C,
2823 0x0BC6, 0x0BBE, 0x0BCA,
2824 0x0BC6, 0x0BD7, 0x0BCC,
2825 XK_underbar, 0x2212, 0x208B,
2826 XK_underbar, XK_KP_Space, 0x2082,
2827 XK_underbar, XK_KP_Add, 0x208A,
2828 XK_underbar, XK_KP_0, 0x2080,
2829 XK_underbar, XK_KP_1, 0x2081,
2830 XK_underbar, XK_KP_2, 0x2082,
2831 XK_underbar, XK_KP_3, 0x2083,
2832 XK_underbar, XK_KP_4, 0x2084,
2833 XK_underbar, XK_KP_5, 0x2085,
2834 XK_underbar, XK_KP_6, 0x2086,
2835 XK_underbar, XK_KP_7, 0x2087,
2836 XK_underbar, XK_KP_8, 0x2088,
2837 XK_underbar, XK_KP_9, 0x2089,
2838 XK_underbar, XK_KP_Equal, 0x208C,
2839 0x0BC7, 0x0BBE, 0x0BCB,
2840 0x0BD7, 0x0B92, 0x0B94,
2841 XK_rightshoe, 0x0338, 0x2285,
2842 XK_leftshoe, 0x0338, 0x2284,
2843 XK_righttack, 0x0338, 0x22AC,
2844 0x0C46, 0x0C56, 0x0C48,
2845 0x0CBF, 0x0CD5, 0x0CC0,
2846 0x0CC6, 0x0CC2, 0x0CCA,
2847 0x0CC6, 0x0CD5, 0x0CC7,
2848 0x0CC6, 0x0CD6, 0x0CC8,
2849 0x0CCA, 0x0CD5, 0x0CCB,
2850 0x0D46, 0x0D3E, 0x0D4A,
2851 0x0D46, 0x0D57, 0x0D4C,
2852 0x0D47, 0x0D3E, 0x0D4B,
2853 0x0DD9, 0x0DCA, 0x0DDA,
2854 0x0DD9, 0x0DCF, 0x0DDC,
2855 0x0DD9, 0x0DDF, 0x0DDE,
2856 0x0DDC, 0x0DCA, 0x0DDD,
2857 0x0F71, 0x0F72, 0x0F73,
2858 0x0F71, 0x0F74, 0x0F75,
2859 0x0F71, 0x0F80, 0x0F81,
2860 0x0F90, 0x0FB5, 0x0FB9,
2861 0x0F92, 0x0FB7, 0x0F93,
2862 0x0F9C, 0x0FB7, 0x0F9D,
2863 0x0FA1, 0x0FB7, 0x0FA2,
2864 0x0FA6, 0x0FB7, 0x0FA7,
2865 0x0FAB, 0x0FB7, 0x0FAC,
2866 0x0FB2, 0x0F80, 0x0F76,
2867 0x0FB3, 0x0F80, 0x0F78,
2868 0x0FB5, 0x0F40, 0x0F69,
2869 0x0FB7, 0x0F42, 0x0F43,
2870 0x0FB7, 0x0F4C, 0x0F4D,
2871 0x0FB7, 0x0F51, 0x0F52,
2872 0x0FB7, 0x0F56, 0x0F57,
2873 0x0FB7, 0x0F5B, 0x0F5C,
2874 0x102E, 0x1025, 0x1026,
2875 0x1100, 0x1100, 0x1101,
2876 0x1102, 0x1100, 0x1113,
2877 0x1102, 0x1102, 0x1114,
2878 0x1102, 0x1103, 0x1115,
2879 0x1102, 0x1107, 0x1116,
2880 0x1103, 0x1100, 0x1117,
2881 0x1103, 0x1103, 0x1104,
2882 0x1105, 0x1102, 0x1118,
2883 0x1105, 0x1105, 0x1119,
2884 0x1105, 0x110B, 0x111B,
2885 0x1105, 0x1112, 0x111A,
2886 0x1106, 0x1107, 0x111C,
2887 0x1106, 0x110B, 0x111D,
2888 0x1107, 0x1100, 0x111E,
2889 0x1107, 0x1102, 0x111F,
2890 0x1107, 0x1103, 0x1120,
2891 0x1107, 0x1107, 0x1108,
2892 0x1107, 0x1109, 0x1121,
2893 0x1107, 0x110A, 0x1125,
2894 0x1107, 0x110B, 0x112B,
2895 0x1107, 0x110C, 0x1127,
2896 0x1107, 0x110E, 0x1128,
2897 0x1107, 0x1110, 0x1129,
2898 0x1107, 0x1111, 0x112A,
2899 0x1107, 0x112B, 0x112C,
2900 0x1107, 0x112D, 0x1122,
2901 0x1107, 0x112F, 0x1123,
2902 0x1107, 0x1132, 0x1124,
2903 0x1107, 0x1136, 0x1126,
2904 0x1108, 0x110B, 0x112C,
2905 0x1109, 0x1100, 0x112D,
2906 0x1109, 0x1102, 0x112E,
2907 0x1109, 0x1103, 0x112F,
2908 0x1109, 0x1105, 0x1130,
2909 0x1109, 0x1106, 0x1131,
2910 0x1109, 0x1107, 0x1132,
2911 0x1109, 0x1109, 0x110A,
2912 0x1109, 0x110A, 0x1134,
2913 0x1109, 0x110B, 0x1135,
2914 0x1109, 0x110C, 0x1136,
2915 0x1109, 0x110E, 0x1137,
2916 0x1109, 0x110F, 0x1138,
2917 0x1109, 0x1110, 0x1139,
2918 0x1109, 0x1111, 0x113A,
2919 0x1109, 0x1112, 0x113B,
2920 0x1109, 0x111E, 0x1133,
2921 0x110A, 0x1109, 0x1134,
2922 0x110B, 0x1100, 0x1141,
2923 0x110B, 0x1103, 0x1142,
2924 0x110B, 0x1106, 0x1143,
2925 0x110B, 0x1107, 0x1144,
2926 0x110B, 0x1109, 0x1145,
2927 0x110B, 0x110B, 0x1147,
2928 0x110B, 0x110C, 0x1148,
2929 0x110B, 0x110E, 0x1149,
2930 0x110B, 0x1110, 0x114A,
2931 0x110B, 0x1111, 0x114B,
2932 0x110B, 0x1140, 0x1146,
2933 0x110C, 0x110B, 0x114D,
2934 0x110C, 0x110C, 0x110D,
2935 0x110E, 0x110F, 0x1152,
2936 0x110E, 0x1112, 0x1153,
2937 0x1111, 0x1107, 0x1156,
2938 0x1111, 0x110B, 0x1157,
2939 0x1112, 0x1112, 0x1158,
2940 0x1121, 0x1100, 0x1122,
2941 0x1121, 0x1103, 0x1123,
2942 0x1121, 0x1107, 0x1124,
2943 0x1121, 0x1109, 0x1125,
2944 0x1121, 0x110C, 0x1126,
2945 0x1132, 0x1100, 0x1133,
2946 0x113C, 0x113C, 0x113D,
2947 0x113E, 0x113E, 0x113F,
2948 0x114E, 0x114E, 0x114F,
2949 0x1150, 0x1150, 0x1151,
2950 0x1161, 0x1169, 0x1176,
2951 0x1161, 0x116E, 0x1177,
2952 0x1161, 0x1175, 0x1162,
2953 0x1163, 0x1169, 0x1178,
2954 0x1163, 0x116D, 0x1179,
2955 0x1163, 0x1175, 0x1164,
2956 0x1165, 0x1169, 0x117A,
2957 0x1165, 0x116E, 0x117B,
2958 0x1165, 0x1173, 0x117C,
2959 0x1165, 0x1175, 0x1166,
2960 0x1167, 0x1169, 0x117D,
2961 0x1167, 0x116E, 0x117E,
2962 0x1167, 0x1175, 0x1168,
2963 0x1169, 0x1161, 0x116A,
2964 0x1169, 0x1162, 0x116B,
2965 0x1169, 0x1165, 0x117F,
2966 0x1169, 0x1166, 0x1180,
2967 0x1169, 0x1168, 0x1181,
2968 0x1169, 0x1169, 0x1182,
2969 0x1169, 0x116E, 0x1183,
2970 0x1169, 0x1175, 0x116C,
2971 0x116A, 0x1175, 0x116B,
2972 0x116D, 0x1163, 0x1184,
2973 0x116D, 0x1164, 0x1185,
2974 0x116D, 0x1167, 0x1186,
2975 0x116D, 0x1169, 0x1187,
2976 0x116D, 0x1175, 0x1188,
2977 0x116E, 0x1161, 0x1189,
2978 0x116E, 0x1162, 0x118A,
2979 0x116E, 0x1165, 0x116F,
2980 0x116E, 0x1166, 0x1170,
2981 0x116E, 0x1168, 0x118C,
2982 0x116E, 0x116E, 0x118D,
2983 0x116E, 0x1175, 0x1171,
2984 0x116E, 0x117C, 0x118B,
2985 0x116F, 0x1173, 0x118B,
2986 0x116F, 0x1175, 0x1170,
2987 0x1172, 0x1161, 0x118E,
2988 0x1172, 0x1165, 0x118F,
2989 0x1172, 0x1166, 0x1190,
2990 0x1172, 0x1167, 0x1191,
2991 0x1172, 0x1168, 0x1192,
2992 0x1172, 0x116E, 0x1193,
2993 0x1172, 0x1175, 0x1194,
2994 0x1173, 0x116E, 0x1195,
2995 0x1173, 0x1173, 0x1196,
2996 0x1173, 0x1175, 0x1174,
2997 0x1174, 0x116E, 0x1197,
2998 0x1175, 0x1161, 0x1198,
2999 0x1175, 0x1163, 0x1199,
3000 0x1175, 0x1169, 0x119A,
3001 0x1175, 0x116E, 0x119B,
3002 0x1175, 0x1173, 0x119C,
3003 0x1175, 0x119E, 0x119D,
3004 0x119E, 0x1165, 0x119F,
3005 0x119E, 0x116E, 0x11A0,
3006 0x119E, 0x1175, 0x11A1,
3007 0x119E, 0x119E, 0x11A2,
3008 0x11A8, 0x11A8, 0x11A9,
3009 0x11A8, 0x11AF, 0x11C3,
3010 0x11A8, 0x11BA, 0x11AA,
3011 0x11A8, 0x11E7, 0x11C4,
3012 0x11AA, 0x11A8, 0x11C4,
3013 0x11AB, 0x11A8, 0x11C5,
3014 0x11AB, 0x11AE, 0x11C6,
3015 0x11AB, 0x11BA, 0x11C7,
3016 0x11AB, 0x11BD, 0x11AC,
3017 0x11AB, 0x11C0, 0x11C9,
3018 0x11AB, 0x11C2, 0x11AD,
3019 0x11AB, 0x11EB, 0x11C8,
3020 0x11AE, 0x11A8, 0x11CA,
3021 0x11AE, 0x11AF, 0x11CB,
3022 0x11AF, 0x11A8, 0x11B0,
3023 0x11AF, 0x11AA, 0x11CC,
3024 0x11AF, 0x11AB, 0x11CD,
3025 0x11AF, 0x11AE, 0x11CE,
3026 0x11AF, 0x11AF, 0x11D0,
3027 0x11AF, 0x11B7, 0x11B1,
3028 0x11AF, 0x11B8, 0x11B2,
3029 0x11AF, 0x11B9, 0x11D3,
3030 0x11AF, 0x11BA, 0x11B3,
3031 0x11AF, 0x11BB, 0x11D6,
3032 0x11AF, 0x11BF, 0x11D8,
3033 0x11AF, 0x11C0, 0x11B4,
3034 0x11AF, 0x11C1, 0x11B5,
3035 0x11AF, 0x11C2, 0x11B6,
3036 0x11AF, 0x11DA, 0x11D1,
3037 0x11AF, 0x11DD, 0x11D2,
3038 0x11AF, 0x11E5, 0x11D4,
3039 0x11AF, 0x11E6, 0x11D5,
3040 0x11AF, 0x11EB, 0x11D7,
3041 0x11AF, 0x11F9, 0x11D9,
3042 0x11B0, 0x11BA, 0x11CC,
3043 0x11B1, 0x11A8, 0x11D1,
3044 0x11B1, 0x11BA, 0x11D2,
3045 0x11B2, 0x11BA, 0x11D3,
3046 0x11B2, 0x11BC, 0x11D5,
3047 0x11B2, 0x11C2, 0x11D4,
3048 0x11B3, 0x11BA, 0x11D6,
3049 0x11B7, 0x11A8, 0x11DA,
3050 0x11B7, 0x11AF, 0x11DB,
3051 0x11B7, 0x11B8, 0x11DC,
3052 0x11B7, 0x11BA, 0x11DD,
3053 0x11B7, 0x11BB, 0x11DE,
3054 0x11B7, 0x11BC, 0x11E2,
3055 0x11B7, 0x11BE, 0x11E0,
3056 0x11B7, 0x11C2, 0x11E1,
3057 0x11B7, 0x11EB, 0x11DF,
3058 0x11B8, 0x11AF, 0x11E3,
3059 0x11B8, 0x11BA, 0x11B9,
3060 0x11B8, 0x11BC, 0x11E6,
3061 0x11B8, 0x11C1, 0x11E4,
3062 0x11B8, 0x11C2, 0x11E5,
3063 0x11BA, 0x11A8, 0x11E7,
3064 0x11BA, 0x11AE, 0x11E8,
3065 0x11BA, 0x11AF, 0x11E9,
3066 0x11BA, 0x11B8, 0x11EA,
3067 0x11BA, 0x11BA, 0x11BB,
3068 0x11BC, 0x11A8, 0x11EC,
3069 0x11BC, 0x11A9, 0x11ED,
3070 0x11BC, 0x11BC, 0x11EE,
3071 0x11BC, 0x11BF, 0x11EF,
3072 0x11C1, 0x11B8, 0x11F3,
3073 0x11C1, 0x11BC, 0x11F4,
3074 0x11C2, 0x11AB, 0x11F5,
3075 0x11C2, 0x11AF, 0x11F6,
3076 0x11C2, 0x11B7, 0x11F7,
3077 0x11C2, 0x11B8, 0x11F8,
3078 0x11CE, 0x11C2, 0x11CF,
3079 0x11DD, 0x11BA, 0x11DE,
3080 0x11EC, 0x11A8, 0x11ED,
3081 0x11F0, 0x11BA, 0x11F1,
3082 0x11F0, 0x11EB, 0x11F2,
3083 0x1FBF, XK_apostrophe, 0x1FCE,
3084 0x1FBF, XK_grave, 0x1FCD,
3085 0x1FBF, XK_asciitilde, 0x1FCF,
3086 0x1FBF, XK_acute, 0x1FCE,
3087 0x1FBF, XK_dead_grave, 0x1FCD,
3088 0x1FBF, XK_dead_acute, 0x1FCE,
3089 0x1FBF, XK_dead_tilde, 0x1FCF,
3090 0x1FFE, XK_apostrophe, 0x1FDE,
3091 0x1FFE, XK_grave, 0x1FDD,
3092 0x1FFE, XK_asciitilde, 0x1FDF,
3093 0x1FFE, XK_acute, 0x1FDE,
3094 0x1FFE, XK_dead_grave, 0x1FDD,
3095 0x1FFE, XK_dead_acute, 0x1FDE,
3096 0x1FFE, XK_dead_tilde, 0x1FDF,
3097 0x2203, 0x0338, 0x2204,
3098 0x2208, 0x0338, 0x2209,
3099 0x220B, 0x0338, 0x220C,
3100 0x2223, 0x0338, 0x2224,
3101 0x2225, 0x0338, 0x2226,
3102 0x223C, 0x0338, 0x2241,
3103 0x2243, 0x0338, 0x2244,
3104 0x2248, 0x0338, 0x2249,
3105 0x224D, 0x0338, 0x226D,
3106 0x2272, 0x0338, 0x2274,
3107 0x2273, 0x0338, 0x2275,
3108 0x2276, 0x0338, 0x2278,
3109 0x2277, 0x0338, 0x2279,
3110 0x227A, 0x0338, 0x2280,
3111 0x227B, 0x0338, 0x2281,
3112 0x227C, 0x0338, 0x22E0,
3113 0x227D, 0x0338, 0x22E1,
3114 0x2286, 0x0338, 0x2288,
3115 0x2287, 0x0338, 0x2289,
3116 0x2291, 0x0338, 0x22E2,
3117 0x2292, 0x0338, 0x22E3,
3118 0x22A8, 0x0338, 0x22AD,
3119 0x22A9, 0x0338, 0x22AE,
3120 0x22AB, 0x0338, 0x22AF,
3121 0x22B2, 0x0338, 0x22EA,
3122 0x22B3, 0x0338, 0x22EB,
3123 0x22B4, 0x0338, 0x22EC,
3124 0x22B5, 0x0338, 0x22ED,
3125 0x2ADD, 0x0338, 0x2ADC,
3126 XK_KP_Divide, XK_D, 0x0110,
3127 XK_KP_Divide, XK_G, 0x01E4,
3128 XK_KP_Divide, XK_H, 0x0126,
3129 XK_KP_Divide, XK_I, 0x0197,
3130 XK_KP_Divide, XK_L, 0x0141,
3131 XK_KP_Divide, XK_O, 0x00D8,
3132 XK_KP_Divide, XK_T, 0x0166,
3133 XK_KP_Divide, XK_Z, 0x01B5,
3134 XK_KP_Divide, XK_b, 0x0180,
3135 XK_KP_Divide, XK_d, 0x0111,
3136 XK_KP_Divide, XK_g, 0x01E5,
3137 XK_KP_Divide, XK_h, 0x0127,
3138 XK_KP_Divide, XK_i, 0x0268,
3139 XK_KP_Divide, XK_l, 0x0142,
3140 XK_KP_Divide, XK_o, 0x00F8,
3141 XK_KP_Divide, XK_t, 0x0167,
3142 XK_KP_Divide, XK_z, 0x01B6,
3143 XK_KP_Divide, 0x0294, 0x02A1,
3144 XK_KP_Divide, 0x04AE, 0x04B0,
3145 XK_KP_Divide, 0x04AF, 0x04B1,
3146 XK_KP_Divide, XK_Cyrillic_ghe, 0x0493,
3147 XK_KP_Divide, XK_Cyrillic_ka, 0x049F,
3148 XK_KP_Divide, XK_Cyrillic_GHE, 0x0492,
3149 XK_KP_Divide, XK_Cyrillic_KA, 0x049E,
3150 XK_KP_Divide, XK_leftarrow, 0x219A,
3151 XK_KP_Divide, XK_rightarrow, 0x219B,
3152 XK_KP_Divide, 0x2194, 0x21AE,
3153 XK_KP_Equal, 0x0338, 0x2260,
3154 XK_exclam, XK_plus, XK_O, 0x1EE2,
3155 XK_exclam, XK_plus, XK_U, 0x1EF0,
3156 XK_exclam, XK_plus, XK_o, 0x1EE3,
3157 XK_exclam, XK_plus, XK_u, 0x1EF1,
3158 XK_exclam, XK_dead_horn, XK_O, 0x1EE2,
3159 XK_exclam, XK_dead_horn, XK_U, 0x1EF0,
3160 XK_exclam, XK_dead_horn, XK_o, 0x1EE3,
3161 XK_exclam, XK_dead_horn, XK_u, 0x1EF1,
3162 XK_quotedbl, XK_apostrophe, XK_space, 0x0385,
3163 XK_quotedbl, XK_apostrophe, XK_Greek_iota, 0x0390,
3164 XK_quotedbl, XK_apostrophe, XK_Greek_upsilon, 0x03B0,
3165 XK_quotedbl, XK_underscore, XK_U, 0x1E7A,
3166 XK_quotedbl, XK_underscore, XK_u, 0x1E7B,
3167 XK_quotedbl, XK_asciitilde, XK_O, 0x1E4E,
3168 XK_quotedbl, XK_asciitilde, XK_o, 0x1E4F,
3169 XK_quotedbl, XK_macron, XK_U, 0x1E7A,
3170 XK_quotedbl, XK_macron, XK_u, 0x1E7B,
3171 XK_quotedbl, XK_dead_tilde, XK_O, 0x1E4E,
3172 XK_quotedbl, XK_dead_tilde, XK_o, 0x1E4F,
3173 XK_quotedbl, XK_dead_macron, XK_U, 0x1E7A,
3174 XK_quotedbl, XK_dead_macron, XK_u, 0x1E7B,
3175 XK_apostrophe, XK_quotedbl, XK_space, 0x0385,
3176 XK_apostrophe, XK_quotedbl, XK_I, 0x1E2E,
3177 XK_apostrophe, XK_quotedbl, XK_U, 0x01D7,
3178 XK_apostrophe, XK_quotedbl, XK_i, 0x1E2F,
3179 XK_apostrophe, XK_quotedbl, XK_u, 0x01D8,
3180 XK_apostrophe, XK_quotedbl, XK_Greek_iota, 0x0390,
3181 XK_apostrophe, XK_quotedbl, XK_Greek_upsilon, 0x03B0,
3182 XK_apostrophe, XK_parenleft, XK_Greek_ALPHA, 0x1F0D,
3183 XK_apostrophe, XK_parenleft, XK_Greek_EPSILON, 0x1F1D,
3184 XK_apostrophe, XK_parenleft, XK_Greek_ETA, 0x1F2D,
3185 XK_apostrophe, XK_parenleft, XK_Greek_IOTA, 0x1F3D,
3186 XK_apostrophe, XK_parenleft, XK_Greek_OMICRON, 0x1F4D,
3187 XK_apostrophe, XK_parenleft, XK_Greek_UPSILON, 0x1F5D,
3188 XK_apostrophe, XK_parenleft, XK_Greek_OMEGA, 0x1F6D,
3189 XK_apostrophe, XK_parenleft, XK_Greek_alpha, 0x1F05,
3190 XK_apostrophe, XK_parenleft, XK_Greek_epsilon, 0x1F15,
3191 XK_apostrophe, XK_parenleft, XK_Greek_eta, 0x1F25,
3192 XK_apostrophe, XK_parenleft, XK_Greek_iota, 0x1F35,
3193 XK_apostrophe, XK_parenleft, XK_Greek_omicron, 0x1F45,
3194 XK_apostrophe, XK_parenleft, XK_Greek_upsilon, 0x1F55,
3195 XK_apostrophe, XK_parenleft, XK_Greek_omega, 0x1F65,
3196 XK_apostrophe, XK_parenright, XK_Greek_ALPHA, 0x1F0C,
3197 XK_apostrophe, XK_parenright, XK_Greek_EPSILON, 0x1F1C,
3198 XK_apostrophe, XK_parenright, XK_Greek_ETA, 0x1F2C,
3199 XK_apostrophe, XK_parenright, XK_Greek_IOTA, 0x1F3C,
3200 XK_apostrophe, XK_parenright, XK_Greek_OMICRON, 0x1F4C,
3201 XK_apostrophe, XK_parenright, XK_Greek_OMEGA, 0x1F6C,
3202 XK_apostrophe, XK_parenright, XK_Greek_alpha, 0x1F04,
3203 XK_apostrophe, XK_parenright, XK_Greek_epsilon, 0x1F14,
3204 XK_apostrophe, XK_parenright, XK_Greek_eta, 0x1F24,
3205 XK_apostrophe, XK_parenright, XK_Greek_iota, 0x1F34,
3206 XK_apostrophe, XK_parenright, XK_Greek_omicron, 0x1F44,
3207 XK_apostrophe, XK_parenright, XK_Greek_upsilon, 0x1F54,
3208 XK_apostrophe, XK_parenright, XK_Greek_omega, 0x1F64,
3209 XK_apostrophe, XK_plus, XK_O, 0x1EDA,
3210 XK_apostrophe, XK_plus, XK_U, 0x1EE8,
3211 XK_apostrophe, XK_plus, XK_o, 0x1EDB,
3212 XK_apostrophe, XK_plus, XK_u, 0x1EE9,
3213 XK_apostrophe, XK_slash, XK_O, 0x01FE,
3214 XK_apostrophe, XK_slash, XK_o, 0x01FF,
3215 XK_apostrophe, XK_asciicircum, XK_A, 0x1EA4,
3216 XK_apostrophe, XK_asciicircum, XK_E, 0x1EBE,
3217 XK_apostrophe, XK_asciicircum, XK_O, 0x1ED0,
3218 XK_apostrophe, XK_asciicircum, XK_a, 0x1EA5,
3219 XK_apostrophe, XK_asciicircum, XK_e, 0x1EBF,
3220 XK_apostrophe, XK_asciicircum, XK_o, 0x1ED1,
3221 XK_apostrophe, XK_underscore, XK_E, 0x1E16,
3222 XK_apostrophe, XK_underscore, XK_O, 0x1E52,
3223 XK_apostrophe, XK_underscore, XK_e, 0x1E17,
3224 XK_apostrophe, XK_underscore, XK_o, 0x1E53,
3225 XK_apostrophe, XK_b, XK_A, 0x1EAE,
3226 XK_apostrophe, XK_b, XK_a, 0x1EAF,
3227 XK_apostrophe, XK_asciitilde, XK_O, 0x1E4C,
3228 XK_apostrophe, XK_asciitilde, XK_U, 0x1E78,
3229 XK_apostrophe, XK_asciitilde, XK_o, 0x1E4D,
3230 XK_apostrophe, XK_asciitilde, XK_u, 0x1E79,
3231 XK_apostrophe, XK_macron, XK_E, 0x1E16,
3232 XK_apostrophe, XK_macron, XK_O, 0x1E52,
3233 XK_apostrophe, XK_macron, XK_e, 0x1E17,
3234 XK_apostrophe, XK_macron, XK_o, 0x1E53,
3235 XK_apostrophe, XK_cedilla, XK_C, 0x1E08,
3236 XK_apostrophe, XK_cedilla, XK_c, 0x1E09,
3237 XK_apostrophe, XK_dead_circumflex, XK_A, 0x1EA4,
3238 XK_apostrophe, XK_dead_circumflex, XK_E, 0x1EBE,
3239 XK_apostrophe, XK_dead_circumflex, XK_O, 0x1ED0,
3240 XK_apostrophe, XK_dead_circumflex, XK_a, 0x1EA5,
3241 XK_apostrophe, XK_dead_circumflex, XK_e, 0x1EBF,
3242 XK_apostrophe, XK_dead_circumflex, XK_o, 0x1ED1,
3243 XK_apostrophe, XK_dead_tilde, XK_O, 0x1E4C,
3244 XK_apostrophe, XK_dead_tilde, XK_U, 0x1E78,
3245 XK_apostrophe, XK_dead_tilde, XK_o, 0x1E4D,
3246 XK_apostrophe, XK_dead_tilde, XK_u, 0x1E79,
3247 XK_apostrophe, XK_dead_macron, XK_E, 0x1E16,
3248 XK_apostrophe, XK_dead_macron, XK_O, 0x1E52,
3249 XK_apostrophe, XK_dead_macron, XK_e, 0x1E17,
3250 XK_apostrophe, XK_dead_macron, XK_o, 0x1E53,
3251 XK_apostrophe, XK_dead_breve, XK_A, 0x1EAE,
3252 XK_apostrophe, XK_dead_breve, XK_a, 0x1EAF,
3253 XK_apostrophe, XK_dead_diaeresis, XK_I, 0x1E2E,
3254 XK_apostrophe, XK_dead_diaeresis, XK_U, 0x01D7,
3255 XK_apostrophe, XK_dead_diaeresis, XK_i, 0x1E2F,
3256 XK_apostrophe, XK_dead_diaeresis, XK_u, 0x01D8,
3257 XK_apostrophe, XK_dead_diaeresis, XK_Greek_iota, 0x0390,
3258 XK_apostrophe, XK_dead_diaeresis, XK_Greek_upsilon, 0x03B0,
3259 XK_apostrophe, XK_dead_abovering, XK_A, 0x01FA,
3260 XK_apostrophe, XK_dead_abovering, XK_a, 0x01FB,
3261 XK_apostrophe, XK_dead_cedilla, XK_C, 0x1E08,
3262 XK_apostrophe, XK_dead_cedilla, XK_c, 0x1E09,
3263 XK_apostrophe, XK_dead_horn, XK_O, 0x1EDA,
3264 XK_apostrophe, XK_dead_horn, XK_U, 0x1EE8,
3265 XK_apostrophe, XK_dead_horn, XK_o, 0x1EDB,
3266 XK_apostrophe, XK_dead_horn, XK_u, 0x1EE9,
3267 XK_apostrophe, XK_dead_psili, XK_Greek_ALPHA, 0x1F0C,
3268 XK_apostrophe, XK_dead_psili, XK_Greek_EPSILON, 0x1F1C,
3269 XK_apostrophe, XK_dead_psili, XK_Greek_ETA, 0x1F2C,
3270 XK_apostrophe, XK_dead_psili, XK_Greek_IOTA, 0x1F3C,
3271 XK_apostrophe, XK_dead_psili, XK_Greek_OMICRON, 0x1F4C,
3272 XK_apostrophe, XK_dead_psili, XK_Greek_OMEGA, 0x1F6C,
3273 XK_apostrophe, XK_dead_psili, XK_Greek_alpha, 0x1F04,
3274 XK_apostrophe, XK_dead_psili, XK_Greek_epsilon, 0x1F14,
3275 XK_apostrophe, XK_dead_psili, XK_Greek_eta, 0x1F24,
3276 XK_apostrophe, XK_dead_psili, XK_Greek_iota, 0x1F34,
3277 XK_apostrophe, XK_dead_psili, XK_Greek_omicron, 0x1F44,
3278 XK_apostrophe, XK_dead_psili, XK_Greek_upsilon, 0x1F54,
3279 XK_apostrophe, XK_dead_psili, XK_Greek_omega, 0x1F64,
3280 XK_apostrophe, XK_dead_dasia, XK_Greek_ALPHA, 0x1F0D,
3281 XK_apostrophe, XK_dead_dasia, XK_Greek_EPSILON, 0x1F1D,
3282 XK_apostrophe, XK_dead_dasia, XK_Greek_ETA, 0x1F2D,
3283 XK_apostrophe, XK_dead_dasia, XK_Greek_IOTA, 0x1F3D,
3284 XK_apostrophe, XK_dead_dasia, XK_Greek_OMICRON, 0x1F4D,
3285 XK_apostrophe, XK_dead_dasia, XK_Greek_UPSILON, 0x1F5D,
3286 XK_apostrophe, XK_dead_dasia, XK_Greek_OMEGA, 0x1F6D,
3287 XK_apostrophe, XK_dead_dasia, XK_Greek_alpha, 0x1F05,
3288 XK_apostrophe, XK_dead_dasia, XK_Greek_epsilon, 0x1F15,
3289 XK_apostrophe, XK_dead_dasia, XK_Greek_eta, 0x1F25,
3290 XK_apostrophe, XK_dead_dasia, XK_Greek_iota, 0x1F35,
3291 XK_apostrophe, XK_dead_dasia, XK_Greek_omicron, 0x1F45,
3292 XK_apostrophe, XK_dead_dasia, XK_Greek_upsilon, 0x1F55,
3293 XK_apostrophe, XK_dead_dasia, XK_Greek_omega, 0x1F65,
3294 XK_apostrophe, XK_KP_Divide, XK_O, 0x01FE,
3295 XK_apostrophe, XK_KP_Divide, XK_o, 0x01FF,
3296 XK_parenleft, XK_0, XK_parenright, 0x24EA,
3297 XK_parenleft, XK_1, XK_parenright, 0x2460,
3298 XK_parenleft, XK_2, XK_parenright, 0x2461,
3299 XK_parenleft, XK_3, XK_parenright, 0x2462,
3300 XK_parenleft, XK_4, XK_parenright, 0x2463,
3301 XK_parenleft, XK_5, XK_parenright, 0x2464,
3302 XK_parenleft, XK_6, XK_parenright, 0x2465,
3303 XK_parenleft, XK_7, XK_parenright, 0x2466,
3304 XK_parenleft, XK_8, XK_parenright, 0x2467,
3305 XK_parenleft, XK_9, XK_parenright, 0x2468,
3306 XK_parenleft, XK_A, XK_parenright, 0x24B6,
3307 XK_parenleft, XK_B, XK_parenright, 0x24B7,
3308 XK_parenleft, XK_C, XK_parenright, 0x24B8,
3309 XK_parenleft, XK_D, XK_parenright, 0x24B9,
3310 XK_parenleft, XK_E, XK_parenright, 0x24BA,
3311 XK_parenleft, XK_F, XK_parenright, 0x24BB,
3312 XK_parenleft, XK_G, XK_parenright, 0x24BC,
3313 XK_parenleft, XK_H, XK_parenright, 0x24BD,
3314 XK_parenleft, XK_I, XK_parenright, 0x24BE,
3315 XK_parenleft, XK_J, XK_parenright, 0x24BF,
3316 XK_parenleft, XK_K, XK_parenright, 0x24C0,
3317 XK_parenleft, XK_L, XK_parenright, 0x24C1,
3318 XK_parenleft, XK_M, XK_parenright, 0x24C2,
3319 XK_parenleft, XK_N, XK_parenright, 0x24C3,
3320 XK_parenleft, XK_O, XK_parenright, 0x24C4,
3321 XK_parenleft, XK_P, XK_parenright, 0x24C5,
3322 XK_parenleft, XK_Q, XK_parenright, 0x24C6,
3323 XK_parenleft, XK_R, XK_parenright, 0x24C7,
3324 XK_parenleft, XK_S, XK_parenright, 0x24C8,
3325 XK_parenleft, XK_T, XK_parenright, 0x24C9,
3326 XK_parenleft, XK_U, XK_parenright, 0x24CA,
3327 XK_parenleft, XK_V, XK_parenright, 0x24CB,
3328 XK_parenleft, XK_W, XK_parenright, 0x24CC,
3329 XK_parenleft, XK_X, XK_parenright, 0x24CD,
3330 XK_parenleft, XK_Y, XK_parenright, 0x24CE,
3331 XK_parenleft, XK_Z, XK_parenright, 0x24CF,
3332 XK_parenleft, XK_a, XK_parenright, 0x24D0,
3333 XK_parenleft, XK_b, XK_parenright, 0x24D1,
3334 XK_parenleft, XK_c, XK_parenright, 0x24D2,
3335 XK_parenleft, XK_d, XK_parenright, 0x24D3,
3336 XK_parenleft, XK_e, XK_parenright, 0x24D4,
3337 XK_parenleft, XK_f, XK_parenright, 0x24D5,
3338 XK_parenleft, XK_g, XK_parenright, 0x24D6,
3339 XK_parenleft, XK_h, XK_parenright, 0x24D7,
3340 XK_parenleft, XK_i, XK_parenright, 0x24D8,
3341 XK_parenleft, XK_j, XK_parenright, 0x24D9,
3342 XK_parenleft, XK_k, XK_parenright, 0x24DA,
3343 XK_parenleft, XK_l, XK_parenright, 0x24DB,
3344 XK_parenleft, XK_m, XK_parenright, 0x24DC,
3345 XK_parenleft, XK_n, XK_parenright, 0x24DD,
3346 XK_parenleft, XK_o, XK_parenright, 0x24DE,
3347 XK_parenleft, XK_p, XK_parenright, 0x24DF,
3348 XK_parenleft, XK_q, XK_parenright, 0x24E0,
3349 XK_parenleft, XK_r, XK_parenright, 0x24E1,
3350 XK_parenleft, XK_s, XK_parenright, 0x24E2,
3351 XK_parenleft, XK_t, XK_parenright, 0x24E3,
3352 XK_parenleft, XK_u, XK_parenright, 0x24E4,
3353 XK_parenleft, XK_v, XK_parenright, 0x24E5,
3354 XK_parenleft, XK_w, XK_parenright, 0x24E6,
3355 XK_parenleft, XK_x, XK_parenright, 0x24E7,
3356 XK_parenleft, XK_y, XK_parenright, 0x24E8,
3357 XK_parenleft, XK_z, XK_parenright, 0x24E9,
3358 XK_parenleft, XK_kana_WO, XK_parenright, 0x32FE,
3359 XK_parenleft, XK_kana_A, XK_parenright, 0x32D0,
3360 XK_parenleft, XK_kana_I, XK_parenright, 0x32D1,
3361 XK_parenleft, XK_kana_U, XK_parenright, 0x32D2,
3362 XK_parenleft, XK_kana_E, XK_parenright, 0x32D3,
3363 XK_parenleft, XK_kana_O, XK_parenright, 0x32D4,
3364 XK_parenleft, XK_kana_KA, XK_parenright, 0x32D5,
3365 XK_parenleft, XK_kana_KI, XK_parenright, 0x32D6,
3366 XK_parenleft, XK_kana_KU, XK_parenright, 0x32D7,
3367 XK_parenleft, XK_kana_KE, XK_parenright, 0x32D8,
3368 XK_parenleft, XK_kana_KO, XK_parenright, 0x32D9,
3369 XK_parenleft, XK_kana_SA, XK_parenright, 0x32DA,
3370 XK_parenleft, XK_kana_SHI, XK_parenright, 0x32DB,
3371 XK_parenleft, XK_kana_SU, XK_parenright, 0x32DC,
3372 XK_parenleft, XK_kana_SE, XK_parenright, 0x32DD,
3373 XK_parenleft, XK_kana_SO, XK_parenright, 0x32DE,
3374 XK_parenleft, XK_kana_TA, XK_parenright, 0x32DF,
3375 XK_parenleft, XK_kana_CHI, XK_parenright, 0x32E0,
3376 XK_parenleft, XK_kana_TSU, XK_parenright, 0x32E1,
3377 XK_parenleft, XK_kana_TE, XK_parenright, 0x32E2,
3378 XK_parenleft, XK_kana_TO, XK_parenright, 0x32E3,
3379 XK_parenleft, XK_kana_NA, XK_parenright, 0x32E4,
3380 XK_parenleft, XK_kana_NI, XK_parenright, 0x32E5,
3381 XK_parenleft, XK_kana_NU, XK_parenright, 0x32E6,
3382 XK_parenleft, XK_kana_NE, XK_parenright, 0x32E7,
3383 XK_parenleft, XK_kana_NO, XK_parenright, 0x32E8,
3384 XK_parenleft, XK_kana_HA, XK_parenright, 0x32E9,
3385 XK_parenleft, XK_kana_HI, XK_parenright, 0x32EA,
3386 XK_parenleft, XK_kana_FU, XK_parenright, 0x32EB,
3387 XK_parenleft, XK_kana_HE, XK_parenright, 0x32EC,
3388 XK_parenleft, XK_kana_HO, XK_parenright, 0x32ED,
3389 XK_parenleft, XK_kana_MA, XK_parenright, 0x32EE,
3390 XK_parenleft, XK_kana_MI, XK_parenright, 0x32EF,
3391 XK_parenleft, XK_kana_MU, XK_parenright, 0x32F0,
3392 XK_parenleft, XK_kana_ME, XK_parenright, 0x32F1,
3393 XK_parenleft, XK_kana_MO, XK_parenright, 0x32F2,
3394 XK_parenleft, XK_kana_YA, XK_parenright, 0x32F3,
3395 XK_parenleft, XK_kana_YU, XK_parenright, 0x32F4,
3396 XK_parenleft, XK_kana_YO, XK_parenright, 0x32F5,
3397 XK_parenleft, XK_kana_RA, XK_parenright, 0x32F6,
3398 XK_parenleft, XK_kana_RI, XK_parenright, 0x32F7,
3399 XK_parenleft, XK_kana_RU, XK_parenright, 0x32F8,
3400 XK_parenleft, XK_kana_RE, XK_parenright, 0x32F9,
3401 XK_parenleft, XK_kana_RO, XK_parenright, 0x32FA,
3402 XK_parenleft, XK_kana_WA, XK_parenright, 0x32FB,
3403 XK_parenleft, 0x1100, XK_parenright, 0x3260,
3404 XK_parenleft, 0x1102, XK_parenright, 0x3261,
3405 XK_parenleft, 0x1103, XK_parenright, 0x3262,
3406 XK_parenleft, 0x1105, XK_parenright, 0x3263,
3407 XK_parenleft, 0x1106, XK_parenright, 0x3264,
3408 XK_parenleft, 0x1107, XK_parenright, 0x3265,
3409 XK_parenleft, 0x1109, XK_parenright, 0x3266,
3410 XK_parenleft, 0x110B, XK_parenright, 0x3267,
3411 XK_parenleft, 0x110C, XK_parenright, 0x3268,
3412 XK_parenleft, 0x110E, XK_parenright, 0x3269,
3413 XK_parenleft, 0x110F, XK_parenright, 0x326A,
3414 XK_parenleft, 0x1110, XK_parenright, 0x326B,
3415 XK_parenleft, 0x1111, XK_parenright, 0x326C,
3416 XK_parenleft, 0x1112, XK_parenright, 0x326D,
3417 XK_parenleft, 0x30F0, XK_parenright, 0x32FC,
3418 XK_parenleft, 0x30F1, XK_parenright, 0x32FD,
3419 XK_parenleft, 0x4E00, XK_parenright, 0x3280,
3420 XK_parenleft, 0x4E03, XK_parenright, 0x3286,
3421 XK_parenleft, 0x4E09, XK_parenright, 0x3282,
3422 XK_parenleft, 0x4E0A, XK_parenright, 0x32A4,
3423 XK_parenleft, 0x4E0B, XK_parenright, 0x32A6,
3424 XK_parenleft, 0x4E2D, XK_parenright, 0x32A5,
3425 XK_parenleft, 0x4E5D, XK_parenright, 0x3288,
3426 XK_parenleft, 0x4E8C, XK_parenright, 0x3281,
3427 XK_parenleft, 0x4E94, XK_parenright, 0x3284,
3428 XK_parenleft, 0x4F01, XK_parenright, 0x32AD,
3429 XK_parenleft, 0x4F11, XK_parenright, 0x32A1,
3430 XK_parenleft, 0x512A, XK_parenright, 0x329D,
3431 XK_parenleft, 0x516B, XK_parenright, 0x3287,
3432 XK_parenleft, 0x516D, XK_parenright, 0x3285,
3433 XK_parenleft, 0x5199, XK_parenright, 0x32A2,
3434 XK_parenleft, 0x52B4, XK_parenright, 0x3298,
3435 XK_parenleft, 0x533B, XK_parenright, 0x32A9,
3436 XK_parenleft, 0x5341, XK_parenright, 0x3289,
3437 XK_parenleft, 0x5354, XK_parenright, 0x32AF,
3438 XK_parenleft, 0x5370, XK_parenright, 0x329E,
3439 XK_parenleft, 0x53F3, XK_parenright, 0x32A8,
3440 XK_parenleft, 0x540D, XK_parenright, 0x3294,
3441 XK_parenleft, 0x56DB, XK_parenright, 0x3283,
3442 XK_parenleft, 0x571F, XK_parenright, 0x328F,
3443 XK_parenleft, 0x591C, XK_parenright, 0x32B0,
3444 XK_parenleft, 0x5973, XK_parenright, 0x329B,
3445 XK_parenleft, 0x5B66, XK_parenright, 0x32AB,
3446 XK_parenleft, 0x5B97, XK_parenright, 0x32AA,
3447 XK_parenleft, 0x5DE6, XK_parenright, 0x32A7,
3448 XK_parenleft, 0x65E5, XK_parenright, 0x3290,
3449 XK_parenleft, 0x6708, XK_parenright, 0x328A,
3450 XK_parenleft, 0x6709, XK_parenright, 0x3292,
3451 XK_parenleft, 0x6728, XK_parenright, 0x328D,
3452 XK_parenleft, 0x682A, XK_parenright, 0x3291,
3453 XK_parenleft, 0x6B63, XK_parenright, 0x32A3,
3454 XK_parenleft, 0x6C34, XK_parenright, 0x328C,
3455 XK_parenleft, 0x6CE8, XK_parenright, 0x329F,
3456 XK_parenleft, 0x706B, XK_parenright, 0x328B,
3457 XK_parenleft, 0x7279, XK_parenright, 0x3295,
3458 XK_parenleft, 0x7537, XK_parenright, 0x329A,
3459 XK_parenleft, 0x76E3, XK_parenright, 0x32AC,
3460 XK_parenleft, 0x793E, XK_parenright, 0x3293,
3461 XK_parenleft, 0x795D, XK_parenright, 0x3297,
3462 XK_parenleft, 0x79D8, XK_parenright, 0x3299,
3463 XK_parenleft, 0x8CA1, XK_parenright, 0x3296,
3464 XK_parenleft, 0x8CC7, XK_parenright, 0x32AE,
3465 XK_parenleft, 0x9069, XK_parenright, 0x329C,
3466 XK_parenleft, 0x91D1, XK_parenright, 0x328E,
3467 XK_parenleft, 0x9805, XK_parenright, 0x32A0,
3468 XK_parenleft, XK_KP_Space, XK_parenright, 0x2461,
3469 XK_parenleft, XK_KP_0, XK_parenright, 0x24EA,
3470 XK_parenleft, XK_KP_1, XK_parenright, 0x2460,
3471 XK_parenleft, XK_KP_2, XK_parenright, 0x2461,
3472 XK_parenleft, XK_KP_3, XK_parenright, 0x2462,
3473 XK_parenleft, XK_KP_4, XK_parenright, 0x2463,
3474 XK_parenleft, XK_KP_5, XK_parenright, 0x2464,
3475 XK_parenleft, XK_KP_6, XK_parenright, 0x2465,
3476 XK_parenleft, XK_KP_7, XK_parenright, 0x2466,
3477 XK_parenleft, XK_KP_8, XK_parenright, 0x2467,
3478 XK_parenleft, XK_KP_9, XK_parenright, 0x2468,
3479 XK_minus, XK_minus, XK_space, 0x00AD,
3480 XK_minus, XK_minus, XK_minus, 0x2014,
3481 XK_minus, XK_minus, XK_period, 0x2013,
3482 XK_period, XK_exclam, XK_S, 0x1E68,
3483 XK_period, XK_exclam, XK_s, 0x1E69,
3484 XK_period, XK_apostrophe, XK_S, 0x1E64,
3485 XK_period, XK_apostrophe, XK_s, 0x1E65,
3486 XK_period, XK_acute, XK_S, 0x1E64,
3487 XK_period, XK_acute, XK_s, 0x1E65,
3488 XK_period, XK_dead_acute, XK_S, 0x1E64,
3489 XK_period, XK_dead_acute, XK_s, 0x1E65,
3490 XK_period, XK_dead_caron, XK_S, 0x1E66,
3491 XK_period, XK_dead_caron, XK_s, 0x1E67,
3492 XK_period, XK_dead_belowdot, XK_S, 0x1E68,
3493 XK_period, XK_dead_belowdot, XK_s, 0x1E69,
3494 XK_question, XK_plus, XK_O, 0x1EDE,
3495 XK_question, XK_plus, XK_U, 0x1EEC,
3496 XK_question, XK_plus, XK_o, 0x1EDF,
3497 XK_question, XK_plus, XK_u, 0x1EED,
3498 XK_question, XK_asciicircum, XK_A, 0x1EA8,
3499 XK_question, XK_asciicircum, XK_E, 0x1EC2,
3500 XK_question, XK_asciicircum, XK_O, 0x1ED4,
3501 XK_question, XK_asciicircum, XK_a, 0x1EA9,
3502 XK_question, XK_asciicircum, XK_e, 0x1EC3,
3503 XK_question, XK_asciicircum, XK_o, 0x1ED5,
3504 XK_question, XK_b, XK_A, 0x1EB2,
3505 XK_question, XK_b, XK_a, 0x1EB3,
3506 XK_question, XK_dead_circumflex, XK_A, 0x1EA8,
3507 XK_question, XK_dead_circumflex, XK_E, 0x1EC2,
3508 XK_question, XK_dead_circumflex, XK_O, 0x1ED4,
3509 XK_question, XK_dead_circumflex, XK_a, 0x1EA9,
3510 XK_question, XK_dead_circumflex, XK_e, 0x1EC3,
3511 XK_question, XK_dead_circumflex, XK_o, 0x1ED5,
3512 XK_question, XK_dead_breve, XK_A, 0x1EB2,
3513 XK_question, XK_dead_breve, XK_a, 0x1EB3,
3514 XK_question, XK_dead_horn, XK_O, 0x1EDE,
3515 XK_question, XK_dead_horn, XK_U, 0x1EEC,
3516 XK_question, XK_dead_horn, XK_o, 0x1EDF,
3517 XK_question, XK_dead_horn, XK_u, 0x1EED,
3518 XK_U, XK_exclam, XK_A, 0x1EB6,
3519 XK_U, XK_exclam, XK_a, 0x1EB7,
3520 XK_U, XK_comma, XK_E, 0x1E1C,
3521 XK_U, XK_comma, XK_e, 0x1E1D,
3522 XK_U, XK_cedilla, XK_E, 0x1E1C,
3523 XK_U, XK_cedilla, XK_e, 0x1E1D,
3524 XK_U, XK_dead_cedilla, XK_E, 0x1E1C,
3525 XK_U, XK_dead_cedilla, XK_e, 0x1E1D,
3526 XK_U, XK_dead_belowdot, XK_A, 0x1EB6,
3527 XK_U, XK_dead_belowdot, XK_a, 0x1EB7,
3528 XK_asciicircum, XK_exclam, XK_A, 0x1EAC,
3529 XK_asciicircum, XK_exclam, XK_E, 0x1EC6,
3530 XK_asciicircum, XK_exclam, XK_O, 0x1ED8,
3531 XK_asciicircum, XK_exclam, XK_a, 0x1EAD,
3532 XK_asciicircum, XK_exclam, XK_e, 0x1EC7,
3533 XK_asciicircum, XK_exclam, XK_o, 0x1ED9,
3534 XK_asciicircum, XK_underscore, XK_a, 0x00AA,
3535 XK_asciicircum, XK_underscore, XK_h, 0x02B0,
3536 XK_asciicircum, XK_underscore, XK_i, 0x2071,
3537 XK_asciicircum, XK_underscore, XK_j, 0x02B2,
3538 XK_asciicircum, XK_underscore, XK_l, 0x02E1,
3539 XK_asciicircum, XK_underscore, XK_n, 0x207F,
3540 XK_asciicircum, XK_underscore, XK_o, 0x00BA,
3541 XK_asciicircum, XK_underscore, XK_r, 0x02B3,
3542 XK_asciicircum, XK_underscore, XK_s, 0x02E2,
3543 XK_asciicircum, XK_underscore, XK_w, 0x02B7,
3544 XK_asciicircum, XK_underscore, XK_x, 0x02E3,
3545 XK_asciicircum, XK_underscore, XK_y, 0x02B8,
3546 XK_asciicircum, XK_underscore, 0x0263, 0x02E0,
3547 XK_asciicircum, XK_underscore, 0x0266, 0x02B1,
3548 XK_asciicircum, XK_underscore, 0x0279, 0x02B4,
3549 XK_asciicircum, XK_underscore, 0x027B, 0x02B5,
3550 XK_asciicircum, XK_underscore, 0x0281, 0x02B6,
3551 XK_asciicircum, XK_underscore, 0x0295, 0x02E4,
3552 XK_asciicircum, XK_underbar, XK_a, 0x00AA,
3553 XK_asciicircum, XK_underbar, XK_h, 0x02B0,
3554 XK_asciicircum, XK_underbar, XK_i, 0x2071,
3555 XK_asciicircum, XK_underbar, XK_j, 0x02B2,
3556 XK_asciicircum, XK_underbar, XK_l, 0x02E1,
3557 XK_asciicircum, XK_underbar, XK_n, 0x207F,
3558 XK_asciicircum, XK_underbar, XK_o, 0x00BA,
3559 XK_asciicircum, XK_underbar, XK_r, 0x02B3,
3560 XK_asciicircum, XK_underbar, XK_s, 0x02E2,
3561 XK_asciicircum, XK_underbar, XK_w, 0x02B7,
3562 XK_asciicircum, XK_underbar, XK_x, 0x02E3,
3563 XK_asciicircum, XK_underbar, XK_y, 0x02B8,
3564 XK_asciicircum, XK_underbar, 0x0263, 0x02E0,
3565 XK_asciicircum, XK_underbar, 0x0266, 0x02B1,
3566 XK_asciicircum, XK_underbar, 0x0279, 0x02B4,
3567 XK_asciicircum, XK_underbar, 0x027B, 0x02B5,
3568 XK_asciicircum, XK_underbar, 0x0281, 0x02B6,
3569 XK_asciicircum, XK_underbar, 0x0295, 0x02E4,
3570 XK_asciicircum, XK_dead_belowdot, XK_A, 0x1EAC,
3571 XK_asciicircum, XK_dead_belowdot, XK_E, 0x1EC6,
3572 XK_asciicircum, XK_dead_belowdot, XK_O, 0x1ED8,
3573 XK_asciicircum, XK_dead_belowdot, XK_a, 0x1EAD,
3574 XK_asciicircum, XK_dead_belowdot, XK_e, 0x1EC7,
3575 XK_asciicircum, XK_dead_belowdot, XK_o, 0x1ED9,
3576 XK_underscore, XK_exclam, XK_L, 0x1E38,
3577 XK_underscore, XK_exclam, XK_R, 0x1E5C,
3578 XK_underscore, XK_exclam, XK_l, 0x1E39,
3579 XK_underscore, XK_exclam, XK_r, 0x1E5D,
3580 XK_underscore, XK_quotedbl, XK_A, 0x01DE,
3581 XK_underscore, XK_quotedbl, XK_O, 0x022A,
3582 XK_underscore, XK_quotedbl, XK_U, 0x01D5,
3583 XK_underscore, XK_quotedbl, XK_a, 0x01DF,
3584 XK_underscore, XK_quotedbl, XK_o, 0x022B,
3585 XK_underscore, XK_quotedbl, XK_u, 0x01D6,
3586 XK_underscore, XK_period, XK_A, 0x01E0,
3587 XK_underscore, XK_period, XK_O, 0x0230,
3588 XK_underscore, XK_period, XK_a, 0x01E1,
3589 XK_underscore, XK_period, XK_o, 0x0231,
3590 XK_underscore, XK_semicolon, XK_O, 0x01EC,
3591 XK_underscore, XK_semicolon, XK_o, 0x01ED,
3592 XK_underscore, XK_asciitilde, XK_O, 0x022C,
3593 XK_underscore, XK_asciitilde, XK_o, 0x022D,
3594 XK_underscore, XK_dead_tilde, XK_O, 0x022C,
3595 XK_underscore, XK_dead_tilde, XK_o, 0x022D,
3596 XK_underscore, XK_dead_abovedot, XK_A, 0x01E0,
3597 XK_underscore, XK_dead_abovedot, XK_O, 0x0230,
3598 XK_underscore, XK_dead_abovedot, XK_a, 0x01E1,
3599 XK_underscore, XK_dead_abovedot, XK_o, 0x0231,
3600 XK_underscore, XK_dead_diaeresis, XK_A, 0x01DE,
3601 XK_underscore, XK_dead_diaeresis, XK_O, 0x022A,
3602 XK_underscore, XK_dead_diaeresis, XK_U, 0x01D5,
3603 XK_underscore, XK_dead_diaeresis, XK_a, 0x01DF,
3604 XK_underscore, XK_dead_diaeresis, XK_o, 0x022B,
3605 XK_underscore, XK_dead_diaeresis, XK_u, 0x01D6,
3606 XK_underscore, XK_dead_ogonek, XK_O, 0x01EC,
3607 XK_underscore, XK_dead_ogonek, XK_o, 0x01ED,
3608 XK_underscore, XK_dead_belowdot, XK_L, 0x1E38,
3609 XK_underscore, XK_dead_belowdot, XK_R, 0x1E5C,
3610 XK_underscore, XK_dead_belowdot, XK_l, 0x1E39,
3611 XK_underscore, XK_dead_belowdot, XK_r, 0x1E5D,
3612 XK_grave, XK_quotedbl, XK_U, 0x01DB,
3613 XK_grave, XK_quotedbl, XK_u, 0x01DC,
3614 XK_grave, XK_quotedbl, XK_Greek_iota, 0x1FD2,
3615 XK_grave, XK_quotedbl, XK_Greek_upsilon, 0x1FE2,
3616 XK_grave, XK_parenleft, XK_Greek_ALPHA, 0x1F0B,
3617 XK_grave, XK_parenleft, XK_Greek_EPSILON, 0x1F1B,
3618 XK_grave, XK_parenleft, XK_Greek_ETA, 0x1F2B,
3619 XK_grave, XK_parenleft, XK_Greek_IOTA, 0x1F3B,
3620 XK_grave, XK_parenleft, XK_Greek_OMICRON, 0x1F4B,
3621 XK_grave, XK_parenleft, XK_Greek_UPSILON, 0x1F5B,
3622 XK_grave, XK_parenleft, XK_Greek_OMEGA, 0x1F6B,
3623 XK_grave, XK_parenleft, XK_Greek_alpha, 0x1F03,
3624 XK_grave, XK_parenleft, XK_Greek_epsilon, 0x1F13,
3625 XK_grave, XK_parenleft, XK_Greek_eta, 0x1F23,
3626 XK_grave, XK_parenleft, XK_Greek_iota, 0x1F33,
3627 XK_grave, XK_parenleft, XK_Greek_omicron, 0x1F43,
3628 XK_grave, XK_parenleft, XK_Greek_upsilon, 0x1F53,
3629 XK_grave, XK_parenleft, XK_Greek_omega, 0x1F63,
3630 XK_grave, XK_parenright, XK_Greek_ALPHA, 0x1F0A,
3631 XK_grave, XK_parenright, XK_Greek_EPSILON, 0x1F1A,
3632 XK_grave, XK_parenright, XK_Greek_ETA, 0x1F2A,
3633 XK_grave, XK_parenright, XK_Greek_IOTA, 0x1F3A,
3634 XK_grave, XK_parenright, XK_Greek_OMICRON, 0x1F4A,
3635 XK_grave, XK_parenright, XK_Greek_OMEGA, 0x1F6A,
3636 XK_grave, XK_parenright, XK_Greek_alpha, 0x1F02,
3637 XK_grave, XK_parenright, XK_Greek_epsilon, 0x1F12,
3638 XK_grave, XK_parenright, XK_Greek_eta, 0x1F22,
3639 XK_grave, XK_parenright, XK_Greek_iota, 0x1F32,
3640 XK_grave, XK_parenright, XK_Greek_omicron, 0x1F42,
3641 XK_grave, XK_parenright, XK_Greek_upsilon, 0x1F52,
3642 XK_grave, XK_parenright, XK_Greek_omega, 0x1F62,
3643 XK_grave, XK_plus, XK_O, 0x1EDC,
3644 XK_grave, XK_plus, XK_U, 0x1EEA,
3645 XK_grave, XK_plus, XK_o, 0x1EDD,
3646 XK_grave, XK_plus, XK_u, 0x1EEB,
3647 XK_grave, XK_asciicircum, XK_A, 0x1EA6,
3648 XK_grave, XK_asciicircum, XK_E, 0x1EC0,
3649 XK_grave, XK_asciicircum, XK_O, 0x1ED2,
3650 XK_grave, XK_asciicircum, XK_a, 0x1EA7,
3651 XK_grave, XK_asciicircum, XK_e, 0x1EC1,
3652 XK_grave, XK_asciicircum, XK_o, 0x1ED3,
3653 XK_grave, XK_underscore, XK_E, 0x1E14,
3654 XK_grave, XK_underscore, XK_O, 0x1E50,
3655 XK_grave, XK_underscore, XK_e, 0x1E15,
3656 XK_grave, XK_underscore, XK_o, 0x1E51,
3657 XK_grave, XK_b, XK_A, 0x1EB0,
3658 XK_grave, XK_b, XK_a, 0x1EB1,
3659 XK_grave, XK_macron, XK_E, 0x1E14,
3660 XK_grave, XK_macron, XK_O, 0x1E50,
3661 XK_grave, XK_macron, XK_e, 0x1E15,
3662 XK_grave, XK_macron, XK_o, 0x1E51,
3663 XK_grave, XK_dead_circumflex, XK_A, 0x1EA6,
3664 XK_grave, XK_dead_circumflex, XK_E, 0x1EC0,
3665 XK_grave, XK_dead_circumflex, XK_O, 0x1ED2,
3666 XK_grave, XK_dead_circumflex, XK_a, 0x1EA7,
3667 XK_grave, XK_dead_circumflex, XK_e, 0x1EC1,
3668 XK_grave, XK_dead_circumflex, XK_o, 0x1ED3,
3669 XK_grave, XK_dead_macron, XK_E, 0x1E14,
3670 XK_grave, XK_dead_macron, XK_O, 0x1E50,
3671 XK_grave, XK_dead_macron, XK_e, 0x1E15,
3672 XK_grave, XK_dead_macron, XK_o, 0x1E51,
3673 XK_grave, XK_dead_breve, XK_A, 0x1EB0,
3674 XK_grave, XK_dead_breve, XK_a, 0x1EB1,
3675 XK_grave, XK_dead_diaeresis, XK_U, 0x01DB,
3676 XK_grave, XK_dead_diaeresis, XK_u, 0x01DC,
3677 XK_grave, XK_dead_diaeresis, XK_Greek_iota, 0x1FD2,
3678 XK_grave, XK_dead_diaeresis, XK_Greek_upsilon, 0x1FE2,
3679 XK_grave, XK_dead_horn, XK_O, 0x1EDC,
3680 XK_grave, XK_dead_horn, XK_U, 0x1EEA,
3681 XK_grave, XK_dead_horn, XK_o, 0x1EDD,
3682 XK_grave, XK_dead_horn, XK_u, 0x1EEB,
3683 XK_grave, XK_dead_psili, XK_Greek_ALPHA, 0x1F0A,
3684 XK_grave, XK_dead_psili, XK_Greek_EPSILON, 0x1F1A,
3685 XK_grave, XK_dead_psili, XK_Greek_ETA, 0x1F2A,
3686 XK_grave, XK_dead_psili, XK_Greek_IOTA, 0x1F3A,
3687 XK_grave, XK_dead_psili, XK_Greek_OMICRON, 0x1F4A,
3688 XK_grave, XK_dead_psili, XK_Greek_OMEGA, 0x1F6A,
3689 XK_grave, XK_dead_psili, XK_Greek_alpha, 0x1F02,
3690 XK_grave, XK_dead_psili, XK_Greek_epsilon, 0x1F12,
3691 XK_grave, XK_dead_psili, XK_Greek_eta, 0x1F22,
3692 XK_grave, XK_dead_psili, XK_Greek_iota, 0x1F32,
3693 XK_grave, XK_dead_psili, XK_Greek_omicron, 0x1F42,
3694 XK_grave, XK_dead_psili, XK_Greek_upsilon, 0x1F52,
3695 XK_grave, XK_dead_psili, XK_Greek_omega, 0x1F62,
3696 XK_grave, XK_dead_dasia, XK_Greek_ALPHA, 0x1F0B,
3697 XK_grave, XK_dead_dasia, XK_Greek_EPSILON, 0x1F1B,
3698 XK_grave, XK_dead_dasia, XK_Greek_ETA, 0x1F2B,
3699 XK_grave, XK_dead_dasia, XK_Greek_IOTA, 0x1F3B,
3700 XK_grave, XK_dead_dasia, XK_Greek_OMICRON, 0x1F4B,
3701 XK_grave, XK_dead_dasia, XK_Greek_UPSILON, 0x1F5B,
3702 XK_grave, XK_dead_dasia, XK_Greek_OMEGA, 0x1F6B,
3703 XK_grave, XK_dead_dasia, XK_Greek_alpha, 0x1F03,
3704 XK_grave, XK_dead_dasia, XK_Greek_epsilon, 0x1F13,
3705 XK_grave, XK_dead_dasia, XK_Greek_eta, 0x1F23,
3706 XK_grave, XK_dead_dasia, XK_Greek_iota, 0x1F33,
3707 XK_grave, XK_dead_dasia, XK_Greek_omicron, 0x1F43,
3708 XK_grave, XK_dead_dasia, XK_Greek_upsilon, 0x1F53,
3709 XK_grave, XK_dead_dasia, XK_Greek_omega, 0x1F63,
3710 XK_b, XK_exclam, XK_A, 0x1EB6,
3711 XK_b, XK_exclam, XK_a, 0x1EB7,
3712 XK_b, XK_comma, XK_E, 0x1E1C,
3713 XK_b, XK_comma, XK_e, 0x1E1D,
3714 XK_b, XK_cedilla, XK_E, 0x1E1C,
3715 XK_b, XK_cedilla, XK_e, 0x1E1D,
3716 XK_b, XK_dead_cedilla, XK_E, 0x1E1C,
3717 XK_b, XK_dead_cedilla, XK_e, 0x1E1D,
3718 XK_b, XK_dead_belowdot, XK_A, 0x1EB6,
3719 XK_b, XK_dead_belowdot, XK_a, 0x1EB7,
3720 XK_c, XK_quotedbl, XK_U, 0x01D9,
3721 XK_c, XK_quotedbl, XK_u, 0x01DA,
3722 XK_c, XK_dead_diaeresis, XK_U, 0x01D9,
3723 XK_c, XK_dead_diaeresis, XK_u, 0x01DA,
3724 XK_o, XK_apostrophe, XK_A, 0x01FA,
3725 XK_o, XK_apostrophe, XK_a, 0x01FB,
3726 XK_asciitilde, XK_quotedbl, XK_Greek_iota, 0x1FD7,
3727 XK_asciitilde, XK_quotedbl, XK_Greek_upsilon, 0x1FE7,
3728 XK_asciitilde, XK_parenleft, XK_Greek_ALPHA, 0x1F0F,
3729 XK_asciitilde, XK_parenleft, XK_Greek_ETA, 0x1F2F,
3730 XK_asciitilde, XK_parenleft, XK_Greek_IOTA, 0x1F3F,
3731 XK_asciitilde, XK_parenleft, XK_Greek_UPSILON, 0x1F5F,
3732 XK_asciitilde, XK_parenleft, XK_Greek_OMEGA, 0x1F6F,
3733 XK_asciitilde, XK_parenleft, XK_Greek_alpha, 0x1F07,
3734 XK_asciitilde, XK_parenleft, XK_Greek_eta, 0x1F27,
3735 XK_asciitilde, XK_parenleft, XK_Greek_iota, 0x1F37,
3736 XK_asciitilde, XK_parenleft, XK_Greek_upsilon, 0x1F57,
3737 XK_asciitilde, XK_parenleft, XK_Greek_omega, 0x1F67,
3738 XK_asciitilde, XK_parenright, XK_Greek_ALPHA, 0x1F0E,
3739 XK_asciitilde, XK_parenright, XK_Greek_ETA, 0x1F2E,
3740 XK_asciitilde, XK_parenright, XK_Greek_IOTA, 0x1F3E,
3741 XK_asciitilde, XK_parenright, XK_Greek_OMEGA, 0x1F6E,
3742 XK_asciitilde, XK_parenright, XK_Greek_alpha, 0x1F06,
3743 XK_asciitilde, XK_parenright, XK_Greek_eta, 0x1F26,
3744 XK_asciitilde, XK_parenright, XK_Greek_iota, 0x1F36,
3745 XK_asciitilde, XK_parenright, XK_Greek_upsilon, 0x1F56,
3746 XK_asciitilde, XK_parenright, XK_Greek_omega, 0x1F66,
3747 XK_asciitilde, XK_plus, XK_O, 0x1EE0,
3748 XK_asciitilde, XK_plus, XK_U, 0x1EEE,
3749 XK_asciitilde, XK_plus, XK_o, 0x1EE1,
3750 XK_asciitilde, XK_plus, XK_u, 0x1EEF,
3751 XK_asciitilde, XK_asciicircum, XK_A, 0x1EAA,
3752 XK_asciitilde, XK_asciicircum, XK_E, 0x1EC4,
3753 XK_asciitilde, XK_asciicircum, XK_O, 0x1ED6,
3754 XK_asciitilde, XK_asciicircum, XK_a, 0x1EAB,
3755 XK_asciitilde, XK_asciicircum, XK_e, 0x1EC5,
3756 XK_asciitilde, XK_asciicircum, XK_o, 0x1ED7,
3757 XK_asciitilde, XK_b, XK_A, 0x1EB4,
3758 XK_asciitilde, XK_b, XK_a, 0x1EB5,
3759 XK_asciitilde, XK_dead_circumflex, XK_A, 0x1EAA,
3760 XK_asciitilde, XK_dead_circumflex, XK_E, 0x1EC4,
3761 XK_asciitilde, XK_dead_circumflex, XK_O, 0x1ED6,
3762 XK_asciitilde, XK_dead_circumflex, XK_a, 0x1EAB,
3763 XK_asciitilde, XK_dead_circumflex, XK_e, 0x1EC5,
3764 XK_asciitilde, XK_dead_circumflex, XK_o, 0x1ED7,
3765 XK_asciitilde, XK_dead_breve, XK_A, 0x1EB4,
3766 XK_asciitilde, XK_dead_breve, XK_a, 0x1EB5,
3767 XK_asciitilde, XK_dead_diaeresis, XK_Greek_iota, 0x1FD7,
3768 XK_asciitilde, XK_dead_diaeresis, XK_Greek_upsilon, 0x1FE7,
3769 XK_asciitilde, XK_dead_horn, XK_O, 0x1EE0,
3770 XK_asciitilde, XK_dead_horn, XK_U, 0x1EEE,
3771 XK_asciitilde, XK_dead_horn, XK_o, 0x1EE1,
3772 XK_asciitilde, XK_dead_horn, XK_u, 0x1EEF,
3773 XK_asciitilde, XK_dead_psili, XK_Greek_ALPHA, 0x1F0E,
3774 XK_asciitilde, XK_dead_psili, XK_Greek_ETA, 0x1F2E,
3775 XK_asciitilde, XK_dead_psili, XK_Greek_IOTA, 0x1F3E,
3776 XK_asciitilde, XK_dead_psili, XK_Greek_OMEGA, 0x1F6E,
3777 XK_asciitilde, XK_dead_psili, XK_Greek_alpha, 0x1F06,
3778 XK_asciitilde, XK_dead_psili, XK_Greek_eta, 0x1F26,
3779 XK_asciitilde, XK_dead_psili, XK_Greek_iota, 0x1F36,
3780 XK_asciitilde, XK_dead_psili, XK_Greek_upsilon, 0x1F56,
3781 XK_asciitilde, XK_dead_psili, XK_Greek_omega, 0x1F66,
3782 XK_asciitilde, XK_dead_dasia, XK_Greek_ALPHA, 0x1F0F,
3783 XK_asciitilde, XK_dead_dasia, XK_Greek_ETA, 0x1F2F,
3784 XK_asciitilde, XK_dead_dasia, XK_Greek_IOTA, 0x1F3F,
3785 XK_asciitilde, XK_dead_dasia, XK_Greek_UPSILON, 0x1F5F,
3786 XK_asciitilde, XK_dead_dasia, XK_Greek_OMEGA, 0x1F6F,
3787 XK_asciitilde, XK_dead_dasia, XK_Greek_alpha, 0x1F07,
3788 XK_asciitilde, XK_dead_dasia, XK_Greek_eta, 0x1F27,
3789 XK_asciitilde, XK_dead_dasia, XK_Greek_iota, 0x1F37,
3790 XK_asciitilde, XK_dead_dasia, XK_Greek_upsilon, 0x1F57,
3791 XK_asciitilde, XK_dead_dasia, XK_Greek_omega, 0x1F67,
3792 XK_macron, XK_exclam, XK_L, 0x1E38,
3793 XK_macron, XK_exclam, XK_R, 0x1E5C,
3794 XK_macron, XK_exclam, XK_l, 0x1E39,
3795 XK_macron, XK_exclam, XK_r, 0x1E5D,
3796 XK_macron, XK_quotedbl, XK_A, 0x01DE,
3797 XK_macron, XK_quotedbl, XK_O, 0x022A,
3798 XK_macron, XK_quotedbl, XK_U, 0x01D5,
3799 XK_macron, XK_quotedbl, XK_a, 0x01DF,
3800 XK_macron, XK_quotedbl, XK_o, 0x022B,
3801 XK_macron, XK_quotedbl, XK_u, 0x01D6,
3802 XK_macron, XK_period, XK_A, 0x01E0,
3803 XK_macron, XK_period, XK_O, 0x0230,
3804 XK_macron, XK_period, XK_a, 0x01E1,
3805 XK_macron, XK_period, XK_o, 0x0231,
3806 XK_macron, XK_semicolon, XK_O, 0x01EC,
3807 XK_macron, XK_semicolon, XK_o, 0x01ED,
3808 XK_macron, XK_asciitilde, XK_O, 0x022C,
3809 XK_macron, XK_asciitilde, XK_o, 0x022D,
3810 XK_macron, XK_dead_tilde, XK_O, 0x022C,
3811 XK_macron, XK_dead_tilde, XK_o, 0x022D,
3812 XK_macron, XK_dead_abovedot, XK_A, 0x01E0,
3813 XK_macron, XK_dead_abovedot, XK_O, 0x0230,
3814 XK_macron, XK_dead_abovedot, XK_a, 0x01E1,
3815 XK_macron, XK_dead_abovedot, XK_o, 0x0231,
3816 XK_macron, XK_dead_diaeresis, XK_A, 0x01DE,
3817 XK_macron, XK_dead_diaeresis, XK_O, 0x022A,
3818 XK_macron, XK_dead_diaeresis, XK_U, 0x01D5,
3819 XK_macron, XK_dead_diaeresis, XK_a, 0x01DF,
3820 XK_macron, XK_dead_diaeresis, XK_o, 0x022B,
3821 XK_macron, XK_dead_diaeresis, XK_u, 0x01D6,
3822 XK_macron, XK_dead_ogonek, XK_O, 0x01EC,
3823 XK_macron, XK_dead_ogonek, XK_o, 0x01ED,
3824 XK_macron, XK_dead_belowdot, XK_L, 0x1E38,
3825 XK_macron, XK_dead_belowdot, XK_R, 0x1E5C,
3826 XK_macron, XK_dead_belowdot, XK_l, 0x1E39,
3827 XK_macron, XK_dead_belowdot, XK_r, 0x1E5D,
3828 XK_acute, XK_quotedbl, XK_I, 0x1E2E,
3829 XK_acute, XK_quotedbl, XK_U, 0x01D7,
3830 XK_acute, XK_quotedbl, XK_i, 0x1E2F,
3831 XK_acute, XK_quotedbl, XK_u, 0x01D8,
3832 XK_acute, XK_quotedbl, XK_Greek_iota, 0x0390,
3833 XK_acute, XK_quotedbl, XK_Greek_upsilon, 0x03B0,
3834 XK_acute, XK_parenleft, XK_Greek_ALPHA, 0x1F0D,
3835 XK_acute, XK_parenleft, XK_Greek_EPSILON, 0x1F1D,
3836 XK_acute, XK_parenleft, XK_Greek_ETA, 0x1F2D,
3837 XK_acute, XK_parenleft, XK_Greek_IOTA, 0x1F3D,
3838 XK_acute, XK_parenleft, XK_Greek_OMICRON, 0x1F4D,
3839 XK_acute, XK_parenleft, XK_Greek_UPSILON, 0x1F5D,
3840 XK_acute, XK_parenleft, XK_Greek_OMEGA, 0x1F6D,
3841 XK_acute, XK_parenleft, XK_Greek_alpha, 0x1F05,
3842 XK_acute, XK_parenleft, XK_Greek_epsilon, 0x1F15,
3843 XK_acute, XK_parenleft, XK_Greek_eta, 0x1F25,
3844 XK_acute, XK_parenleft, XK_Greek_iota, 0x1F35,
3845 XK_acute, XK_parenleft, XK_Greek_omicron, 0x1F45,
3846 XK_acute, XK_parenleft, XK_Greek_upsilon, 0x1F55,
3847 XK_acute, XK_parenleft, XK_Greek_omega, 0x1F65,
3848 XK_acute, XK_parenright, XK_Greek_ALPHA, 0x1F0C,
3849 XK_acute, XK_parenright, XK_Greek_EPSILON, 0x1F1C,
3850 XK_acute, XK_parenright, XK_Greek_ETA, 0x1F2C,
3851 XK_acute, XK_parenright, XK_Greek_IOTA, 0x1F3C,
3852 XK_acute, XK_parenright, XK_Greek_OMICRON, 0x1F4C,
3853 XK_acute, XK_parenright, XK_Greek_OMEGA, 0x1F6C,
3854 XK_acute, XK_parenright, XK_Greek_alpha, 0x1F04,
3855 XK_acute, XK_parenright, XK_Greek_epsilon, 0x1F14,
3856 XK_acute, XK_parenright, XK_Greek_eta, 0x1F24,
3857 XK_acute, XK_parenright, XK_Greek_iota, 0x1F34,
3858 XK_acute, XK_parenright, XK_Greek_omicron, 0x1F44,
3859 XK_acute, XK_parenright, XK_Greek_upsilon, 0x1F54,
3860 XK_acute, XK_parenright, XK_Greek_omega, 0x1F64,
3861 XK_acute, XK_plus, XK_O, 0x1EDA,
3862 XK_acute, XK_plus, XK_U, 0x1EE8,
3863 XK_acute, XK_plus, XK_o, 0x1EDB,
3864 XK_acute, XK_plus, XK_u, 0x1EE9,
3865 XK_acute, XK_comma, XK_C, 0x1E08,
3866 XK_acute, XK_comma, XK_c, 0x1E09,
3867 XK_acute, XK_slash, XK_O, 0x01FE,
3868 XK_acute, XK_slash, XK_o, 0x01FF,
3869 XK_acute, XK_asciicircum, XK_A, 0x1EA4,
3870 XK_acute, XK_asciicircum, XK_E, 0x1EBE,
3871 XK_acute, XK_asciicircum, XK_O, 0x1ED0,
3872 XK_acute, XK_asciicircum, XK_a, 0x1EA5,
3873 XK_acute, XK_asciicircum, XK_e, 0x1EBF,
3874 XK_acute, XK_asciicircum, XK_o, 0x1ED1,
3875 XK_acute, XK_underscore, XK_E, 0x1E16,
3876 XK_acute, XK_underscore, XK_O, 0x1E52,
3877 XK_acute, XK_underscore, XK_e, 0x1E17,
3878 XK_acute, XK_underscore, XK_o, 0x1E53,
3879 XK_acute, XK_b, XK_A, 0x1EAE,
3880 XK_acute, XK_b, XK_a, 0x1EAF,
3881 XK_acute, XK_asciitilde, XK_O, 0x1E4C,
3882 XK_acute, XK_asciitilde, XK_U, 0x1E78,
3883 XK_acute, XK_asciitilde, XK_o, 0x1E4D,
3884 XK_acute, XK_asciitilde, XK_u, 0x1E79,
3885 XK_acute, XK_macron, XK_E, 0x1E16,
3886 XK_acute, XK_macron, XK_O, 0x1E52,
3887 XK_acute, XK_macron, XK_e, 0x1E17,
3888 XK_acute, XK_macron, XK_o, 0x1E53,
3889 XK_acute, XK_cedilla, XK_C, 0x1E08,
3890 XK_acute, XK_cedilla, XK_c, 0x1E09,
3891 XK_acute, XK_dead_circumflex, XK_A, 0x1EA4,
3892 XK_acute, XK_dead_circumflex, XK_E, 0x1EBE,
3893 XK_acute, XK_dead_circumflex, XK_O, 0x1ED0,
3894 XK_acute, XK_dead_circumflex, XK_a, 0x1EA5,
3895 XK_acute, XK_dead_circumflex, XK_e, 0x1EBF,
3896 XK_acute, XK_dead_circumflex, XK_o, 0x1ED1,
3897 XK_acute, XK_dead_tilde, XK_O, 0x1E4C,
3898 XK_acute, XK_dead_tilde, XK_U, 0x1E78,
3899 XK_acute, XK_dead_tilde, XK_o, 0x1E4D,
3900 XK_acute, XK_dead_tilde, XK_u, 0x1E79,
3901 XK_acute, XK_dead_macron, XK_E, 0x1E16,
3902 XK_acute, XK_dead_macron, XK_O, 0x1E52,
3903 XK_acute, XK_dead_macron, XK_e, 0x1E17,
3904 XK_acute, XK_dead_macron, XK_o, 0x1E53,
3905 XK_acute, XK_dead_breve, XK_A, 0x1EAE,
3906 XK_acute, XK_dead_breve, XK_a, 0x1EAF,
3907 XK_acute, XK_dead_diaeresis, XK_I, 0x1E2E,
3908 XK_acute, XK_dead_diaeresis, XK_U, 0x01D7,
3909 XK_acute, XK_dead_diaeresis, XK_i, 0x1E2F,
3910 XK_acute, XK_dead_diaeresis, XK_u, 0x01D8,
3911 XK_acute, XK_dead_diaeresis, XK_Greek_iota, 0x0390,
3912 XK_acute, XK_dead_diaeresis, XK_Greek_upsilon, 0x03B0,
3913 XK_acute, XK_dead_abovering, XK_A, 0x01FA,
3914 XK_acute, XK_dead_abovering, XK_a, 0x01FB,
3915 XK_acute, XK_dead_cedilla, XK_C, 0x1E08,
3916 XK_acute, XK_dead_cedilla, XK_c, 0x1E09,
3917 XK_acute, XK_dead_horn, XK_O, 0x1EDA,
3918 XK_acute, XK_dead_horn, XK_U, 0x1EE8,
3919 XK_acute, XK_dead_horn, XK_o, 0x1EDB,
3920 XK_acute, XK_dead_horn, XK_u, 0x1EE9,
3921 XK_acute, XK_dead_psili, XK_Greek_ALPHA, 0x1F0C,
3922 XK_acute, XK_dead_psili, XK_Greek_EPSILON, 0x1F1C,
3923 XK_acute, XK_dead_psili, XK_Greek_ETA, 0x1F2C,
3924 XK_acute, XK_dead_psili, XK_Greek_IOTA, 0x1F3C,
3925 XK_acute, XK_dead_psili, XK_Greek_OMICRON, 0x1F4C,
3926 XK_acute, XK_dead_psili, XK_Greek_OMEGA, 0x1F6C,
3927 XK_acute, XK_dead_psili, XK_Greek_alpha, 0x1F04,
3928 XK_acute, XK_dead_psili, XK_Greek_epsilon, 0x1F14,
3929 XK_acute, XK_dead_psili, XK_Greek_eta, 0x1F24,
3930 XK_acute, XK_dead_psili, XK_Greek_iota, 0x1F34,
3931 XK_acute, XK_dead_psili, XK_Greek_omicron, 0x1F44,
3932 XK_acute, XK_dead_psili, XK_Greek_upsilon, 0x1F54,
3933 XK_acute, XK_dead_psili, XK_Greek_omega, 0x1F64,
3934 XK_acute, XK_dead_dasia, XK_Greek_ALPHA, 0x1F0D,
3935 XK_acute, XK_dead_dasia, XK_Greek_EPSILON, 0x1F1D,
3936 XK_acute, XK_dead_dasia, XK_Greek_ETA, 0x1F2D,
3937 XK_acute, XK_dead_dasia, XK_Greek_IOTA, 0x1F3D,
3938 XK_acute, XK_dead_dasia, XK_Greek_OMICRON, 0x1F4D,
3939 XK_acute, XK_dead_dasia, XK_Greek_UPSILON, 0x1F5D,
3940 XK_acute, XK_dead_dasia, XK_Greek_OMEGA, 0x1F6D,
3941 XK_acute, XK_dead_dasia, XK_Greek_alpha, 0x1F05,
3942 XK_acute, XK_dead_dasia, XK_Greek_epsilon, 0x1F15,
3943 XK_acute, XK_dead_dasia, XK_Greek_eta, 0x1F25,
3944 XK_acute, XK_dead_dasia, XK_Greek_iota, 0x1F35,
3945 XK_acute, XK_dead_dasia, XK_Greek_omicron, 0x1F45,
3946 XK_acute, XK_dead_dasia, XK_Greek_upsilon, 0x1F55,
3947 XK_acute, XK_dead_dasia, XK_Greek_omega, 0x1F65,
3948 XK_acute, XK_KP_Divide, XK_O, 0x01FE,
3949 XK_acute, XK_KP_Divide, XK_o, 0x01FF,
3950 0x05C1, 0x05BC, XK_hebrew_shin, 0xFB2C,
3951 0x05C2, 0x05BC, XK_hebrew_shin, 0xFB2D,
3952 XK_Greek_iota, XK_apostrophe, XK_Greek_alpha, 0x1FB4,
3953 XK_Greek_iota, XK_apostrophe, XK_Greek_eta, 0x1FC4,
3954 XK_Greek_iota, XK_apostrophe, XK_Greek_omega, 0x1FF4,
3955 XK_Greek_iota, XK_apostrophe, 0x1F00, 0x1F84,
3956 XK_Greek_iota, XK_apostrophe, 0x1F01, 0x1F85,
3957 XK_Greek_iota, XK_apostrophe, 0x1F08, 0x1F8C,
3958 XK_Greek_iota, XK_apostrophe, 0x1F09, 0x1F8D,
3959 XK_Greek_iota, XK_apostrophe, 0x1F20, 0x1F94,
3960 XK_Greek_iota, XK_apostrophe, 0x1F21, 0x1F95,
3961 XK_Greek_iota, XK_apostrophe, 0x1F28, 0x1F9C,
3962 XK_Greek_iota, XK_apostrophe, 0x1F29, 0x1F9D,
3963 XK_Greek_iota, XK_apostrophe, 0x1F60, 0x1FA4,
3964 XK_Greek_iota, XK_apostrophe, 0x1F61, 0x1FA5,
3965 XK_Greek_iota, XK_apostrophe, 0x1F68, 0x1FAC,
3966 XK_Greek_iota, XK_apostrophe, 0x1F69, 0x1FAD,
3967 XK_Greek_iota, XK_parenleft, XK_Greek_ALPHA, 0x1F89,
3968 XK_Greek_iota, XK_parenleft, XK_Greek_ETA, 0x1F99,
3969 XK_Greek_iota, XK_parenleft, XK_Greek_OMEGA, 0x1FA9,
3970 XK_Greek_iota, XK_parenleft, XK_Greek_alpha, 0x1F81,
3971 XK_Greek_iota, XK_parenleft, XK_Greek_eta, 0x1F91,
3972 XK_Greek_iota, XK_parenleft, XK_Greek_omega, 0x1FA1,
3973 XK_Greek_iota, XK_parenright, XK_Greek_ALPHA, 0x1F88,
3974 XK_Greek_iota, XK_parenright, XK_Greek_ETA, 0x1F98,
3975 XK_Greek_iota, XK_parenright, XK_Greek_OMEGA, 0x1FA8,
3976 XK_Greek_iota, XK_parenright, XK_Greek_alpha, 0x1F80,
3977 XK_Greek_iota, XK_parenright, XK_Greek_eta, 0x1F90,
3978 XK_Greek_iota, XK_parenright, XK_Greek_omega, 0x1FA0,
3979 XK_Greek_iota, XK_grave, XK_Greek_alpha, 0x1FB2,
3980 XK_Greek_iota, XK_grave, XK_Greek_eta, 0x1FC2,
3981 XK_Greek_iota, XK_grave, XK_Greek_omega, 0x1FF2,
3982 XK_Greek_iota, XK_grave, 0x1F00, 0x1F82,
3983 XK_Greek_iota, XK_grave, 0x1F01, 0x1F83,
3984 XK_Greek_iota, XK_grave, 0x1F08, 0x1F8A,
3985 XK_Greek_iota, XK_grave, 0x1F09, 0x1F8B,
3986 XK_Greek_iota, XK_grave, 0x1F20, 0x1F92,
3987 XK_Greek_iota, XK_grave, 0x1F21, 0x1F93,
3988 XK_Greek_iota, XK_grave, 0x1F28, 0x1F9A,
3989 XK_Greek_iota, XK_grave, 0x1F29, 0x1F9B,
3990 XK_Greek_iota, XK_grave, 0x1F60, 0x1FA2,
3991 XK_Greek_iota, XK_grave, 0x1F61, 0x1FA3,
3992 XK_Greek_iota, XK_grave, 0x1F68, 0x1FAA,
3993 XK_Greek_iota, XK_grave, 0x1F69, 0x1FAB,
3994 XK_Greek_iota, XK_asciitilde, XK_Greek_alpha, 0x1FB7,
3995 XK_Greek_iota, XK_asciitilde, XK_Greek_eta, 0x1FC7,
3996 XK_Greek_iota, XK_asciitilde, XK_Greek_omega, 0x1FF7,
3997 XK_Greek_iota, XK_asciitilde, 0x1F00, 0x1F86,
3998 XK_Greek_iota, XK_asciitilde, 0x1F01, 0x1F87,
3999 XK_Greek_iota, XK_asciitilde, 0x1F08, 0x1F8E,
4000 XK_Greek_iota, XK_asciitilde, 0x1F09, 0x1F8F,
4001 XK_Greek_iota, XK_asciitilde, 0x1F20, 0x1F96,
4002 XK_Greek_iota, XK_asciitilde, 0x1F21, 0x1F97,
4003 XK_Greek_iota, XK_asciitilde, 0x1F28, 0x1F9E,
4004 XK_Greek_iota, XK_asciitilde, 0x1F29, 0x1F9F,
4005 XK_Greek_iota, XK_asciitilde, 0x1F60, 0x1FA6,
4006 XK_Greek_iota, XK_asciitilde, 0x1F61, 0x1FA7,
4007 XK_Greek_iota, XK_asciitilde, 0x1F68, 0x1FAE,
4008 XK_Greek_iota, XK_asciitilde, 0x1F69, 0x1FAF,
4009 XK_Greek_iota, XK_acute, XK_Greek_alpha, 0x1FB4,
4010 XK_Greek_iota, XK_acute, XK_Greek_eta, 0x1FC4,
4011 XK_Greek_iota, XK_acute, XK_Greek_omega, 0x1FF4,
4012 XK_Greek_iota, XK_acute, 0x1F00, 0x1F84,
4013 XK_Greek_iota, XK_acute, 0x1F01, 0x1F85,
4014 XK_Greek_iota, XK_acute, 0x1F08, 0x1F8C,
4015 XK_Greek_iota, XK_acute, 0x1F09, 0x1F8D,
4016 XK_Greek_iota, XK_acute, 0x1F20, 0x1F94,
4017 XK_Greek_iota, XK_acute, 0x1F21, 0x1F95,
4018 XK_Greek_iota, XK_acute, 0x1F28, 0x1F9C,
4019 XK_Greek_iota, XK_acute, 0x1F29, 0x1F9D,
4020 XK_Greek_iota, XK_acute, 0x1F60, 0x1FA4,
4021 XK_Greek_iota, XK_acute, 0x1F61, 0x1FA5,
4022 XK_Greek_iota, XK_acute, 0x1F68, 0x1FAC,
4023 XK_Greek_iota, XK_acute, 0x1F69, 0x1FAD,
4024 XK_Greek_iota, XK_dead_grave, XK_Greek_alpha, 0x1FB2,
4025 XK_Greek_iota, XK_dead_grave, XK_Greek_eta, 0x1FC2,
4026 XK_Greek_iota, XK_dead_grave, XK_Greek_omega, 0x1FF2,
4027 XK_Greek_iota, XK_dead_grave, 0x1F00, 0x1F82,
4028 XK_Greek_iota, XK_dead_grave, 0x1F01, 0x1F83,
4029 XK_Greek_iota, XK_dead_grave, 0x1F08, 0x1F8A,
4030 XK_Greek_iota, XK_dead_grave, 0x1F09, 0x1F8B,
4031 XK_Greek_iota, XK_dead_grave, 0x1F20, 0x1F92,
4032 XK_Greek_iota, XK_dead_grave, 0x1F21, 0x1F93,
4033 XK_Greek_iota, XK_dead_grave, 0x1F28, 0x1F9A,
4034 XK_Greek_iota, XK_dead_grave, 0x1F29, 0x1F9B,
4035 XK_Greek_iota, XK_dead_grave, 0x1F60, 0x1FA2,
4036 XK_Greek_iota, XK_dead_grave, 0x1F61, 0x1FA3,
4037 XK_Greek_iota, XK_dead_grave, 0x1F68, 0x1FAA,
4038 XK_Greek_iota, XK_dead_grave, 0x1F69, 0x1FAB,
4039 XK_Greek_iota, XK_dead_acute, XK_Greek_alpha, 0x1FB4,
4040 XK_Greek_iota, XK_dead_acute, XK_Greek_eta, 0x1FC4,
4041 XK_Greek_iota, XK_dead_acute, XK_Greek_omega, 0x1FF4,
4042 XK_Greek_iota, XK_dead_acute, 0x1F00, 0x1F84,
4043 XK_Greek_iota, XK_dead_acute, 0x1F01, 0x1F85,
4044 XK_Greek_iota, XK_dead_acute, 0x1F08, 0x1F8C,
4045 XK_Greek_iota, XK_dead_acute, 0x1F09, 0x1F8D,
4046 XK_Greek_iota, XK_dead_acute, 0x1F20, 0x1F94,
4047 XK_Greek_iota, XK_dead_acute, 0x1F21, 0x1F95,
4048 XK_Greek_iota, XK_dead_acute, 0x1F28, 0x1F9C,
4049 XK_Greek_iota, XK_dead_acute, 0x1F29, 0x1F9D,
4050 XK_Greek_iota, XK_dead_acute, 0x1F60, 0x1FA4,
4051 XK_Greek_iota, XK_dead_acute, 0x1F61, 0x1FA5,
4052 XK_Greek_iota, XK_dead_acute, 0x1F68, 0x1FAC,
4053 XK_Greek_iota, XK_dead_acute, 0x1F69, 0x1FAD,
4054 XK_Greek_iota, XK_dead_tilde, XK_Greek_alpha, 0x1FB7,
4055 XK_Greek_iota, XK_dead_tilde, XK_Greek_eta, 0x1FC7,
4056 XK_Greek_iota, XK_dead_tilde, XK_Greek_omega, 0x1FF7,
4057 XK_Greek_iota, XK_dead_tilde, 0x1F00, 0x1F86,
4058 XK_Greek_iota, XK_dead_tilde, 0x1F01, 0x1F87,
4059 XK_Greek_iota, XK_dead_tilde, 0x1F08, 0x1F8E,
4060 XK_Greek_iota, XK_dead_tilde, 0x1F09, 0x1F8F,
4061 XK_Greek_iota, XK_dead_tilde, 0x1F20, 0x1F96,
4062 XK_Greek_iota, XK_dead_tilde, 0x1F21, 0x1F97,
4063 XK_Greek_iota, XK_dead_tilde, 0x1F28, 0x1F9E,
4064 XK_Greek_iota, XK_dead_tilde, 0x1F29, 0x1F9F,
4065 XK_Greek_iota, XK_dead_tilde, 0x1F60, 0x1FA6,
4066 XK_Greek_iota, XK_dead_tilde, 0x1F61, 0x1FA7,
4067 XK_Greek_iota, XK_dead_tilde, 0x1F68, 0x1FAE,
4068 XK_Greek_iota, XK_dead_tilde, 0x1F69, 0x1FAF,
4069 XK_Greek_iota, XK_dead_psili, XK_Greek_ALPHA, 0x1F88,
4070 XK_Greek_iota, XK_dead_psili, XK_Greek_ETA, 0x1F98,
4071 XK_Greek_iota, XK_dead_psili, XK_Greek_OMEGA, 0x1FA8,
4072 XK_Greek_iota, XK_dead_psili, XK_Greek_alpha, 0x1F80,
4073 XK_Greek_iota, XK_dead_psili, XK_Greek_eta, 0x1F90,
4074 XK_Greek_iota, XK_dead_psili, XK_Greek_omega, 0x1FA0,
4075 XK_Greek_iota, XK_dead_dasia, XK_Greek_ALPHA, 0x1F89,
4076 XK_Greek_iota, XK_dead_dasia, XK_Greek_ETA, 0x1F99,
4077 XK_Greek_iota, XK_dead_dasia, XK_Greek_OMEGA, 0x1FA9,
4078 XK_Greek_iota, XK_dead_dasia, XK_Greek_alpha, 0x1F81,
4079 XK_Greek_iota, XK_dead_dasia, XK_Greek_eta, 0x1F91,
4080 XK_Greek_iota, XK_dead_dasia, XK_Greek_omega, 0x1FA1,
4081 XK_parenleft, XK_1, XK_0, XK_parenright, 0x2469,
4082 XK_parenleft, XK_1, XK_1, XK_parenright, 0x246A,
4083 XK_parenleft, XK_1, XK_2, XK_parenright, 0x246B,
4084 XK_parenleft, XK_1, XK_3, XK_parenright, 0x246C,
4085 XK_parenleft, XK_1, XK_4, XK_parenright, 0x246D,
4086 XK_parenleft, XK_1, XK_5, XK_parenright, 0x246E,
4087 XK_parenleft, XK_1, XK_6, XK_parenright, 0x246F,
4088 XK_parenleft, XK_1, XK_7, XK_parenright, 0x2470,
4089 XK_parenleft, XK_1, XK_8, XK_parenright, 0x2471,
4090 XK_parenleft, XK_1, XK_9, XK_parenright, 0x2472,
4091 XK_parenleft, XK_1, XK_KP_Space, XK_parenright, 0x246B,
4092 XK_parenleft, XK_1, XK_KP_0, XK_parenright, 0x2469,
4093 XK_parenleft, XK_1, XK_KP_1, XK_parenright, 0x246A,
4094 XK_parenleft, XK_1, XK_KP_2, XK_parenright, 0x246B,
4095 XK_parenleft, XK_1, XK_KP_3, XK_parenright, 0x246C,
4096 XK_parenleft, XK_1, XK_KP_4, XK_parenright, 0x246D,
4097 XK_parenleft, XK_1, XK_KP_5, XK_parenright, 0x246E,
4098 XK_parenleft, XK_1, XK_KP_6, XK_parenright, 0x246F,
4099 XK_parenleft, XK_1, XK_KP_7, XK_parenright, 0x2470,
4100 XK_parenleft, XK_1, XK_KP_8, XK_parenright, 0x2471,
4101 XK_parenleft, XK_1, XK_KP_9, XK_parenright, 0x2472,
4102 XK_parenleft, XK_2, XK_0, XK_parenright, 0x2473,
4103 XK_parenleft, XK_2, XK_1, XK_parenright, 0x3251,
4104 XK_parenleft, XK_2, XK_2, XK_parenright, 0x3252,
4105 XK_parenleft, XK_2, XK_3, XK_parenright, 0x3253,
4106 XK_parenleft, XK_2, XK_4, XK_parenright, 0x3254,
4107 XK_parenleft, XK_2, XK_5, XK_parenright, 0x3255,
4108 XK_parenleft, XK_2, XK_6, XK_parenright, 0x3256,
4109 XK_parenleft, XK_2, XK_7, XK_parenright, 0x3257,
4110 XK_parenleft, XK_2, XK_8, XK_parenright, 0x3258,
4111 XK_parenleft, XK_2, XK_9, XK_parenright, 0x3259,
4112 XK_parenleft, XK_2, XK_KP_Space, XK_parenright, 0x3252,
4113 XK_parenleft, XK_2, XK_KP_0, XK_parenright, 0x2473,
4114 XK_parenleft, XK_2, XK_KP_1, XK_parenright, 0x3251,
4115 XK_parenleft, XK_2, XK_KP_2, XK_parenright, 0x3252,
4116 XK_parenleft, XK_2, XK_KP_3, XK_parenright, 0x3253,
4117 XK_parenleft, XK_2, XK_KP_4, XK_parenright, 0x3254,
4118 XK_parenleft, XK_2, XK_KP_5, XK_parenright, 0x3255,
4119 XK_parenleft, XK_2, XK_KP_6, XK_parenright, 0x3256,
4120 XK_parenleft, XK_2, XK_KP_7, XK_parenright, 0x3257,
4121 XK_parenleft, XK_2, XK_KP_8, XK_parenright, 0x3258,
4122 XK_parenleft, XK_2, XK_KP_9, XK_parenright, 0x3259,
4123 XK_parenleft, XK_3, XK_0, XK_parenright, 0x325A,
4124 XK_parenleft, XK_3, XK_1, XK_parenright, 0x325B,
4125 XK_parenleft, XK_3, XK_2, XK_parenright, 0x325C,
4126 XK_parenleft, XK_3, XK_3, XK_parenright, 0x325D,
4127 XK_parenleft, XK_3, XK_4, XK_parenright, 0x325E,
4128 XK_parenleft, XK_3, XK_5, XK_parenright, 0x325F,
4129 XK_parenleft, XK_3, XK_6, XK_parenright, 0x32B1,
4130 XK_parenleft, XK_3, XK_7, XK_parenright, 0x32B2,
4131 XK_parenleft, XK_3, XK_8, XK_parenright, 0x32B3,
4132 XK_parenleft, XK_3, XK_9, XK_parenright, 0x32B4,
4133 XK_parenleft, XK_3, XK_KP_Space, XK_parenright, 0x325C,
4134 XK_parenleft, XK_3, XK_KP_0, XK_parenright, 0x325A,
4135 XK_parenleft, XK_3, XK_KP_1, XK_parenright, 0x325B,
4136 XK_parenleft, XK_3, XK_KP_2, XK_parenright, 0x325C,
4137 XK_parenleft, XK_3, XK_KP_3, XK_parenright, 0x325D,
4138 XK_parenleft, XK_3, XK_KP_4, XK_parenright, 0x325E,
4139 XK_parenleft, XK_3, XK_KP_5, XK_parenright, 0x325F,
4140 XK_parenleft, XK_3, XK_KP_6, XK_parenright, 0x32B1,
4141 XK_parenleft, XK_3, XK_KP_7, XK_parenright, 0x32B2,
4142 XK_parenleft, XK_3, XK_KP_8, XK_parenright, 0x32B3,
4143 XK_parenleft, XK_3, XK_KP_9, XK_parenright, 0x32B4,
4144 XK_parenleft, XK_4, XK_0, XK_parenright, 0x32B5,
4145 XK_parenleft, XK_4, XK_1, XK_parenright, 0x32B6,
4146 XK_parenleft, XK_4, XK_2, XK_parenright, 0x32B7,
4147 XK_parenleft, XK_4, XK_3, XK_parenright, 0x32B8,
4148 XK_parenleft, XK_4, XK_4, XK_parenright, 0x32B9,
4149 XK_parenleft, XK_4, XK_5, XK_parenright, 0x32BA,
4150 XK_parenleft, XK_4, XK_6, XK_parenright, 0x32BB,
4151 XK_parenleft, XK_4, XK_7, XK_parenright, 0x32BC,
4152 XK_parenleft, XK_4, XK_8, XK_parenright, 0x32BD,
4153 XK_parenleft, XK_4, XK_9, XK_parenright, 0x32BE,
4154 XK_parenleft, XK_4, XK_KP_Space, XK_parenright, 0x32B7,
4155 XK_parenleft, XK_4, XK_KP_0, XK_parenright, 0x32B5,
4156 XK_parenleft, XK_4, XK_KP_1, XK_parenright, 0x32B6,
4157 XK_parenleft, XK_4, XK_KP_2, XK_parenright, 0x32B7,
4158 XK_parenleft, XK_4, XK_KP_3, XK_parenright, 0x32B8,
4159 XK_parenleft, XK_4, XK_KP_4, XK_parenright, 0x32B9,
4160 XK_parenleft, XK_4, XK_KP_5, XK_parenright, 0x32BA,
4161 XK_parenleft, XK_4, XK_KP_6, XK_parenright, 0x32BB,
4162 XK_parenleft, XK_4, XK_KP_7, XK_parenright, 0x32BC,
4163 XK_parenleft, XK_4, XK_KP_8, XK_parenright, 0x32BD,
4164 XK_parenleft, XK_4, XK_KP_9, XK_parenright, 0x32BE,
4165 XK_parenleft, XK_5, XK_KP_0, XK_parenright, 0x32BF,
4166 XK_parenleft, 0x1100, 0x1161, XK_parenright, 0x326E,
4167 XK_parenleft, 0x1102, 0x1161, XK_parenright, 0x326F,
4168 XK_parenleft, 0x1103, 0x1161, XK_parenright, 0x3270,
4169 XK_parenleft, 0x1105, 0x1161, XK_parenright, 0x3271,
4170 XK_parenleft, 0x1106, 0x1161, XK_parenright, 0x3272,
4171 XK_parenleft, 0x1107, 0x1161, XK_parenright, 0x3273,
4172 XK_parenleft, 0x1109, 0x1161, XK_parenright, 0x3274,
4173 XK_parenleft, 0x110B, 0x1161, XK_parenright, 0x3275,
4174 XK_parenleft, 0x110C, 0x1161, XK_parenright, 0x3276,
4175 XK_parenleft, 0x110E, 0x1161, XK_parenright, 0x3277,
4176 XK_parenleft, 0x110F, 0x1161, XK_parenright, 0x3278,
4177 XK_parenleft, 0x1110, 0x1161, XK_parenright, 0x3279,
4178 XK_parenleft, 0x1111, 0x1161, XK_parenright, 0x327A,
4179 XK_parenleft, 0x1112, 0x1161, XK_parenright, 0x327B,
4180 XK_parenleft, XK_KP_Space, XK_0, XK_parenright, 0x2473,
4181 XK_parenleft, XK_KP_Space, XK_1, XK_parenright, 0x3251,
4182 XK_parenleft, XK_KP_Space, XK_2, XK_parenright, 0x3252,
4183 XK_parenleft, XK_KP_Space, XK_3, XK_parenright, 0x3253,
4184 XK_parenleft, XK_KP_Space, XK_4, XK_parenright, 0x3254,
4185 XK_parenleft, XK_KP_Space, XK_5, XK_parenright, 0x3255,
4186 XK_parenleft, XK_KP_Space, XK_6, XK_parenright, 0x3256,
4187 XK_parenleft, XK_KP_Space, XK_7, XK_parenright, 0x3257,
4188 XK_parenleft, XK_KP_Space, XK_8, XK_parenright, 0x3258,
4189 XK_parenleft, XK_KP_Space, XK_9, XK_parenright, 0x3259,
4190 XK_parenleft, XK_KP_Space, XK_KP_Space, XK_parenright, 0x3252,
4191 XK_parenleft, XK_KP_Space, XK_KP_0, XK_parenright, 0x2473,
4192 XK_parenleft, XK_KP_Space, XK_KP_1, XK_parenright, 0x3251,
4193 XK_parenleft, XK_KP_Space, XK_KP_2, XK_parenright, 0x3252,
4194 XK_parenleft, XK_KP_Space, XK_KP_3, XK_parenright, 0x3253,
4195 XK_parenleft, XK_KP_Space, XK_KP_4, XK_parenright, 0x3254,
4196 XK_parenleft, XK_KP_Space, XK_KP_5, XK_parenright, 0x3255,
4197 XK_parenleft, XK_KP_Space, XK_KP_6, XK_parenright, 0x3256,
4198 XK_parenleft, XK_KP_Space, XK_KP_7, XK_parenright, 0x3257,
4199 XK_parenleft, XK_KP_Space, XK_KP_8, XK_parenright, 0x3258,
4200 XK_parenleft, XK_KP_Space, XK_KP_9, XK_parenright, 0x3259,
4201 XK_parenleft, XK_KP_1, XK_0, XK_parenright, 0x2469,
4202 XK_parenleft, XK_KP_1, XK_1, XK_parenright, 0x246A,
4203 XK_parenleft, XK_KP_1, XK_2, XK_parenright, 0x246B,
4204 XK_parenleft, XK_KP_1, XK_3, XK_parenright, 0x246C,
4205 XK_parenleft, XK_KP_1, XK_4, XK_parenright, 0x246D,
4206 XK_parenleft, XK_KP_1, XK_5, XK_parenright, 0x246E,
4207 XK_parenleft, XK_KP_1, XK_6, XK_parenright, 0x246F,
4208 XK_parenleft, XK_KP_1, XK_7, XK_parenright, 0x2470,
4209 XK_parenleft, XK_KP_1, XK_8, XK_parenright, 0x2471,
4210 XK_parenleft, XK_KP_1, XK_9, XK_parenright, 0x2472,
4211 XK_parenleft, XK_KP_1, XK_KP_Space, XK_parenright, 0x246B,
4212 XK_parenleft, XK_KP_1, XK_KP_0, XK_parenright, 0x2469,
4213 XK_parenleft, XK_KP_1, XK_KP_1, XK_parenright, 0x246A,
4214 XK_parenleft, XK_KP_1, XK_KP_2, XK_parenright, 0x246B,
4215 XK_parenleft, XK_KP_1, XK_KP_3, XK_parenright, 0x246C,
4216 XK_parenleft, XK_KP_1, XK_KP_4, XK_parenright, 0x246D,
4217 XK_parenleft, XK_KP_1, XK_KP_5, XK_parenright, 0x246E,
4218 XK_parenleft, XK_KP_1, XK_KP_6, XK_parenright, 0x246F,
4219 XK_parenleft, XK_KP_1, XK_KP_7, XK_parenright, 0x2470,
4220 XK_parenleft, XK_KP_1, XK_KP_8, XK_parenright, 0x2471,
4221 XK_parenleft, XK_KP_1, XK_KP_9, XK_parenright, 0x2472,
4222 XK_parenleft, XK_KP_2, XK_0, XK_parenright, 0x2473,
4223 XK_parenleft, XK_KP_2, XK_1, XK_parenright, 0x3251,
4224 XK_parenleft, XK_KP_2, XK_2, XK_parenright, 0x3252,
4225 XK_parenleft, XK_KP_2, XK_3, XK_parenright, 0x3253,
4226 XK_parenleft, XK_KP_2, XK_4, XK_parenright, 0x3254,
4227 XK_parenleft, XK_KP_2, XK_5, XK_parenright, 0x3255,
4228 XK_parenleft, XK_KP_2, XK_6, XK_parenright, 0x3256,
4229 XK_parenleft, XK_KP_2, XK_7, XK_parenright, 0x3257,
4230 XK_parenleft, XK_KP_2, XK_8, XK_parenright, 0x3258,
4231 XK_parenleft, XK_KP_2, XK_9, XK_parenright, 0x3259,
4232 XK_parenleft, XK_KP_2, XK_KP_Space, XK_parenright, 0x3252,
4233 XK_parenleft, XK_KP_2, XK_KP_0, XK_parenright, 0x2473,
4234 XK_parenleft, XK_KP_2, XK_KP_1, XK_parenright, 0x3251,
4235 XK_parenleft, XK_KP_2, XK_KP_2, XK_parenright, 0x3252,
4236 XK_parenleft, XK_KP_2, XK_KP_3, XK_parenright, 0x3253,
4237 XK_parenleft, XK_KP_2, XK_KP_4, XK_parenright, 0x3254,
4238 XK_parenleft, XK_KP_2, XK_KP_5, XK_parenright, 0x3255,
4239 XK_parenleft, XK_KP_2, XK_KP_6, XK_parenright, 0x3256,
4240 XK_parenleft, XK_KP_2, XK_KP_7, XK_parenright, 0x3257,
4241 XK_parenleft, XK_KP_2, XK_KP_8, XK_parenright, 0x3258,
4242 XK_parenleft, XK_KP_2, XK_KP_9, XK_parenright, 0x3259,
4243 XK_parenleft, XK_KP_3, XK_0, XK_parenright, 0x325A,
4244 XK_parenleft, XK_KP_3, XK_1, XK_parenright, 0x325B,
4245 XK_parenleft, XK_KP_3, XK_2, XK_parenright, 0x325C,
4246 XK_parenleft, XK_KP_3, XK_3, XK_parenright, 0x325D,
4247 XK_parenleft, XK_KP_3, XK_4, XK_parenright, 0x325E,
4248 XK_parenleft, XK_KP_3, XK_5, XK_parenright, 0x325F,
4249 XK_parenleft, XK_KP_3, XK_6, XK_parenright, 0x32B1,
4250 XK_parenleft, XK_KP_3, XK_7, XK_parenright, 0x32B2,
4251 XK_parenleft, XK_KP_3, XK_8, XK_parenright, 0x32B3,
4252 XK_parenleft, XK_KP_3, XK_9, XK_parenright, 0x32B4,
4253 XK_parenleft, XK_KP_3, XK_KP_Space, XK_parenright, 0x325C,
4254 XK_parenleft, XK_KP_3, XK_KP_0, XK_parenright, 0x325A,
4255 XK_parenleft, XK_KP_3, XK_KP_1, XK_parenright, 0x325B,
4256 XK_parenleft, XK_KP_3, XK_KP_2, XK_parenright, 0x325C,
4257 XK_parenleft, XK_KP_3, XK_KP_3, XK_parenright, 0x325D,
4258 XK_parenleft, XK_KP_3, XK_KP_4, XK_parenright, 0x325E,
4259 XK_parenleft, XK_KP_3, XK_KP_5, XK_parenright, 0x325F,
4260 XK_parenleft, XK_KP_3, XK_KP_6, XK_parenright, 0x32B1,
4261 XK_parenleft, XK_KP_3, XK_KP_7, XK_parenright, 0x32B2,
4262 XK_parenleft, XK_KP_3, XK_KP_8, XK_parenright, 0x32B3,
4263 XK_parenleft, XK_KP_3, XK_KP_9, XK_parenright, 0x32B4,
4264 XK_parenleft, XK_KP_4, XK_0, XK_parenright, 0x32B5,
4265 XK_parenleft, XK_KP_4, XK_1, XK_parenright, 0x32B6,
4266 XK_parenleft, XK_KP_4, XK_2, XK_parenright, 0x32B7,
4267 XK_parenleft, XK_KP_4, XK_3, XK_parenright, 0x32B8,
4268 XK_parenleft, XK_KP_4, XK_4, XK_parenright, 0x32B9,
4269 XK_parenleft, XK_KP_4, XK_5, XK_parenright, 0x32BA,
4270 XK_parenleft, XK_KP_4, XK_6, XK_parenright, 0x32BB,
4271 XK_parenleft, XK_KP_4, XK_7, XK_parenright, 0x32BC,
4272 XK_parenleft, XK_KP_4, XK_8, XK_parenright, 0x32BD,
4273 XK_parenleft, XK_KP_4, XK_9, XK_parenright, 0x32BE,
4274 XK_parenleft, XK_KP_4, XK_KP_Space, XK_parenright, 0x32B7,
4275 XK_parenleft, XK_KP_4, XK_KP_0, XK_parenright, 0x32B5,
4276 XK_parenleft, XK_KP_4, XK_KP_1, XK_parenright, 0x32B6,
4277 XK_parenleft, XK_KP_4, XK_KP_2, XK_parenright, 0x32B7,
4278 XK_parenleft, XK_KP_4, XK_KP_3, XK_parenright, 0x32B8,
4279 XK_parenleft, XK_KP_4, XK_KP_4, XK_parenright, 0x32B9,
4280 XK_parenleft, XK_KP_4, XK_KP_5, XK_parenright, 0x32BA,
4281 XK_parenleft, XK_KP_4, XK_KP_6, XK_parenright, 0x32BB,
4282 XK_parenleft, XK_KP_4, XK_KP_7, XK_parenright, 0x32BC,
4283 XK_parenleft, XK_KP_4, XK_KP_8, XK_parenright, 0x32BD,
4284 XK_parenleft, XK_KP_4, XK_KP_9, XK_parenright, 0x32BE,
4285 XK_parenleft, XK_KP_5, XK_KP_0, XK_parenright, 0x32BF,
4286 XK_Greek_iota, XK_apostrophe, XK_parenleft, XK_Greek_ALPHA, 0x1F8D,
4287 XK_Greek_iota, XK_apostrophe, XK_parenleft, XK_Greek_ETA, 0x1F9D,
4288 XK_Greek_iota, XK_apostrophe, XK_parenleft, XK_Greek_OMEGA, 0x1FAD,
4289 XK_Greek_iota, XK_apostrophe, XK_parenleft, XK_Greek_alpha, 0x1F85,
4290 XK_Greek_iota, XK_apostrophe, XK_parenleft, XK_Greek_eta, 0x1F95,
4291 XK_Greek_iota, XK_apostrophe, XK_parenleft, XK_Greek_omega, 0x1FA5,
4292 XK_Greek_iota, XK_apostrophe, XK_parenright, XK_Greek_ALPHA, 0x1F8C,
4293 XK_Greek_iota, XK_apostrophe, XK_parenright, XK_Greek_ETA, 0x1F9C,
4294 XK_Greek_iota, XK_apostrophe, XK_parenright, XK_Greek_OMEGA, 0x1FAC,
4295 XK_Greek_iota, XK_apostrophe, XK_parenright, XK_Greek_alpha, 0x1F84,
4296 XK_Greek_iota, XK_apostrophe, XK_parenright, XK_Greek_eta, 0x1F94,
4297 XK_Greek_iota, XK_apostrophe, XK_parenright, XK_Greek_omega, 0x1FA4,
4298 XK_Greek_iota, XK_apostrophe, XK_dead_psili, XK_Greek_ALPHA, 0x1F8C,
4299 XK_Greek_iota, XK_apostrophe, XK_dead_psili, XK_Greek_ETA, 0x1F9C,
4300 XK_Greek_iota, XK_apostrophe, XK_dead_psili, XK_Greek_OMEGA, 0x1FAC,
4301 XK_Greek_iota, XK_apostrophe, XK_dead_psili, XK_Greek_alpha, 0x1F84,
4302 XK_Greek_iota, XK_apostrophe, XK_dead_psili, XK_Greek_eta, 0x1F94,
4303 XK_Greek_iota, XK_apostrophe, XK_dead_psili, XK_Greek_omega, 0x1FA4,
4304 XK_Greek_iota, XK_apostrophe, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8D,
4305 XK_Greek_iota, XK_apostrophe, XK_dead_dasia, XK_Greek_ETA, 0x1F9D,
4306 XK_Greek_iota, XK_apostrophe, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAD,
4307 XK_Greek_iota, XK_apostrophe, XK_dead_dasia, XK_Greek_alpha, 0x1F85,
4308 XK_Greek_iota, XK_apostrophe, XK_dead_dasia, XK_Greek_eta, 0x1F95,
4309 XK_Greek_iota, XK_apostrophe, XK_dead_dasia, XK_Greek_omega, 0x1FA5,
4310 XK_Greek_iota, XK_grave, XK_parenleft, XK_Greek_ALPHA, 0x1F8B,
4311 XK_Greek_iota, XK_grave, XK_parenleft, XK_Greek_ETA, 0x1F9B,
4312 XK_Greek_iota, XK_grave, XK_parenleft, XK_Greek_OMEGA, 0x1FAB,
4313 XK_Greek_iota, XK_grave, XK_parenleft, XK_Greek_alpha, 0x1F83,
4314 XK_Greek_iota, XK_grave, XK_parenleft, XK_Greek_eta, 0x1F93,
4315 XK_Greek_iota, XK_grave, XK_parenleft, XK_Greek_omega, 0x1FA3,
4316 XK_Greek_iota, XK_grave, XK_parenright, XK_Greek_ALPHA, 0x1F8A,
4317 XK_Greek_iota, XK_grave, XK_parenright, XK_Greek_ETA, 0x1F9A,
4318 XK_Greek_iota, XK_grave, XK_parenright, XK_Greek_OMEGA, 0x1FAA,
4319 XK_Greek_iota, XK_grave, XK_parenright, XK_Greek_alpha, 0x1F82,
4320 XK_Greek_iota, XK_grave, XK_parenright, XK_Greek_eta, 0x1F92,
4321 XK_Greek_iota, XK_grave, XK_parenright, XK_Greek_omega, 0x1FA2,
4322 XK_Greek_iota, XK_grave, XK_dead_psili, XK_Greek_ALPHA, 0x1F8A,
4323 XK_Greek_iota, XK_grave, XK_dead_psili, XK_Greek_ETA, 0x1F9A,
4324 XK_Greek_iota, XK_grave, XK_dead_psili, XK_Greek_OMEGA, 0x1FAA,
4325 XK_Greek_iota, XK_grave, XK_dead_psili, XK_Greek_alpha, 0x1F82,
4326 XK_Greek_iota, XK_grave, XK_dead_psili, XK_Greek_eta, 0x1F92,
4327 XK_Greek_iota, XK_grave, XK_dead_psili, XK_Greek_omega, 0x1FA2,
4328 XK_Greek_iota, XK_grave, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8B,
4329 XK_Greek_iota, XK_grave, XK_dead_dasia, XK_Greek_ETA, 0x1F9B,
4330 XK_Greek_iota, XK_grave, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAB,
4331 XK_Greek_iota, XK_grave, XK_dead_dasia, XK_Greek_alpha, 0x1F83,
4332 XK_Greek_iota, XK_grave, XK_dead_dasia, XK_Greek_eta, 0x1F93,
4333 XK_Greek_iota, XK_grave, XK_dead_dasia, XK_Greek_omega, 0x1FA3,
4334 XK_Greek_iota, XK_asciitilde, XK_parenleft, XK_Greek_ALPHA, 0x1F8F,
4335 XK_Greek_iota, XK_asciitilde, XK_parenleft, XK_Greek_ETA, 0x1F9F,
4336 XK_Greek_iota, XK_asciitilde, XK_parenleft, XK_Greek_OMEGA, 0x1FAF,
4337 XK_Greek_iota, XK_asciitilde, XK_parenleft, XK_Greek_alpha, 0x1F87,
4338 XK_Greek_iota, XK_asciitilde, XK_parenleft, XK_Greek_eta, 0x1F97,
4339 XK_Greek_iota, XK_asciitilde, XK_parenleft, XK_Greek_omega, 0x1FA7,
4340 XK_Greek_iota, XK_asciitilde, XK_parenright, XK_Greek_ALPHA, 0x1F8E,
4341 XK_Greek_iota, XK_asciitilde, XK_parenright, XK_Greek_ETA, 0x1F9E,
4342 XK_Greek_iota, XK_asciitilde, XK_parenright, XK_Greek_OMEGA, 0x1FAE,
4343 XK_Greek_iota, XK_asciitilde, XK_parenright, XK_Greek_alpha, 0x1F86,
4344 XK_Greek_iota, XK_asciitilde, XK_parenright, XK_Greek_eta, 0x1F96,
4345 XK_Greek_iota, XK_asciitilde, XK_parenright, XK_Greek_omega, 0x1FA6,
4346 XK_Greek_iota, XK_asciitilde, XK_dead_psili, XK_Greek_ALPHA, 0x1F8E,
4347 XK_Greek_iota, XK_asciitilde, XK_dead_psili, XK_Greek_ETA, 0x1F9E,
4348 XK_Greek_iota, XK_asciitilde, XK_dead_psili, XK_Greek_OMEGA, 0x1FAE,
4349 XK_Greek_iota, XK_asciitilde, XK_dead_psili, XK_Greek_alpha, 0x1F86,
4350 XK_Greek_iota, XK_asciitilde, XK_dead_psili, XK_Greek_eta, 0x1F96,
4351 XK_Greek_iota, XK_asciitilde, XK_dead_psili, XK_Greek_omega, 0x1FA6,
4352 XK_Greek_iota, XK_asciitilde, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8F,
4353 XK_Greek_iota, XK_asciitilde, XK_dead_dasia, XK_Greek_ETA, 0x1F9F,
4354 XK_Greek_iota, XK_asciitilde, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAF,
4355 XK_Greek_iota, XK_asciitilde, XK_dead_dasia, XK_Greek_alpha, 0x1F87,
4356 XK_Greek_iota, XK_asciitilde, XK_dead_dasia, XK_Greek_eta, 0x1F97,
4357 XK_Greek_iota, XK_asciitilde, XK_dead_dasia, XK_Greek_omega, 0x1FA7,
4358 XK_Greek_iota, XK_acute, XK_parenleft, XK_Greek_ALPHA, 0x1F8D,
4359 XK_Greek_iota, XK_acute, XK_parenleft, XK_Greek_ETA, 0x1F9D,
4360 XK_Greek_iota, XK_acute, XK_parenleft, XK_Greek_OMEGA, 0x1FAD,
4361 XK_Greek_iota, XK_acute, XK_parenleft, XK_Greek_alpha, 0x1F85,
4362 XK_Greek_iota, XK_acute, XK_parenleft, XK_Greek_eta, 0x1F95,
4363 XK_Greek_iota, XK_acute, XK_parenleft, XK_Greek_omega, 0x1FA5,
4364 XK_Greek_iota, XK_acute, XK_parenright, XK_Greek_ALPHA, 0x1F8C,
4365 XK_Greek_iota, XK_acute, XK_parenright, XK_Greek_ETA, 0x1F9C,
4366 XK_Greek_iota, XK_acute, XK_parenright, XK_Greek_OMEGA, 0x1FAC,
4367 XK_Greek_iota, XK_acute, XK_parenright, XK_Greek_alpha, 0x1F84,
4368 XK_Greek_iota, XK_acute, XK_parenright, XK_Greek_eta, 0x1F94,
4369 XK_Greek_iota, XK_acute, XK_parenright, XK_Greek_omega, 0x1FA4,
4370 XK_Greek_iota, XK_acute, XK_dead_psili, XK_Greek_ALPHA, 0x1F8C,
4371 XK_Greek_iota, XK_acute, XK_dead_psili, XK_Greek_ETA, 0x1F9C,
4372 XK_Greek_iota, XK_acute, XK_dead_psili, XK_Greek_OMEGA, 0x1FAC,
4373 XK_Greek_iota, XK_acute, XK_dead_psili, XK_Greek_alpha, 0x1F84,
4374 XK_Greek_iota, XK_acute, XK_dead_psili, XK_Greek_eta, 0x1F94,
4375 XK_Greek_iota, XK_acute, XK_dead_psili, XK_Greek_omega, 0x1FA4,
4376 XK_Greek_iota, XK_acute, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8D,
4377 XK_Greek_iota, XK_acute, XK_dead_dasia, XK_Greek_ETA, 0x1F9D,
4378 XK_Greek_iota, XK_acute, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAD,
4379 XK_Greek_iota, XK_acute, XK_dead_dasia, XK_Greek_alpha, 0x1F85,
4380 XK_Greek_iota, XK_acute, XK_dead_dasia, XK_Greek_eta, 0x1F95,
4381 XK_Greek_iota, XK_acute, XK_dead_dasia, XK_Greek_omega, 0x1FA5,
4382 XK_Greek_iota, XK_dead_grave, XK_parenleft, XK_Greek_ALPHA, 0x1F8B,
4383 XK_Greek_iota, XK_dead_grave, XK_parenleft, XK_Greek_ETA, 0x1F9B,
4384 XK_Greek_iota, XK_dead_grave, XK_parenleft, XK_Greek_OMEGA, 0x1FAB,
4385 XK_Greek_iota, XK_dead_grave, XK_parenleft, XK_Greek_alpha, 0x1F83,
4386 XK_Greek_iota, XK_dead_grave, XK_parenleft, XK_Greek_eta, 0x1F93,
4387 XK_Greek_iota, XK_dead_grave, XK_parenleft, XK_Greek_omega, 0x1FA3,
4388 XK_Greek_iota, XK_dead_grave, XK_parenright, XK_Greek_ALPHA, 0x1F8A,
4389 XK_Greek_iota, XK_dead_grave, XK_parenright, XK_Greek_ETA, 0x1F9A,
4390 XK_Greek_iota, XK_dead_grave, XK_parenright, XK_Greek_OMEGA, 0x1FAA,
4391 XK_Greek_iota, XK_dead_grave, XK_parenright, XK_Greek_alpha, 0x1F82,
4392 XK_Greek_iota, XK_dead_grave, XK_parenright, XK_Greek_eta, 0x1F92,
4393 XK_Greek_iota, XK_dead_grave, XK_parenright, XK_Greek_omega, 0x1FA2,
4394 XK_Greek_iota, XK_dead_grave, XK_dead_psili, XK_Greek_ALPHA, 0x1F8A,
4395 XK_Greek_iota, XK_dead_grave, XK_dead_psili, XK_Greek_ETA, 0x1F9A,
4396 XK_Greek_iota, XK_dead_grave, XK_dead_psili, XK_Greek_OMEGA, 0x1FAA,
4397 XK_Greek_iota, XK_dead_grave, XK_dead_psili, XK_Greek_alpha, 0x1F82,
4398 XK_Greek_iota, XK_dead_grave, XK_dead_psili, XK_Greek_eta, 0x1F92,
4399 XK_Greek_iota, XK_dead_grave, XK_dead_psili, XK_Greek_omega, 0x1FA2,
4400 XK_Greek_iota, XK_dead_grave, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8B,
4401 XK_Greek_iota, XK_dead_grave, XK_dead_dasia, XK_Greek_ETA, 0x1F9B,
4402 XK_Greek_iota, XK_dead_grave, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAB,
4403 XK_Greek_iota, XK_dead_grave, XK_dead_dasia, XK_Greek_alpha, 0x1F83,
4404 XK_Greek_iota, XK_dead_grave, XK_dead_dasia, XK_Greek_eta, 0x1F93,
4405 XK_Greek_iota, XK_dead_grave, XK_dead_dasia, XK_Greek_omega, 0x1FA3,
4406 XK_Greek_iota, XK_dead_acute, XK_parenleft, XK_Greek_ALPHA, 0x1F8D,
4407 XK_Greek_iota, XK_dead_acute, XK_parenleft, XK_Greek_ETA, 0x1F9D,
4408 XK_Greek_iota, XK_dead_acute, XK_parenleft, XK_Greek_OMEGA, 0x1FAD,
4409 XK_Greek_iota, XK_dead_acute, XK_parenleft, XK_Greek_alpha, 0x1F85,
4410 XK_Greek_iota, XK_dead_acute, XK_parenleft, XK_Greek_eta, 0x1F95,
4411 XK_Greek_iota, XK_dead_acute, XK_parenleft, XK_Greek_omega, 0x1FA5,
4412 XK_Greek_iota, XK_dead_acute, XK_parenright, XK_Greek_ALPHA, 0x1F8C,
4413 XK_Greek_iota, XK_dead_acute, XK_parenright, XK_Greek_ETA, 0x1F9C,
4414 XK_Greek_iota, XK_dead_acute, XK_parenright, XK_Greek_OMEGA, 0x1FAC,
4415 XK_Greek_iota, XK_dead_acute, XK_parenright, XK_Greek_alpha, 0x1F84,
4416 XK_Greek_iota, XK_dead_acute, XK_parenright, XK_Greek_eta, 0x1F94,
4417 XK_Greek_iota, XK_dead_acute, XK_parenright, XK_Greek_omega, 0x1FA4,
4418 XK_Greek_iota, XK_dead_acute, XK_dead_psili, XK_Greek_ALPHA, 0x1F8C,
4419 XK_Greek_iota, XK_dead_acute, XK_dead_psili, XK_Greek_ETA, 0x1F9C,
4420 XK_Greek_iota, XK_dead_acute, XK_dead_psili, XK_Greek_OMEGA, 0x1FAC,
4421 XK_Greek_iota, XK_dead_acute, XK_dead_psili, XK_Greek_alpha, 0x1F84,
4422 XK_Greek_iota, XK_dead_acute, XK_dead_psili, XK_Greek_eta, 0x1F94,
4423 XK_Greek_iota, XK_dead_acute, XK_dead_psili, XK_Greek_omega, 0x1FA4,
4424 XK_Greek_iota, XK_dead_acute, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8D,
4425 XK_Greek_iota, XK_dead_acute, XK_dead_dasia, XK_Greek_ETA, 0x1F9D,
4426 XK_Greek_iota, XK_dead_acute, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAD,
4427 XK_Greek_iota, XK_dead_acute, XK_dead_dasia, XK_Greek_alpha, 0x1F85,
4428 XK_Greek_iota, XK_dead_acute, XK_dead_dasia, XK_Greek_eta, 0x1F95,
4429 XK_Greek_iota, XK_dead_acute, XK_dead_dasia, XK_Greek_omega, 0x1FA5,
4430 XK_Greek_iota, XK_dead_tilde, XK_parenleft, XK_Greek_ALPHA, 0x1F8F,
4431 XK_Greek_iota, XK_dead_tilde, XK_parenleft, XK_Greek_ETA, 0x1F9F,
4432 XK_Greek_iota, XK_dead_tilde, XK_parenleft, XK_Greek_OMEGA, 0x1FAF,
4433 XK_Greek_iota, XK_dead_tilde, XK_parenleft, XK_Greek_alpha, 0x1F87,
4434 XK_Greek_iota, XK_dead_tilde, XK_parenleft, XK_Greek_eta, 0x1F97,
4435 XK_Greek_iota, XK_dead_tilde, XK_parenleft, XK_Greek_omega, 0x1FA7,
4436 XK_Greek_iota, XK_dead_tilde, XK_parenright, XK_Greek_ALPHA, 0x1F8E,
4437 XK_Greek_iota, XK_dead_tilde, XK_parenright, XK_Greek_ETA, 0x1F9E,
4438 XK_Greek_iota, XK_dead_tilde, XK_parenright, XK_Greek_OMEGA, 0x1FAE,
4439 XK_Greek_iota, XK_dead_tilde, XK_parenright, XK_Greek_alpha, 0x1F86,
4440 XK_Greek_iota, XK_dead_tilde, XK_parenright, XK_Greek_eta, 0x1F96,
4441 XK_Greek_iota, XK_dead_tilde, XK_parenright, XK_Greek_omega, 0x1FA6,
4442 XK_Greek_iota, XK_dead_tilde, XK_dead_psili, XK_Greek_ALPHA, 0x1F8E,
4443 XK_Greek_iota, XK_dead_tilde, XK_dead_psili, XK_Greek_ETA, 0x1F9E,
4444 XK_Greek_iota, XK_dead_tilde, XK_dead_psili, XK_Greek_OMEGA, 0x1FAE,
4445 XK_Greek_iota, XK_dead_tilde, XK_dead_psili, XK_Greek_alpha, 0x1F86,
4446 XK_Greek_iota, XK_dead_tilde, XK_dead_psili, XK_Greek_eta, 0x1F96,
4447 XK_Greek_iota, XK_dead_tilde, XK_dead_psili, XK_Greek_omega, 0x1FA6,
4448 XK_Greek_iota, XK_dead_tilde, XK_dead_dasia, XK_Greek_ALPHA, 0x1F8F,
4449 XK_Greek_iota, XK_dead_tilde, XK_dead_dasia, XK_Greek_ETA, 0x1F9F,
4450 XK_Greek_iota, XK_dead_tilde, XK_dead_dasia, XK_Greek_OMEGA, 0x1FAF,
4451 XK_Greek_iota, XK_dead_tilde, XK_dead_dasia, XK_Greek_alpha, 0x1F87,
4452 XK_Greek_iota, XK_dead_tilde, XK_dead_dasia, XK_Greek_eta, 0x1F97,
4453 };
4454
4455 #endif
4456
4457
4458 // kate: indent-mode cstyle; space-indent on; indent-width 0;
+0
-3
src/fcitx.json less more
0 {
1 "Keys": [ "fcitx" ]
2 }
+0
-1612
src/keydata.h less more
0 /***************************************************************************
1 * Copyright (C) 2012~2013 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #ifndef KEYDATA_H
20 #define KEYDATA_H
21
22 struct _FcitxKeySymToUnicode{
23 uint16_t keysym;
24 uint16_t ucs;
25 };
26
27 struct _FcitxUnicodeToKeySym {
28 uint16_t keysym;
29 uint16_t ucs;
30 };
31
32 static const struct _FcitxKeySymToUnicode gdk_keysym_to_unicode_tab[] = {
33 { 0x01a1, 0x0104 }, /* Aogonek Ą LATIN CAPITAL LETTER A WITH OGONEK */
34 { 0x01a2, 0x02d8 }, /* breve ˘ BREVE */
35 { 0x01a3, 0x0141 }, /* Lstroke Ł LATIN CAPITAL LETTER L WITH STROKE */
36 { 0x01a5, 0x013d }, /* Lcaron Ľ LATIN CAPITAL LETTER L WITH CARON */
37 { 0x01a6, 0x015a }, /* Sacute Ś LATIN CAPITAL LETTER S WITH ACUTE */
38 { 0x01a9, 0x0160 }, /* Scaron Š LATIN CAPITAL LETTER S WITH CARON */
39 { 0x01aa, 0x015e }, /* Scedilla Ş LATIN CAPITAL LETTER S WITH CEDILLA */
40 { 0x01ab, 0x0164 }, /* Tcaron Ť LATIN CAPITAL LETTER T WITH CARON */
41 { 0x01ac, 0x0179 }, /* Zacute Ź LATIN CAPITAL LETTER Z WITH ACUTE */
42 { 0x01ae, 0x017d }, /* Zcaron Ž LATIN CAPITAL LETTER Z WITH CARON */
43 { 0x01af, 0x017b }, /* Zabovedot Ż LATIN CAPITAL LETTER Z WITH DOT ABOVE */
44 { 0x01b1, 0x0105 }, /* aogonek ą LATIN SMALL LETTER A WITH OGONEK */
45 { 0x01b2, 0x02db }, /* ogonek ˛ OGONEK */
46 { 0x01b3, 0x0142 }, /* lstroke ł LATIN SMALL LETTER L WITH STROKE */
47 { 0x01b5, 0x013e }, /* lcaron ľ LATIN SMALL LETTER L WITH CARON */
48 { 0x01b6, 0x015b }, /* sacute ś LATIN SMALL LETTER S WITH ACUTE */
49 { 0x01b7, 0x02c7 }, /* caron ˇ CARON */
50 { 0x01b9, 0x0161 }, /* scaron š LATIN SMALL LETTER S WITH CARON */
51 { 0x01ba, 0x015f }, /* scedilla ş LATIN SMALL LETTER S WITH CEDILLA */
52 { 0x01bb, 0x0165 }, /* tcaron ť LATIN SMALL LETTER T WITH CARON */
53 { 0x01bc, 0x017a }, /* zacute ź LATIN SMALL LETTER Z WITH ACUTE */
54 { 0x01bd, 0x02dd }, /* doubleacute ˝ DOUBLE ACUTE ACCENT */
55 { 0x01be, 0x017e }, /* zcaron ž LATIN SMALL LETTER Z WITH CARON */
56 { 0x01bf, 0x017c }, /* zabovedot ż LATIN SMALL LETTER Z WITH DOT ABOVE */
57 { 0x01c0, 0x0154 }, /* Racute Ŕ LATIN CAPITAL LETTER R WITH ACUTE */
58 { 0x01c3, 0x0102 }, /* Abreve Ă LATIN CAPITAL LETTER A WITH BREVE */
59 { 0x01c5, 0x0139 }, /* Lacute Ĺ LATIN CAPITAL LETTER L WITH ACUTE */
60 { 0x01c6, 0x0106 }, /* Cacute Ć LATIN CAPITAL LETTER C WITH ACUTE */
61 { 0x01c8, 0x010c }, /* Ccaron Č LATIN CAPITAL LETTER C WITH CARON */
62 { 0x01ca, 0x0118 }, /* Eogonek Ę LATIN CAPITAL LETTER E WITH OGONEK */
63 { 0x01cc, 0x011a }, /* Ecaron Ě LATIN CAPITAL LETTER E WITH CARON */
64 { 0x01cf, 0x010e }, /* Dcaron Ď LATIN CAPITAL LETTER D WITH CARON */
65 { 0x01d0, 0x0110 }, /* Dstroke Đ LATIN CAPITAL LETTER D WITH STROKE */
66 { 0x01d1, 0x0143 }, /* Nacute Ń LATIN CAPITAL LETTER N WITH ACUTE */
67 { 0x01d2, 0x0147 }, /* Ncaron Ň LATIN CAPITAL LETTER N WITH CARON */
68 { 0x01d5, 0x0150 }, /* Odoubleacute Ő LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */
69 { 0x01d8, 0x0158 }, /* Rcaron Ř LATIN CAPITAL LETTER R WITH CARON */
70 { 0x01d9, 0x016e }, /* Uring Ů LATIN CAPITAL LETTER U WITH RING ABOVE */
71 { 0x01db, 0x0170 }, /* Udoubleacute Ű LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */
72 { 0x01de, 0x0162 }, /* Tcedilla Ţ LATIN CAPITAL LETTER T WITH CEDILLA */
73 { 0x01e0, 0x0155 }, /* racute ŕ LATIN SMALL LETTER R WITH ACUTE */
74 { 0x01e3, 0x0103 }, /* abreve ă LATIN SMALL LETTER A WITH BREVE */
75 { 0x01e5, 0x013a }, /* lacute ĺ LATIN SMALL LETTER L WITH ACUTE */
76 { 0x01e6, 0x0107 }, /* cacute ć LATIN SMALL LETTER C WITH ACUTE */
77 { 0x01e8, 0x010d }, /* ccaron č LATIN SMALL LETTER C WITH CARON */
78 { 0x01ea, 0x0119 }, /* eogonek ę LATIN SMALL LETTER E WITH OGONEK */
79 { 0x01ec, 0x011b }, /* ecaron ě LATIN SMALL LETTER E WITH CARON */
80 { 0x01ef, 0x010f }, /* dcaron ď LATIN SMALL LETTER D WITH CARON */
81 { 0x01f0, 0x0111 }, /* dstroke đ LATIN SMALL LETTER D WITH STROKE */
82 { 0x01f1, 0x0144 }, /* nacute ń LATIN SMALL LETTER N WITH ACUTE */
83 { 0x01f2, 0x0148 }, /* ncaron ň LATIN SMALL LETTER N WITH CARON */
84 { 0x01f5, 0x0151 }, /* odoubleacute ő LATIN SMALL LETTER O WITH DOUBLE ACUTE */
85 { 0x01f8, 0x0159 }, /* rcaron ř LATIN SMALL LETTER R WITH CARON */
86 { 0x01f9, 0x016f }, /* uring ů LATIN SMALL LETTER U WITH RING ABOVE */
87 { 0x01fb, 0x0171 }, /* udoubleacute ű LATIN SMALL LETTER U WITH DOUBLE ACUTE */
88 { 0x01fe, 0x0163 }, /* tcedilla ţ LATIN SMALL LETTER T WITH CEDILLA */
89 { 0x01ff, 0x02d9 }, /* abovedot ˙ DOT ABOVE */
90 { 0x02a1, 0x0126 }, /* Hstroke Ħ LATIN CAPITAL LETTER H WITH STROKE */
91 { 0x02a6, 0x0124 }, /* Hcircumflex Ĥ LATIN CAPITAL LETTER H WITH CIRCUMFLEX */
92 { 0x02a9, 0x0130 }, /* Iabovedot İ LATIN CAPITAL LETTER I WITH DOT ABOVE */
93 { 0x02ab, 0x011e }, /* Gbreve Ğ LATIN CAPITAL LETTER G WITH BREVE */
94 { 0x02ac, 0x0134 }, /* Jcircumflex Ĵ LATIN CAPITAL LETTER J WITH CIRCUMFLEX */
95 { 0x02b1, 0x0127 }, /* hstroke ħ LATIN SMALL LETTER H WITH STROKE */
96 { 0x02b6, 0x0125 }, /* hcircumflex ĥ LATIN SMALL LETTER H WITH CIRCUMFLEX */
97 { 0x02b9, 0x0131 }, /* idotless ı LATIN SMALL LETTER DOTLESS I */
98 { 0x02bb, 0x011f }, /* gbreve ğ LATIN SMALL LETTER G WITH BREVE */
99 { 0x02bc, 0x0135 }, /* jcircumflex ĵ LATIN SMALL LETTER J WITH CIRCUMFLEX */
100 { 0x02c5, 0x010a }, /* Cabovedot Ċ LATIN CAPITAL LETTER C WITH DOT ABOVE */
101 { 0x02c6, 0x0108 }, /* Ccircumflex Ĉ LATIN CAPITAL LETTER C WITH CIRCUMFLEX */
102 { 0x02d5, 0x0120 }, /* Gabovedot Ġ LATIN CAPITAL LETTER G WITH DOT ABOVE */
103 { 0x02d8, 0x011c }, /* Gcircumflex Ĝ LATIN CAPITAL LETTER G WITH CIRCUMFLEX */
104 { 0x02dd, 0x016c }, /* Ubreve Ŭ LATIN CAPITAL LETTER U WITH BREVE */
105 { 0x02de, 0x015c }, /* Scircumflex Ŝ LATIN CAPITAL LETTER S WITH CIRCUMFLEX */
106 { 0x02e5, 0x010b }, /* cabovedot ċ LATIN SMALL LETTER C WITH DOT ABOVE */
107 { 0x02e6, 0x0109 }, /* ccircumflex ĉ LATIN SMALL LETTER C WITH CIRCUMFLEX */
108 { 0x02f5, 0x0121 }, /* gabovedot ġ LATIN SMALL LETTER G WITH DOT ABOVE */
109 { 0x02f8, 0x011d }, /* gcircumflex ĝ LATIN SMALL LETTER G WITH CIRCUMFLEX */
110 { 0x02fd, 0x016d }, /* ubreve ŭ LATIN SMALL LETTER U WITH BREVE */
111 { 0x02fe, 0x015d }, /* scircumflex ŝ LATIN SMALL LETTER S WITH CIRCUMFLEX */
112 { 0x03a2, 0x0138 }, /* kra ĸ LATIN SMALL LETTER KRA */
113 { 0x03a3, 0x0156 }, /* Rcedilla Ŗ LATIN CAPITAL LETTER R WITH CEDILLA */
114 { 0x03a5, 0x0128 }, /* Itilde Ĩ LATIN CAPITAL LETTER I WITH TILDE */
115 { 0x03a6, 0x013b }, /* Lcedilla Ļ LATIN CAPITAL LETTER L WITH CEDILLA */
116 { 0x03aa, 0x0112 }, /* Emacron Ē LATIN CAPITAL LETTER E WITH MACRON */
117 { 0x03ab, 0x0122 }, /* Gcedilla Ģ LATIN CAPITAL LETTER G WITH CEDILLA */
118 { 0x03ac, 0x0166 }, /* Tslash Ŧ LATIN CAPITAL LETTER T WITH STROKE */
119 { 0x03b3, 0x0157 }, /* rcedilla ŗ LATIN SMALL LETTER R WITH CEDILLA */
120 { 0x03b5, 0x0129 }, /* itilde ĩ LATIN SMALL LETTER I WITH TILDE */
121 { 0x03b6, 0x013c }, /* lcedilla ļ LATIN SMALL LETTER L WITH CEDILLA */
122 { 0x03ba, 0x0113 }, /* emacron ē LATIN SMALL LETTER E WITH MACRON */
123 { 0x03bb, 0x0123 }, /* gcedilla ģ LATIN SMALL LETTER G WITH CEDILLA */
124 { 0x03bc, 0x0167 }, /* tslash ŧ LATIN SMALL LETTER T WITH STROKE */
125 { 0x03bd, 0x014a }, /* ENG Ŋ LATIN CAPITAL LETTER ENG */
126 { 0x03bf, 0x014b }, /* eng ŋ LATIN SMALL LETTER ENG */
127 { 0x03c0, 0x0100 }, /* Amacron Ā LATIN CAPITAL LETTER A WITH MACRON */
128 { 0x03c7, 0x012e }, /* Iogonek Į LATIN CAPITAL LETTER I WITH OGONEK */
129 { 0x03cc, 0x0116 }, /* Eabovedot Ė LATIN CAPITAL LETTER E WITH DOT ABOVE */
130 { 0x03cf, 0x012a }, /* Imacron Ī LATIN CAPITAL LETTER I WITH MACRON */
131 { 0x03d1, 0x0145 }, /* Ncedilla Ņ LATIN CAPITAL LETTER N WITH CEDILLA */
132 { 0x03d2, 0x014c }, /* Omacron Ō LATIN CAPITAL LETTER O WITH MACRON */
133 { 0x03d3, 0x0136 }, /* Kcedilla Ķ LATIN CAPITAL LETTER K WITH CEDILLA */
134 { 0x03d9, 0x0172 }, /* Uogonek Ų LATIN CAPITAL LETTER U WITH OGONEK */
135 { 0x03dd, 0x0168 }, /* Utilde Ũ LATIN CAPITAL LETTER U WITH TILDE */
136 { 0x03de, 0x016a }, /* Umacron Ū LATIN CAPITAL LETTER U WITH MACRON */
137 { 0x03e0, 0x0101 }, /* amacron ā LATIN SMALL LETTER A WITH MACRON */
138 { 0x03e7, 0x012f }, /* iogonek į LATIN SMALL LETTER I WITH OGONEK */
139 { 0x03ec, 0x0117 }, /* eabovedot ė LATIN SMALL LETTER E WITH DOT ABOVE */
140 { 0x03ef, 0x012b }, /* imacron ī LATIN SMALL LETTER I WITH MACRON */
141 { 0x03f1, 0x0146 }, /* ncedilla ņ LATIN SMALL LETTER N WITH CEDILLA */
142 { 0x03f2, 0x014d }, /* omacron ō LATIN SMALL LETTER O WITH MACRON */
143 { 0x03f3, 0x0137 }, /* kcedilla ķ LATIN SMALL LETTER K WITH CEDILLA */
144 { 0x03f9, 0x0173 }, /* uogonek ų LATIN SMALL LETTER U WITH OGONEK */
145 { 0x03fd, 0x0169 }, /* utilde ũ LATIN SMALL LETTER U WITH TILDE */
146 { 0x03fe, 0x016b }, /* umacron ū LATIN SMALL LETTER U WITH MACRON */
147 { 0x047e, 0x203e }, /* overline ‾ OVERLINE */
148 { 0x04a1, 0x3002 }, /* kana_fullstop 。 IDEOGRAPHIC FULL STOP */
149 { 0x04a2, 0x300c }, /* kana_openingbracket 「 LEFT CORNER BRACKET */
150 { 0x04a3, 0x300d }, /* kana_closingbracket 」 RIGHT CORNER BRACKET */
151 { 0x04a4, 0x3001 }, /* kana_comma 、 IDEOGRAPHIC COMMA */
152 { 0x04a5, 0x30fb }, /* kana_conjunctive ・ KATAKANA MIDDLE DOT */
153 { 0x04a6, 0x30f2 }, /* kana_WO ヲ KATAKANA LETTER WO */
154 { 0x04a7, 0x30a1 }, /* kana_a ァ KATAKANA LETTER SMALL A */
155 { 0x04a8, 0x30a3 }, /* kana_i ィ KATAKANA LETTER SMALL I */
156 { 0x04a9, 0x30a5 }, /* kana_u ゥ KATAKANA LETTER SMALL U */
157 { 0x04aa, 0x30a7 }, /* kana_e ェ KATAKANA LETTER SMALL E */
158 { 0x04ab, 0x30a9 }, /* kana_o ォ KATAKANA LETTER SMALL O */
159 { 0x04ac, 0x30e3 }, /* kana_ya ャ KATAKANA LETTER SMALL YA */
160 { 0x04ad, 0x30e5 }, /* kana_yu ュ KATAKANA LETTER SMALL YU */
161 { 0x04ae, 0x30e7 }, /* kana_yo ョ KATAKANA LETTER SMALL YO */
162 { 0x04af, 0x30c3 }, /* kana_tsu ッ KATAKANA LETTER SMALL TU */
163 { 0x04b0, 0x30fc }, /* prolongedsound ー KATAKANA-HIRAGANA PROLONGED SOUND MARK */
164 { 0x04b1, 0x30a2 }, /* kana_A ア KATAKANA LETTER A */
165 { 0x04b2, 0x30a4 }, /* kana_I イ KATAKANA LETTER I */
166 { 0x04b3, 0x30a6 }, /* kana_U ウ KATAKANA LETTER U */
167 { 0x04b4, 0x30a8 }, /* kana_E エ KATAKANA LETTER E */
168 { 0x04b5, 0x30aa }, /* kana_O オ KATAKANA LETTER O */
169 { 0x04b6, 0x30ab }, /* kana_KA カ KATAKANA LETTER KA */
170 { 0x04b7, 0x30ad }, /* kana_KI キ KATAKANA LETTER KI */
171 { 0x04b8, 0x30af }, /* kana_KU ク KATAKANA LETTER KU */
172 { 0x04b9, 0x30b1 }, /* kana_KE ケ KATAKANA LETTER KE */
173 { 0x04ba, 0x30b3 }, /* kana_KO コ KATAKANA LETTER KO */
174 { 0x04bb, 0x30b5 }, /* kana_SA サ KATAKANA LETTER SA */
175 { 0x04bc, 0x30b7 }, /* kana_SHI シ KATAKANA LETTER SI */
176 { 0x04bd, 0x30b9 }, /* kana_SU ス KATAKANA LETTER SU */
177 { 0x04be, 0x30bb }, /* kana_SE セ KATAKANA LETTER SE */
178 { 0x04bf, 0x30bd }, /* kana_SO ソ KATAKANA LETTER SO */
179 { 0x04c0, 0x30bf }, /* kana_TA タ KATAKANA LETTER TA */
180 { 0x04c1, 0x30c1 }, /* kana_CHI チ KATAKANA LETTER TI */
181 { 0x04c2, 0x30c4 }, /* kana_TSU ツ KATAKANA LETTER TU */
182 { 0x04c3, 0x30c6 }, /* kana_TE テ KATAKANA LETTER TE */
183 { 0x04c4, 0x30c8 }, /* kana_TO ト KATAKANA LETTER TO */
184 { 0x04c5, 0x30ca }, /* kana_NA ナ KATAKANA LETTER NA */
185 { 0x04c6, 0x30cb }, /* kana_NI ニ KATAKANA LETTER NI */
186 { 0x04c7, 0x30cc }, /* kana_NU ヌ KATAKANA LETTER NU */
187 { 0x04c8, 0x30cd }, /* kana_NE ネ KATAKANA LETTER NE */
188 { 0x04c9, 0x30ce }, /* kana_NO ノ KATAKANA LETTER NO */
189 { 0x04ca, 0x30cf }, /* kana_HA ハ KATAKANA LETTER HA */
190 { 0x04cb, 0x30d2 }, /* kana_HI ヒ KATAKANA LETTER HI */
191 { 0x04cc, 0x30d5 }, /* kana_FU フ KATAKANA LETTER HU */
192 { 0x04cd, 0x30d8 }, /* kana_HE ヘ KATAKANA LETTER HE */
193 { 0x04ce, 0x30db }, /* kana_HO ホ KATAKANA LETTER HO */
194 { 0x04cf, 0x30de }, /* kana_MA マ KATAKANA LETTER MA */
195 { 0x04d0, 0x30df }, /* kana_MI ミ KATAKANA LETTER MI */
196 { 0x04d1, 0x30e0 }, /* kana_MU ム KATAKANA LETTER MU */
197 { 0x04d2, 0x30e1 }, /* kana_ME メ KATAKANA LETTER ME */
198 { 0x04d3, 0x30e2 }, /* kana_MO モ KATAKANA LETTER MO */
199 { 0x04d4, 0x30e4 }, /* kana_YA ヤ KATAKANA LETTER YA */
200 { 0x04d5, 0x30e6 }, /* kana_YU ユ KATAKANA LETTER YU */
201 { 0x04d6, 0x30e8 }, /* kana_YO ヨ KATAKANA LETTER YO */
202 { 0x04d7, 0x30e9 }, /* kana_RA ラ KATAKANA LETTER RA */
203 { 0x04d8, 0x30ea }, /* kana_RI リ KATAKANA LETTER RI */
204 { 0x04d9, 0x30eb }, /* kana_RU ル KATAKANA LETTER RU */
205 { 0x04da, 0x30ec }, /* kana_RE レ KATAKANA LETTER RE */
206 { 0x04db, 0x30ed }, /* kana_RO ロ KATAKANA LETTER RO */
207 { 0x04dc, 0x30ef }, /* kana_WA ワ KATAKANA LETTER WA */
208 { 0x04dd, 0x30f3 }, /* kana_N ン KATAKANA LETTER N */
209 { 0x04de, 0x309b }, /* voicedsound ゛ KATAKANA-HIRAGANA VOICED SOUND MARK */
210 { 0x04df, 0x309c }, /* semivoicedsound ゜ KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */
211 { 0x05ac, 0x060c }, /* Arabic_comma ، ARABIC COMMA */
212 { 0x05bb, 0x061b }, /* Arabic_semicolon ؛ ARABIC SEMICOLON */
213 { 0x05bf, 0x061f }, /* Arabic_question_mark ؟ ARABIC QUESTION MARK */
214 { 0x05c1, 0x0621 }, /* Arabic_hamza ء ARABIC LETTER HAMZA */
215 { 0x05c2, 0x0622 }, /* Arabic_maddaonalef آ ARABIC LETTER ALEF WITH MADDA ABOVE */
216 { 0x05c3, 0x0623 }, /* Arabic_hamzaonalef أ ARABIC LETTER ALEF WITH HAMZA ABOVE */
217 { 0x05c4, 0x0624 }, /* Arabic_hamzaonwaw ؤ ARABIC LETTER WAW WITH HAMZA ABOVE */
218 { 0x05c5, 0x0625 }, /* Arabic_hamzaunderalef إ ARABIC LETTER ALEF WITH HAMZA BELOW */
219 { 0x05c6, 0x0626 }, /* Arabic_hamzaonyeh ئ ARABIC LETTER YEH WITH HAMZA ABOVE */
220 { 0x05c7, 0x0627 }, /* Arabic_alef ا ARABIC LETTER ALEF */
221 { 0x05c8, 0x0628 }, /* Arabic_beh ب ARABIC LETTER BEH */
222 { 0x05c9, 0x0629 }, /* Arabic_tehmarbuta ة ARABIC LETTER TEH MARBUTA */
223 { 0x05ca, 0x062a }, /* Arabic_teh ت ARABIC LETTER TEH */
224 { 0x05cb, 0x062b }, /* Arabic_theh ث ARABIC LETTER THEH */
225 { 0x05cc, 0x062c }, /* Arabic_jeem ج ARABIC LETTER JEEM */
226 { 0x05cd, 0x062d }, /* Arabic_hah ح ARABIC LETTER HAH */
227 { 0x05ce, 0x062e }, /* Arabic_khah خ ARABIC LETTER KHAH */
228 { 0x05cf, 0x062f }, /* Arabic_dal د ARABIC LETTER DAL */
229 { 0x05d0, 0x0630 }, /* Arabic_thal ذ ARABIC LETTER THAL */
230 { 0x05d1, 0x0631 }, /* Arabic_ra ر ARABIC LETTER REH */
231 { 0x05d2, 0x0632 }, /* Arabic_zain ز ARABIC LETTER ZAIN */
232 { 0x05d3, 0x0633 }, /* Arabic_seen س ARABIC LETTER SEEN */
233 { 0x05d4, 0x0634 }, /* Arabic_sheen ش ARABIC LETTER SHEEN */
234 { 0x05d5, 0x0635 }, /* Arabic_sad ص ARABIC LETTER SAD */
235 { 0x05d6, 0x0636 }, /* Arabic_dad ض ARABIC LETTER DAD */
236 { 0x05d7, 0x0637 }, /* Arabic_tah ط ARABIC LETTER TAH */
237 { 0x05d8, 0x0638 }, /* Arabic_zah ظ ARABIC LETTER ZAH */
238 { 0x05d9, 0x0639 }, /* Arabic_ain ع ARABIC LETTER AIN */
239 { 0x05da, 0x063a }, /* Arabic_ghain غ ARABIC LETTER GHAIN */
240 { 0x05e0, 0x0640 }, /* Arabic_tatweel ـ ARABIC TATWEEL */
241 { 0x05e1, 0x0641 }, /* Arabic_feh ف ARABIC LETTER FEH */
242 { 0x05e2, 0x0642 }, /* Arabic_qaf ق ARABIC LETTER QAF */
243 { 0x05e3, 0x0643 }, /* Arabic_kaf ك ARABIC LETTER KAF */
244 { 0x05e4, 0x0644 }, /* Arabic_lam ل ARABIC LETTER LAM */
245 { 0x05e5, 0x0645 }, /* Arabic_meem م ARABIC LETTER MEEM */
246 { 0x05e6, 0x0646 }, /* Arabic_noon ن ARABIC LETTER NOON */
247 { 0x05e7, 0x0647 }, /* Arabic_ha ه ARABIC LETTER HEH */
248 { 0x05e8, 0x0648 }, /* Arabic_waw و ARABIC LETTER WAW */
249 { 0x05e9, 0x0649 }, /* Arabic_alefmaksura ى ARABIC LETTER ALEF MAKSURA */
250 { 0x05ea, 0x064a }, /* Arabic_yeh ي ARABIC LETTER YEH */
251 { 0x05eb, 0x064b }, /* Arabic_fathatan ً ARABIC FATHATAN */
252 { 0x05ec, 0x064c }, /* Arabic_dammatan ٌ ARABIC DAMMATAN */
253 { 0x05ed, 0x064d }, /* Arabic_kasratan ٍ ARABIC KASRATAN */
254 { 0x05ee, 0x064e }, /* Arabic_fatha َ ARABIC FATHA */
255 { 0x05ef, 0x064f }, /* Arabic_damma ُ ARABIC DAMMA */
256 { 0x05f0, 0x0650 }, /* Arabic_kasra ِ ARABIC KASRA */
257 { 0x05f1, 0x0651 }, /* Arabic_shadda ّ ARABIC SHADDA */
258 { 0x05f2, 0x0652 }, /* Arabic_sukun ْ ARABIC SUKUN */
259 { 0x06a1, 0x0452 }, /* Serbian_dje ђ CYRILLIC SMALL LETTER DJE */
260 { 0x06a2, 0x0453 }, /* Macedonia_gje ѓ CYRILLIC SMALL LETTER GJE */
261 { 0x06a3, 0x0451 }, /* Cyrillic_io ё CYRILLIC SMALL LETTER IO */
262 { 0x06a4, 0x0454 }, /* Ukrainian_ie є CYRILLIC SMALL LETTER UKRAINIAN IE */
263 { 0x06a5, 0x0455 }, /* Macedonia_dse ѕ CYRILLIC SMALL LETTER DZE */
264 { 0x06a6, 0x0456 }, /* Ukrainian_i і CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */
265 { 0x06a7, 0x0457 }, /* Ukrainian_yi ї CYRILLIC SMALL LETTER YI */
266 { 0x06a8, 0x0458 }, /* Cyrillic_je ј CYRILLIC SMALL LETTER JE */
267 { 0x06a9, 0x0459 }, /* Cyrillic_lje љ CYRILLIC SMALL LETTER LJE */
268 { 0x06aa, 0x045a }, /* Cyrillic_nje њ CYRILLIC SMALL LETTER NJE */
269 { 0x06ab, 0x045b }, /* Serbian_tshe ћ CYRILLIC SMALL LETTER TSHE */
270 { 0x06ac, 0x045c }, /* Macedonia_kje ќ CYRILLIC SMALL LETTER KJE */
271 { 0x06ad, 0x0491 }, /* Ukrainian_ghe_with_upturn ґ CYRILLIC SMALL LETTER GHE WITH UPTURN */
272 { 0x06ae, 0x045e }, /* Byelorussian_shortu ў CYRILLIC SMALL LETTER SHORT U */
273 { 0x06af, 0x045f }, /* Cyrillic_dzhe џ CYRILLIC SMALL LETTER DZHE */
274 { 0x06b0, 0x2116 }, /* numerosign № NUMERO SIGN */
275 { 0x06b1, 0x0402 }, /* Serbian_DJE Ђ CYRILLIC CAPITAL LETTER DJE */
276 { 0x06b2, 0x0403 }, /* Macedonia_GJE Ѓ CYRILLIC CAPITAL LETTER GJE */
277 { 0x06b3, 0x0401 }, /* Cyrillic_IO Ё CYRILLIC CAPITAL LETTER IO */
278 { 0x06b4, 0x0404 }, /* Ukrainian_IE Є CYRILLIC CAPITAL LETTER UKRAINIAN IE */
279 { 0x06b5, 0x0405 }, /* Macedonia_DSE Ѕ CYRILLIC CAPITAL LETTER DZE */
280 { 0x06b6, 0x0406 }, /* Ukrainian_I І CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */
281 { 0x06b7, 0x0407 }, /* Ukrainian_YI Ї CYRILLIC CAPITAL LETTER YI */
282 { 0x06b8, 0x0408 }, /* Cyrillic_JE Ј CYRILLIC CAPITAL LETTER JE */
283 { 0x06b9, 0x0409 }, /* Cyrillic_LJE Љ CYRILLIC CAPITAL LETTER LJE */
284 { 0x06ba, 0x040a }, /* Cyrillic_NJE Њ CYRILLIC CAPITAL LETTER NJE */
285 { 0x06bb, 0x040b }, /* Serbian_TSHE Ћ CYRILLIC CAPITAL LETTER TSHE */
286 { 0x06bc, 0x040c }, /* Macedonia_KJE Ќ CYRILLIC CAPITAL LETTER KJE */
287 { 0x06bd, 0x0490 }, /* Ukrainian_GHE_WITH_UPTURN Ґ CYRILLIC CAPITAL LETTER GHE WITH UPTURN */
288 { 0x06be, 0x040e }, /* Byelorussian_SHORTU Ў CYRILLIC CAPITAL LETTER SHORT U */
289 { 0x06bf, 0x040f }, /* Cyrillic_DZHE Џ CYRILLIC CAPITAL LETTER DZHE */
290 { 0x06c0, 0x044e }, /* Cyrillic_yu ю CYRILLIC SMALL LETTER YU */
291 { 0x06c1, 0x0430 }, /* Cyrillic_a а CYRILLIC SMALL LETTER A */
292 { 0x06c2, 0x0431 }, /* Cyrillic_be б CYRILLIC SMALL LETTER BE */
293 { 0x06c3, 0x0446 }, /* Cyrillic_tse ц CYRILLIC SMALL LETTER TSE */
294 { 0x06c4, 0x0434 }, /* Cyrillic_de д CYRILLIC SMALL LETTER DE */
295 { 0x06c5, 0x0435 }, /* Cyrillic_ie е CYRILLIC SMALL LETTER IE */
296 { 0x06c6, 0x0444 }, /* Cyrillic_ef ф CYRILLIC SMALL LETTER EF */
297 { 0x06c7, 0x0433 }, /* Cyrillic_ghe г CYRILLIC SMALL LETTER GHE */
298 { 0x06c8, 0x0445 }, /* Cyrillic_ha х CYRILLIC SMALL LETTER HA */
299 { 0x06c9, 0x0438 }, /* Cyrillic_i и CYRILLIC SMALL LETTER I */
300 { 0x06ca, 0x0439 }, /* Cyrillic_shorti й CYRILLIC SMALL LETTER SHORT I */
301 { 0x06cb, 0x043a }, /* Cyrillic_ka к CYRILLIC SMALL LETTER KA */
302 { 0x06cc, 0x043b }, /* Cyrillic_el л CYRILLIC SMALL LETTER EL */
303 { 0x06cd, 0x043c }, /* Cyrillic_em м CYRILLIC SMALL LETTER EM */
304 { 0x06ce, 0x043d }, /* Cyrillic_en н CYRILLIC SMALL LETTER EN */
305 { 0x06cf, 0x043e }, /* Cyrillic_o о CYRILLIC SMALL LETTER O */
306 { 0x06d0, 0x043f }, /* Cyrillic_pe п CYRILLIC SMALL LETTER PE */
307 { 0x06d1, 0x044f }, /* Cyrillic_ya я CYRILLIC SMALL LETTER YA */
308 { 0x06d2, 0x0440 }, /* Cyrillic_er р CYRILLIC SMALL LETTER ER */
309 { 0x06d3, 0x0441 }, /* Cyrillic_es с CYRILLIC SMALL LETTER ES */
310 { 0x06d4, 0x0442 }, /* Cyrillic_te т CYRILLIC SMALL LETTER TE */
311 { 0x06d5, 0x0443 }, /* Cyrillic_u у CYRILLIC SMALL LETTER U */
312 { 0x06d6, 0x0436 }, /* Cyrillic_zhe ж CYRILLIC SMALL LETTER ZHE */
313 { 0x06d7, 0x0432 }, /* Cyrillic_ve в CYRILLIC SMALL LETTER VE */
314 { 0x06d8, 0x044c }, /* Cyrillic_softsign ь CYRILLIC SMALL LETTER SOFT SIGN */
315 { 0x06d9, 0x044b }, /* Cyrillic_yeru ы CYRILLIC SMALL LETTER YERU */
316 { 0x06da, 0x0437 }, /* Cyrillic_ze з CYRILLIC SMALL LETTER ZE */
317 { 0x06db, 0x0448 }, /* Cyrillic_sha ш CYRILLIC SMALL LETTER SHA */
318 { 0x06dc, 0x044d }, /* Cyrillic_e э CYRILLIC SMALL LETTER E */
319 { 0x06dd, 0x0449 }, /* Cyrillic_shcha щ CYRILLIC SMALL LETTER SHCHA */
320 { 0x06de, 0x0447 }, /* Cyrillic_che ч CYRILLIC SMALL LETTER CHE */
321 { 0x06df, 0x044a }, /* Cyrillic_hardsign ъ CYRILLIC SMALL LETTER HARD SIGN */
322 { 0x06e0, 0x042e }, /* Cyrillic_YU Ю CYRILLIC CAPITAL LETTER YU */
323 { 0x06e1, 0x0410 }, /* Cyrillic_A А CYRILLIC CAPITAL LETTER A */
324 { 0x06e2, 0x0411 }, /* Cyrillic_BE Б CYRILLIC CAPITAL LETTER BE */
325 { 0x06e3, 0x0426 }, /* Cyrillic_TSE Ц CYRILLIC CAPITAL LETTER TSE */
326 { 0x06e4, 0x0414 }, /* Cyrillic_DE Д CYRILLIC CAPITAL LETTER DE */
327 { 0x06e5, 0x0415 }, /* Cyrillic_IE Е CYRILLIC CAPITAL LETTER IE */
328 { 0x06e6, 0x0424 }, /* Cyrillic_EF Ф CYRILLIC CAPITAL LETTER EF */
329 { 0x06e7, 0x0413 }, /* Cyrillic_GHE Г CYRILLIC CAPITAL LETTER GHE */
330 { 0x06e8, 0x0425 }, /* Cyrillic_HA Х CYRILLIC CAPITAL LETTER HA */
331 { 0x06e9, 0x0418 }, /* Cyrillic_I И CYRILLIC CAPITAL LETTER I */
332 { 0x06ea, 0x0419 }, /* Cyrillic_SHORTI Й CYRILLIC CAPITAL LETTER SHORT I */
333 { 0x06eb, 0x041a }, /* Cyrillic_KA К CYRILLIC CAPITAL LETTER KA */
334 { 0x06ec, 0x041b }, /* Cyrillic_EL Л CYRILLIC CAPITAL LETTER EL */
335 { 0x06ed, 0x041c }, /* Cyrillic_EM М CYRILLIC CAPITAL LETTER EM */
336 { 0x06ee, 0x041d }, /* Cyrillic_EN Н CYRILLIC CAPITAL LETTER EN */
337 { 0x06ef, 0x041e }, /* Cyrillic_O О CYRILLIC CAPITAL LETTER O */
338 { 0x06f0, 0x041f }, /* Cyrillic_PE П CYRILLIC CAPITAL LETTER PE */
339 { 0x06f1, 0x042f }, /* Cyrillic_YA Я CYRILLIC CAPITAL LETTER YA */
340 { 0x06f2, 0x0420 }, /* Cyrillic_ER Р CYRILLIC CAPITAL LETTER ER */
341 { 0x06f3, 0x0421 }, /* Cyrillic_ES С CYRILLIC CAPITAL LETTER ES */
342 { 0x06f4, 0x0422 }, /* Cyrillic_TE Т CYRILLIC CAPITAL LETTER TE */
343 { 0x06f5, 0x0423 }, /* Cyrillic_U У CYRILLIC CAPITAL LETTER U */
344 { 0x06f6, 0x0416 }, /* Cyrillic_ZHE Ж CYRILLIC CAPITAL LETTER ZHE */
345 { 0x06f7, 0x0412 }, /* Cyrillic_VE В CYRILLIC CAPITAL LETTER VE */
346 { 0x06f8, 0x042c }, /* Cyrillic_SOFTSIGN Ь CYRILLIC CAPITAL LETTER SOFT SIGN */
347 { 0x06f9, 0x042b }, /* Cyrillic_YERU Ы CYRILLIC CAPITAL LETTER YERU */
348 { 0x06fa, 0x0417 }, /* Cyrillic_ZE З CYRILLIC CAPITAL LETTER ZE */
349 { 0x06fb, 0x0428 }, /* Cyrillic_SHA Ш CYRILLIC CAPITAL LETTER SHA */
350 { 0x06fc, 0x042d }, /* Cyrillic_E Э CYRILLIC CAPITAL LETTER E */
351 { 0x06fd, 0x0429 }, /* Cyrillic_SHCHA Щ CYRILLIC CAPITAL LETTER SHCHA */
352 { 0x06fe, 0x0427 }, /* Cyrillic_CHE Ч CYRILLIC CAPITAL LETTER CHE */
353 { 0x06ff, 0x042a }, /* Cyrillic_HARDSIGN Ъ CYRILLIC CAPITAL LETTER HARD SIGN */
354 { 0x07a1, 0x0386 }, /* Greek_ALPHAaccent Ά GREEK CAPITAL LETTER ALPHA WITH TONOS */
355 { 0x07a2, 0x0388 }, /* Greek_EPSILONaccent Έ GREEK CAPITAL LETTER EPSILON WITH TONOS */
356 { 0x07a3, 0x0389 }, /* Greek_ETAaccent Ή GREEK CAPITAL LETTER ETA WITH TONOS */
357 { 0x07a4, 0x038a }, /* Greek_IOTAaccent Ί GREEK CAPITAL LETTER IOTA WITH TONOS */
358 { 0x07a5, 0x03aa }, /* Greek_IOTAdieresis Ϊ GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */
359 { 0x07a7, 0x038c }, /* Greek_OMICRONaccent Ό GREEK CAPITAL LETTER OMICRON WITH TONOS */
360 { 0x07a8, 0x038e }, /* Greek_UPSILONaccent Ύ GREEK CAPITAL LETTER UPSILON WITH TONOS */
361 { 0x07a9, 0x03ab }, /* Greek_UPSILONdieresis Ϋ GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */
362 { 0x07ab, 0x038f }, /* Greek_OMEGAaccent Ώ GREEK CAPITAL LETTER OMEGA WITH TONOS */
363 { 0x07ae, 0x0385 }, /* Greek_accentdieresis ΅ GREEK DIALYTIKA TONOS */
364 { 0x07af, 0x2015 }, /* Greek_horizbar ― HORIZONTAL BAR */
365 { 0x07b1, 0x03ac }, /* Greek_alphaaccent ά GREEK SMALL LETTER ALPHA WITH TONOS */
366 { 0x07b2, 0x03ad }, /* Greek_epsilonaccent έ GREEK SMALL LETTER EPSILON WITH TONOS */
367 { 0x07b3, 0x03ae }, /* Greek_etaaccent ή GREEK SMALL LETTER ETA WITH TONOS */
368 { 0x07b4, 0x03af }, /* Greek_iotaaccent ί GREEK SMALL LETTER IOTA WITH TONOS */
369 { 0x07b5, 0x03ca }, /* Greek_iotadieresis ϊ GREEK SMALL LETTER IOTA WITH DIALYTIKA */
370 { 0x07b6, 0x0390 }, /* Greek_iotaaccentdieresis ΐ GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */
371 { 0x07b7, 0x03cc }, /* Greek_omicronaccent ό GREEK SMALL LETTER OMICRON WITH TONOS */
372 { 0x07b8, 0x03cd }, /* Greek_upsilonaccent ύ GREEK SMALL LETTER UPSILON WITH TONOS */
373 { 0x07b9, 0x03cb }, /* Greek_upsilondieresis ϋ GREEK SMALL LETTER UPSILON WITH DIALYTIKA */
374 { 0x07ba, 0x03b0 }, /* Greek_upsilonaccentdieresis ΰ GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */
375 { 0x07bb, 0x03ce }, /* Greek_omegaaccent ώ GREEK SMALL LETTER OMEGA WITH TONOS */
376 { 0x07c1, 0x0391 }, /* Greek_ALPHA Α GREEK CAPITAL LETTER ALPHA */
377 { 0x07c2, 0x0392 }, /* Greek_BETA Β GREEK CAPITAL LETTER BETA */
378 { 0x07c3, 0x0393 }, /* Greek_GAMMA Γ GREEK CAPITAL LETTER GAMMA */
379 { 0x07c4, 0x0394 }, /* Greek_DELTA Δ GREEK CAPITAL LETTER DELTA */
380 { 0x07c5, 0x0395 }, /* Greek_EPSILON Ε GREEK CAPITAL LETTER EPSILON */
381 { 0x07c6, 0x0396 }, /* Greek_ZETA Ζ GREEK CAPITAL LETTER ZETA */
382 { 0x07c7, 0x0397 }, /* Greek_ETA Η GREEK CAPITAL LETTER ETA */
383 { 0x07c8, 0x0398 }, /* Greek_THETA Θ GREEK CAPITAL LETTER THETA */
384 { 0x07c9, 0x0399 }, /* Greek_IOTA Ι GREEK CAPITAL LETTER IOTA */
385 { 0x07ca, 0x039a }, /* Greek_KAPPA Κ GREEK CAPITAL LETTER KAPPA */
386 { 0x07cb, 0x039b }, /* Greek_LAMBDA Λ GREEK CAPITAL LETTER LAMDA */
387 { 0x07cc, 0x039c }, /* Greek_MU Μ GREEK CAPITAL LETTER MU */
388 { 0x07cd, 0x039d }, /* Greek_NU Ν GREEK CAPITAL LETTER NU */
389 { 0x07ce, 0x039e }, /* Greek_XI Ξ GREEK CAPITAL LETTER XI */
390 { 0x07cf, 0x039f }, /* Greek_OMICRON Ο GREEK CAPITAL LETTER OMICRON */
391 { 0x07d0, 0x03a0 }, /* Greek_PI Π GREEK CAPITAL LETTER PI */
392 { 0x07d1, 0x03a1 }, /* Greek_RHO Ρ GREEK CAPITAL LETTER RHO */
393 { 0x07d2, 0x03a3 }, /* Greek_SIGMA Σ GREEK CAPITAL LETTER SIGMA */
394 { 0x07d4, 0x03a4 }, /* Greek_TAU Τ GREEK CAPITAL LETTER TAU */
395 { 0x07d5, 0x03a5 }, /* Greek_UPSILON Υ GREEK CAPITAL LETTER UPSILON */
396 { 0x07d6, 0x03a6 }, /* Greek_PHI Φ GREEK CAPITAL LETTER PHI */
397 { 0x07d7, 0x03a7 }, /* Greek_CHI Χ GREEK CAPITAL LETTER CHI */
398 { 0x07d8, 0x03a8 }, /* Greek_PSI Ψ GREEK CAPITAL LETTER PSI */
399 { 0x07d9, 0x03a9 }, /* Greek_OMEGA Ω GREEK CAPITAL LETTER OMEGA */
400 { 0x07e1, 0x03b1 }, /* Greek_alpha α GREEK SMALL LETTER ALPHA */
401 { 0x07e2, 0x03b2 }, /* Greek_beta β GREEK SMALL LETTER BETA */
402 { 0x07e3, 0x03b3 }, /* Greek_gamma γ GREEK SMALL LETTER GAMMA */
403 { 0x07e4, 0x03b4 }, /* Greek_delta δ GREEK SMALL LETTER DELTA */
404 { 0x07e5, 0x03b5 }, /* Greek_epsilon ε GREEK SMALL LETTER EPSILON */
405 { 0x07e6, 0x03b6 }, /* Greek_zeta ζ GREEK SMALL LETTER ZETA */
406 { 0x07e7, 0x03b7 }, /* Greek_eta η GREEK SMALL LETTER ETA */
407 { 0x07e8, 0x03b8 }, /* Greek_theta θ GREEK SMALL LETTER THETA */
408 { 0x07e9, 0x03b9 }, /* Greek_iota ι GREEK SMALL LETTER IOTA */
409 { 0x07ea, 0x03ba }, /* Greek_kappa κ GREEK SMALL LETTER KAPPA */
410 { 0x07eb, 0x03bb }, /* Greek_lambda λ GREEK SMALL LETTER LAMDA */
411 { 0x07ec, 0x03bc }, /* Greek_mu μ GREEK SMALL LETTER MU */
412 { 0x07ed, 0x03bd }, /* Greek_nu ν GREEK SMALL LETTER NU */
413 { 0x07ee, 0x03be }, /* Greek_xi ξ GREEK SMALL LETTER XI */
414 { 0x07ef, 0x03bf }, /* Greek_omicron ο GREEK SMALL LETTER OMICRON */
415 { 0x07f0, 0x03c0 }, /* Greek_pi π GREEK SMALL LETTER PI */
416 { 0x07f1, 0x03c1 }, /* Greek_rho ρ GREEK SMALL LETTER RHO */
417 { 0x07f2, 0x03c3 }, /* Greek_sigma σ GREEK SMALL LETTER SIGMA */
418 { 0x07f3, 0x03c2 }, /* Greek_finalsmallsigma ς GREEK SMALL LETTER FINAL SIGMA */
419 { 0x07f4, 0x03c4 }, /* Greek_tau τ GREEK SMALL LETTER TAU */
420 { 0x07f5, 0x03c5 }, /* Greek_upsilon υ GREEK SMALL LETTER UPSILON */
421 { 0x07f6, 0x03c6 }, /* Greek_phi φ GREEK SMALL LETTER PHI */
422 { 0x07f7, 0x03c7 }, /* Greek_chi χ GREEK SMALL LETTER CHI */
423 { 0x07f8, 0x03c8 }, /* Greek_psi ψ GREEK SMALL LETTER PSI */
424 { 0x07f9, 0x03c9 }, /* Greek_omega ω GREEK SMALL LETTER OMEGA */
425 /* 0x08a1 leftradical ? ??? */
426 /* 0x08a2 topleftradical ? ??? */
427 /* 0x08a3 horizconnector ? ??? */
428 { 0x08a4, 0x2320 }, /* topintegral ⌠ TOP HALF INTEGRAL */
429 { 0x08a5, 0x2321 }, /* botintegral ⌡ BOTTOM HALF INTEGRAL */
430 { 0x08a6, 0x2502 }, /* vertconnector │ BOX DRAWINGS LIGHT VERTICAL */
431 /* 0x08a7 topleftsqbracket ? ??? */
432 /* 0x08a8 botleftsqbracket ? ??? */
433 /* 0x08a9 toprightsqbracket ? ??? */
434 /* 0x08aa botrightsqbracket ? ??? */
435 /* 0x08ab topleftparens ? ??? */
436 /* 0x08ac botleftparens ? ??? */
437 /* 0x08ad toprightparens ? ??? */
438 /* 0x08ae botrightparens ? ??? */
439 /* 0x08af leftmiddlecurlybrace ? ??? */
440 /* 0x08b0 rightmiddlecurlybrace ? ??? */
441 /* 0x08b1 topleftsummation ? ??? */
442 /* 0x08b2 botleftsummation ? ??? */
443 /* 0x08b3 topvertsummationconnector ? ??? */
444 /* 0x08b4 botvertsummationconnector ? ??? */
445 /* 0x08b5 toprightsummation ? ??? */
446 /* 0x08b6 botrightsummation ? ??? */
447 /* 0x08b7 rightmiddlesummation ? ??? */
448 { 0x08bc, 0x2264 }, /* lessthanequal ≤ LESS-THAN OR EQUAL TO */
449 { 0x08bd, 0x2260 }, /* notequal ≠ NOT EQUAL TO */
450 { 0x08be, 0x2265 }, /* greaterthanequal ≥ GREATER-THAN OR EQUAL TO */
451 { 0x08bf, 0x222b }, /* integral ∫ INTEGRAL */
452 { 0x08c0, 0x2234 }, /* therefore ∴ THEREFORE */
453 { 0x08c1, 0x221d }, /* variation ∝ PROPORTIONAL TO */
454 { 0x08c2, 0x221e }, /* infinity ∞ INFINITY */
455 { 0x08c5, 0x2207 }, /* nabla ∇ NABLA */
456 { 0x08c8, 0x2245 }, /* approximate ≅ APPROXIMATELY EQUAL TO */
457 /* 0x08c9 similarequal ? ??? */
458 { 0x08cd, 0x21d4 }, /* ifonlyif ⇔ LEFT RIGHT DOUBLE ARROW */
459 { 0x08ce, 0x21d2 }, /* implies ⇒ RIGHTWARDS DOUBLE ARROW */
460 { 0x08cf, 0x2261 }, /* identical ≡ IDENTICAL TO */
461 { 0x08d6, 0x221a }, /* radical √ SQUARE ROOT */
462 { 0x08da, 0x2282 }, /* includedin ⊂ SUBSET OF */
463 { 0x08db, 0x2283 }, /* includes ⊃ SUPERSET OF */
464 { 0x08dc, 0x2229 }, /* intersection ∩ INTERSECTION */
465 { 0x08dd, 0x222a }, /* union ∪ UNION */
466 { 0x08de, 0x2227 }, /* logicaland ∧ LOGICAL AND */
467 { 0x08df, 0x2228 }, /* logicalor ∨ LOGICAL OR */
468 { 0x08ef, 0x2202 }, /* partialderivative ∂ PARTIAL DIFFERENTIAL */
469 { 0x08f6, 0x0192 }, /* function ƒ LATIN SMALL LETTER F WITH HOOK */
470 { 0x08fb, 0x2190 }, /* leftarrow ← LEFTWARDS ARROW */
471 { 0x08fc, 0x2191 }, /* uparrow ↑ UPWARDS ARROW */
472 { 0x08fd, 0x2192 }, /* rightarrow → RIGHTWARDS ARROW */
473 { 0x08fe, 0x2193 }, /* downarrow ↓ DOWNWARDS ARROW */
474 { 0x09df, 0x2422 }, /* blank ␢ BLANK SYMBOL */
475 { 0x09e0, 0x25c6 }, /* soliddiamond ◆ BLACK DIAMOND */
476 { 0x09e1, 0x2592 }, /* checkerboard ▒ MEDIUM SHADE */
477 { 0x09e2, 0x2409 }, /* ht ␉ SYMBOL FOR HORIZONTAL TABULATION */
478 { 0x09e3, 0x240c }, /* ff ␌ SYMBOL FOR FORM FEED */
479 { 0x09e4, 0x240d }, /* cr ␍ SYMBOL FOR CARRIAGE RETURN */
480 { 0x09e5, 0x240a }, /* lf ␊ SYMBOL FOR LINE FEED */
481 { 0x09e8, 0x2424 }, /* nl ␤ SYMBOL FOR NEWLINE */
482 { 0x09e9, 0x240b }, /* vt ␋ SYMBOL FOR VERTICAL TABULATION */
483 { 0x09ea, 0x2518 }, /* lowrightcorner ┘ BOX DRAWINGS LIGHT UP AND LEFT */
484 { 0x09eb, 0x2510 }, /* uprightcorner ┐ BOX DRAWINGS LIGHT DOWN AND LEFT */
485 { 0x09ec, 0x250c }, /* upleftcorner ┌ BOX DRAWINGS LIGHT DOWN AND RIGHT */
486 { 0x09ed, 0x2514 }, /* lowleftcorner └ BOX DRAWINGS LIGHT UP AND RIGHT */
487 { 0x09ee, 0x253c }, /* crossinglines ┼ BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */
488 /* 0x09ef horizlinescan1 ? ??? */
489 /* 0x09f0 horizlinescan3 ? ??? */
490 { 0x09f1, 0x2500 }, /* horizlinescan5 ─ BOX DRAWINGS LIGHT HORIZONTAL */
491 /* 0x09f2 horizlinescan7 ? ??? */
492 /* 0x09f3 horizlinescan9 ? ??? */
493 { 0x09f4, 0x251c }, /* leftt ├ BOX DRAWINGS LIGHT VERTICAL AND RIGHT */
494 { 0x09f5, 0x2524 }, /* rightt ┤ BOX DRAWINGS LIGHT VERTICAL AND LEFT */
495 { 0x09f6, 0x2534 }, /* bott ┴ BOX DRAWINGS LIGHT UP AND HORIZONTAL */
496 { 0x09f7, 0x252c }, /* topt ┬ BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */
497 { 0x09f8, 0x2502 }, /* vertbar │ BOX DRAWINGS LIGHT VERTICAL */
498 { 0x0aa1, 0x2003 }, /* emspace   EM SPACE */
499 { 0x0aa2, 0x2002 }, /* enspace   EN SPACE */
500 { 0x0aa3, 0x2004 }, /* em3space   THREE-PER-EM SPACE */
501 { 0x0aa4, 0x2005 }, /* em4space   FOUR-PER-EM SPACE */
502 { 0x0aa5, 0x2007 }, /* digitspace   FIGURE SPACE */
503 { 0x0aa6, 0x2008 }, /* punctspace   PUNCTUATION SPACE */
504 { 0x0aa7, 0x2009 }, /* thinspace   THIN SPACE */
505 { 0x0aa8, 0x200a }, /* hairspace   HAIR SPACE */
506 { 0x0aa9, 0x2014 }, /* emdash — EM DASH */
507 { 0x0aaa, 0x2013 }, /* endash – EN DASH */
508 /* 0x0aac signifblank ? ??? */
509 { 0x0aae, 0x2026 }, /* ellipsis … HORIZONTAL ELLIPSIS */
510 /* 0x0aaf doubbaselinedot ? ??? */
511 { 0x0ab0, 0x2153 }, /* onethird ⅓ VULGAR FRACTION ONE THIRD */
512 { 0x0ab1, 0x2154 }, /* twothirds ⅔ VULGAR FRACTION TWO THIRDS */
513 { 0x0ab2, 0x2155 }, /* onefifth ⅕ VULGAR FRACTION ONE FIFTH */
514 { 0x0ab3, 0x2156 }, /* twofifths ⅖ VULGAR FRACTION TWO FIFTHS */
515 { 0x0ab4, 0x2157 }, /* threefifths ⅗ VULGAR FRACTION THREE FIFTHS */
516 { 0x0ab5, 0x2158 }, /* fourfifths ⅘ VULGAR FRACTION FOUR FIFTHS */
517 { 0x0ab6, 0x2159 }, /* onesixth ⅙ VULGAR FRACTION ONE SIXTH */
518 { 0x0ab7, 0x215a }, /* fivesixths ⅚ VULGAR FRACTION FIVE SIXTHS */
519 { 0x0ab8, 0x2105 }, /* careof ℅ CARE OF */
520 { 0x0abb, 0x2012 }, /* figdash ‒ FIGURE DASH */
521 { 0x0abc, 0x2329 }, /* leftanglebracket 〈 LEFT-POINTING ANGLE BRACKET */
522 { 0x0abd, 0x002e }, /* decimalpoint . FULL STOP */
523 { 0x0abe, 0x232a }, /* rightanglebracket 〉 RIGHT-POINTING ANGLE BRACKET */
524 /* 0x0abf marker ? ??? */
525 { 0x0ac3, 0x215b }, /* oneeighth ⅛ VULGAR FRACTION ONE EIGHTH */
526 { 0x0ac4, 0x215c }, /* threeeighths ⅜ VULGAR FRACTION THREE EIGHTHS */
527 { 0x0ac5, 0x215d }, /* fiveeighths ⅝ VULGAR FRACTION FIVE EIGHTHS */
528 { 0x0ac6, 0x215e }, /* seveneighths ⅞ VULGAR FRACTION SEVEN EIGHTHS */
529 { 0x0ac9, 0x2122 }, /* trademark ™ TRADE MARK SIGN */
530 { 0x0aca, 0x2613 }, /* signaturemark ☓ SALTIRE */
531 /* 0x0acb trademarkincircle ? ??? */
532 { 0x0acc, 0x25c1 }, /* leftopentriangle ◁ WHITE LEFT-POINTING TRIANGLE */
533 { 0x0acd, 0x25b7 }, /* rightopentriangle ▷ WHITE RIGHT-POINTING TRIANGLE */
534 { 0x0ace, 0x25cb }, /* emopencircle ○ WHITE CIRCLE */
535 { 0x0acf, 0x25a1 }, /* emopenrectangle □ WHITE SQUARE */
536 { 0x0ad0, 0x2018 }, /* leftsinglequotemark ‘ LEFT SINGLE QUOTATION MARK */
537 { 0x0ad1, 0x2019 }, /* rightsinglequotemark ’ RIGHT SINGLE QUOTATION MARK */
538 { 0x0ad2, 0x201c }, /* leftdoublequotemark “ LEFT DOUBLE QUOTATION MARK */
539 { 0x0ad3, 0x201d }, /* rightdoublequotemark ” RIGHT DOUBLE QUOTATION MARK */
540 { 0x0ad4, 0x211e }, /* prescription ℞ PRESCRIPTION TAKE */
541 { 0x0ad6, 0x2032 }, /* minutes ′ PRIME */
542 { 0x0ad7, 0x2033 }, /* seconds ″ DOUBLE PRIME */
543 { 0x0ad9, 0x271d }, /* latincross ✝ LATIN CROSS */
544 /* 0x0ada hexagram ? ??? */
545 { 0x0adb, 0x25ac }, /* filledrectbullet ▬ BLACK RECTANGLE */
546 { 0x0adc, 0x25c0 }, /* filledlefttribullet ◀ BLACK LEFT-POINTING TRIANGLE */
547 { 0x0add, 0x25b6 }, /* filledrighttribullet ▶ BLACK RIGHT-POINTING TRIANGLE */
548 { 0x0ade, 0x25cf }, /* emfilledcircle ● BLACK CIRCLE */
549 { 0x0adf, 0x25a0 }, /* emfilledrect ■ BLACK SQUARE */
550 { 0x0ae0, 0x25e6 }, /* enopencircbullet ◦ WHITE BULLET */
551 { 0x0ae1, 0x25ab }, /* enopensquarebullet ▫ WHITE SMALL SQUARE */
552 { 0x0ae2, 0x25ad }, /* openrectbullet ▭ WHITE RECTANGLE */
553 { 0x0ae3, 0x25b3 }, /* opentribulletup △ WHITE UP-POINTING TRIANGLE */
554 { 0x0ae4, 0x25bd }, /* opentribulletdown ▽ WHITE DOWN-POINTING TRIANGLE */
555 { 0x0ae5, 0x2606 }, /* openstar ☆ WHITE STAR */
556 { 0x0ae6, 0x2022 }, /* enfilledcircbullet • BULLET */
557 { 0x0ae7, 0x25aa }, /* enfilledsqbullet ▪ BLACK SMALL SQUARE */
558 { 0x0ae8, 0x25b2 }, /* filledtribulletup ▲ BLACK UP-POINTING TRIANGLE */
559 { 0x0ae9, 0x25bc }, /* filledtribulletdown ▼ BLACK DOWN-POINTING TRIANGLE */
560 { 0x0aea, 0x261c }, /* leftpointer ☜ WHITE LEFT POINTING INDEX */
561 { 0x0aeb, 0x261e }, /* rightpointer ☞ WHITE RIGHT POINTING INDEX */
562 { 0x0aec, 0x2663 }, /* club ♣ BLACK CLUB SUIT */
563 { 0x0aed, 0x2666 }, /* diamond ♦ BLACK DIAMOND SUIT */
564 { 0x0aee, 0x2665 }, /* heart ♥ BLACK HEART SUIT */
565 { 0x0af0, 0x2720 }, /* maltesecross ✠ MALTESE CROSS */
566 { 0x0af1, 0x2020 }, /* dagger † DAGGER */
567 { 0x0af2, 0x2021 }, /* doubledagger ‡ DOUBLE DAGGER */
568 { 0x0af3, 0x2713 }, /* checkmark ✓ CHECK MARK */
569 { 0x0af4, 0x2717 }, /* ballotcross ✗ BALLOT X */
570 { 0x0af5, 0x266f }, /* musicalsharp ♯ MUSIC SHARP SIGN */
571 { 0x0af6, 0x266d }, /* musicalflat ♭ MUSIC FLAT SIGN */
572 { 0x0af7, 0x2642 }, /* malesymbol ♂ MALE SIGN */
573 { 0x0af8, 0x2640 }, /* femalesymbol ♀ FEMALE SIGN */
574 { 0x0af9, 0x260e }, /* telephone ☎ BLACK TELEPHONE */
575 { 0x0afa, 0x2315 }, /* telephonerecorder ⌕ TELEPHONE RECORDER */
576 { 0x0afb, 0x2117 }, /* phonographcopyright ℗ SOUND RECORDING COPYRIGHT */
577 { 0x0afc, 0x2038 }, /* caret ‸ CARET */
578 { 0x0afd, 0x201a }, /* singlelowquotemark ‚ SINGLE LOW-9 QUOTATION MARK */
579 { 0x0afe, 0x201e }, /* doublelowquotemark „ DOUBLE LOW-9 QUOTATION MARK */
580 /* 0x0aff cursor ? ??? */
581 { 0x0ba3, 0x003c }, /* leftcaret < LESS-THAN SIGN */
582 { 0x0ba6, 0x003e }, /* rightcaret > GREATER-THAN SIGN */
583 { 0x0ba8, 0x2228 }, /* downcaret ∨ LOGICAL OR */
584 { 0x0ba9, 0x2227 }, /* upcaret ∧ LOGICAL AND */
585 { 0x0bc0, 0x00af }, /* overbar ¯ MACRON */
586 { 0x0bc2, 0x22a4 }, /* downtack ⊤ DOWN TACK */
587 { 0x0bc3, 0x2229 }, /* upshoe ∩ INTERSECTION */
588 { 0x0bc4, 0x230a }, /* downstile ⌊ LEFT FLOOR */
589 { 0x0bc6, 0x005f }, /* underbar _ LOW LINE */
590 { 0x0bca, 0x2218 }, /* jot ∘ RING OPERATOR */
591 { 0x0bcc, 0x2395 }, /* quad ⎕ APL FUNCTIONAL SYMBOL QUAD (Unicode 3.0) */
592 { 0x0bce, 0x22a5 }, /* uptack ⊥ UP TACK */
593 { 0x0bcf, 0x25cb }, /* circle ○ WHITE CIRCLE */
594 { 0x0bd3, 0x2308 }, /* upstile ⌈ LEFT CEILING */
595 { 0x0bd6, 0x222a }, /* downshoe ∪ UNION */
596 { 0x0bd8, 0x2283 }, /* rightshoe ⊃ SUPERSET OF */
597 { 0x0bda, 0x2282 }, /* leftshoe ⊂ SUBSET OF */
598 { 0x0bdc, 0x22a3 }, /* lefttack ⊣ LEFT TACK */
599 { 0x0bfc, 0x22a2 }, /* righttack ⊢ RIGHT TACK */
600 { 0x0cdf, 0x2017 }, /* hebrew_doublelowline ‗ DOUBLE LOW LINE */
601 { 0x0ce0, 0x05d0 }, /* hebrew_aleph א HEBREW LETTER ALEF */
602 { 0x0ce1, 0x05d1 }, /* hebrew_bet ב HEBREW LETTER BET */
603 { 0x0ce2, 0x05d2 }, /* hebrew_gimel ג HEBREW LETTER GIMEL */
604 { 0x0ce3, 0x05d3 }, /* hebrew_dalet ד HEBREW LETTER DALET */
605 { 0x0ce4, 0x05d4 }, /* hebrew_he ה HEBREW LETTER HE */
606 { 0x0ce5, 0x05d5 }, /* hebrew_waw ו HEBREW LETTER VAV */
607 { 0x0ce6, 0x05d6 }, /* hebrew_zain ז HEBREW LETTER ZAYIN */
608 { 0x0ce7, 0x05d7 }, /* hebrew_chet ח HEBREW LETTER HET */
609 { 0x0ce8, 0x05d8 }, /* hebrew_tet ט HEBREW LETTER TET */
610 { 0x0ce9, 0x05d9 }, /* hebrew_yod י HEBREW LETTER YOD */
611 { 0x0cea, 0x05da }, /* hebrew_finalkaph ך HEBREW LETTER FINAL KAF */
612 { 0x0ceb, 0x05db }, /* hebrew_kaph כ HEBREW LETTER KAF */
613 { 0x0cec, 0x05dc }, /* hebrew_lamed ל HEBREW LETTER LAMED */
614 { 0x0ced, 0x05dd }, /* hebrew_finalmem ם HEBREW LETTER FINAL MEM */
615 { 0x0cee, 0x05de }, /* hebrew_mem מ HEBREW LETTER MEM */
616 { 0x0cef, 0x05df }, /* hebrew_finalnun ן HEBREW LETTER FINAL NUN */
617 { 0x0cf0, 0x05e0 }, /* hebrew_nun נ HEBREW LETTER NUN */
618 { 0x0cf1, 0x05e1 }, /* hebrew_samech ס HEBREW LETTER SAMEKH */
619 { 0x0cf2, 0x05e2 }, /* hebrew_ayin ע HEBREW LETTER AYIN */
620 { 0x0cf3, 0x05e3 }, /* hebrew_finalpe ף HEBREW LETTER FINAL PE */
621 { 0x0cf4, 0x05e4 }, /* hebrew_pe פ HEBREW LETTER PE */
622 { 0x0cf5, 0x05e5 }, /* hebrew_finalzade ץ HEBREW LETTER FINAL TSADI */
623 { 0x0cf6, 0x05e6 }, /* hebrew_zade צ HEBREW LETTER TSADI */
624 { 0x0cf7, 0x05e7 }, /* hebrew_qoph ק HEBREW LETTER QOF */
625 { 0x0cf8, 0x05e8 }, /* hebrew_resh ר HEBREW LETTER RESH */
626 { 0x0cf9, 0x05e9 }, /* hebrew_shin ש HEBREW LETTER SHIN */
627 { 0x0cfa, 0x05ea }, /* hebrew_taw ת HEBREW LETTER TAV */
628 { 0x0da1, 0x0e01 }, /* Thai_kokai ก THAI CHARACTER KO KAI */
629 { 0x0da2, 0x0e02 }, /* Thai_khokhai ข THAI CHARACTER KHO KHAI */
630 { 0x0da3, 0x0e03 }, /* Thai_khokhuat ฃ THAI CHARACTER KHO KHUAT */
631 { 0x0da4, 0x0e04 }, /* Thai_khokhwai ค THAI CHARACTER KHO KHWAI */
632 { 0x0da5, 0x0e05 }, /* Thai_khokhon ฅ THAI CHARACTER KHO KHON */
633 { 0x0da6, 0x0e06 }, /* Thai_khorakhang ฆ THAI CHARACTER KHO RAKHANG */
634 { 0x0da7, 0x0e07 }, /* Thai_ngongu ง THAI CHARACTER NGO NGU */
635 { 0x0da8, 0x0e08 }, /* Thai_chochan จ THAI CHARACTER CHO CHAN */
636 { 0x0da9, 0x0e09 }, /* Thai_choching ฉ THAI CHARACTER CHO CHING */
637 { 0x0daa, 0x0e0a }, /* Thai_chochang ช THAI CHARACTER CHO CHANG */
638 { 0x0dab, 0x0e0b }, /* Thai_soso ซ THAI CHARACTER SO SO */
639 { 0x0dac, 0x0e0c }, /* Thai_chochoe ฌ THAI CHARACTER CHO CHOE */
640 { 0x0dad, 0x0e0d }, /* Thai_yoying ญ THAI CHARACTER YO YING */
641 { 0x0dae, 0x0e0e }, /* Thai_dochada ฎ THAI CHARACTER DO CHADA */
642 { 0x0daf, 0x0e0f }, /* Thai_topatak ฏ THAI CHARACTER TO PATAK */
643 { 0x0db0, 0x0e10 }, /* Thai_thothan ฐ THAI CHARACTER THO THAN */
644 { 0x0db1, 0x0e11 }, /* Thai_thonangmontho ฑ THAI CHARACTER THO NANGMONTHO */
645 { 0x0db2, 0x0e12 }, /* Thai_thophuthao ฒ THAI CHARACTER THO PHUTHAO */
646 { 0x0db3, 0x0e13 }, /* Thai_nonen ณ THAI CHARACTER NO NEN */
647 { 0x0db4, 0x0e14 }, /* Thai_dodek ด THAI CHARACTER DO DEK */
648 { 0x0db5, 0x0e15 }, /* Thai_totao ต THAI CHARACTER TO TAO */
649 { 0x0db6, 0x0e16 }, /* Thai_thothung ถ THAI CHARACTER THO THUNG */
650 { 0x0db7, 0x0e17 }, /* Thai_thothahan ท THAI CHARACTER THO THAHAN */
651 { 0x0db8, 0x0e18 }, /* Thai_thothong ธ THAI CHARACTER THO THONG */
652 { 0x0db9, 0x0e19 }, /* Thai_nonu น THAI CHARACTER NO NU */
653 { 0x0dba, 0x0e1a }, /* Thai_bobaimai บ THAI CHARACTER BO BAIMAI */
654 { 0x0dbb, 0x0e1b }, /* Thai_popla ป THAI CHARACTER PO PLA */
655 { 0x0dbc, 0x0e1c }, /* Thai_phophung ผ THAI CHARACTER PHO PHUNG */
656 { 0x0dbd, 0x0e1d }, /* Thai_fofa ฝ THAI CHARACTER FO FA */
657 { 0x0dbe, 0x0e1e }, /* Thai_phophan พ THAI CHARACTER PHO PHAN */
658 { 0x0dbf, 0x0e1f }, /* Thai_fofan ฟ THAI CHARACTER FO FAN */
659 { 0x0dc0, 0x0e20 }, /* Thai_phosamphao ภ THAI CHARACTER PHO SAMPHAO */
660 { 0x0dc1, 0x0e21 }, /* Thai_moma ม THAI CHARACTER MO MA */
661 { 0x0dc2, 0x0e22 }, /* Thai_yoyak ย THAI CHARACTER YO YAK */
662 { 0x0dc3, 0x0e23 }, /* Thai_rorua ร THAI CHARACTER RO RUA */
663 { 0x0dc4, 0x0e24 }, /* Thai_ru ฤ THAI CHARACTER RU */
664 { 0x0dc5, 0x0e25 }, /* Thai_loling ล THAI CHARACTER LO LING */
665 { 0x0dc6, 0x0e26 }, /* Thai_lu ฦ THAI CHARACTER LU */
666 { 0x0dc7, 0x0e27 }, /* Thai_wowaen ว THAI CHARACTER WO WAEN */
667 { 0x0dc8, 0x0e28 }, /* Thai_sosala ศ THAI CHARACTER SO SALA */
668 { 0x0dc9, 0x0e29 }, /* Thai_sorusi ษ THAI CHARACTER SO RUSI */
669 { 0x0dca, 0x0e2a }, /* Thai_sosua ส THAI CHARACTER SO SUA */
670 { 0x0dcb, 0x0e2b }, /* Thai_hohip ห THAI CHARACTER HO HIP */
671 { 0x0dcc, 0x0e2c }, /* Thai_lochula ฬ THAI CHARACTER LO CHULA */
672 { 0x0dcd, 0x0e2d }, /* Thai_oang อ THAI CHARACTER O ANG */
673 { 0x0dce, 0x0e2e }, /* Thai_honokhuk ฮ THAI CHARACTER HO NOKHUK */
674 { 0x0dcf, 0x0e2f }, /* Thai_paiyannoi ฯ THAI CHARACTER PAIYANNOI */
675 { 0x0dd0, 0x0e30 }, /* Thai_saraa ะ THAI CHARACTER SARA A */
676 { 0x0dd1, 0x0e31 }, /* Thai_maihanakat ั THAI CHARACTER MAI HAN-AKAT */
677 { 0x0dd2, 0x0e32 }, /* Thai_saraaa า THAI CHARACTER SARA AA */
678 { 0x0dd3, 0x0e33 }, /* Thai_saraam ำ THAI CHARACTER SARA AM */
679 { 0x0dd4, 0x0e34 }, /* Thai_sarai ิ THAI CHARACTER SARA I */
680 { 0x0dd5, 0x0e35 }, /* Thai_saraii ี THAI CHARACTER SARA II */
681 { 0x0dd6, 0x0e36 }, /* Thai_saraue ึ THAI CHARACTER SARA UE */
682 { 0x0dd7, 0x0e37 }, /* Thai_sarauee ื THAI CHARACTER SARA UEE */
683 { 0x0dd8, 0x0e38 }, /* Thai_sarau ุ THAI CHARACTER SARA U */
684 { 0x0dd9, 0x0e39 }, /* Thai_sarauu ู THAI CHARACTER SARA UU */
685 { 0x0dda, 0x0e3a }, /* Thai_phinthu ฺ THAI CHARACTER PHINTHU */
686 { 0x0dde, 0x0e3e }, /* Thai_maihanakat_maitho ฾ ??? */
687 { 0x0ddf, 0x0e3f }, /* Thai_baht ฿ THAI CURRENCY SYMBOL BAHT */
688 { 0x0de0, 0x0e40 }, /* Thai_sarae เ THAI CHARACTER SARA E */
689 { 0x0de1, 0x0e41 }, /* Thai_saraae แ THAI CHARACTER SARA AE */
690 { 0x0de2, 0x0e42 }, /* Thai_sarao โ THAI CHARACTER SARA O */
691 { 0x0de3, 0x0e43 }, /* Thai_saraaimaimuan ใ THAI CHARACTER SARA AI MAIMUAN */
692 { 0x0de4, 0x0e44 }, /* Thai_saraaimaimalai ไ THAI CHARACTER SARA AI MAIMALAI */
693 { 0x0de5, 0x0e45 }, /* Thai_lakkhangyao ๅ THAI CHARACTER LAKKHANGYAO */
694 { 0x0de6, 0x0e46 }, /* Thai_maiyamok ๆ THAI CHARACTER MAIYAMOK */
695 { 0x0de7, 0x0e47 }, /* Thai_maitaikhu ็ THAI CHARACTER MAITAIKHU */
696 { 0x0de8, 0x0e48 }, /* Thai_maiek ่ THAI CHARACTER MAI EK */
697 { 0x0de9, 0x0e49 }, /* Thai_maitho ้ THAI CHARACTER MAI THO */
698 { 0x0dea, 0x0e4a }, /* Thai_maitri ๊ THAI CHARACTER MAI TRI */
699 { 0x0deb, 0x0e4b }, /* Thai_maichattawa ๋ THAI CHARACTER MAI CHATTAWA */
700 { 0x0dec, 0x0e4c }, /* Thai_thanthakhat ์ THAI CHARACTER THANTHAKHAT */
701 { 0x0ded, 0x0e4d }, /* Thai_nikhahit ํ THAI CHARACTER NIKHAHIT */
702 { 0x0df0, 0x0e50 }, /* Thai_leksun ๐ THAI DIGIT ZERO */
703 { 0x0df1, 0x0e51 }, /* Thai_leknung ๑ THAI DIGIT ONE */
704 { 0x0df2, 0x0e52 }, /* Thai_leksong ๒ THAI DIGIT TWO */
705 { 0x0df3, 0x0e53 }, /* Thai_leksam ๓ THAI DIGIT THREE */
706 { 0x0df4, 0x0e54 }, /* Thai_leksi ๔ THAI DIGIT FOUR */
707 { 0x0df5, 0x0e55 }, /* Thai_lekha ๕ THAI DIGIT FIVE */
708 { 0x0df6, 0x0e56 }, /* Thai_lekhok ๖ THAI DIGIT SIX */
709 { 0x0df7, 0x0e57 }, /* Thai_lekchet ๗ THAI DIGIT SEVEN */
710 { 0x0df8, 0x0e58 }, /* Thai_lekpaet ๘ THAI DIGIT EIGHT */
711 { 0x0df9, 0x0e59 }, /* Thai_lekkao ๙ THAI DIGIT NINE */
712 { 0x0ea1, 0x3131 }, /* Hangul_Kiyeog ㄱ HANGUL LETTER KIYEOK */
713 { 0x0ea2, 0x3132 }, /* Hangul_SsangKiyeog ㄲ HANGUL LETTER SSANGKIYEOK */
714 { 0x0ea3, 0x3133 }, /* Hangul_KiyeogSios ㄳ HANGUL LETTER KIYEOK-SIOS */
715 { 0x0ea4, 0x3134 }, /* Hangul_Nieun ㄴ HANGUL LETTER NIEUN */
716 { 0x0ea5, 0x3135 }, /* Hangul_NieunJieuj ㄵ HANGUL LETTER NIEUN-CIEUC */
717 { 0x0ea6, 0x3136 }, /* Hangul_NieunHieuh ㄶ HANGUL LETTER NIEUN-HIEUH */
718 { 0x0ea7, 0x3137 }, /* Hangul_Dikeud ㄷ HANGUL LETTER TIKEUT */
719 { 0x0ea8, 0x3138 }, /* Hangul_SsangDikeud ㄸ HANGUL LETTER SSANGTIKEUT */
720 { 0x0ea9, 0x3139 }, /* Hangul_Rieul ㄹ HANGUL LETTER RIEUL */
721 { 0x0eaa, 0x313a }, /* Hangul_RieulKiyeog ㄺ HANGUL LETTER RIEUL-KIYEOK */
722 { 0x0eab, 0x313b }, /* Hangul_RieulMieum ㄻ HANGUL LETTER RIEUL-MIEUM */
723 { 0x0eac, 0x313c }, /* Hangul_RieulPieub ㄼ HANGUL LETTER RIEUL-PIEUP */
724 { 0x0ead, 0x313d }, /* Hangul_RieulSios ㄽ HANGUL LETTER RIEUL-SIOS */
725 { 0x0eae, 0x313e }, /* Hangul_RieulTieut ㄾ HANGUL LETTER RIEUL-THIEUTH */
726 { 0x0eaf, 0x313f }, /* Hangul_RieulPhieuf ㄿ HANGUL LETTER RIEUL-PHIEUPH */
727 { 0x0eb0, 0x3140 }, /* Hangul_RieulHieuh ㅀ HANGUL LETTER RIEUL-HIEUH */
728 { 0x0eb1, 0x3141 }, /* Hangul_Mieum ㅁ HANGUL LETTER MIEUM */
729 { 0x0eb2, 0x3142 }, /* Hangul_Pieub ㅂ HANGUL LETTER PIEUP */
730 { 0x0eb3, 0x3143 }, /* Hangul_SsangPieub ㅃ HANGUL LETTER SSANGPIEUP */
731 { 0x0eb4, 0x3144 }, /* Hangul_PieubSios ㅄ HANGUL LETTER PIEUP-SIOS */
732 { 0x0eb5, 0x3145 }, /* Hangul_Sios ㅅ HANGUL LETTER SIOS */
733 { 0x0eb6, 0x3146 }, /* Hangul_SsangSios ㅆ HANGUL LETTER SSANGSIOS */
734 { 0x0eb7, 0x3147 }, /* Hangul_Ieung ㅇ HANGUL LETTER IEUNG */
735 { 0x0eb8, 0x3148 }, /* Hangul_Jieuj ㅈ HANGUL LETTER CIEUC */
736 { 0x0eb9, 0x3149 }, /* Hangul_SsangJieuj ㅉ HANGUL LETTER SSANGCIEUC */
737 { 0x0eba, 0x314a }, /* Hangul_Cieuc ㅊ HANGUL LETTER CHIEUCH */
738 { 0x0ebb, 0x314b }, /* Hangul_Khieuq ㅋ HANGUL LETTER KHIEUKH */
739 { 0x0ebc, 0x314c }, /* Hangul_Tieut ㅌ HANGUL LETTER THIEUTH */
740 { 0x0ebd, 0x314d }, /* Hangul_Phieuf ㅍ HANGUL LETTER PHIEUPH */
741 { 0x0ebe, 0x314e }, /* Hangul_Hieuh ㅎ HANGUL LETTER HIEUH */
742 { 0x0ebf, 0x314f }, /* Hangul_A ㅏ HANGUL LETTER A */
743 { 0x0ec0, 0x3150 }, /* Hangul_AE ㅐ HANGUL LETTER AE */
744 { 0x0ec1, 0x3151 }, /* Hangul_YA ㅑ HANGUL LETTER YA */
745 { 0x0ec2, 0x3152 }, /* Hangul_YAE ㅒ HANGUL LETTER YAE */
746 { 0x0ec3, 0x3153 }, /* Hangul_EO ㅓ HANGUL LETTER EO */
747 { 0x0ec4, 0x3154 }, /* Hangul_E ㅔ HANGUL LETTER E */
748 { 0x0ec5, 0x3155 }, /* Hangul_YEO ㅕ HANGUL LETTER YEO */
749 { 0x0ec6, 0x3156 }, /* Hangul_YE ㅖ HANGUL LETTER YE */
750 { 0x0ec7, 0x3157 }, /* Hangul_O ㅗ HANGUL LETTER O */
751 { 0x0ec8, 0x3158 }, /* Hangul_WA ㅘ HANGUL LETTER WA */
752 { 0x0ec9, 0x3159 }, /* Hangul_WAE ㅙ HANGUL LETTER WAE */
753 { 0x0eca, 0x315a }, /* Hangul_OE ㅚ HANGUL LETTER OE */
754 { 0x0ecb, 0x315b }, /* Hangul_YO ㅛ HANGUL LETTER YO */
755 { 0x0ecc, 0x315c }, /* Hangul_U ㅜ HANGUL LETTER U */
756 { 0x0ecd, 0x315d }, /* Hangul_WEO ㅝ HANGUL LETTER WEO */
757 { 0x0ece, 0x315e }, /* Hangul_WE ㅞ HANGUL LETTER WE */
758 { 0x0ecf, 0x315f }, /* Hangul_WI ㅟ HANGUL LETTER WI */
759 { 0x0ed0, 0x3160 }, /* Hangul_YU ㅠ HANGUL LETTER YU */
760 { 0x0ed1, 0x3161 }, /* Hangul_EU ㅡ HANGUL LETTER EU */
761 { 0x0ed2, 0x3162 }, /* Hangul_YI ㅢ HANGUL LETTER YI */
762 { 0x0ed3, 0x3163 }, /* Hangul_I ㅣ HANGUL LETTER I */
763 { 0x0ed4, 0x11a8 }, /* Hangul_J_Kiyeog ᆨ HANGUL JONGSEONG KIYEOK */
764 { 0x0ed5, 0x11a9 }, /* Hangul_J_SsangKiyeog ᆩ HANGUL JONGSEONG SSANGKIYEOK */
765 { 0x0ed6, 0x11aa }, /* Hangul_J_KiyeogSios ᆪ HANGUL JONGSEONG KIYEOK-SIOS */
766 { 0x0ed7, 0x11ab }, /* Hangul_J_Nieun ᆫ HANGUL JONGSEONG NIEUN */
767 { 0x0ed8, 0x11ac }, /* Hangul_J_NieunJieuj ᆬ HANGUL JONGSEONG NIEUN-CIEUC */
768 { 0x0ed9, 0x11ad }, /* Hangul_J_NieunHieuh ᆭ HANGUL JONGSEONG NIEUN-HIEUH */
769 { 0x0eda, 0x11ae }, /* Hangul_J_Dikeud ᆮ HANGUL JONGSEONG TIKEUT */
770 { 0x0edb, 0x11af }, /* Hangul_J_Rieul ᆯ HANGUL JONGSEONG RIEUL */
771 { 0x0edc, 0x11b0 }, /* Hangul_J_RieulKiyeog ᆰ HANGUL JONGSEONG RIEUL-KIYEOK */
772 { 0x0edd, 0x11b1 }, /* Hangul_J_RieulMieum ᆱ HANGUL JONGSEONG RIEUL-MIEUM */
773 { 0x0ede, 0x11b2 }, /* Hangul_J_RieulPieub ᆲ HANGUL JONGSEONG RIEUL-PIEUP */
774 { 0x0edf, 0x11b3 }, /* Hangul_J_RieulSios ᆳ HANGUL JONGSEONG RIEUL-SIOS */
775 { 0x0ee0, 0x11b4 }, /* Hangul_J_RieulTieut ᆴ HANGUL JONGSEONG RIEUL-THIEUTH */
776 { 0x0ee1, 0x11b5 }, /* Hangul_J_RieulPhieuf ᆵ HANGUL JONGSEONG RIEUL-PHIEUPH */
777 { 0x0ee2, 0x11b6 }, /* Hangul_J_RieulHieuh ᆶ HANGUL JONGSEONG RIEUL-HIEUH */
778 { 0x0ee3, 0x11b7 }, /* Hangul_J_Mieum ᆷ HANGUL JONGSEONG MIEUM */
779 { 0x0ee4, 0x11b8 }, /* Hangul_J_Pieub ᆸ HANGUL JONGSEONG PIEUP */
780 { 0x0ee5, 0x11b9 }, /* Hangul_J_PieubSios ᆹ HANGUL JONGSEONG PIEUP-SIOS */
781 { 0x0ee6, 0x11ba }, /* Hangul_J_Sios ᆺ HANGUL JONGSEONG SIOS */
782 { 0x0ee7, 0x11bb }, /* Hangul_J_SsangSios ᆻ HANGUL JONGSEONG SSANGSIOS */
783 { 0x0ee8, 0x11bc }, /* Hangul_J_Ieung ᆼ HANGUL JONGSEONG IEUNG */
784 { 0x0ee9, 0x11bd }, /* Hangul_J_Jieuj ᆽ HANGUL JONGSEONG CIEUC */
785 { 0x0eea, 0x11be }, /* Hangul_J_Cieuc ᆾ HANGUL JONGSEONG CHIEUCH */
786 { 0x0eeb, 0x11bf }, /* Hangul_J_Khieuq ᆿ HANGUL JONGSEONG KHIEUKH */
787 { 0x0eec, 0x11c0 }, /* Hangul_J_Tieut ᇀ HANGUL JONGSEONG THIEUTH */
788 { 0x0eed, 0x11c1 }, /* Hangul_J_Phieuf ᇁ HANGUL JONGSEONG PHIEUPH */
789 { 0x0eee, 0x11c2 }, /* Hangul_J_Hieuh ᇂ HANGUL JONGSEONG HIEUH */
790 { 0x0eef, 0x316d }, /* Hangul_RieulYeorinHieuh ㅭ HANGUL LETTER RIEUL-YEORINHIEUH */
791 { 0x0ef0, 0x3171 }, /* Hangul_SunkyeongeumMieum ㅱ HANGUL LETTER KAPYEOUNMIEUM */
792 { 0x0ef1, 0x3178 }, /* Hangul_SunkyeongeumPieub ㅸ HANGUL LETTER KAPYEOUNPIEUP */
793 { 0x0ef2, 0x317f }, /* Hangul_PanSios ㅿ HANGUL LETTER PANSIOS */
794 /* 0x0ef3 Hangul_KkogjiDalrinIeung ? ??? */
795 { 0x0ef4, 0x3184 }, /* Hangul_SunkyeongeumPhieuf ㆄ HANGUL LETTER KAPYEOUNPHIEUPH */
796 { 0x0ef5, 0x3186 }, /* Hangul_YeorinHieuh ㆆ HANGUL LETTER YEORINHIEUH */
797 { 0x0ef6, 0x318d }, /* Hangul_AraeA ㆍ HANGUL LETTER ARAEA */
798 { 0x0ef7, 0x318e }, /* Hangul_AraeAE ㆎ HANGUL LETTER ARAEAE */
799 { 0x0ef8, 0x11eb }, /* Hangul_J_PanSios ᇫ HANGUL JONGSEONG PANSIOS */
800 /* 0x0ef9 Hangul_J_KkogjiDalrinIeung ? ??? */
801 { 0x0efa, 0x11f9 }, /* Hangul_J_YeorinHieuh ᇹ HANGUL JONGSEONG YEORINHIEUH */
802 { 0x0eff, 0x20a9 }, /* Korean_Won ₩ WON SIGN */
803 { 0x13bc, 0x0152 }, /* OE ΠLATIN CAPITAL LIGATURE OE */
804 { 0x13bd, 0x0153 }, /* oe œ LATIN SMALL LIGATURE OE */
805 { 0x13be, 0x0178 }, /* Ydiaeresis Ÿ LATIN CAPITAL LETTER Y WITH DIAERESIS */
806 { 0x20a0, 0x20a0 }, /* EcuSign ₠ EURO-CURRENCY SIGN */
807 { 0x20a1, 0x20a1 }, /* ColonSign ₡ COLON SIGN */
808 { 0x20a2, 0x20a2 }, /* CruzeiroSign ₢ CRUZEIRO SIGN */
809 { 0x20a3, 0x20a3 }, /* FFrancSign ₣ FRENCH FRANC SIGN */
810 { 0x20a4, 0x20a4 }, /* LiraSign ₤ LIRA SIGN */
811 { 0x20a5, 0x20a5 }, /* MillSign ₥ MILL SIGN */
812 { 0x20a6, 0x20a6 }, /* NairaSign ₦ NAIRA SIGN */
813 { 0x20a7, 0x20a7 }, /* PesetaSign ₧ PESETA SIGN */
814 { 0x20a8, 0x20a8 }, /* RupeeSign ₨ RUPEE SIGN */
815 { 0x20a9, 0x20a9 }, /* WonSign ₩ WON SIGN */
816 { 0x20aa, 0x20aa }, /* NewSheqelSign ₪ NEW SHEQEL SIGN */
817 { 0x20ab, 0x20ab }, /* DongSign ₫ DONG SIGN */
818 { 0x20ac, 0x20ac }, /* EuroSign € EURO SIGN */
819
820
821 /* Following items added to GTK, not in the xterm table */
822
823 /* A few ASCII control characters */
824
825 { 0xFF08 /* Backspace */, '\b' },
826 { 0xFF09 /* Tab */, '\t' },
827 { 0xFF0A /* Linefeed */, '\n' },
828 { 0xFF0B /* Vert. Tab */, '\v' },
829 { 0xFF0D /* Return */, '\r' },
830 { 0xFF1B /* Escape */, '\033' },
831
832 /* Numeric keypad */
833
834 { 0xFF80 /* Space */, ' ' },
835 { 0xFFAA /* Multiply */, '*' },
836 { 0xFFAB /* Add */, '+' },
837 { 0xFFAC /* Separator */, ',' },
838 { 0xFFAD /* Subtract */, '-' },
839 { 0xFFAE /* Decimal */, '.' },
840 { 0xFFAF /* Divide */, '/' },
841 { 0xFFB0 /* 0 */, '0' },
842 { 0xFFB1 /* 1 */, '1' },
843 { 0xFFB2 /* 2 */, '2' },
844 { 0xFFB3 /* 3 */, '3' },
845 { 0xFFB4 /* 4 */, '4' },
846 { 0xFFB5 /* 5 */, '5' },
847 { 0xFFB6 /* 6 */, '6' },
848 { 0xFFB7 /* 7 */, '7' },
849 { 0xFFB8 /* 8 */, '8' },
850 { 0xFFB9 /* 9 */, '9' },
851 { 0xFFBD /* Equal */, '=' },
852
853 /* End numeric keypad */
854
855 { 0xFFFF /* Delete */, '\177' }
856 };
857
858 static const struct _FcitxUnicodeToKeySym gdk_unicode_to_keysym_tab[] = {
859 { 0x0abd, 0x002e }, /* decimalpoint . FULL STOP */
860 { 0x0ba3, 0x003c }, /* leftcaret < LESS-THAN SIGN */
861 { 0x0ba6, 0x003e }, /* rightcaret > GREATER-THAN SIGN */
862 { 0x0bc6, 0x005f }, /* underbar _ LOW LINE */
863 { 0x0bc0, 0x00af }, /* overbar ¯ MACRON */
864 { 0x03c0, 0x0100 }, /* Amacron Ā LATIN CAPITAL LETTER A WITH MACRON */
865 { 0x03e0, 0x0101 }, /* amacron ā LATIN SMALL LETTER A WITH MACRON */
866 { 0x01c3, 0x0102 }, /* Abreve Ă LATIN CAPITAL LETTER A WITH BREVE */
867 { 0x01e3, 0x0103 }, /* abreve ă LATIN SMALL LETTER A WITH BREVE */
868 { 0x01a1, 0x0104 }, /* Aogonek Ą LATIN CAPITAL LETTER A WITH OGONEK */
869 { 0x01b1, 0x0105 }, /* aogonek ą LATIN SMALL LETTER A WITH OGONEK */
870 { 0x01c6, 0x0106 }, /* Cacute Ć LATIN CAPITAL LETTER C WITH ACUTE */
871 { 0x01e6, 0x0107 }, /* cacute ć LATIN SMALL LETTER C WITH ACUTE */
872 { 0x02c6, 0x0108 }, /* Ccircumflex Ĉ LATIN CAPITAL LETTER C WITH CIRCUMFLEX */
873 { 0x02e6, 0x0109 }, /* ccircumflex ĉ LATIN SMALL LETTER C WITH CIRCUMFLEX */
874 { 0x02c5, 0x010a }, /* Cabovedot Ċ LATIN CAPITAL LETTER C WITH DOT ABOVE */
875 { 0x02e5, 0x010b }, /* cabovedot ċ LATIN SMALL LETTER C WITH DOT ABOVE */
876 { 0x01c8, 0x010c }, /* Ccaron Č LATIN CAPITAL LETTER C WITH CARON */
877 { 0x01e8, 0x010d }, /* ccaron č LATIN SMALL LETTER C WITH CARON */
878 { 0x01cf, 0x010e }, /* Dcaron Ď LATIN CAPITAL LETTER D WITH CARON */
879 { 0x01ef, 0x010f }, /* dcaron ď LATIN SMALL LETTER D WITH CARON */
880 { 0x01d0, 0x0110 }, /* Dstroke Đ LATIN CAPITAL LETTER D WITH STROKE */
881 { 0x01f0, 0x0111 }, /* dstroke đ LATIN SMALL LETTER D WITH STROKE */
882 { 0x03aa, 0x0112 }, /* Emacron Ē LATIN CAPITAL LETTER E WITH MACRON */
883 { 0x03ba, 0x0113 }, /* emacron ē LATIN SMALL LETTER E WITH MACRON */
884 { 0x03cc, 0x0116 }, /* Eabovedot Ė LATIN CAPITAL LETTER E WITH DOT ABOVE */
885 { 0x03ec, 0x0117 }, /* eabovedot ė LATIN SMALL LETTER E WITH DOT ABOVE */
886 { 0x01ca, 0x0118 }, /* Eogonek Ę LATIN CAPITAL LETTER E WITH OGONEK */
887 { 0x01ea, 0x0119 }, /* eogonek ę LATIN SMALL LETTER E WITH OGONEK */
888 { 0x01cc, 0x011a }, /* Ecaron Ě LATIN CAPITAL LETTER E WITH CARON */
889 { 0x01ec, 0x011b }, /* ecaron ě LATIN SMALL LETTER E WITH CARON */
890 { 0x02d8, 0x011c }, /* Gcircumflex Ĝ LATIN CAPITAL LETTER G WITH CIRCUMFLEX */
891 { 0x02f8, 0x011d }, /* gcircumflex ĝ LATIN SMALL LETTER G WITH CIRCUMFLEX */
892 { 0x02ab, 0x011e }, /* Gbreve Ğ LATIN CAPITAL LETTER G WITH BREVE */
893 { 0x02bb, 0x011f }, /* gbreve ğ LATIN SMALL LETTER G WITH BREVE */
894 { 0x02d5, 0x0120 }, /* Gabovedot Ġ LATIN CAPITAL LETTER G WITH DOT ABOVE */
895 { 0x02f5, 0x0121 }, /* gabovedot ġ LATIN SMALL LETTER G WITH DOT ABOVE */
896 { 0x03ab, 0x0122 }, /* Gcedilla Ģ LATIN CAPITAL LETTER G WITH CEDILLA */
897 { 0x03bb, 0x0123 }, /* gcedilla ģ LATIN SMALL LETTER G WITH CEDILLA */
898 { 0x02a6, 0x0124 }, /* Hcircumflex Ĥ LATIN CAPITAL LETTER H WITH CIRCUMFLEX */
899 { 0x02b6, 0x0125 }, /* hcircumflex ĥ LATIN SMALL LETTER H WITH CIRCUMFLEX */
900 { 0x02a1, 0x0126 }, /* Hstroke Ħ LATIN CAPITAL LETTER H WITH STROKE */
901 { 0x02b1, 0x0127 }, /* hstroke ħ LATIN SMALL LETTER H WITH STROKE */
902 { 0x03a5, 0x0128 }, /* Itilde Ĩ LATIN CAPITAL LETTER I WITH TILDE */
903 { 0x03b5, 0x0129 }, /* itilde ĩ LATIN SMALL LETTER I WITH TILDE */
904 { 0x03cf, 0x012a }, /* Imacron Ī LATIN CAPITAL LETTER I WITH MACRON */
905 { 0x03ef, 0x012b }, /* imacron ī LATIN SMALL LETTER I WITH MACRON */
906 { 0x03c7, 0x012e }, /* Iogonek Į LATIN CAPITAL LETTER I WITH OGONEK */
907 { 0x03e7, 0x012f }, /* iogonek į LATIN SMALL LETTER I WITH OGONEK */
908 { 0x02a9, 0x0130 }, /* Iabovedot İ LATIN CAPITAL LETTER I WITH DOT ABOVE */
909 { 0x02b9, 0x0131 }, /* idotless ı LATIN SMALL LETTER DOTLESS I */
910 { 0x02ac, 0x0134 }, /* Jcircumflex Ĵ LATIN CAPITAL LETTER J WITH CIRCUMFLEX */
911 { 0x02bc, 0x0135 }, /* jcircumflex ĵ LATIN SMALL LETTER J WITH CIRCUMFLEX */
912 { 0x03d3, 0x0136 }, /* Kcedilla Ķ LATIN CAPITAL LETTER K WITH CEDILLA */
913 { 0x03f3, 0x0137 }, /* kcedilla ķ LATIN SMALL LETTER K WITH CEDILLA */
914 { 0x03a2, 0x0138 }, /* kra ĸ LATIN SMALL LETTER KRA */
915 { 0x01c5, 0x0139 }, /* Lacute Ĺ LATIN CAPITAL LETTER L WITH ACUTE */
916 { 0x01e5, 0x013a }, /* lacute ĺ LATIN SMALL LETTER L WITH ACUTE */
917 { 0x03a6, 0x013b }, /* Lcedilla Ļ LATIN CAPITAL LETTER L WITH CEDILLA */
918 { 0x03b6, 0x013c }, /* lcedilla ļ LATIN SMALL LETTER L WITH CEDILLA */
919 { 0x01a5, 0x013d }, /* Lcaron Ľ LATIN CAPITAL LETTER L WITH CARON */
920 { 0x01b5, 0x013e }, /* lcaron ľ LATIN SMALL LETTER L WITH CARON */
921 { 0x01a3, 0x0141 }, /* Lstroke Ł LATIN CAPITAL LETTER L WITH STROKE */
922 { 0x01b3, 0x0142 }, /* lstroke ł LATIN SMALL LETTER L WITH STROKE */
923 { 0x01d1, 0x0143 }, /* Nacute Ń LATIN CAPITAL LETTER N WITH ACUTE */
924 { 0x01f1, 0x0144 }, /* nacute ń LATIN SMALL LETTER N WITH ACUTE */
925 { 0x03d1, 0x0145 }, /* Ncedilla Ņ LATIN CAPITAL LETTER N WITH CEDILLA */
926 { 0x03f1, 0x0146 }, /* ncedilla ņ LATIN SMALL LETTER N WITH CEDILLA */
927 { 0x01d2, 0x0147 }, /* Ncaron Ň LATIN CAPITAL LETTER N WITH CARON */
928 { 0x01f2, 0x0148 }, /* ncaron ň LATIN SMALL LETTER N WITH CARON */
929 { 0x03bd, 0x014a }, /* ENG Ŋ LATIN CAPITAL LETTER ENG */
930 { 0x03bf, 0x014b }, /* eng ŋ LATIN SMALL LETTER ENG */
931 { 0x03d2, 0x014c }, /* Omacron Ō LATIN CAPITAL LETTER O WITH MACRON */
932 { 0x03f2, 0x014d }, /* omacron ō LATIN SMALL LETTER O WITH MACRON */
933 { 0x01d5, 0x0150 }, /* Odoubleacute Ő LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */
934 { 0x01f5, 0x0151 }, /* odoubleacute ő LATIN SMALL LETTER O WITH DOUBLE ACUTE */
935 { 0x13bc, 0x0152 }, /* OE ΠLATIN CAPITAL LIGATURE OE */
936 { 0x13bd, 0x0153 }, /* oe œ LATIN SMALL LIGATURE OE */
937 { 0x01c0, 0x0154 }, /* Racute Ŕ LATIN CAPITAL LETTER R WITH ACUTE */
938 { 0x01e0, 0x0155 }, /* racute ŕ LATIN SMALL LETTER R WITH ACUTE */
939 { 0x03a3, 0x0156 }, /* Rcedilla Ŗ LATIN CAPITAL LETTER R WITH CEDILLA */
940 { 0x03b3, 0x0157 }, /* rcedilla ŗ LATIN SMALL LETTER R WITH CEDILLA */
941 { 0x01d8, 0x0158 }, /* Rcaron Ř LATIN CAPITAL LETTER R WITH CARON */
942 { 0x01f8, 0x0159 }, /* rcaron ř LATIN SMALL LETTER R WITH CARON */
943 { 0x01a6, 0x015a }, /* Sacute Ś LATIN CAPITAL LETTER S WITH ACUTE */
944 { 0x01b6, 0x015b }, /* sacute ś LATIN SMALL LETTER S WITH ACUTE */
945 { 0x02de, 0x015c }, /* Scircumflex Ŝ LATIN CAPITAL LETTER S WITH CIRCUMFLEX */
946 { 0x02fe, 0x015d }, /* scircumflex ŝ LATIN SMALL LETTER S WITH CIRCUMFLEX */
947 { 0x01aa, 0x015e }, /* Scedilla Ş LATIN CAPITAL LETTER S WITH CEDILLA */
948 { 0x01ba, 0x015f }, /* scedilla ş LATIN SMALL LETTER S WITH CEDILLA */
949 { 0x01a9, 0x0160 }, /* Scaron Š LATIN CAPITAL LETTER S WITH CARON */
950 { 0x01b9, 0x0161 }, /* scaron š LATIN SMALL LETTER S WITH CARON */
951 { 0x01de, 0x0162 }, /* Tcedilla Ţ LATIN CAPITAL LETTER T WITH CEDILLA */
952 { 0x01fe, 0x0163 }, /* tcedilla ţ LATIN SMALL LETTER T WITH CEDILLA */
953 { 0x01ab, 0x0164 }, /* Tcaron Ť LATIN CAPITAL LETTER T WITH CARON */
954 { 0x01bb, 0x0165 }, /* tcaron ť LATIN SMALL LETTER T WITH CARON */
955 { 0x03ac, 0x0166 }, /* Tslash Ŧ LATIN CAPITAL LETTER T WITH STROKE */
956 { 0x03bc, 0x0167 }, /* tslash ŧ LATIN SMALL LETTER T WITH STROKE */
957 { 0x03dd, 0x0168 }, /* Utilde Ũ LATIN CAPITAL LETTER U WITH TILDE */
958 { 0x03fd, 0x0169 }, /* utilde ũ LATIN SMALL LETTER U WITH TILDE */
959 { 0x03de, 0x016a }, /* Umacron Ū LATIN CAPITAL LETTER U WITH MACRON */
960 { 0x03fe, 0x016b }, /* umacron ū LATIN SMALL LETTER U WITH MACRON */
961 { 0x02dd, 0x016c }, /* Ubreve Ŭ LATIN CAPITAL LETTER U WITH BREVE */
962 { 0x02fd, 0x016d }, /* ubreve ŭ LATIN SMALL LETTER U WITH BREVE */
963 { 0x01d9, 0x016e }, /* Uring Ů LATIN CAPITAL LETTER U WITH RING ABOVE */
964 { 0x01f9, 0x016f }, /* uring ů LATIN SMALL LETTER U WITH RING ABOVE */
965 { 0x01db, 0x0170 }, /* Udoubleacute Ű LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */
966 { 0x01fb, 0x0171 }, /* udoubleacute ű LATIN SMALL LETTER U WITH DOUBLE ACUTE */
967 { 0x03d9, 0x0172 }, /* Uogonek Ų LATIN CAPITAL LETTER U WITH OGONEK */
968 { 0x03f9, 0x0173 }, /* uogonek ų LATIN SMALL LETTER U WITH OGONEK */
969 { 0x13be, 0x0178 }, /* Ydiaeresis Ÿ LATIN CAPITAL LETTER Y WITH DIAERESIS */
970 { 0x01ac, 0x0179 }, /* Zacute Ź LATIN CAPITAL LETTER Z WITH ACUTE */
971 { 0x01bc, 0x017a }, /* zacute ź LATIN SMALL LETTER Z WITH ACUTE */
972 { 0x01af, 0x017b }, /* Zabovedot Ż LATIN CAPITAL LETTER Z WITH DOT ABOVE */
973 { 0x01bf, 0x017c }, /* zabovedot ż LATIN SMALL LETTER Z WITH DOT ABOVE */
974 { 0x01ae, 0x017d }, /* Zcaron Ž LATIN CAPITAL LETTER Z WITH CARON */
975 { 0x01be, 0x017e }, /* zcaron ž LATIN SMALL LETTER Z WITH CARON */
976 { 0x08f6, 0x0192 }, /* function ƒ LATIN SMALL LETTER F WITH HOOK */
977 { 0x01b7, 0x02c7 }, /* caron ˇ CARON */
978 { 0x01a2, 0x02d8 }, /* breve ˘ BREVE */
979 { 0x01ff, 0x02d9 }, /* abovedot ˙ DOT ABOVE */
980 { 0x01b2, 0x02db }, /* ogonek ˛ OGONEK */
981 { 0x01bd, 0x02dd }, /* doubleacute ˝ DOUBLE ACUTE ACCENT */
982 { 0x07ae, 0x0385 }, /* Greek_accentdieresis ΅ GREEK DIALYTIKA TONOS */
983 { 0x07a1, 0x0386 }, /* Greek_ALPHAaccent Ά GREEK CAPITAL LETTER ALPHA WITH TONOS */
984 { 0x07a2, 0x0388 }, /* Greek_EPSILONaccent Έ GREEK CAPITAL LETTER EPSILON WITH TONOS */
985 { 0x07a3, 0x0389 }, /* Greek_ETAaccent Ή GREEK CAPITAL LETTER ETA WITH TONOS */
986 { 0x07a4, 0x038a }, /* Greek_IOTAaccent Ί GREEK CAPITAL LETTER IOTA WITH TONOS */
987 { 0x07a7, 0x038c }, /* Greek_OMICRONaccent Ό GREEK CAPITAL LETTER OMICRON WITH TONOS */
988 { 0x07a8, 0x038e }, /* Greek_UPSILONaccent Ύ GREEK CAPITAL LETTER UPSILON WITH TONOS */
989 { 0x07ab, 0x038f }, /* Greek_OMEGAaccent Ώ GREEK CAPITAL LETTER OMEGA WITH TONOS */
990 { 0x07b6, 0x0390 }, /* Greek_iotaaccentdieresis ΐ GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */
991 { 0x07c1, 0x0391 }, /* Greek_ALPHA Α GREEK CAPITAL LETTER ALPHA */
992 { 0x07c2, 0x0392 }, /* Greek_BETA Β GREEK CAPITAL LETTER BETA */
993 { 0x07c3, 0x0393 }, /* Greek_GAMMA Γ GREEK CAPITAL LETTER GAMMA */
994 { 0x07c4, 0x0394 }, /* Greek_DELTA Δ GREEK CAPITAL LETTER DELTA */
995 { 0x07c5, 0x0395 }, /* Greek_EPSILON Ε GREEK CAPITAL LETTER EPSILON */
996 { 0x07c6, 0x0396 }, /* Greek_ZETA Ζ GREEK CAPITAL LETTER ZETA */
997 { 0x07c7, 0x0397 }, /* Greek_ETA Η GREEK CAPITAL LETTER ETA */
998 { 0x07c8, 0x0398 }, /* Greek_THETA Θ GREEK CAPITAL LETTER THETA */
999 { 0x07c9, 0x0399 }, /* Greek_IOTA Ι GREEK CAPITAL LETTER IOTA */
1000 { 0x07ca, 0x039a }, /* Greek_KAPPA Κ GREEK CAPITAL LETTER KAPPA */
1001 { 0x07cb, 0x039b }, /* Greek_LAMBDA Λ GREEK CAPITAL LETTER LAMDA */
1002 { 0x07cc, 0x039c }, /* Greek_MU Μ GREEK CAPITAL LETTER MU */
1003 { 0x07cd, 0x039d }, /* Greek_NU Ν GREEK CAPITAL LETTER NU */
1004 { 0x07ce, 0x039e }, /* Greek_XI Ξ GREEK CAPITAL LETTER XI */
1005 { 0x07cf, 0x039f }, /* Greek_OMICRON Ο GREEK CAPITAL LETTER OMICRON */
1006 { 0x07d0, 0x03a0 }, /* Greek_PI Π GREEK CAPITAL LETTER PI */
1007 { 0x07d1, 0x03a1 }, /* Greek_RHO Ρ GREEK CAPITAL LETTER RHO */
1008 { 0x07d2, 0x03a3 }, /* Greek_SIGMA Σ GREEK CAPITAL LETTER SIGMA */
1009 { 0x07d4, 0x03a4 }, /* Greek_TAU Τ GREEK CAPITAL LETTER TAU */
1010 { 0x07d5, 0x03a5 }, /* Greek_UPSILON Υ GREEK CAPITAL LETTER UPSILON */
1011 { 0x07d6, 0x03a6 }, /* Greek_PHI Φ GREEK CAPITAL LETTER PHI */
1012 { 0x07d7, 0x03a7 }, /* Greek_CHI Χ GREEK CAPITAL LETTER CHI */
1013 { 0x07d8, 0x03a8 }, /* Greek_PSI Ψ GREEK CAPITAL LETTER PSI */
1014 { 0x07d9, 0x03a9 }, /* Greek_OMEGA Ω GREEK CAPITAL LETTER OMEGA */
1015 { 0x07a5, 0x03aa }, /* Greek_IOTAdieresis Ϊ GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */
1016 { 0x07a9, 0x03ab }, /* Greek_UPSILONdieresis Ϋ GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */
1017 { 0x07b1, 0x03ac }, /* Greek_alphaaccent ά GREEK SMALL LETTER ALPHA WITH TONOS */
1018 { 0x07b2, 0x03ad }, /* Greek_epsilonaccent έ GREEK SMALL LETTER EPSILON WITH TONOS */
1019 { 0x07b3, 0x03ae }, /* Greek_etaaccent ή GREEK SMALL LETTER ETA WITH TONOS */
1020 { 0x07b4, 0x03af }, /* Greek_iotaaccent ί GREEK SMALL LETTER IOTA WITH TONOS */
1021 { 0x07ba, 0x03b0 }, /* Greek_upsilonaccentdieresis ΰ GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */
1022 { 0x07e1, 0x03b1 }, /* Greek_alpha α GREEK SMALL LETTER ALPHA */
1023 { 0x07e2, 0x03b2 }, /* Greek_beta β GREEK SMALL LETTER BETA */
1024 { 0x07e3, 0x03b3 }, /* Greek_gamma γ GREEK SMALL LETTER GAMMA */
1025 { 0x07e4, 0x03b4 }, /* Greek_delta δ GREEK SMALL LETTER DELTA */
1026 { 0x07e5, 0x03b5 }, /* Greek_epsilon ε GREEK SMALL LETTER EPSILON */
1027 { 0x07e6, 0x03b6 }, /* Greek_zeta ζ GREEK SMALL LETTER ZETA */
1028 { 0x07e7, 0x03b7 }, /* Greek_eta η GREEK SMALL LETTER ETA */
1029 { 0x07e8, 0x03b8 }, /* Greek_theta θ GREEK SMALL LETTER THETA */
1030 { 0x07e9, 0x03b9 }, /* Greek_iota ι GREEK SMALL LETTER IOTA */
1031 { 0x07ea, 0x03ba }, /* Greek_kappa κ GREEK SMALL LETTER KAPPA */
1032 { 0x07eb, 0x03bb }, /* Greek_lambda λ GREEK SMALL LETTER LAMDA */
1033 { 0x07ec, 0x03bc }, /* Greek_mu μ GREEK SMALL LETTER MU */
1034 { 0x07ed, 0x03bd }, /* Greek_nu ν GREEK SMALL LETTER NU */
1035 { 0x07ee, 0x03be }, /* Greek_xi ξ GREEK SMALL LETTER XI */
1036 { 0x07ef, 0x03bf }, /* Greek_omicron ο GREEK SMALL LETTER OMICRON */
1037 { 0x07f0, 0x03c0 }, /* Greek_pi π GREEK SMALL LETTER PI */
1038 { 0x07f1, 0x03c1 }, /* Greek_rho ρ GREEK SMALL LETTER RHO */
1039 { 0x07f3, 0x03c2 }, /* Greek_finalsmallsigma ς GREEK SMALL LETTER FINAL SIGMA */
1040 { 0x07f2, 0x03c3 }, /* Greek_sigma σ GREEK SMALL LETTER SIGMA */
1041 { 0x07f4, 0x03c4 }, /* Greek_tau τ GREEK SMALL LETTER TAU */
1042 { 0x07f5, 0x03c5 }, /* Greek_upsilon υ GREEK SMALL LETTER UPSILON */
1043 { 0x07f6, 0x03c6 }, /* Greek_phi φ GREEK SMALL LETTER PHI */
1044 { 0x07f7, 0x03c7 }, /* Greek_chi χ GREEK SMALL LETTER CHI */
1045 { 0x07f8, 0x03c8 }, /* Greek_psi ψ GREEK SMALL LETTER PSI */
1046 { 0x07f9, 0x03c9 }, /* Greek_omega ω GREEK SMALL LETTER OMEGA */
1047 { 0x07b5, 0x03ca }, /* Greek_iotadieresis ϊ GREEK SMALL LETTER IOTA WITH DIALYTIKA */
1048 { 0x07b9, 0x03cb }, /* Greek_upsilondieresis ϋ GREEK SMALL LETTER UPSILON WITH DIALYTIKA */
1049 { 0x07b7, 0x03cc }, /* Greek_omicronaccent ό GREEK SMALL LETTER OMICRON WITH TONOS */
1050 { 0x07b8, 0x03cd }, /* Greek_upsilonaccent ύ GREEK SMALL LETTER UPSILON WITH TONOS */
1051 { 0x07bb, 0x03ce }, /* Greek_omegaaccent ώ GREEK SMALL LETTER OMEGA WITH TONOS */
1052 { 0x06b3, 0x0401 }, /* Cyrillic_IO Ё CYRILLIC CAPITAL LETTER IO */
1053 { 0x06b1, 0x0402 }, /* Serbian_DJE Ђ CYRILLIC CAPITAL LETTER DJE */
1054 { 0x06b2, 0x0403 }, /* Macedonia_GJE Ѓ CYRILLIC CAPITAL LETTER GJE */
1055 { 0x06b4, 0x0404 }, /* Ukrainian_IE Є CYRILLIC CAPITAL LETTER UKRAINIAN IE */
1056 { 0x06b5, 0x0405 }, /* Macedonia_DSE Ѕ CYRILLIC CAPITAL LETTER DZE */
1057 { 0x06b6, 0x0406 }, /* Ukrainian_I І CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */
1058 { 0x06b7, 0x0407 }, /* Ukrainian_YI Ї CYRILLIC CAPITAL LETTER YI */
1059 { 0x06b8, 0x0408 }, /* Cyrillic_JE Ј CYRILLIC CAPITAL LETTER JE */
1060 { 0x06b9, 0x0409 }, /* Cyrillic_LJE Љ CYRILLIC CAPITAL LETTER LJE */
1061 { 0x06ba, 0x040a }, /* Cyrillic_NJE Њ CYRILLIC CAPITAL LETTER NJE */
1062 { 0x06bb, 0x040b }, /* Serbian_TSHE Ћ CYRILLIC CAPITAL LETTER TSHE */
1063 { 0x06bc, 0x040c }, /* Macedonia_KJE Ќ CYRILLIC CAPITAL LETTER KJE */
1064 { 0x06be, 0x040e }, /* Byelorussian_SHORTU Ў CYRILLIC CAPITAL LETTER SHORT U */
1065 { 0x06bf, 0x040f }, /* Cyrillic_DZHE Џ CYRILLIC CAPITAL LETTER DZHE */
1066 { 0x06e1, 0x0410 }, /* Cyrillic_A А CYRILLIC CAPITAL LETTER A */
1067 { 0x06e2, 0x0411 }, /* Cyrillic_BE Б CYRILLIC CAPITAL LETTER BE */
1068 { 0x06f7, 0x0412 }, /* Cyrillic_VE В CYRILLIC CAPITAL LETTER VE */
1069 { 0x06e7, 0x0413 }, /* Cyrillic_GHE Г CYRILLIC CAPITAL LETTER GHE */
1070 { 0x06e4, 0x0414 }, /* Cyrillic_DE Д CYRILLIC CAPITAL LETTER DE */
1071 { 0x06e5, 0x0415 }, /* Cyrillic_IE Е CYRILLIC CAPITAL LETTER IE */
1072 { 0x06f6, 0x0416 }, /* Cyrillic_ZHE Ж CYRILLIC CAPITAL LETTER ZHE */
1073 { 0x06fa, 0x0417 }, /* Cyrillic_ZE З CYRILLIC CAPITAL LETTER ZE */
1074 { 0x06e9, 0x0418 }, /* Cyrillic_I И CYRILLIC CAPITAL LETTER I */
1075 { 0x06ea, 0x0419 }, /* Cyrillic_SHORTI Й CYRILLIC CAPITAL LETTER SHORT I */
1076 { 0x06eb, 0x041a }, /* Cyrillic_KA К CYRILLIC CAPITAL LETTER KA */
1077 { 0x06ec, 0x041b }, /* Cyrillic_EL Л CYRILLIC CAPITAL LETTER EL */
1078 { 0x06ed, 0x041c }, /* Cyrillic_EM М CYRILLIC CAPITAL LETTER EM */
1079 { 0x06ee, 0x041d }, /* Cyrillic_EN Н CYRILLIC CAPITAL LETTER EN */
1080 { 0x06ef, 0x041e }, /* Cyrillic_O О CYRILLIC CAPITAL LETTER O */
1081 { 0x06f0, 0x041f }, /* Cyrillic_PE П CYRILLIC CAPITAL LETTER PE */
1082 { 0x06f2, 0x0420 }, /* Cyrillic_ER Р CYRILLIC CAPITAL LETTER ER */
1083 { 0x06f3, 0x0421 }, /* Cyrillic_ES С CYRILLIC CAPITAL LETTER ES */
1084 { 0x06f4, 0x0422 }, /* Cyrillic_TE Т CYRILLIC CAPITAL LETTER TE */
1085 { 0x06f5, 0x0423 }, /* Cyrillic_U У CYRILLIC CAPITAL LETTER U */
1086 { 0x06e6, 0x0424 }, /* Cyrillic_EF Ф CYRILLIC CAPITAL LETTER EF */
1087 { 0x06e8, 0x0425 }, /* Cyrillic_HA Х CYRILLIC CAPITAL LETTER HA */
1088 { 0x06e3, 0x0426 }, /* Cyrillic_TSE Ц CYRILLIC CAPITAL LETTER TSE */
1089 { 0x06fe, 0x0427 }, /* Cyrillic_CHE Ч CYRILLIC CAPITAL LETTER CHE */
1090 { 0x06fb, 0x0428 }, /* Cyrillic_SHA Ш CYRILLIC CAPITAL LETTER SHA */
1091 { 0x06fd, 0x0429 }, /* Cyrillic_SHCHA Щ CYRILLIC CAPITAL LETTER SHCHA */
1092 { 0x06ff, 0x042a }, /* Cyrillic_HARDSIGN Ъ CYRILLIC CAPITAL LETTER HARD SIGN */
1093 { 0x06f9, 0x042b }, /* Cyrillic_YERU Ы CYRILLIC CAPITAL LETTER YERU */
1094 { 0x06f8, 0x042c }, /* Cyrillic_SOFTSIGN Ь CYRILLIC CAPITAL LETTER SOFT SIGN */
1095 { 0x06fc, 0x042d }, /* Cyrillic_E Э CYRILLIC CAPITAL LETTER E */
1096 { 0x06e0, 0x042e }, /* Cyrillic_YU Ю CYRILLIC CAPITAL LETTER YU */
1097 { 0x06f1, 0x042f }, /* Cyrillic_YA Я CYRILLIC CAPITAL LETTER YA */
1098 { 0x06c1, 0x0430 }, /* Cyrillic_a а CYRILLIC SMALL LETTER A */
1099 { 0x06c2, 0x0431 }, /* Cyrillic_be б CYRILLIC SMALL LETTER BE */
1100 { 0x06d7, 0x0432 }, /* Cyrillic_ve в CYRILLIC SMALL LETTER VE */
1101 { 0x06c7, 0x0433 }, /* Cyrillic_ghe г CYRILLIC SMALL LETTER GHE */
1102 { 0x06c4, 0x0434 }, /* Cyrillic_de д CYRILLIC SMALL LETTER DE */
1103 { 0x06c5, 0x0435 }, /* Cyrillic_ie е CYRILLIC SMALL LETTER IE */
1104 { 0x06d6, 0x0436 }, /* Cyrillic_zhe ж CYRILLIC SMALL LETTER ZHE */
1105 { 0x06da, 0x0437 }, /* Cyrillic_ze з CYRILLIC SMALL LETTER ZE */
1106 { 0x06c9, 0x0438 }, /* Cyrillic_i и CYRILLIC SMALL LETTER I */
1107 { 0x06ca, 0x0439 }, /* Cyrillic_shorti й CYRILLIC SMALL LETTER SHORT I */
1108 { 0x06cb, 0x043a }, /* Cyrillic_ka к CYRILLIC SMALL LETTER KA */
1109 { 0x06cc, 0x043b }, /* Cyrillic_el л CYRILLIC SMALL LETTER EL */
1110 { 0x06cd, 0x043c }, /* Cyrillic_em м CYRILLIC SMALL LETTER EM */
1111 { 0x06ce, 0x043d }, /* Cyrillic_en н CYRILLIC SMALL LETTER EN */
1112 { 0x06cf, 0x043e }, /* Cyrillic_o о CYRILLIC SMALL LETTER O */
1113 { 0x06d0, 0x043f }, /* Cyrillic_pe п CYRILLIC SMALL LETTER PE */
1114 { 0x06d2, 0x0440 }, /* Cyrillic_er р CYRILLIC SMALL LETTER ER */
1115 { 0x06d3, 0x0441 }, /* Cyrillic_es с CYRILLIC SMALL LETTER ES */
1116 { 0x06d4, 0x0442 }, /* Cyrillic_te т CYRILLIC SMALL LETTER TE */
1117 { 0x06d5, 0x0443 }, /* Cyrillic_u у CYRILLIC SMALL LETTER U */
1118 { 0x06c6, 0x0444 }, /* Cyrillic_ef ф CYRILLIC SMALL LETTER EF */
1119 { 0x06c8, 0x0445 }, /* Cyrillic_ha х CYRILLIC SMALL LETTER HA */
1120 { 0x06c3, 0x0446 }, /* Cyrillic_tse ц CYRILLIC SMALL LETTER TSE */
1121 { 0x06de, 0x0447 }, /* Cyrillic_che ч CYRILLIC SMALL LETTER CHE */
1122 { 0x06db, 0x0448 }, /* Cyrillic_sha ш CYRILLIC SMALL LETTER SHA */
1123 { 0x06dd, 0x0449 }, /* Cyrillic_shcha щ CYRILLIC SMALL LETTER SHCHA */
1124 { 0x06df, 0x044a }, /* Cyrillic_hardsign ъ CYRILLIC SMALL LETTER HARD SIGN */
1125 { 0x06d9, 0x044b }, /* Cyrillic_yeru ы CYRILLIC SMALL LETTER YERU */
1126 { 0x06d8, 0x044c }, /* Cyrillic_softsign ь CYRILLIC SMALL LETTER SOFT SIGN */
1127 { 0x06dc, 0x044d }, /* Cyrillic_e э CYRILLIC SMALL LETTER E */
1128 { 0x06c0, 0x044e }, /* Cyrillic_yu ю CYRILLIC SMALL LETTER YU */
1129 { 0x06d1, 0x044f }, /* Cyrillic_ya я CYRILLIC SMALL LETTER YA */
1130 { 0x06a3, 0x0451 }, /* Cyrillic_io ё CYRILLIC SMALL LETTER IO */
1131 { 0x06a1, 0x0452 }, /* Serbian_dje ђ CYRILLIC SMALL LETTER DJE */
1132 { 0x06a2, 0x0453 }, /* Macedonia_gje ѓ CYRILLIC SMALL LETTER GJE */
1133 { 0x06a4, 0x0454 }, /* Ukrainian_ie є CYRILLIC SMALL LETTER UKRAINIAN IE */
1134 { 0x06a5, 0x0455 }, /* Macedonia_dse ѕ CYRILLIC SMALL LETTER DZE */
1135 { 0x06a6, 0x0456 }, /* Ukrainian_i і CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */
1136 { 0x06a7, 0x0457 }, /* Ukrainian_yi ї CYRILLIC SMALL LETTER YI */
1137 { 0x06a8, 0x0458 }, /* Cyrillic_je ј CYRILLIC SMALL LETTER JE */
1138 { 0x06a9, 0x0459 }, /* Cyrillic_lje љ CYRILLIC SMALL LETTER LJE */
1139 { 0x06aa, 0x045a }, /* Cyrillic_nje њ CYRILLIC SMALL LETTER NJE */
1140 { 0x06ab, 0x045b }, /* Serbian_tshe ћ CYRILLIC SMALL LETTER TSHE */
1141 { 0x06ac, 0x045c }, /* Macedonia_kje ќ CYRILLIC SMALL LETTER KJE */
1142 { 0x06ae, 0x045e }, /* Byelorussian_shortu ў CYRILLIC SMALL LETTER SHORT U */
1143 { 0x06af, 0x045f }, /* Cyrillic_dzhe џ CYRILLIC SMALL LETTER DZHE */
1144 { 0x0ce0, 0x05d0 }, /* hebrew_aleph א HEBREW LETTER ALEF */
1145 { 0x0ce1, 0x05d1 }, /* hebrew_bet ב HEBREW LETTER BET */
1146 { 0x0ce2, 0x05d2 }, /* hebrew_gimel ג HEBREW LETTER GIMEL */
1147 { 0x0ce3, 0x05d3 }, /* hebrew_dalet ד HEBREW LETTER DALET */
1148 { 0x0ce4, 0x05d4 }, /* hebrew_he ה HEBREW LETTER HE */
1149 { 0x0ce5, 0x05d5 }, /* hebrew_waw ו HEBREW LETTER VAV */
1150 { 0x0ce6, 0x05d6 }, /* hebrew_zain ז HEBREW LETTER ZAYIN */
1151 { 0x0ce7, 0x05d7 }, /* hebrew_chet ח HEBREW LETTER HET */
1152 { 0x0ce8, 0x05d8 }, /* hebrew_tet ט HEBREW LETTER TET */
1153 { 0x0ce9, 0x05d9 }, /* hebrew_yod י HEBREW LETTER YOD */
1154 { 0x0cea, 0x05da }, /* hebrew_finalkaph ך HEBREW LETTER FINAL KAF */
1155 { 0x0ceb, 0x05db }, /* hebrew_kaph כ HEBREW LETTER KAF */
1156 { 0x0cec, 0x05dc }, /* hebrew_lamed ל HEBREW LETTER LAMED */
1157 { 0x0ced, 0x05dd }, /* hebrew_finalmem ם HEBREW LETTER FINAL MEM */
1158 { 0x0cee, 0x05de }, /* hebrew_mem מ HEBREW LETTER MEM */
1159 { 0x0cef, 0x05df }, /* hebrew_finalnun ן HEBREW LETTER FINAL NUN */
1160 { 0x0cf0, 0x05e0 }, /* hebrew_nun נ HEBREW LETTER NUN */
1161 { 0x0cf1, 0x05e1 }, /* hebrew_samech ס HEBREW LETTER SAMEKH */
1162 { 0x0cf2, 0x05e2 }, /* hebrew_ayin ע HEBREW LETTER AYIN */
1163 { 0x0cf3, 0x05e3 }, /* hebrew_finalpe ף HEBREW LETTER FINAL PE */
1164 { 0x0cf4, 0x05e4 }, /* hebrew_pe פ HEBREW LETTER PE */
1165 { 0x0cf5, 0x05e5 }, /* hebrew_finalzade ץ HEBREW LETTER FINAL TSADI */
1166 { 0x0cf6, 0x05e6 }, /* hebrew_zade צ HEBREW LETTER TSADI */
1167 { 0x0cf7, 0x05e7 }, /* hebrew_qoph ק HEBREW LETTER QOF */
1168 { 0x0cf8, 0x05e8 }, /* hebrew_resh ר HEBREW LETTER RESH */
1169 { 0x0cf9, 0x05e9 }, /* hebrew_shin ש HEBREW LETTER SHIN */
1170 { 0x0cfa, 0x05ea }, /* hebrew_taw ת HEBREW LETTER TAV */
1171 { 0x05ac, 0x060c }, /* Arabic_comma ، ARABIC COMMA */
1172 { 0x05bb, 0x061b }, /* Arabic_semicolon ؛ ARABIC SEMICOLON */
1173 { 0x05bf, 0x061f }, /* Arabic_question_mark ؟ ARABIC QUESTION MARK */
1174 { 0x05c1, 0x0621 }, /* Arabic_hamza ء ARABIC LETTER HAMZA */
1175 { 0x05c2, 0x0622 }, /* Arabic_maddaonalef آ ARABIC LETTER ALEF WITH MADDA ABOVE */
1176 { 0x05c3, 0x0623 }, /* Arabic_hamzaonalef أ ARABIC LETTER ALEF WITH HAMZA ABOVE */
1177 { 0x05c4, 0x0624 }, /* Arabic_hamzaonwaw ؤ ARABIC LETTER WAW WITH HAMZA ABOVE */
1178 { 0x05c5, 0x0625 }, /* Arabic_hamzaunderalef إ ARABIC LETTER ALEF WITH HAMZA BELOW */
1179 { 0x05c6, 0x0626 }, /* Arabic_hamzaonyeh ئ ARABIC LETTER YEH WITH HAMZA ABOVE */
1180 { 0x05c7, 0x0627 }, /* Arabic_alef ا ARABIC LETTER ALEF */
1181 { 0x05c8, 0x0628 }, /* Arabic_beh ب ARABIC LETTER BEH */
1182 { 0x05c9, 0x0629 }, /* Arabic_tehmarbuta ة ARABIC LETTER TEH MARBUTA */
1183 { 0x05ca, 0x062a }, /* Arabic_teh ت ARABIC LETTER TEH */
1184 { 0x05cb, 0x062b }, /* Arabic_theh ث ARABIC LETTER THEH */
1185 { 0x05cc, 0x062c }, /* Arabic_jeem ج ARABIC LETTER JEEM */
1186 { 0x05cd, 0x062d }, /* Arabic_hah ح ARABIC LETTER HAH */
1187 { 0x05ce, 0x062e }, /* Arabic_khah خ ARABIC LETTER KHAH */
1188 { 0x05cf, 0x062f }, /* Arabic_dal د ARABIC LETTER DAL */
1189 { 0x05d0, 0x0630 }, /* Arabic_thal ذ ARABIC LETTER THAL */
1190 { 0x05d1, 0x0631 }, /* Arabic_ra ر ARABIC LETTER REH */
1191 { 0x05d2, 0x0632 }, /* Arabic_zain ز ARABIC LETTER ZAIN */
1192 { 0x05d3, 0x0633 }, /* Arabic_seen س ARABIC LETTER SEEN */
1193 { 0x05d4, 0x0634 }, /* Arabic_sheen ش ARABIC LETTER SHEEN */
1194 { 0x05d5, 0x0635 }, /* Arabic_sad ص ARABIC LETTER SAD */
1195 { 0x05d6, 0x0636 }, /* Arabic_dad ض ARABIC LETTER DAD */
1196 { 0x05d7, 0x0637 }, /* Arabic_tah ط ARABIC LETTER TAH */
1197 { 0x05d8, 0x0638 }, /* Arabic_zah ظ ARABIC LETTER ZAH */
1198 { 0x05d9, 0x0639 }, /* Arabic_ain ع ARABIC LETTER AIN */
1199 { 0x05da, 0x063a }, /* Arabic_ghain غ ARABIC LETTER GHAIN */
1200 { 0x05e0, 0x0640 }, /* Arabic_tatweel ـ ARABIC TATWEEL */
1201 { 0x05e1, 0x0641 }, /* Arabic_feh ف ARABIC LETTER FEH */
1202 { 0x05e2, 0x0642 }, /* Arabic_qaf ق ARABIC LETTER QAF */
1203 { 0x05e3, 0x0643 }, /* Arabic_kaf ك ARABIC LETTER KAF */
1204 { 0x05e4, 0x0644 }, /* Arabic_lam ل ARABIC LETTER LAM */
1205 { 0x05e5, 0x0645 }, /* Arabic_meem م ARABIC LETTER MEEM */
1206 { 0x05e6, 0x0646 }, /* Arabic_noon ن ARABIC LETTER NOON */
1207 { 0x05e7, 0x0647 }, /* Arabic_ha ه ARABIC LETTER HEH */
1208 { 0x05e8, 0x0648 }, /* Arabic_waw و ARABIC LETTER WAW */
1209 { 0x05e9, 0x0649 }, /* Arabic_alefmaksura ى ARABIC LETTER ALEF MAKSURA */
1210 { 0x05ea, 0x064a }, /* Arabic_yeh ي ARABIC LETTER YEH */
1211 { 0x05eb, 0x064b }, /* Arabic_fathatan ً ARABIC FATHATAN */
1212 { 0x05ec, 0x064c }, /* Arabic_dammatan ٌ ARABIC DAMMATAN */
1213 { 0x05ed, 0x064d }, /* Arabic_kasratan ٍ ARABIC KASRATAN */
1214 { 0x05ee, 0x064e }, /* Arabic_fatha َ ARABIC FATHA */
1215 { 0x05ef, 0x064f }, /* Arabic_damma ُ ARABIC DAMMA */
1216 { 0x05f0, 0x0650 }, /* Arabic_kasra ِ ARABIC KASRA */
1217 { 0x05f1, 0x0651 }, /* Arabic_shadda ّ ARABIC SHADDA */
1218 { 0x05f2, 0x0652 }, /* Arabic_sukun ْ ARABIC SUKUN */
1219 { 0x0da1, 0x0e01 }, /* Thai_kokai ก THAI CHARACTER KO KAI */
1220 { 0x0da2, 0x0e02 }, /* Thai_khokhai ข THAI CHARACTER KHO KHAI */
1221 { 0x0da3, 0x0e03 }, /* Thai_khokhuat ฃ THAI CHARACTER KHO KHUAT */
1222 { 0x0da4, 0x0e04 }, /* Thai_khokhwai ค THAI CHARACTER KHO KHWAI */
1223 { 0x0da5, 0x0e05 }, /* Thai_khokhon ฅ THAI CHARACTER KHO KHON */
1224 { 0x0da6, 0x0e06 }, /* Thai_khorakhang ฆ THAI CHARACTER KHO RAKHANG */
1225 { 0x0da7, 0x0e07 }, /* Thai_ngongu ง THAI CHARACTER NGO NGU */
1226 { 0x0da8, 0x0e08 }, /* Thai_chochan จ THAI CHARACTER CHO CHAN */
1227 { 0x0da9, 0x0e09 }, /* Thai_choching ฉ THAI CHARACTER CHO CHING */
1228 { 0x0daa, 0x0e0a }, /* Thai_chochang ช THAI CHARACTER CHO CHANG */
1229 { 0x0dab, 0x0e0b }, /* Thai_soso ซ THAI CHARACTER SO SO */
1230 { 0x0dac, 0x0e0c }, /* Thai_chochoe ฌ THAI CHARACTER CHO CHOE */
1231 { 0x0dad, 0x0e0d }, /* Thai_yoying ญ THAI CHARACTER YO YING */
1232 { 0x0dae, 0x0e0e }, /* Thai_dochada ฎ THAI CHARACTER DO CHADA */
1233 { 0x0daf, 0x0e0f }, /* Thai_topatak ฏ THAI CHARACTER TO PATAK */
1234 { 0x0db0, 0x0e10 }, /* Thai_thothan ฐ THAI CHARACTER THO THAN */
1235 { 0x0db1, 0x0e11 }, /* Thai_thonangmontho ฑ THAI CHARACTER THO NANGMONTHO */
1236 { 0x0db2, 0x0e12 }, /* Thai_thophuthao ฒ THAI CHARACTER THO PHUTHAO */
1237 { 0x0db3, 0x0e13 }, /* Thai_nonen ณ THAI CHARACTER NO NEN */
1238 { 0x0db4, 0x0e14 }, /* Thai_dodek ด THAI CHARACTER DO DEK */
1239 { 0x0db5, 0x0e15 }, /* Thai_totao ต THAI CHARACTER TO TAO */
1240 { 0x0db6, 0x0e16 }, /* Thai_thothung ถ THAI CHARACTER THO THUNG */
1241 { 0x0db7, 0x0e17 }, /* Thai_thothahan ท THAI CHARACTER THO THAHAN */
1242 { 0x0db8, 0x0e18 }, /* Thai_thothong ธ THAI CHARACTER THO THONG */
1243 { 0x0db9, 0x0e19 }, /* Thai_nonu น THAI CHARACTER NO NU */
1244 { 0x0dba, 0x0e1a }, /* Thai_bobaimai บ THAI CHARACTER BO BAIMAI */
1245 { 0x0dbb, 0x0e1b }, /* Thai_popla ป THAI CHARACTER PO PLA */
1246 { 0x0dbc, 0x0e1c }, /* Thai_phophung ผ THAI CHARACTER PHO PHUNG */
1247 { 0x0dbd, 0x0e1d }, /* Thai_fofa ฝ THAI CHARACTER FO FA */
1248 { 0x0dbe, 0x0e1e }, /* Thai_phophan พ THAI CHARACTER PHO PHAN */
1249 { 0x0dbf, 0x0e1f }, /* Thai_fofan ฟ THAI CHARACTER FO FAN */
1250 { 0x0dc0, 0x0e20 }, /* Thai_phosamphao ภ THAI CHARACTER PHO SAMPHAO */
1251 { 0x0dc1, 0x0e21 }, /* Thai_moma ม THAI CHARACTER MO MA */
1252 { 0x0dc2, 0x0e22 }, /* Thai_yoyak ย THAI CHARACTER YO YAK */
1253 { 0x0dc3, 0x0e23 }, /* Thai_rorua ร THAI CHARACTER RO RUA */
1254 { 0x0dc4, 0x0e24 }, /* Thai_ru ฤ THAI CHARACTER RU */
1255 { 0x0dc5, 0x0e25 }, /* Thai_loling ล THAI CHARACTER LO LING */
1256 { 0x0dc6, 0x0e26 }, /* Thai_lu ฦ THAI CHARACTER LU */
1257 { 0x0dc7, 0x0e27 }, /* Thai_wowaen ว THAI CHARACTER WO WAEN */
1258 { 0x0dc8, 0x0e28 }, /* Thai_sosala ศ THAI CHARACTER SO SALA */
1259 { 0x0dc9, 0x0e29 }, /* Thai_sorusi ษ THAI CHARACTER SO RUSI */
1260 { 0x0dca, 0x0e2a }, /* Thai_sosua ส THAI CHARACTER SO SUA */
1261 { 0x0dcb, 0x0e2b }, /* Thai_hohip ห THAI CHARACTER HO HIP */
1262 { 0x0dcc, 0x0e2c }, /* Thai_lochula ฬ THAI CHARACTER LO CHULA */
1263 { 0x0dcd, 0x0e2d }, /* Thai_oang อ THAI CHARACTER O ANG */
1264 { 0x0dce, 0x0e2e }, /* Thai_honokhuk ฮ THAI CHARACTER HO NOKHUK */
1265 { 0x0dcf, 0x0e2f }, /* Thai_paiyannoi ฯ THAI CHARACTER PAIYANNOI */
1266 { 0x0dd0, 0x0e30 }, /* Thai_saraa ะ THAI CHARACTER SARA A */
1267 { 0x0dd1, 0x0e31 }, /* Thai_maihanakat ั THAI CHARACTER MAI HAN-AKAT */
1268 { 0x0dd2, 0x0e32 }, /* Thai_saraaa า THAI CHARACTER SARA AA */
1269 { 0x0dd3, 0x0e33 }, /* Thai_saraam ำ THAI CHARACTER SARA AM */
1270 { 0x0dd4, 0x0e34 }, /* Thai_sarai ิ THAI CHARACTER SARA I */
1271 { 0x0dd5, 0x0e35 }, /* Thai_saraii ี THAI CHARACTER SARA II */
1272 { 0x0dd6, 0x0e36 }, /* Thai_saraue ึ THAI CHARACTER SARA UE */
1273 { 0x0dd7, 0x0e37 }, /* Thai_sarauee ื THAI CHARACTER SARA UEE */
1274 { 0x0dd8, 0x0e38 }, /* Thai_sarau ุ THAI CHARACTER SARA U */
1275 { 0x0dd9, 0x0e39 }, /* Thai_sarauu ู THAI CHARACTER SARA UU */
1276 { 0x0dda, 0x0e3a }, /* Thai_phinthu ฺ THAI CHARACTER PHINTHU */
1277 { 0x0ddf, 0x0e3f }, /* Thai_baht ฿ THAI CURRENCY SYMBOL BAHT */
1278 { 0x0de0, 0x0e40 }, /* Thai_sarae เ THAI CHARACTER SARA E */
1279 { 0x0de1, 0x0e41 }, /* Thai_saraae แ THAI CHARACTER SARA AE */
1280 { 0x0de2, 0x0e42 }, /* Thai_sarao โ THAI CHARACTER SARA O */
1281 { 0x0de3, 0x0e43 }, /* Thai_saraaimaimuan ใ THAI CHARACTER SARA AI MAIMUAN */
1282 { 0x0de4, 0x0e44 }, /* Thai_saraaimaimalai ไ THAI CHARACTER SARA AI MAIMALAI */
1283 { 0x0de5, 0x0e45 }, /* Thai_lakkhangyao ๅ THAI CHARACTER LAKKHANGYAO */
1284 { 0x0de6, 0x0e46 }, /* Thai_maiyamok ๆ THAI CHARACTER MAIYAMOK */
1285 { 0x0de7, 0x0e47 }, /* Thai_maitaikhu ็ THAI CHARACTER MAITAIKHU */
1286 { 0x0de8, 0x0e48 }, /* Thai_maiek ่ THAI CHARACTER MAI EK */
1287 { 0x0de9, 0x0e49 }, /* Thai_maitho ้ THAI CHARACTER MAI THO */
1288 { 0x0dea, 0x0e4a }, /* Thai_maitri ๊ THAI CHARACTER MAI TRI */
1289 { 0x0deb, 0x0e4b }, /* Thai_maichattawa ๋ THAI CHARACTER MAI CHATTAWA */
1290 { 0x0dec, 0x0e4c }, /* Thai_thanthakhat ์ THAI CHARACTER THANTHAKHAT */
1291 { 0x0ded, 0x0e4d }, /* Thai_nikhahit ํ THAI CHARACTER NIKHAHIT */
1292 { 0x0df0, 0x0e50 }, /* Thai_leksun ๐ THAI DIGIT ZERO */
1293 { 0x0df1, 0x0e51 }, /* Thai_leknung ๑ THAI DIGIT ONE */
1294 { 0x0df2, 0x0e52 }, /* Thai_leksong ๒ THAI DIGIT TWO */
1295 { 0x0df3, 0x0e53 }, /* Thai_leksam ๓ THAI DIGIT THREE */
1296 { 0x0df4, 0x0e54 }, /* Thai_leksi ๔ THAI DIGIT FOUR */
1297 { 0x0df5, 0x0e55 }, /* Thai_lekha ๕ THAI DIGIT FIVE */
1298 { 0x0df6, 0x0e56 }, /* Thai_lekhok ๖ THAI DIGIT SIX */
1299 { 0x0df7, 0x0e57 }, /* Thai_lekchet ๗ THAI DIGIT SEVEN */
1300 { 0x0df8, 0x0e58 }, /* Thai_lekpaet ๘ THAI DIGIT EIGHT */
1301 { 0x0df9, 0x0e59 }, /* Thai_lekkao ๙ THAI DIGIT NINE */
1302 { 0x0ed4, 0x11a8 }, /* Hangul_J_Kiyeog ᆨ HANGUL JONGSEONG KIYEOK */
1303 { 0x0ed5, 0x11a9 }, /* Hangul_J_SsangKiyeog ᆩ HANGUL JONGSEONG SSANGKIYEOK */
1304 { 0x0ed6, 0x11aa }, /* Hangul_J_KiyeogSios ᆪ HANGUL JONGSEONG KIYEOK-SIOS */
1305 { 0x0ed7, 0x11ab }, /* Hangul_J_Nieun ᆫ HANGUL JONGSEONG NIEUN */
1306 { 0x0ed8, 0x11ac }, /* Hangul_J_NieunJieuj ᆬ HANGUL JONGSEONG NIEUN-CIEUC */
1307 { 0x0ed9, 0x11ad }, /* Hangul_J_NieunHieuh ᆭ HANGUL JONGSEONG NIEUN-HIEUH */
1308 { 0x0eda, 0x11ae }, /* Hangul_J_Dikeud ᆮ HANGUL JONGSEONG TIKEUT */
1309 { 0x0edb, 0x11af }, /* Hangul_J_Rieul ᆯ HANGUL JONGSEONG RIEUL */
1310 { 0x0edc, 0x11b0 }, /* Hangul_J_RieulKiyeog ᆰ HANGUL JONGSEONG RIEUL-KIYEOK */
1311 { 0x0edd, 0x11b1 }, /* Hangul_J_RieulMieum ᆱ HANGUL JONGSEONG RIEUL-MIEUM */
1312 { 0x0ede, 0x11b2 }, /* Hangul_J_RieulPieub ᆲ HANGUL JONGSEONG RIEUL-PIEUP */
1313 { 0x0edf, 0x11b3 }, /* Hangul_J_RieulSios ᆳ HANGUL JONGSEONG RIEUL-SIOS */
1314 { 0x0ee0, 0x11b4 }, /* Hangul_J_RieulTieut ᆴ HANGUL JONGSEONG RIEUL-THIEUTH */
1315 { 0x0ee1, 0x11b5 }, /* Hangul_J_RieulPhieuf ᆵ HANGUL JONGSEONG RIEUL-PHIEUPH */
1316 { 0x0ee2, 0x11b6 }, /* Hangul_J_RieulHieuh ᆶ HANGUL JONGSEONG RIEUL-HIEUH */
1317 { 0x0ee3, 0x11b7 }, /* Hangul_J_Mieum ᆷ HANGUL JONGSEONG MIEUM */
1318 { 0x0ee4, 0x11b8 }, /* Hangul_J_Pieub ᆸ HANGUL JONGSEONG PIEUP */
1319 { 0x0ee5, 0x11b9 }, /* Hangul_J_PieubSios ᆹ HANGUL JONGSEONG PIEUP-SIOS */
1320 { 0x0ee6, 0x11ba }, /* Hangul_J_Sios ᆺ HANGUL JONGSEONG SIOS */
1321 { 0x0ee7, 0x11bb }, /* Hangul_J_SsangSios ᆻ HANGUL JONGSEONG SSANGSIOS */
1322 { 0x0ee8, 0x11bc }, /* Hangul_J_Ieung ᆼ HANGUL JONGSEONG IEUNG */
1323 { 0x0ee9, 0x11bd }, /* Hangul_J_Jieuj ᆽ HANGUL JONGSEONG CIEUC */
1324 { 0x0eea, 0x11be }, /* Hangul_J_Cieuc ᆾ HANGUL JONGSEONG CHIEUCH */
1325 { 0x0eeb, 0x11bf }, /* Hangul_J_Khieuq ᆿ HANGUL JONGSEONG KHIEUKH */
1326 { 0x0eec, 0x11c0 }, /* Hangul_J_Tieut ᇀ HANGUL JONGSEONG THIEUTH */
1327 { 0x0eed, 0x11c1 }, /* Hangul_J_Phieuf ᇁ HANGUL JONGSEONG PHIEUPH */
1328 { 0x0eee, 0x11c2 }, /* Hangul_J_Hieuh ᇂ HANGUL JONGSEONG HIEUH */
1329 { 0x0ef8, 0x11eb }, /* Hangul_J_PanSios ᇫ HANGUL JONGSEONG PANSIOS */
1330 { 0x0efa, 0x11f9 }, /* Hangul_J_YeorinHieuh ᇹ HANGUL JONGSEONG YEORINHIEUH */
1331 { 0x0aa2, 0x2002 }, /* enspace   EN SPACE */
1332 { 0x0aa1, 0x2003 }, /* emspace   EM SPACE */
1333 { 0x0aa3, 0x2004 }, /* em3space   THREE-PER-EM SPACE */
1334 { 0x0aa4, 0x2005 }, /* em4space   FOUR-PER-EM SPACE */
1335 { 0x0aa5, 0x2007 }, /* digitspace   FIGURE SPACE */
1336 { 0x0aa6, 0x2008 }, /* punctspace   PUNCTUATION SPACE */
1337 { 0x0aa7, 0x2009 }, /* thinspace   THIN SPACE */
1338 { 0x0aa8, 0x200a }, /* hairspace   HAIR SPACE */
1339 { 0x0abb, 0x2012 }, /* figdash ‒ FIGURE DASH */
1340 { 0x0aaa, 0x2013 }, /* endash – EN DASH */
1341 { 0x0aa9, 0x2014 }, /* emdash — EM DASH */
1342 { 0x07af, 0x2015 }, /* Greek_horizbar ― HORIZONTAL BAR */
1343 { 0x0cdf, 0x2017 }, /* hebrew_doublelowline ‗ DOUBLE LOW LINE */
1344 { 0x0ad0, 0x2018 }, /* leftsinglequotemark ‘ LEFT SINGLE QUOTATION MARK */
1345 { 0x0ad1, 0x2019 }, /* rightsinglequotemark ’ RIGHT SINGLE QUOTATION MARK */
1346 { 0x0afd, 0x201a }, /* singlelowquotemark ‚ SINGLE LOW-9 QUOTATION MARK */
1347 { 0x0ad2, 0x201c }, /* leftdoublequotemark “ LEFT DOUBLE QUOTATION MARK */
1348 { 0x0ad3, 0x201d }, /* rightdoublequotemark ” RIGHT DOUBLE QUOTATION MARK */
1349 { 0x0afe, 0x201e }, /* doublelowquotemark „ DOUBLE LOW-9 QUOTATION MARK */
1350 { 0x0af1, 0x2020 }, /* dagger † DAGGER */
1351 { 0x0af2, 0x2021 }, /* doubledagger ‡ DOUBLE DAGGER */
1352 { 0x0ae6, 0x2022 }, /* enfilledcircbullet • BULLET */
1353 { 0x0aae, 0x2026 }, /* ellipsis … HORIZONTAL ELLIPSIS */
1354 { 0x0ad6, 0x2032 }, /* minutes ′ PRIME */
1355 { 0x0ad7, 0x2033 }, /* seconds ″ DOUBLE PRIME */
1356 { 0x0afc, 0x2038 }, /* caret ‸ CARET */
1357 { 0x047e, 0x203e }, /* overline ‾ OVERLINE */
1358 { 0x20a0, 0x20a0 }, /* EcuSign ₠ EURO-CURRENCY SIGN */
1359 { 0x20a1, 0x20a1 }, /* ColonSign ₡ COLON SIGN */
1360 { 0x20a2, 0x20a2 }, /* CruzeiroSign ₢ CRUZEIRO SIGN */
1361 { 0x20a3, 0x20a3 }, /* FFrancSign ₣ FRENCH FRANC SIGN */
1362 { 0x20a4, 0x20a4 }, /* LiraSign ₤ LIRA SIGN */
1363 { 0x20a5, 0x20a5 }, /* MillSign ₥ MILL SIGN */
1364 { 0x20a6, 0x20a6 }, /* NairaSign ₦ NAIRA SIGN */
1365 { 0x20a7, 0x20a7 }, /* PesetaSign ₧ PESETA SIGN */
1366 { 0x20a8, 0x20a8 }, /* RupeeSign ₨ RUPEE SIGN */
1367 { 0x0eff, 0x20a9 }, /* Korean_Won ₩ WON SIGN */
1368 { 0x20a9, 0x20a9 }, /* WonSign ₩ WON SIGN */
1369 { 0x20aa, 0x20aa }, /* NewSheqelSign ₪ NEW SHEQEL SIGN */
1370 { 0x20ab, 0x20ab }, /* DongSign ₫ DONG SIGN */
1371 { 0x20ac, 0x20ac }, /* EuroSign € EURO SIGN */
1372 { 0x0ab8, 0x2105 }, /* careof ℅ CARE OF */
1373 { 0x06b0, 0x2116 }, /* numerosign № NUMERO SIGN */
1374 { 0x0afb, 0x2117 }, /* phonographcopyright ℗ SOUND RECORDING COPYRIGHT */
1375 { 0x0ad4, 0x211e }, /* prescription ℞ PRESCRIPTION TAKE */
1376 { 0x0ac9, 0x2122 }, /* trademark ™ TRADE MARK SIGN */
1377 { 0x0ab0, 0x2153 }, /* onethird ⅓ VULGAR FRACTION ONE THIRD */
1378 { 0x0ab1, 0x2154 }, /* twothirds ⅔ VULGAR FRACTION TWO THIRDS */
1379 { 0x0ab2, 0x2155 }, /* onefifth ⅕ VULGAR FRACTION ONE FIFTH */
1380 { 0x0ab3, 0x2156 }, /* twofifths ⅖ VULGAR FRACTION TWO FIFTHS */
1381 { 0x0ab4, 0x2157 }, /* threefifths ⅗ VULGAR FRACTION THREE FIFTHS */
1382 { 0x0ab5, 0x2158 }, /* fourfifths ⅘ VULGAR FRACTION FOUR FIFTHS */
1383 { 0x0ab6, 0x2159 }, /* onesixth ⅙ VULGAR FRACTION ONE SIXTH */
1384 { 0x0ab7, 0x215a }, /* fivesixths ⅚ VULGAR FRACTION FIVE SIXTHS */
1385 { 0x0ac3, 0x215b }, /* oneeighth ⅛ VULGAR FRACTION ONE EIGHTH */
1386 { 0x0ac4, 0x215c }, /* threeeighths ⅜ VULGAR FRACTION THREE EIGHTHS */
1387 { 0x0ac5, 0x215d }, /* fiveeighths ⅝ VULGAR FRACTION FIVE EIGHTHS */
1388 { 0x0ac6, 0x215e }, /* seveneighths ⅞ VULGAR FRACTION SEVEN EIGHTHS */
1389 { 0x08fb, 0x2190 }, /* leftarrow ← LEFTWARDS ARROW */
1390 { 0x08fc, 0x2191 }, /* uparrow ↑ UPWARDS ARROW */
1391 { 0x08fd, 0x2192 }, /* rightarrow → RIGHTWARDS ARROW */
1392 { 0x08fe, 0x2193 }, /* downarrow ↓ DOWNWARDS ARROW */
1393 { 0x08ce, 0x21d2 }, /* implies ⇒ RIGHTWARDS DOUBLE ARROW */
1394 { 0x08cd, 0x21d4 }, /* ifonlyif ⇔ LEFT RIGHT DOUBLE ARROW */
1395 { 0x08ef, 0x2202 }, /* partialderivative ∂ PARTIAL DIFFERENTIAL */
1396 { 0x08c5, 0x2207 }, /* nabla ∇ NABLA */
1397 { 0x0bca, 0x2218 }, /* jot ∘ RING OPERATOR */
1398 { 0x08d6, 0x221a }, /* radical √ SQUARE ROOT */
1399 { 0x08c1, 0x221d }, /* variation ∝ PROPORTIONAL TO */
1400 { 0x08c2, 0x221e }, /* infinity ∞ INFINITY */
1401 { 0x08de, 0x2227 }, /* logicaland ∧ LOGICAL AND */
1402 { 0x0ba9, 0x2227 }, /* upcaret ∧ LOGICAL AND */
1403 { 0x08df, 0x2228 }, /* logicalor ∨ LOGICAL OR */
1404 { 0x0ba8, 0x2228 }, /* downcaret ∨ LOGICAL OR */
1405 { 0x08dc, 0x2229 }, /* intersection ∩ INTERSECTION */
1406 { 0x0bc3, 0x2229 }, /* upshoe ∩ INTERSECTION */
1407 { 0x08dd, 0x222a }, /* union ∪ UNION */
1408 { 0x0bd6, 0x222a }, /* downshoe ∪ UNION */
1409 { 0x08bf, 0x222b }, /* integral ∫ INTEGRAL */
1410 { 0x08c0, 0x2234 }, /* therefore ∴ THEREFORE */
1411 { 0x08c8, 0x2245 }, /* approximate ≅ APPROXIMATELY EQUAL TO */
1412 { 0x08bd, 0x2260 }, /* notequal ≠ NOT EQUAL TO */
1413 { 0x08cf, 0x2261 }, /* identical ≡ IDENTICAL TO */
1414 { 0x08bc, 0x2264 }, /* lessthanequal ≤ LESS-THAN OR EQUAL TO */
1415 { 0x08be, 0x2265 }, /* greaterthanequal ≥ GREATER-THAN OR EQUAL TO */
1416 { 0x08da, 0x2282 }, /* includedin ⊂ SUBSET OF */
1417 { 0x0bda, 0x2282 }, /* leftshoe ⊂ SUBSET OF */
1418 { 0x08db, 0x2283 }, /* includes ⊃ SUPERSET OF */
1419 { 0x0bd8, 0x2283 }, /* rightshoe ⊃ SUPERSET OF */
1420 { 0x0bfc, 0x22a2 }, /* righttack ⊢ RIGHT TACK */
1421 { 0x0bdc, 0x22a3 }, /* lefttack ⊣ LEFT TACK */
1422 { 0x0bc2, 0x22a4 }, /* downtack ⊤ DOWN TACK */
1423 { 0x0bce, 0x22a5 }, /* uptack ⊥ UP TACK */
1424 { 0x0bd3, 0x2308 }, /* upstile ⌈ LEFT CEILING */
1425 { 0x0bc4, 0x230a }, /* downstile ⌊ LEFT FLOOR */
1426 { 0x0afa, 0x2315 }, /* telephonerecorder ⌕ TELEPHONE RECORDER */
1427 { 0x08a4, 0x2320 }, /* topintegral ⌠ TOP HALF INTEGRAL */
1428 { 0x08a5, 0x2321 }, /* botintegral ⌡ BOTTOM HALF INTEGRAL */
1429 { 0x0abc, 0x2329 }, /* leftanglebracket 〈 LEFT-POINTING ANGLE BRACKET */
1430 { 0x0abe, 0x232a }, /* rightanglebracket 〉 RIGHT-POINTING ANGLE BRACKET */
1431 { 0x0bcc, 0x2395 }, /* quad ⎕ APL FUNCTIONAL SYMBOL QUAD (Unicode 3.0) */
1432 { 0x09e2, 0x2409 }, /* ht ␉ SYMBOL FOR HORIZONTAL TABULATION */
1433 { 0x09e5, 0x240a }, /* lf ␊ SYMBOL FOR LINE FEED */
1434 { 0x09e9, 0x240b }, /* vt ␋ SYMBOL FOR VERTICAL TABULATION */
1435 { 0x09e3, 0x240c }, /* ff ␌ SYMBOL FOR FORM FEED */
1436 { 0x09e4, 0x240d }, /* cr ␍ SYMBOL FOR CARRIAGE RETURN */
1437 { 0x09df, 0x2422 }, /* blank ␢ BLANK SYMBOL */
1438 { 0x09e8, 0x2424 }, /* nl ␤ SYMBOL FOR NEWLINE */
1439 { 0x09f1, 0x2500 }, /* horizlinescan5 ─ BOX DRAWINGS LIGHT HORIZONTAL */
1440 { 0x08a6, 0x2502 }, /* vertconnector │ BOX DRAWINGS LIGHT VERTICAL */
1441 { 0x09f8, 0x2502 }, /* vertbar │ BOX DRAWINGS LIGHT VERTICAL */
1442 { 0x09ec, 0x250c }, /* upleftcorner ┌ BOX DRAWINGS LIGHT DOWN AND RIGHT */
1443 { 0x09eb, 0x2510 }, /* uprightcorner ┐ BOX DRAWINGS LIGHT DOWN AND LEFT */
1444 { 0x09ed, 0x2514 }, /* lowleftcorner └ BOX DRAWINGS LIGHT UP AND RIGHT */
1445 { 0x09ea, 0x2518 }, /* lowrightcorner ┘ BOX DRAWINGS LIGHT UP AND LEFT */
1446 { 0x09f4, 0x251c }, /* leftt ├ BOX DRAWINGS LIGHT VERTICAL AND RIGHT */
1447 { 0x09f5, 0x2524 }, /* rightt ┤ BOX DRAWINGS LIGHT VERTICAL AND LEFT */
1448 { 0x09f7, 0x252c }, /* topt ┬ BOX DRAWINGS LIGHT DOWN AND HORIZONTAL */
1449 { 0x09f6, 0x2534 }, /* bott ┴ BOX DRAWINGS LIGHT UP AND HORIZONTAL */
1450 { 0x09ee, 0x253c }, /* crossinglines ┼ BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL */
1451 { 0x09e1, 0x2592 }, /* checkerboard ▒ MEDIUM SHADE */
1452 { 0x0adf, 0x25a0 }, /* emfilledrect ■ BLACK SQUARE */
1453 { 0x0acf, 0x25a1 }, /* emopenrectangle □ WHITE SQUARE */
1454 { 0x0ae7, 0x25aa }, /* enfilledsqbullet ▪ BLACK SMALL SQUARE */
1455 { 0x0ae1, 0x25ab }, /* enopensquarebullet ▫ WHITE SMALL SQUARE */
1456 { 0x0adb, 0x25ac }, /* filledrectbullet ▬ BLACK RECTANGLE */
1457 { 0x0ae2, 0x25ad }, /* openrectbullet ▭ WHITE RECTANGLE */
1458 { 0x0ae8, 0x25b2 }, /* filledtribulletup ▲ BLACK UP-POINTING TRIANGLE */
1459 { 0x0ae3, 0x25b3 }, /* opentribulletup △ WHITE UP-POINTING TRIANGLE */
1460 { 0x0add, 0x25b6 }, /* filledrighttribullet ▶ BLACK RIGHT-POINTING TRIANGLE */
1461 { 0x0acd, 0x25b7 }, /* rightopentriangle ▷ WHITE RIGHT-POINTING TRIANGLE */
1462 { 0x0ae9, 0x25bc }, /* filledtribulletdown ▼ BLACK DOWN-POINTING TRIANGLE */
1463 { 0x0ae4, 0x25bd }, /* opentribulletdown ▽ WHITE DOWN-POINTING TRIANGLE */
1464 { 0x0adc, 0x25c0 }, /* filledlefttribullet ◀ BLACK LEFT-POINTING TRIANGLE */
1465 { 0x0acc, 0x25c1 }, /* leftopentriangle ◁ WHITE LEFT-POINTING TRIANGLE */
1466 { 0x09e0, 0x25c6 }, /* soliddiamond ◆ BLACK DIAMOND */
1467 { 0x0ace, 0x25cb }, /* emopencircle ○ WHITE CIRCLE */
1468 { 0x0bcf, 0x25cb }, /* circle ○ WHITE CIRCLE */
1469 { 0x0ade, 0x25cf }, /* emfilledcircle ● BLACK CIRCLE */
1470 { 0x0ae0, 0x25e6 }, /* enopencircbullet ◦ WHITE BULLET */
1471 { 0x0ae5, 0x2606 }, /* openstar ☆ WHITE STAR */
1472 { 0x0af9, 0x260e }, /* telephone ☎ BLACK TELEPHONE */
1473 { 0x0aca, 0x2613 }, /* signaturemark ☓ SALTIRE */
1474 { 0x0aea, 0x261c }, /* leftpointer ☜ WHITE LEFT POINTING INDEX */
1475 { 0x0aeb, 0x261e }, /* rightpointer ☞ WHITE RIGHT POINTING INDEX */
1476 { 0x0af8, 0x2640 }, /* femalesymbol ♀ FEMALE SIGN */
1477 { 0x0af7, 0x2642 }, /* malesymbol ♂ MALE SIGN */
1478 { 0x0aec, 0x2663 }, /* club ♣ BLACK CLUB SUIT */
1479 { 0x0aee, 0x2665 }, /* heart ♥ BLACK HEART SUIT */
1480 { 0x0aed, 0x2666 }, /* diamond ♦ BLACK DIAMOND SUIT */
1481 { 0x0af6, 0x266d }, /* musicalflat ♭ MUSIC FLAT SIGN */
1482 { 0x0af5, 0x266f }, /* musicalsharp ♯ MUSIC SHARP SIGN */
1483 { 0x0af3, 0x2713 }, /* checkmark ✓ CHECK MARK */
1484 { 0x0af4, 0x2717 }, /* ballotcross ✗ BALLOT X */
1485 { 0x0ad9, 0x271d }, /* latincross ✝ LATIN CROSS */
1486 { 0x0af0, 0x2720 }, /* maltesecross ✠ MALTESE CROSS */
1487 { 0x04a4, 0x3001 }, /* kana_comma 、 IDEOGRAPHIC COMMA */
1488 { 0x04a1, 0x3002 }, /* kana_fullstop 。 IDEOGRAPHIC FULL STOP */
1489 { 0x04a2, 0x300c }, /* kana_openingbracket 「 LEFT CORNER BRACKET */
1490 { 0x04a3, 0x300d }, /* kana_closingbracket 」 RIGHT CORNER BRACKET */
1491 { 0x04de, 0x309b }, /* voicedsound ゛ KATAKANA-HIRAGANA VOICED SOUND MARK */
1492 { 0x04df, 0x309c }, /* semivoicedsound ゜ KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK */
1493 { 0x04a7, 0x30a1 }, /* kana_a ァ KATAKANA LETTER SMALL A */
1494 { 0x04b1, 0x30a2 }, /* kana_A ア KATAKANA LETTER A */
1495 { 0x04a8, 0x30a3 }, /* kana_i ィ KATAKANA LETTER SMALL I */
1496 { 0x04b2, 0x30a4 }, /* kana_I イ KATAKANA LETTER I */
1497 { 0x04a9, 0x30a5 }, /* kana_u ゥ KATAKANA LETTER SMALL U */
1498 { 0x04b3, 0x30a6 }, /* kana_U ウ KATAKANA LETTER U */
1499 { 0x04aa, 0x30a7 }, /* kana_e ェ KATAKANA LETTER SMALL E */
1500 { 0x04b4, 0x30a8 }, /* kana_E エ KATAKANA LETTER E */
1501 { 0x04ab, 0x30a9 }, /* kana_o ォ KATAKANA LETTER SMALL O */
1502 { 0x04b5, 0x30aa }, /* kana_O オ KATAKANA LETTER O */
1503 { 0x04b6, 0x30ab }, /* kana_KA カ KATAKANA LETTER KA */
1504 { 0x04b7, 0x30ad }, /* kana_KI キ KATAKANA LETTER KI */
1505 { 0x04b8, 0x30af }, /* kana_KU ク KATAKANA LETTER KU */
1506 { 0x04b9, 0x30b1 }, /* kana_KE ケ KATAKANA LETTER KE */
1507 { 0x04ba, 0x30b3 }, /* kana_KO コ KATAKANA LETTER KO */
1508 { 0x04bb, 0x30b5 }, /* kana_SA サ KATAKANA LETTER SA */
1509 { 0x04bc, 0x30b7 }, /* kana_SHI シ KATAKANA LETTER SI */
1510 { 0x04bd, 0x30b9 }, /* kana_SU ス KATAKANA LETTER SU */
1511 { 0x04be, 0x30bb }, /* kana_SE セ KATAKANA LETTER SE */
1512 { 0x04bf, 0x30bd }, /* kana_SO ソ KATAKANA LETTER SO */
1513 { 0x04c0, 0x30bf }, /* kana_TA タ KATAKANA LETTER TA */
1514 { 0x04c1, 0x30c1 }, /* kana_CHI チ KATAKANA LETTER TI */
1515 { 0x04af, 0x30c3 }, /* kana_tsu ッ KATAKANA LETTER SMALL TU */
1516 { 0x04c2, 0x30c4 }, /* kana_TSU ツ KATAKANA LETTER TU */
1517 { 0x04c3, 0x30c6 }, /* kana_TE テ KATAKANA LETTER TE */
1518 { 0x04c4, 0x30c8 }, /* kana_TO ト KATAKANA LETTER TO */
1519 { 0x04c5, 0x30ca }, /* kana_NA ナ KATAKANA LETTER NA */
1520 { 0x04c6, 0x30cb }, /* kana_NI ニ KATAKANA LETTER NI */
1521 { 0x04c7, 0x30cc }, /* kana_NU ヌ KATAKANA LETTER NU */
1522 { 0x04c8, 0x30cd }, /* kana_NE ネ KATAKANA LETTER NE */
1523 { 0x04c9, 0x30ce }, /* kana_NO ノ KATAKANA LETTER NO */
1524 { 0x04ca, 0x30cf }, /* kana_HA ハ KATAKANA LETTER HA */
1525 { 0x04cb, 0x30d2 }, /* kana_HI ヒ KATAKANA LETTER HI */
1526 { 0x04cc, 0x30d5 }, /* kana_FU フ KATAKANA LETTER HU */
1527 { 0x04cd, 0x30d8 }, /* kana_HE ヘ KATAKANA LETTER HE */
1528 { 0x04ce, 0x30db }, /* kana_HO ホ KATAKANA LETTER HO */
1529 { 0x04cf, 0x30de }, /* kana_MA マ KATAKANA LETTER MA */
1530 { 0x04d0, 0x30df }, /* kana_MI ミ KATAKANA LETTER MI */
1531 { 0x04d1, 0x30e0 }, /* kana_MU ム KATAKANA LETTER MU */
1532 { 0x04d2, 0x30e1 }, /* kana_ME メ KATAKANA LETTER ME */
1533 { 0x04d3, 0x30e2 }, /* kana_MO モ KATAKANA LETTER MO */
1534 { 0x04ac, 0x30e3 }, /* kana_ya ャ KATAKANA LETTER SMALL YA */
1535 { 0x04d4, 0x30e4 }, /* kana_YA ヤ KATAKANA LETTER YA */
1536 { 0x04ad, 0x30e5 }, /* kana_yu ュ KATAKANA LETTER SMALL YU */
1537 { 0x04d5, 0x30e6 }, /* kana_YU ユ KATAKANA LETTER YU */
1538 { 0x04ae, 0x30e7 }, /* kana_yo ョ KATAKANA LETTER SMALL YO */
1539 { 0x04d6, 0x30e8 }, /* kana_YO ヨ KATAKANA LETTER YO */
1540 { 0x04d7, 0x30e9 }, /* kana_RA ラ KATAKANA LETTER RA */
1541 { 0x04d8, 0x30ea }, /* kana_RI リ KATAKANA LETTER RI */
1542 { 0x04d9, 0x30eb }, /* kana_RU ル KATAKANA LETTER RU */
1543 { 0x04da, 0x30ec }, /* kana_RE レ KATAKANA LETTER RE */
1544 { 0x04db, 0x30ed }, /* kana_RO ロ KATAKANA LETTER RO */
1545 { 0x04dc, 0x30ef }, /* kana_WA ワ KATAKANA LETTER WA */
1546 { 0x04a6, 0x30f2 }, /* kana_WO ヲ KATAKANA LETTER WO */
1547 { 0x04dd, 0x30f3 }, /* kana_N ン KATAKANA LETTER N */
1548 { 0x04a5, 0x30fb }, /* kana_conjunctive ・ KATAKANA MIDDLE DOT */
1549 { 0x04b0, 0x30fc }, /* prolongedsound ー KATAKANA-HIRAGANA PROLONGED SOUND MARK */
1550 { 0x0ea1, 0x3131 }, /* Hangul_Kiyeog ㄱ HANGUL LETTER KIYEOK */
1551 { 0x0ea2, 0x3132 }, /* Hangul_SsangKiyeog ㄲ HANGUL LETTER SSANGKIYEOK */
1552 { 0x0ea3, 0x3133 }, /* Hangul_KiyeogSios ㄳ HANGUL LETTER KIYEOK-SIOS */
1553 { 0x0ea4, 0x3134 }, /* Hangul_Nieun ㄴ HANGUL LETTER NIEUN */
1554 { 0x0ea5, 0x3135 }, /* Hangul_NieunJieuj ㄵ HANGUL LETTER NIEUN-CIEUC */
1555 { 0x0ea6, 0x3136 }, /* Hangul_NieunHieuh ㄶ HANGUL LETTER NIEUN-HIEUH */
1556 { 0x0ea7, 0x3137 }, /* Hangul_Dikeud ㄷ HANGUL LETTER TIKEUT */
1557 { 0x0ea8, 0x3138 }, /* Hangul_SsangDikeud ㄸ HANGUL LETTER SSANGTIKEUT */
1558 { 0x0ea9, 0x3139 }, /* Hangul_Rieul ㄹ HANGUL LETTER RIEUL */
1559 { 0x0eaa, 0x313a }, /* Hangul_RieulKiyeog ㄺ HANGUL LETTER RIEUL-KIYEOK */
1560 { 0x0eab, 0x313b }, /* Hangul_RieulMieum ㄻ HANGUL LETTER RIEUL-MIEUM */
1561 { 0x0eac, 0x313c }, /* Hangul_RieulPieub ㄼ HANGUL LETTER RIEUL-PIEUP */
1562 { 0x0ead, 0x313d }, /* Hangul_RieulSios ㄽ HANGUL LETTER RIEUL-SIOS */
1563 { 0x0eae, 0x313e }, /* Hangul_RieulTieut ㄾ HANGUL LETTER RIEUL-THIEUTH */
1564 { 0x0eaf, 0x313f }, /* Hangul_RieulPhieuf ㄿ HANGUL LETTER RIEUL-PHIEUPH */
1565 { 0x0eb0, 0x3140 }, /* Hangul_RieulHieuh ㅀ HANGUL LETTER RIEUL-HIEUH */
1566 { 0x0eb1, 0x3141 }, /* Hangul_Mieum ㅁ HANGUL LETTER MIEUM */
1567 { 0x0eb2, 0x3142 }, /* Hangul_Pieub ㅂ HANGUL LETTER PIEUP */
1568 { 0x0eb3, 0x3143 }, /* Hangul_SsangPieub ㅃ HANGUL LETTER SSANGPIEUP */
1569 { 0x0eb4, 0x3144 }, /* Hangul_PieubSios ㅄ HANGUL LETTER PIEUP-SIOS */
1570 { 0x0eb5, 0x3145 }, /* Hangul_Sios ㅅ HANGUL LETTER SIOS */
1571 { 0x0eb6, 0x3146 }, /* Hangul_SsangSios ㅆ HANGUL LETTER SSANGSIOS */
1572 { 0x0eb7, 0x3147 }, /* Hangul_Ieung ㅇ HANGUL LETTER IEUNG */
1573 { 0x0eb8, 0x3148 }, /* Hangul_Jieuj ㅈ HANGUL LETTER CIEUC */
1574 { 0x0eb9, 0x3149 }, /* Hangul_SsangJieuj ㅉ HANGUL LETTER SSANGCIEUC */
1575 { 0x0eba, 0x314a }, /* Hangul_Cieuc ㅊ HANGUL LETTER CHIEUCH */
1576 { 0x0ebb, 0x314b }, /* Hangul_Khieuq ㅋ HANGUL LETTER KHIEUKH */
1577 { 0x0ebc, 0x314c }, /* Hangul_Tieut ㅌ HANGUL LETTER THIEUTH */
1578 { 0x0ebd, 0x314d }, /* Hangul_Phieuf ㅍ HANGUL LETTER PHIEUPH */
1579 { 0x0ebe, 0x314e }, /* Hangul_Hieuh ㅎ HANGUL LETTER HIEUH */
1580 { 0x0ebf, 0x314f }, /* Hangul_A ㅏ HANGUL LETTER A */
1581 { 0x0ec0, 0x3150 }, /* Hangul_AE ㅐ HANGUL LETTER AE */
1582 { 0x0ec1, 0x3151 }, /* Hangul_YA ㅑ HANGUL LETTER YA */
1583 { 0x0ec2, 0x3152 }, /* Hangul_YAE ㅒ HANGUL LETTER YAE */
1584 { 0x0ec3, 0x3153 }, /* Hangul_EO ㅓ HANGUL LETTER EO */
1585 { 0x0ec4, 0x3154 }, /* Hangul_E ㅔ HANGUL LETTER E */
1586 { 0x0ec5, 0x3155 }, /* Hangul_YEO ㅕ HANGUL LETTER YEO */
1587 { 0x0ec6, 0x3156 }, /* Hangul_YE ㅖ HANGUL LETTER YE */
1588 { 0x0ec7, 0x3157 }, /* Hangul_O ㅗ HANGUL LETTER O */
1589 { 0x0ec8, 0x3158 }, /* Hangul_WA ㅘ HANGUL LETTER WA */
1590 { 0x0ec9, 0x3159 }, /* Hangul_WAE ㅙ HANGUL LETTER WAE */
1591 { 0x0eca, 0x315a }, /* Hangul_OE ㅚ HANGUL LETTER OE */
1592 { 0x0ecb, 0x315b }, /* Hangul_YO ㅛ HANGUL LETTER YO */
1593 { 0x0ecc, 0x315c }, /* Hangul_U ㅜ HANGUL LETTER U */
1594 { 0x0ecd, 0x315d }, /* Hangul_WEO ㅝ HANGUL LETTER WEO */
1595 { 0x0ece, 0x315e }, /* Hangul_WE ㅞ HANGUL LETTER WE */
1596 { 0x0ecf, 0x315f }, /* Hangul_WI ㅟ HANGUL LETTER WI */
1597 { 0x0ed0, 0x3160 }, /* Hangul_YU ㅠ HANGUL LETTER YU */
1598 { 0x0ed1, 0x3161 }, /* Hangul_EU ㅡ HANGUL LETTER EU */
1599 { 0x0ed2, 0x3162 }, /* Hangul_YI ㅢ HANGUL LETTER YI */
1600 { 0x0ed3, 0x3163 }, /* Hangul_I ㅣ HANGUL LETTER I */
1601 { 0x0eef, 0x316d }, /* Hangul_RieulYeorinHieuh ㅭ HANGUL LETTER RIEUL-YEORINHIEUH */
1602 { 0x0ef0, 0x3171 }, /* Hangul_SunkyeongeumMieum ㅱ HANGUL LETTER KAPYEOUNMIEUM */
1603 { 0x0ef1, 0x3178 }, /* Hangul_SunkyeongeumPieub ㅸ HANGUL LETTER KAPYEOUNPIEUP */
1604 { 0x0ef2, 0x317f }, /* Hangul_PanSios ㅿ HANGUL LETTER PANSIOS */
1605 { 0x0ef4, 0x3184 }, /* Hangul_SunkyeongeumPhieuf ㆄ HANGUL LETTER KAPYEOUNPHIEUPH */
1606 { 0x0ef5, 0x3186 }, /* Hangul_YeorinHieuh ㆆ HANGUL LETTER YEORINHIEUH */
1607 { 0x0ef6, 0x318d }, /* Hangul_AraeA ㆍ HANGUL LETTER ARAEA */
1608 { 0x0ef7, 0x318e }, /* Hangul_AraeAE ㆎ HANGUL LETTER ARAEAE */
1609 };
1610
1611 #endif // KEYDATA_H
+0
-173
src/keyserver_x11.h less more
0 /*
1 Copyright (C) 2001 Ellis Whitehead <ellis@kde.org>
2
3 Win32 port:
4 Copyright (C) 2004 Jaroslaw Staniek <js@iidea.pl>
5
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Library General Public
8 License as published by the Free Software Foundation; either
9 version 2 of the License, or (at your option) any later version.
10
11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Library General Public License for more details.
15
16 You should have received a copy of the GNU Library General Public License
17 along with this library; see the file COPYING.LIB. If not, write to
18 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 Boston, MA 02110-1301, USA.
20 */
21
22 #ifndef KEYSERVER_X11_H
23 #define KEYSERVER_X11_H
24
25 #include <X11/keysym.h>
26
27 struct TransKey {
28 int keySymQt;
29 uint keySymX;
30 };
31
32 static const TransKey g_rgQtToSymX[] = {
33 { Qt::Key_Escape, XK_Escape },
34 { Qt::Key_Tab, XK_Tab },
35 { Qt::Key_Backtab, XK_ISO_Left_Tab },
36 { Qt::Key_Backspace, XK_BackSpace },
37 { Qt::Key_Return, XK_Return },
38 { Qt::Key_Enter, XK_KP_Enter },
39 { Qt::Key_Insert, XK_Insert },
40 { Qt::Key_Delete, XK_Delete },
41 { Qt::Key_Pause, XK_Pause },
42 #ifdef sun
43 { Qt::Key_Print, XK_F22 },
44 #else
45 { Qt::Key_Print, XK_Print },
46 #endif
47 { Qt::Key_SysReq, XK_Sys_Req },
48 { Qt::Key_Home, XK_Home },
49 { Qt::Key_End, XK_End },
50 { Qt::Key_Left, XK_Left },
51 { Qt::Key_Up, XK_Up },
52 { Qt::Key_Right, XK_Right },
53 { Qt::Key_Down, XK_Down },
54 //{ Qt::Key_Shift, 0 },
55 //{ Qt::Key_Control, 0 },
56 //{ Qt::Key_Meta, 0 },
57 //{ Qt::Key_Alt, 0 },
58 { Qt::Key_CapsLock, XK_Caps_Lock },
59 { Qt::Key_NumLock, XK_Num_Lock },
60 { Qt::Key_ScrollLock, XK_Scroll_Lock },
61 { Qt::Key_F1, XK_F1 },
62 { Qt::Key_F2, XK_F2 },
63 { Qt::Key_F3, XK_F3 },
64 { Qt::Key_F4, XK_F4 },
65 { Qt::Key_F5, XK_F5 },
66 { Qt::Key_F6, XK_F6 },
67 { Qt::Key_F7, XK_F7 },
68 { Qt::Key_F8, XK_F8 },
69 { Qt::Key_F9, XK_F9 },
70 { Qt::Key_F10, XK_F10 },
71 { Qt::Key_F11, XK_F11 },
72 { Qt::Key_F12, XK_F12 },
73 { Qt::Key_F13, XK_F13 },
74 { Qt::Key_F14, XK_F14 },
75 { Qt::Key_F15, XK_F15 },
76 { Qt::Key_F16, XK_F16 },
77 { Qt::Key_F17, XK_F17 },
78 { Qt::Key_F18, XK_F18 },
79 { Qt::Key_F19, XK_F19 },
80 { Qt::Key_F20, XK_F20 },
81 { Qt::Key_F21, XK_F21 },
82 { Qt::Key_F22, XK_F22 },
83 { Qt::Key_F23, XK_F23 },
84 { Qt::Key_F24, XK_F24 },
85 { Qt::Key_F25, XK_F25 },
86 { Qt::Key_F26, XK_F26 },
87 { Qt::Key_F27, XK_F27 },
88 { Qt::Key_F28, XK_F28 },
89 { Qt::Key_F29, XK_F29 },
90 { Qt::Key_F30, XK_F30 },
91 { Qt::Key_F31, XK_F31 },
92 { Qt::Key_F32, XK_F32 },
93 { Qt::Key_F33, XK_F33 },
94 { Qt::Key_F34, XK_F34 },
95 { Qt::Key_F35, XK_F35 },
96 { Qt::Key_Super_L, XK_Super_L },
97 { Qt::Key_Super_R, XK_Super_R },
98 { Qt::Key_Menu, XK_Menu },
99 { Qt::Key_Hyper_L, XK_Hyper_L },
100 { Qt::Key_Hyper_R, XK_Hyper_R },
101 { Qt::Key_Help, XK_Help },
102
103 { '/', XK_KP_Divide },
104 { '*', XK_KP_Multiply },
105 { '-', XK_KP_Subtract },
106 { '+', XK_KP_Add },
107 { Qt::Key_Return, XK_KP_Enter },
108 {Qt::Key_Multi_key, XK_Multi_key},
109 {Qt::Key_Codeinput, XK_Codeinput},
110 {Qt::Key_SingleCandidate, XK_SingleCandidate},
111 {Qt::Key_MultipleCandidate, XK_MultipleCandidate},
112 {Qt::Key_PreviousCandidate, XK_PreviousCandidate},
113 {Qt::Key_Mode_switch, XK_Mode_switch},
114 {Qt::Key_Kanji, XK_Kanji},
115 {Qt::Key_Muhenkan, XK_Muhenkan},
116 {Qt::Key_Henkan, XK_Henkan},
117 {Qt::Key_Romaji, XK_Romaji},
118 {Qt::Key_Hiragana, XK_Hiragana},
119 {Qt::Key_Katakana, XK_Katakana},
120 {Qt::Key_Hiragana_Katakana, XK_Hiragana_Katakana},
121 {Qt::Key_Zenkaku, XK_Zenkaku},
122 {Qt::Key_Hankaku, XK_Hankaku},
123 {Qt::Key_Zenkaku_Hankaku, XK_Zenkaku_Hankaku},
124 {Qt::Key_Touroku, XK_Touroku},
125 {Qt::Key_Massyo, XK_Massyo},
126 {Qt::Key_Kana_Lock, XK_Kana_Lock},
127 {Qt::Key_Kana_Shift, XK_Kana_Shift},
128 {Qt::Key_Eisu_Shift, XK_Eisu_Shift},
129 {Qt::Key_Eisu_toggle, XK_Eisu_toggle},
130 {Qt::Key_Hangul, XK_Hangul},
131 {Qt::Key_Hangul_Start, XK_Hangul_Start},
132 {Qt::Key_Hangul_End, XK_Hangul_End},
133 {Qt::Key_Hangul_Hanja, XK_Hangul_Hanja},
134 {Qt::Key_Hangul_Jamo, XK_Hangul_Jamo},
135 {Qt::Key_Hangul_Romaja, XK_Hangul_Romaja},
136 {Qt::Key_Hangul_Jeonja, XK_Hangul_Jeonja},
137 {Qt::Key_Hangul_Banja, XK_Hangul_Banja},
138 {Qt::Key_Hangul_PreHanja, XK_Hangul_PreHanja},
139 {Qt::Key_Hangul_PostHanja, XK_Hangul_PostHanja},
140 {Qt::Key_Hangul_Special, XK_Hangul_Special},
141 };
142
143 #include <qstring.h>
144
145 inline int map_sym_to_qt(uint keySym)
146 {
147 if (keySym < 0x1000) {
148 if (keySym >= 'a' && keySym <= 'z')
149 return QChar(keySym).toUpper().unicode();
150 return keySym;
151 }
152 #ifdef Q_WS_WIN
153 if (keySym < 0x3000)
154 return keySym;
155 #else
156 if (keySym < 0x3000)
157 return keySym | Qt::UNICODE_ACCEL;
158
159 for (uint i = 0; i < sizeof(g_rgQtToSymX) / sizeof(TransKey); i++)
160 if (g_rgQtToSymX[i].keySymX == keySym)
161 return g_rgQtToSymX[i].keySymQt;
162 #endif
163 return Qt::Key_unknown;
164 }
165
166 static bool symToKeyQt(uint keySym, int& keyQt)
167 {
168 keyQt = map_sym_to_qt(keySym);
169 return (keyQt != Qt::Key_unknown);
170 }
171
172 #endif
+0
-56
src/keyuni.cpp less more
0 /***************************************************************************
1 * Copyright (C) 2012~2013 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #include <stdint.h>
20 #include "keyuni.h"
21 #include "keydata.h"
22
23 uint32_t
24 FcitxKeySymToUnicode (uint32_t keyval)
25 {
26 int min = 0;
27 int max = sizeof (gdk_keysym_to_unicode_tab) / sizeof(gdk_keysym_to_unicode_tab[0]) - 1;
28 int mid;
29
30 /* First check for Latin-1 characters (1:1 mapping) */
31 if ((keyval >= 0x0020 && keyval <= 0x007e) ||
32 (keyval >= 0x00a0 && keyval <= 0x00ff))
33 return keyval;
34
35 /* Also check for directly encoded 24-bit UCS characters:
36 */
37 if ((keyval & 0xff000000) == 0x01000000)
38 return keyval & 0x00ffffff;
39
40 /* binary search in table */
41 while (max >= min) {
42 mid = (min + max) / 2;
43 if (gdk_keysym_to_unicode_tab[mid].keysym < keyval)
44 min = mid + 1;
45 else if (gdk_keysym_to_unicode_tab[mid].keysym > keyval)
46 max = mid - 1;
47 else {
48 /* found it */
49 return gdk_keysym_to_unicode_tab[mid].ucs;
50 }
51 }
52
53 /* No matching Unicode value found */
54 return 0;
55 }
+0
-29
src/keyuni.h less more
0 /***************************************************************************
1 * Copyright (C) 2012~2013 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #ifndef KEYUNI_H
20 #define KEYUNI_H
21
22 #include <qglobal.h>
23
24 quint32
25 FcitxKeySymToUnicode (quint32 keyval);
26
27
28 #endif // KEYUNI_H
+0
-35
src/main.cpp less more
0 /***************************************************************************
1 * Copyright (C) 2012~2013 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #include "main.h"
20
21
22 QStringList QFcitxPlatformInputContextPlugin::keys() const
23 {
24 return QStringList(QStringLiteral("fcitx"));
25
26 }
27
28 QFcitxPlatformInputContext *QFcitxPlatformInputContextPlugin::create(const QString& system, const QStringList& paramList)
29 {
30 Q_UNUSED(paramList);
31 if (system.compare(system, QStringLiteral("fcitx"), Qt::CaseInsensitive) == 0)
32 return new QFcitxPlatformInputContext;
33 return 0;
34 }
+0
-37
src/main.h less more
0 /***************************************************************************
1 * Copyright (C) 2012~2013 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #ifndef MAIN_H
20 #define MAIN_H
21
22 #include <qpa/qplatforminputcontextplugin_p.h>
23 #include <QtCore/QStringList>
24
25 #include "qfcitxplatforminputcontext.h"
26
27 class QFcitxPlatformInputContextPlugin : public QPlatformInputContextPlugin
28 {
29 Q_OBJECT
30 public:
31 Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QPlatformInputContextFactoryInterface" FILE "fcitx.json")
32 QStringList keys() const;
33 QFcitxPlatformInputContext *create(const QString& system, const QStringList& paramList);
34 };
35
36 #endif // MAIN_H
+0
-873
src/qfcitxplatforminputcontext.cpp less more
0 /***************************************************************************
1 * Copyright (C) 2011~2013 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #include <QKeyEvent>
20 #include <QDBusConnection>
21 #include <QGuiApplication>
22 #include <QInputMethod>
23 #include <QTextCharFormat>
24 #include <QPalette>
25 #include <QWindow>
26
27 #include <unistd.h>
28 #include <errno.h>
29 #include <signal.h>
30
31 #include "keyserver_x11.h"
32 #include "fcitx-compose-data.h"
33
34 #include "qfcitxplatforminputcontext.h"
35 #include "fcitx-qt5/fcitxqtinputcontextproxy.h"
36 #include "fcitx-qt5/fcitxqtinputmethodproxy.h"
37 #include <fcitx-qt5/fcitxqtconnection.h>
38 #include "keyuni.h"
39 #include "utils.h"
40
41 typedef struct _FcitxComposeTableCompact FcitxComposeTableCompact;
42 struct _FcitxComposeTableCompact {
43 const quint32 *data;
44 int max_seq_len;
45 int n_index_size;
46 int n_index_stride;
47 };
48
49 static const FcitxComposeTableCompact fcitx_compose_table_compact = {
50 fcitx_compose_seqs_compact,
51 5,
52 23,
53 6
54 };
55
56 static const uint fcitx_compose_ignore[] = {
57 XK_Shift_L,
58 XK_Shift_R,
59 XK_Control_L,
60 XK_Control_R,
61 XK_Caps_Lock,
62 XK_Shift_Lock,
63 XK_Meta_L,
64 XK_Meta_R,
65 XK_Alt_L,
66 XK_Alt_R,
67 XK_Super_L,
68 XK_Super_R,
69 XK_Hyper_L,
70 XK_Hyper_R,
71 XK_Mode_switch,
72 XK_ISO_Level3_Shift,
73 XK_VoidSymbol
74 };
75
76 static bool key_filtered = false;
77
78 static bool
79 get_boolean_env(const char *name,
80 bool defval)
81 {
82 const char *value = getenv(name);
83
84 if (value == NULL)
85 return defval;
86
87 if (strcmp(value, "") == 0 ||
88 strcmp(value, "0") == 0 ||
89 strcmp(value, "false") == 0 ||
90 strcmp(value, "False") == 0 ||
91 strcmp(value, "FALSE") == 0)
92 return false;
93
94 return true;
95 }
96
97 static int
98 compare_seq_index(const void *key, const void *value)
99 {
100 const uint *keysyms = (const uint *)key;
101 const quint32 *seq = (const quint32 *)value;
102
103 if (keysyms[0] < seq[0])
104 return -1;
105 else if (keysyms[0] > seq[0])
106 return 1;
107 return 0;
108 }
109
110 static int
111 compare_seq(const void *key, const void *value)
112 {
113 int i = 0;
114 const uint *keysyms = (const uint *)key;
115 const quint32 *seq = (const quint32 *)value;
116
117 while (keysyms[i]) {
118 if (keysyms[i] < seq[i])
119 return -1;
120 else if (keysyms[i] > seq[i])
121 return 1;
122 i++;
123 }
124
125 return 0;
126 }
127
128
129 QFcitxPlatformInputContext::QFcitxPlatformInputContext() :
130 m_connection(new FcitxQtConnection(this)),
131 m_improxy(0),
132 m_n_compose(0),
133 m_cursorPos(0),
134 m_useSurroundingText(false),
135 m_syncMode(true),
136 m_lastWId(0)
137 {
138 FcitxQtFormattedPreedit::registerMetaType();
139
140 memset(m_compose_buffer, 0, sizeof(uint) * (MAX_COMPOSE_LEN + 1));
141 connect(m_connection, SIGNAL(connected()), this, SLOT(connected()));
142 connect(m_connection, SIGNAL(disconnected()), this, SLOT(cleanUp()));
143
144 m_connection->startConnection();
145 }
146
147 QFcitxPlatformInputContext::~QFcitxPlatformInputContext()
148 {
149 cleanUp();
150 }
151
152 void QFcitxPlatformInputContext::connected()
153 {
154 if (!m_connection->isConnected())
155 return;
156
157 // qDebug() << "create Input Context" << m_connection->name();
158 if (m_improxy) {
159 delete m_improxy;
160 m_improxy = 0;
161 }
162 m_improxy = new FcitxQtInputMethodProxy(m_connection->serviceName(), QLatin1String("/inputmethod"), *m_connection->connection(), this);
163
164 QWindow* w = qApp->focusWindow();
165 if (w)
166 createICData(w);
167 }
168
169 void QFcitxPlatformInputContext::cleanUp()
170 {
171 for(QHash<WId, FcitxQtICData *>::const_iterator i = m_icMap.constBegin(),
172 e = m_icMap.constEnd(); i != e; ++i) {
173 FcitxQtICData* data = i.value();
174
175 if (data->proxy)
176 delete data->proxy;
177 }
178
179 m_icMap.clear();
180
181 if (m_improxy) {
182 delete m_improxy;
183 m_improxy = 0;
184 }
185
186 reset();
187 }
188
189 bool QFcitxPlatformInputContext::isValid() const
190 {
191 return true;
192 }
193
194 void QFcitxPlatformInputContext::invokeAction(QInputMethod::Action action, int cursorPosition)
195 {
196 if (action == QInputMethod::Click
197 && (cursorPosition <= 0 || cursorPosition >= m_preedit.length())
198 )
199 {
200 // qDebug() << action << cursorPosition;
201 commitPreedit();
202 }
203 }
204
205 void QFcitxPlatformInputContext::commitPreedit()
206 {
207 QObject *input = qApp->focusObject();
208 if (!input)
209 return;
210 if (m_commitPreedit.length() <= 0)
211 return;
212 QInputMethodEvent e;
213 e.setCommitString(m_commitPreedit);
214 QCoreApplication::sendEvent(input, &e);
215 m_commitPreedit.clear();
216 }
217
218
219 void QFcitxPlatformInputContext::reset()
220 {
221 commitPreedit();
222 FcitxQtInputContextProxy* proxy = validIC();
223 if (proxy)
224 proxy->Reset();
225 QPlatformInputContext::reset();
226 }
227
228 void QFcitxPlatformInputContext::update(Qt::InputMethodQueries queries )
229 {
230 QWindow* window = qApp->focusWindow();
231 FcitxQtInputContextProxy* proxy = validICByWindow(window);
232 if (!proxy)
233 return;
234
235 FcitxQtICData* data = m_icMap.value(window->winId());
236
237 QInputMethod *method = qApp->inputMethod();
238 QObject *input = qApp->focusObject();
239 if (!input)
240 return;
241
242 QInputMethodQueryEvent query(queries);
243 QGuiApplication::sendEvent(input, &query);
244
245 if (queries & Qt::ImCursorRectangle) {
246 cursorRectChanged();
247 }
248
249 if (queries & Qt::ImHints) {
250 Qt::InputMethodHints hints = Qt::InputMethodHints(query.value(Qt::ImHints).toUInt());
251
252
253 #define CHECK_HINTS(_HINTS, _CAPACITY) \
254 if (hints & _HINTS) \
255 addCapacity(data, _CAPACITY); \
256 else \
257 removeCapacity(data, _CAPACITY);
258
259 CHECK_HINTS(Qt::ImhNoAutoUppercase, CAPACITY_NOAUTOUPPERCASE)
260 CHECK_HINTS(Qt::ImhPreferNumbers, CAPACITY_NUMBER)
261 CHECK_HINTS(Qt::ImhPreferUppercase, CAPACITY_UPPERCASE)
262 CHECK_HINTS(Qt::ImhPreferLowercase, CAPACITY_LOWERCASE)
263 CHECK_HINTS(Qt::ImhNoPredictiveText, CAPACITY_NO_SPELLCHECK)
264 CHECK_HINTS(Qt::ImhDigitsOnly, CAPACITY_DIGIT)
265 CHECK_HINTS(Qt::ImhFormattedNumbersOnly, CAPACITY_NUMBER)
266 CHECK_HINTS(Qt::ImhUppercaseOnly, CAPACITY_UPPERCASE)
267 CHECK_HINTS(Qt::ImhLowercaseOnly, CAPACITY_LOWERCASE)
268 CHECK_HINTS(Qt::ImhDialableCharactersOnly, CAPACITY_DIALABLE)
269 CHECK_HINTS(Qt::ImhEmailCharactersOnly, CAPACITY_EMAIL)
270 }
271
272 bool setSurrounding = false;
273 do {
274 if (!m_useSurroundingText)
275 break;
276 if (!((queries & Qt::ImSurroundingText) && (queries & Qt::ImCursorPosition)))
277 break;
278 if (data->capacity.testFlag(CAPACITY_PASSWORD))
279 break;
280 QVariant var = query.value(Qt::ImSurroundingText);
281 QVariant var1 = query.value(Qt::ImCursorPosition);
282 QVariant var2 = query.value(Qt::ImAnchorPosition);
283 if (!var.isValid() || !var1.isValid())
284 break;
285 QString text = var.toString();
286 /* we don't want to waste too much memory here */
287 #define SURROUNDING_THRESHOLD 4096
288 if (text.length() < SURROUNDING_THRESHOLD) {
289 if (_utf8_check_string(text.toUtf8().data())) {
290 addCapacity(data, CAPACITY_SURROUNDING_TEXT);
291
292 int cursor = var1.toInt();
293 int anchor;
294 if (var2.isValid())
295 anchor = var2.toInt();
296 else
297 anchor = cursor;
298 if (data->surroundingText != text) {
299 data->surroundingText = text;
300 proxy->SetSurroundingText(text, cursor, anchor);
301 }
302 else {
303 if (data->surroundingAnchor != anchor ||
304 data->surroundingCursor != cursor)
305 proxy->SetSurroundingTextPosition(cursor, anchor);
306 }
307 data->surroundingCursor = cursor;
308 data->surroundingAnchor = anchor;
309 setSurrounding = true;
310 }
311 }
312 if (!setSurrounding) {
313 data->surroundingAnchor = -1;
314 data->surroundingCursor = -1;
315 data->surroundingText = QString::null;
316 removeCapacity(data, CAPACITY_SURROUNDING_TEXT);
317 }
318 } while(0);
319 }
320
321 void QFcitxPlatformInputContext::commit()
322 {
323 QPlatformInputContext::commit();
324 }
325
326 void QFcitxPlatformInputContext::setFocusObject(QObject* object)
327 {
328 FcitxQtInputContextProxy* proxy = validICByWId(m_lastWId);
329 if (proxy) {
330 proxy->FocusOut();
331 }
332
333 QWindow *window = qApp->focusWindow();
334 if (window) {
335 m_lastWId = window->winId();
336 } else {
337 m_lastWId = 0;
338 return;
339 }
340 proxy = validICByWindow(window);
341 if (proxy)
342 proxy->FocusIn();
343 else {
344 FcitxQtICData* data = m_icMap.value(window->winId());
345 if (!data) {
346 createICData(window);
347 return;
348 }
349 }
350 }
351
352 void QFcitxPlatformInputContext::windowDestroyed(QObject* object)
353 {
354 /* access QWindow is not possible here, so we use our own map to do so */
355 WId wid = m_windowToWidMap.take(object);
356 if (!wid)
357 return;
358 FcitxQtICData* data = m_icMap.take(wid);
359 if (!data)
360 return;
361
362 delete data;
363 // qDebug() << "Window Destroyed and we destroy IC correctly, horray!";
364 }
365
366 void QFcitxPlatformInputContext::cursorRectChanged()
367 {
368 QWindow *inputWindow = qApp->focusWindow();
369 if (!inputWindow)
370 return;
371 FcitxQtInputContextProxy* proxy = validICByWindow(inputWindow);
372 if (!proxy)
373 return;
374
375 FcitxQtICData* data = m_icMap.value(inputWindow->winId());
376
377 QRect r = qApp->inputMethod()->cursorRectangle().toRect();
378 if(!r.isValid())
379 return;
380
381 r.moveTopLeft(inputWindow->mapToGlobal(r.topLeft()));
382
383 if (data->rect != r) {
384 data->rect = r;
385 proxy->SetCursorRect(r.x(), r.y(), r.width(), r.height());
386 }
387 }
388
389 void QFcitxPlatformInputContext::createInputContext(WId w)
390 {
391 if (!m_connection->isConnected())
392 return;
393
394 // qDebug() << "create Input Context" << m_connection->connection()->name();
395
396 if (m_improxy) {
397 delete m_improxy;
398 m_improxy = NULL;
399 }
400 m_improxy = new FcitxQtInputMethodProxy(m_connection->serviceName(), QLatin1String("/inputmethod"), *m_connection->connection(), this);
401
402 if (!m_improxy->isValid())
403 return;
404
405 QFileInfo info(QCoreApplication::applicationFilePath());
406 QDBusPendingReply< int, bool, uint, uint, uint, uint > result = m_improxy->CreateICv3(info.fileName(), QCoreApplication::applicationPid());
407 QDBusPendingCallWatcher* watcher = new QDBusPendingCallWatcher(result);
408 watcher->setProperty("wid", (qulonglong) w);
409 connect(watcher, SIGNAL(finished(QDBusPendingCallWatcher*)), this, SLOT(createInputContextFinished(QDBusPendingCallWatcher*)));
410 }
411
412 void QFcitxPlatformInputContext::createInputContextFinished(QDBusPendingCallWatcher* watcher)
413 {
414 WId w = watcher->property("wid").toULongLong();
415 FcitxQtICData* data = m_icMap.value(w);
416 if (!data)
417 return;
418
419 QDBusPendingReply< int, bool, uint, uint, uint, uint > result = *watcher;
420
421 do {
422 if (result.isError()) {
423 break;
424 }
425
426 if (!m_connection->isConnected())
427 break;
428
429 int id = qdbus_cast<int>(result.argumentAt(0));
430 QString path = QString("/inputcontext_%1").arg(id);
431 if (data->proxy) {
432 delete data->proxy;
433 }
434 data->proxy = new FcitxQtInputContextProxy(m_connection->serviceName(), path, *m_connection->connection(), this);
435 connect(data->proxy, SIGNAL(CommitString(QString)), this, SLOT(commitString(QString)));
436 connect(data->proxy, SIGNAL(ForwardKey(uint, uint, int)), this, SLOT(forwardKey(uint, uint, int)));
437 connect(data->proxy, SIGNAL(UpdateFormattedPreedit(FcitxQtFormattedPreeditList,int)), this, SLOT(updateFormattedPreedit(FcitxQtFormattedPreeditList,int)));
438 connect(data->proxy, SIGNAL(DeleteSurroundingText(int,uint)), this, SLOT(deleteSurroundingText(int,uint)));
439
440 if (data->proxy->isValid()) {
441 QWindow* window = qApp->focusWindow();
442 if (window && window->winId() == w)
443 data->proxy->FocusIn();
444 }
445
446 QFlags<FcitxCapacityFlags> flag;
447 flag |= CAPACITY_PREEDIT;
448 flag |= CAPACITY_FORMATTED_PREEDIT;
449 flag |= CAPACITY_CLIENT_UNFOCUS_COMMIT;
450 m_useSurroundingText = get_boolean_env("FCITX_QT_ENABLE_SURROUNDING_TEXT", true);
451 if (m_useSurroundingText)
452 flag |= CAPACITY_SURROUNDING_TEXT;
453
454 /*
455 * event loop will cause some problem, so we tries to use async way.
456 */
457 m_syncMode = get_boolean_env("FCITX_QT_USE_SYNC", false);
458
459 addCapacity(data, flag, true);
460 } while(0);
461 delete watcher;
462 }
463
464 void QFcitxPlatformInputContext::updateCapacity(FcitxQtICData* data)
465 {
466 if (!data->proxy || !data->proxy->isValid())
467 return;
468
469 QDBusPendingReply< void > result = data->proxy->SetCapacity((uint) data->capacity);
470 }
471
472 void QFcitxPlatformInputContext::commitString(const QString& str)
473 {
474 m_cursorPos = 0;
475 m_preeditList.clear();
476 m_commitPreedit.clear();
477 QObject *input = qApp->focusObject();
478 if (!input)
479 return;
480
481 QInputMethodEvent event;
482 event.setCommitString(str);
483 QCoreApplication::sendEvent(input, &event);
484 }
485
486 void QFcitxPlatformInputContext::updateFormattedPreedit(const FcitxQtFormattedPreeditList& preeditList, int cursorPos)
487 {
488 QObject *input = qApp->focusObject();
489 if (!input)
490 return;
491 if (cursorPos == m_cursorPos && preeditList == m_preeditList)
492 return;
493 m_preeditList = preeditList;
494 m_cursorPos = cursorPos;
495 QString str, commitStr;
496 int pos = 0;
497 QList<QInputMethodEvent::Attribute> attrList;
498 Q_FOREACH(const FcitxQtFormattedPreedit& preedit, preeditList)
499 {
500 str += preedit.string();
501 if (!(preedit.format() & MSG_DONOT_COMMIT_WHEN_UNFOCUS))
502 commitStr += preedit.string();
503 QTextCharFormat format;
504 if ((preedit.format() & MSG_NOUNDERLINE) == 0) {
505 format.setUnderlineStyle(QTextCharFormat::DashUnderline);
506 }
507 if (preedit.format() & MSG_HIGHLIGHT) {
508 QBrush brush;
509 QPalette palette;
510 palette = QGuiApplication::palette();
511 format.setBackground(QBrush(QColor(palette.color(QPalette::Active, QPalette::Highlight))));
512 format.setForeground(QBrush(QColor(palette.color(QPalette::Active, QPalette::HighlightedText))));
513 }
514 attrList.append(QInputMethodEvent::Attribute(QInputMethodEvent::TextFormat, pos, preedit.string().length(), format));
515 pos += preedit.string().length();
516 }
517
518 QByteArray array = str.toUtf8();
519 array.truncate(cursorPos);
520 cursorPos = QString::fromUtf8(array).length();
521
522 attrList.append(QInputMethodEvent::Attribute(QInputMethodEvent::Cursor, cursorPos, 1, 0));
523 m_preedit = str;
524 m_commitPreedit = commitStr;
525 QInputMethodEvent event(str, attrList);
526 QCoreApplication::sendEvent(input, &event);
527 update(Qt::ImCursorRectangle);
528 }
529
530 void QFcitxPlatformInputContext::deleteSurroundingText(int offset, uint nchar)
531 {
532 QObject *input = qApp->focusObject();
533 if (!input)
534 return;
535
536 QInputMethodEvent event;
537 event.setCommitString("", offset, nchar);
538 QCoreApplication::sendEvent(input, &event);
539 }
540
541 void QFcitxPlatformInputContext::forwardKey(uint keyval, uint state, int type)
542 {
543 QObject *input = qApp->focusObject();
544 if (input != NULL) {
545 key_filtered = true;
546 QKeyEvent *keyevent = createKeyEvent(keyval, state, type);
547 QCoreApplication::sendEvent(input, keyevent);
548 delete keyevent;
549 key_filtered = false;
550 }
551 }
552
553 void QFcitxPlatformInputContext::createICData(QWindow* w)
554 {
555 FcitxQtICData* data = m_icMap.value(w->winId());
556 if (!data) {
557 data = new FcitxQtICData;
558 m_icMap[w->winId()] = data;
559 m_windowToWidMap[w] = w->winId();
560 connect(w, SIGNAL(destroyed(QObject*)), this, SLOT(windowDestroyed(QObject*)));
561 }
562 createInputContext(w->winId());
563 }
564
565 QKeyEvent* QFcitxPlatformInputContext::createKeyEvent(uint keyval, uint state, int type)
566 {
567 Qt::KeyboardModifiers qstate = Qt::NoModifier;
568
569 int count = 1;
570 if (state & FcitxKeyState_Alt) {
571 qstate |= Qt::AltModifier;
572 count ++;
573 }
574
575 if (state & FcitxKeyState_Shift) {
576 qstate |= Qt::ShiftModifier;
577 count ++;
578 }
579
580 if (state & FcitxKeyState_Ctrl) {
581 qstate |= Qt::ControlModifier;
582 count ++;
583 }
584
585 int key;
586 symToKeyQt(keyval, key);
587
588 QKeyEvent* keyevent = new QKeyEvent(
589 (type == FCITX_PRESS_KEY) ? (QEvent::KeyPress) : (QEvent::KeyRelease),
590 key,
591 qstate,
592 QString(),
593 false,
594 count
595 );
596
597 return keyevent;
598 }
599
600 bool QFcitxPlatformInputContext::x11FilterEvent(uint keyval, uint keycode, uint state, bool press)
601 {
602 if (key_filtered)
603 return false;
604
605 if (!inputMethodAccepted())
606 return false;
607
608 QObject *input = qApp->focusObject();
609
610 if (!input)
611 return false;
612
613 FcitxQtInputContextProxy* proxy = validICByWindow(qApp->focusWindow());
614
615 if (!proxy) {
616 return x11FilterEventFallback(keyval, keycode, state, press);
617 }
618
619 proxy->FocusIn();
620
621 QDBusPendingReply< int > result = proxy->ProcessKeyEvent(
622 keyval,
623 keycode,
624 state,
625 (press) ? FCITX_PRESS_KEY : FCITX_RELEASE_KEY,
626 QDateTime::currentDateTime().toTime_t()
627 );
628 do {
629 QCoreApplication::processEvents (QEventLoop::WaitForMoreEvents);
630 } while (QCoreApplication::hasPendingEvents () || !result.isFinished ());
631
632 if (!m_connection->isConnected() || !result.isFinished() || result.isError() || result.value() <= 0) {
633 return x11FilterEventFallback(keyval, keycode, state, press);
634 } else {
635 update(Qt::ImCursorRectangle);
636 return true;
637 }
638 return false;
639 }
640
641 bool QFcitxPlatformInputContext::x11FilterEventFallback(uint keyval, uint keycode, uint state, bool press)
642 {
643 Q_UNUSED(keycode);
644 if (processCompose(keyval, state, (press) ? FCITX_PRESS_KEY : FCITX_RELEASE_KEY)) {
645 return true;
646 }
647 return false;
648 }
649
650 FcitxQtInputContextProxy* QFcitxPlatformInputContext::validIC()
651 {
652 QWindow* window = qApp->focusWindow();
653 return validICByWindow(window);
654 }
655
656 FcitxQtInputContextProxy* QFcitxPlatformInputContext::validICByWId(WId wid)
657 {
658 FcitxQtICData* icData = m_icMap.value(wid);
659 if (!icData)
660 return 0;
661 if (icData->proxy.isNull()) {
662 return 0;
663 } else if (icData->proxy->isValid()) {
664 return icData->proxy.data();
665 }
666 return 0;
667 }
668
669 FcitxQtInputContextProxy* QFcitxPlatformInputContext::validICByWindow(QWindow* w)
670 {
671 if (!w)
672 return 0;
673
674 return validICByWId(w->winId());
675 }
676
677
678 bool QFcitxPlatformInputContext::processCompose(uint keyval, uint state, FcitxKeyEventType event)
679 {
680 Q_UNUSED(state);
681 int i;
682
683 if (event == FCITX_RELEASE_KEY)
684 return false;
685
686 for (i = 0; fcitx_compose_ignore[i] != XK_VoidSymbol; i++) {
687 if (keyval == fcitx_compose_ignore[i])
688 return false;
689 }
690
691 m_compose_buffer[m_n_compose ++] = keyval;
692 m_compose_buffer[m_n_compose] = 0;
693
694 if (checkCompactTable(&fcitx_compose_table_compact)) {
695 // qDebug () << "checkCompactTable ->true";
696 return true;
697 }
698
699 if (checkAlgorithmically()) {
700 // qDebug () << "checkAlgorithmically ->true";
701 return true;
702 }
703
704 if (m_n_compose > 1) {
705 m_compose_buffer[0] = 0;
706 m_n_compose = 0;
707 return true;
708 } else {
709 m_compose_buffer[0] = 0;
710 m_n_compose = 0;
711 return false;
712 }
713 }
714
715 #define IS_DEAD_KEY(k) \
716 ((k) >= XK_dead_grave && (k) <= (XK_dead_dasia+1))
717
718 bool QFcitxPlatformInputContext::checkAlgorithmically()
719 {
720 int i;
721 quint32 combination_buffer[MAX_COMPOSE_LEN];
722
723 if (m_n_compose >= MAX_COMPOSE_LEN)
724 return false;
725
726 for (i = 0; i < m_n_compose && IS_DEAD_KEY(m_compose_buffer[i]); i++);
727 if (i == m_n_compose)
728 return true;
729
730 if (i > 0 && i == m_n_compose - 1) {
731 combination_buffer[0] = FcitxKeySymToUnicode(m_compose_buffer[i]);
732 combination_buffer[m_n_compose] = 0;
733 i--;
734 while (i >= 0) {
735 switch (m_compose_buffer[i]) {
736 #define CASE(keysym, unicode) \
737 case XK_dead_##keysym: combination_buffer[i + 1] = unicode; break
738 CASE(grave, 0x0300);
739 CASE(acute, 0x0301);
740 CASE(circumflex, 0x0302);
741 CASE(tilde, 0x0303); /* Also used with perispomeni, 0x342. */
742 CASE(macron, 0x0304);
743 CASE(breve, 0x0306);
744 CASE(abovedot, 0x0307);
745 CASE(diaeresis, 0x0308);
746 CASE(hook, 0x0309);
747 CASE(abovering, 0x030A);
748 CASE(doubleacute, 0x030B);
749 CASE(caron, 0x030C);
750 CASE(abovecomma, 0x0313); /* Equivalent to psili */
751 CASE(abovereversedcomma, 0x0314); /* Equivalent to dasia */
752 CASE(horn, 0x031B); /* Legacy use for psili, 0x313 (or 0x343). */
753 CASE(belowdot, 0x0323);
754 CASE(cedilla, 0x0327);
755 CASE(ogonek, 0x0328); /* Legacy use for dasia, 0x314.*/
756 CASE(iota, 0x0345);
757 CASE(voiced_sound, 0x3099); /* Per Markus Kuhn keysyms.txt file. */
758 CASE(semivoiced_sound, 0x309A); /* Per Markus Kuhn keysyms.txt file. */
759 /* The following cases are to be removed once xkeyboard-config,
760 * xorg are fully updated.
761 **/
762 /* Workaround for typo in 1.4.x xserver-xorg */
763 case 0xfe66:
764 combination_buffer[i + 1] = 0x314;
765 break;
766 /* CASE (dasia, 0x314); */
767 /* CASE (perispomeni, 0x342); */
768 /* CASE (psili, 0x343); */
769 #undef CASE
770 default:
771 combination_buffer[i + 1] = FcitxKeySymToUnicode(m_compose_buffer[i]);
772 }
773 i--;
774 }
775
776 /* If the buffer normalizes to a single character,
777 * then modify the order of combination_buffer accordingly, if necessary,
778 * and return TRUE.
779 **/
780 #if 0
781 if (check_normalize_nfc(combination_buffer, m_n_compose)) {
782 gunichar value;
783 combination_utf8 = g_ucs4_to_utf8(combination_buffer, -1, NULL, NULL, NULL);
784 nfc = g_utf8_normalize(combination_utf8, -1, G_NORMALIZE_NFC);
785
786 value = g_utf8_get_char(nfc);
787 gtk_im_context_simple_commit_char(GTK_IM_CONTEXT(context_simple), value);
788 context_simple->compose_buffer[0] = 0;
789
790 g_free(combination_utf8);
791 g_free(nfc);
792
793 return TRUE;
794 }
795 #endif
796 QString s(QString::fromUcs4(combination_buffer, m_n_compose));
797 s = s.normalized(QString::NormalizationForm_C);
798
799 // qDebug () << "combination_buffer = " << QString::fromUcs4(combination_buffer, m_n_compose) << "m_n_compose" << m_n_compose;
800 // qDebug () << "result = " << s << "i = " << s.length();
801
802 if (s.length() == 1) {
803 commitString(QString(s[0]));
804 m_compose_buffer[0] = 0;
805 m_n_compose = 0;
806 return true;
807 }
808 }
809 return false;
810 }
811
812
813 bool
814 QFcitxPlatformInputContext::checkCompactTable(const FcitxComposeTableCompact *table)
815 {
816 int row_stride;
817 const quint32 *seq_index;
818 const quint32 *seq;
819 int i;
820
821 /* Will never match, if the sequence in the compose buffer is longer
822 * than the sequences in the table. Further, compare_seq (key, val)
823 * will overrun val if key is longer than val. */
824 if (m_n_compose > table->max_seq_len)
825 return false;
826
827 seq_index = (const quint32 *)bsearch(m_compose_buffer,
828 table->data, table->n_index_size,
829 sizeof(quint32) * table->n_index_stride,
830 compare_seq_index);
831
832 if (!seq_index) {
833 return false;
834 }
835
836 if (seq_index && m_n_compose == 1) {
837 return true;
838 }
839
840 seq = NULL;
841 for (i = m_n_compose - 1; i < table->max_seq_len; i++) {
842 row_stride = i + 1;
843
844 if (seq_index[i + 1] - seq_index[i] > 0) {
845 seq = (const quint32 *) bsearch(m_compose_buffer + 1,
846 table->data + seq_index[i], (seq_index[i + 1] - seq_index[i]) / row_stride,
847 sizeof(quint32) * row_stride,
848 compare_seq);
849 if (seq) {
850 if (i == m_n_compose - 1)
851 break;
852 else {
853 return true;
854 }
855 }
856 }
857 }
858
859 if (!seq) {
860 return false;
861 } else {
862 uint value;
863 value = seq[row_stride - 1];
864 commitString(QString(QChar(value)));
865 m_compose_buffer[0] = 0;
866 m_n_compose = 0;
867 return true;
868 }
869 return false;
870 }
871
872 // kate: indent-mode cstyle; space-indent on; indent-width 0;
+0
-208
src/qfcitxplatforminputcontext.h less more
0 /***************************************************************************
1 * Copyright (C) 2012~2013 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #ifndef QFCITXPLATFORMINPUTCONTEXT_H
20 #define QFCITXPLATFORMINPUTCONTEXT_H
21
22 #include <qpa/qplatforminputcontext.h>
23 #include <QWindow>
24 #include <QDBusConnection>
25 #include <QDBusServiceWatcher>
26 #include <QPointer>
27 #include <QFileSystemWatcher>
28 #include <QRect>
29 #include "fcitx-qt5/fcitxqtformattedpreedit.h"
30 #include <fcitx-qt5/fcitxqtinputcontextproxy.h>
31
32 #define MAX_COMPOSE_LEN 7
33
34 class FcitxQtConnection;
35 class QFileSystemWatcher;
36 enum FcitxKeyEventType {
37 FCITX_PRESS_KEY,
38 FCITX_RELEASE_KEY
39 };
40
41 enum FcitxCapacityFlags {
42 CAPACITY_NONE = 0,
43 CAPACITY_CLIENT_SIDE_UI = (1 << 0),
44 CAPACITY_PREEDIT = (1 << 1),
45 CAPACITY_CLIENT_SIDE_CONTROL_STATE = (1 << 2),
46 CAPACITY_PASSWORD = (1 << 3),
47 CAPACITY_FORMATTED_PREEDIT = (1 << 4),
48 CAPACITY_CLIENT_UNFOCUS_COMMIT = (1 << 5),
49 CAPACITY_SURROUNDING_TEXT = (1 << 6),
50 CAPACITY_EMAIL = (1 << 7),
51 CAPACITY_DIGIT = (1 << 8),
52 CAPACITY_UPPERCASE = (1 << 9),
53 CAPACITY_LOWERCASE = (1 << 10),
54 CAPACITY_NOAUTOUPPERCASE = (1 << 11),
55 CAPACITY_URL = (1 << 12),
56 CAPACITY_DIALABLE = (1 << 13),
57 CAPACITY_NUMBER = (1 << 14),
58 CAPACITY_NO_ON_SCREEN_KEYBOARD = (1 << 15),
59 CAPACITY_SPELLCHECK = (1 << 16),
60 CAPACITY_NO_SPELLCHECK = (1 << 17),
61 CAPACITY_WORD_COMPLETION = (1 << 18),
62 CAPACITY_UPPERCASE_WORDS = (1 << 19),
63 CAPACITY_UPPERCASE_SENTENCES = (1 << 20),
64 CAPACITY_ALPHA = (1 << 21),
65 CAPACITY_NAME = (1 << 22)
66 } ;
67
68 /** message type and flags */
69 enum FcitxMessageType {
70 MSG_TYPE_FIRST = 0,
71 MSG_TYPE_LAST = 6,
72 MSG_TIPS = 0, /**< Hint Text */
73 MSG_INPUT = 1, /**< User Input */
74 MSG_INDEX = 2, /**< Index Number */
75 MSG_FIRSTCAND = 3, /**< First candidate */
76 MSG_USERPHR = 4, /**< User Phrase */
77 MSG_CODE = 5, /**< Typed character */
78 MSG_OTHER = 6, /**< Other Text */
79 MSG_NOUNDERLINE = (1 << 3), /**< backward compatible, no underline is a flag */
80 MSG_HIGHLIGHT = (1 << 4), /**< highlight the preedit */
81 MSG_DONOT_COMMIT_WHEN_UNFOCUS = (1 << 5), /**< backward compatible */
82 MSG_REGULAR_MASK = 0x7 /**< regular color type mask */
83 };
84
85
86 enum FcitxKeyState {
87 FcitxKeyState_None = 0,
88 FcitxKeyState_Shift = 1 << 0,
89 FcitxKeyState_CapsLock = 1 << 1,
90 FcitxKeyState_Ctrl = 1 << 2,
91 FcitxKeyState_Alt = 1 << 3,
92 FcitxKeyState_Alt_Shift = FcitxKeyState_Alt | FcitxKeyState_Shift,
93 FcitxKeyState_Ctrl_Shift = FcitxKeyState_Ctrl | FcitxKeyState_Shift,
94 FcitxKeyState_Ctrl_Alt = FcitxKeyState_Ctrl | FcitxKeyState_Alt,
95 FcitxKeyState_Ctrl_Alt_Shift = FcitxKeyState_Ctrl | FcitxKeyState_Alt | FcitxKeyState_Shift,
96 FcitxKeyState_NumLock = 1 << 4,
97 FcitxKeyState_Super = 1 << 6,
98 FcitxKeyState_ScrollLock = 1 << 7,
99 FcitxKeyState_MousePressed = 1 << 8,
100 FcitxKeyState_HandledMask = 1 << 24,
101 FcitxKeyState_IgnoredMask = 1 << 25,
102 FcitxKeyState_Super2 = 1 << 26,
103 FcitxKeyState_Hyper = 1 << 27,
104 FcitxKeyState_Meta = 1 << 28,
105 FcitxKeyState_UsedMask = 0x5c001fff
106 };
107
108 struct FcitxQtICData {
109 FcitxQtICData() : capacity(0), proxy(0), surroundingAnchor(-1), surroundingCursor(-1) {}
110 ~FcitxQtICData() {
111 if (proxy && proxy->isValid()) {
112 proxy->DestroyIC();
113 delete proxy;
114 }
115 }
116 QFlags<FcitxCapacityFlags> capacity;
117 QPointer<FcitxQtInputContextProxy> proxy;
118 QRect rect;
119 QString surroundingText;
120 int surroundingAnchor;
121 int surroundingCursor;
122 };
123
124 class FcitxQtInputMethodProxy;
125
126 class QFcitxPlatformInputContext : public QPlatformInputContext
127 {
128 Q_OBJECT
129 public:
130 QFcitxPlatformInputContext();
131 virtual ~QFcitxPlatformInputContext();
132
133 virtual bool isValid() const;
134
135 virtual void invokeAction(QInputMethod::Action , int cursorPosition);
136 virtual void reset();
137 virtual void commit();
138 virtual void update(Qt::InputMethodQueries quries );
139 virtual void setFocusObject(QObject* object);
140
141 Q_INVOKABLE bool x11FilterEvent(uint keyval, uint keycode, uint state, bool press);
142
143
144 public Q_SLOTS:
145 void cursorRectChanged();
146 void commitString(const QString& str);
147 void updateFormattedPreedit(const FcitxQtFormattedPreeditList& preeditList, int cursorPos);
148 void deleteSurroundingText(int offset, uint nchar);
149 void forwardKey(uint keyval, uint state, int type);
150 void createInputContextFinished(QDBusPendingCallWatcher* watcher);
151 void connected();
152 void cleanUp();
153 void windowDestroyed(QObject* object);
154
155 private:
156 void createInputContext(WId w);
157 bool processCompose(uint keyval, uint state, FcitxKeyEventType event);
158 bool checkAlgorithmically();
159 bool checkCompactTable(const struct _FcitxComposeTableCompact *table);
160 QKeyEvent* createKeyEvent(uint keyval, uint state, int type);
161
162
163 void addCapacity(FcitxQtICData* data, QFlags<FcitxCapacityFlags> capacity, bool forceUpdate = false)
164 {
165 QFlags< FcitxCapacityFlags > newcaps = data->capacity | capacity;
166 if (data->capacity != newcaps || forceUpdate) {
167 data->capacity = newcaps;
168 updateCapacity(data);
169 }
170 }
171
172 void removeCapacity(FcitxQtICData* data, QFlags<FcitxCapacityFlags> capacity, bool forceUpdate = false)
173 {
174 QFlags< FcitxCapacityFlags > newcaps = data->capacity & (~capacity);
175 if (data->capacity != newcaps || forceUpdate) {
176 data->capacity = newcaps;
177 updateCapacity(data);
178 }
179 }
180
181 void updateCapacity(FcitxQtICData* data);
182 void commitPreedit();
183 void createICData(QWindow* w);
184 FcitxQtInputContextProxy* validIC();
185 FcitxQtInputContextProxy* validICByWindow(QWindow* window);
186 FcitxQtInputContextProxy* validICByWId(WId wid);
187 bool x11FilterEventFallback(uint keyval, uint keycode, uint state, bool press);
188
189 FcitxQtInputMethodProxy* m_improxy;
190 uint m_compose_buffer[MAX_COMPOSE_LEN + 1];
191 int m_n_compose;
192 QString m_preedit;
193 QString m_commitPreedit;
194 FcitxQtFormattedPreeditList m_preeditList;
195 int m_cursorPos;
196 bool m_useSurroundingText;
197 bool m_syncMode;
198 FcitxQtConnection* m_connection;
199 QString m_lastSurroundingText;
200 int m_lastSurroundingAnchor;
201 int m_lastSurroundingCursor;
202 QHash<WId, FcitxQtICData*> m_icMap;
203 QHash<QObject*, WId> m_windowToWidMap;
204 WId m_lastWId;
205 };
206
207 #endif // QFCITXPLATFORMINPUTCONTEXT_H
+0
-177
src/utils.cpp less more
0 /***************************************************************************
1 * Copyright (C) 2012~2013 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #include "utils.h"
20 /** check utf8 character */
21 #define ISUTF8_CB(c) (((c)&0xc0) == 0x80)
22
23 #define CONT(i) ISUTF8_CB(in[i])
24 #define VAL(i, s) ((in[i]&0x3f) << s)
25
26 #define UTF8_LENGTH(Char) \
27 ((Char) < 0x80 ? 1 : \
28 ((Char) < 0x800 ? 2 : \
29 ((Char) < 0x10000 ? 3 : \
30 ((Char) < 0x200000 ? 4 : \
31 ((Char) < 0x4000000 ? 5 : 6)))))
32
33 #define UNICODE_VALID(Char) \
34 ((Char) < 0x110000 && \
35 (((Char) & 0xFFFFF800) != 0xD800) && \
36 ((Char) < 0xFDD0 || (Char) > 0xFDEF) && \
37 ((Char) & 0xFFFE) != 0xFFFE)
38
39 int
40 _utf8_get_char_extended(const char *s,
41 int max_len)
42 {
43 const unsigned char*p = (const unsigned char*)s;
44 int i, len;
45 unsigned int wc = (unsigned char) * p;
46
47 if (wc < 0x80) {
48 return wc;
49 } else if (wc < 0xc0) {
50 return (unsigned int) - 1;
51 } else if (wc < 0xe0) {
52 len = 2;
53 wc &= 0x1f;
54 } else if (wc < 0xf0) {
55 len = 3;
56 wc &= 0x0f;
57 } else if (wc < 0xf8) {
58 len = 4;
59 wc &= 0x07;
60 } else if (wc < 0xfc) {
61 len = 5;
62 wc &= 0x03;
63 } else if (wc < 0xfe) {
64 len = 6;
65 wc &= 0x01;
66 } else {
67 return (unsigned int) - 1;
68 }
69
70 if (max_len >= 0 && len > max_len) {
71 for (i = 1; i < max_len; i++) {
72 if ((((unsigned char *)p)[i] & 0xc0) != 0x80)
73 return (unsigned int) - 1;
74 }
75
76 return (unsigned int) - 2;
77 }
78
79 for (i = 1; i < len; ++i) {
80 unsigned int ch = ((unsigned char *)p)[i];
81
82 if ((ch & 0xc0) != 0x80) {
83 if (ch)
84 return (unsigned int) - 1;
85 else
86 return (unsigned int) - 2;
87 }
88
89 wc <<= 6;
90
91 wc |= (ch & 0x3f);
92 }
93
94 if (UTF8_LENGTH(wc) != len)
95 return (unsigned int) - 1;
96
97 return wc;
98 }
99
100 int _utf8_get_char_validated(const char *p,
101 int max_len)
102 {
103 int result;
104
105 if (max_len == 0)
106 return -2;
107
108 result = _utf8_get_char_extended(p, max_len);
109
110 if (result & 0x80000000)
111 return result;
112 else if (!UNICODE_VALID(result))
113 return -1;
114 else
115 return result;
116 }
117
118
119 char *
120 _utf8_get_char(const char *i, uint32_t *chr)
121 {
122 const unsigned char* in = (const unsigned char *)i;
123 if (!(in[0] & 0x80)) {
124 *(chr) = *(in);
125 return (char *)in + 1;
126 }
127
128 /* 2-byte, 0x80-0x7ff */
129 if ((in[0] & 0xe0) == 0xc0 && CONT(1)) {
130 *chr = ((in[0] & 0x1f) << 6) | VAL(1, 0);
131 return (char *)in + 2;
132 }
133
134 /* 3-byte, 0x800-0xffff */
135 if ((in[0] & 0xf0) == 0xe0 && CONT(1) && CONT(2)) {
136 *chr = ((in[0] & 0xf) << 12) | VAL(1, 6) | VAL(2, 0);
137 return (char *)in + 3;
138 }
139
140 /* 4-byte, 0x10000-0x1FFFFF */
141 if ((in[0] & 0xf8) == 0xf0 && CONT(1) && CONT(2) && CONT(3)) {
142 *chr = ((in[0] & 0x7) << 18) | VAL(1, 12) | VAL(2, 6) | VAL(3, 0);
143 return (char *)in + 4;
144 }
145
146 /* 5-byte, 0x200000-0x3FFFFFF */
147 if ((in[0] & 0xfc) == 0xf8 && CONT(1) && CONT(2) && CONT(3) && CONT(4)) {
148 *chr = ((in[0] & 0x3) << 24) | VAL(1, 18) | VAL(2, 12) | VAL(3, 6) | VAL(4, 0);
149 return (char *)in + 5;
150 }
151
152 /* 6-byte, 0x400000-0x7FFFFFF */
153 if ((in[0] & 0xfe) == 0xfc && CONT(1) && CONT(2) && CONT(3) && CONT(4) && CONT(5)) {
154 *chr = ((in[0] & 0x1) << 30) | VAL(1, 24) | VAL(2, 18) | VAL(3, 12) | VAL(4, 6) | VAL(5, 0);
155 return (char *)in + 6;
156 }
157
158 *chr = *in;
159
160 return (char *)in + 1;
161 }
162
163
164 int _utf8_check_string(const char *s)
165 {
166 while (*s) {
167 uint32_t chr;
168
169 if (_utf8_get_char_validated(s, 6) < 0)
170 return 0;
171
172 s = _utf8_get_char(s, &chr);
173 }
174
175 return 1;
176 }
+0
-35
src/utils.h less more
0 /***************************************************************************
1 * Copyright (C) 2012~2013 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #ifndef UTILS_H
20 #define UTILS_H
21
22 #include <stdint.h>
23
24 int
25 _utf8_get_char_extended(const char *s,
26 int max_len);
27 int _utf8_get_char_validated(const char *p,
28 int max_len);
29 char *
30 _utf8_get_char(const char *i, uint32_t *chr);
31 int _utf8_check_string(const char *s);
32
33
34 #endif // UTILS_H
0 ecm_setup_version(${FcitxQt5_VERSION} VARIABLE_PREFIX FCITXQT5WIDGETSADDONS
1 VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/fcitxqtwidgetsaddons_version.h"
2 PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/FcitxQt5WidgetsAddonsConfigVersion.cmake"
3 SOVERSION 1)
4
5 # create a Config.cmake and a ConfigVersion.cmake file and install them
6 set(CMAKECONFIG_INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/cmake/FcitxQt5WidgetsAddons")
7
8 ecm_configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR}/FcitxQt5WidgetsAddonsConfig.cmake.in"
9 "${CMAKE_CURRENT_BINARY_DIR}/FcitxQt5WidgetsAddonsConfig.cmake"
10 INSTALL_DESTINATION ${CMAKECONFIG_INSTALL_DIR}
11 )
12
13 install(FILES "${CMAKE_CURRENT_BINARY_DIR}/FcitxQt5WidgetsAddonsConfig.cmake"
14 "${CMAKE_CURRENT_BINARY_DIR}/FcitxQt5WidgetsAddonsConfigVersion.cmake"
15 DESTINATION "${CMAKECONFIG_INSTALL_DIR}"
16 COMPONENT Devel )
17
18 install(EXPORT FcitxQt5WidgetsAddonsTargets DESTINATION "${CMAKECONFIG_INSTALL_DIR}" FILE FcitxQt5WidgetsAddonsTargets.cmake NAMESPACE FcitxQt5:: )
19
20 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/fcitxqtwidgetsaddons_version.h
21 DESTINATION ${FcitxQt5_INCLUDE_INSTALL_DIR} COMPONENT Devel )
22
23 set(widgetsaddons_SOURCES
24 fcitxqtconfiguifactory.cpp
25 fcitxqtconfiguiplugin.cpp
26 fcitxqtconfiguiwidget.cpp
27 fcitxqtkeysequencewidget.cpp
28 qtkeytrans.cpp
29 )
30
31 set(widgetsaddons_HEADERS
32 fcitxqtconfiguifactory.h
33 fcitxqtconfiguiplugin.h
34 fcitxqtconfiguiwidget.h
35 fcitxqtkeysequencewidget.h
36 )
37
38 set(fcitxqtwidgetsaddons_INCLUDE_DIRS
39 ${CMAKE_CURRENT_BINARY_DIR}
40 ${CMAKE_CURRENT_SOURCE_DIR}
41 ${FCITX_UTILS_INCLUDE_DIRS}
42 )
43
44 add_library(FcitxQt5WidgetsAddons SHARED ${widgetsaddons_SOURCES})
45 generate_export_header(FcitxQt5WidgetsAddons BASE_NAME FcitxQtWidgetsAddons)
46 add_library(FcitxQt5::WidgetsAddons ALIAS FcitxQt5WidgetsAddons)
47
48 target_include_directories(FcitxQt5WidgetsAddons PUBLIC "$<BUILD_INTERFACE:${fcitxqtwidgetsaddons_INCLUDE_DIRS}>")
49 target_include_directories(FcitxQt5WidgetsAddons INTERFACE "$<INSTALL_INTERFACE:${FcitxQt5_INCLUDE_INSTALL_DIR}/FcitxQtWidgetsAddons>")
50
51 set_target_properties(FcitxQt5WidgetsAddons
52 PROPERTIES VERSION 1.0
53 AUTOMOC TRUE
54 SOVERSION 1
55 COMPILE_FLAGS "-fvisibility=hidden"
56 LINK_FLAGS "-Wl,--no-undefined"
57 EXPORT_NAME WidgetsAddons
58 )
59
60 target_link_libraries(FcitxQt5WidgetsAddons
61 PUBLIC
62 Qt5::Core
63 Qt5::Widgets
64 PRIVATE
65 ${FCITX_UTILS_LIBRARIES}
66 ${FCITX_CONFIG_LIBRARIES}
67 )
68
69 install(TARGETS FcitxQt5WidgetsAddons EXPORT FcitxQt5WidgetsAddonsTargets LIBRARY DESTINATION "${CMAKE_INSTALL_LIBDIR}")
70
71 install(FILES ${widgetsaddons_HEADERS}
72 ${CMAKE_CURRENT_BINARY_DIR}/fcitxqtwidgetsaddons_export.h
73 DESTINATION "${FcitxQt5_INCLUDE_INSTALL_DIR}/FcitxQtWidgetsAddons")
0 @PACKAGE_INIT@
1
2 find_dependency(Qt5Core @REQUIRED_QT_VERSION@)
3 find_dependency(Qt5Gui @REQUIRED_QT_VERSION@)
4 find_dependency(Qt5Widgets @REQUIRED_QT_VERSION@)
5
6
7 include("${CMAKE_CURRENT_LIST_DIR}/FcitxQt5WidgetsAddonsTargets.cmake")
0 /***************************************************************************
1 * Copyright (C) 2012~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #include "fcitxqtconfiguifactory.h"
20 #include "fcitxqtconfiguiplugin.h"
21 #include "fcitxqtconfiguifactory_p.h"
22 #include <fcitx-config/xdg.h>
23 #include <fcitx-utils/utils.h>
24 #include <QDir>
25 #include <QDebug>
26 #include <QLibrary>
27 #include <QPluginLoader>
28 #include <libintl.h>
29
30 FcitxQtConfigUIFactoryPrivate::FcitxQtConfigUIFactoryPrivate(FcitxQtConfigUIFactory* factory) : QObject(factory)
31 ,q_ptr(factory)
32 {
33 }
34
35 FcitxQtConfigUIFactoryPrivate::~FcitxQtConfigUIFactoryPrivate()
36 {
37 }
38
39 FcitxQtConfigUIFactory::FcitxQtConfigUIFactory(QObject* parent): QObject(parent)
40 ,d_ptr(new FcitxQtConfigUIFactoryPrivate(this))
41 {
42 Q_D(FcitxQtConfigUIFactory);
43 d->scan();
44 }
45
46 FcitxQtConfigUIFactory::~FcitxQtConfigUIFactory()
47 {
48
49 }
50
51 FcitxQtConfigUIWidget* FcitxQtConfigUIFactory::create(const QString& file)
52 {
53 Q_D(FcitxQtConfigUIFactory);
54
55 if (!d->plugins.contains(file))
56 return 0;
57
58 char* localepath = fcitx_utils_get_fcitx_path("localedir");
59 bindtextdomain(d->plugins[file]->domain().toUtf8().data(), localepath);
60 bind_textdomain_codeset(d->plugins[file]->domain().toUtf8().data(), "UTF-8");
61 free(localepath);
62 return d->plugins[file]->create(file);
63 }
64
65 bool FcitxQtConfigUIFactory::test(const QString& file) {
66 Q_D(FcitxQtConfigUIFactory);
67
68 return d->plugins.contains(file);
69 }
70
71 void FcitxQtConfigUIFactoryPrivate::scan()
72 {
73 QStringList dirs;
74 // check plugin files
75 size_t len;
76 char** path = FcitxXDGGetLibPath(&len);
77 for (size_t i = 0; i < len; i ++) {
78 dirs << path[i];
79 }
80
81 if (dirs.isEmpty())
82 return;
83 for (QStringList::ConstIterator it = dirs.begin(); it != dirs.end(); ++it) {
84 // qDebug() << QString ("Checking Qt Library Path: %1").arg (*it);
85 QDir libpath (*it);
86 QDir dir (libpath.filePath (QString ("qt")));
87 if (!dir.exists()) {
88 continue;
89 }
90
91 QStringList entryList = dir.entryList();
92 // filter out "." and ".." to keep debug output cleaner
93 entryList.removeAll (".");
94 entryList.removeAll ("..");
95 if (entryList.isEmpty()) {
96 continue;
97 }
98
99 Q_FOREACH (const QString & maybeFile, entryList) {
100 QFileInfo fi (dir.filePath (maybeFile));
101
102 QString filePath = fi.filePath(); // file name with path
103 QString fileName = fi.fileName(); // just file name
104
105 // qDebug() << filePath;
106
107 if (!QLibrary::isLibrary (filePath)) {
108 continue;
109 }
110
111 QPluginLoader* loader = new QPluginLoader (filePath, this);
112 // qDebug() << loader->load();
113 // qDebug() << loader->errorString();
114 FcitxQtConfigUIFactoryInterface* plugin = qobject_cast< FcitxQtConfigUIFactoryInterface* > (loader->instance());
115 if (plugin) {
116 QStringList list = plugin->files();
117 Q_FOREACH(const QString& s, list) {
118 plugins[s] = plugin;
119 }
120 }
121 }
122 }
123 }
0 /***************************************************************************
1 * Copyright (C) 2012~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #ifndef FCITX_QT_CONFIG_UI_FACTORY_H
20 #define FCITX_QT_CONFIG_UI_FACTORY_H
21
22 #include <QtCore/QObject>
23 #include <QtCore/QMap>
24 #include <QtCore/QStringList>
25
26 #include "fcitxqtwidgetsaddons_export.h"
27 #include "fcitxqtconfiguiwidget.h"
28 #include "fcitxqtconfiguiplugin.h"
29
30 class FcitxQtConfigUIFactoryPrivate;
31 /**
32 * ui plugin factory.
33 **/
34 class FCITXQTWIDGETSADDONS_EXPORT FcitxQtConfigUIFactory : public QObject
35 {
36 Q_OBJECT
37 public:
38 /**
39 * create a plugin factory
40 *
41 * @param parent object parent
42 **/
43 explicit FcitxQtConfigUIFactory(QObject* parent = 0);
44 virtual ~FcitxQtConfigUIFactory();
45 /**
46 * create widget based on file name, it might return 0 if there is no match
47 *
48 * @param file file name need to be configured
49 * @return FcitxQtConfigUIWidget*
50 **/
51 FcitxQtConfigUIWidget* create(const QString& file);
52 /**
53 * a simplified version of create, but it just test if there is a valid entry or not
54 *
55 * @param file file name
56 * @return bool
57 **/
58 bool test(const QString& file);
59 private:
60 FcitxQtConfigUIFactoryPrivate* d_ptr;
61 Q_DECLARE_PRIVATE(FcitxQtConfigUIFactory);
62 };
63
64 #endif // FCITX_CONFIG_UI_FACTORY_H
0 /***************************************************************************
1 * Copyright (C) 2012~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #ifndef FCITXQTCONFIGUIFACTORY_P_H
20 #define FCITXQTCONFIGUIFACTORY_P_H
21
22 #include <QObject>
23 #include "fcitxqtconfiguifactory.h"
24
25 class FcitxQtConfigUIFactoryPrivate : public QObject {
26 Q_OBJECT
27 public:
28 FcitxQtConfigUIFactoryPrivate(FcitxQtConfigUIFactory* conn);
29 virtual ~FcitxQtConfigUIFactoryPrivate();
30 FcitxQtConfigUIFactory * const q_ptr;
31 Q_DECLARE_PUBLIC(FcitxQtConfigUIFactory);
32
33 private:
34 void scan();
35 QMap<QString, FcitxQtConfigUIFactoryInterface*> plugins;
36 };
37
38 #endif // FCITXQTCONFIGUIFACTORY_P_H
0 /***************************************************************************
1 * Copyright (C) 2012~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #include "fcitxqtconfiguiplugin.h"
20
21 FcitxQtConfigUIPlugin::FcitxQtConfigUIPlugin(QObject* parent): QObject(parent)
22 {
23
24 }
25
26 FcitxQtConfigUIPlugin::~FcitxQtConfigUIPlugin()
27 {
28
29 }
0 /***************************************************************************
1 * Copyright (C) 2012~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #ifndef FCITXQTCONFIGPLUGIN_H
20 #define FCITXQTCONFIGPLUGIN_H
21
22 #include "fcitxqtwidgetsaddons_export.h"
23 #include <QtCore/QString>
24 #include <QtCore/QObject>
25 #include <QtCore/QStringList>
26
27 class FcitxQtConfigUIWidget;
28
29 /**
30 * interface for qt config ui
31 */
32 struct FCITXQTWIDGETSADDONS_EXPORT FcitxQtConfigUIFactoryInterface
33 {
34 /**
35 * return the name for plugin
36 */
37 virtual QString name() = 0;
38
39 /**
40 * create new widget based on key
41 *
42 * @see FcitxQtConfigUIPlugin::files
43 *
44 * @return plugin name
45 */
46 virtual FcitxQtConfigUIWidget *create( const QString &key ) = 0;
47
48 /**
49 * return a list that this plugin will handle, need to be consist with
50 * the file path in config file
51 *
52 * @return support file list
53 */
54 virtual QStringList files() = 0;
55
56 /**
57 * return gettext domain, due to some reason, fcitx doesn't use qt's i18n feature
58 * but gettext
59 *
60 * @return domain of gettext
61 */
62 virtual QString domain() = 0;
63
64 };
65
66 #define FcitxQtConfigUIFactoryInterface_iid "org.fcitx.Fcitx.FcitxQtConfigUIFactoryInterface"
67 Q_DECLARE_INTERFACE(FcitxQtConfigUIFactoryInterface, FcitxQtConfigUIFactoryInterface_iid)
68
69 /**
70 * base class for qt config ui
71 */
72 class FCITXQTWIDGETSADDONS_EXPORT FcitxQtConfigUIPlugin : public QObject, public FcitxQtConfigUIFactoryInterface {
73 Q_OBJECT
74 Q_INTERFACES(FcitxQtConfigUIFactoryInterface)
75 public:
76 explicit FcitxQtConfigUIPlugin(QObject* parent = 0);
77 virtual ~FcitxQtConfigUIPlugin();
78 };
79
80
81 #endif // FCITXCONFIGPLUGIN_H
0 /***************************************************************************
1 * Copyright (C) 2012~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #include "fcitxqtconfiguiwidget.h"
20
21 FcitxQtConfigUIWidget::FcitxQtConfigUIWidget(QWidget* parent): QWidget(parent)
22 {
23
24 }
25
26 QString FcitxQtConfigUIWidget::icon()
27 {
28 return QLatin1String("fcitx");
29 }
30
31 bool FcitxQtConfigUIWidget::asyncSave()
32 {
33 return false;
34 }
0 /***************************************************************************
1 * Copyright (C) 2012~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #ifndef FCITXQTCONFIGUIWIDGET_H
20 #define FCITXQTCONFIGUIWIDGET_H
21 #include "fcitxqtwidgetsaddons_export.h"
22 #include <QtWidgets/QWidget>
23
24 /**
25 * embedded gui for custom configuration
26 **/
27 class FCITXQTWIDGETSADDONS_EXPORT FcitxQtConfigUIWidget : public QWidget {
28 Q_OBJECT
29 public:
30 explicit FcitxQtConfigUIWidget(QWidget* parent = 0);
31
32 /**
33 * load the configuration, usually, this is being called upon a "reset" button clicked
34 * the outer gui will not call it for you for the first time, your initialization might
35 * want to call it by yourself.
36 *
37 * @return void
38 **/
39 virtual void load() = 0;
40
41 /**
42 * save the configuration
43 *
44 * @see asyncSave saveFinished
45 **/
46 virtual void save() = 0;
47
48 /**
49 * window title
50 *
51 * @return window title
52 **/
53 virtual QString title() = 0;
54
55 /**
56 * return the addon name it belongs to
57 *
58 * @return addon name
59 **/
60 virtual QString addon() = 0;
61
62 /**
63 * return the icon name of the window, see QIcon::fromTheme
64 *
65 * @return icon name
66 **/
67 virtual QString icon();
68
69 /**
70 * return the save function is async or not, default implementation is false
71 *
72 * @return bool
73 **/
74 virtual bool asyncSave();
75
76 Q_SIGNALS:
77 /**
78 * the configuration is changed or not, used to indicate parent gui
79 *
80 * @param changed is config changed
81 **/
82 void changed(bool changed);
83
84 /**
85 * if asyncSave return true, be sure to emit this signal on all case
86 *
87 * @see asyncSave
88 **/
89 void saveFinished();
90 };
91
92 #endif // FCITXCONFIGUIWIDGET_H
0 /***************************************************************************
1 * Copyright (C) 2013~2013 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 /* this is forked from kdelibs/kdeui/kkeysequencewidget.cpp */
20
21 /*
22 Original Copyright header
23 Copyright (C) 1998 Mark Donohoe <donohoe@kde.org>
24 Copyright (C) 2001 Ellis Whitehead <ellis@kde.org>
25 Copyright (C) 2007 Andreas Hartmetz <ahartmetz@gmail.com>
26
27 This library is free software; you can redistribute it and/or
28 modify it under the terms of the GNU Library General Public
29 License as published by the Free Software Foundation; either
30 version 2 of the License, or (at your option) any later version.
31
32 This library is distributed in the hope that it will be useful,
33 but WITHOUT ANY WARRANTY; without even the implied warranty of
34 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
35 Library General Public License for more details.
36
37 You should have received a copy of the GNU Library General Public License
38 along with this library; see the file COPYING.LIB. If not, write to
39 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
40 Boston, MA 02110-1301, USA.
41 */
42
43 #include "fcitxqtkeysequencewidget.h"
44 #include "fcitxqtkeysequencewidget_p.h"
45
46 #include <QKeyEvent>
47 #include <QTimer>
48 #include <QHash>
49 #include <QHBoxLayout>
50 #include <QToolButton>
51 #include <QApplication>
52 #include <QMessageBox>
53 #include <QDebug>
54 #include <libintl.h>
55 #include <fcitx-utils/keysymgen.h>
56
57 #include "qtkeytrans.h"
58
59 #define _(x) QString::fromUtf8(dgettext("fcitx", x))
60
61 class FcitxQtKeySequenceWidgetPrivate
62 {
63 public:
64 FcitxQtKeySequenceWidgetPrivate(FcitxQtKeySequenceWidget *q);
65
66 void init();
67
68 static QKeySequence appendToSequence(const QKeySequence& seq, int keyQt);
69 static bool isOkWhenModifierless(int keyQt);
70
71 void updateShortcutDisplay();
72 void startRecording();
73
74 void controlModifierlessTimout()
75 {
76 if (nKey != 0 && !modifierKeys) {
77 // No modifier key pressed currently. Start the timout
78 modifierlessTimeout.start(600);
79 } else {
80 // A modifier is pressed. Stop the timeout
81 modifierlessTimeout.stop();
82 }
83
84 }
85
86
87 void cancelRecording()
88 {
89 keySequence = oldKeySequence;
90 side = oldSide;
91 doneRecording();
92 }
93
94 //private slot
95 void doneRecording(bool validate = true);
96
97 //members
98 FcitxQtKeySequenceWidget *const q;
99 QHBoxLayout *layout;
100 FcitxQtKeySequenceButton *keyButton;
101 QToolButton *clearButton;
102
103 QKeySequence keySequence;
104 QKeySequence oldKeySequence;
105 QTimer modifierlessTimeout;
106 bool allowModifierless;
107 uint nKey;
108 uint modifierKeys;
109 bool isRecording;
110 bool multiKeyShortcutsAllowed;
111 bool allowModifierOnly;
112 FcitxQtModifierSide side;
113 FcitxQtModifierSide oldSide;
114 };
115
116 FcitxQtKeySequenceWidgetPrivate::FcitxQtKeySequenceWidgetPrivate(FcitxQtKeySequenceWidget *q)
117 : q(q)
118 ,layout(NULL)
119 ,keyButton(NULL)
120 ,clearButton(NULL)
121 ,allowModifierless(false)
122 ,nKey(0)
123 ,modifierKeys(0)
124 ,isRecording(false)
125 ,multiKeyShortcutsAllowed(true)
126 ,allowModifierOnly(false)
127 ,side(MS_Unknown)
128 {}
129
130 FcitxQtKeySequenceWidget::FcitxQtKeySequenceWidget(QWidget *parent)
131 : QWidget(parent),
132 d(new FcitxQtKeySequenceWidgetPrivate(this))
133 {
134 d->init();
135 setFocusProxy( d->keyButton );
136 connect(d->keyButton, SIGNAL(clicked()), this, SLOT(captureKeySequence()));
137 connect(d->clearButton, SIGNAL(clicked()), this, SLOT(clearKeySequence()));
138 connect(&d->modifierlessTimeout, SIGNAL(timeout()), this, SLOT(doneRecording()));
139 //TODO: how to adopt style changes at runtime?
140 /*QFont modFont = d->clearButton->font();
141 modFont.setStyleHint(QFont::TypeWriter);
142 d->clearButton->setFont(modFont);*/
143 d->updateShortcutDisplay();
144 }
145
146
147 void FcitxQtKeySequenceWidgetPrivate::init()
148 {
149 layout = new QHBoxLayout(q);
150 layout->setMargin(0);
151
152 keyButton = new FcitxQtKeySequenceButton(this, q);
153 keyButton->setFocusPolicy(Qt::StrongFocus);
154 layout->addWidget(keyButton);
155
156 clearButton = new QToolButton(q);
157 layout->addWidget(clearButton);
158
159 #if QT_VERSION < QT_VERSION_CHECK(4, 8, 0)
160 clearButton->setText(_("Clear"));
161 #else
162 keyButton->setIcon(QIcon::fromTheme("configure"));
163 if (qApp->isLeftToRight())
164 clearButton->setIcon(QIcon::fromTheme("edit-clear-locationbar-rtl"));
165 else
166 clearButton->setIcon(QIcon::fromTheme("edit-clear-locationbar-ltr"));
167 #endif
168 }
169
170
171 FcitxQtKeySequenceWidget::~FcitxQtKeySequenceWidget ()
172 {
173 delete d;
174 }
175
176 bool FcitxQtKeySequenceWidget::multiKeyShortcutsAllowed() const
177 {
178 return d->multiKeyShortcutsAllowed;
179 }
180
181
182 void FcitxQtKeySequenceWidget::setMultiKeyShortcutsAllowed(bool allowed)
183 {
184 d->multiKeyShortcutsAllowed = allowed;
185 }
186
187 void FcitxQtKeySequenceWidget::setModifierlessAllowed(bool allow)
188 {
189 d->allowModifierless = allow;
190 }
191
192 bool FcitxQtKeySequenceWidget::isModifierlessAllowed()
193 {
194 return d->allowModifierless;
195 }
196
197 bool FcitxQtKeySequenceWidget::isModifierOnlyAllowed()
198 {
199 return d->allowModifierOnly;
200 }
201
202 void FcitxQtKeySequenceWidget::setModifierOnlyAllowed(bool allow)
203 {
204 d->allowModifierOnly = allow;
205 }
206
207 FcitxQtModifierSide FcitxQtKeySequenceWidget::modifierSide()
208 {
209 return d->side;
210 }
211
212 void FcitxQtKeySequenceWidget::setClearButtonShown(bool show)
213 {
214 d->clearButton->setVisible(show);
215 }
216
217 //slot
218 void FcitxQtKeySequenceWidget::captureKeySequence()
219 {
220 d->startRecording();
221 }
222
223
224 QKeySequence FcitxQtKeySequenceWidget::keySequence() const
225 {
226 return d->keySequence;
227 }
228
229
230 //slot
231 void FcitxQtKeySequenceWidget::setKeySequence(const QKeySequence& seq, FcitxQtModifierSide side, FcitxQtKeySequenceWidget::Validation validate)
232 {
233 // oldKeySequence holds the key sequence before recording started, if setKeySequence()
234 // is called while not recording then set oldKeySequence to the existing sequence so
235 // that the keySequenceChanged() signal is emitted if the new and previous key
236 // sequences are different
237 if (!d->isRecording) {
238 d->oldKeySequence = d->keySequence;
239 d->oldSide = d->side;
240 }
241
242 d->side = side;
243 d->keySequence = seq;
244 d->doneRecording(validate == Validate);
245 }
246
247
248 //slot
249 void FcitxQtKeySequenceWidget::clearKeySequence()
250 {
251 setKeySequence(QKeySequence());
252 d->side = MS_Unknown;
253 }
254
255 void FcitxQtKeySequenceWidgetPrivate::startRecording()
256 {
257 nKey = 0;
258 modifierKeys = 0;
259 oldKeySequence = keySequence;
260 oldSide = side;
261 keySequence = QKeySequence();
262 side = MS_Unknown;
263 isRecording = true;
264 keyButton->grabKeyboard();
265
266 if (!QWidget::keyboardGrabber()) {
267 qWarning() << "Failed to grab the keyboard! Most likely qt's nograb option is active";
268 }
269
270 keyButton->setDown(true);
271 updateShortcutDisplay();
272 }
273
274
275 void FcitxQtKeySequenceWidgetPrivate::doneRecording(bool validate)
276 {
277 modifierlessTimeout.stop();
278 isRecording = false;
279 keyButton->releaseKeyboard();
280 keyButton->setDown(false);
281
282 if (keySequence==oldKeySequence && (oldSide == side || !allowModifierOnly)) {
283 // The sequence hasn't changed
284 updateShortcutDisplay();
285 return;
286 }
287
288 Q_EMIT q->keySequenceChanged(keySequence, side);
289
290 updateShortcutDisplay();
291 }
292
293
294 void FcitxQtKeySequenceWidgetPrivate::updateShortcutDisplay()
295 {
296 do {
297 if (keySequence.count() != 1) {
298 break;
299 }
300 int key = keySequence[0] & (~Qt::KeyboardModifierMask);
301 if (key == Qt::Key_Shift
302 || key == Qt::Key_Control
303 || key == Qt::Key_Meta
304 || key == Qt::Key_Alt) {
305 QString s;
306 int mod = keySequence[0] & (Qt::KeyboardModifierMask);
307 if (mod & Qt::META && key != Qt::Key_Meta) s += "Meta+";
308 if (mod & Qt::CTRL && key != Qt::Key_Control) s += "Ctrl+";
309 if (mod & Qt::ALT && key != Qt::Key_Alt) s += "Alt+";
310 if (mod & Qt::SHIFT && key != Qt::Key_Shift) s += "Shift+";
311
312 if (side == MS_Left) {
313 s += _("Left") + " ";
314 } else if (side == MS_Right) {
315 s += _("Right") + " ";
316 }
317
318 switch(key) {
319 case Qt::Key_Shift:
320 s += "Shift";
321 break;
322 case Qt::Key_Control:
323 s += "Ctrl";
324 break;
325 case Qt::Key_Meta:
326 s += "Meta";
327 break;
328 case Qt::Key_Alt:
329 s += "Alt";
330 break;
331 }
332 keyButton->setText(s);
333 return;
334 }
335 } while(0);
336
337 //empty string if no non-modifier was pressed
338 QString s = keySequence.toString(QKeySequence::NativeText);
339 s.replace('&', QLatin1String("&&"));
340
341 if (isRecording) {
342 if (modifierKeys) {
343 if (!s.isEmpty()) s.append(",");
344 if (modifierKeys & Qt::META) s += "Meta+";
345 if (modifierKeys & Qt::CTRL) s += "Ctrl+";
346 if (modifierKeys & Qt::ALT) s += "Alt+";
347 if (modifierKeys & Qt::SHIFT) s += "Shift+";
348
349 } else if (nKey == 0) {
350 s = "...";
351 }
352 //make it clear that input is still going on
353 s.append(" ...");
354 }
355
356 if (s.isEmpty()) {
357 s = _("Empty");
358 }
359
360 s.prepend(' ');
361 s.append(' ');
362 keyButton->setText(s);
363 }
364
365
366 FcitxQtKeySequenceButton::~FcitxQtKeySequenceButton()
367 {
368 }
369
370
371 //prevent Qt from special casing Tab and Backtab
372 bool FcitxQtKeySequenceButton::event (QEvent* e)
373 {
374 if (d->isRecording && e->type() == QEvent::KeyPress) {
375 keyPressEvent(static_cast<QKeyEvent *>(e));
376 return true;
377 }
378
379 // The shortcut 'alt+c' ( or any other dialog local action shortcut )
380 // ended the recording and triggered the action associated with the
381 // action. In case of 'alt+c' ending the dialog. It seems that those
382 // ShortcutOverride events get sent even if grabKeyboard() is active.
383 if (d->isRecording && e->type() == QEvent::ShortcutOverride) {
384 e->accept();
385 return true;
386 }
387
388 return QPushButton::event(e);
389 }
390
391
392 void FcitxQtKeySequenceButton::keyPressEvent(QKeyEvent *e)
393 {
394 int keyQt = e->key();
395 if (keyQt == -1) {
396 // Qt sometimes returns garbage keycodes, I observed -1, if it doesn't know a key.
397 // We cannot do anything useful with those (several keys have -1, indistinguishable)
398 // and QKeySequence.toString() will also yield a garbage string.
399 QMessageBox::warning(this,
400 _("The key you just pressed is not supported by Qt."),
401 _("Unsupported Key"));
402 return d->cancelRecording();
403 }
404
405 uint newModifiers = e->modifiers() & (Qt::SHIFT | Qt::CTRL | Qt::ALT | Qt::META);
406
407 //don't have the return or space key appear as first key of the sequence when they
408 //were pressed to start editing - catch and them and imitate their effect
409 if (!d->isRecording && ((keyQt == Qt::Key_Return || keyQt == Qt::Key_Space))) {
410 d->startRecording();
411 d->modifierKeys = newModifiers;
412 d->updateShortcutDisplay();
413 return;
414 }
415
416 // We get events even if recording isn't active.
417 if (!d->isRecording)
418 return QPushButton::keyPressEvent(e);
419
420 e->accept();
421 d->modifierKeys = newModifiers;
422
423
424 switch(keyQt) {
425 case Qt::Key_AltGr: //or else we get unicode salad
426 return;
427 case Qt::Key_Shift:
428 case Qt::Key_Control:
429 case Qt::Key_Alt:
430 case Qt::Key_Meta:
431 case Qt::Key_Menu: //unused (yes, but why?)
432 d->controlModifierlessTimout();
433 d->updateShortcutDisplay();
434 break;
435 default:
436
437 if (d->nKey == 0 && !(d->modifierKeys & ~Qt::SHIFT)) {
438 // It's the first key and no modifier pressed. Check if this is
439 // allowed
440 if (!(FcitxQtKeySequenceWidgetPrivate::isOkWhenModifierless(keyQt)
441 || d->allowModifierless)) {
442 // No it's not
443 return;
444 }
445 }
446
447 // We now have a valid key press.
448 if (keyQt) {
449 if ((keyQt == Qt::Key_Backtab) && (d->modifierKeys & Qt::SHIFT)) {
450 keyQt = Qt::Key_Tab | d->modifierKeys;
451 }
452 else {
453 keyQt |= d->modifierKeys;
454 }
455
456 if (d->nKey == 0) {
457 d->keySequence = QKeySequence(keyQt);
458 } else {
459 d->keySequence =
460 FcitxQtKeySequenceWidgetPrivate::appendToSequence(d->keySequence, keyQt);
461 }
462
463 d->nKey++;
464 if ((!d->multiKeyShortcutsAllowed) || (d->nKey >= 4)) {
465 d->doneRecording();
466 return;
467 }
468 d->controlModifierlessTimout();
469 d->updateShortcutDisplay();
470 }
471 }
472 }
473
474
475 void FcitxQtKeySequenceButton::keyReleaseEvent(QKeyEvent *e)
476 {
477 if (e->key() == -1) {
478 // ignore garbage, see keyPressEvent()
479 return;
480 }
481
482 if (!d->isRecording)
483 return QPushButton::keyReleaseEvent(e);
484
485 e->accept();
486
487 if (!d->multiKeyShortcutsAllowed
488 && d->allowModifierOnly
489 && (e->key() == Qt::Key_Shift
490 || e->key() == Qt::Key_Control
491 || e->key() == Qt::Key_Meta
492 || e->key() == Qt::Key_Alt)) {
493 d->side = MS_Unknown;
494
495 if (qApp->platformName() == "xcb") {
496
497 if (e->nativeVirtualKey() == FcitxKey_Control_L
498 || e->nativeVirtualKey() == FcitxKey_Alt_L
499 || e->nativeVirtualKey() == FcitxKey_Shift_L
500 || e->nativeVirtualKey() == FcitxKey_Super_L) {
501 d->side = MS_Left;
502 }
503 if (e->nativeVirtualKey() == FcitxKey_Control_R
504 || e->nativeVirtualKey() == FcitxKey_Alt_R
505 || e->nativeVirtualKey() == FcitxKey_Shift_R
506 || e->nativeVirtualKey() == FcitxKey_Super_R) {
507 d->side = MS_Right;
508 }
509 }
510 int keyQt = e->key() | d->modifierKeys;
511 d->keySequence = QKeySequence(keyQt);
512 d->doneRecording();
513 return;
514 }
515
516
517 uint newModifiers = e->modifiers() & (Qt::SHIFT | Qt::CTRL | Qt::ALT | Qt::META);
518
519 //if a modifier that belongs to the shortcut was released...
520 if ((newModifiers & d->modifierKeys) < d->modifierKeys) {
521 d->modifierKeys = newModifiers;
522 d->controlModifierlessTimout();
523 d->updateShortcutDisplay();
524 }
525 }
526
527
528 //static
529 QKeySequence FcitxQtKeySequenceWidgetPrivate::appendToSequence(const QKeySequence& seq, int keyQt)
530 {
531 switch (seq.count()) {
532 case 0:
533 return QKeySequence(keyQt);
534 case 1:
535 return QKeySequence(seq[0], keyQt);
536 case 2:
537 return QKeySequence(seq[0], seq[1], keyQt);
538 case 3:
539 return QKeySequence(seq[0], seq[1], seq[2], keyQt);
540 default:
541 return seq;
542 }
543 }
544
545
546 //static
547 bool FcitxQtKeySequenceWidgetPrivate::isOkWhenModifierless(int keyQt)
548 {
549 //this whole function is a hack, but especially the first line of code
550 if (QKeySequence(keyQt).toString().length() == 1)
551 return false;
552
553 switch (keyQt) {
554 case Qt::Key_Return:
555 case Qt::Key_Space:
556 case Qt::Key_Tab:
557 case Qt::Key_Backtab: //does this ever happen?
558 case Qt::Key_Backspace:
559 case Qt::Key_Delete:
560 return false;
561 default:
562 return true;
563 }
564 }
565
566 void FcitxQtKeySequenceWidget::keyQtToFcitx(int keyQt, FcitxQtModifierSide side, int& outsym, uint& outstate)
567 {
568 int key = keyQt & (~Qt::KeyboardModifierMask);
569 int state = keyQt & Qt::KeyboardModifierMask;
570 int sym = 0;
571 keyQtToSym(key, Qt::KeyboardModifiers(state), sym, outstate);
572 if (side == MS_Right) {
573 switch (sym) {
574 case FcitxKey_Control_L:
575 sym = FcitxKey_Control_R;
576 break;
577 case FcitxKey_Alt_L:
578 sym = FcitxKey_Alt_R;
579 break;
580 case FcitxKey_Shift_L:
581 sym = FcitxKey_Shift_R;
582 break;
583 case FcitxKey_Super_L:
584 sym = FcitxKey_Super_R;
585 break;
586 }
587 }
588
589 outsym = sym;
590 }
591
592 int FcitxQtKeySequenceWidget::keyFcitxToQt(int sym, uint state)
593 {
594 Qt::KeyboardModifiers qstate = Qt::NoModifier;
595
596 int key;
597 symToKeyQt((int) sym, state, key, qstate);
598
599 return key | qstate;
600 }
601
602
603 #include "moc_fcitxqtkeysequencewidget.cpp"
0 /***************************************************************************
1 * Copyright (C) 2013~2013 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 /* this is forked from kdelibs/kdeui/kkeysequencewidget.h */
20
21 /*
22 Original Copyright header
23 This file is part of the KDE libraries
24 Copyright (C) 2001, 2002 Ellis Whitehead <ellis@kde.org>
25 Copyright (C) 2007 Andreas Hartmetz <ahartmetz@gmail.com>
26
27 This library is free software; you can redistribute it and/or
28 modify it under the terms of the GNU Library General Public
29 License as published by the Free Software Foundation; either
30 version 2 of the License, or (at your option) any later version.
31
32 This library is distributed in the hope that it will be useful,
33 but WITHOUT ANY WARRANTY; without even the implied warranty of
34 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
35 Library General Public License for more details.
36
37 You should have received a copy of the GNU Library General Public License
38 along with this library; see the file COPYING.LIB. If not, write to
39 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
40 Boston, MA 02110-1301, USA.
41 */
42
43 #ifndef KKEYSEQUENCEWIDGET_H
44 #define KKEYSEQUENCEWIDGET_H
45
46 #include <QtCore/QList>
47 #include <QtWidgets/QPushButton>
48
49 #include "fcitxqtwidgetsaddons_export.h"
50
51 enum FcitxQtModifierSide {
52 MS_Unknown = 0,
53 MS_Left = 1,
54 MS_Right = 2
55 };
56
57 class FcitxQtKeySequenceWidgetPrivate;
58
59 class FCITXQTWIDGETSADDONS_EXPORT FcitxQtKeySequenceWidget: public QWidget
60 {
61 Q_OBJECT
62
63 Q_PROPERTY(
64 bool multiKeyShortcutsAllowed
65 READ multiKeyShortcutsAllowed
66 WRITE setMultiKeyShortcutsAllowed )
67
68 Q_PROPERTY(
69 bool modifierlessAllowed
70 READ isModifierlessAllowed
71 WRITE setModifierlessAllowed )
72
73 Q_PROPERTY(
74 bool modifierOnlyAllowed
75 READ isModifierOnlyAllowed
76 WRITE setModifierOnlyAllowed )
77
78 public:
79 enum Validation {
80 Validate = 0,
81 NoValidate = 1
82 };
83
84 /**
85 * Constructor.
86 */
87 explicit FcitxQtKeySequenceWidget(QWidget *parent = 0);
88
89 /**
90 * Destructs the widget.
91 */
92 virtual ~FcitxQtKeySequenceWidget();
93
94 void setMultiKeyShortcutsAllowed(bool);
95 bool multiKeyShortcutsAllowed() const;
96
97 void setModifierlessAllowed(bool allow);
98 bool isModifierlessAllowed();
99
100 void setModifierOnlyAllowed(bool allow);
101 bool isModifierOnlyAllowed();
102
103 /*
104 * only useful when modifierOnlyAllowed is true
105 * and the key is modifierOnly.
106 */
107 FcitxQtModifierSide modifierSide();
108
109 void setClearButtonShown(bool show);
110
111 QKeySequence keySequence() const;
112
113 static void keyQtToFcitx(int keyQt, FcitxQtModifierSide side, int& outsym, uint& outstate);
114 static int keyFcitxToQt(int sym, uint state);
115
116 Q_SIGNALS:
117 void keySequenceChanged(const QKeySequence &seq, FcitxQtModifierSide side);
118
119 public Q_SLOTS:
120 void captureKeySequence();
121 void setKeySequence(const QKeySequence &seq, FcitxQtModifierSide side = MS_Unknown, Validation val = NoValidate);
122 void clearKeySequence();
123
124 private:
125 Q_PRIVATE_SLOT(d, void doneRecording())
126
127 private:
128 friend class FcitxQtKeySequenceWidgetPrivate;
129 FcitxQtKeySequenceWidgetPrivate *const d;
130
131 Q_DISABLE_COPY(FcitxQtKeySequenceWidget)
132 };
133
134 #endif //KKEYSEQUENCEWIDGET_H
0 /***************************************************************************
1 * Copyright (C) 2013~2013 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 /* this is forked from kdelibs/kdeui/kkeysequencewidget_p.h */
20
21 /*
22 Original Copyright header
23 Copyright (C) 2001, 2002 Ellis Whitehead <ellis@kde.org>
24 Copyright (C) 2007 Andreas Hartmetz <ahartmetz@gmail.com>
25
26 This library is free software; you can redistribute it and/or
27 modify it under the terms of the GNU Library General Public
28 License as published by the Free Software Foundation; either
29 version 2 of the License, or (at your option) any later version.
30
31 This library is distributed in the hope that it will be useful,
32 but WITHOUT ANY WARRANTY; without even the implied warranty of
33 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
34 Library General Public License for more details.
35
36 You should have received a copy of the GNU Library General Public License
37 along with this library; see the file COPYING.LIB. If not, write to
38 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
39 Boston, MA 02110-1301, USA.
40 */
41 #ifndef FCITXQT_KEYSEQUENCEWIDGET_P_H
42 #define FCITXQT_KEYSEQUENCEWIDGET_P_H
43
44 #include <QPushButton>
45 #include <QHBoxLayout>
46 #include <QToolButton>
47
48 class FcitxQtKeySequenceWidgetPrivate;
49 class FcitxQtKeySequenceButton: public QPushButton
50 {
51 Q_OBJECT
52
53 public:
54 explicit FcitxQtKeySequenceButton(FcitxQtKeySequenceWidgetPrivate *d, QWidget *parent)
55 : QPushButton(parent),
56 d(d) {}
57
58 virtual ~FcitxQtKeySequenceButton();
59
60 protected:
61 /**
62 * Reimplemented for internal reasons.
63 */
64 virtual bool event (QEvent *event);
65 virtual void keyPressEvent(QKeyEvent *event);
66 virtual void keyReleaseEvent(QKeyEvent *event);
67
68 private:
69 FcitxQtKeySequenceWidgetPrivate *const d;
70 };
71
72 #endif //FCITXQT_KEYSEQUENCEWIDGET_P_H
0 /***************************************************************************
1 * Copyright (C) 2012~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #include <fcitx-config/hotkey.h>
20 #include <QTextCodec>
21 #include <QDebug>
22 #include <ctype.h>
23 #include "qtkeytrans.h"
24 #include "qtkeytransdata.h"
25
26 #define _ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
27 #define _ARRAY_END(a) (a + _ARRAY_SIZE(a))
28
29 void qEventToSym(int key, const QString& text, Qt::KeyboardModifiers mod, int& outsym, unsigned int& outstate) {
30 int sym = 0;
31 int state = 0;
32 do {
33 if (text.length() <= 0)
34 break;
35 int uni = text[0].unicode();
36 int* result = qBinaryFind(unicodeHasKey, _ARRAY_END(unicodeHasKey), uni);
37 if (result != _ARRAY_END(unicodeHasKey)) {
38 sym = *result + 0x1000000;
39 break;
40 }
41
42 Unicode2Key* keyMap = qBinaryFind(unicodeKeyMap, _ARRAY_END(unicodeKeyMap), uni);
43 if (keyMap != _ARRAY_END(unicodeKeyMap)) {
44 sym = keyMap->key;
45 break;
46 }
47 } while(0);
48
49 do {
50 if (sym)
51 break;
52
53 QtCode2Key* result = NULL;
54 if (mod & Qt::KeypadModifier) {
55 result = qBinaryFind(keyPadQtCodeToKey, _ARRAY_END(keyPadQtCodeToKey), key);
56 if (result == _ARRAY_END(keyPadQtCodeToKey))
57 result = NULL;
58 }
59 else {
60 if (text.isNull()) {
61 result = qBinaryFind(qtCodeToKeyBackup, _ARRAY_END(qtCodeToKeyBackup), key);
62 if (result == _ARRAY_END(qtCodeToKeyBackup))
63 result = NULL;
64 }
65 if (!result) {
66 result = qBinaryFind(qtCodeToKey, _ARRAY_END(qtCodeToKey), key);
67
68 if (result == _ARRAY_END(qtCodeToKey))
69 result = NULL;
70 }
71
72 if (!result) {
73 result = qBinaryFind(keyPadQtCodeToKey, _ARRAY_END(keyPadQtCodeToKey), key);
74 if (result == _ARRAY_END(keyPadQtCodeToKey))
75 result = NULL;
76 }
77 }
78
79 if (result)
80 sym = result->key;
81
82 } while (0);
83
84 state = FcitxKeyState_None;
85
86 if (mod & Qt::CTRL)
87 state |= FcitxKeyState_Ctrl;
88
89 if (mod & Qt::ALT)
90 state |= FcitxKeyState_Alt;
91
92 if (mod & Qt::SHIFT)
93 state |= FcitxKeyState_Shift;
94
95 if (mod & Qt::META)
96 state |= FcitxKeyState_Super;
97
98 outsym = sym;
99 outstate= state;
100 }
101
102 // the next lines are taken on 10/2009 from X.org (X11/XF86keysym.h), defining some special
103 // multimedia keys. They are included here as not every system has them.
104 #define XF86FcitxKey_MonBrightnessUp 0x1008FF02
105 #define XF86FcitxKey_MonBrightnessDown 0x1008FF03
106 #define XF86FcitxKey_KbdLightOnOff 0x1008FF04
107 #define XF86FcitxKey_KbdBrightnessUp 0x1008FF05
108 #define XF86FcitxKey_KbdBrightnessDown 0x1008FF06
109 #define XF86FcitxKey_Standby 0x1008FF10
110 #define XF86FcitxKey_AudioLowerVolume 0x1008FF11
111 #define XF86FcitxKey_AudioMute 0x1008FF12
112 #define XF86FcitxKey_AudioRaiseVolume 0x1008FF13
113 #define XF86FcitxKey_AudioPlay 0x1008FF14
114 #define XF86FcitxKey_AudioStop 0x1008FF15
115 #define XF86FcitxKey_AudioPrev 0x1008FF16
116 #define XF86FcitxKey_AudioNext 0x1008FF17
117 #define XF86FcitxKey_HomePage 0x1008FF18
118 #define XF86FcitxKey_Mail 0x1008FF19
119 #define XF86FcitxKey_Start 0x1008FF1A
120 #define XF86FcitxKey_Search 0x1008FF1B
121 #define XF86FcitxKey_AudioRecord 0x1008FF1C
122 #define XF86FcitxKey_Calculator 0x1008FF1D
123 #define XF86FcitxKey_Memo 0x1008FF1E
124 #define XF86FcitxKey_ToDoList 0x1008FF1F
125 #define XF86FcitxKey_Calendar 0x1008FF20
126 #define XF86FcitxKey_PowerDown 0x1008FF21
127 #define XF86FcitxKey_ContrastAdjust 0x1008FF22
128 #define XF86FcitxKey_Back 0x1008FF26
129 #define XF86FcitxKey_Forward 0x1008FF27
130 #define XF86FcitxKey_Stop 0x1008FF28
131 #define XF86FcitxKey_Refresh 0x1008FF29
132 #define XF86FcitxKey_PowerOff 0x1008FF2A
133 #define XF86FcitxKey_WakeUp 0x1008FF2B
134 #define XF86FcitxKey_Eject 0x1008FF2C
135 #define XF86FcitxKey_ScreenSaver 0x1008FF2D
136 #define XF86FcitxKey_WWW 0x1008FF2E
137 #define XF86FcitxKey_Sleep 0x1008FF2F
138 #define XF86FcitxKey_Favorites 0x1008FF30
139 #define XF86FcitxKey_AudioPause 0x1008FF31
140 #define XF86FcitxKey_AudioMedia 0x1008FF32
141 #define XF86FcitxKey_MyComputer 0x1008FF33
142 #define XF86FcitxKey_LightBulb 0x1008FF35
143 #define XF86FcitxKey_Shop 0x1008FF36
144 #define XF86FcitxKey_History 0x1008FF37
145 #define XF86FcitxKey_OpenURL 0x1008FF38
146 #define XF86FcitxKey_AddFavorite 0x1008FF39
147 #define XF86FcitxKey_HotLinks 0x1008FF3A
148 #define XF86FcitxKey_BrightnessAdjust 0x1008FF3B
149 #define XF86FcitxKey_Finance 0x1008FF3C
150 #define XF86FcitxKey_Community 0x1008FF3D
151 #define XF86FcitxKey_AudioRewind 0x1008FF3E
152 #define XF86FcitxKey_BackForward 0x1008FF3F
153 #define XF86FcitxKey_Launch0 0x1008FF40
154 #define XF86FcitxKey_Launch1 0x1008FF41
155 #define XF86FcitxKey_Launch2 0x1008FF42
156 #define XF86FcitxKey_Launch3 0x1008FF43
157 #define XF86FcitxKey_Launch4 0x1008FF44
158 #define XF86FcitxKey_Launch5 0x1008FF45
159 #define XF86FcitxKey_Launch6 0x1008FF46
160 #define XF86FcitxKey_Launch7 0x1008FF47
161 #define XF86FcitxKey_Launch8 0x1008FF48
162 #define XF86FcitxKey_Launch9 0x1008FF49
163 #define XF86FcitxKey_LaunchA 0x1008FF4A
164 #define XF86FcitxKey_LaunchB 0x1008FF4B
165 #define XF86FcitxKey_LaunchC 0x1008FF4C
166 #define XF86FcitxKey_LaunchD 0x1008FF4D
167 #define XF86FcitxKey_LaunchE 0x1008FF4E
168 #define XF86FcitxKey_LaunchF 0x1008FF4F
169 #define XF86FcitxKey_ApplicationLeft 0x1008FF50
170 #define XF86FcitxKey_ApplicationRight 0x1008FF51
171 #define XF86FcitxKey_Book 0x1008FF52
172 #define XF86FcitxKey_CD 0x1008FF53
173 #define XF86FcitxKey_Calculater 0x1008FF54
174 #define XF86FcitxKey_Clear 0x1008FF55
175 #define XF86FcitxKey_ClearGrab 0x1008FE21
176 #define XF86FcitxKey_Close 0x1008FF56
177 #define XF86FcitxKey_Copy 0x1008FF57
178 #define XF86FcitxKey_Cut 0x1008FF58
179 #define XF86FcitxKey_Display 0x1008FF59
180 #define XF86FcitxKey_DOS 0x1008FF5A
181 #define XF86FcitxKey_Documents 0x1008FF5B
182 #define XF86FcitxKey_Excel 0x1008FF5C
183 #define XF86FcitxKey_Explorer 0x1008FF5D
184 #define XF86FcitxKey_Game 0x1008FF5E
185 #define XF86FcitxKey_Go 0x1008FF5F
186 #define XF86FcitxKey_iTouch 0x1008FF60
187 #define XF86FcitxKey_LogOff 0x1008FF61
188 #define XF86FcitxKey_Market 0x1008FF62
189 #define XF86FcitxKey_Meeting 0x1008FF63
190 #define XF86FcitxKey_MenuKB 0x1008FF65
191 #define XF86FcitxKey_MenuPB 0x1008FF66
192 #define XF86FcitxKey_MySites 0x1008FF67
193 #define XF86FcitxKey_News 0x1008FF69
194 #define XF86FcitxKey_OfficeHome 0x1008FF6A
195 #define XF86FcitxKey_Option 0x1008FF6C
196 #define XF86FcitxKey_Paste 0x1008FF6D
197 #define XF86FcitxKey_Phone 0x1008FF6E
198 #define XF86FcitxKey_Reply 0x1008FF72
199 #define XF86FcitxKey_Reload 0x1008FF73
200 #define XF86FcitxKey_RotateWindows 0x1008FF74
201 #define XF86FcitxKey_RotationPB 0x1008FF75
202 #define XF86FcitxKey_RotationKB 0x1008FF76
203 #define XF86FcitxKey_Save 0x1008FF77
204 #define XF86FcitxKey_Send 0x1008FF7B
205 #define XF86FcitxKey_Spell 0x1008FF7C
206 #define XF86FcitxKey_SplitScreen 0x1008FF7D
207 #define XF86FcitxKey_Support 0x1008FF7E
208 #define XF86FcitxKey_TaskPane 0x1008FF7F
209 #define XF86FcitxKey_Terminal 0x1008FF80
210 #define XF86FcitxKey_Tools 0x1008FF81
211 #define XF86FcitxKey_Travel 0x1008FF82
212 #define XF86FcitxKey_Video 0x1008FF87
213 #define XF86FcitxKey_Word 0x1008FF89
214 #define XF86FcitxKey_Xfer 0x1008FF8A
215 #define XF86FcitxKey_ZoomIn 0x1008FF8B
216 #define XF86FcitxKey_ZoomOut 0x1008FF8C
217 #define XF86FcitxKey_Away 0x1008FF8D
218 #define XF86FcitxKey_Messenger 0x1008FF8E
219 #define XF86FcitxKey_WebCam 0x1008FF8F
220 #define XF86FcitxKey_MailForward 0x1008FF90
221 #define XF86FcitxKey_Pictures 0x1008FF91
222 #define XF86FcitxKey_Music 0x1008FF92
223 #define XF86FcitxKey_Battery 0x1008FF93
224 #define XF86FcitxKey_Bluetooth 0x1008FF94
225 #define XF86FcitxKey_WLAN 0x1008FF95
226 #define XF86FcitxKey_UWB 0x1008FF96
227 #define XF86FcitxKey_AudioForward 0x1008FF97
228 #define XF86FcitxKey_AudioRepeat 0x1008FF98
229 #define XF86FcitxKey_AudioRandomPlay 0x1008FF99
230 #define XF86FcitxKey_Subtitle 0x1008FF9A
231 #define XF86FcitxKey_AudioCycleTrack 0x1008FF9B
232 #define XF86FcitxKey_Time 0x1008FF9F
233 #define XF86FcitxKey_Select 0x1008FFA0
234 #define XF86FcitxKey_View 0x1008FFA1
235 #define XF86FcitxKey_TopMenu 0x1008FFA2
236 #define XF86FcitxKey_Suspend 0x1008FFA7
237 #define XF86FcitxKey_Hibernate 0x1008FFA8
238 #define XF86FcitxKey_TouchpadToggle 0x1008FFA9
239 #define XF86FcitxKey_TouchpadOn 0x1008FFB0
240 #define XF86FcitxKey_TouchpadOff 0x1008FFB1
241
242
243 // end of XF86keysyms.h
244
245 QT_BEGIN_NAMESPACE
246
247 // keyboard mapping table
248 static const unsigned int KeyTbl[] = {
249
250 // misc keys
251
252 FcitxKey_Escape, Qt::Key_Escape,
253 FcitxKey_Tab, Qt::Key_Tab,
254 FcitxKey_ISO_Left_Tab, Qt::Key_Backtab,
255 FcitxKey_BackSpace, Qt::Key_Backspace,
256 FcitxKey_Return, Qt::Key_Return,
257 FcitxKey_Insert, Qt::Key_Insert,
258 FcitxKey_Delete, Qt::Key_Delete,
259 FcitxKey_Clear, Qt::Key_Delete,
260 FcitxKey_Pause, Qt::Key_Pause,
261 FcitxKey_Print, Qt::Key_Print,
262 0x1005FF60, Qt::Key_SysReq, // hardcoded Sun SysReq
263 0x1007ff00, Qt::Key_SysReq, // hardcoded X386 SysReq
264
265 // cursor movement
266
267 FcitxKey_Home, Qt::Key_Home,
268 FcitxKey_End, Qt::Key_End,
269 FcitxKey_Left, Qt::Key_Left,
270 FcitxKey_Up, Qt::Key_Up,
271 FcitxKey_Right, Qt::Key_Right,
272 FcitxKey_Down, Qt::Key_Down,
273 FcitxKey_Prior, Qt::Key_PageUp,
274 FcitxKey_Next, Qt::Key_PageDown,
275
276 // modifiers
277
278 FcitxKey_Shift_L, Qt::Key_Shift,
279 FcitxKey_Shift_R, Qt::Key_Shift,
280 FcitxKey_Shift_Lock, Qt::Key_Shift,
281 FcitxKey_Control_L, Qt::Key_Control,
282 FcitxKey_Control_R, Qt::Key_Control,
283 FcitxKey_Meta_L, Qt::Key_Meta,
284 FcitxKey_Meta_R, Qt::Key_Meta,
285 FcitxKey_Alt_L, Qt::Key_Alt,
286 FcitxKey_Alt_R, Qt::Key_Alt,
287 FcitxKey_Caps_Lock, Qt::Key_CapsLock,
288 FcitxKey_Num_Lock, Qt::Key_NumLock,
289 FcitxKey_Scroll_Lock, Qt::Key_ScrollLock,
290 FcitxKey_Super_L, Qt::Key_Super_L,
291 FcitxKey_Super_R, Qt::Key_Super_R,
292 FcitxKey_Menu, Qt::Key_Menu,
293 FcitxKey_Hyper_L, Qt::Key_Hyper_L,
294 FcitxKey_Hyper_R, Qt::Key_Hyper_R,
295 FcitxKey_Help, Qt::Key_Help,
296 0x1000FF74, Qt::Key_Backtab, // hardcoded HP backtab
297 0x1005FF10, Qt::Key_F11, // hardcoded Sun F36 (labeled F11)
298 0x1005FF11, Qt::Key_F12, // hardcoded Sun F37 (labeled F12)
299
300 // numeric and function keypad keys
301
302 FcitxKey_KP_Space, Qt::Key_Space,
303 FcitxKey_KP_Tab, Qt::Key_Tab,
304 FcitxKey_KP_Enter, Qt::Key_Enter,
305 //FcitxKey_KP_F1, Qt::Key_F1,
306 //FcitxKey_KP_F2, Qt::Key_F2,
307 //FcitxKey_KP_F3, Qt::Key_F3,
308 //FcitxKey_KP_F4, Qt::Key_F4,
309 FcitxKey_KP_Home, Qt::Key_Home,
310 FcitxKey_KP_Left, Qt::Key_Left,
311 FcitxKey_KP_Up, Qt::Key_Up,
312 FcitxKey_KP_Right, Qt::Key_Right,
313 FcitxKey_KP_Down, Qt::Key_Down,
314 FcitxKey_KP_Prior, Qt::Key_PageUp,
315 FcitxKey_KP_Next, Qt::Key_PageDown,
316 FcitxKey_KP_End, Qt::Key_End,
317 FcitxKey_KP_Begin, Qt::Key_Clear,
318 FcitxKey_KP_Insert, Qt::Key_Insert,
319 FcitxKey_KP_Delete, Qt::Key_Delete,
320 FcitxKey_KP_Equal, Qt::Key_Equal,
321 FcitxKey_KP_Multiply, Qt::Key_Asterisk,
322 FcitxKey_KP_Add, Qt::Key_Plus,
323 FcitxKey_KP_Separator, Qt::Key_Comma,
324 FcitxKey_KP_Subtract, Qt::Key_Minus,
325 FcitxKey_KP_Decimal, Qt::Key_Period,
326 FcitxKey_KP_Divide, Qt::Key_Slash,
327
328 // International input method support keys
329
330 // International & multi-key character composition
331 FcitxKey_ISO_Level3_Shift, Qt::Key_AltGr,
332 FcitxKey_Multi_key, Qt::Key_Multi_key,
333 FcitxKey_Codeinput, Qt::Key_Codeinput,
334 FcitxKey_SingleCandidate, Qt::Key_SingleCandidate,
335 FcitxKey_MultipleCandidate, Qt::Key_MultipleCandidate,
336 FcitxKey_PreviousCandidate, Qt::Key_PreviousCandidate,
337
338 // Misc Functions
339 FcitxKey_Mode_switch, Qt::Key_Mode_switch,
340 FcitxKey_script_switch, Qt::Key_Mode_switch,
341
342 // Japanese keyboard support
343 FcitxKey_Kanji, Qt::Key_Kanji,
344 FcitxKey_Muhenkan, Qt::Key_Muhenkan,
345 //FcitxKey_Henkan_Mode, Qt::Key_Henkan_Mode,
346 FcitxKey_Henkan_Mode, Qt::Key_Henkan,
347 FcitxKey_Henkan, Qt::Key_Henkan,
348 FcitxKey_Romaji, Qt::Key_Romaji,
349 FcitxKey_Hiragana, Qt::Key_Hiragana,
350 FcitxKey_Katakana, Qt::Key_Katakana,
351 FcitxKey_Hiragana_Katakana, Qt::Key_Hiragana_Katakana,
352 FcitxKey_Zenkaku, Qt::Key_Zenkaku,
353 FcitxKey_Hankaku, Qt::Key_Hankaku,
354 FcitxKey_Zenkaku_Hankaku, Qt::Key_Zenkaku_Hankaku,
355 FcitxKey_Touroku, Qt::Key_Touroku,
356 FcitxKey_Massyo, Qt::Key_Massyo,
357 FcitxKey_Kana_Lock, Qt::Key_Kana_Lock,
358 FcitxKey_Kana_Shift, Qt::Key_Kana_Shift,
359 FcitxKey_Eisu_Shift, Qt::Key_Eisu_Shift,
360 FcitxKey_Eisu_toggle, Qt::Key_Eisu_toggle,
361 //FcitxKey_Kanji_Bangou, Qt::Key_Kanji_Bangou,
362 //FcitxKey_Zen_Koho, Qt::Key_Zen_Koho,
363 //FcitxKey_Mae_Koho, Qt::Key_Mae_Koho,
364 FcitxKey_Kanji_Bangou, Qt::Key_Codeinput,
365 FcitxKey_Zen_Koho, Qt::Key_MultipleCandidate,
366 FcitxKey_Mae_Koho, Qt::Key_PreviousCandidate,
367
368 #ifdef FcitxKey_KOREAN
369 // Korean keyboard support
370 FcitxKey_Hangul, Qt::Key_Hangul,
371 FcitxKey_Hangul_Start, Qt::Key_Hangul_Start,
372 FcitxKey_Hangul_End, Qt::Key_Hangul_End,
373 FcitxKey_Hangul_Hanja, Qt::Key_Hangul_Hanja,
374 FcitxKey_Hangul_Jamo, Qt::Key_Hangul_Jamo,
375 FcitxKey_Hangul_Romaja, Qt::Key_Hangul_Romaja,
376 //FcitxKey_Hangul_Codeinput, Qt::Key_Hangul_Codeinput,
377 FcitxKey_Hangul_Codeinput, Qt::Key_Codeinput,
378 FcitxKey_Hangul_Jeonja, Qt::Key_Hangul_Jeonja,
379 FcitxKey_Hangul_Banja, Qt::Key_Hangul_Banja,
380 FcitxKey_Hangul_PreHanja, Qt::Key_Hangul_PreHanja,
381 FcitxKey_Hangul_PostHanja, Qt::Key_Hangul_PostHanja,
382 //FcitxKey_Hangul_SingleCandidate,Qt::Key_Hangul_SingleCandidate,
383 //FcitxKey_Hangul_MultipleCandidate,Qt::Key_Hangul_MultipleCandidate,
384 //FcitxKey_Hangul_PreviousCandidate,Qt::Key_Hangul_PreviousCandidate,
385 FcitxKey_Hangul_SingleCandidate, Qt::Key_SingleCandidate,
386 FcitxKey_Hangul_MultipleCandidate,Qt::Key_MultipleCandidate,
387 FcitxKey_Hangul_PreviousCandidate,Qt::Key_PreviousCandidate,
388 FcitxKey_Hangul_Special, Qt::Key_Hangul_Special,
389 //FcitxKey_Hangul_switch, Qt::Key_Hangul_switch,
390 FcitxKey_Hangul_switch, Qt::Key_Mode_switch,
391 #endif // FcitxKey_KOREAN
392
393 // dead keys
394 FcitxKey_dead_grave, Qt::Key_Dead_Grave,
395 FcitxKey_dead_acute, Qt::Key_Dead_Acute,
396 FcitxKey_dead_circumflex, Qt::Key_Dead_Circumflex,
397 FcitxKey_dead_tilde, Qt::Key_Dead_Tilde,
398 FcitxKey_dead_macron, Qt::Key_Dead_Macron,
399 FcitxKey_dead_breve, Qt::Key_Dead_Breve,
400 FcitxKey_dead_abovedot, Qt::Key_Dead_Abovedot,
401 FcitxKey_dead_diaeresis, Qt::Key_Dead_Diaeresis,
402 FcitxKey_dead_abovering, Qt::Key_Dead_Abovering,
403 FcitxKey_dead_doubleacute, Qt::Key_Dead_Doubleacute,
404 FcitxKey_dead_caron, Qt::Key_Dead_Caron,
405 FcitxKey_dead_cedilla, Qt::Key_Dead_Cedilla,
406 FcitxKey_dead_ogonek, Qt::Key_Dead_Ogonek,
407 FcitxKey_dead_iota, Qt::Key_Dead_Iota,
408 FcitxKey_dead_voiced_sound, Qt::Key_Dead_Voiced_Sound,
409 FcitxKey_dead_semivoiced_sound, Qt::Key_Dead_Semivoiced_Sound,
410 FcitxKey_dead_belowdot, Qt::Key_Dead_Belowdot,
411 FcitxKey_dead_hook, Qt::Key_Dead_Hook,
412 FcitxKey_dead_horn, Qt::Key_Dead_Horn,
413
414 // Special keys from X.org - This include multimedia keys,
415 // wireless/bluetooth/uwb keys, special launcher keys, etc.
416 XF86FcitxKey_Back, Qt::Key_Back,
417 XF86FcitxKey_Forward, Qt::Key_Forward,
418 XF86FcitxKey_Stop, Qt::Key_Stop,
419 XF86FcitxKey_Refresh, Qt::Key_Refresh,
420 XF86FcitxKey_Favorites, Qt::Key_Favorites,
421 XF86FcitxKey_AudioMedia, Qt::Key_LaunchMedia,
422 XF86FcitxKey_OpenURL, Qt::Key_OpenUrl,
423 XF86FcitxKey_HomePage, Qt::Key_HomePage,
424 XF86FcitxKey_Search, Qt::Key_Search,
425 XF86FcitxKey_AudioLowerVolume, Qt::Key_VolumeDown,
426 XF86FcitxKey_AudioMute, Qt::Key_VolumeMute,
427 XF86FcitxKey_AudioRaiseVolume, Qt::Key_VolumeUp,
428 XF86FcitxKey_AudioPlay, Qt::Key_MediaPlay,
429 XF86FcitxKey_AudioStop, Qt::Key_MediaStop,
430 XF86FcitxKey_AudioPrev, Qt::Key_MediaPrevious,
431 XF86FcitxKey_AudioNext, Qt::Key_MediaNext,
432 XF86FcitxKey_AudioRecord, Qt::Key_MediaRecord,
433 XF86FcitxKey_Mail, Qt::Key_LaunchMail,
434 XF86FcitxKey_MyComputer, Qt::Key_Launch0, // ### Qt 6: remap properly
435 XF86FcitxKey_Calculator, Qt::Key_Launch1,
436 XF86FcitxKey_Memo, Qt::Key_Memo,
437 XF86FcitxKey_ToDoList, Qt::Key_ToDoList,
438 XF86FcitxKey_Calendar, Qt::Key_Calendar,
439 XF86FcitxKey_PowerDown, Qt::Key_PowerDown,
440 XF86FcitxKey_ContrastAdjust, Qt::Key_ContrastAdjust,
441 XF86FcitxKey_Standby, Qt::Key_Standby,
442 XF86FcitxKey_MonBrightnessUp, Qt::Key_MonBrightnessUp,
443 XF86FcitxKey_MonBrightnessDown, Qt::Key_MonBrightnessDown,
444 XF86FcitxKey_KbdLightOnOff, Qt::Key_KeyboardLightOnOff,
445 XF86FcitxKey_KbdBrightnessUp, Qt::Key_KeyboardBrightnessUp,
446 XF86FcitxKey_KbdBrightnessDown, Qt::Key_KeyboardBrightnessDown,
447 XF86FcitxKey_PowerOff, Qt::Key_PowerOff,
448 XF86FcitxKey_WakeUp, Qt::Key_WakeUp,
449 XF86FcitxKey_Eject, Qt::Key_Eject,
450 XF86FcitxKey_ScreenSaver, Qt::Key_ScreenSaver,
451 XF86FcitxKey_WWW, Qt::Key_WWW,
452 XF86FcitxKey_Sleep, Qt::Key_Sleep,
453 XF86FcitxKey_LightBulb, Qt::Key_LightBulb,
454 XF86FcitxKey_Shop, Qt::Key_Shop,
455 XF86FcitxKey_History, Qt::Key_History,
456 XF86FcitxKey_AddFavorite, Qt::Key_AddFavorite,
457 XF86FcitxKey_HotLinks, Qt::Key_HotLinks,
458 XF86FcitxKey_BrightnessAdjust, Qt::Key_BrightnessAdjust,
459 XF86FcitxKey_Finance, Qt::Key_Finance,
460 XF86FcitxKey_Community, Qt::Key_Community,
461 XF86FcitxKey_AudioRewind, Qt::Key_AudioRewind,
462 XF86FcitxKey_BackForward, Qt::Key_BackForward,
463 XF86FcitxKey_ApplicationLeft, Qt::Key_ApplicationLeft,
464 XF86FcitxKey_ApplicationRight, Qt::Key_ApplicationRight,
465 XF86FcitxKey_Book, Qt::Key_Book,
466 XF86FcitxKey_CD, Qt::Key_CD,
467 XF86FcitxKey_Calculater, Qt::Key_Calculator,
468 XF86FcitxKey_Clear, Qt::Key_Clear,
469 XF86FcitxKey_ClearGrab, Qt::Key_ClearGrab,
470 XF86FcitxKey_Close, Qt::Key_Close,
471 XF86FcitxKey_Copy, Qt::Key_Copy,
472 XF86FcitxKey_Cut, Qt::Key_Cut,
473 XF86FcitxKey_Display, Qt::Key_Display,
474 XF86FcitxKey_DOS, Qt::Key_DOS,
475 XF86FcitxKey_Documents, Qt::Key_Documents,
476 XF86FcitxKey_Excel, Qt::Key_Excel,
477 XF86FcitxKey_Explorer, Qt::Key_Explorer,
478 XF86FcitxKey_Game, Qt::Key_Game,
479 XF86FcitxKey_Go, Qt::Key_Go,
480 XF86FcitxKey_iTouch, Qt::Key_iTouch,
481 XF86FcitxKey_LogOff, Qt::Key_LogOff,
482 XF86FcitxKey_Market, Qt::Key_Market,
483 XF86FcitxKey_Meeting, Qt::Key_Meeting,
484 XF86FcitxKey_MenuKB, Qt::Key_MenuKB,
485 XF86FcitxKey_MenuPB, Qt::Key_MenuPB,
486 XF86FcitxKey_MySites, Qt::Key_MySites,
487 XF86FcitxKey_News, Qt::Key_News,
488 XF86FcitxKey_OfficeHome, Qt::Key_OfficeHome,
489 XF86FcitxKey_Option, Qt::Key_Option,
490 XF86FcitxKey_Paste, Qt::Key_Paste,
491 XF86FcitxKey_Phone, Qt::Key_Phone,
492 XF86FcitxKey_Reply, Qt::Key_Reply,
493 XF86FcitxKey_Reload, Qt::Key_Reload,
494 XF86FcitxKey_RotateWindows, Qt::Key_RotateWindows,
495 XF86FcitxKey_RotationPB, Qt::Key_RotationPB,
496 XF86FcitxKey_RotationKB, Qt::Key_RotationKB,
497 XF86FcitxKey_Save, Qt::Key_Save,
498 XF86FcitxKey_Send, Qt::Key_Send,
499 XF86FcitxKey_Spell, Qt::Key_Spell,
500 XF86FcitxKey_SplitScreen, Qt::Key_SplitScreen,
501 XF86FcitxKey_Support, Qt::Key_Support,
502 XF86FcitxKey_TaskPane, Qt::Key_TaskPane,
503 XF86FcitxKey_Terminal, Qt::Key_Terminal,
504 XF86FcitxKey_Tools, Qt::Key_Tools,
505 XF86FcitxKey_Travel, Qt::Key_Travel,
506 XF86FcitxKey_Video, Qt::Key_Video,
507 XF86FcitxKey_Word, Qt::Key_Word,
508 XF86FcitxKey_Xfer, Qt::Key_Xfer,
509 XF86FcitxKey_ZoomIn, Qt::Key_ZoomIn,
510 XF86FcitxKey_ZoomOut, Qt::Key_ZoomOut,
511 XF86FcitxKey_Away, Qt::Key_Away,
512 XF86FcitxKey_Messenger, Qt::Key_Messenger,
513 XF86FcitxKey_WebCam, Qt::Key_WebCam,
514 XF86FcitxKey_MailForward, Qt::Key_MailForward,
515 XF86FcitxKey_Pictures, Qt::Key_Pictures,
516 XF86FcitxKey_Music, Qt::Key_Music,
517 XF86FcitxKey_Battery, Qt::Key_Battery,
518 XF86FcitxKey_Bluetooth, Qt::Key_Bluetooth,
519 XF86FcitxKey_WLAN, Qt::Key_WLAN,
520 XF86FcitxKey_UWB, Qt::Key_UWB,
521 XF86FcitxKey_AudioForward, Qt::Key_AudioForward,
522 XF86FcitxKey_AudioRepeat, Qt::Key_AudioRepeat,
523 XF86FcitxKey_AudioRandomPlay, Qt::Key_AudioRandomPlay,
524 XF86FcitxKey_Subtitle, Qt::Key_Subtitle,
525 XF86FcitxKey_AudioCycleTrack, Qt::Key_AudioCycleTrack,
526 XF86FcitxKey_Time, Qt::Key_Time,
527 XF86FcitxKey_Select, Qt::Key_Select,
528 XF86FcitxKey_View, Qt::Key_View,
529 XF86FcitxKey_TopMenu, Qt::Key_TopMenu,
530 XF86FcitxKey_Bluetooth, Qt::Key_Bluetooth,
531 XF86FcitxKey_Suspend, Qt::Key_Suspend,
532 XF86FcitxKey_Hibernate, Qt::Key_Hibernate,
533 XF86FcitxKey_Launch0, Qt::Key_Launch2, // ### Qt 6: remap properly
534 XF86FcitxKey_Launch1, Qt::Key_Launch3,
535 XF86FcitxKey_Launch2, Qt::Key_Launch4,
536 XF86FcitxKey_Launch3, Qt::Key_Launch5,
537 XF86FcitxKey_Launch4, Qt::Key_Launch6,
538 XF86FcitxKey_Launch5, Qt::Key_Launch7,
539 XF86FcitxKey_Launch6, Qt::Key_Launch8,
540 XF86FcitxKey_Launch7, Qt::Key_Launch9,
541 XF86FcitxKey_Launch8, Qt::Key_LaunchA,
542 XF86FcitxKey_Launch9, Qt::Key_LaunchB,
543 XF86FcitxKey_LaunchA, Qt::Key_LaunchC,
544 XF86FcitxKey_LaunchB, Qt::Key_LaunchD,
545 XF86FcitxKey_LaunchC, Qt::Key_LaunchE,
546 XF86FcitxKey_LaunchD, Qt::Key_LaunchF,
547 XF86FcitxKey_LaunchE, Qt::Key_LaunchG,
548 XF86FcitxKey_LaunchF, Qt::Key_LaunchH,
549
550 0, 0
551 };
552
553 static const unsigned short katakanaKeysymsToUnicode[] = {
554 0x0000, 0x3002, 0x300C, 0x300D, 0x3001, 0x30FB, 0x30F2, 0x30A1,
555 0x30A3, 0x30A5, 0x30A7, 0x30A9, 0x30E3, 0x30E5, 0x30E7, 0x30C3,
556 0x30FC, 0x30A2, 0x30A4, 0x30A6, 0x30A8, 0x30AA, 0x30AB, 0x30AD,
557 0x30AF, 0x30B1, 0x30B3, 0x30B5, 0x30B7, 0x30B9, 0x30BB, 0x30BD,
558 0x30BF, 0x30C1, 0x30C4, 0x30C6, 0x30C8, 0x30CA, 0x30CB, 0x30CC,
559 0x30CD, 0x30CE, 0x30CF, 0x30D2, 0x30D5, 0x30D8, 0x30DB, 0x30DE,
560 0x30DF, 0x30E0, 0x30E1, 0x30E2, 0x30E4, 0x30E6, 0x30E8, 0x30E9,
561 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EF, 0x30F3, 0x309B, 0x309C
562 };
563
564 static const unsigned short cyrillicKeysymsToUnicode[] = {
565 0x0000, 0x0452, 0x0453, 0x0451, 0x0454, 0x0455, 0x0456, 0x0457,
566 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x0000, 0x045e, 0x045f,
567 0x2116, 0x0402, 0x0403, 0x0401, 0x0404, 0x0405, 0x0406, 0x0407,
568 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x0000, 0x040e, 0x040f,
569 0x044e, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433,
570 0x0445, 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e,
571 0x043f, 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432,
572 0x044c, 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a,
573 0x042e, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413,
574 0x0425, 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e,
575 0x041f, 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412,
576 0x042c, 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a
577 };
578
579 static const unsigned short greekKeysymsToUnicode[] = {
580 0x0000, 0x0386, 0x0388, 0x0389, 0x038a, 0x03aa, 0x0000, 0x038c,
581 0x038e, 0x03ab, 0x0000, 0x038f, 0x0000, 0x0000, 0x0385, 0x2015,
582 0x0000, 0x03ac, 0x03ad, 0x03ae, 0x03af, 0x03ca, 0x0390, 0x03cc,
583 0x03cd, 0x03cb, 0x03b0, 0x03ce, 0x0000, 0x0000, 0x0000, 0x0000,
584 0x0000, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397,
585 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f,
586 0x03a0, 0x03a1, 0x03a3, 0x0000, 0x03a4, 0x03a5, 0x03a6, 0x03a7,
587 0x03a8, 0x03a9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
588 0x0000, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7,
589 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf,
590 0x03c0, 0x03c1, 0x03c3, 0x03c2, 0x03c4, 0x03c5, 0x03c6, 0x03c7,
591 0x03c8, 0x03c9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
592 };
593
594 static const unsigned short technicalKeysymsToUnicode[] = {
595 0x0000, 0x23B7, 0x250C, 0x2500, 0x2320, 0x2321, 0x2502, 0x23A1,
596 0x23A3, 0x23A4, 0x23A6, 0x239B, 0x239D, 0x239E, 0x23A0, 0x23A8,
597 0x23AC, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
598 0x0000, 0x0000, 0x0000, 0x0000, 0x2264, 0x2260, 0x2265, 0x222B,
599 0x2234, 0x221D, 0x221E, 0x0000, 0x0000, 0x2207, 0x0000, 0x0000,
600 0x223C, 0x2243, 0x0000, 0x0000, 0x0000, 0x21D4, 0x21D2, 0x2261,
601 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x221A, 0x0000,
602 0x0000, 0x0000, 0x2282, 0x2283, 0x2229, 0x222A, 0x2227, 0x2228,
603 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
604 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2202,
605 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0192, 0x0000,
606 0x0000, 0x0000, 0x0000, 0x2190, 0x2191, 0x2192, 0x2193, 0x0000
607 };
608
609 static const unsigned short specialKeysymsToUnicode[] = {
610 0x25C6, 0x2592, 0x2409, 0x240C, 0x240D, 0x240A, 0x0000, 0x0000,
611 0x2424, 0x240B, 0x2518, 0x2510, 0x250C, 0x2514, 0x253C, 0x23BA,
612 0x23BB, 0x2500, 0x23BC, 0x23BD, 0x251C, 0x2524, 0x2534, 0x252C,
613 0x2502, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000
614 };
615
616 static const unsigned short publishingKeysymsToUnicode[] = {
617 0x0000, 0x2003, 0x2002, 0x2004, 0x2005, 0x2007, 0x2008, 0x2009,
618 0x200a, 0x2014, 0x2013, 0x0000, 0x0000, 0x0000, 0x2026, 0x2025,
619 0x2153, 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159, 0x215a,
620 0x2105, 0x0000, 0x0000, 0x2012, 0x2329, 0x0000, 0x232a, 0x0000,
621 0x0000, 0x0000, 0x0000, 0x215b, 0x215c, 0x215d, 0x215e, 0x0000,
622 0x0000, 0x2122, 0x2613, 0x0000, 0x25c1, 0x25b7, 0x25cb, 0x25af,
623 0x2018, 0x2019, 0x201c, 0x201d, 0x211e, 0x0000, 0x2032, 0x2033,
624 0x0000, 0x271d, 0x0000, 0x25ac, 0x25c0, 0x25b6, 0x25cf, 0x25ae,
625 0x25e6, 0x25ab, 0x25ad, 0x25b3, 0x25bd, 0x2606, 0x2022, 0x25aa,
626 0x25b2, 0x25bc, 0x261c, 0x261e, 0x2663, 0x2666, 0x2665, 0x0000,
627 0x2720, 0x2020, 0x2021, 0x2713, 0x2717, 0x266f, 0x266d, 0x2642,
628 0x2640, 0x260e, 0x2315, 0x2117, 0x2038, 0x201a, 0x201e, 0x0000
629 };
630
631 static const unsigned short aplKeysymsToUnicode[] = {
632 0x0000, 0x0000, 0x0000, 0x003c, 0x0000, 0x0000, 0x003e, 0x0000,
633 0x2228, 0x2227, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
634 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
635 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
636 0x00af, 0x0000, 0x22a5, 0x2229, 0x230a, 0x0000, 0x005f, 0x0000,
637 0x0000, 0x0000, 0x2218, 0x0000, 0x2395, 0x0000, 0x22a4, 0x25cb,
638 0x0000, 0x0000, 0x0000, 0x2308, 0x0000, 0x0000, 0x222a, 0x0000,
639 0x2283, 0x0000, 0x2282, 0x0000, 0x22a2, 0x0000, 0x0000, 0x0000,
640 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
641 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
642 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
643 0x0000, 0x0000, 0x0000, 0x0000, 0x22a3, 0x0000, 0x0000, 0x0000
644 };
645
646 static const unsigned short koreanKeysymsToUnicode[] = {
647 0x0000, 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137,
648 0x3138, 0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f,
649 0x3140, 0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147,
650 0x3148, 0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x314f,
651 0x3150, 0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157,
652 0x3158, 0x3159, 0x315a, 0x315b, 0x315c, 0x315d, 0x315e, 0x315f,
653 0x3160, 0x3161, 0x3162, 0x3163, 0x11a8, 0x11a9, 0x11aa, 0x11ab,
654 0x11ac, 0x11ad, 0x11ae, 0x11af, 0x11b0, 0x11b1, 0x11b2, 0x11b3,
655 0x11b4, 0x11b5, 0x11b6, 0x11b7, 0x11b8, 0x11b9, 0x11ba, 0x11bb,
656 0x11bc, 0x11bd, 0x11be, 0x11bf, 0x11c0, 0x11c1, 0x11c2, 0x316d,
657 0x3171, 0x3178, 0x317f, 0x3181, 0x3184, 0x3186, 0x318d, 0x318e,
658 0x11eb, 0x11f0, 0x11f9, 0x0000, 0x0000, 0x0000, 0x0000, 0x20a9
659 };
660
661 static QChar keysymToUnicode(unsigned char byte3, unsigned char byte4)
662 {
663 switch (byte3) {
664 case 0x04:
665 // katakana
666 if (byte4 > 0xa0 && byte4 < 0xe0)
667 return QChar(katakanaKeysymsToUnicode[byte4 - 0xa0]);
668 else if (byte4 == 0x7e)
669 return QChar(0x203e); // Overline
670 break;
671 case 0x06:
672 // russian, use lookup table
673 if (byte4 > 0xa0)
674 return QChar(cyrillicKeysymsToUnicode[byte4 - 0xa0]);
675 break;
676 case 0x07:
677 // greek
678 if (byte4 > 0xa0)
679 return QChar(greekKeysymsToUnicode[byte4 - 0xa0]);
680 break;
681 case 0x08:
682 // technical
683 if (byte4 > 0xa0)
684 return QChar(technicalKeysymsToUnicode[byte4 - 0xa0]);
685 break;
686 case 0x09:
687 // special
688 if (byte4 >= 0xe0)
689 return QChar(specialKeysymsToUnicode[byte4 - 0xe0]);
690 break;
691 case 0x0a:
692 // publishing
693 if (byte4 > 0xa0)
694 return QChar(publishingKeysymsToUnicode[byte4 - 0xa0]);
695 break;
696 case 0x0b:
697 // APL
698 if (byte4 > 0xa0)
699 return QChar(aplKeysymsToUnicode[byte4 - 0xa0]);
700 break;
701 case 0x0e:
702 // Korean
703 if (byte4 > 0xa0)
704 return QChar(koreanKeysymsToUnicode[byte4 - 0xa0]);
705 break;
706 default:
707 break;
708 }
709 return QChar(0x0);
710 }
711
712 int translateKeySym(uint key)
713 {
714 int code = -1;
715 int i = 0; // any other keys
716 while (KeyTbl[i]) {
717 if (key == KeyTbl[i]) {
718 code = (int)KeyTbl[i+1];
719 break;
720 }
721 i += 2;
722 }
723 return code;
724 }
725
726 QString translateKeySym(int keysym, uint xmodifiers,
727 int &code, Qt::KeyboardModifiers &modifiers,
728 QByteArray &chars, int &count)
729 {
730 // all keysyms smaller than 0xff00 are actally keys that can be mapped to unicode chars
731
732 QTextCodec *mapper = QTextCodec::codecForLocale();
733 QChar converted;
734
735 if (/*count == 0 &&*/ keysym < 0xff00) {
736 unsigned char byte3 = (unsigned char)(keysym >> 8);
737 int mib = -1;
738 switch(byte3) {
739 case 0: // Latin 1
740 case 1: // Latin 2
741 case 2: //latin 3
742 case 3: // latin4
743 mib = byte3 + 4;
744 break;
745 case 5: // arabic
746 mib = 82;
747 break;
748 case 12: // Hebrew
749 mib = 85;
750 break;
751 case 13: // Thai
752 mib = 2259;
753 break;
754 case 4: // kana
755 case 6: // cyrillic
756 case 7: // greek
757 case 8: // technical, no mapping here at the moment
758 case 9: // Special
759 case 10: // Publishing
760 case 11: // APL
761 case 14: // Korean, no mapping
762 mib = -1; // manual conversion
763 mapper= 0;
764 converted = keysymToUnicode(byte3, keysym & 0xff);
765 break;
766 case 0x20:
767 // currency symbols
768 if (keysym >= 0x20a0 && keysym <= 0x20ac) {
769 mib = -1; // manual conversion
770 mapper = 0;
771 converted = (uint)keysym;
772 }
773 break;
774 default:
775 break;
776 }
777 if (mib != -1) {
778 mapper = QTextCodec::codecForMib(mib);
779 if (chars.isEmpty())
780 chars.resize(1);
781 chars[0] = (unsigned char) (keysym & 0xff); // get only the fourth bit for conversion later
782 count = 1;
783 }
784 } else if (keysym >= 0x1000000 && keysym <= 0x100ffff) {
785 converted = (ushort) (keysym - 0x1000000);
786 mapper = 0;
787 }
788 if (count < (int)chars.size()-1)
789 chars[count] = '\0';
790
791 QString text;
792 if (!mapper && converted.unicode() != 0x0) {
793 text = converted;
794 } else if (!chars.isEmpty()) {
795 // convert chars (8bit) to text (unicode).
796 if (mapper)
797 text = mapper->toUnicode(chars.constData(), count, 0);
798 if (text.isEmpty()) {
799 // no mapper, or codec couldn't convert to unicode (this
800 // can happen when running in the C locale or with no LANG
801 // set). try converting from latin-1
802 text = QString::fromLatin1(chars);
803 }
804 }
805
806 if (xmodifiers & FcitxKeyState_Alt) {
807 modifiers |= Qt::AltModifier;
808 }
809
810 if (xmodifiers & FcitxKeyState_Shift) {
811 modifiers |= Qt::ShiftModifier;
812 }
813
814 if (xmodifiers & FcitxKeyState_Ctrl) {
815 modifiers |= Qt::ControlModifier;
816 }
817
818 if (xmodifiers & FcitxKeyState_Super) {
819 modifiers |= Qt::MetaModifier;
820 }
821
822 // Commentary in X11/keysymdef says that X codes match ASCII, so it
823 // is safe to use the locale functions to process X codes in ISO8859-1.
824 //
825 // This is mainly for compatibility - applications should not use the
826 // Qt keycodes between 128 and 255, but should rather use the
827 // QKeyEvent::text().
828 //
829 if (keysym < 128 || (keysym < 256 && (!mapper || mapper->mibEnum()==4))) {
830 // upper-case key, if known
831 code = isprint((int)keysym) ? toupper((int)keysym) : 0;
832 } else if (keysym >= FcitxKey_F1 && keysym <= FcitxKey_F35) {
833 // function keys
834 code = Qt::Key_F1 + ((int)keysym - FcitxKey_F1);
835 } else if (keysym >= FcitxKey_KP_Space && keysym <= FcitxKey_KP_9) {
836 if (keysym >= FcitxKey_KP_0) {
837 // numeric keypad keys
838 code = Qt::Key_0 + ((int)keysym - FcitxKey_KP_0);
839 } else {
840 code = translateKeySym(keysym);
841 }
842 modifiers |= Qt::KeypadModifier;
843 } else if (text.length() == 1 && text.unicode()->unicode() > 0x1f && text.unicode()->unicode() != 0x7f && !(keysym >= FcitxKey_dead_grave && keysym <= FcitxKey_dead_horn)) {
844 code = text.unicode()->toUpper().unicode();
845 } else {
846 // any other keys
847 code = translateKeySym(keysym);
848
849 if (code == Qt::Key_Tab && (modifiers & Qt::ShiftModifier)) {
850 // map shift+tab to shift+backtab, QShortcutMap knows about it
851 // and will handle it.
852 code = Qt::Key_Backtab;
853 text = QString();
854 }
855 }
856
857 return text;
858 }
859
860 bool symToKeyQt(int sym, unsigned int state, int& qtcode, Qt::KeyboardModifiers& mod)
861 {
862 QByteArray chars;
863 int count = 0;
864
865 translateKeySym(sym, state, qtcode, mod, chars, count);
866
867 return qtcode >= 0;
868 }
869
870 bool keyQtToSym(int qtcode, Qt::KeyboardModifiers mod, int& sym, unsigned int& state)
871 {
872 qEventToSym(qtcode, QString(), mod, sym, state);
873
874 return sym >= 0;
875 }
0 /***************************************************************************
1 * Copyright (C) 2012~2012 by CSSlayer *
2 * *
3 * This program is free software; you can redistribute it and/or modify *
4 * it under the terms of the GNU General Public License as published by *
5 * the Free Software Foundation; either version 2 of the License, or *
6 * (at your option) any later version. *
7 * *
8 * This program is distributed in the hope that it will be useful, *
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
11 * GNU General Public License for more details. *
12 * *
13 * You should have received a copy of the GNU General Public License *
14 * along with this program; if not, write to the *
15 * Free Software Foundation, Inc., *
16 * 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. *
17 ***************************************************************************/
18
19 #ifndef QTKEYTRANS_H
20 #define QTKEYTRANS_H
21 #include <qnamespace.h>
22
23 bool keyQtToSym(int qtcode, Qt::KeyboardModifiers mod, int& sym, unsigned int& state);
24
25 bool symToKeyQt(int sym, unsigned int state, int& qtcode, Qt::KeyboardModifiers& mod);
26
27 #endif
0
1 int unicodeHasKey[] =
2 { 300,
3 301,
4 372,
5 373,
6 374,
7 375,
8 399,
9 415,
10 416,
11 417,
12 431,
13 432,
14 437,
15 438,
16 465,
17 466,
18 486,
19 487,
20 601,
21 629,
22 1170,
23 1171,
24 1174,
25 1175,
26 1178,
27 1179,
28 1180,
29 1181,
30 1186,
31 1187,
32 1198,
33 1199,
34 1200,
35 1201,
36 1202,
37 1203,
38 1206,
39 1207,
40 1208,
41 1209,
42 1210,
43 1211,
44 1240,
45 1241,
46 1250,
47 1251,
48 1256,
49 1257,
50 1262,
51 1263,
52 1329,
53 1330,
54 1331,
55 1332,
56 1333,
57 1334,
58 1335,
59 1336,
60 1337,
61 1338,
62 1339,
63 1340,
64 1341,
65 1342,
66 1343,
67 1344,
68 1345,
69 1346,
70 1347,
71 1348,
72 1349,
73 1350,
74 1351,
75 1352,
76 1353,
77 1354,
78 1355,
79 1356,
80 1357,
81 1358,
82 1359,
83 1360,
84 1361,
85 1362,
86 1363,
87 1364,
88 1365,
89 1366,
90 1370,
91 1371,
92 1371,
93 1372,
94 1372,
95 1373,
96 1373,
97 1374,
98 1374,
99 1377,
100 1378,
101 1379,
102 1380,
103 1381,
104 1382,
105 1383,
106 1384,
107 1385,
108 1386,
109 1387,
110 1388,
111 1389,
112 1390,
113 1391,
114 1392,
115 1393,
116 1394,
117 1395,
118 1396,
119 1397,
120 1398,
121 1399,
122 1400,
123 1401,
124 1402,
125 1403,
126 1404,
127 1405,
128 1406,
129 1407,
130 1408,
131 1409,
132 1410,
133 1411,
134 1412,
135 1413,
136 1414,
137 1415,
138 1417,
139 1417,
140 1418,
141 1418,
142 1619,
143 1620,
144 1621,
145 1632,
146 1633,
147 1634,
148 1635,
149 1636,
150 1637,
151 1638,
152 1639,
153 1640,
154 1641,
155 1642,
156 1648,
157 1657,
158 1662,
159 1670,
160 1672,
161 1681,
162 1688,
163 1700,
164 1705,
165 1711,
166 1722,
167 1726,
168 1729,
169 1740,
170 1740,
171 1746,
172 1748,
173 1776,
174 1777,
175 1778,
176 1779,
177 1780,
178 1781,
179 1782,
180 1783,
181 1784,
182 1785,
183 3458,
184 3459,
185 3461,
186 3462,
187 3463,
188 3464,
189 3465,
190 3466,
191 3467,
192 3468,
193 3469,
194 3470,
195 3471,
196 3472,
197 3473,
198 3474,
199 3475,
200 3476,
201 3477,
202 3478,
203 3482,
204 3483,
205 3484,
206 3485,
207 3486,
208 3487,
209 3488,
210 3489,
211 3490,
212 3491,
213 3492,
214 3493,
215 3494,
216 3495,
217 3496,
218 3497,
219 3498,
220 3499,
221 3500,
222 3501,
223 3502,
224 3503,
225 3504,
226 3505,
227 3507,
228 3508,
229 3509,
230 3510,
231 3511,
232 3512,
233 3513,
234 3514,
235 3515,
236 3517,
237 3520,
238 3521,
239 3522,
240 3523,
241 3524,
242 3525,
243 3526,
244 3530,
245 3535,
246 3536,
247 3537,
248 3538,
249 3539,
250 3540,
251 3542,
252 3544,
253 3545,
254 3546,
255 3547,
256 3548,
257 3549,
258 3550,
259 3551,
260 3570,
261 3571,
262 3572,
263 4304,
264 4305,
265 4306,
266 4307,
267 4308,
268 4309,
269 4310,
270 4311,
271 4312,
272 4313,
273 4314,
274 4315,
275 4316,
276 4317,
277 4318,
278 4319,
279 4320,
280 4321,
281 4322,
282 4323,
283 4324,
284 4325,
285 4326,
286 4327,
287 4328,
288 4329,
289 4330,
290 4331,
291 4332,
292 4333,
293 4334,
294 4335,
295 4336,
296 4337,
297 4338,
298 4339,
299 4340,
300 4341,
301 4342,
302 7682,
303 7683,
304 7690,
305 7691,
306 7710,
307 7711,
308 7734,
309 7735,
310 7744,
311 7745,
312 7766,
313 7767,
314 7776,
315 7777,
316 7786,
317 7787,
318 7808,
319 7809,
320 7810,
321 7811,
322 7812,
323 7813,
324 7818,
325 7819,
326 7840,
327 7841,
328 7842,
329 7843,
330 7844,
331 7845,
332 7846,
333 7847,
334 7848,
335 7849,
336 7850,
337 7851,
338 7852,
339 7853,
340 7854,
341 7855,
342 7856,
343 7857,
344 7858,
345 7859,
346 7860,
347 7861,
348 7862,
349 7863,
350 7864,
351 7865,
352 7866,
353 7867,
354 7868,
355 7869,
356 7870,
357 7871,
358 7872,
359 7873,
360 7874,
361 7875,
362 7876,
363 7877,
364 7878,
365 7879,
366 7880,
367 7881,
368 7882,
369 7883,
370 7884,
371 7885,
372 7886,
373 7887,
374 7888,
375 7889,
376 7890,
377 7891,
378 7892,
379 7893,
380 7894,
381 7895,
382 7896,
383 7897,
384 7898,
385 7899,
386 7900,
387 7901,
388 7902,
389 7903,
390 7904,
391 7905,
392 7906,
393 7907,
394 7908,
395 7909,
396 7910,
397 7911,
398 7912,
399 7913,
400 7914,
401 7915,
402 7916,
403 7917,
404 7918,
405 7919,
406 7920,
407 7921,
408 7922,
409 7923,
410 7924,
411 7925,
412 7926,
413 7927,
414 7928,
415 7929,
416 8304,
417 8308,
418 8309,
419 8310,
420 8311,
421 8312,
422 8313,
423 8320,
424 8321,
425 8322,
426 8323,
427 8324,
428 8325,
429 8326,
430 8327,
431 8328,
432 8329,
433 8352,
434 8353,
435 8354,
436 8355,
437 8356,
438 8357,
439 8358,
440 8359,
441 8360,
442 8361,
443 8362,
444 8363,
445 8706,
446 8709,
447 8712,
448 8713,
449 8715,
450 8730,
451 8731,
452 8732,
453 8748,
454 8749,
455 8757,
456 8775,
457 8776,
458 8802,
459 8803,
460 10240,
461 10241,
462 10242,
463 10243,
464 10244,
465 10245,
466 10246,
467 10247,
468 10248,
469 10249,
470 10250,
471 10251,
472 10252,
473 10253,
474 10254,
475 10255,
476 10256,
477 10257,
478 10258,
479 10259,
480 10260,
481 10261,
482 10262,
483 10263,
484 10264,
485 10265,
486 10266,
487 10267,
488 10268,
489 10269,
490 10270,
491 10271,
492 10272,
493 10273,
494 10274,
495 10275,
496 10276,
497 10277,
498 10278,
499 10279,
500 10280,
501 10281,
502 10282,
503 10283,
504 10284,
505 10285,
506 10286,
507 10287,
508 10288,
509 10289,
510 10290,
511 10291,
512 10292,
513 10293,
514 10294,
515 10295,
516 10296,
517 10297,
518 10298,
519 10299,
520 10300,
521 10301,
522 10302,
523 10303,
524 10304,
525 10305,
526 10306,
527 10307,
528 10308,
529 10309,
530 10310,
531 10311,
532 10312,
533 10313,
534 10314,
535 10315,
536 10316,
537 10317,
538 10318,
539 10319,
540 10320,
541 10321,
542 10322,
543 10323,
544 10324,
545 10325,
546 10326,
547 10327,
548 10328,
549 10329,
550 10330,
551 10331,
552 10332,
553 10333,
554 10334,
555 10335,
556 10336,
557 10337,
558 10338,
559 10339,
560 10340,
561 10341,
562 10342,
563 10343,
564 10344,
565 10345,
566 10346,
567 10347,
568 10348,
569 10349,
570 10350,
571 10351,
572 10352,
573 10353,
574 10354,
575 10355,
576 10356,
577 10357,
578 10358,
579 10359,
580 10360,
581 10361,
582 10362,
583 10363,
584 10364,
585 10365,
586 10366,
587 10367,
588 10368,
589 10369,
590 10370,
591 10371,
592 10372,
593 10373,
594 10374,
595 10375,
596 10376,
597 10377,
598 10378,
599 10379,
600 10380,
601 10381,
602 10382,
603 10383,
604 10384,
605 10385,
606 10386,
607 10387,
608 10388,
609 10389,
610 10390,
611 10391,
612 10392,
613 10393,
614 10394,
615 10395,
616 10396,
617 10397,
618 10398,
619 10399,
620 10400,
621 10401,
622 10402,
623 10403,
624 10404,
625 10405,
626 10406,
627 10407,
628 10408,
629 10409,
630 10410,
631 10411,
632 10412,
633 10413,
634 10414,
635 10415,
636 10416,
637 10417,
638 10418,
639 10419,
640 10420,
641 10421,
642 10422,
643 10423,
644 10424,
645 10425,
646 10426,
647 10427,
648 10428,
649 10429,
650 10430,
651 10431,
652 10432,
653 10433,
654 10434,
655 10435,
656 10436,
657 10437,
658 10438,
659 10439,
660 10440,
661 10441,
662 10442,
663 10443,
664 10444,
665 10445,
666 10446,
667 10447,
668 10448,
669 10449,
670 10450,
671 10451,
672 10452,
673 10453,
674 10454,
675 10455,
676 10456,
677 10457,
678 10458,
679 10459,
680 10460,
681 10461,
682 10462,
683 10463,
684 10464,
685 10465,
686 10466,
687 10467,
688 10468,
689 10469,
690 10470,
691 10471,
692 10472,
693 10473,
694 10474,
695 10475,
696 10476,
697 10477,
698 10478,
699 10479,
700 10480,
701 10481,
702 10482,
703 10483,
704 10484,
705 10485,
706 10486,
707 10487,
708 10488,
709 10489,
710 10490,
711 10491,
712 10492,
713 10493,
714 10494,
715 10495
716 };
717
718 struct Unicode2Key {
719 int unicode;
720 int key;
721
722 bool operator < (const int& u) const {
723 return unicode < u;
724 }
725 };
726
727 bool operator < (const int& u, const Unicode2Key& key) {
728 return u < key.unicode;
729 }
730
731 Unicode2Key unicodeKeyMap[] = {
732 {32, 32},
733 {33, 33},
734 {34, 34},
735 {35, 35},
736 {36, 36},
737 {37, 37},
738 {38, 38},
739 {39, 39},
740 {39, 39},
741 {40, 40},
742 {41, 41},
743 {42, 42},
744 {43, 43},
745 {44, 44},
746 {45, 45},
747 {46, 46},
748 {47, 47},
749 {48, 48},
750 {49, 49},
751 {50, 50},
752 {51, 51},
753 {52, 52},
754 {53, 53},
755 {54, 54},
756 {55, 55},
757 {56, 56},
758 {57, 57},
759 {58, 58},
760 {59, 59},
761 {60, 60},
762 {61, 61},
763 {62, 62},
764 {63, 63},
765 {64, 64},
766 {65, 65},
767 {66, 66},
768 {67, 67},
769 {68, 68},
770 {69, 69},
771 {70, 70},
772 {71, 71},
773 {72, 72},
774 {73, 73},
775 {74, 74},
776 {75, 75},
777 {76, 76},
778 {77, 77},
779 {78, 78},
780 {79, 79},
781 {80, 80},
782 {81, 81},
783 {82, 82},
784 {83, 83},
785 {84, 84},
786 {85, 85},
787 {86, 86},
788 {87, 87},
789 {88, 88},
790 {89, 89},
791 {90, 90},
792 {91, 91},
793 {92, 92},
794 {93, 93},
795 {94, 94},
796 {95, 95},
797 {96, 96},
798 {96, 96},
799 {97, 97},
800 {98, 98},
801 {99, 99},
802 {100, 100},
803 {101, 101},
804 {102, 102},
805 {103, 103},
806 {104, 104},
807 {105, 105},
808 {106, 106},
809 {107, 107},
810 {108, 108},
811 {109, 109},
812 {110, 110},
813 {111, 111},
814 {112, 112},
815 {113, 113},
816 {114, 114},
817 {115, 115},
818 {116, 116},
819 {117, 117},
820 {118, 118},
821 {119, 119},
822 {120, 120},
823 {121, 121},
824 {122, 122},
825 {123, 123},
826 {124, 124},
827 {125, 125},
828 {126, 126},
829 {160, 160},
830 {161, 161},
831 {162, 162},
832 {163, 163},
833 {164, 164},
834 {165, 165},
835 {166, 166},
836 {167, 167},
837 {168, 168},
838 {169, 169},
839 {170, 170},
840 {171, 171},
841 {172, 172},
842 {173, 173},
843 {174, 174},
844 {175, 175},
845 {176, 176},
846 {177, 177},
847 {178, 178},
848 {179, 179},
849 {180, 180},
850 {181, 181},
851 {182, 182},
852 {183, 183},
853 {184, 184},
854 {185, 185},
855 {186, 186},
856 {187, 187},
857 {188, 188},
858 {189, 189},
859 {190, 190},
860 {191, 191},
861 {192, 192},
862 {193, 193},
863 {194, 194},
864 {195, 195},
865 {196, 196},
866 {197, 197},
867 {198, 198},
868 {199, 199},
869 {200, 200},
870 {201, 201},
871 {202, 202},
872 {203, 203},
873 {204, 204},
874 {205, 205},
875 {206, 206},
876 {207, 207},
877 {208, 208},
878 {208, 208},
879 {209, 209},
880 {210, 210},
881 {211, 211},
882 {212, 212},
883 {213, 213},
884 {214, 214},
885 {215, 215},
886 {216, 216},
887 {216, 216},
888 {217, 217},
889 {218, 218},
890 {219, 219},
891 {220, 220},
892 {221, 221},
893 {222, 222},
894 {222, 222},
895 {223, 223},
896 {224, 224},
897 {225, 225},
898 {226, 226},
899 {227, 227},
900 {228, 228},
901 {229, 229},
902 {230, 230},
903 {231, 231},
904 {232, 232},
905 {233, 233},
906 {234, 234},
907 {235, 235},
908 {236, 236},
909 {237, 237},
910 {238, 238},
911 {239, 239},
912 {240, 240},
913 {241, 241},
914 {242, 242},
915 {243, 243},
916 {244, 244},
917 {245, 245},
918 {246, 246},
919 {247, 247},
920 {248, 248},
921 {248, 248},
922 {249, 249},
923 {250, 250},
924 {251, 251},
925 {252, 252},
926 {253, 253},
927 {254, 254},
928 {255, 255},
929 /*
930 {0, 1709},
931 {0, 1725},
932 {0, 2225},
933 {0, 2226},
934 {0, 2227},
935 {0, 2228},
936 {0, 2229},
937 {0, 2230},
938 {0, 2231},
939 {0, 2527},
940 {0, 2732},
941 {0, 2749},
942 {0, 2751},
943 {0, 2763},
944 {0, 2778},
945 {0, 2815}, */
946 {256, 960},
947 {257, 992},
948 {258, 451},
949 {259, 483},
950 {260, 417},
951 {261, 433},
952 {262, 454},
953 {263, 486},
954 {264, 710},
955 {265, 742},
956 {266, 709},
957 {267, 741},
958 {268, 456},
959 {269, 488},
960 {270, 463},
961 {271, 495},
962 {272, 464},
963 {273, 496},
964 {274, 938},
965 {275, 954},
966 {278, 972},
967 {279, 1004},
968 {280, 458},
969 {281, 490},
970 {282, 460},
971 {283, 492},
972 {284, 728},
973 {285, 760},
974 {286, 683},
975 {287, 699},
976 {288, 725},
977 {289, 757},
978 {290, 939},
979 {291, 955},
980 {292, 678},
981 {293, 694},
982 {294, 673},
983 {295, 689},
984 {296, 933},
985 {297, 949},
986 {298, 975},
987 {299, 1007},
988 {302, 967},
989 {303, 999},
990 {304, 681},
991 {305, 697},
992 {308, 684},
993 {309, 700},
994 {310, 979},
995 {311, 1011},
996 {312, 930},
997 {312, 930},
998 {313, 453},
999 {314, 485},
1000 {315, 934},
1001 {316, 950},
1002 {317, 421},
1003 {318, 437},
1004 {321, 419},
1005 {322, 435},
1006 {323, 465},
1007 {324, 497},
1008 {325, 977},
1009 {326, 1009},
1010 {327, 466},
1011 {328, 498},
1012 {330, 957},
1013 {331, 959},
1014 {332, 978},
1015 {333, 1010},
1016 {336, 469},
1017 {337, 501},
1018 {340, 448},
1019 {341, 480},
1020 {342, 931},
1021 {343, 947},
1022 {344, 472},
1023 {345, 504},
1024 {346, 422},
1025 {347, 438},
1026 {348, 734},
1027 {349, 766},
1028 {350, 426},
1029 {351, 442},
1030 {352, 425},
1031 {353, 441},
1032 {354, 478},
1033 {355, 510},
1034 {356, 427},
1035 {357, 443},
1036 {358, 940},
1037 {359, 956},
1038 {360, 989},
1039 {361, 1021},
1040 {362, 990},
1041 {363, 1022},
1042 {364, 733},
1043 {365, 765},
1044 {366, 473},
1045 {367, 505},
1046 {368, 475},
1047 {369, 507},
1048 {370, 985},
1049 {371, 1017},
1050 {377, 428},
1051 {378, 444},
1052 {379, 431},
1053 {380, 447},
1054 {381, 430},
1055 {382, 446},
1056 {402, 2294},
1057 {711, 439},
1058 {728, 418},
1059 {729, 511},
1060 {731, 434},
1061 {733, 445},
1062 {901, 1966},
1063 {902, 1953},
1064 {904, 1954},
1065 {905, 1955},
1066 {906, 1956},
1067 {908, 1959},
1068 {910, 1960},
1069 {911, 1963},
1070 {912, 1974},
1071 {913, 1985},
1072 {914, 1986},
1073 {915, 1987},
1074 {916, 1988},
1075 {917, 1989},
1076 {918, 1990},
1077 {919, 1991},
1078 {920, 1992},
1079 {921, 1993},
1080 {922, 1994},
1081 {923, 1995},
1082 {923, 1995},
1083 {924, 1996},
1084 {925, 1997},
1085 {926, 1998},
1086 {927, 1999},
1087 {928, 2000},
1088 {929, 2001},
1089 {931, 2002},
1090 {932, 2004},
1091 {933, 2005},
1092 {934, 2006},
1093 {935, 2007},
1094 {936, 2008},
1095 {937, 2009},
1096 {938, 1957},
1097 {938, 1957},
1098 {939, 1961},
1099 {940, 1969},
1100 {941, 1970},
1101 {942, 1971},
1102 {943, 1972},
1103 {944, 1978},
1104 {945, 2017},
1105 {946, 2018},
1106 {947, 2019},
1107 {948, 2020},
1108 {949, 2021},
1109 {950, 2022},
1110 {951, 2023},
1111 {952, 2024},
1112 {953, 2025},
1113 {954, 2026},
1114 {955, 2027},
1115 {955, 2027},
1116 {956, 2028},
1117 {957, 2029},
1118 {958, 2030},
1119 {959, 2031},
1120 {960, 2032},
1121 {961, 2033},
1122 {962, 2035},
1123 {963, 2034},
1124 {964, 2036},
1125 {965, 2037},
1126 {966, 2038},
1127 {967, 2039},
1128 {968, 2040},
1129 {969, 2041},
1130 {970, 1973},
1131 {971, 1977},
1132 {972, 1975},
1133 {973, 1976},
1134 {974, 1979},
1135 {1025, 1715},
1136 {1026, 1713},
1137 {1027, 1714},
1138 {1028, 1716},
1139 {1028, 1716},
1140 {1029, 1717},
1141 {1030, 1718},
1142 {1030, 1718},
1143 {1031, 1719},
1144 {1031, 1719},
1145 {1032, 1720},
1146 {1032, 1720},
1147 {1033, 1721},
1148 {1033, 1721},
1149 {1034, 1722},
1150 {1034, 1722},
1151 {1035, 1723},
1152 {1036, 1724},
1153 {1038, 1726},
1154 {1039, 1727},
1155 {1039, 1727},
1156 {1040, 1761},
1157 {1041, 1762},
1158 {1042, 1783},
1159 {1043, 1767},
1160 {1044, 1764},
1161 {1045, 1765},
1162 {1046, 1782},
1163 {1047, 1786},
1164 {1048, 1769},
1165 {1049, 1770},
1166 {1050, 1771},
1167 {1051, 1772},
1168 {1052, 1773},
1169 {1053, 1774},
1170 {1054, 1775},
1171 {1055, 1776},
1172 {1056, 1778},
1173 {1057, 1779},
1174 {1058, 1780},
1175 {1059, 1781},
1176 {1060, 1766},
1177 {1061, 1768},
1178 {1062, 1763},
1179 {1063, 1790},
1180 {1064, 1787},
1181 {1065, 1789},
1182 {1066, 1791},
1183 {1067, 1785},
1184 {1068, 1784},
1185 {1069, 1788},
1186 {1070, 1760},
1187 {1071, 1777},
1188 {1072, 1729},
1189 {1073, 1730},
1190 {1074, 1751},
1191 {1075, 1735},
1192 {1076, 1732},
1193 {1077, 1733},
1194 {1078, 1750},
1195 {1079, 1754},
1196 {1080, 1737},
1197 {1081, 1738},
1198 {1082, 1739},
1199 {1083, 1740},
1200 {1084, 1741},
1201 {1085, 1742},
1202 {1086, 1743},
1203 {1087, 1744},
1204 {1088, 1746},
1205 {1089, 1747},
1206 {1090, 1748},
1207 {1091, 1749},
1208 {1092, 1734},
1209 {1093, 1736},
1210 {1094, 1731},
1211 {1095, 1758},
1212 {1096, 1755},
1213 {1097, 1757},
1214 {1098, 1759},
1215 {1099, 1753},
1216 {1100, 1752},
1217 {1101, 1756},
1218 {1102, 1728},
1219 {1103, 1745},
1220 {1105, 1699},
1221 {1106, 1697},
1222 {1107, 1698},
1223 {1108, 1700},
1224 {1108, 1700},
1225 {1109, 1701},
1226 {1110, 1702},
1227 {1110, 1702},
1228 {1111, 1703},
1229 {1111, 1703},
1230 {1112, 1704},
1231 {1112, 1704},
1232 {1113, 1705},
1233 {1113, 1705},
1234 {1114, 1706},
1235 {1114, 1706},
1236 {1115, 1707},
1237 {1116, 1708},
1238 {1118, 1710},
1239 {1119, 1711},
1240 {1119, 1711},
1241 {1488, 3296},
1242 {1489, 3297},
1243 {1489, 3297},
1244 {1490, 3298},
1245 {1490, 3298},
1246 {1491, 3299},
1247 {1491, 3299},
1248 {1492, 3300},
1249 {1493, 3301},
1250 {1494, 3302},
1251 {1494, 3302},
1252 {1495, 3303},
1253 {1495, 3303},
1254 {1496, 3304},
1255 {1496, 3304},
1256 {1497, 3305},
1257 {1498, 3306},
1258 {1499, 3307},
1259 {1500, 3308},
1260 {1501, 3309},
1261 {1502, 3310},
1262 {1503, 3311},
1263 {1504, 3312},
1264 {1505, 3313},
1265 {1505, 3313},
1266 {1506, 3314},
1267 {1507, 3315},
1268 {1508, 3316},
1269 {1509, 3317},
1270 {1509, 3317},
1271 {1510, 3318},
1272 {1510, 3318},
1273 {1511, 3319},
1274 {1511, 3319},
1275 {1512, 3320},
1276 {1513, 3321},
1277 {1514, 3322},
1278 {1514, 3322},
1279 {1548, 1452},
1280 {1563, 1467},
1281 {1567, 1471},
1282 {1569, 1473},
1283 {1570, 1474},
1284 {1571, 1475},
1285 {1572, 1476},
1286 {1573, 1477},
1287 {1574, 1478},
1288 {1575, 1479},
1289 {1576, 1480},
1290 {1577, 1481},
1291 {1578, 1482},
1292 {1579, 1483},
1293 {1580, 1484},
1294 {1581, 1485},
1295 {1582, 1486},
1296 {1583, 1487},
1297 {1584, 1488},
1298 {1585, 1489},
1299 {1586, 1490},
1300 {1587, 1491},
1301 {1588, 1492},
1302 {1589, 1493},
1303 {1590, 1494},
1304 {1591, 1495},
1305 {1592, 1496},
1306 {1593, 1497},
1307 {1594, 1498},
1308 {1600, 1504},
1309 {1601, 1505},
1310 {1602, 1506},
1311 {1603, 1507},
1312 {1604, 1508},
1313 {1605, 1509},
1314 {1606, 1510},
1315 {1607, 1511},
1316 {1607, 1511},
1317 {1608, 1512},
1318 {1609, 1513},
1319 {1610, 1514},
1320 {1611, 1515},
1321 {1612, 1516},
1322 {1613, 1517},
1323 {1614, 1518},
1324 {1615, 1519},
1325 {1616, 1520},
1326 {1617, 1521},
1327 {1618, 1522},
1328 {3585, 3489},
1329 {3586, 3490},
1330 {3587, 3491},
1331 {3588, 3492},
1332 {3589, 3493},
1333 {3590, 3494},
1334 {3591, 3495},
1335 {3592, 3496},
1336 {3593, 3497},
1337 {3594, 3498},
1338 {3595, 3499},
1339 {3596, 3500},
1340 {3597, 3501},
1341 {3598, 3502},
1342 {3599, 3503},
1343 {3600, 3504},
1344 {3601, 3505},
1345 {3602, 3506},
1346 {3603, 3507},
1347 {3604, 3508},
1348 {3605, 3509},
1349 {3606, 3510},
1350 {3607, 3511},
1351 {3608, 3512},
1352 {3609, 3513},
1353 {3610, 3514},
1354 {3611, 3515},
1355 {3612, 3516},
1356 {3613, 3517},
1357 {3614, 3518},
1358 {3615, 3519},
1359 {3616, 3520},
1360 {3617, 3521},
1361 {3618, 3522},
1362 {3619, 3523},
1363 {3620, 3524},
1364 {3621, 3525},
1365 {3622, 3526},
1366 {3623, 3527},
1367 {3624, 3528},
1368 {3625, 3529},
1369 {3626, 3530},
1370 {3627, 3531},
1371 {3628, 3532},
1372 {3629, 3533},
1373 {3630, 3534},
1374 {3631, 3535},
1375 {3632, 3536},
1376 {3633, 3537},
1377 {3634, 3538},
1378 {3635, 3539},
1379 {3636, 3540},
1380 {3637, 3541},
1381 {3638, 3542},
1382 {3639, 3543},
1383 {3640, 3544},
1384 {3641, 3545},
1385 {3642, 3546},
1386 {3647, 3551},
1387 {3648, 3552},
1388 {3649, 3553},
1389 {3650, 3554},
1390 {3651, 3555},
1391 {3652, 3556},
1392 {3653, 3557},
1393 {3654, 3558},
1394 {3655, 3559},
1395 {3656, 3560},
1396 {3657, 3561},
1397 {3658, 3562},
1398 {3659, 3563},
1399 {3660, 3564},
1400 {3661, 3565},
1401 {3664, 3568},
1402 {3665, 3569},
1403 {3666, 3570},
1404 {3667, 3571},
1405 {3668, 3572},
1406 {3669, 3573},
1407 {3670, 3574},
1408 {3671, 3575},
1409 {3672, 3576},
1410 {3673, 3577},
1411 {4520, 3796},
1412 {4521, 3797},
1413 {4522, 3798},
1414 {4523, 3799},
1415 {4524, 3800},
1416 {4525, 3801},
1417 {4526, 3802},
1418 {4527, 3803},
1419 {4528, 3804},
1420 {4529, 3805},
1421 {4530, 3806},
1422 {4531, 3807},
1423 {4532, 3808},
1424 {4533, 3809},
1425 {4534, 3810},
1426 {4535, 3811},
1427 {4536, 3812},
1428 {4537, 3813},
1429 {4538, 3814},
1430 {4539, 3815},
1431 {4540, 3816},
1432 {4541, 3817},
1433 {4542, 3818},
1434 {4543, 3819},
1435 {4544, 3820},
1436 {4545, 3821},
1437 {4546, 3822},
1438 {4587, 3832},
1439 {4592, 3833},
1440 {4601, 3834},
1441 {8194, 2722},
1442 {8195, 2721},
1443 {8196, 2723},
1444 {8197, 2724},
1445 {8199, 2725},
1446 {8200, 2726},
1447 {8201, 2727},
1448 {8202, 2728},
1449 {8210, 2747},
1450 {8211, 2730},
1451 {8212, 2729},
1452 {8213, 1967},
1453 {8215, 3295},
1454 {8216, 2768},
1455 {8217, 2769},
1456 {8218, 2813},
1457 {8220, 2770},
1458 {8221, 2771},
1459 {8222, 2814},
1460 {8224, 2801},
1461 {8225, 2802},
1462 {8226, 2790},
1463 {8229, 2735},
1464 {8230, 2734},
1465 {8242, 2774},
1466 {8243, 2775},
1467 {8248, 2812},
1468 {8254, 1150},
1469 {8361, 3839},
1470 {8364, 8364},
1471 {8453, 2744},
1472 {8470, 1712},
1473 {8471, 2811},
1474 {8478, 2772},
1475 {8482, 2761},
1476 {8531, 2736},
1477 {8532, 2737},
1478 {8533, 2738},
1479 {8534, 2739},
1480 {8535, 2740},
1481 {8536, 2741},
1482 {8537, 2742},
1483 {8538, 2743},
1484 {8539, 2755},
1485 {8540, 2756},
1486 {8541, 2757},
1487 {8542, 2758},
1488 {8592, 2299},
1489 {8593, 2300},
1490 {8594, 2301},
1491 {8595, 2302},
1492 {8658, 2254},
1493 {8660, 2253},
1494 {8706, 2287},
1495 {8711, 2245},
1496 {8728, 3018},
1497 {8730, 2262},
1498 {8733, 2241},
1499 {8734, 2242},
1500 {8743, 2270},
1501 {8744, 2271},
1502 {8745, 2268},
1503 {8746, 2269},
1504 {8747, 2239},
1505 {8756, 2240},
1506 {8764, 2248},
1507 {8771, 2249},
1508 {8800, 2237},
1509 {8801, 2255},
1510 {8804, 2236},
1511 {8805, 2238},
1512 {8834, 2266},
1513 {8835, 2267},
1514 {8866, 3036},
1515 {8867, 3068},
1516 {8868, 3022},
1517 {8869, 3010},
1518 {8968, 3027},
1519 {8970, 3012},
1520 {8981, 2810},
1521 {8992, 2212},
1522 {8993, 2213},
1523 {9001, 2748},
1524 {9002, 2750},
1525 {9109, 3020},
1526 {9115, 2219},
1527 {9117, 2220},
1528 {9118, 2221},
1529 {9120, 2222},
1530 {9121, 2215},
1531 {9123, 2216},
1532 {9124, 2217},
1533 {9126, 2218},
1534 {9128, 2223},
1535 {9132, 2224},
1536 {9143, 2209},
1537 {9146, 2543},
1538 {9147, 2544},
1539 {9148, 2546},
1540 {9149, 2547},
1541 {9225, 2530},
1542 {9226, 2533},
1543 {9227, 2537},
1544 {9228, 2531},
1545 {9229, 2532},
1546 {9252, 2536},
1547 {9472, 2211},
1548 {9474, 2214},
1549 {9484, 2210},
1550 {9488, 2539},
1551 {9492, 2541},
1552 {9496, 2538},
1553 {9500, 2548},
1554 {9508, 2549},
1555 {9516, 2551},
1556 {9524, 2550},
1557 {9532, 2542},
1558 {9618, 2529},
1559 {9642, 2791},
1560 {9643, 2785},
1561 {9644, 2779},
1562 {9645, 2786},
1563 {9646, 2783},
1564 {9647, 2767},
1565 {9650, 2792},
1566 {9651, 2787},
1567 {9654, 2781},
1568 {9655, 2765},
1569 {9660, 2793},
1570 {9661, 2788},
1571 {9664, 2780},
1572 {9665, 2764},
1573 {9670, 2528},
1574 {9675, 2766},
1575 {9679, 2782},
1576 {9702, 2784},
1577 {9734, 2789},
1578 {9742, 2809},
1579 {9747, 2762},
1580 {9756, 2794},
1581 {9758, 2795},
1582 {9792, 2808},
1583 {9794, 2807},
1584 {9827, 2796},
1585 {9829, 2798},
1586 {9830, 2797},
1587 {9837, 2806},
1588 {9839, 2805},
1589 {10003, 2803},
1590 {10007, 2804},
1591 {10013, 2777},
1592 {10016, 2800},
1593 {12289, 1188},
1594 {12290, 1185},
1595 {12300, 1186},
1596 {12301, 1187},
1597 {12443, 1246},
1598 {12444, 1247},
1599 {12449, 1191},
1600 {12450, 1201},
1601 {12451, 1192},
1602 {12452, 1202},
1603 {12453, 1193},
1604 {12454, 1203},
1605 {12455, 1194},
1606 {12456, 1204},
1607 {12457, 1195},
1608 {12458, 1205},
1609 {12459, 1206},
1610 {12461, 1207},
1611 {12463, 1208},
1612 {12465, 1209},
1613 {12467, 1210},
1614 {12469, 1211},
1615 {12471, 1212},
1616 {12473, 1213},
1617 {12475, 1214},
1618 {12477, 1215},
1619 {12479, 1216},
1620 {12481, 1217},
1621 {12481, 1217},
1622 {12483, 1199},
1623 {12483, 1199},
1624 {12484, 1218},
1625 {12484, 1218},
1626 {12486, 1219},
1627 {12488, 1220},
1628 {12490, 1221},
1629 {12491, 1222},
1630 {12492, 1223},
1631 {12493, 1224},
1632 {12494, 1225},
1633 {12495, 1226},
1634 {12498, 1227},
1635 {12501, 1228},
1636 {12501, 1228},
1637 {12504, 1229},
1638 {12507, 1230},
1639 {12510, 1231},
1640 {12511, 1232},
1641 {12512, 1233},
1642 {12513, 1234},
1643 {12514, 1235},
1644 {12515, 1196},
1645 {12516, 1236},
1646 {12517, 1197},
1647 {12518, 1237},
1648 {12519, 1198},
1649 {12520, 1238},
1650 {12521, 1239},
1651 {12522, 1240},
1652 {12523, 1241},
1653 {12524, 1242},
1654 {12525, 1243},
1655 {12527, 1244},
1656 {12530, 1190},
1657 {12531, 1245},
1658 {12539, 1189},
1659 {12539, 1189},
1660 {12540, 1200},
1661 {12593, 3745},
1662 {12594, 3746},
1663 {12595, 3747},
1664 {12596, 3748},
1665 {12597, 3749},
1666 {12598, 3750},
1667 {12599, 3751},
1668 {12600, 3752},
1669 {12601, 3753},
1670 {12602, 3754},
1671 {12603, 3755},
1672 {12604, 3756},
1673 {12605, 3757},
1674 {12606, 3758},
1675 {12607, 3759},
1676 {12608, 3760},
1677 {12609, 3761},
1678 {12610, 3762},
1679 {12611, 3763},
1680 {12612, 3764},
1681 {12613, 3765},
1682 {12614, 3766},
1683 {12615, 3767},
1684 {12616, 3768},
1685 {12617, 3769},
1686 {12618, 3770},
1687 {12619, 3771},
1688 {12620, 3772},
1689 {12621, 3773},
1690 {12622, 3774},
1691 {12623, 3775},
1692 {12624, 3776},
1693 {12625, 3777},
1694 {12626, 3778},
1695 {12627, 3779},
1696 {12628, 3780},
1697 {12629, 3781},
1698 {12630, 3782},
1699 {12631, 3783},
1700 {12632, 3784},
1701 {12633, 3785},
1702 {12634, 3786},
1703 {12635, 3787},
1704 {12636, 3788},
1705 {12637, 3789},
1706 {12638, 3790},
1707 {12639, 3791},
1708 {12640, 3792},
1709 {12641, 3793},
1710 {12642, 3794},
1711 {12643, 3795},
1712 {12653, 3823},
1713 {12657, 3824},
1714 {12664, 3825},
1715 {12671, 3826},
1716 {12673, 3827},
1717 {12676, 3828},
1718 {12678, 3829},
1719 {12685, 3830},
1720 {12686, 3831},
1721 {65533, 3550},
1722 };
1723
1724 struct QtCode2Key {
1725 int qtcode;
1726 int key;
1727
1728 bool operator < (const int& u) const {
1729 return qtcode < u;
1730 }
1731 };
1732
1733 bool operator < (const int& u, const QtCode2Key& key) {
1734 return u < key.qtcode;
1735 }
1736
1737 QtCode2Key keyPadQtCodeToKey[] =
1738 {
1739 {32, 65408},
1740 {42, 65450},
1741 {43, 65451},
1742 {44, 65452},
1743 {45, 65453},
1744 {46, 65454},
1745 {47, 65455},
1746 {48, 65456},
1747 {49, 65457},
1748 {50, 65458},
1749 {51, 65459},
1750 {52, 65460},
1751 {53, 65461},
1752 {54, 65462},
1753 {55, 65463},
1754 {56, 65464},
1755 {57, 65465},
1756 {61, 65469},
1757 {16777217, 65417},
1758 {16777221, 65421},
1759 {16777222, 65438},
1760 {16777223, 65439},
1761 {16777227, 65437},
1762 {16777232, 65429},
1763 {16777233, 65436},
1764 {16777234, 65430},
1765 {16777235, 65431},
1766 {16777236, 65432},
1767 {16777237, 65433},
1768 {16777238, 65434},
1769 {16777239, 65435},
1770 };
1771
1772 QtCode2Key qtCodeToKeyBackup[] = {
1773 {32, 32},
1774 {33, 33},
1775 {34, 34},
1776 {35, 35},
1777 {36, 36},
1778 {37, 37},
1779 {38, 38},
1780 {39, 39},
1781 {40, 40},
1782 {41, 41},
1783 {42, 42},
1784 {43, 43},
1785 {44, 44},
1786 {45, 45},
1787 {46, 46},
1788 {47, 47},
1789 {48, 48},
1790 {49, 49},
1791 {50, 50},
1792 {51, 51},
1793 {52, 52},
1794 {53, 53},
1795 {54, 54},
1796 {55, 55},
1797 {56, 56},
1798 {57, 57},
1799 {58, 58},
1800 {59, 59},
1801 {60, 60},
1802 {61, 61},
1803 {62, 62},
1804 {63, 63},
1805 {64, 64},
1806 {65, 65},
1807 {66, 66},
1808 {67, 67},
1809 {68, 68},
1810 {69, 69},
1811 {70, 70},
1812 {71, 71},
1813 {72, 72},
1814 {73, 73},
1815 {74, 74},
1816 {75, 75},
1817 {76, 76},
1818 {77, 77},
1819 {78, 78},
1820 {79, 79},
1821 {80, 80},
1822 {81, 81},
1823 {82, 82},
1824 {83, 83},
1825 {84, 84},
1826 {85, 85},
1827 {86, 86},
1828 {87, 87},
1829 {88, 88},
1830 {89, 89},
1831 {90, 90},
1832 {91, 91},
1833 {92, 92},
1834 {93, 93},
1835 {94, 94},
1836 {95, 95},
1837 {96, 96},
1838 {123, 123},
1839 {124, 124},
1840 {125, 125},
1841 {126, 126},
1842 {256, 960},
1843 {258, 451},
1844 {260, 417},
1845 {262, 454},
1846 {264, 710},
1847 {266, 709},
1848 {268, 456},
1849 {270, 463},
1850 {272, 464},
1851 {274, 938},
1852 {278, 972},
1853 {280, 458},
1854 {282, 460},
1855 {284, 728},
1856 {286, 683},
1857 {288, 725},
1858 {290, 939},
1859 {292, 678},
1860 {294, 673},
1861 {296, 933},
1862 {298, 975},
1863 {300, 16777516},
1864 {302, 967},
1865 {304, 681},
1866 {308, 684},
1867 {310, 979},
1868 {312, 930},
1869 {313, 453},
1870 {315, 934},
1871 {317, 421},
1872 {321, 419},
1873 {323, 465},
1874 {325, 977},
1875 {327, 466},
1876 {330, 957},
1877 {332, 978},
1878 {336, 469},
1879 {340, 448},
1880 {342, 931},
1881 {344, 472},
1882 {346, 422},
1883 {348, 734},
1884 {350, 426},
1885 {352, 425},
1886 {354, 478},
1887 {356, 427},
1888 {358, 940},
1889 {360, 989},
1890 {362, 990},
1891 {364, 733},
1892 {366, 473},
1893 {368, 475},
1894 {370, 985},
1895 {372, 16777588},
1896 {374, 16777590},
1897 {377, 428},
1898 {379, 431},
1899 {381, 430},
1900 {399, 16777615},
1901 {401, 2294},
1902 {415, 16777631},
1903 {416, 16777632},
1904 {431, 16777647},
1905 {437, 16777653},
1906 {465, 16777681},
1907 {486, 16777702},
1908 {711, 439},
1909 {728, 418},
1910 {729, 511},
1911 {731, 434},
1912 {733, 445},
1913 {901, 1966},
1914 {902, 1953},
1915 {904, 1954},
1916 {905, 1955},
1917 {906, 1956},
1918 {908, 1959},
1919 {910, 1960},
1920 {911, 1963},
1921 {912, 1974},
1922 {913, 1985},
1923 {914, 1986},
1924 {915, 1987},
1925 {916, 1988},
1926 {917, 1989},
1927 {918, 1990},
1928 {919, 1991},
1929 {920, 1992},
1930 {921, 1993},
1931 {922, 1994},
1932 {923, 1995},
1933 {924, 1996},
1934 {925, 1997},
1935 {926, 1998},
1936 {927, 1999},
1937 {928, 2000},
1938 {929, 2001},
1939 {931, 2002},
1940 {932, 2004},
1941 {933, 2005},
1942 {934, 2006},
1943 {935, 2007},
1944 {936, 2008},
1945 {937, 2009},
1946 {938, 1957},
1947 {939, 1961},
1948 {944, 1978},
1949 {1025, 1699},
1950 {1026, 1697},
1951 {1027, 1698},
1952 {1028, 1700},
1953 {1029, 1701},
1954 {1030, 1702},
1955 {1031, 1703},
1956 {1032, 1704},
1957 {1033, 1705},
1958 {1034, 1706},
1959 {1035, 1707},
1960 {1036, 1708},
1961 {1038, 1710},
1962 {1039, 1711},
1963 {1040, 1729},
1964 {1041, 1730},
1965 {1042, 1751},
1966 {1043, 1735},
1967 {1044, 1732},
1968 {1045, 1733},
1969 {1046, 1750},
1970 {1047, 1754},
1971 {1048, 1737},
1972 {1049, 1738},
1973 {1050, 1739},
1974 {1051, 1740},
1975 {1052, 1741},
1976 {1053, 1742},
1977 {1054, 1743},
1978 {1055, 1744},
1979 {1056, 1746},
1980 {1057, 1747},
1981 {1058, 1748},
1982 {1059, 1749},
1983 {1060, 1734},
1984 {1061, 1736},
1985 {1062, 1731},
1986 {1063, 1758},
1987 {1064, 1755},
1988 {1065, 1757},
1989 {1066, 1759},
1990 {1067, 1753},
1991 {1068, 1752},
1992 {1069, 1756},
1993 {1070, 1728},
1994 {1071, 1745},
1995 {1170, 16778386},
1996 {1174, 16778390},
1997 {1178, 16778394},
1998 {1180, 16778396},
1999 {1186, 16778402},
2000 {1198, 16778414},
2001 {1200, 16778416},
2002 {1202, 16778418},
2003 {1206, 16778422},
2004 {1208, 16778424},
2005 {1210, 16778426},
2006 {1240, 16778456},
2007 {1250, 16778466},
2008 {1256, 16778472},
2009 {1262, 16778478},
2010 {1329, 16778545},
2011 {1330, 16778546},
2012 {1331, 16778547},
2013 {1332, 16778548},
2014 {1333, 16778549},
2015 {1334, 16778550},
2016 {1335, 16778551},
2017 {1336, 16778552},
2018 {1337, 16778553},
2019 {1338, 16778554},
2020 {1339, 16778555},
2021 {1340, 16778556},
2022 {1341, 16778557},
2023 {1342, 16778558},
2024 {1343, 16778559},
2025 {1344, 16778560},
2026 {1345, 16778561},
2027 {1346, 16778562},
2028 {1347, 16778563},
2029 {1348, 16778564},
2030 {1349, 16778565},
2031 {1350, 16778566},
2032 {1351, 16778567},
2033 {1352, 16778568},
2034 {1353, 16778569},
2035 {1354, 16778570},
2036 {1355, 16778571},
2037 {1356, 16778572},
2038 {1357, 16778573},
2039 {1358, 16778574},
2040 {1359, 16778575},
2041 {1360, 16778576},
2042 {1361, 16778577},
2043 {1362, 16778578},
2044 {1363, 16778579},
2045 {1364, 16778580},
2046 {1365, 16778581},
2047 {1366, 16778582},
2048 {1370, 16778586},
2049 {1371, 16778587},
2050 {1372, 16778588},
2051 {1373, 16778589},
2052 {1374, 16778590},
2053 {1415, 16778631},
2054 {1417, 16778633},
2055 {1418, 16778634},
2056 {1488, 3296},
2057 {1489, 3297},
2058 {1490, 3298},
2059 {1491, 3299},
2060 {1492, 3300},
2061 {1493, 3301},
2062 {1494, 3302},
2063 {1495, 3303},
2064 {1496, 3304},
2065 {1497, 3305},
2066 {1498, 3306},
2067 {1499, 3307},
2068 {1500, 3308},
2069 {1501, 3309},
2070 {1502, 3310},
2071 {1503, 3311},
2072 {1504, 3312},
2073 {1505, 3313},
2074 {1506, 3314},
2075 {1507, 3315},
2076 {1508, 3316},
2077 {1509, 3317},
2078 {1510, 3318},
2079 {1511, 3319},
2080 {1512, 3320},
2081 {1513, 3321},
2082 {1514, 3322},
2083 {1548, 1452},
2084 {1563, 1467},
2085 {1567, 1471},
2086 {1569, 1473},
2087 {1570, 1474},
2088 {1571, 1475},
2089 {1572, 1476},
2090 {1573, 1477},
2091 {1574, 1478},
2092 {1575, 1479},
2093 {1576, 1480},
2094 {1577, 1481},
2095 {1578, 1482},
2096 {1579, 1483},
2097 {1580, 1484},
2098 {1581, 1485},
2099 {1582, 1486},
2100 {1583, 1487},
2101 {1584, 1488},
2102 {1585, 1489},
2103 {1586, 1490},
2104 {1587, 1491},
2105 {1588, 1492},
2106 {1589, 1493},
2107 {1590, 1494},
2108 {1591, 1495},
2109 {1592, 1496},
2110 {1593, 1497},
2111 {1594, 1498},
2112 {1600, 1504},
2113 {1601, 1505},
2114 {1602, 1506},
2115 {1603, 1507},
2116 {1604, 1508},
2117 {1605, 1509},
2118 {1606, 1510},
2119 {1607, 1511},
2120 {1608, 1512},
2121 {1609, 1513},
2122 {1610, 1514},
2123 {1611, 1515},
2124 {1612, 1516},
2125 {1613, 1517},
2126 {1614, 1518},
2127 {1615, 1519},
2128 {1616, 1520},
2129 {1617, 1521},
2130 {1618, 1522},
2131 {1619, 16778835},
2132 {1620, 16778836},
2133 {1621, 16778837},
2134 {1632, 16778848},
2135 {1633, 16778849},
2136 {1634, 16778850},
2137 {1635, 16778851},
2138 {1636, 16778852},
2139 {1637, 16778853},
2140 {1638, 16778854},
2141 {1639, 16778855},
2142 {1640, 16778856},
2143 {1641, 16778857},
2144 {1642, 16778858},
2145 {1648, 16778864},
2146 {1657, 16778873},
2147 {1662, 16778878},
2148 {1670, 16778886},
2149 {1672, 16778888},
2150 {1681, 16778897},
2151 {1688, 16778904},
2152 {1700, 16778916},
2153 {1705, 16778921},
2154 {1711, 16778927},
2155 {1722, 16778938},
2156 {1726, 16778942},
2157 {1729, 16778945},
2158 {1740, 16778956},
2159 {1746, 16778962},
2160 {1748, 16778964},
2161 {1776, 16778992},
2162 {1777, 16778993},
2163 {1778, 16778994},
2164 {1779, 16778995},
2165 {1780, 16778996},
2166 {1781, 16778997},
2167 {1782, 16778998},
2168 {1783, 16778999},
2169 {1784, 16779000},
2170 {1785, 16779001},
2171 {3458, 16780674},
2172 {3459, 16780675},
2173 {3461, 16780677},
2174 {3462, 16780678},
2175 {3463, 16780679},
2176 {3464, 16780680},
2177 {3465, 16780681},
2178 {3466, 16780682},
2179 {3467, 16780683},
2180 {3468, 16780684},
2181 {3469, 16780685},
2182 {3470, 16780686},
2183 {3471, 16780687},
2184 {3472, 16780688},
2185 {3473, 16780689},
2186 {3474, 16780690},
2187 {3475, 16780691},
2188 {3476, 16780692},
2189 {3477, 16780693},
2190 {3478, 16780694},
2191 {3482, 16780698},
2192 {3483, 16780699},
2193 {3484, 16780700},
2194 {3485, 16780701},
2195 {3486, 16780702},
2196 {3487, 16780703},
2197 {3488, 16780704},
2198 {3489, 16780705},
2199 {3490, 16780706},
2200 {3491, 16780707},
2201 {3492, 16780708},
2202 {3493, 16780709},
2203 {3494, 16780710},
2204 {3495, 16780711},
2205 {3496, 16780712},
2206 {3497, 16780713},
2207 {3498, 16780714},
2208 {3499, 16780715},
2209 {3500, 16780716},
2210 {3501, 16780717},
2211 {3502, 16780718},
2212 {3503, 16780719},
2213 {3504, 16780720},
2214 {3505, 16780721},
2215 {3507, 16780723},
2216 {3508, 16780724},
2217 {3509, 16780725},
2218 {3510, 16780726},
2219 {3511, 16780727},
2220 {3512, 16780728},
2221 {3513, 16780729},
2222 {3514, 16780730},
2223 {3515, 16780731},
2224 {3517, 16780733},
2225 {3520, 16780736},
2226 {3521, 16780737},
2227 {3522, 16780738},
2228 {3523, 16780739},
2229 {3524, 16780740},
2230 {3525, 16780741},
2231 {3526, 16780742},
2232 {3530, 16780746},
2233 {3535, 16780751},
2234 {3536, 16780752},
2235 {3537, 16780753},
2236 {3538, 16780754},
2237 {3539, 16780755},
2238 {3540, 16780756},
2239 {3542, 16780758},
2240 {3544, 16780760},
2241 {3545, 16780761},
2242 {3546, 16780762},
2243 {3547, 16780763},
2244 {3548, 16780764},
2245 {3549, 16780765},
2246 {3550, 16780766},
2247 {3551, 16780767},
2248 {3570, 16780786},
2249 {3571, 16780787},
2250 {3572, 16780788},
2251 {3585, 3489},
2252 {3586, 3490},
2253 {3587, 3491},
2254 {3588, 3492},
2255 {3589, 3493},
2256 {3590, 3494},
2257 {3591, 3495},
2258 {3592, 3496},
2259 {3593, 3497},
2260 {3594, 3498},
2261 {3595, 3499},
2262 {3596, 3500},
2263 {3597, 3501},
2264 {3598, 3502},
2265 {3599, 3503},
2266 {3600, 3504},
2267 {3601, 3505},
2268 {3602, 3506},
2269 {3603, 3507},
2270 {3604, 3508},
2271 {3605, 3509},
2272 {3606, 3510},
2273 {3607, 3511},
2274 {3608, 3512},
2275 {3609, 3513},
2276 {3610, 3514},
2277 {3611, 3515},
2278 {3612, 3516},
2279 {3613, 3517},
2280 {3614, 3518},
2281 {3615, 3519},
2282 {3616, 3520},
2283 {3617, 3521},
2284 {3618, 3522},
2285 {3619, 3523},
2286 {3620, 3524},
2287 {3621, 3525},
2288 {3622, 3526},
2289 {3623, 3527},
2290 {3624, 3528},
2291 {3625, 3529},
2292 {3626, 3530},
2293 {3627, 3531},
2294 {3628, 3532},
2295 {3629, 3533},
2296 {3630, 3534},
2297 {3631, 3535},
2298 {3632, 3536},
2299 {3633, 3537},
2300 {3634, 3538},
2301 {3635, 3539},
2302 {3636, 3540},
2303 {3637, 3541},
2304 {3638, 3542},
2305 {3639, 3543},
2306 {3640, 3544},
2307 {3641, 3545},
2308 {3642, 3546},
2309 {3647, 3551},
2310 {3648, 3552},
2311 {3649, 3553},
2312 {3650, 3554},
2313 {3651, 3555},
2314 {3652, 3556},
2315 {3653, 3557},
2316 {3654, 3558},
2317 {3655, 3559},
2318 {3656, 3560},
2319 {3657, 3561},
2320 {3658, 3562},
2321 {3659, 3563},
2322 {3660, 3564},
2323 {3661, 3565},
2324 {3664, 3568},
2325 {3665, 3569},
2326 {3666, 3570},
2327 {3667, 3571},
2328 {3668, 3572},
2329 {3669, 3573},
2330 {3670, 3574},
2331 {3671, 3575},
2332 {3672, 3576},
2333 {3673, 3577},
2334 {4304, 16781520},
2335 {4305, 16781521},
2336 {4306, 16781522},
2337 {4307, 16781523},
2338 {4308, 16781524},
2339 {4309, 16781525},
2340 {4310, 16781526},
2341 {4311, 16781527},
2342 {4312, 16781528},
2343 {4313, 16781529},
2344 {4314, 16781530},
2345 {4315, 16781531},
2346 {4316, 16781532},
2347 {4317, 16781533},
2348 {4318, 16781534},
2349 {4319, 16781535},
2350 {4320, 16781536},
2351 {4321, 16781537},
2352 {4322, 16781538},
2353 {4323, 16781539},
2354 {4324, 16781540},
2355 {4325, 16781541},
2356 {4326, 16781542},
2357 {4327, 16781543},
2358 {4328, 16781544},
2359 {4329, 16781545},
2360 {4330, 16781546},
2361 {4331, 16781547},
2362 {4332, 16781548},
2363 {4333, 16781549},
2364 {4334, 16781550},
2365 {4335, 16781551},
2366 {4336, 16781552},
2367 {4337, 16781553},
2368 {4338, 16781554},
2369 {4339, 16781555},
2370 {4340, 16781556},
2371 {4341, 16781557},
2372 {4342, 16781558},
2373 {4520, 3796},
2374 {4521, 3797},
2375 {4522, 3798},
2376 {4523, 3799},
2377 {4524, 3800},
2378 {4525, 3801},
2379 {4526, 3802},
2380 {4527, 3803},
2381 {4528, 3804},
2382 {4529, 3805},
2383 {4530, 3806},
2384 {4531, 3807},
2385 {4532, 3808},
2386 {4533, 3809},
2387 {4534, 3810},
2388 {4535, 3811},
2389 {4536, 3812},
2390 {4537, 3813},
2391 {4538, 3814},
2392 {4539, 3815},
2393 {4540, 3816},
2394 {4541, 3817},
2395 {4542, 3818},
2396 {4543, 3819},
2397 {4544, 3820},
2398 {4545, 3821},
2399 {4546, 3822},
2400 {4587, 3832},
2401 {4592, 3833},
2402 {4601, 3834},
2403 {7682, 16784898},
2404 {7690, 16784906},
2405 {7710, 16784926},
2406 {7734, 16784950},
2407 {7744, 16784960},
2408 {7766, 16784982},
2409 {7776, 16784992},
2410 {7786, 16785002},
2411 {7808, 16785024},
2412 {7810, 16785026},
2413 {7812, 16785028},
2414 {7818, 16785034},
2415 {7840, 16785056},
2416 {7842, 16785058},
2417 {7844, 16785060},
2418 {7846, 16785062},
2419 {7848, 16785064},
2420 {7850, 16785066},
2421 {7852, 16785068},
2422 {7854, 16785070},
2423 {7856, 16785072},
2424 {7858, 16785074},
2425 {7860, 16785076},
2426 {7862, 16785078},
2427 {7864, 16785080},
2428 {7866, 16785082},
2429 {7868, 16785084},
2430 {7870, 16785086},
2431 {7872, 16785088},
2432 {7874, 16785090},
2433 {7876, 16785092},
2434 {7878, 16785094},
2435 {7880, 16785096},
2436 {7882, 16785098},
2437 {7884, 16785100},
2438 {7886, 16785102},
2439 {7888, 16785104},
2440 {7890, 16785106},
2441 {7892, 16785108},
2442 {7894, 16785110},
2443 {7896, 16785112},
2444 {7898, 16785114},
2445 {7900, 16785116},
2446 {7902, 16785118},
2447 {7904, 16785120},
2448 {7906, 16785122},
2449 {7908, 16785124},
2450 {7910, 16785126},
2451 {7912, 16785128},
2452 {7914, 16785130},
2453 {7916, 16785132},
2454 {7918, 16785134},
2455 {7920, 16785136},
2456 {7922, 16785138},
2457 {7924, 16785140},
2458 {7926, 16785142},
2459 {7928, 16785144},
2460 {8194, 2722},
2461 {8195, 2721},
2462 {8196, 2723},
2463 {8197, 2724},
2464 {8199, 2725},
2465 {8200, 2726},
2466 {8201, 2727},
2467 {8202, 2728},
2468 {8210, 2747},
2469 {8211, 2730},
2470 {8212, 2729},
2471 {8213, 1967},
2472 {8215, 3295},
2473 {8216, 2768},
2474 {8217, 2769},
2475 {8218, 2813},
2476 {8220, 2770},
2477 {8221, 2771},
2478 {8222, 2814},
2479 {8224, 2801},
2480 {8225, 2802},
2481 {8226, 2790},
2482 {8229, 2735},
2483 {8230, 2734},
2484 {8242, 2774},
2485 {8243, 2775},
2486 {8248, 2812},
2487 {8254, 1150},
2488 {8304, 16785520},
2489 {8308, 16785524},
2490 {8309, 16785525},
2491 {8310, 16785526},
2492 {8311, 16785527},
2493 {8312, 16785528},
2494 {8313, 16785529},
2495 {8320, 16785536},
2496 {8321, 16785537},
2497 {8322, 16785538},
2498 {8323, 16785539},
2499 {8324, 16785540},
2500 {8325, 16785541},
2501 {8326, 16785542},
2502 {8327, 16785543},
2503 {8328, 16785544},
2504 {8329, 16785545},
2505 {8352, 16785568},
2506 {8353, 16785569},
2507 {8354, 16785570},
2508 {8355, 16785571},
2509 {8356, 16785572},
2510 {8357, 16785573},
2511 {8358, 16785574},
2512 {8359, 16785575},
2513 {8360, 16785576},
2514 {8361, 16785577},
2515 {8362, 16785578},
2516 {8363, 16785579},
2517 {8364, 8364},
2518 {8453, 2744},
2519 {8470, 1712},
2520 {8471, 2811},
2521 {8478, 2772},
2522 {8482, 2761},
2523 {8531, 2736},
2524 {8532, 2737},
2525 {8533, 2738},
2526 {8534, 2739},
2527 {8535, 2740},
2528 {8536, 2741},
2529 {8537, 2742},
2530 {8538, 2743},
2531 {8539, 2755},
2532 {8540, 2756},
2533 {8541, 2757},
2534 {8542, 2758},
2535 {8592, 2299},
2536 {8593, 2300},
2537 {8594, 2301},
2538 {8595, 2302},
2539 {8658, 2254},
2540 {8660, 2253},
2541 {8706, 16785922},
2542 {8709, 16785925},
2543 {8711, 2245},
2544 {8712, 16785928},
2545 {8713, 16785929},
2546 {8715, 16785931},
2547 {8728, 3018},
2548 {8730, 16785946},
2549 {8731, 16785947},
2550 {8732, 16785948},
2551 {8733, 2241},
2552 {8734, 2242},
2553 {8743, 2270},
2554 {8744, 2271},
2555 {8745, 2268},
2556 {8746, 2269},
2557 {8747, 2239},
2558 {8748, 16785964},
2559 {8749, 16785965},
2560 {8756, 2240},
2561 {8757, 16785973},
2562 {8764, 2248},
2563 {8771, 2249},
2564 {8775, 16785991},
2565 {8776, 16785992},
2566 {8800, 2237},
2567 {8801, 2255},
2568 {8802, 16786018},
2569 {8803, 16786019},
2570 {8804, 2236},
2571 {8805, 2238},
2572 {8834, 2266},
2573 {8835, 2267},
2574 {8866, 3036},
2575 {8867, 3068},
2576 {8868, 3022},
2577 {8968, 3027},
2578 {8970, 3012},
2579 {8981, 2810},
2580 {8992, 2212},
2581 {8993, 2213},
2582 {9001, 2748},
2583 {9002, 2750},
2584 {9109, 3020},
2585 {9115, 2219},
2586 {9117, 2220},
2587 {9118, 2221},
2588 {9120, 2222},
2589 {9121, 2215},
2590 {9123, 2216},
2591 {9124, 2217},
2592 {9126, 2218},
2593 {9128, 2223},
2594 {9132, 2224},
2595 {9143, 2209},
2596 {9146, 2543},
2597 {9147, 2544},
2598 {9148, 2546},
2599 {9149, 2547},
2600 {9225, 2530},
2601 {9226, 2533},
2602 {9227, 2537},
2603 {9228, 2531},
2604 {9229, 2532},
2605 {9252, 2536},
2606 {9472, 2211},
2607 {9474, 2214},
2608 {9484, 2210},
2609 {9488, 2539},
2610 {9492, 2541},
2611 {9496, 2538},
2612 {9500, 2548},
2613 {9508, 2549},
2614 {9516, 2551},
2615 {9524, 2550},
2616 {9532, 2542},
2617 {9618, 2529},
2618 {9642, 2791},
2619 {9643, 2785},
2620 {9644, 2779},
2621 {9645, 2786},
2622 {9646, 2783},
2623 {9647, 2767},
2624 {9650, 2792},
2625 {9651, 2787},
2626 {9654, 2781},
2627 {9655, 2765},
2628 {9660, 2793},
2629 {9661, 2788},
2630 {9664, 2780},
2631 {9665, 2764},
2632 {9670, 2528},
2633 {9675, 2766},
2634 {9679, 2782},
2635 {9702, 2784},
2636 {9734, 2789},
2637 {9742, 2809},
2638 {9747, 2762},
2639 {9756, 2794},
2640 {9758, 2795},
2641 {9792, 2808},
2642 {9794, 2807},
2643 {9827, 2796},
2644 {9829, 2798},
2645 {9830, 2797},
2646 {9837, 2806},
2647 {9839, 2805},
2648 {10003, 2803},
2649 {10007, 2804},
2650 {10013, 2777},
2651 {10016, 2800},
2652 {10240, 16787456},
2653 {10241, 16787457},
2654 {10242, 16787458},
2655 {10243, 16787459},
2656 {10244, 16787460},
2657 {10245, 16787461},
2658 {10246, 16787462},
2659 {10247, 16787463},
2660 {10248, 16787464},
2661 {10249, 16787465},
2662 {10250, 16787466},
2663 {10251, 16787467},
2664 {10252, 16787468},
2665 {10253, 16787469},
2666 {10254, 16787470},
2667 {10255, 16787471},
2668 {10256, 16787472},
2669 {10257, 16787473},
2670 {10258, 16787474},
2671 {10259, 16787475},
2672 {10260, 16787476},
2673 {10261, 16787477},
2674 {10262, 16787478},
2675 {10263, 16787479},
2676 {10264, 16787480},
2677 {10265, 16787481},
2678 {10266, 16787482},
2679 {10267, 16787483},
2680 {10268, 16787484},
2681 {10269, 16787485},
2682 {10270, 16787486},
2683 {10271, 16787487},
2684 {10272, 16787488},
2685 {10273, 16787489},
2686 {10274, 16787490},
2687 {10275, 16787491},
2688 {10276, 16787492},
2689 {10277, 16787493},
2690 {10278, 16787494},
2691 {10279, 16787495},
2692 {10280, 16787496},
2693 {10281, 16787497},
2694 {10282, 16787498},
2695 {10283, 16787499},
2696 {10284, 16787500},
2697 {10285, 16787501},
2698 {10286, 16787502},
2699 {10287, 16787503},
2700 {10288, 16787504},
2701 {10289, 16787505},
2702 {10290, 16787506},
2703 {10291, 16787507},
2704 {10292, 16787508},
2705 {10293, 16787509},
2706 {10294, 16787510},
2707 {10295, 16787511},
2708 {10296, 16787512},
2709 {10297, 16787513},
2710 {10298, 16787514},
2711 {10299, 16787515},
2712 {10300, 16787516},
2713 {10301, 16787517},
2714 {10302, 16787518},
2715 {10303, 16787519},
2716 {10304, 16787520},
2717 {10305, 16787521},
2718 {10306, 16787522},
2719 {10307, 16787523},
2720 {10308, 16787524},
2721 {10309, 16787525},
2722 {10310, 16787526},
2723 {10311, 16787527},
2724 {10312, 16787528},
2725 {10313, 16787529},
2726 {10314, 16787530},
2727 {10315, 16787531},
2728 {10316, 16787532},
2729 {10317, 16787533},
2730 {10318, 16787534},
2731 {10319, 16787535},
2732 {10320, 16787536},
2733 {10321, 16787537},
2734 {10322, 16787538},
2735 {10323, 16787539},
2736 {10324, 16787540},
2737 {10325, 16787541},
2738 {10326, 16787542},
2739 {10327, 16787543},
2740 {10328, 16787544},
2741 {10329, 16787545},
2742 {10330, 16787546},
2743 {10331, 16787547},
2744 {10332, 16787548},
2745 {10333, 16787549},
2746 {10334, 16787550},
2747 {10335, 16787551},
2748 {10336, 16787552},
2749 {10337, 16787553},
2750 {10338, 16787554},
2751 {10339, 16787555},
2752 {10340, 16787556},
2753 {10341, 16787557},
2754 {10342, 16787558},
2755 {10343, 16787559},
2756 {10344, 16787560},
2757 {10345, 16787561},
2758 {10346, 16787562},
2759 {10347, 16787563},
2760 {10348, 16787564},
2761 {10349, 16787565},
2762 {10350, 16787566},
2763 {10351, 16787567},
2764 {10352, 16787568},
2765 {10353, 16787569},
2766 {10354, 16787570},
2767 {10355, 16787571},
2768 {10356, 16787572},
2769 {10357, 16787573},
2770 {10358, 16787574},
2771 {10359, 16787575},
2772 {10360, 16787576},
2773 {10361, 16787577},
2774 {10362, 16787578},
2775 {10363, 16787579},
2776 {10364, 16787580},
2777 {10365, 16787581},
2778 {10366, 16787582},
2779 {10367, 16787583},
2780 {10368, 16787584},
2781 {10369, 16787585},
2782 {10370, 16787586},
2783 {10371, 16787587},
2784 {10372, 16787588},
2785 {10373, 16787589},
2786 {10374, 16787590},
2787 {10375, 16787591},
2788 {10376, 16787592},
2789 {10377, 16787593},
2790 {10378, 16787594},
2791 {10379, 16787595},
2792 {10380, 16787596},
2793 {10381, 16787597},
2794 {10382, 16787598},
2795 {10383, 16787599},
2796 {10384, 16787600},
2797 {10385, 16787601},
2798 {10386, 16787602},
2799 {10387, 16787603},
2800 {10388, 16787604},
2801 {10389, 16787605},
2802 {10390, 16787606},
2803 {10391, 16787607},
2804 {10392, 16787608},
2805 {10393, 16787609},
2806 {10394, 16787610},
2807 {10395, 16787611},
2808 {10396, 16787612},
2809 {10397, 16787613},
2810 {10398, 16787614},
2811 {10399, 16787615},
2812 {10400, 16787616},
2813 {10401, 16787617},
2814 {10402, 16787618},
2815 {10403, 16787619},
2816 {10404, 16787620},
2817 {10405, 16787621},
2818 {10406, 16787622},
2819 {10407, 16787623},
2820 {10408, 16787624},
2821 {10409, 16787625},
2822 {10410, 16787626},
2823 {10411, 16787627},
2824 {10412, 16787628},
2825 {10413, 16787629},
2826 {10414, 16787630},
2827 {10415, 16787631},
2828 {10416, 16787632},
2829 {10417, 16787633},
2830 {10418, 16787634},
2831 {10419, 16787635},
2832 {10420, 16787636},
2833 {10421, 16787637},
2834 {10422, 16787638},
2835 {10423, 16787639},
2836 {10424, 16787640},
2837 {10425, 16787641},
2838 {10426, 16787642},
2839 {10427, 16787643},
2840 {10428, 16787644},
2841 {10429, 16787645},
2842 {10430, 16787646},
2843 {10431, 16787647},
2844 {10432, 16787648},
2845 {10433, 16787649},
2846 {10434, 16787650},
2847 {10435, 16787651},
2848 {10436, 16787652},
2849 {10437, 16787653},
2850 {10438, 16787654},
2851 {10439, 16787655},
2852 {10440, 16787656},
2853 {10441, 16787657},
2854 {10442, 16787658},
2855 {10443, 16787659},
2856 {10444, 16787660},
2857 {10445, 16787661},
2858 {10446, 16787662},
2859 {10447, 16787663},
2860 {10448, 16787664},
2861 {10449, 16787665},
2862 {10450, 16787666},
2863 {10451, 16787667},
2864 {10452, 16787668},
2865 {10453, 16787669},
2866 {10454, 16787670},
2867 {10455, 16787671},
2868 {10456, 16787672},
2869 {10457, 16787673},
2870 {10458, 16787674},
2871 {10459, 16787675},
2872 {10460, 16787676},
2873 {10461, 16787677},
2874 {10462, 16787678},
2875 {10463, 16787679},
2876 {10464, 16787680},
2877 {10465, 16787681},
2878 {10466, 16787682},
2879 {10467, 16787683},
2880 {10468, 16787684},
2881 {10469, 16787685},
2882 {10470, 16787686},
2883 {10471, 16787687},
2884 {10472, 16787688},
2885 {10473, 16787689},
2886 {10474, 16787690},
2887 {10475, 16787691},
2888 {10476, 16787692},
2889 {10477, 16787693},
2890 {10478, 16787694},
2891 {10479, 16787695},
2892 {10480, 16787696},
2893 {10481, 16787697},
2894 {10482, 16787698},
2895 {10483, 16787699},
2896 {10484, 16787700},
2897 {10485, 16787701},
2898 {10486, 16787702},
2899 {10487, 16787703},
2900 {10488, 16787704},
2901 {10489, 16787705},
2902 {10490, 16787706},
2903 {10491, 16787707},
2904 {10492, 16787708},
2905 {10493, 16787709},
2906 {10494, 16787710},
2907 {10495, 16787711},
2908 {12289, 1188},
2909 {12290, 1185},
2910 {12300, 1186},
2911 {12301, 1187},
2912 {12443, 1246},
2913 {12444, 1247},
2914 {12449, 1191},
2915 {12450, 1201},
2916 {12451, 1192},
2917 {12452, 1202},
2918 {12453, 1193},
2919 {12454, 1203},
2920 {12455, 1194},
2921 {12456, 1204},
2922 {12457, 1195},
2923 {12458, 1205},
2924 {12459, 1206},
2925 {12461, 1207},
2926 {12463, 1208},
2927 {12465, 1209},
2928 {12467, 1210},
2929 {12469, 1211},
2930 {12471, 1212},
2931 {12473, 1213},
2932 {12475, 1214},
2933 {12477, 1215},
2934 {12479, 1216},
2935 {12481, 1217},
2936 {12483, 1199},
2937 {12484, 1218},
2938 {12486, 1219},
2939 {12488, 1220},
2940 {12490, 1221},
2941 {12491, 1222},
2942 {12492, 1223},
2943 {12493, 1224},
2944 {12494, 1225},
2945 {12495, 1226},
2946 {12498, 1227},
2947 {12501, 1228},
2948 {12504, 1229},
2949 {12507, 1230},
2950 {12510, 1231},
2951 {12511, 1232},
2952 {12512, 1233},
2953 {12513, 1234},
2954 {12514, 1235},
2955 {12515, 1196},
2956 {12516, 1236},
2957 {12517, 1197},
2958 {12518, 1237},
2959 {12519, 1198},
2960 {12520, 1238},
2961 {12521, 1239},
2962 {12522, 1240},
2963 {12523, 1241},
2964 {12524, 1242},
2965 {12525, 1243},
2966 {12527, 1244},
2967 {12530, 1190},
2968 {12531, 1245},
2969 {12539, 1189},
2970 {12540, 1200},
2971 {12593, 3745},
2972 {12594, 3746},
2973 {12595, 3747},
2974 {12596, 3748},
2975 {12597, 3749},
2976 {12598, 3750},
2977 {12599, 3751},
2978 {12600, 3752},
2979 {12601, 3753},
2980 {12602, 3754},
2981 {12603, 3755},
2982 {12604, 3756},
2983 {12605, 3757},
2984 {12606, 3758},
2985 {12607, 3759},
2986 {12608, 3760},
2987 {12609, 3761},
2988 {12610, 3762},
2989 {12611, 3763},
2990 {12612, 3764},
2991 {12613, 3765},
2992 {12614, 3766},
2993 {12615, 3767},
2994 {12616, 3768},
2995 {12617, 3769},
2996 {12618, 3770},
2997 {12619, 3771},
2998 {12620, 3772},
2999 {12621, 3773},
3000 {12622, 3774},
3001 {12623, 3775},
3002 {12624, 3776},
3003 {12625, 3777},
3004 {12626, 3778},
3005 {12627, 3779},
3006 {12628, 3780},
3007 {12629, 3781},
3008 {12630, 3782},
3009 {12631, 3783},
3010 {12632, 3784},
3011 {12633, 3785},
3012 {12634, 3786},
3013 {12635, 3787},
3014 {12636, 3788},
3015 {12637, 3789},
3016 {12638, 3790},
3017 {12639, 3791},
3018 {12640, 3792},
3019 {12641, 3793},
3020 {12642, 3794},
3021 {12643, 3795},
3022 {12653, 3823},
3023 {12657, 3824},
3024 {12664, 3825},
3025 {12671, 3826},
3026 {12673, 3827},
3027 {12676, 3828},
3028 {12678, 3829},
3029 {12685, 3830},
3030 {12686, 3831},
3031 {65533, 3550},
3032 };
3033
3034 QtCode2Key qtCodeToKey[] =
3035 {
3036 {16777216, 65307},
3037 {16777217, 65289},
3038 {16777218, 65056},
3039 {16777219, 65288},
3040 {16777220, 65293},
3041 {16777222, 65379},
3042 {16777223, 65535},
3043 {16777224, 65299},
3044 {16777225, 65377},
3045 {16777232, 65360},
3046 {16777233, 65367},
3047 {16777234, 65361},
3048 {16777235, 65362},
3049 {16777236, 65363},
3050 {16777237, 65364},
3051 {16777238, 65365},
3052 {16777239, 65366},
3053 {16777248, 65505},
3054 {16777249, 65507},
3055 {16777250, 65511},
3056 {16777251, 65513},
3057 {16777252, 65509},
3058 {16777253, 65407},
3059 {16777254, 65300},
3060 {16777264, 65470},
3061 {16777265, 65471},
3062 {16777266, 65472},
3063 {16777267, 65473},
3064 {16777268, 65474},
3065 {16777269, 65475},
3066 {16777270, 65476},
3067 {16777271, 65477},
3068 {16777272, 65478},
3069 {16777273, 65479},
3070 {16777274, 65480},
3071 {16777274, 65480},
3072 {16777275, 65481},
3073 {16777275, 65481},
3074 {16777276, 65482},
3075 {16777276, 65482},
3076 {16777277, 65483},
3077 {16777277, 65483},
3078 {16777278, 65484},
3079 {16777278, 65484},
3080 {16777279, 65485},
3081 {16777279, 65485},
3082 {16777280, 65486},
3083 {16777280, 65486},
3084 {16777281, 65487},
3085 {16777281, 65487},
3086 {16777282, 65488},
3087 {16777282, 65488},
3088 {16777283, 65489},
3089 {16777283, 65489},
3090 {16777284, 65490},
3091 {16777284, 65490},
3092 {16777285, 65491},
3093 {16777285, 65491},
3094 {16777286, 65492},
3095 {16777286, 65492},
3096 {16777287, 65493},
3097 {16777287, 65493},
3098 {16777288, 65494},
3099 {16777288, 65494},
3100 {16777289, 65495},
3101 {16777289, 65495},
3102 {16777290, 65496},
3103 {16777290, 65496},
3104 {16777291, 65497},
3105 {16777291, 65497},
3106 {16777292, 65498},
3107 {16777292, 65498},
3108 {16777293, 65499},
3109 {16777293, 65499},
3110 {16777294, 65500},
3111 {16777294, 65500},
3112 {16777295, 65501},
3113 {16777295, 65501},
3114 {16777296, 65502},
3115 {16777296, 65502},
3116 {16777297, 65503},
3117 {16777297, 65503},
3118 {16777298, 65504},
3119 {16777298, 65504},
3120 {16777299, 65515},
3121 {16777300, 65516},
3122 {16777301, 65383},
3123 {16777302, 65517},
3124 {16777303, 65518},
3125 {16777304, 65386},
3126 {16781571, 65027},
3127 {16781600, 65312},
3128 {16781601, 65313},
3129 {16781602, 65314},
3130 {16781603, 65315},
3131 {16781603, 65315},
3132 {16781604, 65316},
3133 {16781605, 65317},
3134 {16781606, 65318},
3135 {16781607, 65319},
3136 {16781608, 65320},
3137 {16781609, 65321},
3138 {16781610, 65322},
3139 {16781611, 65323},
3140 {16781612, 65324},
3141 {16781613, 65325},
3142 {16781614, 65326},
3143 {16781615, 65327},
3144 {16781616, 65328},
3145 {16781617, 65329},
3146 {16781618, 65330},
3147 {16781619, 65331},
3148 {16781620, 65332},
3149 {16781621, 65333},
3150 {16781622, 65334},
3151 {16781623, 65335},
3152 {16781623, 65335},
3153 {16781623, 65335},
3154 {16781624, 65336},
3155 {16781625, 65337},
3156 {16781626, 65338},
3157 {16781627, 65339},
3158 {16781628, 65340},
3159 {16781628, 65340},
3160 {16781629, 65341},
3161 {16781629, 65341},
3162 {16781629, 65341},
3163 {16781630, 65342},
3164 {16781630, 65342},
3165 {16781630, 65342},
3166 {16781631, 65343},
3167 {16781694, 65406},
3168 {16781694, 65406},
3169 {16781694, 65406},
3170 {16781694, 65406},
3171 {16781694, 65406},
3172 {16781694, 65406},
3173 {16781694, 65406},
3174 {16781694, 65406},
3175 {16781904, 65104},
3176 {16781905, 65105},
3177 {16781906, 65106},
3178 {16781907, 65107},
3179 {16781907, 65107},
3180 {16781908, 65108},
3181 {16781909, 65109},
3182 {16781910, 65110},
3183 {16781911, 65111},
3184 {16781912, 65112},
3185 {16781913, 65113},
3186 {16781914, 65114},
3187 {16781915, 65115},
3188 {16781916, 65116},
3189 {16781917, 65117},
3190 {16781918, 65118},
3191 {16781919, 65119},
3192 {16781920, 65120},
3193 {16781921, 65121},
3194 {16781922, 65122},
3195 };