1*c82f2877SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*c82f2877SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*c82f2877SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*c82f2877SAndrew Rist * distributed with this work for additional information
6*c82f2877SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*c82f2877SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*c82f2877SAndrew Rist * "License"); you may not use this file except in compliance
9*c82f2877SAndrew Rist * with the License. You may obtain a copy of the License at
10*c82f2877SAndrew Rist *
11*c82f2877SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*c82f2877SAndrew Rist *
13*c82f2877SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*c82f2877SAndrew Rist * software distributed under the License is distributed on an
15*c82f2877SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*c82f2877SAndrew Rist * KIND, either express or implied. See the License for the
17*c82f2877SAndrew Rist * specific language governing permissions and limitations
18*c82f2877SAndrew Rist * under the License.
19*c82f2877SAndrew Rist *
20*c82f2877SAndrew Rist *************************************************************/
21*c82f2877SAndrew Rist
22*c82f2877SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_vcl.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include <X11/X.h>
28cdf0e10cSrcweir #include <sal/types.h>
29cdf0e10cSrcweir
30cdf0e10cSrcweir #include <unx/i18n_keysym.hxx>
31cdf0e10cSrcweir
32cdf0e10cSrcweir // convert keysyms to unicode
33cdf0e10cSrcweir // for all keysyms with byte1 and byte2 equal zero, and of course only for
34cdf0e10cSrcweir // keysyms that have a unicode counterpart
35cdf0e10cSrcweir
36cdf0e10cSrcweir typedef const sal_Unicode unicode_t;
37cdf0e10cSrcweir typedef struct {
38cdf0e10cSrcweir const int first; const int last;
39cdf0e10cSrcweir unicode_t *map;
40cdf0e10cSrcweir } keymap_t;
41cdf0e10cSrcweir
42cdf0e10cSrcweir // Latin-1 Byte 3 = 0x00
43cdf0e10cSrcweir unicode_t keymap00_map[] = {
44cdf0e10cSrcweir 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
45cdf0e10cSrcweir 0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
46cdf0e10cSrcweir 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
47cdf0e10cSrcweir 0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
48cdf0e10cSrcweir 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
49cdf0e10cSrcweir 0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
50cdf0e10cSrcweir 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
51cdf0e10cSrcweir 0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
52cdf0e10cSrcweir 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
53cdf0e10cSrcweir 0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
54cdf0e10cSrcweir 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
55cdf0e10cSrcweir 0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x0000,
56cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
57cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
58cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
59cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
60cdf0e10cSrcweir 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7,
61cdf0e10cSrcweir 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
62cdf0e10cSrcweir 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7,
63cdf0e10cSrcweir 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf,
64cdf0e10cSrcweir 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7,
65cdf0e10cSrcweir 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
66cdf0e10cSrcweir 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7,
67cdf0e10cSrcweir 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df,
68cdf0e10cSrcweir 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7,
69cdf0e10cSrcweir 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
70cdf0e10cSrcweir 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7,
71cdf0e10cSrcweir 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff };
72cdf0e10cSrcweir const keymap_t keymap00 = { 32, 255, keymap00_map };
73cdf0e10cSrcweir
74cdf0e10cSrcweir // Latin-2 Byte 3 = 0x01
75cdf0e10cSrcweir unicode_t keymap01_map[] = {
76cdf0e10cSrcweir 0x0104, 0x02d8, 0x0141, 0x0000, 0x013d, 0x015a, 0x0000, 0x0000,
77cdf0e10cSrcweir 0x0160, 0x015e, 0x0164, 0x0179, 0x0000, 0x017d, 0x017b, 0x0000,
78cdf0e10cSrcweir 0x0105, 0x02db, 0x0142, 0x0000, 0x013e, 0x015b, 0x02c7, 0x0000,
79cdf0e10cSrcweir 0x0161, 0x015f, 0x0165, 0x017a, 0x02dd, 0x017e, 0x017c, 0x0154,
80cdf0e10cSrcweir 0x0000, 0x0000, 0x0102, 0x0000, 0x0139, 0x0106, 0x0000, 0x010c,
81cdf0e10cSrcweir 0x0000, 0x0118, 0x0000, 0x011a, 0x0000, 0x0000, 0x010e, 0x0110,
82cdf0e10cSrcweir 0x0143, 0x0147, 0x0000, 0x0000, 0x0150, 0x0000, 0x0000, 0x0158,
83cdf0e10cSrcweir 0x016e, 0x0000, 0x0170, 0x0000, 0x0000, 0x0162, 0x0000, 0x0155,
84cdf0e10cSrcweir 0x0000, 0x0000, 0x0103, 0x0000, 0x013a, 0x0107, 0x0000, 0x010d,
85cdf0e10cSrcweir 0x0000, 0x0119, 0x0000, 0x011b, 0x0000, 0x0000, 0x010f, 0x0111,
86cdf0e10cSrcweir 0x0144, 0x0148, 0x0000, 0x0000, 0x0151, 0x0000, 0x0000, 0x0159,
87cdf0e10cSrcweir 0x016f, 0x0000, 0x0171, 0x0000, 0x0000, 0x0163, 0x02d9 };
88cdf0e10cSrcweir const keymap_t keymap01 = { 161, 255, keymap01_map };
89cdf0e10cSrcweir
90cdf0e10cSrcweir // Latin-3 Byte 3 = 0x02
91cdf0e10cSrcweir unicode_t keymap02_map[] = {
92cdf0e10cSrcweir 0x0126, 0x0000, 0x0000, 0x0000, 0x0000, 0x0124, 0x0000, 0x0000,
93cdf0e10cSrcweir 0x0130, 0x0000, 0x011e, 0x0134, 0x0000, 0x0000, 0x0000, 0x0000,
94cdf0e10cSrcweir 0x0127, 0x0000, 0x0000, 0x0000, 0x0000, 0x0125, 0x0000, 0x0000,
95cdf0e10cSrcweir 0x0131, 0x0000, 0x011f, 0x0135, 0x0000, 0x0000, 0x0000, 0x0000,
96cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x010a, 0x0108, 0x0000, 0x0000,
97cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
98cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0120, 0x0000, 0x0000, 0x011c,
99cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x016c, 0x015c, 0x0000, 0x0000,
100cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x010b, 0x0109, 0x0000, 0x0000,
101cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
102cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0121, 0x0000, 0x0000, 0x011d,
103cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x016d, 0x015d };
104cdf0e10cSrcweir const keymap_t keymap02 = { 161, 254, keymap02_map };
105cdf0e10cSrcweir
106cdf0e10cSrcweir // Latin-4 Byte 3 = 0x03
107cdf0e10cSrcweir unicode_t keymap03_map[] = {
108cdf0e10cSrcweir 0x0138, 0x0156, 0x0000, 0x0128, 0x013b, 0x0000, 0x0000, 0x0000,
109cdf0e10cSrcweir 0x0112, 0x0122, 0x0166, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
110cdf0e10cSrcweir 0x0000, 0x0157, 0x0000, 0x0129, 0x013c, 0x0000, 0x0000, 0x0000,
111cdf0e10cSrcweir 0x0113, 0x0123, 0x0167, 0x014a, 0x0000, 0x014b, 0x0100, 0x0000,
112cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x012e, 0x0000, 0x0000,
113cdf0e10cSrcweir 0x0000, 0x0000, 0x0116, 0x0000, 0x0000, 0x012a, 0x0000, 0x0145,
114cdf0e10cSrcweir 0x014c, 0x0136, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0172,
115cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0168, 0x016a, 0x0000, 0x0101, 0x0000,
116cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x012f, 0x0000, 0x0000,
117cdf0e10cSrcweir 0x0000, 0x0000, 0x0117, 0x0000, 0x0000, 0x012b, 0x0000, 0x0146,
118cdf0e10cSrcweir 0x014d, 0x0137, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0173,
119cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0169, 0x016b };
120cdf0e10cSrcweir const keymap_t keymap03 = { 162, 254, keymap03_map };
121cdf0e10cSrcweir
122cdf0e10cSrcweir // Kana Byte 3 = 0x04
123cdf0e10cSrcweir unicode_t keymap04_map[] = {
124cdf0e10cSrcweir 0x203e, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
125cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
126cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
127cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
128cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x3002, 0x300c, 0x300d, 0x3001, 0x30fb,
129cdf0e10cSrcweir 0x30f2, 0x30a1, 0x30a3, 0x30a5, 0x30a7, 0x30a9, 0x30e3, 0x30e5,
130cdf0e10cSrcweir 0x30e7, 0x30c3, 0x30fc, 0x30a2, 0x30a4, 0x30a6, 0x30a8, 0x30aa,
131cdf0e10cSrcweir 0x30ab, 0x30ad, 0x30af, 0x30b1, 0x30b3, 0x30b5, 0x30b7, 0x30b9,
132cdf0e10cSrcweir 0x30bb, 0x30bd, 0x30bf, 0x30c1, 0x30c4, 0x30c6, 0x30c8, 0x30ca,
133cdf0e10cSrcweir 0x30cb, 0x30cc, 0x30cd, 0x30ce, 0x30cf, 0x30d2, 0x30d5, 0x30d8,
134cdf0e10cSrcweir 0x30db, 0x30de, 0x30df, 0x30e0, 0x30e1, 0x30e2, 0x30e4, 0x30e6,
135cdf0e10cSrcweir 0x30e8, 0x30e9, 0x30ea, 0x30eb, 0x30ec, 0x30ed, 0x30ef, 0x30f3,
136cdf0e10cSrcweir 0x309b, 0x309c };
137cdf0e10cSrcweir const keymap_t keymap04 = { 126, 223, keymap04_map };
138cdf0e10cSrcweir
139cdf0e10cSrcweir // Arabic Byte 3 = 0x05
140cdf0e10cSrcweir unicode_t keymap05_map[] = {
141cdf0e10cSrcweir 0x060c, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
142cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x061b,
143cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x061f, 0x0000, 0x0621, 0x0622, 0x0623,
144cdf0e10cSrcweir 0x0624, 0x0625, 0x0626, 0x0627, 0x0628, 0x0629, 0x062a, 0x062b,
145cdf0e10cSrcweir 0x062c, 0x062d, 0x062e, 0x062f, 0x0630, 0x0631, 0x0632, 0x0633,
146cdf0e10cSrcweir 0x0634, 0x0635, 0x0636, 0x0637, 0x0638, 0x0639, 0x063a, 0x0000,
147cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0640, 0x0641, 0x0642, 0x0643,
148cdf0e10cSrcweir 0x0644, 0x0645, 0x0646, 0x0647, 0x0648, 0x0649, 0x064a, 0x064b,
149cdf0e10cSrcweir 0x064c, 0x064d, 0x064e, 0x064f, 0x0650, 0x0651, 0x0652 };
150cdf0e10cSrcweir const keymap_t keymap05 = { 172, 242, keymap05_map };
151cdf0e10cSrcweir
152cdf0e10cSrcweir // Cyrillic Byte 3 = 0x06
153cdf0e10cSrcweir unicode_t keymap06_map[] = {
154cdf0e10cSrcweir 0x0452, 0x0453, 0x0451, 0x0454, 0x0455, 0x0456, 0x0457, 0x0458,
155cdf0e10cSrcweir 0x0459, 0x045a, 0x045b, 0x045c, 0x0000, 0x045e, 0x045f, 0x2116,
156cdf0e10cSrcweir 0x0402, 0x0403, 0x0401, 0x0404, 0x0405, 0x0406, 0x0407, 0x0408,
157cdf0e10cSrcweir 0x0409, 0x040a, 0x040b, 0x040c, 0x0000, 0x040e, 0x040f, 0x044e,
158cdf0e10cSrcweir 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, 0x0445,
159cdf0e10cSrcweir 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f,
160cdf0e10cSrcweir 0x044f, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, 0x044c,
161cdf0e10cSrcweir 0x044b, 0x0437, 0x0448, 0x044d, 0x0449, 0x0447, 0x044a, 0x042e,
162cdf0e10cSrcweir 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, 0x0425,
163cdf0e10cSrcweir 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f,
164cdf0e10cSrcweir 0x042f, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, 0x042c,
165cdf0e10cSrcweir 0x042b, 0x0417, 0x0428, 0x042d, 0x0429, 0x0427, 0x042a };
166cdf0e10cSrcweir const keymap_t keymap06 = { 161, 255, keymap06_map };
167cdf0e10cSrcweir
168cdf0e10cSrcweir // Greek Byte 3 = 0x07
169cdf0e10cSrcweir unicode_t keymap07_map[] = {
170cdf0e10cSrcweir 0x0386, 0x0388, 0x0389, 0x038a, 0x03aa, 0x0000, 0x038c, 0x038e,
171cdf0e10cSrcweir 0x03ab, 0x0000, 0x038f, 0x0000, 0x0000, 0x0385, 0x2015, 0x0000,
172cdf0e10cSrcweir 0x03ac, 0x03ad, 0x03ae, 0x03af, 0x03ca, 0x0390, 0x03cc, 0x03cd,
173cdf0e10cSrcweir 0x03cb, 0x03b0, 0x03ce, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
174cdf0e10cSrcweir 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398,
175cdf0e10cSrcweir 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, 0x03a0,
176cdf0e10cSrcweir 0x03a1, 0x03a3, 0x0000, 0x03a4, 0x03a5, 0x03a6, 0x03a7, 0x03a8,
177cdf0e10cSrcweir 0x03a9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
178cdf0e10cSrcweir 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, 0x03b8,
179cdf0e10cSrcweir 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, 0x03c0,
180cdf0e10cSrcweir 0x03c1, 0x03c3, 0x03c2, 0x03c4, 0x03c5, 0x03c6, 0x03c7, 0x03c8,
181cdf0e10cSrcweir 0x03c9 };
182cdf0e10cSrcweir const keymap_t keymap07 = { 161, 249, keymap07_map };
183cdf0e10cSrcweir
184cdf0e10cSrcweir // Technical Byte 3 = 0x08
185cdf0e10cSrcweir unicode_t keymap08_map[] = {
186cdf0e10cSrcweir 0x23b7, 0x250c, 0x2500, 0x2320, 0x2321, 0x2502, 0x23a1, 0x23a3,
187cdf0e10cSrcweir 0x23a4, 0x23a6, 0x239b, 0x239d, 0x239e, 0x23a0, 0x23a8, 0x23ac,
188cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
189cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x2264, 0x2260, 0x2265, 0x222b, 0x2234,
190cdf0e10cSrcweir 0x221d, 0x221e, 0x0000, 0x0000, 0x2207, 0x0000, 0x0000, 0x223c,
191cdf0e10cSrcweir 0x2243, 0x0000, 0x0000, 0x0000, 0x21d4, 0x21d2, 0x2261, 0x0000,
192cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x221a, 0x0000, 0x0000,
193cdf0e10cSrcweir 0x0000, 0x2282, 0x2283, 0x2229, 0x222a, 0x2227, 0x2228, 0x0000,
194cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
195cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2202, 0x0000,
196cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0192, 0x0000, 0x0000,
197cdf0e10cSrcweir 0x0000, 0x0000, 0x2190, 0x2191, 0x2192, 0x2193 };
198cdf0e10cSrcweir const keymap_t keymap08 = { 161, 254, keymap08_map };
199cdf0e10cSrcweir
200cdf0e10cSrcweir // Special Byte 3 = 0x09
201cdf0e10cSrcweir unicode_t keymap09_map[] = {
202cdf0e10cSrcweir 0x25c6, 0x2592, 0x2409, 0x240c, 0x240d, 0x240a, 0x0000, 0x0000,
203cdf0e10cSrcweir 0x2424, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c, 0x23ba,
204cdf0e10cSrcweir 0x23bb, 0x2500, 0x23bc, 0x23bd, 0x251c, 0x2524, 0x2534, 0x252c,
205cdf0e10cSrcweir 0x2502 };
206cdf0e10cSrcweir const keymap_t keymap09 = { 224, 248, keymap09_map };
207cdf0e10cSrcweir
208cdf0e10cSrcweir // Publishing Byte 3 = 0x0a = 10
209cdf0e10cSrcweir unicode_t keymap10_map[] = {
210cdf0e10cSrcweir 0x2003, 0x2002, 0x2004, 0x2005, 0x2007, 0x2008, 0x2009, 0x200a,
211cdf0e10cSrcweir 0x2014, 0x2013, 0x0000, 0x0000, 0x0000, 0x2026, 0x2025, 0x2153,
212cdf0e10cSrcweir 0x2154, 0x2155, 0x2156, 0x2157, 0x2158, 0x2159, 0x215a, 0x2105,
213cdf0e10cSrcweir 0x0000, 0x0000, 0x2012, 0x2329, 0x0000, 0x232a, 0x0000, 0x0000,
214cdf0e10cSrcweir 0x0000, 0x0000, 0x215b, 0x215c, 0x215d, 0x215e, 0x0000, 0x0000,
215cdf0e10cSrcweir 0x2122, 0x2613, 0x0000, 0x25c1, 0x25b7, 0x25cb, 0x25af, 0x2018,
216cdf0e10cSrcweir 0x2019, 0x201c, 0x201d, 0x211e, 0x0000, 0x2032, 0x2033, 0x0000,
217cdf0e10cSrcweir 0x271d, 0x0000, 0x25ac, 0x25c0, 0x25b6, 0x25cf, 0x25ae, 0x25e6,
218cdf0e10cSrcweir 0x25ab, 0x25ad, 0x25b3, 0x25bd, 0x2606, 0x2022, 0x25aa, 0x25b2,
219cdf0e10cSrcweir 0x25bc, 0x261c, 0x261e, 0x2663, 0x2666, 0x2665, 0x0000, 0x2720,
220cdf0e10cSrcweir 0x2020, 0x2021, 0x2713, 0x2717, 0x266f, 0x266d, 0x2642, 0x2640,
221cdf0e10cSrcweir 0x260e, 0x2315, 0x2117, 0x2038, 0x201a, 0x201e };
222cdf0e10cSrcweir const keymap_t keymap10 = { 161, 254, keymap10_map };
223cdf0e10cSrcweir
224cdf0e10cSrcweir // APL Byte 3 = 0x0b = 11
225cdf0e10cSrcweir unicode_t keymap11_map[] = {
226cdf0e10cSrcweir 0x003c, 0x0000, 0x0000, 0x003e, 0x0000, 0x2228, 0x2227, 0x0000,
227cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
228cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
229cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00af, 0x0000, 0x22a5,
230cdf0e10cSrcweir 0x2229, 0x230a, 0x0000, 0x005f, 0x0000, 0x0000, 0x0000, 0x2218,
231cdf0e10cSrcweir 0x0000, 0x2395, 0x0000, 0x22a4, 0x25cb, 0x0000, 0x0000, 0x0000,
232cdf0e10cSrcweir 0x2308, 0x0000, 0x0000, 0x222a, 0x0000, 0x2283, 0x0000, 0x2282,
233cdf0e10cSrcweir 0x0000, 0x22a2, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
234cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
235cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
236cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
237cdf0e10cSrcweir 0x0000, 0x22a3 };
238cdf0e10cSrcweir const keymap_t keymap11 = { 163, 252, keymap11_map };
239cdf0e10cSrcweir
240cdf0e10cSrcweir // Hebrew Byte 3 = 0x0c = 12
241cdf0e10cSrcweir unicode_t keymap12_map[] = {
242cdf0e10cSrcweir 0x2017, 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6,
243cdf0e10cSrcweir 0x05d7, 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de,
244cdf0e10cSrcweir 0x05df, 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6,
245cdf0e10cSrcweir 0x05e7, 0x05e8, 0x05e9, 0x05ea };
246cdf0e10cSrcweir const keymap_t keymap12 = { 223, 250, keymap12_map };
247cdf0e10cSrcweir
248cdf0e10cSrcweir // Thai Byte 3 = 0x0d = 13
249cdf0e10cSrcweir unicode_t keymap13_map[] = {
250cdf0e10cSrcweir 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07, 0x0e08,
251cdf0e10cSrcweir 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f, 0x0e10,
252cdf0e10cSrcweir 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17, 0x0e18,
253cdf0e10cSrcweir 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f, 0x0e20,
254cdf0e10cSrcweir 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27, 0x0e28,
255cdf0e10cSrcweir 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f, 0x0e30,
256cdf0e10cSrcweir 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37, 0x0e38,
257cdf0e10cSrcweir 0x0e39, 0x0e3a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0e3f, 0x0e40,
258cdf0e10cSrcweir 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47, 0x0e48,
259cdf0e10cSrcweir 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0000, 0x0000, 0x0e50,
260cdf0e10cSrcweir 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57, 0x0e58,
261cdf0e10cSrcweir 0x0e59 };
262cdf0e10cSrcweir const keymap_t keymap13 = { 161, 249, keymap13_map };
263cdf0e10cSrcweir
264cdf0e10cSrcweir // Korean Byte 3 = 0x0e = 14
265cdf0e10cSrcweir unicode_t keymap14_map[] = {
266cdf0e10cSrcweir 0x3131, 0x3132, 0x3133, 0x3134, 0x3135, 0x3136, 0x3137, 0x3138,
267cdf0e10cSrcweir 0x3139, 0x313a, 0x313b, 0x313c, 0x313d, 0x313e, 0x313f, 0x3140,
268cdf0e10cSrcweir 0x3141, 0x3142, 0x3143, 0x3144, 0x3145, 0x3146, 0x3147, 0x3148,
269cdf0e10cSrcweir 0x3149, 0x314a, 0x314b, 0x314c, 0x314d, 0x314e, 0x314f, 0x3150,
270cdf0e10cSrcweir 0x3151, 0x3152, 0x3153, 0x3154, 0x3155, 0x3156, 0x3157, 0x3158,
271cdf0e10cSrcweir 0x3159, 0x315a, 0x315b, 0x315c, 0x315d, 0x315e, 0x315f, 0x3160,
272cdf0e10cSrcweir 0x3161, 0x3162, 0x3163, 0x11a8, 0x11a9, 0x11aa, 0x11ab, 0x11ac,
273cdf0e10cSrcweir 0x11ad, 0x11ae, 0x11af, 0x11b0, 0x11b1, 0x11b2, 0x11b3, 0x11b4,
274cdf0e10cSrcweir 0x11b5, 0x11b6, 0x11b7, 0x11b8, 0x11b9, 0x11ba, 0x11bb, 0x11bc,
275cdf0e10cSrcweir 0x11bd, 0x11be, 0x11bf, 0x11c0, 0x11c1, 0x11c2, 0x316d, 0x3171,
276cdf0e10cSrcweir 0x3178, 0x317f, 0x3181, 0x3184, 0x3186, 0x318d, 0x318e, 0x11eb,
277cdf0e10cSrcweir 0x11f0, 0x11f9, 0x0000, 0x0000, 0x0000, 0x0000, 0x20a9 };
278cdf0e10cSrcweir const keymap_t keymap14 = { 161, 255, keymap14_map };
279cdf0e10cSrcweir
280cdf0e10cSrcweir // missing:
281cdf0e10cSrcweir // Latin-8 Byte 3 = 0x12 = 18
282cdf0e10cSrcweir
283cdf0e10cSrcweir // Latin-9 Byte 3 = 0x13 = 19
284cdf0e10cSrcweir unicode_t keymap19_map[] = {
285cdf0e10cSrcweir 0x0152, 0x0153, 0x0178 };
286cdf0e10cSrcweir const keymap_t keymap19 = { 188, 190, keymap19_map };
287cdf0e10cSrcweir
288cdf0e10cSrcweir // missing:
289cdf0e10cSrcweir // Armenian Byte 3 = 0x14 = 20
290cdf0e10cSrcweir // Georgian Byte 3 = 0x15 = 21
291cdf0e10cSrcweir // Azeri Byte 3 = 0x16 = 22
292cdf0e10cSrcweir // Vietnamese Byte 3 = 0x1e = 30
293cdf0e10cSrcweir
294cdf0e10cSrcweir // Currency Byte 3 = 0x20 = 32
295cdf0e10cSrcweir unicode_t keymap32_map[] = {
296cdf0e10cSrcweir 0x20a0, 0x20a1, 0x20a2, 0x20a3, 0x20a4, 0x20a5, 0x20a6, 0x20a7,
297cdf0e10cSrcweir 0x20a8, 0x0000, 0x20aa, 0x20ab, 0x20ac };
298cdf0e10cSrcweir const keymap_t keymap32 = { 160, 172, keymap32_map };
299cdf0e10cSrcweir
300cdf0e10cSrcweir // Keyboard (Keypad mappings) Byte 3 = 0xff = 255
301cdf0e10cSrcweir unicode_t keymap255_map[] = {
302cdf0e10cSrcweir 0x0020, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
303cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
304cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
305cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
306cdf0e10cSrcweir 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
307cdf0e10cSrcweir 0x0000, 0x0000, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
308cdf0e10cSrcweir 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
309cdf0e10cSrcweir 0x0038, 0x0039, 0x0000, 0x0000, 0x0000, 0x003d };
310cdf0e10cSrcweir const keymap_t keymap255 = { 128, 189, keymap255_map };
311cdf0e10cSrcweir
312cdf0e10cSrcweir #define INITIAL_KEYMAPS 33
313cdf0e10cSrcweir const keymap_t* p_keymap[INITIAL_KEYMAPS] = {
314cdf0e10cSrcweir &keymap00, &keymap01, &keymap02, &keymap03, /* 00 -- 03 */
315cdf0e10cSrcweir &keymap04, &keymap05, &keymap06, &keymap07, /* 04 -- 07 */
316cdf0e10cSrcweir &keymap08, &keymap09, &keymap10, &keymap11, /* 08 -- 11 */
317cdf0e10cSrcweir &keymap12, &keymap13, &keymap14, (keymap_t*)NULL, /* 12 -- 15 */
318cdf0e10cSrcweir (keymap_t*)NULL, (keymap_t*)NULL, (keymap_t*)NULL, &keymap19, /* 16 -- 19 */
319cdf0e10cSrcweir (keymap_t*)NULL, (keymap_t*)NULL, (keymap_t*)NULL, (keymap_t*)NULL, /* 20 -- 23 */
320cdf0e10cSrcweir (keymap_t*)NULL, (keymap_t*)NULL, (keymap_t*)NULL, (keymap_t*)NULL, /* 24 -- 27 */
321cdf0e10cSrcweir (keymap_t*)NULL, (keymap_t*)NULL, (keymap_t*)NULL, (keymap_t*)NULL, /* 28 -- 31 */
322cdf0e10cSrcweir &keymap32 /* 32 */
323cdf0e10cSrcweir };
324cdf0e10cSrcweir
325cdf0e10cSrcweir sal_Unicode
KeysymToUnicode(KeySym nKeySym)326cdf0e10cSrcweir KeysymToUnicode (KeySym nKeySym)
327cdf0e10cSrcweir {
328cdf0e10cSrcweir // keysym is already unicode
329cdf0e10cSrcweir if ((nKeySym & 0xff000000) == 0x01000000)
330cdf0e10cSrcweir {
331cdf0e10cSrcweir // strip off group indicator and iso10646 plane
332cdf0e10cSrcweir // FIXME can't handle chars from surrogate area.
333cdf0e10cSrcweir if (! (nKeySym & 0x00ff0000) )
334cdf0e10cSrcweir return (sal_Unicode)(nKeySym & 0x0000ffff);
335cdf0e10cSrcweir }
336cdf0e10cSrcweir // legacy keysyms, switch to appropriate codeset
337cdf0e10cSrcweir else
338cdf0e10cSrcweir {
339cdf0e10cSrcweir unsigned char n_byte1 = (nKeySym & 0xff000000) >> 24;
340cdf0e10cSrcweir unsigned char n_byte2 = (nKeySym & 0x00ff0000) >> 16;
341cdf0e10cSrcweir unsigned char n_byte3 = (nKeySym & 0x0000ff00) >> 8;
342cdf0e10cSrcweir unsigned char n_byte4 = (nKeySym & 0x000000ff);
343cdf0e10cSrcweir
344cdf0e10cSrcweir if (n_byte1 != 0)
345cdf0e10cSrcweir return 0;
346cdf0e10cSrcweir if (n_byte2 != 0)
347cdf0e10cSrcweir return 0;
348cdf0e10cSrcweir
349cdf0e10cSrcweir keymap_t const* p_map = NULL;
350cdf0e10cSrcweir if (n_byte3 < INITIAL_KEYMAPS)
351cdf0e10cSrcweir p_map = p_keymap[n_byte3];
352cdf0e10cSrcweir else
353cdf0e10cSrcweir if (n_byte3 == 255)
354cdf0e10cSrcweir p_map = &keymap255;
355cdf0e10cSrcweir
356cdf0e10cSrcweir if ((p_map != NULL) && (n_byte4 >= p_map->first) && (n_byte4 <= p_map->last) )
357cdf0e10cSrcweir return p_map->map[n_byte4 - p_map->first];
358cdf0e10cSrcweir }
359cdf0e10cSrcweir
360cdf0e10cSrcweir return 0;
361cdf0e10cSrcweir }
362