/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project .
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License , v . 2 . 0 . If a copy of the MPL was not distributed with this
* file , You can obtain one at http : //mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice :
*
* Licensed to the Apache Software Foundation ( ASF ) under one or more
* contributor license agreements . See the NOTICE file distributed
* with this work for additional information regarding copyright
* ownership . The ASF licenses this file to you under the Apache
* License , Version 2 . 0 ( the " License " ) ; you may not use this file
* except in compliance with the License . You may obtain a copy of
* the License at http : //www.apache.org/licenses/LICENSE-2.0 .
*/
#include <X11/X.h>
#include <sal/types.h>
#include <unx/i18n_keysym.hxx>
// convert keysyms to unicode
// for all keysyms with byte1 and byte2 equal zero, and of course only for
// keysyms that have a unicode counterpart
namespace {
struct keymap_t {
const int first; const int last;
const sal_Unicode *map;
};
}
// Latin-1 Byte 3 = 0x00
const sal_Unicode keymap00_map[] = {
0 x0020, 0 x0021, 0 x0022, 0 x0023, 0 x0024, 0 x0025, 0 x0026, 0 x0027,
0 x0028, 0 x0029, 0 x002a, 0 x002b, 0 x002c, 0 x002d, 0 x002e, 0 x002f,
0 x0030, 0 x0031, 0 x0032, 0 x0033, 0 x0034, 0 x0035, 0 x0036, 0 x0037,
0 x0038, 0 x0039, 0 x003a, 0 x003b, 0 x003c, 0 x003d, 0 x003e, 0 x003f,
0 x0040, 0 x0041, 0 x0042, 0 x0043, 0 x0044, 0 x0045, 0 x0046, 0 x0047,
0 x0048, 0 x0049, 0 x004a, 0 x004b, 0 x004c, 0 x004d, 0 x004e, 0 x004f,
0 x0050, 0 x0051, 0 x0052, 0 x0053, 0 x0054, 0 x0055, 0 x0056, 0 x0057,
0 x0058, 0 x0059, 0 x005a, 0 x005b, 0 x005c, 0 x005d, 0 x005e, 0 x005f,
0 x0060, 0 x0061, 0 x0062, 0 x0063, 0 x0064, 0 x0065, 0 x0066, 0 x0067,
0 x0068, 0 x0069, 0 x006a, 0 x006b, 0 x006c, 0 x006d, 0 x006e, 0 x006f,
0 x0070, 0 x0071, 0 x0072, 0 x0073, 0 x0074, 0 x0075, 0 x0076, 0 x0077,
0 x0078, 0 x0079, 0 x007a, 0 x007b, 0 x007c, 0 x007d, 0 x007e, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x00a0, 0 x00a1, 0 x00a2, 0 x00a3, 0 x00a4, 0 x00a5, 0 x00a6, 0 x00a7,
0 x00a8, 0 x00a9, 0 x00aa, 0 x00ab, 0 x00ac, 0 x00ad, 0 x00ae, 0 x00af,
0 x00b0, 0 x00b1, 0 x00b2, 0 x00b3, 0 x00b4, 0 x00b5, 0 x00b6, 0 x00b7,
0 x00b8, 0 x00b9, 0 x00ba, 0 x00bb, 0 x00bc, 0 x00bd, 0 x00be, 0 x00bf,
0 x00c0, 0 x00c1, 0 x00c2, 0 x00c3, 0 x00c4, 0 x00c5, 0 x00c6, 0 x00c7,
0 x00c8, 0 x00c9, 0 x00ca, 0 x00cb, 0 x00cc, 0 x00cd, 0 x00ce, 0 x00cf,
0 x00d0, 0 x00d1, 0 x00d2, 0 x00d3, 0 x00d4, 0 x00d5, 0 x00d6, 0 x00d7,
0 x00d8, 0 x00d9, 0 x00da, 0 x00db, 0 x00dc, 0 x00dd, 0 x00de, 0 x00df,
0 x00e0, 0 x00e1, 0 x00e2, 0 x00e3, 0 x00e4, 0 x00e5, 0 x00e6, 0 x00e7,
0 x00e8, 0 x00e9, 0 x00ea, 0 x00eb, 0 x00ec, 0 x00ed, 0 x00ee, 0 x00ef,
0 x00f0, 0 x00f1, 0 x00f2, 0 x00f3, 0 x00f4, 0 x00f5, 0 x00f6, 0 x00f7,
0 x00f8, 0 x00f9, 0 x00fa, 0 x00fb, 0 x00fc, 0 x00fd, 0 x00fe, 0 x00ff };
const keymap_t keymap00 = { 32 , 255 , keymap00_map };
// Latin-2 Byte 3 = 0x01
const sal_Unicode keymap01_map[] = {
0 x0104, 0 x02d8, 0 x0141, 0 x0000, 0 x013d, 0 x015a, 0 x0000, 0 x0000,
0 x0160, 0 x015e, 0 x0164, 0 x0179, 0 x0000, 0 x017d, 0 x017b, 0 x0000,
0 x0105, 0 x02db, 0 x0142, 0 x0000, 0 x013e, 0 x015b, 0 x02c7, 0 x0000,
0 x0161, 0 x015f, 0 x0165, 0 x017a, 0 x02dd, 0 x017e, 0 x017c, 0 x0154,
0 x0000, 0 x0000, 0 x0102, 0 x0000, 0 x0139, 0 x0106, 0 x0000, 0 x010c,
0 x0000, 0 x0118, 0 x0000, 0 x011a, 0 x0000, 0 x0000, 0 x010e, 0 x0110,
0 x0143, 0 x0147, 0 x0000, 0 x0000, 0 x0150, 0 x0000, 0 x0000, 0 x0158,
0 x016e, 0 x0000, 0 x0170, 0 x0000, 0 x0000, 0 x0162, 0 x0000, 0 x0155,
0 x0000, 0 x0000, 0 x0103, 0 x0000, 0 x013a, 0 x0107, 0 x0000, 0 x010d,
0 x0000, 0 x0119, 0 x0000, 0 x011b, 0 x0000, 0 x0000, 0 x010f, 0 x0111,
0 x0144, 0 x0148, 0 x0000, 0 x0000, 0 x0151, 0 x0000, 0 x0000, 0 x0159,
0 x016f, 0 x0000, 0 x0171, 0 x0000, 0 x0000, 0 x0163, 0 x02d9 };
const keymap_t keymap01 = { 161 , 255 , keymap01_map };
// Latin-3 Byte 3 = 0x02
const sal_Unicode keymap02_map[] = {
0 x0126, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0124, 0 x0000, 0 x0000,
0 x0130, 0 x0000, 0 x011e, 0 x0134, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0127, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0125, 0 x0000, 0 x0000,
0 x0131, 0 x0000, 0 x011f, 0 x0135, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x010a, 0 x0108, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0120, 0 x0000, 0 x0000, 0 x011c,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x016c, 0 x015c, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x010b, 0 x0109, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0121, 0 x0000, 0 x0000, 0 x011d,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x016d, 0 x015d };
const keymap_t keymap02 = { 161 , 254 , keymap02_map };
// Latin-4 Byte 3 = 0x03
const sal_Unicode keymap03_map[] = {
0 x0138, 0 x0156, 0 x0000, 0 x0128, 0 x013b, 0 x0000, 0 x0000, 0 x0000,
0 x0112, 0 x0122, 0 x0166, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0000, 0 x0157, 0 x0000, 0 x0129, 0 x013c, 0 x0000, 0 x0000, 0 x0000,
0 x0113, 0 x0123, 0 x0167, 0 x014a, 0 x0000, 0 x014b, 0 x0100, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x012e, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0116, 0 x0000, 0 x0000, 0 x012a, 0 x0000, 0 x0145,
0 x014c, 0 x0136, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0172,
0 x0000, 0 x0000, 0 x0000, 0 x0168, 0 x016a, 0 x0000, 0 x0101, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x012f, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0117, 0 x0000, 0 x0000, 0 x012b, 0 x0000, 0 x0146,
0 x014d, 0 x0137, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0173,
0 x0000, 0 x0000, 0 x0000, 0 x0169, 0 x016b };
const keymap_t keymap03 = { 162 , 254 , keymap03_map };
// Kana Byte 3 = 0x04
const sal_Unicode keymap04_map[] = {
0 x203e, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x3002, 0 x300c, 0 x300d, 0 x3001, 0 x30fb,
0 x30f2, 0 x30a1, 0 x30a3, 0 x30a5, 0 x30a7, 0 x30a9, 0 x30e3, 0 x30e5,
0 x30e7, 0 x30c3, 0 x30fc, 0 x30a2, 0 x30a4, 0 x30a6, 0 x30a8, 0 x30aa,
0 x30ab, 0 x30ad, 0 x30af, 0 x30b1, 0 x30b3, 0 x30b5, 0 x30b7, 0 x30b9,
0 x30bb, 0 x30bd, 0 x30bf, 0 x30c1, 0 x30c4, 0 x30c6, 0 x30c8, 0 x30ca,
0 x30cb, 0 x30cc, 0 x30cd, 0 x30ce, 0 x30cf, 0 x30d2, 0 x30d5, 0 x30d8,
0 x30db, 0 x30de, 0 x30df, 0 x30e0, 0 x30e1, 0 x30e2, 0 x30e4, 0 x30e6,
0 x30e8, 0 x30e9, 0 x30ea, 0 x30eb, 0 x30ec, 0 x30ed, 0 x30ef, 0 x30f3,
0 x309b, 0 x309c };
const keymap_t keymap04 = { 126 , 223 , keymap04_map };
// Arabic Byte 3 = 0x05
const sal_Unicode keymap05_map[] = {
0 x060c, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x061b,
0 x0000, 0 x0000, 0 x0000, 0 x061f, 0 x0000, 0 x0621, 0 x0622, 0 x0623,
0 x0624, 0 x0625, 0 x0626, 0 x0627, 0 x0628, 0 x0629, 0 x062a, 0 x062b,
0 x062c, 0 x062d, 0 x062e, 0 x062f, 0 x0630, 0 x0631, 0 x0632, 0 x0633,
0 x0634, 0 x0635, 0 x0636, 0 x0637, 0 x0638, 0 x0639, 0 x063a, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0640, 0 x0641, 0 x0642, 0 x0643,
0 x0644, 0 x0645, 0 x0646, 0 x0647, 0 x0648, 0 x0649, 0 x064a, 0 x064b,
0 x064c, 0 x064d, 0 x064e, 0 x064f, 0 x0650, 0 x0651, 0 x0652 };
const keymap_t keymap05 = { 172 , 242 , keymap05_map };
// Cyrillic Byte 3 = 0x06
const sal_Unicode keymap06_map[] = {
0 x0452, 0 x0453, 0 x0451, 0 x0454, 0 x0455, 0 x0456, 0 x0457, 0 x0458,
0 x0459, 0 x045a, 0 x045b, 0 x045c, 0 x0000, 0 x045e, 0 x045f, 0 x2116,
0 x0402, 0 x0403, 0 x0401, 0 x0404, 0 x0405, 0 x0406, 0 x0407, 0 x0408,
0 x0409, 0 x040a, 0 x040b, 0 x040c, 0 x0000, 0 x040e, 0 x040f, 0 x044e,
0 x0430, 0 x0431, 0 x0446, 0 x0434, 0 x0435, 0 x0444, 0 x0433, 0 x0445,
0 x0438, 0 x0439, 0 x043a, 0 x043b, 0 x043c, 0 x043d, 0 x043e, 0 x043f,
0 x044f, 0 x0440, 0 x0441, 0 x0442, 0 x0443, 0 x0436, 0 x0432, 0 x044c,
0 x044b, 0 x0437, 0 x0448, 0 x044d, 0 x0449, 0 x0447, 0 x044a, 0 x042e,
0 x0410, 0 x0411, 0 x0426, 0 x0414, 0 x0415, 0 x0424, 0 x0413, 0 x0425,
0 x0418, 0 x0419, 0 x041a, 0 x041b, 0 x041c, 0 x041d, 0 x041e, 0 x041f,
0 x042f, 0 x0420, 0 x0421, 0 x0422, 0 x0423, 0 x0416, 0 x0412, 0 x042c,
0 x042b, 0 x0417, 0 x0428, 0 x042d, 0 x0429, 0 x0427, 0 x042a };
const keymap_t keymap06 = { 161 , 255 , keymap06_map };
// Greek Byte 3 = 0x07
const sal_Unicode keymap07_map[] = {
0 x0386, 0 x0388, 0 x0389, 0 x038a, 0 x03aa, 0 x0000, 0 x038c, 0 x038e,
0 x03ab, 0 x0000, 0 x038f, 0 x0000, 0 x0000, 0 x0385, 0 x2015, 0 x0000,
0 x03ac, 0 x03ad, 0 x03ae, 0 x03af, 0 x03ca, 0 x0390, 0 x03cc, 0 x03cd,
0 x03cb, 0 x03b0, 0 x03ce, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0391, 0 x0392, 0 x0393, 0 x0394, 0 x0395, 0 x0396, 0 x0397, 0 x0398,
0 x0399, 0 x039a, 0 x039b, 0 x039c, 0 x039d, 0 x039e, 0 x039f, 0 x03a0,
0 x03a1, 0 x03a3, 0 x0000, 0 x03a4, 0 x03a5, 0 x03a6, 0 x03a7, 0 x03a8,
0 x03a9, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x03b1, 0 x03b2, 0 x03b3, 0 x03b4, 0 x03b5, 0 x03b6, 0 x03b7, 0 x03b8,
0 x03b9, 0 x03ba, 0 x03bb, 0 x03bc, 0 x03bd, 0 x03be, 0 x03bf, 0 x03c0,
0 x03c1, 0 x03c3, 0 x03c2, 0 x03c4, 0 x03c5, 0 x03c6, 0 x03c7, 0 x03c8,
0 x03c9 };
const keymap_t keymap07 = { 161 , 249 , keymap07_map };
// Technical Byte 3 = 0x08
const sal_Unicode keymap08_map[] = {
0 x23b7, 0 x250c, 0 x2500, 0 x2320, 0 x2321, 0 x2502, 0 x23a1, 0 x23a3,
0 x23a4, 0 x23a6, 0 x239b, 0 x239d, 0 x239e, 0 x23a0, 0 x23a8, 0 x23ac,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x2264, 0 x2260, 0 x2265, 0 x222b, 0 x2234,
0 x221d, 0 x221e, 0 x0000, 0 x0000, 0 x2207, 0 x0000, 0 x0000, 0 x223c,
0 x2243, 0 x0000, 0 x0000, 0 x0000, 0 x21d4, 0 x21d2, 0 x2261, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x221a, 0 x0000, 0 x0000,
0 x0000, 0 x2282, 0 x2283, 0 x2229, 0 x222a, 0 x2227, 0 x2228, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x2202, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0192, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x2190, 0 x2191, 0 x2192, 0 x2193 };
const keymap_t keymap08 = { 161 , 254 , keymap08_map };
// Special Byte 3 = 0x09
const sal_Unicode keymap09_map[] = {
0 x25c6, 0 x2592, 0 x2409, 0 x240c, 0 x240d, 0 x240a, 0 x0000, 0 x0000,
0 x2424, 0 x240b, 0 x2518, 0 x2510, 0 x250c, 0 x2514, 0 x253c, 0 x23ba,
0 x23bb, 0 x2500, 0 x23bc, 0 x23bd, 0 x251c, 0 x2524, 0 x2534, 0 x252c,
0 x2502 };
const keymap_t keymap09 = { 224 , 248 , keymap09_map };
// Publishing Byte 3 = 0x0a = 10
const sal_Unicode keymap10_map[] = {
0 x2003, 0 x2002, 0 x2004, 0 x2005, 0 x2007, 0 x2008, 0 x2009, 0 x200a,
0 x2014, 0 x2013, 0 x0000, 0 x0000, 0 x0000, 0 x2026, 0 x2025, 0 x2153,
0 x2154, 0 x2155, 0 x2156, 0 x2157, 0 x2158, 0 x2159, 0 x215a, 0 x2105,
0 x0000, 0 x0000, 0 x2012, 0 x2329, 0 x0000, 0 x232a, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x215b, 0 x215c, 0 x215d, 0 x215e, 0 x0000, 0 x0000,
0 x2122, 0 x2613, 0 x0000, 0 x25c1, 0 x25b7, 0 x25cb, 0 x25af, 0 x2018,
0 x2019, 0 x201c, 0 x201d, 0 x211e, 0 x0000, 0 x2032, 0 x2033, 0 x0000,
0 x271d, 0 x0000, 0 x25ac, 0 x25c0, 0 x25b6, 0 x25cf, 0 x25ae, 0 x25e6,
0 x25ab, 0 x25ad, 0 x25b3, 0 x25bd, 0 x2606, 0 x2022, 0 x25aa, 0 x25b2,
0 x25bc, 0 x261c, 0 x261e, 0 x2663, 0 x2666, 0 x2665, 0 x0000, 0 x2720,
0 x2020, 0 x2021, 0 x2713, 0 x2717, 0 x266f, 0 x266d, 0 x2642, 0 x2640,
0 x260e, 0 x2315, 0 x2117, 0 x2038, 0 x201a, 0 x201e };
const keymap_t keymap10 = { 161 , 254 , keymap10_map };
// APL Byte 3 = 0x0b = 11
const sal_Unicode keymap11_map[] = {
0 x003c, 0 x0000, 0 x0000, 0 x003e, 0 x0000, 0 x2228, 0 x2227, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x00af, 0 x0000, 0 x22a5,
0 x2229, 0 x230a, 0 x0000, 0 x005f, 0 x0000, 0 x0000, 0 x0000, 0 x2218,
0 x0000, 0 x2395, 0 x0000, 0 x22a4, 0 x25cb, 0 x0000, 0 x0000, 0 x0000,
0 x2308, 0 x0000, 0 x0000, 0 x222a, 0 x0000, 0 x2283, 0 x0000, 0 x2282,
0 x0000, 0 x22a2, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0000, 0 x22a3 };
const keymap_t keymap11 = { 163 , 252 , keymap11_map };
// Hebrew Byte 3 = 0x0c = 12
const sal_Unicode keymap12_map[] = {
0 x2017, 0 x05d0, 0 x05d1, 0 x05d2, 0 x05d3, 0 x05d4, 0 x05d5, 0 x05d6,
0 x05d7, 0 x05d8, 0 x05d9, 0 x05da, 0 x05db, 0 x05dc, 0 x05dd, 0 x05de,
0 x05df, 0 x05e0, 0 x05e1, 0 x05e2, 0 x05e3, 0 x05e4, 0 x05e5, 0 x05e6,
0 x05e7, 0 x05e8, 0 x05e9, 0 x05ea };
const keymap_t keymap12 = { 223 , 250 , keymap12_map };
// Thai Byte 3 = 0x0d = 13
const sal_Unicode keymap13_map[] = {
0 x0e01, 0 x0e02, 0 x0e03, 0 x0e04, 0 x0e05, 0 x0e06, 0 x0e07, 0 x0e08,
0 x0e09, 0 x0e0a, 0 x0e0b, 0 x0e0c, 0 x0e0d, 0 x0e0e, 0 x0e0f, 0 x0e10,
0 x0e11, 0 x0e12, 0 x0e13, 0 x0e14, 0 x0e15, 0 x0e16, 0 x0e17, 0 x0e18,
0 x0e19, 0 x0e1a, 0 x0e1b, 0 x0e1c, 0 x0e1d, 0 x0e1e, 0 x0e1f, 0 x0e20,
0 x0e21, 0 x0e22, 0 x0e23, 0 x0e24, 0 x0e25, 0 x0e26, 0 x0e27, 0 x0e28,
0 x0e29, 0 x0e2a, 0 x0e2b, 0 x0e2c, 0 x0e2d, 0 x0e2e, 0 x0e2f, 0 x0e30,
0 x0e31, 0 x0e32, 0 x0e33, 0 x0e34, 0 x0e35, 0 x0e36, 0 x0e37, 0 x0e38,
0 x0e39, 0 x0e3a, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0e3f, 0 x0e40,
0 x0e41, 0 x0e42, 0 x0e43, 0 x0e44, 0 x0e45, 0 x0e46, 0 x0e47, 0 x0e48,
0 x0e49, 0 x0e4a, 0 x0e4b, 0 x0e4c, 0 x0e4d, 0 x0000, 0 x0000, 0 x0e50,
0 x0e51, 0 x0e52, 0 x0e53, 0 x0e54, 0 x0e55, 0 x0e56, 0 x0e57, 0 x0e58,
0 x0e59 };
const keymap_t keymap13 = { 161 , 249 , keymap13_map };
// Korean Byte 3 = 0x0e = 14
const sal_Unicode keymap14_map[] = {
0 x3131, 0 x3132, 0 x3133, 0 x3134, 0 x3135, 0 x3136, 0 x3137, 0 x3138,
0 x3139, 0 x313a, 0 x313b, 0 x313c, 0 x313d, 0 x313e, 0 x313f, 0 x3140,
0 x3141, 0 x3142, 0 x3143, 0 x3144, 0 x3145, 0 x3146, 0 x3147, 0 x3148,
0 x3149, 0 x314a, 0 x314b, 0 x314c, 0 x314d, 0 x314e, 0 x314f, 0 x3150,
0 x3151, 0 x3152, 0 x3153, 0 x3154, 0 x3155, 0 x3156, 0 x3157, 0 x3158,
0 x3159, 0 x315a, 0 x315b, 0 x315c, 0 x315d, 0 x315e, 0 x315f, 0 x3160,
0 x3161, 0 x3162, 0 x3163, 0 x11a8, 0 x11a9, 0 x11aa, 0 x11ab, 0 x11ac,
0 x11ad, 0 x11ae, 0 x11af, 0 x11b0, 0 x11b1, 0 x11b2, 0 x11b3, 0 x11b4,
0 x11b5, 0 x11b6, 0 x11b7, 0 x11b8, 0 x11b9, 0 x11ba, 0 x11bb, 0 x11bc,
0 x11bd, 0 x11be, 0 x11bf, 0 x11c0, 0 x11c1, 0 x11c2, 0 x316d, 0 x3171,
0 x3178, 0 x317f, 0 x3181, 0 x3184, 0 x3186, 0 x318d, 0 x318e, 0 x11eb,
0 x11f0, 0 x11f9, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x20a9 };
const keymap_t keymap14 = { 161 , 255 , keymap14_map };
// missing:
// Latin-8 Byte 3 = 0x12 = 18
// Latin-9 Byte 3 = 0x13 = 19
const sal_Unicode keymap19_map[] = {
0 x0152, 0 x0153, 0 x0178 };
const keymap_t keymap19 = { 188 , 190 , keymap19_map };
// missing:
// Armenian Byte 3 = 0x14 = 20
// Georgian Byte 3 = 0x15 = 21
// Azeri Byte 3 = 0x16 = 22
// Vietnamese Byte 3 = 0x1e = 30
// Currency Byte 3 = 0x20 = 32
const sal_Unicode keymap32_map[] = {
0 x20a0, 0 x20a1, 0 x20a2, 0 x20a3, 0 x20a4, 0 x20a5, 0 x20a6, 0 x20a7,
0 x20a8, 0 x0000, 0 x20aa, 0 x20ab, 0 x20ac };
const keymap_t keymap32 = { 160 , 172 , keymap32_map };
// Keyboard (Keypad mappings) Byte 3 = 0xff = 255
const sal_Unicode keymap255_map[] = {
0 x0020, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000, 0 x0000,
0 x0000, 0 x0000, 0 x002a, 0 x002b, 0 x002c, 0 x002d, 0 x002e, 0 x002f,
0 x0030, 0 x0031, 0 x0032, 0 x0033, 0 x0034, 0 x0035, 0 x0036, 0 x0037,
0 x0038, 0 x0039, 0 x0000, 0 x0000, 0 x0000, 0 x003d };
const keymap_t keymap255 = { 128 , 189 , keymap255_map };
#define INITIAL_KEYMAPS 33
const keymap_t* const p_keymap[INITIAL_KEYMAPS] = {
&keymap00, &keymap01, &keymap02, &keymap03, /* 00 -- 03 */
&keymap04, &keymap05, &keymap06, &keymap07, /* 04 -- 07 */
&keymap08, &keymap09, &keymap10, &keymap11, /* 08 -- 11 */
&keymap12, &keymap13, &keymap14, nullptr, /* 12 -- 15 */
nullptr, nullptr, nullptr, &keymap19, /* 16 -- 19 */
nullptr, nullptr, nullptr, nullptr, /* 20 -- 23 */
nullptr, nullptr, nullptr, nullptr, /* 24 -- 27 */
nullptr, nullptr, nullptr, nullptr, /* 28 -- 31 */
&keymap32 /* 32 */
};
sal_Unicode
KeysymToUnicode (KeySym nKeySym)
{
// keysym is already unicode
if ((nKeySym & 0 xff000000) == 0 x01000000)
{
// strip off group indicator and iso10646 plane
// FIXME can't handle chars from surrogate area.
if (! (nKeySym & 0 x00ff0000) )
return static_cast <sal_Unicode>(nKeySym & 0 x0000ffff);
}
// legacy keysyms, switch to appropriate codeset
else
{
unsigned char n_byte1 = (nKeySym & 0 xff000000) >> 24 ;
unsigned char n_byte2 = (nKeySym & 0 x00ff0000) >> 16 ;
unsigned char n_byte3 = (nKeySym & 0 x0000ff00) >> 8 ;
unsigned char n_byte4 = (nKeySym & 0 x000000ff);
if (n_byte1 != 0 )
return 0 ;
if (n_byte2 != 0 )
return 0 ;
keymap_t const * p_map = nullptr;
if (n_byte3 < INITIAL_KEYMAPS)
p_map = p_keymap[n_byte3];
else if (n_byte3 == 255 )
p_map = &keymap255;
if ((p_map != nullptr) && (n_byte4 >= p_map->first) && (n_byte4 <= p_map->last) )
return p_map->map[n_byte4 - p_map->first];
}
return 0 ;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Messung V0.5 in Prozent C=88 H=100 G=94