Codebase list fcitx-qt5 / 6c14866
Imported Upstream version 0.1.1 YunQiang Su 11 years ago
38 changed file(s) with 9527 addition(s) and 0 deletion(s). Raw diff Collapse all Expand all
0 *~
1 build/*
2 *.kdev4
3 .kdev_include_paths
4 .directory
5 *.kate-swp
6 *.orig
7 tags
0 cmake_minimum_required(VERSION 2.8.5)
1
2 project(fcitx-qt5)
3
4 set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" ${CMAKE_MODULE_PATH})
5
6 find_package(Qt5Core REQUIRED)
7 find_package(Qt5Gui REQUIRED)
8 find_package(Qt5Widgets REQUIRED)
9 find_package(Qt5DBus REQUIRED)
10 include(GNUInstallDirs)
11
12 get_target_property(REAL_QMAKE_EXECUTABLE ${Qt5Core_QMAKE_EXECUTABLE} IMPORTED_LOCATION)
13
14 execute_process(COMMAND ${REAL_QMAKE_EXECUTABLE} -query QT_INSTALL_PLUGINS
15 OUTPUT_VARIABLE _Qt5_PLUGIN_INSTALL_DIR ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE
16 )
17
18 if (NOT _Qt5_PLUGIN_INSTALL_DIR)
19 message(FATAL_ERROR "not found qt5 plugin dir")
20 endif (NOT _Qt5_PLUGIN_INSTALL_DIR)
21
22 include_directories(${CMAKE_CURRENT_SOURCE_DIR})
23
24 add_subdirectory(fcitx-qt5)
25 add_subdirectory(src)
26
0 Fcitx Qt5 Input Context
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 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 /***************************************************************************
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 /***************************************************************************
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 /***************************************************************************
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 /***************************************************************************
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 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 /***************************************************************************
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 /*
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 /*
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 /***************************************************************************
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 /***************************************************************************
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 /*
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 /*
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 /***************************************************************************
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 /***************************************************************************
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 /*
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 /*
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 #!/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 <!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 <!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 <!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(${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 /***************************************************************************
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 "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 result.waitForFinished();
629
630 if (!m_connection->isConnected() || !result.isFinished() || result.isError() || result.value() <= 0) {
631 return x11FilterEventFallback(keyval, keycode, state, press);
632 } else {
633 update(Qt::ImCursorRectangle);
634 return true;
635 }
636 return false;
637 }
638
639 bool QFcitxPlatformInputContext::x11FilterEventFallback(uint keyval, uint keycode, uint state, bool press)
640 {
641 Q_UNUSED(keycode);
642 if (processCompose(keyval, state, (press) ? FCITX_PRESS_KEY : FCITX_RELEASE_KEY)) {
643 return true;
644 }
645 return false;
646 }
647
648 FcitxQtInputContextProxy* QFcitxPlatformInputContext::validIC()
649 {
650 QWindow* window = qApp->focusWindow();
651 return validICByWindow(window);
652 }
653
654 FcitxQtInputContextProxy* QFcitxPlatformInputContext::validICByWId(WId wid)
655 {
656 FcitxQtICData* icData = m_icMap.value(wid);
657 if (!icData)
658 return 0;
659 if (icData->proxy.isNull()) {
660 return 0;
661 } else if (icData->proxy->isValid()) {
662 return icData->proxy.data();
663 }
664 return 0;
665 }
666
667 FcitxQtInputContextProxy* QFcitxPlatformInputContext::validICByWindow(QWindow* w)
668 {
669 if (!w)
670 return 0;
671
672 return validICByWId(w->winId());
673 }
674
675
676 bool QFcitxPlatformInputContext::processCompose(uint keyval, uint state, FcitxKeyEventType event)
677 {
678 Q_UNUSED(state);
679 int i;
680
681 if (event == FCITX_RELEASE_KEY)
682 return false;
683
684 for (i = 0; fcitx_compose_ignore[i] != XK_VoidSymbol; i++) {
685 if (keyval == fcitx_compose_ignore[i])
686 return false;
687 }
688
689 m_compose_buffer[m_n_compose ++] = keyval;
690 m_compose_buffer[m_n_compose] = 0;
691
692 if (checkCompactTable(&fcitx_compose_table_compact)) {
693 // qDebug () << "checkCompactTable ->true";
694 return true;
695 }
696
697 if (checkAlgorithmically()) {
698 // qDebug () << "checkAlgorithmically ->true";
699 return true;
700 }
701
702 if (m_n_compose > 1) {
703 m_compose_buffer[0] = 0;
704 m_n_compose = 0;
705 return true;
706 } else {
707 m_compose_buffer[0] = 0;
708 m_n_compose = 0;
709 return false;
710 }
711 }
712
713 #define IS_DEAD_KEY(k) \
714 ((k) >= XK_dead_grave && (k) <= (XK_dead_dasia+1))
715
716 bool QFcitxPlatformInputContext::checkAlgorithmically()
717 {
718 int i;
719 quint32 combination_buffer[MAX_COMPOSE_LEN];
720
721 if (m_n_compose >= MAX_COMPOSE_LEN)
722 return false;
723
724 for (i = 0; i < m_n_compose && IS_DEAD_KEY(m_compose_buffer[i]); i++);
725 if (i == m_n_compose)
726 return true;
727
728 if (i > 0 && i == m_n_compose - 1) {
729 combination_buffer[0] = FcitxKeySymToUnicode(m_compose_buffer[i]);
730 combination_buffer[m_n_compose] = 0;
731 i--;
732 while (i >= 0) {
733 switch (m_compose_buffer[i]) {
734 #define CASE(keysym, unicode) \
735 case XK_dead_##keysym: combination_buffer[i + 1] = unicode; break
736 CASE(grave, 0x0300);
737 CASE(acute, 0x0301);
738 CASE(circumflex, 0x0302);
739 CASE(tilde, 0x0303); /* Also used with perispomeni, 0x342. */
740 CASE(macron, 0x0304);
741 CASE(breve, 0x0306);
742 CASE(abovedot, 0x0307);
743 CASE(diaeresis, 0x0308);
744 CASE(hook, 0x0309);
745 CASE(abovering, 0x030A);
746 CASE(doubleacute, 0x030B);
747 CASE(caron, 0x030C);
748 CASE(abovecomma, 0x0313); /* Equivalent to psili */
749 CASE(abovereversedcomma, 0x0314); /* Equivalent to dasia */
750 CASE(horn, 0x031B); /* Legacy use for psili, 0x313 (or 0x343). */
751 CASE(belowdot, 0x0323);
752 CASE(cedilla, 0x0327);
753 CASE(ogonek, 0x0328); /* Legacy use for dasia, 0x314.*/
754 CASE(iota, 0x0345);
755 CASE(voiced_sound, 0x3099); /* Per Markus Kuhn keysyms.txt file. */
756 CASE(semivoiced_sound, 0x309A); /* Per Markus Kuhn keysyms.txt file. */
757 /* The following cases are to be removed once xkeyboard-config,
758 * xorg are fully updated.
759 **/
760 /* Workaround for typo in 1.4.x xserver-xorg */
761 case 0xfe66:
762 combination_buffer[i + 1] = 0x314;
763 break;
764 /* CASE (dasia, 0x314); */
765 /* CASE (perispomeni, 0x342); */
766 /* CASE (psili, 0x343); */
767 #undef CASE
768 default:
769 combination_buffer[i + 1] = FcitxKeySymToUnicode(m_compose_buffer[i]);
770 }
771 i--;
772 }
773
774 /* If the buffer normalizes to a single character,
775 * then modify the order of combination_buffer accordingly, if necessary,
776 * and return TRUE.
777 **/
778 #if 0
779 if (check_normalize_nfc(combination_buffer, m_n_compose)) {
780 gunichar value;
781 combination_utf8 = g_ucs4_to_utf8(combination_buffer, -1, NULL, NULL, NULL);
782 nfc = g_utf8_normalize(combination_utf8, -1, G_NORMALIZE_NFC);
783
784 value = g_utf8_get_char(nfc);
785 gtk_im_context_simple_commit_char(GTK_IM_CONTEXT(context_simple), value);
786 context_simple->compose_buffer[0] = 0;
787
788 g_free(combination_utf8);
789 g_free(nfc);
790
791 return TRUE;
792 }
793 #endif
794 QString s(QString::fromUcs4(combination_buffer, m_n_compose));
795 s = s.normalized(QString::NormalizationForm_C);
796
797 // qDebug () << "combination_buffer = " << QString::fromUcs4(combination_buffer, m_n_compose) << "m_n_compose" << m_n_compose;
798 // qDebug () << "result = " << s << "i = " << s.length();
799
800 if (s.length() == 1) {
801 commitString(QString(s[0]));
802 m_compose_buffer[0] = 0;
803 m_n_compose = 0;
804 return true;
805 }
806 }
807 return false;
808 }
809
810
811 bool
812 QFcitxPlatformInputContext::checkCompactTable(const FcitxComposeTableCompact *table)
813 {
814 int row_stride;
815 const quint32 *seq_index;
816 const quint32 *seq;
817 int i;
818
819 /* Will never match, if the sequence in the compose buffer is longer
820 * than the sequences in the table. Further, compare_seq (key, val)
821 * will overrun val if key is longer than val. */
822 if (m_n_compose > table->max_seq_len)
823 return false;
824
825 seq_index = (const quint32 *)bsearch(m_compose_buffer,
826 table->data, table->n_index_size,
827 sizeof(quint32) * table->n_index_stride,
828 compare_seq_index);
829
830 if (!seq_index) {
831 return false;
832 }
833
834 if (seq_index && m_n_compose == 1) {
835 return true;
836 }
837
838 seq = NULL;
839 for (i = m_n_compose - 1; i < table->max_seq_len; i++) {
840 row_stride = i + 1;
841
842 if (seq_index[i + 1] - seq_index[i] > 0) {
843 seq = (const quint32 *) bsearch(m_compose_buffer + 1,
844 table->data + seq_index[i], (seq_index[i + 1] - seq_index[i]) / row_stride,
845 sizeof(quint32) * row_stride,
846 compare_seq);
847 if (seq) {
848 if (i == m_n_compose - 1)
849 break;
850 else {
851 return true;
852 }
853 }
854 }
855 }
856
857 if (!seq) {
858 return false;
859 } else {
860 uint value;
861 value = seq[row_stride - 1];
862 commitString(QString(QChar(value)));
863 m_compose_buffer[0] = 0;
864 m_n_compose = 0;
865 return true;
866 }
867 return false;
868 }
869
870 // 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 "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 /***************************************************************************
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