mirror of
https://bitbucket.org/smil3y/kde-extraapps.git
synced 2025-02-25 19:32:54 +00:00
846 lines
27 KiB
C++
846 lines
27 KiB
C++
![]() |
/***************************************************************************
|
||
|
* Copyright (C) 2009 by Björn Ruberg <bjoern@ruberg-wegener.de> *
|
||
|
* Copyright (C) 2011 by Federico Zenith <federico.zenith@member.fsf.org>*
|
||
|
* *
|
||
|
* This program is free software); you can redistribute it and/or modify *
|
||
|
* it under the terms of the GNU General Public License as published by *
|
||
|
* the Free Software Foundation); either version 2 of the License, or *
|
||
|
* (at your option) any later version. *
|
||
|
* *
|
||
|
* This program is distributed in the hope that it will be useful, *
|
||
|
* but WITHOUT ANY WARRANTY); without even the implied warranty of *
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||
|
* GNU General Public License for more details. *
|
||
|
* *
|
||
|
* You should have received a copy of the GNU General Public License *
|
||
|
* along with this program); if not, write to the *
|
||
|
* Free Software Foundation, Inc., *
|
||
|
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . *
|
||
|
***************************************************************************/
|
||
|
|
||
|
|
||
|
#include <QChar>
|
||
|
#include <QHash>
|
||
|
#include <QMap>
|
||
|
#include <QString>
|
||
|
#include <QVector>
|
||
|
#include <qx11info_x11.h>
|
||
|
#include <X11/Xlib.h>
|
||
|
#include <X11/extensions/XTest.h>
|
||
|
|
||
|
#include "Helpers.h"
|
||
|
|
||
|
namespace Helpers
|
||
|
{
|
||
|
|
||
|
int keysymsPerKeycode;
|
||
|
|
||
|
/// Contains the non-predictable keysyms and their corresponding QChar's
|
||
|
QHash<unsigned int, QChar> symbolMap;
|
||
|
QHash<unsigned int, QVector<KeySym> > savedMappings;
|
||
|
QMap<unsigned int, QVector<KeySym> > pendingKeycodeChanges;
|
||
|
XkbStateRec xkbState;
|
||
|
bool xkbStateSetup = false;
|
||
|
|
||
|
/// Initialises the keysym-QChar map
|
||
|
void initialiseMap(QHash<unsigned int, QChar>& map);
|
||
|
|
||
|
void changeKeycodeMapping(unsigned int code, QString &sym)
|
||
|
{
|
||
|
KeySym keysym = XStringToKeysym(sym.toAscii());
|
||
|
QVector<KeySym> keysyms(keysymsPerKeycode);
|
||
|
for (int i = 0; i < keysymsPerKeycode; ++i) {
|
||
|
keysyms[i] = keysym;
|
||
|
}
|
||
|
|
||
|
pendingKeycodeChanges.insert(code, keysyms);
|
||
|
}
|
||
|
|
||
|
void changeKeycodeMapping(unsigned int code, QString &sym, QString &shiftedSym)
|
||
|
{
|
||
|
KeySym keysym = XStringToKeysym(sym.toAscii());
|
||
|
QVector<KeySym> keysyms(keysymsPerKeycode);
|
||
|
for (int i = 0; i < keysymsPerKeycode; ++i) {
|
||
|
keysyms[i] = keysym;
|
||
|
}
|
||
|
|
||
|
keysyms[1] = XStringToKeysym(shiftedSym.toAscii());
|
||
|
pendingKeycodeChanges.insert(code, keysyms);
|
||
|
}
|
||
|
|
||
|
void flushPendingKeycodeMappingChanges()
|
||
|
{
|
||
|
QVector<KeySym> keysyms;
|
||
|
|
||
|
QMapIterator<unsigned int, QVector<KeySym> > it(pendingKeycodeChanges);
|
||
|
unsigned int startingCode = 0;
|
||
|
unsigned int lastCode = 0;
|
||
|
int count = 0;
|
||
|
while (it.hasNext()) {
|
||
|
it.next();
|
||
|
if (startingCode == 0) {
|
||
|
startingCode = it.key();
|
||
|
} else if (lastCode + 1 != it.key()) {
|
||
|
XChangeKeyboardMapping(QX11Info::display(), startingCode, keysymsPerKeycode, keysyms.data(), count);
|
||
|
|
||
|
keysyms.clear();
|
||
|
startingCode = it.key();
|
||
|
count = 0;
|
||
|
}
|
||
|
|
||
|
lastCode = it.key();
|
||
|
keysyms += it.value();
|
||
|
++count;
|
||
|
}
|
||
|
|
||
|
pendingKeycodeChanges.clear();
|
||
|
XChangeKeyboardMapping(QX11Info::display(), startingCode, keysymsPerKeycode, keysyms.data(), count);
|
||
|
XSync(QX11Info::display(), False);
|
||
|
}
|
||
|
|
||
|
void saveKeycodeMapping(unsigned int code)
|
||
|
{
|
||
|
KeySym *syms = XGetKeyboardMapping(QX11Info::display(), code, 1, &keysymsPerKeycode);
|
||
|
QVector<KeySym> v(keysymsPerKeycode);
|
||
|
for (int i = 0; i < keysymsPerKeycode; ++i) {
|
||
|
v[i] = syms[i];
|
||
|
}
|
||
|
XFree(syms);
|
||
|
savedMappings.insert(code, v);
|
||
|
}
|
||
|
|
||
|
void restoreKeycodeMapping(unsigned int code)
|
||
|
{
|
||
|
if (savedMappings.contains(code)) {
|
||
|
pendingKeycodeChanges.insert(code, savedMappings[code]);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void refreshXkbState()
|
||
|
{
|
||
|
XkbGetState(QX11Info::display(), XkbUseCoreKbd, &xkbState);
|
||
|
xkbStateSetup = true;
|
||
|
}
|
||
|
|
||
|
unsigned int keycodeToKeysym(const unsigned int &code, int level)
|
||
|
{
|
||
|
if (!xkbStateSetup) {
|
||
|
refreshXkbState();
|
||
|
}
|
||
|
|
||
|
int vector = xkbState.group * 2 + level;
|
||
|
return (unsigned int)XKeycodeToKeysym(QX11Info::display(), code, vector);
|
||
|
}
|
||
|
|
||
|
unsigned int keysymToKeycode(const unsigned int &keysym)
|
||
|
{
|
||
|
return ((unsigned int) XKeysymToKeycode(QX11Info::display(), keysym));
|
||
|
}
|
||
|
|
||
|
void fakeKeyPress(const unsigned int &code)
|
||
|
{
|
||
|
XTestFakeKeyEvent(QX11Info::display(), code, true, 0);
|
||
|
XSync(QX11Info::display(), False);
|
||
|
}
|
||
|
|
||
|
void fakeKeyRelease(const unsigned int &code)
|
||
|
{
|
||
|
XTestFakeKeyEvent(QX11Info::display(), code, false, 0);
|
||
|
XSync(QX11Info::display(), False);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* This function maps keysyms to QChars exploiting as long as possible the
|
||
|
* current situation: if the keysym is one of the "guessable" ones, i.e.
|
||
|
* less than 0x100 or larger than 0x01000100, it calculates the
|
||
|
* corresponding Unicode value and returns the corresponding QChar.
|
||
|
* Otherwise, it looks the keysym up in the symbolMap, and if it is found
|
||
|
* it returns the QChar, otherwise the null QChar.
|
||
|
*
|
||
|
* Note that symbolMap is lazily initialised only the first time it is
|
||
|
* needed, so on advanced X implementations that do away with all old-age,
|
||
|
* non-Unicodish keysyms the map initialisation will never waste CPU time.
|
||
|
*
|
||
|
* \sa http://www.x.org/wiki/KeySyms
|
||
|
*/
|
||
|
QChar mapToUnicode(const unsigned int &keysym)
|
||
|
{
|
||
|
if (keysym < 0x100) {
|
||
|
return QChar(keysym);
|
||
|
} else if (keysym > 0x01000100) {
|
||
|
return QChar(keysym - 0x01000000);
|
||
|
} else {
|
||
|
if (symbolMap.isEmpty()) {
|
||
|
initialiseMap(symbolMap);
|
||
|
}
|
||
|
|
||
|
if (symbolMap.contains(keysym)) {
|
||
|
return symbolMap[keysym];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return QChar(0x2204); // Symbol for "There does not exist"
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* The data can be extracted from the keysymdef.h file, in most cases this
|
||
|
* will be at /usr/include/X11/keysymdef.h.
|
||
|
*
|
||
|
* BEWARE OF EDITING THIS FUNCTION MANUALLY. It will be a beast to maintain.
|
||
|
* Note that, in theory, the body of this function should never change as
|
||
|
* all new X characters will be added, consistently with Unicode standards,
|
||
|
* with keysyms above 0x01000100.
|
||
|
*
|
||
|
* The script to generate the full body of this function is:
|
||
|
*
|
||
|
* #!/bin/bash
|
||
|
* # Select only lines defining a macro
|
||
|
* grep "^#" /usr/include/X11/keysymdef.h | \
|
||
|
* # Take only values that have a Unicode equivalent
|
||
|
* grep "/\* U+" | \
|
||
|
* # Extract the codes (in parentheses)
|
||
|
* sed -r "s/^.*0x(\w*)\s.*U\+(\w+)\s.*$/map[0x\1] = QChar( 0x\2 );/" | \
|
||
|
* # Remove all codes starting with 0x00 (less than 0x100)
|
||
|
* # or with 0x100 (larger than 0x1000100)
|
||
|
* grep -v -E "^map\[0x1?00" | \
|
||
|
* # Put some order to ease manual lookup
|
||
|
* sort
|
||
|
*/
|
||
|
void initialiseMap(QHash<unsigned int, QChar>& map)
|
||
|
{
|
||
|
map[0x01a1] = QChar(0x0104);
|
||
|
map[0x01a2] = QChar(0x02D8);
|
||
|
map[0x01a3] = QChar(0x0141);
|
||
|
map[0x01a5] = QChar(0x013D);
|
||
|
map[0x01a6] = QChar(0x015A);
|
||
|
map[0x01a9] = QChar(0x0160);
|
||
|
map[0x01aa] = QChar(0x015E);
|
||
|
map[0x01ab] = QChar(0x0164);
|
||
|
map[0x01ac] = QChar(0x0179);
|
||
|
map[0x01ae] = QChar(0x017D);
|
||
|
map[0x01af] = QChar(0x017B);
|
||
|
map[0x01b1] = QChar(0x0105);
|
||
|
map[0x01b2] = QChar(0x02DB);
|
||
|
map[0x01b3] = QChar(0x0142);
|
||
|
map[0x01b5] = QChar(0x013E);
|
||
|
map[0x01b6] = QChar(0x015B);
|
||
|
map[0x01b7] = QChar(0x02C7);
|
||
|
map[0x01b9] = QChar(0x0161);
|
||
|
map[0x01ba] = QChar(0x015F);
|
||
|
map[0x01bb] = QChar(0x0165);
|
||
|
map[0x01bc] = QChar(0x017A);
|
||
|
map[0x01bd] = QChar(0x02DD);
|
||
|
map[0x01be] = QChar(0x017E);
|
||
|
map[0x01bf] = QChar(0x017C);
|
||
|
map[0x01c0] = QChar(0x0154);
|
||
|
map[0x01c3] = QChar(0x0102);
|
||
|
map[0x01c5] = QChar(0x0139);
|
||
|
map[0x01c6] = QChar(0x0106);
|
||
|
map[0x01c8] = QChar(0x010C);
|
||
|
map[0x01ca] = QChar(0x0118);
|
||
|
map[0x01cc] = QChar(0x011A);
|
||
|
map[0x01cf] = QChar(0x010E);
|
||
|
map[0x01d0] = QChar(0x0110);
|
||
|
map[0x01d1] = QChar(0x0143);
|
||
|
map[0x01d2] = QChar(0x0147);
|
||
|
map[0x01d5] = QChar(0x0150);
|
||
|
map[0x01d8] = QChar(0x0158);
|
||
|
map[0x01d9] = QChar(0x016E);
|
||
|
map[0x01db] = QChar(0x0170);
|
||
|
map[0x01de] = QChar(0x0162);
|
||
|
map[0x01e0] = QChar(0x0155);
|
||
|
map[0x01e3] = QChar(0x0103);
|
||
|
map[0x01e5] = QChar(0x013A);
|
||
|
map[0x01e6] = QChar(0x0107);
|
||
|
map[0x01e8] = QChar(0x010D);
|
||
|
map[0x01ea] = QChar(0x0119);
|
||
|
map[0x01ec] = QChar(0x011B);
|
||
|
map[0x01ef] = QChar(0x010F);
|
||
|
map[0x01f0] = QChar(0x0111);
|
||
|
map[0x01f1] = QChar(0x0144);
|
||
|
map[0x01f2] = QChar(0x0148);
|
||
|
map[0x01f5] = QChar(0x0151);
|
||
|
map[0x01f8] = QChar(0x0159);
|
||
|
map[0x01f9] = QChar(0x016F);
|
||
|
map[0x01fb] = QChar(0x0171);
|
||
|
map[0x01fe] = QChar(0x0163);
|
||
|
map[0x01ff] = QChar(0x02D9);
|
||
|
map[0x02a1] = QChar(0x0126);
|
||
|
map[0x02a6] = QChar(0x0124);
|
||
|
map[0x02a9] = QChar(0x0130);
|
||
|
map[0x02ab] = QChar(0x011E);
|
||
|
map[0x02ac] = QChar(0x0134);
|
||
|
map[0x02b1] = QChar(0x0127);
|
||
|
map[0x02b6] = QChar(0x0125);
|
||
|
map[0x02b9] = QChar(0x0131);
|
||
|
map[0x02bb] = QChar(0x011F);
|
||
|
map[0x02bc] = QChar(0x0135);
|
||
|
map[0x02c5] = QChar(0x010A);
|
||
|
map[0x02c6] = QChar(0x0108);
|
||
|
map[0x02d5] = QChar(0x0120);
|
||
|
map[0x02d8] = QChar(0x011C);
|
||
|
map[0x02dd] = QChar(0x016C);
|
||
|
map[0x02de] = QChar(0x015C);
|
||
|
map[0x02e5] = QChar(0x010B);
|
||
|
map[0x02e6] = QChar(0x0109);
|
||
|
map[0x02f5] = QChar(0x0121);
|
||
|
map[0x02f8] = QChar(0x011D);
|
||
|
map[0x02fd] = QChar(0x016D);
|
||
|
map[0x02fe] = QChar(0x015D);
|
||
|
map[0x03a2] = QChar(0x0138);
|
||
|
map[0x03a3] = QChar(0x0156);
|
||
|
map[0x03a5] = QChar(0x0128);
|
||
|
map[0x03a6] = QChar(0x013B);
|
||
|
map[0x03aa] = QChar(0x0112);
|
||
|
map[0x03ab] = QChar(0x0122);
|
||
|
map[0x03ac] = QChar(0x0166);
|
||
|
map[0x03b3] = QChar(0x0157);
|
||
|
map[0x03b5] = QChar(0x0129);
|
||
|
map[0x03b6] = QChar(0x013C);
|
||
|
map[0x03ba] = QChar(0x0113);
|
||
|
map[0x03bb] = QChar(0x0123);
|
||
|
map[0x03bc] = QChar(0x0167);
|
||
|
map[0x03bd] = QChar(0x014A);
|
||
|
map[0x03bf] = QChar(0x014B);
|
||
|
map[0x03c0] = QChar(0x0100);
|
||
|
map[0x03c7] = QChar(0x012E);
|
||
|
map[0x03cc] = QChar(0x0116);
|
||
|
map[0x03cf] = QChar(0x012A);
|
||
|
map[0x03d1] = QChar(0x0145);
|
||
|
map[0x03d2] = QChar(0x014C);
|
||
|
map[0x03d3] = QChar(0x0136);
|
||
|
map[0x03d9] = QChar(0x0172);
|
||
|
map[0x03dd] = QChar(0x0168);
|
||
|
map[0x03de] = QChar(0x016A);
|
||
|
map[0x03e0] = QChar(0x0101);
|
||
|
map[0x03e7] = QChar(0x012F);
|
||
|
map[0x03ec] = QChar(0x0117);
|
||
|
map[0x03ef] = QChar(0x012B);
|
||
|
map[0x03f1] = QChar(0x0146);
|
||
|
map[0x03f2] = QChar(0x014D);
|
||
|
map[0x03f3] = QChar(0x0137);
|
||
|
map[0x03f9] = QChar(0x0173);
|
||
|
map[0x03fd] = QChar(0x0169);
|
||
|
map[0x03fe] = QChar(0x016B);
|
||
|
map[0x047e] = QChar(0x203E);
|
||
|
map[0x04a1] = QChar(0x3002);
|
||
|
map[0x04a2] = QChar(0x300C);
|
||
|
map[0x04a3] = QChar(0x300D);
|
||
|
map[0x04a4] = QChar(0x3001);
|
||
|
map[0x04a5] = QChar(0x30FB);
|
||
|
map[0x04a6] = QChar(0x30F2);
|
||
|
map[0x04a7] = QChar(0x30A1);
|
||
|
map[0x04a8] = QChar(0x30A3);
|
||
|
map[0x04a9] = QChar(0x30A5);
|
||
|
map[0x04aa] = QChar(0x30A7);
|
||
|
map[0x04ab] = QChar(0x30A9);
|
||
|
map[0x04ac] = QChar(0x30E3);
|
||
|
map[0x04ad] = QChar(0x30E5);
|
||
|
map[0x04ae] = QChar(0x30E7);
|
||
|
map[0x04af] = QChar(0x30C3);
|
||
|
map[0x04b0] = QChar(0x30FC);
|
||
|
map[0x04b1] = QChar(0x30A2);
|
||
|
map[0x04b2] = QChar(0x30A4);
|
||
|
map[0x04b3] = QChar(0x30A6);
|
||
|
map[0x04b4] = QChar(0x30A8);
|
||
|
map[0x04b5] = QChar(0x30AA);
|
||
|
map[0x04b6] = QChar(0x30AB);
|
||
|
map[0x04b7] = QChar(0x30AD);
|
||
|
map[0x04b8] = QChar(0x30AF);
|
||
|
map[0x04b9] = QChar(0x30B1);
|
||
|
map[0x04ba] = QChar(0x30B3);
|
||
|
map[0x04bb] = QChar(0x30B5);
|
||
|
map[0x04bc] = QChar(0x30B7);
|
||
|
map[0x04bd] = QChar(0x30B9);
|
||
|
map[0x04be] = QChar(0x30BB);
|
||
|
map[0x04bf] = QChar(0x30BD);
|
||
|
map[0x04c0] = QChar(0x30BF);
|
||
|
map[0x04c1] = QChar(0x30C1);
|
||
|
map[0x04c2] = QChar(0x30C4);
|
||
|
map[0x04c3] = QChar(0x30C6);
|
||
|
map[0x04c4] = QChar(0x30C8);
|
||
|
map[0x04c5] = QChar(0x30CA);
|
||
|
map[0x04c6] = QChar(0x30CB);
|
||
|
map[0x04c7] = QChar(0x30CC);
|
||
|
map[0x04c8] = QChar(0x30CD);
|
||
|
map[0x04c9] = QChar(0x30CE);
|
||
|
map[0x04ca] = QChar(0x30CF);
|
||
|
map[0x04cb] = QChar(0x30D2);
|
||
|
map[0x04cc] = QChar(0x30D5);
|
||
|
map[0x04cd] = QChar(0x30D8);
|
||
|
map[0x04ce] = QChar(0x30DB);
|
||
|
map[0x04cf] = QChar(0x30DE);
|
||
|
map[0x04d0] = QChar(0x30DF);
|
||
|
map[0x04d1] = QChar(0x30E0);
|
||
|
map[0x04d2] = QChar(0x30E1);
|
||
|
map[0x04d3] = QChar(0x30E2);
|
||
|
map[0x04d4] = QChar(0x30E4);
|
||
|
map[0x04d5] = QChar(0x30E6);
|
||
|
map[0x04d6] = QChar(0x30E8);
|
||
|
map[0x04d7] = QChar(0x30E9);
|
||
|
map[0x04d8] = QChar(0x30EA);
|
||
|
map[0x04d9] = QChar(0x30EB);
|
||
|
map[0x04da] = QChar(0x30EC);
|
||
|
map[0x04db] = QChar(0x30ED);
|
||
|
map[0x04dc] = QChar(0x30EF);
|
||
|
map[0x04dd] = QChar(0x30F3);
|
||
|
map[0x04de] = QChar(0x309B);
|
||
|
map[0x04df] = QChar(0x309C);
|
||
|
map[0x05ac] = QChar(0x060C);
|
||
|
map[0x05bb] = QChar(0x061B);
|
||
|
map[0x05bf] = QChar(0x061F);
|
||
|
map[0x05c1] = QChar(0x0621);
|
||
|
map[0x05c2] = QChar(0x0622);
|
||
|
map[0x05c3] = QChar(0x0623);
|
||
|
map[0x05c4] = QChar(0x0624);
|
||
|
map[0x05c5] = QChar(0x0625);
|
||
|
map[0x05c6] = QChar(0x0626);
|
||
|
map[0x05c7] = QChar(0x0627);
|
||
|
map[0x05c8] = QChar(0x0628);
|
||
|
map[0x05c9] = QChar(0x0629);
|
||
|
map[0x05ca] = QChar(0x062A);
|
||
|
map[0x05cb] = QChar(0x062B);
|
||
|
map[0x05cc] = QChar(0x062C);
|
||
|
map[0x05cd] = QChar(0x062D);
|
||
|
map[0x05ce] = QChar(0x062E);
|
||
|
map[0x05cf] = QChar(0x062F);
|
||
|
map[0x05d0] = QChar(0x0630);
|
||
|
map[0x05d1] = QChar(0x0631);
|
||
|
map[0x05d2] = QChar(0x0632);
|
||
|
map[0x05d3] = QChar(0x0633);
|
||
|
map[0x05d4] = QChar(0x0634);
|
||
|
map[0x05d5] = QChar(0x0635);
|
||
|
map[0x05d6] = QChar(0x0636);
|
||
|
map[0x05d7] = QChar(0x0637);
|
||
|
map[0x05d8] = QChar(0x0638);
|
||
|
map[0x05d9] = QChar(0x0639);
|
||
|
map[0x05da] = QChar(0x063A);
|
||
|
map[0x05e0] = QChar(0x0640);
|
||
|
map[0x05e1] = QChar(0x0641);
|
||
|
map[0x05e2] = QChar(0x0642);
|
||
|
map[0x05e3] = QChar(0x0643);
|
||
|
map[0x05e4] = QChar(0x0644);
|
||
|
map[0x05e5] = QChar(0x0645);
|
||
|
map[0x05e6] = QChar(0x0646);
|
||
|
map[0x05e7] = QChar(0x0647);
|
||
|
map[0x05e8] = QChar(0x0648);
|
||
|
map[0x05e9] = QChar(0x0649);
|
||
|
map[0x05ea] = QChar(0x064A);
|
||
|
map[0x05eb] = QChar(0x064B);
|
||
|
map[0x05ec] = QChar(0x064C);
|
||
|
map[0x05ed] = QChar(0x064D);
|
||
|
map[0x05ee] = QChar(0x064E);
|
||
|
map[0x05ef] = QChar(0x064F);
|
||
|
map[0x05f0] = QChar(0x0650);
|
||
|
map[0x05f1] = QChar(0x0651);
|
||
|
map[0x05f2] = QChar(0x0652);
|
||
|
map[0x06a1] = QChar(0x0452);
|
||
|
map[0x06a2] = QChar(0x0453);
|
||
|
map[0x06a3] = QChar(0x0451);
|
||
|
map[0x06a4] = QChar(0x0454);
|
||
|
map[0x06a5] = QChar(0x0455);
|
||
|
map[0x06a6] = QChar(0x0456);
|
||
|
map[0x06a7] = QChar(0x0457);
|
||
|
map[0x06a8] = QChar(0x0458);
|
||
|
map[0x06a9] = QChar(0x0459);
|
||
|
map[0x06aa] = QChar(0x045A);
|
||
|
map[0x06ab] = QChar(0x045B);
|
||
|
map[0x06ac] = QChar(0x045C);
|
||
|
map[0x06ad] = QChar(0x0491);
|
||
|
map[0x06ae] = QChar(0x045E);
|
||
|
map[0x06af] = QChar(0x045F);
|
||
|
map[0x06b0] = QChar(0x2116);
|
||
|
map[0x06b1] = QChar(0x0402);
|
||
|
map[0x06b2] = QChar(0x0403);
|
||
|
map[0x06b3] = QChar(0x0401);
|
||
|
map[0x06b4] = QChar(0x0404);
|
||
|
map[0x06b5] = QChar(0x0405);
|
||
|
map[0x06b6] = QChar(0x0406);
|
||
|
map[0x06b7] = QChar(0x0407);
|
||
|
map[0x06b8] = QChar(0x0408);
|
||
|
map[0x06b9] = QChar(0x0409);
|
||
|
map[0x06ba] = QChar(0x040A);
|
||
|
map[0x06bb] = QChar(0x040B);
|
||
|
map[0x06bc] = QChar(0x040C);
|
||
|
map[0x06bd] = QChar(0x0490);
|
||
|
map[0x06be] = QChar(0x040E);
|
||
|
map[0x06bf] = QChar(0x040F);
|
||
|
map[0x06c0] = QChar(0x044E);
|
||
|
map[0x06c1] = QChar(0x0430);
|
||
|
map[0x06c2] = QChar(0x0431);
|
||
|
map[0x06c3] = QChar(0x0446);
|
||
|
map[0x06c4] = QChar(0x0434);
|
||
|
map[0x06c5] = QChar(0x0435);
|
||
|
map[0x06c6] = QChar(0x0444);
|
||
|
map[0x06c7] = QChar(0x0433);
|
||
|
map[0x06c8] = QChar(0x0445);
|
||
|
map[0x06c9] = QChar(0x0438);
|
||
|
map[0x06ca] = QChar(0x0439);
|
||
|
map[0x06cb] = QChar(0x043A);
|
||
|
map[0x06cc] = QChar(0x043B);
|
||
|
map[0x06cd] = QChar(0x043C);
|
||
|
map[0x06ce] = QChar(0x043D);
|
||
|
map[0x06cf] = QChar(0x043E);
|
||
|
map[0x06d0] = QChar(0x043F);
|
||
|
map[0x06d1] = QChar(0x044F);
|
||
|
map[0x06d2] = QChar(0x0440);
|
||
|
map[0x06d3] = QChar(0x0441);
|
||
|
map[0x06d4] = QChar(0x0442);
|
||
|
map[0x06d5] = QChar(0x0443);
|
||
|
map[0x06d6] = QChar(0x0436);
|
||
|
map[0x06d7] = QChar(0x0432);
|
||
|
map[0x06d8] = QChar(0x044C);
|
||
|
map[0x06d9] = QChar(0x044B);
|
||
|
map[0x06da] = QChar(0x0437);
|
||
|
map[0x06db] = QChar(0x0448);
|
||
|
map[0x06dc] = QChar(0x044D);
|
||
|
map[0x06dd] = QChar(0x0449);
|
||
|
map[0x06de] = QChar(0x0447);
|
||
|
map[0x06df] = QChar(0x044A);
|
||
|
map[0x06e0] = QChar(0x042E);
|
||
|
map[0x06e1] = QChar(0x0410);
|
||
|
map[0x06e2] = QChar(0x0411);
|
||
|
map[0x06e3] = QChar(0x0426);
|
||
|
map[0x06e4] = QChar(0x0414);
|
||
|
map[0x06e5] = QChar(0x0415);
|
||
|
map[0x06e6] = QChar(0x0424);
|
||
|
map[0x06e7] = QChar(0x0413);
|
||
|
map[0x06e8] = QChar(0x0425);
|
||
|
map[0x06e9] = QChar(0x0418);
|
||
|
map[0x06ea] = QChar(0x0419);
|
||
|
map[0x06eb] = QChar(0x041A);
|
||
|
map[0x06ec] = QChar(0x041B);
|
||
|
map[0x06ed] = QChar(0x041C);
|
||
|
map[0x06ee] = QChar(0x041D);
|
||
|
map[0x06ef] = QChar(0x041E);
|
||
|
map[0x06f0] = QChar(0x041F);
|
||
|
map[0x06f1] = QChar(0x042F);
|
||
|
map[0x06f2] = QChar(0x0420);
|
||
|
map[0x06f3] = QChar(0x0421);
|
||
|
map[0x06f4] = QChar(0x0422);
|
||
|
map[0x06f5] = QChar(0x0423);
|
||
|
map[0x06f6] = QChar(0x0416);
|
||
|
map[0x06f7] = QChar(0x0412);
|
||
|
map[0x06f8] = QChar(0x042C);
|
||
|
map[0x06f9] = QChar(0x042B);
|
||
|
map[0x06fa] = QChar(0x0417);
|
||
|
map[0x06fb] = QChar(0x0428);
|
||
|
map[0x06fc] = QChar(0x042D);
|
||
|
map[0x06fd] = QChar(0x0429);
|
||
|
map[0x06fe] = QChar(0x0427);
|
||
|
map[0x06ff] = QChar(0x042A);
|
||
|
map[0x07a1] = QChar(0x0386);
|
||
|
map[0x07a2] = QChar(0x0388);
|
||
|
map[0x07a3] = QChar(0x0389);
|
||
|
map[0x07a4] = QChar(0x038A);
|
||
|
map[0x07a5] = QChar(0x03AA);
|
||
|
map[0x07a7] = QChar(0x038C);
|
||
|
map[0x07a8] = QChar(0x038E);
|
||
|
map[0x07a9] = QChar(0x03AB);
|
||
|
map[0x07ab] = QChar(0x038F);
|
||
|
map[0x07ae] = QChar(0x0385);
|
||
|
map[0x07af] = QChar(0x2015);
|
||
|
map[0x07b1] = QChar(0x03AC);
|
||
|
map[0x07b2] = QChar(0x03AD);
|
||
|
map[0x07b3] = QChar(0x03AE);
|
||
|
map[0x07b4] = QChar(0x03AF);
|
||
|
map[0x07b5] = QChar(0x03CA);
|
||
|
map[0x07b6] = QChar(0x0390);
|
||
|
map[0x07b7] = QChar(0x03CC);
|
||
|
map[0x07b8] = QChar(0x03CD);
|
||
|
map[0x07b9] = QChar(0x03CB);
|
||
|
map[0x07ba] = QChar(0x03B0);
|
||
|
map[0x07bb] = QChar(0x03CE);
|
||
|
map[0x07c1] = QChar(0x0391);
|
||
|
map[0x07c2] = QChar(0x0392);
|
||
|
map[0x07c3] = QChar(0x0393);
|
||
|
map[0x07c4] = QChar(0x0394);
|
||
|
map[0x07c5] = QChar(0x0395);
|
||
|
map[0x07c6] = QChar(0x0396);
|
||
|
map[0x07c7] = QChar(0x0397);
|
||
|
map[0x07c8] = QChar(0x0398);
|
||
|
map[0x07c9] = QChar(0x0399);
|
||
|
map[0x07ca] = QChar(0x039A);
|
||
|
map[0x07cb] = QChar(0x039B);
|
||
|
map[0x07cb] = QChar(0x039B);
|
||
|
map[0x07cc] = QChar(0x039C);
|
||
|
map[0x07cd] = QChar(0x039D);
|
||
|
map[0x07ce] = QChar(0x039E);
|
||
|
map[0x07cf] = QChar(0x039F);
|
||
|
map[0x07d0] = QChar(0x03A0);
|
||
|
map[0x07d1] = QChar(0x03A1);
|
||
|
map[0x07d2] = QChar(0x03A3);
|
||
|
map[0x07d4] = QChar(0x03A4);
|
||
|
map[0x07d5] = QChar(0x03A5);
|
||
|
map[0x07d6] = QChar(0x03A6);
|
||
|
map[0x07d7] = QChar(0x03A7);
|
||
|
map[0x07d8] = QChar(0x03A8);
|
||
|
map[0x07d9] = QChar(0x03A9);
|
||
|
map[0x07e1] = QChar(0x03B1);
|
||
|
map[0x07e2] = QChar(0x03B2);
|
||
|
map[0x07e3] = QChar(0x03B3);
|
||
|
map[0x07e4] = QChar(0x03B4);
|
||
|
map[0x07e5] = QChar(0x03B5);
|
||
|
map[0x07e6] = QChar(0x03B6);
|
||
|
map[0x07e7] = QChar(0x03B7);
|
||
|
map[0x07e8] = QChar(0x03B8);
|
||
|
map[0x07e9] = QChar(0x03B9);
|
||
|
map[0x07ea] = QChar(0x03BA);
|
||
|
map[0x07eb] = QChar(0x03BB);
|
||
|
map[0x07eb] = QChar(0x03BB);
|
||
|
map[0x07ec] = QChar(0x03BC);
|
||
|
map[0x07ed] = QChar(0x03BD);
|
||
|
map[0x07ee] = QChar(0x03BE);
|
||
|
map[0x07ef] = QChar(0x03BF);
|
||
|
map[0x07f0] = QChar(0x03C0);
|
||
|
map[0x07f1] = QChar(0x03C1);
|
||
|
map[0x07f2] = QChar(0x03C3);
|
||
|
map[0x07f3] = QChar(0x03C2);
|
||
|
map[0x07f4] = QChar(0x03C4);
|
||
|
map[0x07f5] = QChar(0x03C5);
|
||
|
map[0x07f6] = QChar(0x03C6);
|
||
|
map[0x07f7] = QChar(0x03C7);
|
||
|
map[0x07f8] = QChar(0x03C8);
|
||
|
map[0x07f9] = QChar(0x03C9);
|
||
|
map[0x08a1] = QChar(0x23B7);
|
||
|
map[0x08a4] = QChar(0x2320);
|
||
|
map[0x08a5] = QChar(0x2321);
|
||
|
map[0x08a7] = QChar(0x23A1);
|
||
|
map[0x08a8] = QChar(0x23A3);
|
||
|
map[0x08a9] = QChar(0x23A4);
|
||
|
map[0x08aa] = QChar(0x23A6);
|
||
|
map[0x08ab] = QChar(0x239B);
|
||
|
map[0x08ac] = QChar(0x239D);
|
||
|
map[0x08ad] = QChar(0x239E);
|
||
|
map[0x08ae] = QChar(0x23A0);
|
||
|
map[0x08af] = QChar(0x23A8);
|
||
|
map[0x08b0] = QChar(0x23AC);
|
||
|
map[0x08bc] = QChar(0x2264);
|
||
|
map[0x08bd] = QChar(0x2260);
|
||
|
map[0x08be] = QChar(0x2265);
|
||
|
map[0x08bf] = QChar(0x222B);
|
||
|
map[0x08c0] = QChar(0x2234);
|
||
|
map[0x08c1] = QChar(0x221D);
|
||
|
map[0x08c2] = QChar(0x221E);
|
||
|
map[0x08c5] = QChar(0x2207);
|
||
|
map[0x08c8] = QChar(0x223C);
|
||
|
map[0x08c9] = QChar(0x2243);
|
||
|
map[0x08cd] = QChar(0x21D4);
|
||
|
map[0x08ce] = QChar(0x21D2);
|
||
|
map[0x08cf] = QChar(0x2261);
|
||
|
map[0x08d6] = QChar(0x221A);
|
||
|
map[0x08da] = QChar(0x2282);
|
||
|
map[0x08db] = QChar(0x2283);
|
||
|
map[0x08dc] = QChar(0x2229);
|
||
|
map[0x08dd] = QChar(0x222A);
|
||
|
map[0x08de] = QChar(0x2227);
|
||
|
map[0x08df] = QChar(0x2228);
|
||
|
map[0x08ef] = QChar(0x2202);
|
||
|
map[0x08f6] = QChar(0x0192);
|
||
|
map[0x08fb] = QChar(0x2190);
|
||
|
map[0x08fc] = QChar(0x2191);
|
||
|
map[0x08fd] = QChar(0x2192);
|
||
|
map[0x08fe] = QChar(0x2193);
|
||
|
map[0x09e0] = QChar(0x25C6);
|
||
|
map[0x09e1] = QChar(0x2592);
|
||
|
map[0x09e2] = QChar(0x2409);
|
||
|
map[0x09e3] = QChar(0x240C);
|
||
|
map[0x09e4] = QChar(0x240D);
|
||
|
map[0x09e5] = QChar(0x240A);
|
||
|
map[0x09e8] = QChar(0x2424);
|
||
|
map[0x09e9] = QChar(0x240B);
|
||
|
map[0x09ea] = QChar(0x2518);
|
||
|
map[0x09eb] = QChar(0x2510);
|
||
|
map[0x09ec] = QChar(0x250C);
|
||
|
map[0x09ed] = QChar(0x2514);
|
||
|
map[0x09ee] = QChar(0x253C);
|
||
|
map[0x09ef] = QChar(0x23BA);
|
||
|
map[0x09f0] = QChar(0x23BB);
|
||
|
map[0x09f1] = QChar(0x2500);
|
||
|
map[0x09f2] = QChar(0x23BC);
|
||
|
map[0x09f3] = QChar(0x23BD);
|
||
|
map[0x09f4] = QChar(0x251C);
|
||
|
map[0x09f5] = QChar(0x2524);
|
||
|
map[0x09f6] = QChar(0x2534);
|
||
|
map[0x09f7] = QChar(0x252C);
|
||
|
map[0x09f8] = QChar(0x2502);
|
||
|
map[0x0aa1] = QChar(0x2003);
|
||
|
map[0x0aa2] = QChar(0x2002);
|
||
|
map[0x0aa3] = QChar(0x2004);
|
||
|
map[0x0aa4] = QChar(0x2005);
|
||
|
map[0x0aa5] = QChar(0x2007);
|
||
|
map[0x0aa6] = QChar(0x2008);
|
||
|
map[0x0aa7] = QChar(0x2009);
|
||
|
map[0x0aa8] = QChar(0x200A);
|
||
|
map[0x0aa9] = QChar(0x2014);
|
||
|
map[0x0aaa] = QChar(0x2013);
|
||
|
map[0x0aae] = QChar(0x2026);
|
||
|
map[0x0aaf] = QChar(0x2025);
|
||
|
map[0x0ab0] = QChar(0x2153);
|
||
|
map[0x0ab1] = QChar(0x2154);
|
||
|
map[0x0ab2] = QChar(0x2155);
|
||
|
map[0x0ab3] = QChar(0x2156);
|
||
|
map[0x0ab4] = QChar(0x2157);
|
||
|
map[0x0ab5] = QChar(0x2158);
|
||
|
map[0x0ab6] = QChar(0x2159);
|
||
|
map[0x0ab7] = QChar(0x215A);
|
||
|
map[0x0ab8] = QChar(0x2105);
|
||
|
map[0x0abb] = QChar(0x2012);
|
||
|
map[0x0ac3] = QChar(0x215B);
|
||
|
map[0x0ac4] = QChar(0x215C);
|
||
|
map[0x0ac5] = QChar(0x215D);
|
||
|
map[0x0ac6] = QChar(0x215E);
|
||
|
map[0x0ac9] = QChar(0x2122);
|
||
|
map[0x0ad0] = QChar(0x2018);
|
||
|
map[0x0ad1] = QChar(0x2019);
|
||
|
map[0x0ad2] = QChar(0x201C);
|
||
|
map[0x0ad3] = QChar(0x201D);
|
||
|
map[0x0ad4] = QChar(0x211E);
|
||
|
map[0x0ad6] = QChar(0x2032);
|
||
|
map[0x0ad7] = QChar(0x2033);
|
||
|
map[0x0ad9] = QChar(0x271D);
|
||
|
map[0x0aec] = QChar(0x2663);
|
||
|
map[0x0aed] = QChar(0x2666);
|
||
|
map[0x0aee] = QChar(0x2665);
|
||
|
map[0x0af0] = QChar(0x2720);
|
||
|
map[0x0af1] = QChar(0x2020);
|
||
|
map[0x0af2] = QChar(0x2021);
|
||
|
map[0x0af3] = QChar(0x2713);
|
||
|
map[0x0af4] = QChar(0x2717);
|
||
|
map[0x0af5] = QChar(0x266F);
|
||
|
map[0x0af6] = QChar(0x266D);
|
||
|
map[0x0af7] = QChar(0x2642);
|
||
|
map[0x0af8] = QChar(0x2640);
|
||
|
map[0x0af9] = QChar(0x260E);
|
||
|
map[0x0afa] = QChar(0x2315);
|
||
|
map[0x0afb] = QChar(0x2117);
|
||
|
map[0x0afc] = QChar(0x2038);
|
||
|
map[0x0afd] = QChar(0x201A);
|
||
|
map[0x0afe] = QChar(0x201E);
|
||
|
map[0x0bc2] = QChar(0x22A4);
|
||
|
map[0x0bc4] = QChar(0x230A);
|
||
|
map[0x0bca] = QChar(0x2218);
|
||
|
map[0x0bcc] = QChar(0x2395);
|
||
|
map[0x0bce] = QChar(0x22A5);
|
||
|
map[0x0bcf] = QChar(0x25CB);
|
||
|
map[0x0bd3] = QChar(0x2308);
|
||
|
map[0x0bdc] = QChar(0x22A3);
|
||
|
map[0x0bfc] = QChar(0x22A2);
|
||
|
map[0x0cdf] = QChar(0x2017);
|
||
|
map[0x0ce0] = QChar(0x05D0);
|
||
|
map[0x0ce1] = QChar(0x05D1);
|
||
|
map[0x0ce2] = QChar(0x05D2);
|
||
|
map[0x0ce3] = QChar(0x05D3);
|
||
|
map[0x0ce4] = QChar(0x05D4);
|
||
|
map[0x0ce5] = QChar(0x05D5);
|
||
|
map[0x0ce6] = QChar(0x05D6);
|
||
|
map[0x0ce7] = QChar(0x05D7);
|
||
|
map[0x0ce8] = QChar(0x05D8);
|
||
|
map[0x0ce9] = QChar(0x05D9);
|
||
|
map[0x0cea] = QChar(0x05DA);
|
||
|
map[0x0ceb] = QChar(0x05DB);
|
||
|
map[0x0cec] = QChar(0x05DC);
|
||
|
map[0x0ced] = QChar(0x05DD);
|
||
|
map[0x0cee] = QChar(0x05DE);
|
||
|
map[0x0cef] = QChar(0x05DF);
|
||
|
map[0x0cf0] = QChar(0x05E0);
|
||
|
map[0x0cf1] = QChar(0x05E1);
|
||
|
map[0x0cf2] = QChar(0x05E2);
|
||
|
map[0x0cf3] = QChar(0x05E3);
|
||
|
map[0x0cf4] = QChar(0x05E4);
|
||
|
map[0x0cf5] = QChar(0x05E5);
|
||
|
map[0x0cf6] = QChar(0x05E6);
|
||
|
map[0x0cf7] = QChar(0x05E7);
|
||
|
map[0x0cf8] = QChar(0x05E8);
|
||
|
map[0x0cf9] = QChar(0x05E9);
|
||
|
map[0x0cfa] = QChar(0x05EA);
|
||
|
map[0x0da1] = QChar(0x0E01);
|
||
|
map[0x0da2] = QChar(0x0E02);
|
||
|
map[0x0da3] = QChar(0x0E03);
|
||
|
map[0x0da4] = QChar(0x0E04);
|
||
|
map[0x0da5] = QChar(0x0E05);
|
||
|
map[0x0da6] = QChar(0x0E06);
|
||
|
map[0x0da7] = QChar(0x0E07);
|
||
|
map[0x0da8] = QChar(0x0E08);
|
||
|
map[0x0da9] = QChar(0x0E09);
|
||
|
map[0x0daa] = QChar(0x0E0A);
|
||
|
map[0x0dab] = QChar(0x0E0B);
|
||
|
map[0x0dac] = QChar(0x0E0C);
|
||
|
map[0x0dad] = QChar(0x0E0D);
|
||
|
map[0x0dae] = QChar(0x0E0E);
|
||
|
map[0x0daf] = QChar(0x0E0F);
|
||
|
map[0x0db0] = QChar(0x0E10);
|
||
|
map[0x0db1] = QChar(0x0E11);
|
||
|
map[0x0db2] = QChar(0x0E12);
|
||
|
map[0x0db3] = QChar(0x0E13);
|
||
|
map[0x0db4] = QChar(0x0E14);
|
||
|
map[0x0db5] = QChar(0x0E15);
|
||
|
map[0x0db6] = QChar(0x0E16);
|
||
|
map[0x0db7] = QChar(0x0E17);
|
||
|
map[0x0db8] = QChar(0x0E18);
|
||
|
map[0x0db9] = QChar(0x0E19);
|
||
|
map[0x0dba] = QChar(0x0E1A);
|
||
|
map[0x0dbb] = QChar(0x0E1B);
|
||
|
map[0x0dbc] = QChar(0x0E1C);
|
||
|
map[0x0dbd] = QChar(0x0E1D);
|
||
|
map[0x0dbe] = QChar(0x0E1E);
|
||
|
map[0x0dbf] = QChar(0x0E1F);
|
||
|
map[0x0dc0] = QChar(0x0E20);
|
||
|
map[0x0dc1] = QChar(0x0E21);
|
||
|
map[0x0dc2] = QChar(0x0E22);
|
||
|
map[0x0dc3] = QChar(0x0E23);
|
||
|
map[0x0dc4] = QChar(0x0E24);
|
||
|
map[0x0dc5] = QChar(0x0E25);
|
||
|
map[0x0dc6] = QChar(0x0E26);
|
||
|
map[0x0dc7] = QChar(0x0E27);
|
||
|
map[0x0dc8] = QChar(0x0E28);
|
||
|
map[0x0dc9] = QChar(0x0E29);
|
||
|
map[0x0dca] = QChar(0x0E2A);
|
||
|
map[0x0dcb] = QChar(0x0E2B);
|
||
|
map[0x0dcc] = QChar(0x0E2C);
|
||
|
map[0x0dcd] = QChar(0x0E2D);
|
||
|
map[0x0dce] = QChar(0x0E2E);
|
||
|
map[0x0dcf] = QChar(0x0E2F);
|
||
|
map[0x0dd0] = QChar(0x0E30);
|
||
|
map[0x0dd1] = QChar(0x0E31);
|
||
|
map[0x0dd2] = QChar(0x0E32);
|
||
|
map[0x0dd3] = QChar(0x0E33);
|
||
|
map[0x0dd4] = QChar(0x0E34);
|
||
|
map[0x0dd5] = QChar(0x0E35);
|
||
|
map[0x0dd6] = QChar(0x0E36);
|
||
|
map[0x0dd7] = QChar(0x0E37);
|
||
|
map[0x0dd8] = QChar(0x0E38);
|
||
|
map[0x0dd9] = QChar(0x0E39);
|
||
|
map[0x0dda] = QChar(0x0E3A);
|
||
|
map[0x0ddf] = QChar(0x0E3F);
|
||
|
map[0x0de0] = QChar(0x0E40);
|
||
|
map[0x0de1] = QChar(0x0E41);
|
||
|
map[0x0de2] = QChar(0x0E42);
|
||
|
map[0x0de3] = QChar(0x0E43);
|
||
|
map[0x0de4] = QChar(0x0E44);
|
||
|
map[0x0de5] = QChar(0x0E45);
|
||
|
map[0x0de6] = QChar(0x0E46);
|
||
|
map[0x0de7] = QChar(0x0E47);
|
||
|
map[0x0de8] = QChar(0x0E48);
|
||
|
map[0x0de9] = QChar(0x0E49);
|
||
|
map[0x0dea] = QChar(0x0E4A);
|
||
|
map[0x0deb] = QChar(0x0E4B);
|
||
|
map[0x0dec] = QChar(0x0E4C);
|
||
|
map[0x0ded] = QChar(0x0E4D);
|
||
|
map[0x0df0] = QChar(0x0E50);
|
||
|
map[0x0df1] = QChar(0x0E51);
|
||
|
map[0x0df2] = QChar(0x0E52);
|
||
|
map[0x0df3] = QChar(0x0E53);
|
||
|
map[0x0df4] = QChar(0x0E54);
|
||
|
map[0x0df5] = QChar(0x0E55);
|
||
|
map[0x0df6] = QChar(0x0E56);
|
||
|
map[0x0df7] = QChar(0x0E57);
|
||
|
map[0x0df8] = QChar(0x0E58);
|
||
|
map[0x0df9] = QChar(0x0E59);
|
||
|
map[0x13bc] = QChar(0x0152);
|
||
|
map[0x13bd] = QChar(0x0153);
|
||
|
map[0x13be] = QChar(0x0178);
|
||
|
map[0x20ac] = QChar(0x20AC);
|
||
|
}
|
||
|
}
|