1 /* $XTermId: charsets.c,v 1.113 2020/12/25 15:15:37 tom Exp $ */
2
3 /*
4 * Copyright 1998-2019,2020 by Thomas E. Dickey
5 *
6 * All Rights Reserved
7 *
8 * Permission is hereby granted, free of charge, to any person obtaining a
9 * copy of this software and associated documentation files (the
10 * "Software"), to deal in the Software without restriction, including
11 * without limitation the rights to use, copy, modify, merge, publish,
12 * distribute, sublicense, and/or sell copies of the Software, and to
13 * permit persons to whom the Software is furnished to do so, subject to
14 * the following conditions:
15 *
16 * The above copyright notice and this permission notice shall be included
17 * in all copies or substantial portions of the Software.
18 *
19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
20 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
21 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
22 * IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDER(S) BE LIABLE FOR ANY
23 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
24 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
25 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
26 *
27 * Except as contained in this notice, the name(s) of the above copyright
28 * holders shall not be used in advertising or otherwise to promote the
29 * sale, use or other dealings in this Software without prior written
30 * authorization.
31 *
32 */
33
34 #include <xterm.h>
35 #include <data.h>
36 #include <fontutils.h>
37
38 #include <X11/keysym.h>
39
40 #define BLANK ' '
41 #define UNDEF 0x2e2e /* rendered as a backwards "?" (alt: 0x2426) */
42
43 /*
44 * This module performs translation as needed to support the DEC VT220 national
45 * replacement character sets as well as supplementary character sets (aka
46 * code-pages) introduced in VT320, etc.
47 *
48 * We assume that xterm's font is based on the ISO 8859-1 (Latin 1) character
49 * set, which is almost the same as the DEC multinational character set. Glyph
50 * positions 0-31 have to be the DEC graphic characters, though.
51 *
52 * References:
53 * "VT220 Programmer Pocket Guide" EK-VT220-HR-002 (2nd ed., 1984), which
54 * contains character charts for the national character sets.
55 * "VT330/VT340 Programmer Reference Manual Volume 1: Text Programming"
56 * EK-VT3XX-TP-001 (1st ed, 1987), which contains a table (2-1)
57 * listing the glyphs which are mapped from the multinational
58 * character set to the national character set.
59 *
60 * The latter reference, though easier to read, has a few errors and omissions.
61 *
62 * According to
63 * Digital ANSI-Compliant Printing Protocol
64 * Level 2 Programming Reference Manual
65 * EK–PPLV2–PM. B01
66 *
67 * the supplementary character sets Greek, Hebrew, Latin-5 and Latin/Cyrillic
68 * are standardized by ISO:
69 * ISO Greek is 8859-7
70 * ISO Hebrew is 8859-8
71 * ISO Latin-5 is 8859-9
72 * ISO Latin/Cyrillic is 8859-5
73 *
74 * These are derived from the data at
75 * ftp://www.unicode.org/Public/MAPPINGS/ISO8859/
76 *
77 * Note: the "figure A-xx" comments refer to EK–PPLV2–PM.
78 */
79
80 /*
81 * A "codepage" is treated different from the NRC mode: it is always enabled.
82 * Reuse the UNI() macros by temporarily setting its state.
83 */
84 #if OPT_WIDE_CHARS
85 #define begin_CODEPAGE() \
86 if (!(xw->flags & NATIONAL)) { \
87 screen->utf8_nrc_mode++; \
88 }
89 #define end_CODEPAGE() \
90 if (!(xw->flags & NATIONAL)) { \
91 screen->utf8_nrc_mode--; \
92 }
93 #else
94 #define begin_CODEPAGE() /* nothing */
95 #define end_CODEPAGE() /* nothing */
96 #endif
97
98 /*
99 * xterm's original implementation of NRCS in 1998 was before Unicode became
100 * prevalent. Most of the necessary mappings could be done using definitions
101 * from X11/keysymdef.h
102 */
103 #define map_NRCS_Dutch(code) \
104 switch (code) { \
105 MAP(0x23, XK_sterling); \
106 MAP(0x40, XK_threequarters); \
107 UNI(0x5b, 0x0133); /* ij ligature */ \
108 MAP(0x5c, XK_onehalf); \
109 MAP(0x5d, XK_bar); \
110 MAP(0x7b, XK_diaeresis); \
111 UNI(0x7c, 0x0192); /* florin */ \
112 MAP(0x7d, XK_onequarter); \
113 MAP(0x7e, XK_acute); \
114 }
115
116 #define map_NRCS_Finnish(code) \
117 switch (code) { \
118 MAP(0x5b, XK_Adiaeresis); \
119 MAP(0x5c, XK_Odiaeresis); \
120 MAP(0x5d, XK_Aring); \
121 MAP(0x5e, XK_Udiaeresis); \
122 MAP(0x60, XK_eacute); \
123 MAP(0x7b, XK_adiaeresis); \
124 MAP(0x7c, XK_odiaeresis); \
125 MAP(0x7d, XK_aring); \
126 MAP(0x7e, XK_udiaeresis); \
127 }
128
129 #define map_NRCS_French(code) \
130 switch (code) { \
131 MAP(0x23, XK_sterling); \
132 MAP(0x40, XK_agrave); \
133 MAP(0x5b, XK_degree); \
134 MAP(0x5c, XK_ccedilla); \
135 MAP(0x5d, XK_section); \
136 MAP(0x7b, XK_eacute); \
137 MAP(0x7c, XK_ugrave); \
138 MAP(0x7d, XK_egrave); \
139 MAP(0x7e, XK_diaeresis); \
140 }
141
142 #define map_NRCS_French_Canadian(code) \
143 switch (code) { \
144 MAP(0x40, XK_agrave); \
145 MAP(0x5b, XK_acircumflex); \
146 MAP(0x5c, XK_ccedilla); \
147 MAP(0x5d, XK_ecircumflex); \
148 MAP(0x5e, XK_icircumflex); \
149 MAP(0x60, XK_ocircumflex); \
150 MAP(0x7b, XK_eacute); \
151 MAP(0x7c, XK_ugrave); \
152 MAP(0x7d, XK_egrave); \
153 MAP(0x7e, XK_ucircumflex); \
154 }
155
156 #define map_NRCS_German(code) \
157 switch (code) { \
158 MAP(0x40, XK_section); \
159 MAP(0x5b, XK_Adiaeresis); \
160 MAP(0x5c, XK_Odiaeresis); \
161 MAP(0x5d, XK_Udiaeresis); \
162 MAP(0x7b, XK_adiaeresis); \
163 MAP(0x7c, XK_odiaeresis); \
164 MAP(0x7d, XK_udiaeresis); \
165 MAP(0x7e, XK_ssharp); \
166 }
167
168 #define map_NRCS_Italian(code) \
169 switch (code) { \
170 MAP(0x23, XK_sterling); \
171 MAP(0x40, XK_section); \
172 MAP(0x5b, XK_degree); \
173 MAP(0x5c, XK_ccedilla); \
174 MAP(0x5d, XK_eacute); \
175 MAP(0x60, XK_ugrave); \
176 MAP(0x7b, XK_agrave); \
177 MAP(0x7c, XK_ograve); \
178 MAP(0x7d, XK_egrave); \
179 MAP(0x7e, XK_igrave); \
180 }
181
182 #define map_NRCS_Norwegian_Danish(code) \
183 switch (code) { \
184 MAP(0x40, XK_Adiaeresis); \
185 MAP(0x5b, XK_AE); \
186 MAP(0x5c, XK_Ooblique); \
187 MAP(0x5d, XK_Aring); \
188 MAP(0x5e, XK_Udiaeresis); \
189 MAP(0x60, XK_adiaeresis); \
190 MAP(0x7b, XK_ae); \
191 MAP(0x7c, XK_oslash); \
192 MAP(0x7d, XK_aring); \
193 MAP(0x7e, XK_udiaeresis); \
194 }
195
196 #define map_NRCS_Portuguese(code) \
197 switch (code) { \
198 MAP(0x5b, XK_Atilde); \
199 MAP(0x5c, XK_Ccedilla); \
200 MAP(0x5d, XK_Otilde); \
201 MAP(0x7b, XK_atilde); \
202 MAP(0x7c, XK_ccedilla); \
203 MAP(0x7d, XK_otilde); \
204 }
205
206 #define map_NRCS_Spanish(code) \
207 switch (code) { \
208 MAP(0x23, XK_sterling); \
209 MAP(0x40, XK_section); \
210 MAP(0x5b, XK_exclamdown); \
211 MAP(0x5c, XK_Ntilde); \
212 MAP(0x5d, XK_questiondown); \
213 MAP(0x7b, XK_degree); \
214 MAP(0x7c, XK_ntilde); \
215 MAP(0x7d, XK_ccedilla); \
216 }
217
218 #define map_NRCS_Swedish(code) \
219 switch (code) { \
220 MAP(0x40, XK_Eacute); \
221 MAP(0x5b, XK_Adiaeresis); \
222 MAP(0x5c, XK_Odiaeresis); \
223 MAP(0x5d, XK_Aring); \
224 MAP(0x5e, XK_Udiaeresis); \
225 MAP(0x60, XK_eacute); \
226 MAP(0x7b, XK_adiaeresis); \
227 MAP(0x7c, XK_odiaeresis); \
228 MAP(0x7d, XK_aring); \
229 MAP(0x7e, XK_udiaeresis); \
230 }
231
232 #define map_NRCS_Swiss(code) \
233 switch (code) { \
234 MAP(0x23, XK_ugrave); \
235 MAP(0x40, XK_agrave); \
236 MAP(0x5b, XK_eacute); \
237 MAP(0x5c, XK_ccedilla); \
238 MAP(0x5d, XK_ecircumflex); \
239 MAP(0x5e, XK_icircumflex); \
240 MAP(0x5f, XK_egrave); \
241 MAP(0x60, XK_ocircumflex); \
242 MAP(0x7b, XK_adiaeresis); \
243 MAP(0x7c, XK_odiaeresis); \
244 MAP(0x7d, XK_udiaeresis); \
245 MAP(0x7e, XK_ucircumflex); \
246 }
247
248 /*
249 * Unlike NRCS, which splices a few characters onto ASCII, the supplementary
250 * character sets are complete, normally mapped to GR. Most of these mappings
251 * rely upon glyphs not found in ISO-8859-1. We can display most of those
252 * using Unicode, thereby supporting specialized applications that use SCS
253 * with luit, subject to the limitation that select/paste will give meaningless
254 * results in terms of the application which uses these mappings.
255 *
256 * Since the codepages introduced with VT320, etc, use 8-bit encodings, there
257 * is no plausible argument to be made that these mappings "use" UTF-8, even
258 * though there is a hidden step in the terminal emulator which relies upon
259 * UTF-8.
260 */
261 #define map_DEC_Supp_Graphic(code,dft) \
262 begin_CODEPAGE(); \
263 switch (code) { \
264 XXX(0x24, UNDEF); \
265 XXX(0x26, UNDEF); \
266 MAP(0x28, 0xa4); \
267 XXX(0x2c, UNDEF); \
268 XXX(0x2d, UNDEF); \
269 XXX(0x2e, UNDEF); \
270 XXX(0x2f, UNDEF); \
271 XXX(0x34, UNDEF); \
272 XXX(0x38, UNDEF); \
273 XXX(0x3e, UNDEF); \
274 XXX(0x50, UNDEF); \
275 UNI(0x57, 0x0152); \
276 MAP(0x5d, 0x0178); \
277 XXX(0x5e, UNDEF); \
278 XXX(0x70, UNDEF); \
279 UNI(0x77, 0x0153); \
280 MAP(0x7d, 0xff); \
281 XXX(0x7e, UNDEF); \
282 XXX(0x7f, UNDEF); \
283 default: dft; break; \
284 } \
285 end_CODEPAGE()
286
287 #if OPT_WIDE_CHARS
288 /* derived from http://www.vt100.net/charsets/technical.html */
289 #define map_DEC_Technical(code) \
290 begin_CODEPAGE(); \
291 switch (code) { \
292 UNI(0x21, 0x23b7); /* RADICAL SYMBOL BOTTOM Centred left to right, so that it joins up with 02/02 */ \
293 UNI(0x22, 0x250c); /* BOX DRAWINGS LIGHT DOWN AND RIGHT */ \
294 UNI(0x23, 0x2500); /* BOX DRAWINGS LIGHT HORIZONTAL */ \
295 UNI(0x24, 0x2320); /* TOP HALF INTEGRAL with the proviso that the stem is vertical, to join with 02/06 */ \
296 UNI(0x25, 0x2321); /* BOTTOM HALF INTEGRAL with the proviso above. */ \
297 UNI(0x26, 0x2502); /* BOX DRAWINGS LIGHT VERTICAL */ \
298 UNI(0x27, 0x23a1); /* LEFT SQUARE BRACKET UPPER CORNER Joins vertically to 02/06, 02/08. Doesn't join to its right. */ \
299 UNI(0x28, 0x23a3); /* LEFT SQUARE BRACKET LOWER CORNER Joins vertically to 02/06, 02/07. Doesn't join to its right. */ \
300 UNI(0x29, 0x23a4); /* RIGHT SQUARE BRACKET UPPER CORNER Joins vertically to 026, 02a. Doesn't join to its left. */ \
301 UNI(0x2a, 0x23a6); /* RIGHT SQUARE BRACKET LOWER CORNER Joins vertically to 026, 029. Doesn't join to its left. */ \
302 UNI(0x2b, 0x23a7); /* LEFT CURLY BRACKET UPPER HOOK Joins vertically to 026, 02c, 02/15. Doesn't join to its right. */ \
303 UNI(0x2c, 0x23a9); /* LEFT CURLY BRACKET LOWER HOOK Joins vertically to 026, 02b, 02/15. Doesn't join to its right. */ \
304 UNI(0x2d, 0x23ab); /* RIGHT CURLY BRACKET UPPER HOOK Joins vertically to 026, 02e, 03/00. Doesn't join to its left. */ \
305 UNI(0x2e, 0x23ad); /* RIGHT CURLY BRACKET LOWER HOOK Joins vertically to 026, 02d, 03/00. Doesn't join to its left. */ \
306 UNI(0x2f, 0x23a8); /* LEFT CURLY BRACKET MIDDLE PIECE Joins vertically to 026, 02b, 02c. */ \
307 UNI(0x30, 0x23ac); /* RIGHT CURLY BRACKET MIDDLE PIECE Joins vertically to 02/06, 02d, 02e. */ \
308 XXX(0x31, UNDEF); /* Top Left Sigma. Joins to right with 02/03, 03/05. Joins diagonally below right with 03/03, 03/07. */ \
309 XXX(0x32, UNDEF); /* Bottom Left Sigma. Joins to right with 02/03, 03/06. Joins diagonally above right with 03/04, 03/07. */ \
310 XXX(0x33, UNDEF); /* Top Diagonal Sigma. Line for joining 03/01 to 03/04 or 03/07. */ \
311 XXX(0x34, UNDEF); /* Bottom Diagonal Sigma. Line for joining 03/02 to 03/03 or 03/07. */ \
312 XXX(0x35, UNDEF); /* Top Right Sigma. Joins to left with 02/03, 03/01. */ \
313 XXX(0x36, UNDEF); /* Bottom Right Sigma. Joins to left with 02/03, 03/02. */ \
314 XXX(0x37, UNDEF); /* Middle Sigma. Joins diagonally with 03/01, 03/02, 03/03, 03/04. */ \
315 XXX(0x38, UNDEF); /* undefined */ \
316 XXX(0x39, UNDEF); /* undefined */ \
317 XXX(0x3a, UNDEF); /* undefined */ \
318 XXX(0x3b, UNDEF); /* undefined */ \
319 UNI(0x3c, 0x2264); /* LESS-THAN OR EQUAL TO */ \
320 UNI(0x3d, 0x2260); /* NOT EQUAL TO */ \
321 UNI(0x3e, 0x2265); /* GREATER-THAN OR EQUAL TO */ \
322 UNI(0x3f, 0x222B); /* INTEGRAL */ \
323 UNI(0x40, 0x2234); /* THEREFORE */ \
324 UNI(0x41, 0x221d); /* PROPORTIONAL TO */ \
325 UNI(0x42, 0x221e); /* INFINITY */ \
326 UNI(0x43, 0x00f7); /* DIVISION SIGN */ \
327 UNI(0x44, 0x0394); /* GREEK CAPITAL DELTA */ \
328 UNI(0x45, 0x2207); /* NABLA */ \
329 UNI(0x46, 0x03a6); /* GREEK CAPITAL LETTER PHI */ \
330 UNI(0x47, 0x0393); /* GREEK CAPITAL LETTER GAMMA */ \
331 UNI(0x48, 0x223c); /* TILDE OPERATOR */ \
332 UNI(0x49, 0x2243); /* ASYMPTOTICALLY EQUAL TO */ \
333 UNI(0x4a, 0x0398); /* GREEK CAPITAL LETTER THETA */ \
334 UNI(0x4b, 0x00d7); /* MULTIPLICATION SIGN */ \
335 UNI(0x4c, 0x039b); /* GREEK CAPITAL LETTER LAMDA */ \
336 UNI(0x4d, 0x21d4); /* LEFT RIGHT DOUBLE ARROW */ \
337 UNI(0x4e, 0x21d2); /* RIGHTWARDS DOUBLE ARROW */ \
338 UNI(0x4f, 0x2261); /* IDENTICAL TO */ \
339 UNI(0x50, 0x03a0); /* GREEK CAPITAL LETTER PI */ \
340 UNI(0x51, 0x03a8); /* GREEK CAPITAL LETTER PSI */ \
341 UNI(0x52, UNDEF); /* undefined */ \
342 UNI(0x53, 0x03a3); /* GREEK CAPITAL LETTER SIGMA */ \
343 XXX(0x54, UNDEF); /* undefined */ \
344 XXX(0x55, UNDEF); /* undefined */ \
345 UNI(0x56, 0x221a); /* SQUARE ROOT */ \
346 UNI(0x57, 0x03a9); /* GREEK CAPITAL LETTER OMEGA */ \
347 UNI(0x58, 0x039e); /* GREEK CAPITAL LETTER XI */ \
348 UNI(0x59, 0x03a5); /* GREEK CAPITAL LETTER UPSILON */ \
349 UNI(0x5a, 0x2282); /* SUBSET OF */ \
350 UNI(0x5b, 0x2283); /* SUPERSET OF */ \
351 UNI(0x5c, 0x2229); /* INTERSECTION */ \
352 UNI(0x5d, 0x222a); /* UNION */ \
353 UNI(0x5e, 0x2227); /* LOGICAL AND */ \
354 UNI(0x5f, 0x2228); /* LOGICAL OR */ \
355 UNI(0x60, 0x00ac); /* NOT SIGN */ \
356 UNI(0x61, 0x03b1); /* GREEK SMALL LETTER ALPHA */ \
357 UNI(0x62, 0x03b2); /* GREEK SMALL LETTER BETA */ \
358 UNI(0x63, 0x03c7); /* GREEK SMALL LETTER CHI */ \
359 UNI(0x64, 0x03b4); /* GREEK SMALL LETTER DELTA */ \
360 UNI(0x65, 0x03b5); /* GREEK SMALL LETTER EPSILON */ \
361 UNI(0x66, 0x03c6); /* GREEK SMALL LETTER PHI */ \
362 UNI(0x67, 0x03b3); /* GREEK SMALL LETTER GAMMA */ \
363 UNI(0x68, 0x03b7); /* GREEK SMALL LETTER ETA */ \
364 UNI(0x69, 0x03b9); /* GREEK SMALL LETTER IOTA */ \
365 UNI(0x6a, 0x03b8); /* GREEK SMALL LETTER THETA */ \
366 UNI(0x6b, 0x03ba); /* GREEK SMALL LETTER KAPPA */ \
367 UNI(0x6c, 0x03bb); /* GREEK SMALL LETTER LAMDA */ \
368 XXX(0x6d, UNDEF); /* undefined */ \
369 UNI(0x6e, 0x03bd); /* GREEK SMALL LETTER NU */ \
370 UNI(0x6f, 0x2202); /* PARTIAL DIFFERENTIAL */ \
371 UNI(0x70, 0x03c0); /* GREEK SMALL LETTER PI */ \
372 UNI(0x71, 0x03c8); /* GREEK SMALL LETTER PSI */ \
373 UNI(0x72, 0x03c1); /* GREEK SMALL LETTER RHO */ \
374 UNI(0x73, 0x03c3); /* GREEK SMALL LETTER SIGMA */ \
375 UNI(0x74, 0x03c4); /* GREEK SMALL LETTER TAU */ \
376 XXX(0x75, UNDEF); /* undefined */ \
377 UNI(0x76, 0x0192); /* LATIN SMALL LETTER F WITH HOOK Probably chosen for its meaning of "function" */ \
378 UNI(0x77, 0x03c9); /* GREEK SMALL LETTER OMEGA */ \
379 UNI(0x78, 0x03bE); /* GREEK SMALL LETTER XI */ \
380 UNI(0x79, 0x03c5); /* GREEK SMALL LETTER UPSILON */ \
381 UNI(0x7a, 0x03b6); /* GREEK SMALL LETTER ZETA */ \
382 UNI(0x7b, 0x2190); /* LEFTWARDS ARROW */ \
383 UNI(0x7c, 0x2191); /* UPWARDS ARROW */ \
384 UNI(0x7d, 0x2192); /* RIGHTWARDS ARROW */ \
385 UNI(0x7e, 0x2193); /* DOWNWARDS ARROW */ \
386 } \
387 end_CODEPAGE()
388 /* ISO Latin/Cyrillic is 8859-5 */
389 #define map_ISO_Latin_Cyrillic(code) \
390 begin_CODEPAGE(); \
391 switch (code) { \
392 UNI(0x20, 0x00a0); /* NO-BREAK SPACE */ \
393 UNI(0x21, 0x0401); /* CYRILLIC CAPITAL LETTER IO */ \
394 UNI(0x22, 0x0402); /* CYRILLIC CAPITAL LETTER DJE */ \
395 UNI(0x23, 0x0403); /* CYRILLIC CAPITAL LETTER GJE */ \
396 UNI(0x24, 0x0404); /* CYRILLIC CAPITAL LETTER UKRAINIAN IE */ \
397 UNI(0x25, 0x0405); /* CYRILLIC CAPITAL LETTER DZE */ \
398 UNI(0x26, 0x0406); /* CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I */ \
399 UNI(0x27, 0x0407); /* CYRILLIC CAPITAL LETTER YI */ \
400 UNI(0x28, 0x0408); /* CYRILLIC CAPITAL LETTER JE */ \
401 UNI(0x29, 0x0409); /* CYRILLIC CAPITAL LETTER LJE */ \
402 UNI(0x2a, 0x040a); /* CYRILLIC CAPITAL LETTER NJE */ \
403 UNI(0x2b, 0x040b); /* CYRILLIC CAPITAL LETTER TSHE */ \
404 UNI(0x2c, 0x040c); /* CYRILLIC CAPITAL LETTER KJE */ \
405 UNI(0x2d, 0x00ad); /* SOFT HYPHEN */ \
406 UNI(0x2e, 0x040e); /* CYRILLIC CAPITAL LETTER SHORT U */ \
407 UNI(0x2f, 0x040f); /* CYRILLIC CAPITAL LETTER DZHE */ \
408 UNI(0x30, 0x0410); /* CYRILLIC CAPITAL LETTER A */ \
409 UNI(0x31, 0x0411); /* CYRILLIC CAPITAL LETTER BE */ \
410 UNI(0x32, 0x0412); /* CYRILLIC CAPITAL LETTER VE */ \
411 UNI(0x33, 0x0413); /* CYRILLIC CAPITAL LETTER GHE */ \
412 UNI(0x34, 0x0414); /* CYRILLIC CAPITAL LETTER DE */ \
413 UNI(0x35, 0x0415); /* CYRILLIC CAPITAL LETTER IE */ \
414 UNI(0x36, 0x0416); /* CYRILLIC CAPITAL LETTER ZHE */ \
415 UNI(0x37, 0x0417); /* CYRILLIC CAPITAL LETTER ZE */ \
416 UNI(0x38, 0x0418); /* CYRILLIC CAPITAL LETTER I */ \
417 UNI(0x39, 0x0419); /* CYRILLIC CAPITAL LETTER SHORT I */ \
418 UNI(0x3a, 0x041a); /* CYRILLIC CAPITAL LETTER KA */ \
419 UNI(0x3b, 0x041b); /* CYRILLIC CAPITAL LETTER EL */ \
420 UNI(0x3c, 0x041c); /* CYRILLIC CAPITAL LETTER EM */ \
421 UNI(0x3d, 0x041d); /* CYRILLIC CAPITAL LETTER EN */ \
422 UNI(0x3e, 0x041e); /* CYRILLIC CAPITAL LETTER O */ \
423 UNI(0x3f, 0x041f); /* CYRILLIC CAPITAL LETTER PE */ \
424 UNI(0x40, 0x0420); /* CYRILLIC CAPITAL LETTER ER */ \
425 UNI(0x41, 0x0421); /* CYRILLIC CAPITAL LETTER ES */ \
426 UNI(0x42, 0x0422); /* CYRILLIC CAPITAL LETTER TE */ \
427 UNI(0x43, 0x0423); /* CYRILLIC CAPITAL LETTER U */ \
428 UNI(0x44, 0x0424); /* CYRILLIC CAPITAL LETTER EF */ \
429 UNI(0x45, 0x0425); /* CYRILLIC CAPITAL LETTER HA */ \
430 UNI(0x46, 0x0426); /* CYRILLIC CAPITAL LETTER TSE */ \
431 UNI(0x47, 0x0427); /* CYRILLIC CAPITAL LETTER CHE */ \
432 UNI(0x48, 0x0428); /* CYRILLIC CAPITAL LETTER SHA */ \
433 UNI(0x49, 0x0429); /* CYRILLIC CAPITAL LETTER SHCHA */ \
434 UNI(0x4a, 0x042a); /* CYRILLIC CAPITAL LETTER HARD SIGN */ \
435 UNI(0x4b, 0x042b); /* CYRILLIC CAPITAL LETTER YERU */ \
436 UNI(0x4c, 0x042c); /* CYRILLIC CAPITAL LETTER SOFT SIGN */ \
437 UNI(0x4d, 0x042d); /* CYRILLIC CAPITAL LETTER E */ \
438 UNI(0x4e, 0x042e); /* CYRILLIC CAPITAL LETTER YU */ \
439 UNI(0x4f, 0x042f); /* CYRILLIC CAPITAL LETTER YA */ \
440 UNI(0x50, 0x0430); /* CYRILLIC SMALL LETTER A */ \
441 UNI(0x51, 0x0431); /* CYRILLIC SMALL LETTER BE */ \
442 UNI(0x52, 0x0432); /* CYRILLIC SMALL LETTER VE */ \
443 UNI(0x53, 0x0433); /* CYRILLIC SMALL LETTER GHE */ \
444 UNI(0x54, 0x0434); /* CYRILLIC SMALL LETTER DE */ \
445 UNI(0x55, 0x0435); /* CYRILLIC SMALL LETTER IE */ \
446 UNI(0x56, 0x0436); /* CYRILLIC SMALL LETTER ZHE */ \
447 UNI(0x57, 0x0437); /* CYRILLIC SMALL LETTER ZE */ \
448 UNI(0x58, 0x0438); /* CYRILLIC SMALL LETTER I */ \
449 UNI(0x59, 0x0439); /* CYRILLIC SMALL LETTER SHORT I */ \
450 UNI(0x5a, 0x043a); /* CYRILLIC SMALL LETTER KA */ \
451 UNI(0x5b, 0x043b); /* CYRILLIC SMALL LETTER EL */ \
452 UNI(0x5c, 0x043c); /* CYRILLIC SMALL LETTER EM */ \
453 UNI(0x5d, 0x043d); /* CYRILLIC SMALL LETTER EN */ \
454 UNI(0x5e, 0x043e); /* CYRILLIC SMALL LETTER O */ \
455 UNI(0x5f, 0x043f); /* CYRILLIC SMALL LETTER PE */ \
456 UNI(0x60, 0x0440); /* CYRILLIC SMALL LETTER ER */ \
457 UNI(0x61, 0x0441); /* CYRILLIC SMALL LETTER ES */ \
458 UNI(0x62, 0x0442); /* CYRILLIC SMALL LETTER TE */ \
459 UNI(0x63, 0x0443); /* CYRILLIC SMALL LETTER U */ \
460 UNI(0x64, 0x0444); /* CYRILLIC SMALL LETTER EF */ \
461 UNI(0x65, 0x0445); /* CYRILLIC SMALL LETTER HA */ \
462 UNI(0x66, 0x0446); /* CYRILLIC SMALL LETTER TSE */ \
463 UNI(0x67, 0x0447); /* CYRILLIC SMALL LETTER CHE */ \
464 UNI(0x68, 0x0448); /* CYRILLIC SMALL LETTER SHA */ \
465 UNI(0x69, 0x0449); /* CYRILLIC SMALL LETTER SHCHA */ \
466 UNI(0x6a, 0x044a); /* CYRILLIC SMALL LETTER HARD SIGN */ \
467 UNI(0x6b, 0x044b); /* CYRILLIC SMALL LETTER YERU */ \
468 UNI(0x6c, 0x044c); /* CYRILLIC SMALL LETTER SOFT SIGN */ \
469 UNI(0x6d, 0x044d); /* CYRILLIC SMALL LETTER E */ \
470 UNI(0x6e, 0x044e); /* CYRILLIC SMALL LETTER YU */ \
471 UNI(0x6f, 0x044f); /* CYRILLIC SMALL LETTER YA */ \
472 UNI(0x70, 0x2116); /* NUMERO SIGN */ \
473 UNI(0x71, 0x0451); /* CYRILLIC SMALL LETTER IO */ \
474 UNI(0x72, 0x0452); /* CYRILLIC SMALL LETTER DJE */ \
475 UNI(0x73, 0x0453); /* CYRILLIC SMALL LETTER GJE */ \
476 UNI(0x74, 0x0454); /* CYRILLIC SMALL LETTER UKRAINIAN IE */ \
477 UNI(0x75, 0x0455); /* CYRILLIC SMALL LETTER DZE */ \
478 UNI(0x76, 0x0456); /* CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I */ \
479 UNI(0x77, 0x0457); /* CYRILLIC SMALL LETTER YI */ \
480 UNI(0x78, 0x0458); /* CYRILLIC SMALL LETTER JE */ \
481 UNI(0x79, 0x0459); /* CYRILLIC SMALL LETTER LJE */ \
482 UNI(0x7a, 0x045a); /* CYRILLIC SMALL LETTER NJE */ \
483 UNI(0x7b, 0x045b); /* CYRILLIC SMALL LETTER TSHE */ \
484 UNI(0x7c, 0x045c); /* CYRILLIC SMALL LETTER KJE */ \
485 UNI(0x7d, 0x00a7); /* SECTION SIGN */ \
486 UNI(0x7e, 0x045e); /* CYRILLIC SMALL LETTER SHORT U */ \
487 UNI(0x7f, 0x045f); /* CYRILLIC SMALL LETTER DZHE */ \
488 } \
489 end_CODEPAGE()
490 /* ISO Greek is 8859-7 */
491 #define map_ISO_Greek_Supp(code) \
492 begin_CODEPAGE(); \
493 switch (code) { \
494 UNI(0x20, 0x00a0); /* NO-BREAK SPACE */ \
495 UNI(0x21, 0x2018); /* LEFT SINGLE QUOTATION MARK */ \
496 UNI(0x22, 0x2019); /* RIGHT SINGLE QUOTATION MARK */ \
497 UNI(0x23, 0x00a3); /* POUND SIGN */ \
498 UNI(0x24, 0x20ac); /* EURO SIGN */ \
499 UNI(0x25, 0x20af); /* DRACHMA SIGN */ \
500 UNI(0x26, 0x00a6); /* BROKEN BAR */ \
501 UNI(0x27, 0x00a7); /* SECTION SIGN */ \
502 UNI(0x28, 0x00a8); /* DIAERESIS */ \
503 UNI(0x29, 0x00a9); /* COPYRIGHT SIGN */ \
504 UNI(0x2a, 0x037a); /* GREEK YPOGEGRAMMENI */ \
505 UNI(0x2b, 0x00ab); /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */ \
506 UNI(0x2c, 0x00ac); /* NOT SIGN */ \
507 UNI(0x2d, 0x00ad); /* SOFT HYPHEN */ \
508 XXX(0x2e, UNDEF); /* undefined */ \
509 UNI(0x2f, 0x2015); /* HORIZONTAL BAR */ \
510 UNI(0x30, 0x00b0); /* DEGREE SIGN */ \
511 UNI(0x31, 0x00b1); /* PLUS-MINUS SIGN */ \
512 UNI(0x32, 0x00b2); /* SUPERSCRIPT TWO */ \
513 UNI(0x33, 0x00b3); /* SUPERSCRIPT THREE */ \
514 UNI(0x34, 0x0384); /* GREEK TONOS */ \
515 UNI(0x35, 0x0385); /* GREEK DIALYTIKA TONOS */ \
516 UNI(0x36, 0x0386); /* GREEK CAPITAL LETTER ALPHA WITH TONOS */ \
517 UNI(0x37, 0x00b7); /* MIDDLE DOT */ \
518 UNI(0x38, 0x0388); /* GREEK CAPITAL LETTER EPSILON WITH TONOS */ \
519 UNI(0x39, 0x0389); /* GREEK CAPITAL LETTER ETA WITH TONOS */ \
520 UNI(0x3a, 0x038a); /* GREEK CAPITAL LETTER IOTA WITH TONOS */ \
521 UNI(0x3b, 0x00bb); /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */ \
522 UNI(0x3c, 0x038c); /* GREEK CAPITAL LETTER OMICRON WITH TONOS */ \
523 UNI(0x3d, 0x00bd); /* VULGAR FRACTION ONE HALF */ \
524 UNI(0x3e, 0x038e); /* GREEK CAPITAL LETTER UPSILON WITH TONOS */ \
525 UNI(0x3f, 0x038f); /* GREEK CAPITAL LETTER OMEGA WITH TONOS */ \
526 UNI(0x40, 0x0390); /* GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS */ \
527 UNI(0x41, 0x0391); /* GREEK CAPITAL LETTER ALPHA */ \
528 UNI(0x42, 0x0392); /* GREEK CAPITAL LETTER BETA */ \
529 UNI(0x43, 0x0393); /* GREEK CAPITAL LETTER GAMMA */ \
530 UNI(0x44, 0x0394); /* GREEK CAPITAL LETTER DELTA */ \
531 UNI(0x45, 0x0395); /* GREEK CAPITAL LETTER EPSILON */ \
532 UNI(0x46, 0x0396); /* GREEK CAPITAL LETTER ZETA */ \
533 UNI(0x47, 0x0397); /* GREEK CAPITAL LETTER ETA */ \
534 UNI(0x48, 0x0398); /* GREEK CAPITAL LETTER THETA */ \
535 UNI(0x49, 0x0399); /* GREEK CAPITAL LETTER IOTA */ \
536 UNI(0x4a, 0x039a); /* GREEK CAPITAL LETTER KAPPA */ \
537 UNI(0x4b, 0x039b); /* GREEK CAPITAL LETTER LAMDA */ \
538 UNI(0x4c, 0x039c); /* GREEK CAPITAL LETTER MU */ \
539 UNI(0x4d, 0x039d); /* GREEK CAPITAL LETTER NU */ \
540 UNI(0x4e, 0x039e); /* GREEK CAPITAL LETTER XI */ \
541 UNI(0x4f, 0x039f); /* GREEK CAPITAL LETTER OMICRON */ \
542 UNI(0x50, 0x03a0); /* GREEK CAPITAL LETTER PI */ \
543 UNI(0x51, 0x03a1); /* GREEK CAPITAL LETTER RHO */ \
544 XXX(0x52, UNDEF); /* undefined */ \
545 UNI(0x53, 0x03a3); /* GREEK CAPITAL LETTER SIGMA */ \
546 UNI(0x54, 0x03a4); /* GREEK CAPITAL LETTER TAU */ \
547 UNI(0x55, 0x03a5); /* GREEK CAPITAL LETTER UPSILON */ \
548 UNI(0x56, 0x03a6); /* GREEK CAPITAL LETTER PHI */ \
549 UNI(0x57, 0x03a7); /* GREEK CAPITAL LETTER CHI */ \
550 UNI(0x58, 0x03a8); /* GREEK CAPITAL LETTER PSI */ \
551 UNI(0x59, 0x03a9); /* GREEK CAPITAL LETTER OMEGA */ \
552 UNI(0x5a, 0x03aa); /* GREEK CAPITAL LETTER IOTA WITH DIALYTIKA */ \
553 UNI(0x5b, 0x03ab); /* GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA */ \
554 UNI(0x5c, 0x03ac); /* GREEK SMALL LETTER ALPHA WITH TONOS */ \
555 UNI(0x5d, 0x03ad); /* GREEK SMALL LETTER EPSILON WITH TONOS */ \
556 UNI(0x5e, 0x03ae); /* GREEK SMALL LETTER ETA WITH TONOS */ \
557 UNI(0x5f, 0x03af); /* GREEK SMALL LETTER IOTA WITH TONOS */ \
558 UNI(0x60, 0x03b0); /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS */ \
559 UNI(0x61, 0x03b1); /* GREEK SMALL LETTER ALPHA */ \
560 UNI(0x62, 0x03b2); /* GREEK SMALL LETTER BETA */ \
561 UNI(0x63, 0x03b3); /* GREEK SMALL LETTER GAMMA */ \
562 UNI(0x64, 0x03b4); /* GREEK SMALL LETTER DELTA */ \
563 UNI(0x65, 0x03b5); /* GREEK SMALL LETTER EPSILON */ \
564 UNI(0x66, 0x03b6); /* GREEK SMALL LETTER ZETA */ \
565 UNI(0x67, 0x03b7); /* GREEK SMALL LETTER ETA */ \
566 UNI(0x68, 0x03b8); /* GREEK SMALL LETTER THETA */ \
567 UNI(0x69, 0x03b9); /* GREEK SMALL LETTER IOTA */ \
568 UNI(0x6a, 0x03ba); /* GREEK SMALL LETTER KAPPA */ \
569 UNI(0x6b, 0x03bb); /* GREEK SMALL LETTER LAMDA */ \
570 UNI(0x6c, 0x03bc); /* GREEK SMALL LETTER MU */ \
571 UNI(0x6d, 0x03bd); /* GREEK SMALL LETTER NU */ \
572 UNI(0x6e, 0x03be); /* GREEK SMALL LETTER XI */ \
573 UNI(0x6f, 0x03bf); /* GREEK SMALL LETTER OMICRON */ \
574 UNI(0x70, 0x03c0); /* GREEK SMALL LETTER PI */ \
575 UNI(0x71, 0x03c1); /* GREEK SMALL LETTER RHO */ \
576 UNI(0x72, 0x03c2); /* GREEK SMALL LETTER FINAL SIGMA */ \
577 UNI(0x73, 0x03c3); /* GREEK SMALL LETTER SIGMA */ \
578 UNI(0x74, 0x03c4); /* GREEK SMALL LETTER TAU */ \
579 UNI(0x75, 0x03c5); /* GREEK SMALL LETTER UPSILON */ \
580 UNI(0x76, 0x03c6); /* GREEK SMALL LETTER PHI */ \
581 UNI(0x77, 0x03c7); /* GREEK SMALL LETTER CHI */ \
582 UNI(0x78, 0x03c8); /* GREEK SMALL LETTER PSI */ \
583 UNI(0x79, 0x03c9); /* GREEK SMALL LETTER OMEGA */ \
584 UNI(0x7a, 0x03ca); /* GREEK SMALL LETTER IOTA WITH DIALYTIKA */ \
585 UNI(0x7b, 0x03cb); /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA */ \
586 UNI(0x7c, 0x03cc); /* GREEK SMALL LETTER OMICRON WITH TONOS */ \
587 UNI(0x7d, 0x03cd); /* GREEK SMALL LETTER UPSILON WITH TONOS */ \
588 UNI(0x7e, 0x03ce); /* GREEK SMALL LETTER OMEGA WITH TONOS */ \
589 } \
590 end_CODEPAGE()
591 /* figure A-23 "ISO Latin-Hebrew Supplemental Character Set" */
592 #define map_ISO_Hebrew(code) \
593 begin_CODEPAGE(); \
594 switch (code) { \
595 UNI(0x20, 0x00a0); /* NO-BREAK SPACE */ \
596 XXX(0x21, UNDEF); /* undefined */ \
597 UNI(0x22, 0x00a2); /* CENT SIGN */ \
598 UNI(0x23, 0x00a3); /* POUND SIGN */ \
599 UNI(0x24, 0x00a4); /* CURRENCY SIGN */ \
600 UNI(0x25, 0x00a5); /* YEN SIGN */ \
601 UNI(0x26, 0x00a6); /* BROKEN BAR */ \
602 UNI(0x27, 0x00a7); /* SECTION SIGN */ \
603 UNI(0x28, 0x00a8); /* DIAERESIS */ \
604 UNI(0x29, 0x00a9); /* COPYRIGHT SIGN */ \
605 UNI(0x2a, 0x00d7); /* MULTIPLICATION SIGN */ \
606 UNI(0x2b, 0x00ab); /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */ \
607 UNI(0x2c, 0x00ac); /* NOT SIGN */ \
608 UNI(0x2d, 0x00ad); /* SOFT HYPHEN */ \
609 UNI(0x2e, 0x00ae); /* REGISTERED SIGN */ \
610 UNI(0x2f, 0x00af); /* MACRON */ \
611 UNI(0x30, 0x00b0); /* DEGREE SIGN */ \
612 UNI(0x31, 0x00b1); /* PLUS-MINUS SIGN */ \
613 UNI(0x32, 0x00b2); /* SUPERSCRIPT TWO */ \
614 UNI(0x33, 0x00b3); /* SUPERSCRIPT THREE */ \
615 UNI(0x34, 0x00b4); /* ACUTE ACCENT */ \
616 UNI(0x35, 0x00b5); /* MICRO SIGN */ \
617 UNI(0x36, 0x00b6); /* PILCROW SIGN */ \
618 UNI(0x37, 0x00b7); /* MIDDLE DOT */ \
619 UNI(0x38, 0x00b8); /* CEDILLA */ \
620 UNI(0x39, 0x00b9); /* SUPERSCRIPT ONE */ \
621 UNI(0x3a, 0x00f7); /* DIVISION SIGN */ \
622 UNI(0x3b, 0x00bb); /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */ \
623 UNI(0x3c, 0x00bc); /* VULGAR FRACTION ONE QUARTER */ \
624 UNI(0x3d, 0x00bd); /* VULGAR FRACTION ONE HALF */ \
625 UNI(0x3e, 0x00be); /* VULGAR FRACTION THREE QUARTERS */ \
626 XXX(0x3f, UNDEF); /* undefined */ \
627 XXX(0x40, UNDEF); /* undefined */ \
628 XXX(0x41, UNDEF); /* undefined */ \
629 XXX(0x42, UNDEF); /* undefined */ \
630 XXX(0x43, UNDEF); /* undefined */ \
631 XXX(0x44, UNDEF); /* undefined */ \
632 XXX(0x45, UNDEF); /* undefined */ \
633 XXX(0x46, UNDEF); /* undefined */ \
634 XXX(0x47, UNDEF); /* undefined */ \
635 XXX(0x48, UNDEF); /* undefined */ \
636 XXX(0x49, UNDEF); /* undefined */ \
637 XXX(0x4a, UNDEF); /* undefined */ \
638 XXX(0x4b, UNDEF); /* undefined */ \
639 XXX(0x4c, UNDEF); /* undefined */ \
640 XXX(0x4d, UNDEF); /* undefined */ \
641 XXX(0x4e, UNDEF); /* undefined */ \
642 XXX(0x4f, UNDEF); /* undefined */ \
643 XXX(0x50, UNDEF); /* undefined */ \
644 XXX(0x51, UNDEF); /* undefined */ \
645 XXX(0x52, UNDEF); /* undefined */ \
646 XXX(0x53, UNDEF); /* undefined */ \
647 XXX(0x54, UNDEF); /* undefined */ \
648 XXX(0x55, UNDEF); /* undefined */ \
649 XXX(0x56, UNDEF); /* undefined */ \
650 XXX(0x57, UNDEF); /* undefined */ \
651 XXX(0x58, UNDEF); /* undefined */ \
652 XXX(0x59, UNDEF); /* undefined */ \
653 XXX(0x5a, UNDEF); /* undefined */ \
654 XXX(0x5b, UNDEF); /* undefined */ \
655 XXX(0x5c, UNDEF); /* undefined */ \
656 XXX(0x5d, UNDEF); /* undefined */ \
657 XXX(0x5e, UNDEF); /* undefined */ \
658 UNI(0x5f, 0x2017); /* DOUBLE LOW LINE */ \
659 UNI(0x60, 0x05d0); /* HEBREW LETTER ALEF */ \
660 UNI(0x61, 0x05d1); /* HEBREW LETTER BET */ \
661 UNI(0x62, 0x05d2); /* HEBREW LETTER GIMEL */ \
662 UNI(0x63, 0x05d3); /* HEBREW LETTER DALET */ \
663 UNI(0x64, 0x05d4); /* HEBREW LETTER HE */ \
664 UNI(0x65, 0x05d5); /* HEBREW LETTER VAV */ \
665 UNI(0x66, 0x05d6); /* HEBREW LETTER ZAYIN */ \
666 UNI(0x67, 0x05d7); /* HEBREW LETTER HET */ \
667 UNI(0x68, 0x05d8); /* HEBREW LETTER TET */ \
668 UNI(0x69, 0x05d9); /* HEBREW LETTER YOD */ \
669 UNI(0x6a, 0x05da); /* HEBREW LETTER FINAL KAF */ \
670 UNI(0x6b, 0x05db); /* HEBREW LETTER KAF */ \
671 UNI(0x6c, 0x05dc); /* HEBREW LETTER LAMED */ \
672 UNI(0x6d, 0x05dd); /* HEBREW LETTER FINAL MEM */ \
673 UNI(0x6e, 0x05de); /* HEBREW LETTER MEM */ \
674 UNI(0x6f, 0x05df); /* HEBREW LETTER FINAL NUN */ \
675 UNI(0x70, 0x05e0); /* HEBREW LETTER NUN */ \
676 UNI(0x71, 0x05e1); /* HEBREW LETTER SAMEKH */ \
677 UNI(0x72, 0x05e2); /* HEBREW LETTER AYIN */ \
678 UNI(0x73, 0x05e3); /* HEBREW LETTER FINAL PE */ \
679 UNI(0x74, 0x05e4); /* HEBREW LETTER PE */ \
680 UNI(0x75, 0x05e5); /* HEBREW LETTER FINAL TSADI */ \
681 UNI(0x76, 0x05e6); /* HEBREW LETTER TSADI */ \
682 UNI(0x77, 0x05e7); /* HEBREW LETTER QOF */ \
683 UNI(0x78, 0x05e8); /* HEBREW LETTER RESH */ \
684 UNI(0x79, 0x05e9); /* HEBREW LETTER SHIN */ \
685 UNI(0x7a, 0x05ea); /* HEBREW LETTER TAV */ \
686 XXX(0x7b, UNDEF); /* undefined */ \
687 XXX(0x7c, UNDEF); /* undefined */ \
688 UNI(0x7d, 0x200e); /* LEFT-TO-RIGHT MARK */ \
689 UNI(0x7e, 0x200f); /* RIGHT-TO-LEFT MARK */ \
690 } \
691 end_CODEPAGE()
692 /* ISO Latin-2 is 8859-2 */
693 #define map_ISO_Latin_2(code) \
694 begin_CODEPAGE(); \
695 switch (code) { \
696 UNI(0x20, 0x00a0); /* NO-BREAK SPACE */ \
697 UNI(0x21, 0x0104); /* LATIN CAPITAL LETTER A WITH OGONEK */ \
698 UNI(0x22, 0x02d8); /* BREVE */ \
699 UNI(0x23, 0x0141); /* LATIN CAPITAL LETTER L WITH STROKE */ \
700 UNI(0x24, 0x00a4); /* CURRENCY SIGN */ \
701 UNI(0x25, 0x013d); /* LATIN CAPITAL LETTER L WITH CARON */ \
702 UNI(0x26, 0x015a); /* LATIN CAPITAL LETTER S WITH ACUTE */ \
703 UNI(0x27, 0x00a7); /* SECTION SIGN */ \
704 UNI(0x28, 0x00a8); /* DIAERESIS */ \
705 UNI(0x29, 0x0160); /* LATIN CAPITAL LETTER S WITH CARON */ \
706 UNI(0x2a, 0x015e); /* LATIN CAPITAL LETTER S WITH CEDILLA */ \
707 UNI(0x2b, 0x0164); /* LATIN CAPITAL LETTER T WITH CARON */ \
708 UNI(0x2c, 0x0179); /* LATIN CAPITAL LETTER Z WITH ACUTE */ \
709 UNI(0x2d, 0x00ad); /* SOFT HYPHEN */ \
710 UNI(0x2e, 0x017d); /* LATIN CAPITAL LETTER Z WITH CARON */ \
711 UNI(0x2f, 0x017b); /* LATIN CAPITAL LETTER Z WITH DOT ABOVE */ \
712 UNI(0x30, 0x00b0); /* DEGREE SIGN */ \
713 UNI(0x31, 0x0105); /* LATIN SMALL LETTER A WITH OGONEK */ \
714 UNI(0x32, 0x02db); /* OGONEK */ \
715 UNI(0x33, 0x0142); /* LATIN SMALL LETTER L WITH STROKE */ \
716 UNI(0x34, 0x00b4); /* ACUTE ACCENT */ \
717 UNI(0x35, 0x013e); /* LATIN SMALL LETTER L WITH CARON */ \
718 UNI(0x36, 0x015b); /* LATIN SMALL LETTER S WITH ACUTE */ \
719 UNI(0x37, 0x02c7); /* CARON */ \
720 UNI(0x38, 0x00b8); /* CEDILLA */ \
721 UNI(0x39, 0x0161); /* LATIN SMALL LETTER S WITH CARON */ \
722 UNI(0x3a, 0x015f); /* LATIN SMALL LETTER S WITH CEDILLA */ \
723 UNI(0x3b, 0x0165); /* LATIN SMALL LETTER T WITH CARON */ \
724 UNI(0x3c, 0x017a); /* LATIN SMALL LETTER Z WITH ACUTE */ \
725 UNI(0x3d, 0x02dd); /* DOUBLE ACUTE ACCENT */ \
726 UNI(0x3e, 0x017e); /* LATIN SMALL LETTER Z WITH CARON */ \
727 UNI(0x3f, 0x017c); /* LATIN SMALL LETTER Z WITH DOT ABOVE */ \
728 UNI(0x40, 0x0154); /* LATIN CAPITAL LETTER R WITH ACUTE */ \
729 UNI(0x41, 0x00c1); /* LATIN CAPITAL LETTER A WITH ACUTE */ \
730 UNI(0x42, 0x00c2); /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX */ \
731 UNI(0x43, 0x0102); /* LATIN CAPITAL LETTER A WITH BREVE */ \
732 UNI(0x44, 0x00c4); /* LATIN CAPITAL LETTER A WITH DIAERESIS */ \
733 UNI(0x45, 0x0139); /* LATIN CAPITAL LETTER L WITH ACUTE */ \
734 UNI(0x46, 0x0106); /* LATIN CAPITAL LETTER C WITH ACUTE */ \
735 UNI(0x47, 0x00c7); /* LATIN CAPITAL LETTER C WITH CEDILLA */ \
736 UNI(0x48, 0x010c); /* LATIN CAPITAL LETTER C WITH CARON */ \
737 UNI(0x49, 0x00c9); /* LATIN CAPITAL LETTER E WITH ACUTE */ \
738 UNI(0x4a, 0x0118); /* LATIN CAPITAL LETTER E WITH OGONEK */ \
739 UNI(0x4b, 0x00cb); /* LATIN CAPITAL LETTER E WITH DIAERESIS */ \
740 UNI(0x4c, 0x011a); /* LATIN CAPITAL LETTER E WITH CARON */ \
741 UNI(0x4d, 0x00cd); /* LATIN CAPITAL LETTER I WITH ACUTE */ \
742 UNI(0x4e, 0x00ce); /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX */ \
743 UNI(0x4f, 0x010e); /* LATIN CAPITAL LETTER D WITH CARON */ \
744 UNI(0x50, 0x0110); /* LATIN CAPITAL LETTER D WITH STROKE */ \
745 UNI(0x51, 0x0143); /* LATIN CAPITAL LETTER N WITH ACUTE */ \
746 UNI(0x52, 0x0147); /* LATIN CAPITAL LETTER N WITH CARON */ \
747 UNI(0x53, 0x00d3); /* LATIN CAPITAL LETTER O WITH ACUTE */ \
748 UNI(0x54, 0x00d4); /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX */ \
749 UNI(0x55, 0x0150); /* LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */ \
750 UNI(0x56, 0x00d6); /* LATIN CAPITAL LETTER O WITH DIAERESIS */ \
751 UNI(0x57, 0x00d7); /* MULTIPLICATION SIGN */ \
752 UNI(0x58, 0x0158); /* LATIN CAPITAL LETTER R WITH CARON */ \
753 UNI(0x59, 0x016e); /* LATIN CAPITAL LETTER U WITH RING ABOVE */ \
754 UNI(0x5a, 0x00da); /* LATIN CAPITAL LETTER U WITH ACUTE */ \
755 UNI(0x5b, 0x0170); /* LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */ \
756 UNI(0x5c, 0x00dc); /* LATIN CAPITAL LETTER U WITH DIAERESIS */ \
757 UNI(0x5d, 0x00dd); /* LATIN CAPITAL LETTER Y WITH ACUTE */ \
758 UNI(0x5e, 0x0162); /* LATIN CAPITAL LETTER T WITH CEDILLA */ \
759 UNI(0x5f, 0x00df); /* LATIN SMALL LETTER SHARP S */ \
760 UNI(0x60, 0x0155); /* LATIN SMALL LETTER R WITH ACUTE */ \
761 UNI(0x61, 0x00e1); /* LATIN SMALL LETTER A WITH ACUTE */ \
762 UNI(0x62, 0x00e2); /* LATIN SMALL LETTER A WITH CIRCUMFLEX */ \
763 UNI(0x63, 0x0103); /* LATIN SMALL LETTER A WITH BREVE */ \
764 UNI(0x64, 0x00e4); /* LATIN SMALL LETTER A WITH DIAERESIS */ \
765 UNI(0x65, 0x013a); /* LATIN SMALL LETTER L WITH ACUTE */ \
766 UNI(0x66, 0x0107); /* LATIN SMALL LETTER C WITH ACUTE */ \
767 UNI(0x67, 0x00e7); /* LATIN SMALL LETTER C WITH CEDILLA */ \
768 UNI(0x68, 0x010d); /* LATIN SMALL LETTER C WITH CARON */ \
769 UNI(0x69, 0x00e9); /* LATIN SMALL LETTER E WITH ACUTE */ \
770 UNI(0x6a, 0x0119); /* LATIN SMALL LETTER E WITH OGONEK */ \
771 UNI(0x6b, 0x00eb); /* LATIN SMALL LETTER E WITH DIAERESIS */ \
772 UNI(0x6c, 0x011b); /* LATIN SMALL LETTER E WITH CARON */ \
773 UNI(0x6d, 0x00ed); /* LATIN SMALL LETTER I WITH ACUTE */ \
774 UNI(0x6e, 0x00ee); /* LATIN SMALL LETTER I WITH CIRCUMFLEX */ \
775 UNI(0x6f, 0x010f); /* LATIN SMALL LETTER D WITH CARON */ \
776 UNI(0x70, 0x0111); /* LATIN SMALL LETTER D WITH STROKE */ \
777 UNI(0x71, 0x0144); /* LATIN SMALL LETTER N WITH ACUTE */ \
778 UNI(0x72, 0x0148); /* LATIN SMALL LETTER N WITH CARON */ \
779 UNI(0x73, 0x00f3); /* LATIN SMALL LETTER O WITH ACUTE */ \
780 UNI(0x74, 0x00f4); /* LATIN SMALL LETTER O WITH CIRCUMFLEX */ \
781 UNI(0x75, 0x0151); /* LATIN SMALL LETTER O WITH DOUBLE ACUTE */ \
782 UNI(0x76, 0x00f6); /* LATIN SMALL LETTER O WITH DIAERESIS */ \
783 UNI(0x77, 0x00f7); /* DIVISION SIGN */ \
784 UNI(0x78, 0x0159); /* LATIN SMALL LETTER R WITH CARON */ \
785 UNI(0x79, 0x016f); /* LATIN SMALL LETTER U WITH RING ABOVE */ \
786 UNI(0x7a, 0x00fa); /* LATIN SMALL LETTER U WITH ACUTE */ \
787 UNI(0x7b, 0x0171); /* LATIN SMALL LETTER U WITH DOUBLE ACUTE */ \
788 UNI(0x7c, 0x00fc); /* LATIN SMALL LETTER U WITH DIAERESIS */ \
789 UNI(0x7d, 0x00fd); /* LATIN SMALL LETTER Y WITH ACUTE */ \
790 UNI(0x7e, 0x0163); /* LATIN SMALL LETTER T WITH CEDILLA */ \
791 UNI(0x7f, 0x02d9); /* DOT ABOVE */ \
792 } \
793 end_CODEPAGE()
794 /* ISO Latin-5 is 8859-9 */
795 #define map_ISO_Latin_5(code) \
796 begin_CODEPAGE(); \
797 switch (code) { \
798 UNI(0x20, 0x00a0); /* NO-BREAK SPACE */ \
799 UNI(0x21, 0x00a1); /* INVERTED EXCLAMATION MARK */ \
800 UNI(0x22, 0x00a2); /* CENT SIGN */ \
801 UNI(0x23, 0x00a3); /* POUND SIGN */ \
802 UNI(0x24, 0x00a4); /* CURRENCY SIGN */ \
803 UNI(0x25, 0x00a5); /* YEN SIGN */ \
804 UNI(0x26, 0x00a6); /* BROKEN BAR */ \
805 UNI(0x27, 0x00a7); /* SECTION SIGN */ \
806 UNI(0x28, 0x00a8); /* DIAERESIS */ \
807 UNI(0x29, 0x00a9); /* COPYRIGHT SIGN */ \
808 UNI(0x2a, 0x00aa); /* FEMININE ORDINAL INDICATOR */ \
809 UNI(0x2b, 0x00ab); /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */ \
810 UNI(0x2c, 0x00ac); /* NOT SIGN */ \
811 UNI(0x2d, 0x00ad); /* SOFT HYPHEN */ \
812 UNI(0x2e, 0x00ae); /* REGISTERED SIGN */ \
813 UNI(0x2f, 0x00af); /* MACRON */ \
814 UNI(0x30, 0x00b0); /* DEGREE SIGN */ \
815 UNI(0x31, 0x00b1); /* PLUS-MINUS SIGN */ \
816 UNI(0x32, 0x00b2); /* SUPERSCRIPT TWO */ \
817 UNI(0x33, 0x00b3); /* SUPERSCRIPT THREE */ \
818 UNI(0x34, 0x00b4); /* ACUTE ACCENT */ \
819 UNI(0x35, 0x00b5); /* MICRO SIGN */ \
820 UNI(0x36, 0x00b6); /* PILCROW SIGN */ \
821 UNI(0x37, 0x00b7); /* MIDDLE DOT */ \
822 UNI(0x38, 0x00b8); /* CEDILLA */ \
823 UNI(0x39, 0x00b9); /* SUPERSCRIPT ONE */ \
824 UNI(0x3a, 0x00ba); /* MASCULINE ORDINAL INDICATOR */ \
825 UNI(0x3b, 0x00bb); /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */ \
826 UNI(0x3c, 0x00bc); /* VULGAR FRACTION ONE QUARTER */ \
827 UNI(0x3d, 0x00bd); /* VULGAR FRACTION ONE HALF */ \
828 UNI(0x3e, 0x00be); /* VULGAR FRACTION THREE QUARTERS */ \
829 UNI(0x3f, 0x00bf); /* INVERTED QUESTION MARK */ \
830 UNI(0x40, 0x00c0); /* LATIN CAPITAL LETTER A WITH GRAVE */ \
831 UNI(0x41, 0x00c1); /* LATIN CAPITAL LETTER A WITH ACUTE */ \
832 UNI(0x42, 0x00c2); /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX */ \
833 UNI(0x43, 0x00c3); /* LATIN CAPITAL LETTER A WITH TILDE */ \
834 UNI(0x44, 0x00c4); /* LATIN CAPITAL LETTER A WITH DIAERESIS */ \
835 UNI(0x45, 0x00c5); /* LATIN CAPITAL LETTER A WITH RING ABOVE */ \
836 UNI(0x46, 0x00c6); /* LATIN CAPITAL LETTER AE */ \
837 UNI(0x47, 0x00c7); /* LATIN CAPITAL LETTER C WITH CEDILLA */ \
838 UNI(0x48, 0x00c8); /* LATIN CAPITAL LETTER E WITH GRAVE */ \
839 UNI(0x49, 0x00c9); /* LATIN CAPITAL LETTER E WITH ACUTE */ \
840 UNI(0x4a, 0x00ca); /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX */ \
841 UNI(0x4b, 0x00cb); /* LATIN CAPITAL LETTER E WITH DIAERESIS */ \
842 UNI(0x4c, 0x00cc); /* LATIN CAPITAL LETTER I WITH GRAVE */ \
843 UNI(0x4d, 0x00cd); /* LATIN CAPITAL LETTER I WITH ACUTE */ \
844 UNI(0x4e, 0x00ce); /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX */ \
845 UNI(0x4f, 0x00cf); /* LATIN CAPITAL LETTER I WITH DIAERESIS */ \
846 UNI(0x50, 0x011e); /* LATIN CAPITAL LETTER G WITH BREVE */ \
847 UNI(0x51, 0x00d1); /* LATIN CAPITAL LETTER N WITH TILDE */ \
848 UNI(0x52, 0x00d2); /* LATIN CAPITAL LETTER O WITH GRAVE */ \
849 UNI(0x53, 0x00d3); /* LATIN CAPITAL LETTER O WITH ACUTE */ \
850 UNI(0x54, 0x00d4); /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX */ \
851 UNI(0x55, 0x00d5); /* LATIN CAPITAL LETTER O WITH TILDE */ \
852 UNI(0x56, 0x00d6); /* LATIN CAPITAL LETTER O WITH DIAERESIS */ \
853 UNI(0x57, 0x00d7); /* MULTIPLICATION SIGN */ \
854 UNI(0x58, 0x00d8); /* LATIN CAPITAL LETTER O WITH STROKE */ \
855 UNI(0x59, 0x00d9); /* LATIN CAPITAL LETTER U WITH GRAVE */ \
856 UNI(0x5a, 0x00da); /* LATIN CAPITAL LETTER U WITH ACUTE */ \
857 UNI(0x5b, 0x00db); /* LATIN CAPITAL LETTER U WITH CIRCUMFLEX */ \
858 UNI(0x5c, 0x00dc); /* LATIN CAPITAL LETTER U WITH DIAERESIS */ \
859 UNI(0x5d, 0x0130); /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ \
860 UNI(0x5e, 0x015e); /* LATIN CAPITAL LETTER S WITH CEDILLA */ \
861 UNI(0x5f, 0x00df); /* LATIN SMALL LETTER SHARP S */ \
862 UNI(0x60, 0x00e0); /* LATIN SMALL LETTER A WITH GRAVE */ \
863 UNI(0x61, 0x00e1); /* LATIN SMALL LETTER A WITH ACUTE */ \
864 UNI(0x62, 0x00e2); /* LATIN SMALL LETTER A WITH CIRCUMFLEX */ \
865 UNI(0x63, 0x00e3); /* LATIN SMALL LETTER A WITH TILDE */ \
866 UNI(0x64, 0x00e4); /* LATIN SMALL LETTER A WITH DIAERESIS */ \
867 UNI(0x65, 0x00e5); /* LATIN SMALL LETTER A WITH RING ABOVE */ \
868 UNI(0x66, 0x00e6); /* LATIN SMALL LETTER AE */ \
869 UNI(0x67, 0x00e7); /* LATIN SMALL LETTER C WITH CEDILLA */ \
870 UNI(0x68, 0x00e8); /* LATIN SMALL LETTER E WITH GRAVE */ \
871 UNI(0x69, 0x00e9); /* LATIN SMALL LETTER E WITH ACUTE */ \
872 UNI(0x6a, 0x00ea); /* LATIN SMALL LETTER E WITH CIRCUMFLEX */ \
873 UNI(0x6b, 0x00eb); /* LATIN SMALL LETTER E WITH DIAERESIS */ \
874 UNI(0x6c, 0x00ec); /* LATIN SMALL LETTER I WITH GRAVE */ \
875 UNI(0x6d, 0x00ed); /* LATIN SMALL LETTER I WITH ACUTE */ \
876 UNI(0x6e, 0x00ee); /* LATIN SMALL LETTER I WITH CIRCUMFLEX */ \
877 UNI(0x6f, 0x00ef); /* LATIN SMALL LETTER I WITH DIAERESIS */ \
878 UNI(0x70, 0x011f); /* LATIN SMALL LETTER G WITH BREVE */ \
879 UNI(0x71, 0x00f1); /* LATIN SMALL LETTER N WITH TILDE */ \
880 UNI(0x72, 0x00f2); /* LATIN SMALL LETTER O WITH GRAVE */ \
881 UNI(0x73, 0x00f3); /* LATIN SMALL LETTER O WITH ACUTE */ \
882 UNI(0x74, 0x00f4); /* LATIN SMALL LETTER O WITH CIRCUMFLEX */ \
883 UNI(0x75, 0x00f5); /* LATIN SMALL LETTER O WITH TILDE */ \
884 UNI(0x76, 0x00f6); /* LATIN SMALL LETTER O WITH DIAERESIS */ \
885 UNI(0x77, 0x00f7); /* DIVISION SIGN */ \
886 UNI(0x78, 0x00f8); /* LATIN SMALL LETTER O WITH STROKE */ \
887 UNI(0x79, 0x00f9); /* LATIN SMALL LETTER U WITH GRAVE */ \
888 UNI(0x7a, 0x00fa); /* LATIN SMALL LETTER U WITH ACUTE */ \
889 UNI(0x7b, 0x00fb); /* LATIN SMALL LETTER U WITH CIRCUMFLEX */ \
890 UNI(0x7c, 0x00fc); /* LATIN SMALL LETTER U WITH DIAERESIS */ \
891 UNI(0x7d, 0x0131); /* LATIN SMALL LETTER DOTLESS I */ \
892 UNI(0x7e, 0x015f); /* LATIN SMALL LETTER S WITH CEDILLA */ \
893 UNI(0x7f, 0x00ff); /* LATIN SMALL LETTER Y WITH DIAERESIS */ \
894 } \
895 end_CODEPAGE()
896 /* DEC Cyrillic from screenshot */
897 #define map_DEC_Cyrillic(code) \
898 begin_CODEPAGE(); \
899 switch (code) { \
900 UNI(0x20, 0x00a0); /* NO-BREAK SPACE */ \
901 XXX(0x21, UNDEF); /* undefined */ \
902 XXX(0x22, UNDEF); /* undefined */ \
903 XXX(0x23, UNDEF); /* undefined */ \
904 XXX(0x24, UNDEF); /* undefined */ \
905 XXX(0x25, UNDEF); /* undefined */ \
906 XXX(0x26, UNDEF); /* undefined */ \
907 XXX(0x27, UNDEF); /* undefined */ \
908 XXX(0x28, UNDEF); /* undefined */ \
909 XXX(0x29, UNDEF); /* undefined */ \
910 XXX(0x2a, UNDEF); /* undefined */ \
911 XXX(0x2b, UNDEF); /* undefined */ \
912 XXX(0x2c, UNDEF); /* undefined */ \
913 XXX(0x2d, UNDEF); /* undefined */ \
914 XXX(0x2e, UNDEF); /* undefined */ \
915 XXX(0x2f, UNDEF); /* undefined */ \
916 XXX(0x30, UNDEF); /* undefined */ \
917 XXX(0x31, UNDEF); /* undefined */ \
918 XXX(0x32, UNDEF); /* undefined */ \
919 XXX(0x33, UNDEF); /* undefined */ \
920 XXX(0x34, UNDEF); /* undefined */ \
921 XXX(0x35, UNDEF); /* undefined */ \
922 XXX(0x36, UNDEF); /* undefined */ \
923 XXX(0x37, UNDEF); /* undefined */ \
924 XXX(0x38, UNDEF); /* undefined */ \
925 XXX(0x39, UNDEF); /* undefined */ \
926 XXX(0x3a, UNDEF); /* undefined */ \
927 XXX(0x3b, UNDEF); /* undefined */ \
928 XXX(0x3c, UNDEF); /* undefined */ \
929 XXX(0x3d, UNDEF); /* undefined */ \
930 XXX(0x3e, UNDEF); /* undefined */ \
931 XXX(0x3f, UNDEF); /* undefined */ \
932 \
933 UNI(0x40, 0x044e); /* CYRILLIC SMALL LETTER YU */ \
934 UNI(0x41, 0x0430); /* CYRILLIC SMALL LETTER A */ \
935 UNI(0x42, 0x0431); /* CYRILLIC SMALL LETTER BE */ \
936 UNI(0x43, 0x0446); /* CYRILLIC SMALL LETTER TSE */ \
937 UNI(0x44, 0x0434); /* CYRILLIC SMALL LETTER DE */ \
938 UNI(0x45, 0x0435); /* CYRILLIC SMALL LETTER IE */ \
939 UNI(0x46, 0x0444); /* CYRILLIC SMALL LETTER EF */ \
940 UNI(0x47, 0x0433); /* CYRILLIC SMALL LETTER GHE */ \
941 UNI(0x48, 0x0445); /* CYRILLIC SMALL LETTER HA */ \
942 UNI(0x49, 0x0438); /* CYRILLIC SMALL LETTER I */ \
943 UNI(0x4a, 0x0439); /* CYRILLIC SMALL LETTER SHORT I */ \
944 UNI(0x4b, 0x043a); /* CYRILLIC SMALL LETTER KA */ \
945 UNI(0x4c, 0x043b); /* CYRILLIC SMALL LETTER EL */ \
946 UNI(0x4d, 0x043c); /* CYRILLIC SMALL LETTER EM */ \
947 UNI(0x4e, 0x043d); /* CYRILLIC SMALL LETTER EN */ \
948 UNI(0x4f, 0x043e); /* CYRILLIC SMALL LETTER O */ \
949 UNI(0x50, 0x043f); /* CYRILLIC SMALL LETTER PE */ \
950 UNI(0x51, 0x044f); /* CYRILLIC SMALL LETTER YA */ \
951 UNI(0x52, 0x0440); /* CYRILLIC SMALL LETTER ER */ \
952 UNI(0x53, 0x0441); /* CYRILLIC SMALL LETTER ES */ \
953 UNI(0x54, 0x0442); /* CYRILLIC SMALL LETTER TE */ \
954 UNI(0x55, 0x0443); /* CYRILLIC SMALL LETTER U */ \
955 UNI(0x56, 0x0436); /* CYRILLIC SMALL LETTER ZHE */ \
956 UNI(0x57, 0x0432); /* CYRILLIC SMALL LETTER VE */ \
957 UNI(0x58, 0x044c); /* CYRILLIC SMALL LETTER SOFT SIGN */ \
958 UNI(0x59, 0x044b); /* CYRILLIC SMALL LETTER YERU */ \
959 UNI(0x5a, 0x0437); /* CYRILLIC SMALL LETTER ZE */ \
960 UNI(0x5b, 0x0448); /* CYRILLIC SMALL LETTER SHA */ \
961 UNI(0x5c, 0x044d); /* CYRILLIC SMALL LETTER E */ \
962 UNI(0x5d, 0x0449); /* CYRILLIC SMALL LETTER SHCHA */ \
963 UNI(0x5e, 0x0447); /* CYRILLIC SMALL LETTER CHE */ \
964 UNI(0x5f, 0x044a); /* CYRILLIC SMALL LETTER HARD SIGN */ \
965 \
966 UNI(0x60, 0x042e); /* CYRILLIC CAPITAL LETTER YU */ \
967 UNI(0x61, 0x0410); /* CYRILLIC CAPITAL LETTER A */ \
968 UNI(0x62, 0x0411); /* CYRILLIC CAPITAL LETTER BE */ \
969 UNI(0x63, 0x0426); /* CYRILLIC CAPITAL LETTER TSE */ \
970 UNI(0x64, 0x0414); /* CYRILLIC CAPITAL LETTER DE */ \
971 UNI(0x65, 0x0415); /* CYRILLIC CAPITAL LETTER IE */ \
972 UNI(0x66, 0x0424); /* CYRILLIC CAPITAL LETTER EF */ \
973 UNI(0x67, 0x0413); /* CYRILLIC CAPITAL LETTER GHE */ \
974 UNI(0x68, 0x0425); /* CYRILLIC CAPITAL LETTER HA */ \
975 UNI(0x69, 0x0418); /* CYRILLIC CAPITAL LETTER I */ \
976 UNI(0x6a, 0x0419); /* CYRILLIC CAPITAL LETTER SHORT I */ \
977 UNI(0x6b, 0x041a); /* CYRILLIC CAPITAL LETTER KA */ \
978 UNI(0x6c, 0x041b); /* CYRILLIC CAPITAL LETTER EL */ \
979 UNI(0x6d, 0x041c); /* CYRILLIC CAPITAL LETTER EM */ \
980 UNI(0x6e, 0x041d); /* CYRILLIC CAPITAL LETTER EN */ \
981 UNI(0x6f, 0x041e); /* CYRILLIC CAPITAL LETTER O */ \
982 UNI(0x70, 0x041f); /* CYRILLIC CAPITAL LETTER PE */ \
983 UNI(0x71, 0x042f); /* CYRILLIC CAPITAL LETTER YA */ \
984 UNI(0x72, 0x0420); /* CYRILLIC CAPITAL LETTER ER */ \
985 UNI(0x73, 0x0421); /* CYRILLIC CAPITAL LETTER ES */ \
986 UNI(0x74, 0x0422); /* CYRILLIC CAPITAL LETTER TE */ \
987 UNI(0x75, 0x0423); /* CYRILLIC CAPITAL LETTER U */ \
988 UNI(0x76, 0x0416); /* CYRILLIC CAPITAL LETTER ZHE */ \
989 UNI(0x77, 0x0412); /* CYRILLIC CAPITAL LETTER VE */ \
990 UNI(0x78, 0x042c); /* CYRILLIC CAPITAL LETTER SOFT SIGN */ \
991 UNI(0x79, 0x042b); /* CYRILLIC CAPITAL LETTER YERU */ \
992 UNI(0x7a, 0x0417); /* CYRILLIC CAPITAL LETTER ZE */ \
993 UNI(0x7b, 0x0428); /* CYRILLIC CAPITAL LETTER SHA */ \
994 UNI(0x7c, 0x042d); /* CYRILLIC CAPITAL LETTER E */ \
995 UNI(0x7d, 0x0429); /* CYRILLIC CAPITAL LETTER SHCHA */ \
996 UNI(0x7e, 0x0427); /* CYRILLIC CAPITAL LETTER CHE */ \
997 XXX(0x7f, UNDEF); \
998 \
999 } \
1000 end_CODEPAGE()
1001 /* figure A-24 "DEC Greek Supplemental Character Set" */
1002 #define map_DEC_Greek_Supp(code) \
1003 begin_CODEPAGE(); \
1004 switch (code) { \
1005 MAP(0x20, 0x00a0); /* NO-BREAK SPACE */ \
1006 UNI(0x21, 0x00a1); /* LEFT SINGLE QUOTATION MARK */ \
1007 UNI(0x22, 0x00a2); /* RIGHT SINGLE QUOTATION MARK */ \
1008 UNI(0x23, 0x00a3); /* POUND SIGN */ \
1009 XXX(0x24, UNDEF); /* EURO SIGN */ \
1010 UNI(0x25, 0x00a5); /* YEN SIGN */ \
1011 XXX(0x26, UNDEF); /* BROKEN BAR */ \
1012 UNI(0x27, 0x00a7); /* SECTION SIGN */ \
1013 UNI(0x28, 0x00a4); /* CURRENCY SIGN */ \
1014 UNI(0x29, 0x00a9); /* COPYRIGHT SIGN */ \
1015 UNI(0x2a, 0x00aa); /* FEMININE ORDINAL INDICATOR */ \
1016 UNI(0x2b, 0x00ab); /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */ \
1017 XXX(0x2c, UNDEF); /* reserved */ \
1018 XXX(0x2d, UNDEF); /* reserved */ \
1019 XXX(0x2e, UNDEF); /* reserved */ \
1020 XXX(0x2f, UNDEF); /* reserved */ \
1021 UNI(0x30, 0x00b0); /* DEGREE SIGN */ \
1022 UNI(0x31, 0x00b1); /* PLUS-MINUS SIGN */ \
1023 UNI(0x32, 0x00b2); /* SUPERSCRIPT TWO */ \
1024 UNI(0x33, 0x00b3); /* SUPERSCRIPT THREE */ \
1025 XXX(0x34, UNDEF); /* reserved */ \
1026 UNI(0x35, 0x00b5); /* MICRO SIGN */ \
1027 UNI(0x36, 0x00b6); /* PILCROW SIGN */ \
1028 UNI(0x37, 0x00b7); /* MIDDLE DOT */ \
1029 XXX(0x38, UNDEF); /* reserved */ \
1030 UNI(0x39, 0x00b9); /* SUPERSCRIPT ONE */ \
1031 UNI(0x3a, 0x00ba); /* MASCULINE ORDINAL INDICATOR */ \
1032 UNI(0x3b, 0x00bb); /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */ \
1033 UNI(0x3c, 0x00bc); /* VULGAR FRACTION ONE QUARTER */ \
1034 UNI(0x3d, 0x00bd); /* VULGAR FRACTION ONE HALF */ \
1035 XXX(0x3e, UNDEF); /* reserved */ \
1036 UNI(0x3f, 0x00BF); /* INVERTED QUESTION MARK */ \
1037 UNI(0x40, 0x03ca); /* GREEK SMALL LETTER IOTA WITH DIALYTIKA */ \
1038 UNI(0x41, 0x0391); /* GREEK CAPITAL LETTER ALPHA */ \
1039 UNI(0x42, 0x0392); /* GREEK CAPITAL LETTER BETA */ \
1040 UNI(0x43, 0x0393); /* GREEK CAPITAL LETTER GAMMA */ \
1041 UNI(0x44, 0x0394); /* GREEK CAPITAL LETTER DELTA */ \
1042 UNI(0x45, 0x0395); /* GREEK CAPITAL LETTER EPSILON */ \
1043 UNI(0x46, 0x0396); /* GREEK CAPITAL LETTER ZETA */ \
1044 UNI(0x47, 0x0397); /* GREEK CAPITAL LETTER ETA */ \
1045 UNI(0x48, 0x0398); /* GREEK CAPITAL LETTER THETA */ \
1046 UNI(0x49, 0x0399); /* GREEK CAPITAL LETTER IOTA */ \
1047 UNI(0x4a, 0x039a); /* GREEK CAPITAL LETTER KAPPA */ \
1048 UNI(0x4b, 0x039b); /* GREEK CAPITAL LETTER LAMDA */ \
1049 UNI(0x4c, 0x039c); /* GREEK CAPITAL LETTER MU */ \
1050 UNI(0x4d, 0x039d); /* GREEK CAPITAL LETTER NU */ \
1051 UNI(0x4e, 0x039e); /* GREEK CAPITAL LETTER XI */ \
1052 UNI(0x4f, 0x039f); /* GREEK CAPITAL LETTER OMICRON */ \
1053 XXX(0x50, UNDEF); /* reserved */ \
1054 UNI(0x51, 0x03a0); /* GREEK CAPITAL LETTER PI */ \
1055 UNI(0x52, 0x03a1); /* GREEK CAPITAL LETTER RHO */ \
1056 UNI(0x53, 0x03a3); /* GREEK CAPITAL LETTER SIGMA */ \
1057 UNI(0x54, 0x03a4); /* GREEK CAPITAL LETTER TAU */ \
1058 UNI(0x55, 0x03a5); /* GREEK CAPITAL LETTER UPSILON */ \
1059 UNI(0x56, 0x03a6); /* GREEK CAPITAL LETTER PHI */ \
1060 UNI(0x57, 0x03a7); /* GREEK CAPITAL LETTER CHI */ \
1061 UNI(0x58, 0x03a8); /* GREEK CAPITAL LETTER PSI */ \
1062 UNI(0x59, 0x03a9); /* GREEK CAPITAL LETTER OMEGA */ \
1063 UNI(0x5a, 0x03ac); /* GREEK SMALL LETTER ALPHA WITH TONOS */ \
1064 UNI(0x5b, 0x03ad); /* GREEK SMALL LETTER EPSILON WITH TONOS */ \
1065 UNI(0x5c, 0x03ae); /* GREEK SMALL LETTER ETA WITH TONOS */ \
1066 UNI(0x5d, 0x03af); /* GREEK SMALL LETTER IOTA WITH TONOS */ \
1067 XXX(0x5e, UNDEF); /* reserved */ \
1068 UNI(0x5f, 0x03cc); /* GREEK SMALL LETTER OMICRON WITH TONOS */ \
1069 UNI(0x60, 0x03cb); /* GREEK SMALL LETTER UPSILON WITH DIALYTIKA */ \
1070 UNI(0x61, 0x03b1); /* GREEK SMALL LETTER ALPHA */ \
1071 UNI(0x62, 0x03b2); /* GREEK SMALL LETTER BETA */ \
1072 UNI(0x63, 0x03b3); /* GREEK SMALL LETTER GAMMA */ \
1073 UNI(0x64, 0x03b4); /* GREEK SMALL LETTER DELTA */ \
1074 UNI(0x65, 0x03b5); /* GREEK SMALL LETTER EPSILON */ \
1075 UNI(0x66, 0x03b6); /* GREEK SMALL LETTER ZETA */ \
1076 UNI(0x67, 0x03b7); /* GREEK SMALL LETTER ETA */ \
1077 UNI(0x68, 0x03b8); /* GREEK SMALL LETTER THETA */ \
1078 UNI(0x69, 0x03b9); /* GREEK SMALL LETTER IOTA */ \
1079 UNI(0x6a, 0x03ba); /* GREEK SMALL LETTER KAPPA */ \
1080 UNI(0x6b, 0x03bb); /* GREEK SMALL LETTER LAMDA */ \
1081 UNI(0x6c, 0x03bc); /* GREEK SMALL LETTER MU */ \
1082 UNI(0x6d, 0x03bd); /* GREEK SMALL LETTER NU */ \
1083 UNI(0x6e, 0x03be); /* GREEK SMALL LETTER XI */ \
1084 UNI(0x6f, 0x03bf); /* GREEK SMALL LETTER OMICRON */ \
1085 XXX(0x70, UNDEF); /* reserved */ \
1086 UNI(0x71, 0x03c0); /* GREEK SMALL LETTER PI */ \
1087 UNI(0x72, 0x03c1); /* GREEK SMALL LETTER RHO */ \
1088 UNI(0x73, 0x03c3); /* GREEK SMALL LETTER SIGMA */ \
1089 UNI(0x74, 0x03c4); /* GREEK SMALL LETTER TAU */ \
1090 UNI(0x75, 0x03c5); /* GREEK SMALL LETTER UPSILON */ \
1091 UNI(0x76, 0x03c6); /* GREEK SMALL LETTER PHI */ \
1092 UNI(0x77, 0x03c7); /* GREEK SMALL LETTER CHI */ \
1093 UNI(0x78, 0x03c8); /* GREEK SMALL LETTER PSI */ \
1094 UNI(0x79, 0x03c9); /* GREEK SMALL LETTER OMEGA */ \
1095 UNI(0x7a, 0x03c2); /* GREEK SMALL LETTER FINAL SIGMA */ \
1096 UNI(0x7b, 0x03cd); /* GREEK SMALL LETTER UPSILON WITH TONOS */ \
1097 UNI(0x7c, 0x03ce); /* GREEK SMALL LETTER OMEGA WITH TONOS */ \
1098 UNI(0x7d, 0x0384); /* GREEK TONOS */ \
1099 XXX(0x7e, UNDEF); /* reserved */ \
1100 } \
1101 end_CODEPAGE()
1102 /* figure A-22 "DEC Hebrew Supplemental Character Set" */
1103 #define map_DEC_Hebrew_Supp(code) \
1104 begin_CODEPAGE(); \
1105 switch (code) { \
1106 UNI(0x21, 0x00a1); /* INVERTED EXCLAMATION MARK */ \
1107 UNI(0x22, 0x00a2); /* CENT SIGN */ \
1108 UNI(0x23, 0x00a3); /* POUND SIGN */ \
1109 XXX(0x24, UNDEF); /* CURRENCY SIGN */ \
1110 UNI(0x25, 0x00a5); /* YEN SIGN */ \
1111 XXX(0x26, UNDEF); /* BROKEN BAR */ \
1112 UNI(0x27, 0x00a7); /* SECTION SIGN */ \
1113 UNI(0x28, 0x00a8); /* DIAERESIS */ \
1114 UNI(0x29, 0x00a9); /* COPYRIGHT SIGN */ \
1115 UNI(0x2a, 0x00d7); /* MULTIPLICATION SIGN */ \
1116 UNI(0x2b, 0x00ab); /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */ \
1117 XXX(0x2c, UNDEF); /* NOT SIGN */ \
1118 XXX(0x2d, UNDEF); /* SOFT HYPHEN */ \
1119 XXX(0x2e, UNDEF); /* REGISTERED SIGN */ \
1120 XXX(0x2f, UNDEF); /* MACRON */ \
1121 UNI(0x30, 0x00b0); /* DEGREE SIGN */ \
1122 UNI(0x31, 0x00b1); /* PLUS-MINUS SIGN */ \
1123 UNI(0x32, 0x00b2); /* SUPERSCRIPT TWO */ \
1124 UNI(0x33, 0x00b3); /* SUPERSCRIPT THREE */ \
1125 XXX(0x34, UNDEF); /* ACUTE ACCENT */ \
1126 UNI(0x35, 0x00b5); /* MICRO SIGN */ \
1127 UNI(0x36, 0x00b6); /* PILCROW SIGN */ \
1128 UNI(0x37, 0x00b7); /* MIDDLE DOT */ \
1129 XXX(0x38, UNDEF); /* CEDILLA */ \
1130 UNI(0x39, 0x00b9); /* SUPERSCRIPT ONE */ \
1131 UNI(0x3a, 0x00f7); /* DIVISION SIGN */ \
1132 UNI(0x3b, 0x00bb); /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */ \
1133 UNI(0x3c, 0x00bc); /* VULGAR FRACTION ONE QUARTER */ \
1134 UNI(0x3d, 0x00bd); /* VULGAR FRACTION ONE HALF */ \
1135 XXX(0x3e, UNDEF); /* VULGAR FRACTION THREE QUARTERS */ \
1136 UNI(0x3f, 0x00bf); /* INVERTED QUESTION MARK */ \
1137 XXX(0x40, UNDEF); /* reserved */ \
1138 XXX(0x41, UNDEF); /* reserved */ \
1139 XXX(0x42, UNDEF); /* reserved */ \
1140 XXX(0x43, UNDEF); /* reserved */ \
1141 XXX(0x44, UNDEF); /* reserved */ \
1142 XXX(0x45, UNDEF); /* reserved */ \
1143 XXX(0x46, UNDEF); /* reserved */ \
1144 XXX(0x47, UNDEF); /* reserved */ \
1145 XXX(0x48, UNDEF); /* reserved */ \
1146 XXX(0x49, UNDEF); /* reserved */ \
1147 XXX(0x4a, UNDEF); /* reserved */ \
1148 XXX(0x4b, UNDEF); /* reserved */ \
1149 XXX(0x4c, UNDEF); /* reserved */ \
1150 XXX(0x4d, UNDEF); /* reserved */ \
1151 XXX(0x4e, UNDEF); /* reserved */ \
1152 XXX(0x4f, UNDEF); /* reserved */ \
1153 XXX(0x50, UNDEF); /* reserved */ \
1154 XXX(0x51, UNDEF); /* reserved */ \
1155 XXX(0x52, UNDEF); /* reserved */ \
1156 XXX(0x53, UNDEF); /* reserved */ \
1157 XXX(0x54, UNDEF); /* reserved */ \
1158 XXX(0x55, UNDEF); /* reserved */ \
1159 XXX(0x56, UNDEF); /* reserved */ \
1160 XXX(0x57, UNDEF); /* reserved */ \
1161 XXX(0x58, UNDEF); /* reserved */ \
1162 XXX(0x59, UNDEF); /* reserved */ \
1163 XXX(0x5a, UNDEF); /* reserved */ \
1164 XXX(0x5b, UNDEF); /* reserved */ \
1165 XXX(0x5c, UNDEF); /* reserved */ \
1166 XXX(0x5d, UNDEF); /* reserved */ \
1167 XXX(0x5e, UNDEF); /* reserved */ \
1168 XXX(0x5f, UNDEF); /* reserved */ \
1169 UNI(0x60, 0x05d0); /* HEBREW LETTER ALEF */ \
1170 UNI(0x61, 0x05d1); /* HEBREW LETTER BET */ \
1171 UNI(0x62, 0x05d2); /* HEBREW LETTER GIMEL */ \
1172 UNI(0x63, 0x05d3); /* HEBREW LETTER DALET */ \
1173 UNI(0x64, 0x05d4); /* HEBREW LETTER HE */ \
1174 UNI(0x65, 0x05d5); /* HEBREW LETTER VAV */ \
1175 UNI(0x66, 0x05d6); /* HEBREW LETTER ZAYIN */ \
1176 UNI(0x67, 0x05d7); /* HEBREW LETTER HET */ \
1177 UNI(0x68, 0x05d8); /* HEBREW LETTER TET */ \
1178 UNI(0x69, 0x05d9); /* HEBREW LETTER YOD */ \
1179 UNI(0x6a, 0x05da); /* HEBREW LETTER FINAL KAF */ \
1180 UNI(0x6b, 0x05db); /* HEBREW LETTER KAF */ \
1181 UNI(0x6c, 0x05dc); /* HEBREW LETTER LAMED */ \
1182 UNI(0x6d, 0x05dd); /* HEBREW LETTER FINAL MEM */ \
1183 UNI(0x6e, 0x05de); /* HEBREW LETTER MEM */ \
1184 UNI(0x6f, 0x05df); /* HEBREW LETTER FINAL NUN */ \
1185 UNI(0x70, 0x05e0); /* HEBREW LETTER NUN */ \
1186 UNI(0x71, 0x05e1); /* HEBREW LETTER SAMEKH */ \
1187 UNI(0x72, 0x05e2); /* HEBREW LETTER AYIN */ \
1188 UNI(0x73, 0x05e3); /* HEBREW LETTER FINAL PE */ \
1189 UNI(0x74, 0x05e4); /* HEBREW LETTER PE */ \
1190 UNI(0x75, 0x05e5); /* HEBREW LETTER FINAL TSADI */ \
1191 UNI(0x76, 0x05e6); /* HEBREW LETTER TSADI */ \
1192 UNI(0x77, 0x05e7); /* HEBREW LETTER QOF */ \
1193 UNI(0x78, 0x05e8); /* HEBREW LETTER RESH */ \
1194 UNI(0x79, 0x05e9); /* HEBREW LETTER SHIN */ \
1195 UNI(0x7a, 0x05ea); /* HEBREW LETTER TAV */ \
1196 XXX(0x7b, UNDEF); /* reserved */ \
1197 XXX(0x7c, UNDEF); /* reserved */ \
1198 XXX(0x7d, UNDEF); /* reserved */ \
1199 XXX(0x7e, UNDEF); /* reserved */ \
1200 } \
1201 end_CODEPAGE()
1202 /* figure A-27 "DEC 8-Bit Turkish Supplemental Character Set" */
1203 #define map_DEC_Turkish_Supp(code) \
1204 begin_CODEPAGE(); \
1205 switch (code) { \
1206 UNI(0x21, 0x00A1); /* INVERTED EXCLAMATION MARK */ \
1207 UNI(0x22, 0x00A2); /* CENT SIGN */ \
1208 UNI(0x23, 0x00A3); /* POUND SIGN */ \
1209 XXX(0x24, UNDEF); /* reserved */ \
1210 UNI(0x25, 0x00A5); /* YEN SIGN */ \
1211 XXX(0x26, UNDEF); /* reserved */ \
1212 UNI(0x27, 0x00A7); /* SECTION SIGN */ \
1213 UNI(0x28, 0x00A8); /* DIAERESIS */ \
1214 UNI(0x29, 0x00A9); /* COPYRIGHT SIGN */ \
1215 UNI(0x2A, 0x00AA); /* FEMININE ORDINAL INDICATOR */ \
1216 UNI(0x2B, 0x00AB); /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */ \
1217 XXX(0x2C, UNDEF); /* reserved */ \
1218 XXX(0x2D, UNDEF); /* reserved */ \
1219 UNI(0x2E, 0x0130); /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ \
1220 XXX(0x2F, UNDEF); /* reserved */ \
1221 UNI(0x30, 0x00B0); /* DEGREE SIGN */ \
1222 UNI(0x31, 0x00B1); /* PLUS-MINUS SIGN */ \
1223 UNI(0x32, 0x00B2); /* SUPERSCRIPT TWO */ \
1224 UNI(0x33, 0x00B3); /* SUPERSCRIPT THREE */ \
1225 XXX(0x34, UNDEF); /* reserved */ \
1226 UNI(0x35, 0x00B5); /* MICRO SIGN */ \
1227 UNI(0x36, 0x00B6); /* PILCROW SIGN */ \
1228 UNI(0x37, 0x00B7); /* MIDDLE DOT */ \
1229 XXX(0x38, UNDEF); /* reserved */ \
1230 UNI(0x39, 0x00B9); /* SUPERSCRIPT ONE */ \
1231 UNI(0x3A, 0x00BA); /* MASCULINE ORDINAL INDICATOR */ \
1232 UNI(0x3B, 0x00BB); /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */ \
1233 UNI(0x3C, 0x00BC); /* VULGAR FRACTION ONE QUARTER */ \
1234 UNI(0x3D, 0x00BD); /* VULGAR FRACTION ONE HALF */ \
1235 UNI(0x3E, 0x0131); /* LATIN SMALL LETTER DOTLESS I */ \
1236 UNI(0x3F, 0x00BF); /* INVERTED QUESTION MARK */ \
1237 UNI(0x40, 0x00C0); /* LATIN CAPITAL LETTER A WITH GRAVE */ \
1238 UNI(0x41, 0x00C1); /* LATIN CAPITAL LETTER A WITH ACUTE */ \
1239 UNI(0x42, 0x00C2); /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX */ \
1240 UNI(0x43, 0x00C3); /* LATIN CAPITAL LETTER A WITH TILDE */ \
1241 UNI(0x44, 0x00C4); /* LATIN CAPITAL LETTER A WITH DIAERESIS */ \
1242 UNI(0x45, 0x00C5); /* LATIN CAPITAL LETTER A WITH RING ABOVE */ \
1243 UNI(0x46, 0x00C6); /* LATIN CAPITAL LETTER AE */ \
1244 UNI(0x47, 0x00C7); /* LATIN CAPITAL LETTER C WITH CEDILLA */ \
1245 UNI(0x48, 0x00C8); /* LATIN CAPITAL LETTER E WITH GRAVE */ \
1246 UNI(0x49, 0x00C9); /* LATIN CAPITAL LETTER E WITH ACUTE */ \
1247 UNI(0x4A, 0x00CA); /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX */ \
1248 UNI(0x4B, 0x00CB); /* LATIN CAPITAL LETTER E WITH DIAERESIS */ \
1249 UNI(0x4C, 0x00CC); /* LATIN CAPITAL LETTER I WITH GRAVE */ \
1250 UNI(0x4D, 0x00CD); /* LATIN CAPITAL LETTER I WITH ACUTE */ \
1251 UNI(0x4E, 0x00CE); /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX */ \
1252 UNI(0x4F, 0x00CF); /* LATIN CAPITAL LETTER I WITH DIAERESIS */ \
1253 UNI(0x50, 0x011E); /* LATIN CAPITAL LETTER G WITH BREVE */ \
1254 UNI(0x51, 0x00D1); /* LATIN CAPITAL LETTER N WITH TILDE */ \
1255 UNI(0x52, 0x00D2); /* LATIN CAPITAL LETTER O WITH GRAVE */ \
1256 UNI(0x53, 0x00D3); /* LATIN CAPITAL LETTER O WITH ACUTE */ \
1257 UNI(0x54, 0x00D4); /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX */ \
1258 UNI(0x55, 0x00D5); /* LATIN CAPITAL LETTER O WITH TILDE */ \
1259 UNI(0x56, 0x00D6); /* LATIN CAPITAL LETTER O WITH DIAERESIS */ \
1260 UNI(0x57, 0x0152); /* LATIN CAPITAL LIGATURE OE */ \
1261 UNI(0x58, 0x00D8); /* LATIN CAPITAL LETTER O WITH STROKE */ \
1262 UNI(0x59, 0x00D9); /* LATIN CAPITAL LETTER U WITH GRAVE */ \
1263 UNI(0x5A, 0x00DA); /* LATIN CAPITAL LETTER U WITH ACUTE */ \
1264 UNI(0x5B, 0x00DB); /* LATIN CAPITAL LETTER U WITH CIRCUMFLEX */ \
1265 UNI(0x5C, 0x00DC); /* LATIN CAPITAL LETTER U WITH DIAERESIS */ \
1266 UNI(0x5D, 0x0178); /* LATIN CAPITAL LETTER Y WITH DIAERESIS */ \
1267 UNI(0x5E, 0x015E); /* LATIN CAPITAL LETTER S WITH CEDILLA */ \
1268 UNI(0x5F, 0x00DF); /* LATIN SMALL LETTER SHARP S */ \
1269 UNI(0x60, 0x00E0); /* LATIN SMALL LETTER A WITH GRAVE */ \
1270 UNI(0x61, 0x00E1); /* LATIN SMALL LETTER A WITH ACUTE */ \
1271 UNI(0x62, 0x00E2); /* LATIN SMALL LETTER A WITH CIRCUMFLEX */ \
1272 UNI(0x63, 0x00E3); /* LATIN SMALL LETTER A WITH TILDE */ \
1273 UNI(0x64, 0x00E4); /* LATIN SMALL LETTER A WITH DIAERESIS */ \
1274 UNI(0x65, 0x00E5); /* LATIN SMALL LETTER A WITH RING ABOVE */ \
1275 UNI(0x66, 0x00E6); /* LATIN SMALL LETTER AE */ \
1276 UNI(0x67, 0x00E7); /* LATIN SMALL LETTER C WITH CEDILLA */ \
1277 UNI(0x68, 0x00E8); /* LATIN SMALL LETTER E WITH GRAVE */ \
1278 UNI(0x69, 0x00E9); /* LATIN SMALL LETTER E WITH ACUTE */ \
1279 UNI(0x6A, 0x00EA); /* LATIN SMALL LETTER E WITH CIRCUMFLEX */ \
1280 UNI(0x6B, 0x00EB); /* LATIN SMALL LETTER E WITH DIAERESIS */ \
1281 UNI(0x6C, 0x00EC); /* LATIN SMALL LETTER I WITH GRAVE */ \
1282 UNI(0x6D, 0x00ED); /* LATIN SMALL LETTER I WITH ACUTE */ \
1283 UNI(0x6E, 0x00EE); /* LATIN SMALL LETTER I WITH CIRCUMFLEX */ \
1284 UNI(0x6F, 0x00EF); /* LATIN SMALL LETTER I WITH DIAERESIS */ \
1285 UNI(0x70, 0x011F); /* LATIN SMALL LETTER G WITH BREVE */ \
1286 UNI(0x71, 0x00F1); /* LATIN SMALL LETTER N WITH TILDE */ \
1287 UNI(0x72, 0x00F2); /* LATIN SMALL LETTER O WITH GRAVE */ \
1288 UNI(0x73, 0x00F3); /* LATIN SMALL LETTER O WITH ACUTE */ \
1289 UNI(0x74, 0x00F4); /* LATIN SMALL LETTER O WITH CIRCUMFLEX */ \
1290 UNI(0x75, 0x00F5); /* LATIN SMALL LETTER O WITH TILDE */ \
1291 UNI(0x76, 0x00F6); /* LATIN SMALL LETTER O WITH DIAERESIS */ \
1292 UNI(0x77, 0x0153); /* LATIN SMALL LIGATURE OE */ \
1293 UNI(0x78, 0x00F8); /* LATIN SMALL LETTER O WITH STROKE */ \
1294 UNI(0x79, 0x00F9); /* LATIN SMALL LETTER U WITH GRAVE */ \
1295 UNI(0x7A, 0x00FA); /* LATIN SMALL LETTER U WITH ACUTE */ \
1296 UNI(0x7B, 0x00FB); /* LATIN SMALL LETTER U WITH CIRCUMFLEX */ \
1297 UNI(0x7C, 0x00FC); /* LATIN SMALL LETTER U WITH DIAERESIS */ \
1298 UNI(0x7D, 0x00FF); /* LATIN SMALL LETTER Y WITH DIAERESIS */ \
1299 UNI(0x7E, 0x015F); /* LATIN SMALL LETTER S WITH CEDILLA */ \
1300 } \
1301 end_CODEPAGE()
1302 /*
1303 * mentioned, but not documented in VT510 manual, etc., this uses
1304 * the ELOT927 table from Kermit 95:
1305 */
1306 #define map_NRCS_Greek(code) \
1307 switch (code) { \
1308 MAP(0x61, 0x0391); /* CAPITAL GREEK LETTER ALPHA */ \
1309 MAP(0x62, 0x0392); /* CAPITAL GREEK LETTER BETA */ \
1310 MAP(0x63, 0x0393); /* CAPITAL GREEK LETTER GAMMA */ \
1311 MAP(0x64, 0x0394); /* CAPITAL GREEK LETTER DELTA */ \
1312 MAP(0x65, 0x0395); /* CAPITAL GREEK LETTER EPSILON */ \
1313 MAP(0x66, 0x0396); /* CAPITAL GREEK LETTER ZETA */ \
1314 MAP(0x67, 0x0397); /* CAPITAL GREEK LETTER ETA */ \
1315 MAP(0x68, 0x0398); /* CAPITAL GREEK LETTER THETA */ \
1316 MAP(0x69, 0x0399); /* CAPITAL GREEK LETTER IOTA */ \
1317 MAP(0x6a, 0x039a); /* CAPITAL GREEK LETTER KAPPA */ \
1318 MAP(0x6b, 0x039b); /* CAPITAL GREEK LETTER LAMDA */ \
1319 MAP(0x6c, 0x039c); /* CAPITAL GREEK LETTER MU */ \
1320 MAP(0x6d, 0x039d); /* CAPITAL GREEK LETTER NU */ \
1321 MAP(0x6e, 0x03a7); /* CAPITAL GREEK LETTER KSI (CHI) */ \
1322 MAP(0x6f, 0x039f); /* CAPITAL GREEK LETTER OMICRON */ \
1323 MAP(0x70, 0x03a0); /* CAPITAL GREEK LETTER PI */ \
1324 MAP(0x71, 0x03a1); /* CAPITAL GREEK LETTER RHO */ \
1325 MAP(0x72, 0x03a3); /* CAPITAL GREEK LETTER SIGMA */ \
1326 MAP(0x73, 0x03a4); /* CAPITAL GREEK LETTER TAU */ \
1327 MAP(0x74, 0x03a5); /* CAPITAL GREEK LETTER UPSILON */ \
1328 MAP(0x75, 0x03a6); /* CAPITAL GREEK LETTER FI (PHI) */ \
1329 MAP(0x76, 0x039e); /* CAPITAL GREEK LETTER XI */ \
1330 MAP(0x77, 0x03a8); /* CAPITAL GREEK LETTER PSI */ \
1331 MAP(0x78, 0x03a9); /* CAPITAL GREEK LETTER OMEGA */ \
1332 XXX(0x79, BLANK); /* unused */ \
1333 XXX(0x7a, BLANK); /* unused */ \
1334 }
1335 /* figure A-21 "DEC 7-Bit Hebrew Character Set" */
1336 #define map_NRCS_Hebrew(code) \
1337 switch (code) { \
1338 UNI(0x60, 0x05d0); /* HEBREW LETTER ALEF */ \
1339 UNI(0x61, 0x05d1); /* HEBREW LETTER BET */ \
1340 UNI(0x62, 0x05d2); /* HEBREW LETTER GIMEL */ \
1341 UNI(0x63, 0x05d3); /* HEBREW LETTER DALET */ \
1342 UNI(0x64, 0x05d4); /* HEBREW LETTER HE */ \
1343 UNI(0x65, 0x05d5); /* HEBREW LETTER VAV */ \
1344 UNI(0x66, 0x05d6); /* HEBREW LETTER ZAYIN */ \
1345 UNI(0x67, 0x05d7); /* HEBREW LETTER HET */ \
1346 UNI(0x68, 0x05d8); /* HEBREW LETTER TET */ \
1347 UNI(0x69, 0x05d9); /* HEBREW LETTER YOD */ \
1348 UNI(0x6a, 0x05da); /* HEBREW LETTER FINAL KAF */ \
1349 UNI(0x6b, 0x05db); /* HEBREW LETTER KAF */ \
1350 UNI(0x6c, 0x05dc); /* HEBREW LETTER LAMED */ \
1351 UNI(0x6d, 0x05dd); /* HEBREW LETTER FINAL MEM */ \
1352 UNI(0x6e, 0x05de); /* HEBREW LETTER MEM */ \
1353 UNI(0x6f, 0x05df); /* HEBREW LETTER FINAL NUN */ \
1354 UNI(0x70, 0x05e0); /* HEBREW LETTER NUN */ \
1355 UNI(0x71, 0x05e1); /* HEBREW LETTER SAMEKH */ \
1356 UNI(0x72, 0x05e2); /* HEBREW LETTER AYIN */ \
1357 UNI(0x73, 0x05e3); /* HEBREW LETTER FINAL PE */ \
1358 UNI(0x74, 0x05e4); /* HEBREW LETTER PE */ \
1359 UNI(0x75, 0x05e5); /* HEBREW LETTER FINAL TSADI */ \
1360 UNI(0x76, 0x05e6); /* HEBREW LETTER TSADI */ \
1361 UNI(0x77, 0x05e7); /* HEBREW LETTER QOF */ \
1362 UNI(0x78, 0x05e8); /* HEBREW LETTER RESH */ \
1363 UNI(0x79, 0x05e9); /* HEBREW LETTER SHIN */ \
1364 UNI(0x7a, 0x05ea); /* HEBREW LETTER TAV */ \
1365 }
1366 /* figure A-26 "DEC 7-Bit Turkish Character Set" */
1367 #define map_NRCS_Turkish(code) \
1368 switch (code) { \
1369 UNI(0x26, 0x011f); /* LATIN SMALL LETTER G WITH BREVE */ \
1370 UNI(0x40, 0x0130); /* LATIN CAPITAL LETTER I WITH DOT ABOVE */ \
1371 UNI(0x5b, 0x015e); /* LATIN CAPITAL LETTER S WITH CEDILLA */ \
1372 UNI(0x5c, 0x00d6); /* LATIN CAPITAL LETTER O WITH DIAERESIS */ \
1373 UNI(0x5d, 0x00c7); /* LATIN CAPITAL LETTER C WITH CEDILLA */ \
1374 UNI(0x5e, 0x00dC); /* LATIN CAPITAL LETTER U WITH DIAERESIS */ \
1375 UNI(0x60, 0x011e); /* LATIN CAPITAL LETTER G WITH BREVE */ \
1376 UNI(0x7b, 0x015f); /* LATIN SMALL LETTER S WITH CEDILLA */ \
1377 UNI(0x7c, 0x00f6); /* LATIN SMALL LETTER O WITH DIAERESIS */ \
1378 UNI(0x7d, 0x00e7); /* LATIN SMALL LETTER C WITH CEDILLA */ \
1379 UNI(0x7e, 0x00fc); /* LATIN SMALL LETTER U WITH DIAERESIS */ \
1380 }
1381 #else
1382 #define map_DEC_Cyrillic(code) /* nothing */
1383 #define map_DEC_Greek_Supp(code) /* nothing */
1384 #define map_DEC_Hebrew_Supp(code) /* nothing */
1385 #define map_DEC_Technical(code) /* nothing */
1386 #define map_DEC_Turkish_Supp(code) /* nothing */
1387 #define map_ISO_Greek_Supp(code) /* nothing */
1388 #define map_ISO_Hebrew(code) /* nothing */
1389 #define map_ISO_Latin_2(code) /* nothing */
1390 #define map_ISO_Latin_5(code) /* nothing */
1391 #define map_ISO_Latin_Cyrillic(code) /* nothing */
1392 #define map_NRCS_Greek(code) /* nothing */
1393 #define map_NRCS_Hebrew(code) /* nothing */
1394 #define map_NRCS_Turkish(code) /* nothing */
1395 #endif /* OPT_WIDE_CHARS */
1396
1397 /*
1398 * Translate an input keysym to the corresponding NRC keysym.
1399 */
1400 unsigned
xtermCharSetIn(XtermWidget xw,unsigned code,DECNRCM_codes charset)1401 xtermCharSetIn(XtermWidget xw, unsigned code, DECNRCM_codes charset)
1402 {
1403 TScreen *screen = TScreenOf(xw);
1404 #define MAP(to, from) case from: code = to; break
1405
1406 #if OPT_WIDE_CHARS
1407 #define UNI(to, from) case from: if (screen->utf8_nrc_mode) code = to; break
1408 #else
1409 #define UNI(to, from) case from: break
1410 #endif
1411
1412 #define XXX(to, from) /* no defined mapping to 0..255 */
1413
1414 TRACE(("CHARSET-IN GL=%s(G%d) GR=%s(G%d) SS%d\n\t%s\n",
1415 visibleScsCode(screen->gsets[screen->curgl]), screen->curgl,
1416 visibleScsCode(screen->gsets[screen->curgr]), screen->curgr,
1417 screen->curss,
1418 visibleUChar(code)));
1419
1420 (void) screen;
1421 switch (charset) {
1422 case nrc_British: /* United Kingdom set (or Latin 1) */
1423 if (code == XK_sterling)
1424 code = 0x23;
1425 code &= 0x7f;
1426 break;
1427
1428 case nrc_DEC_Alt_Chars:
1429 case nrc_DEC_Alt_Graphics:
1430 case nrc_ASCII:
1431 break;
1432
1433 case nrc_DEC_Spec_Graphic:
1434 break;
1435
1436 case nrc_DEC_Supp:
1437 map_DEC_Supp_Graphic(code, code &= 0x7f);
1438 break;
1439
1440 case nrc_DEC_Supp_Graphic:
1441 map_DEC_Supp_Graphic(code, code |= 0x80);
1442 break;
1443
1444 case nrc_DEC_Technical:
1445 map_DEC_Technical(code);
1446 break;
1447
1448 case nrc_Dutch:
1449 map_NRCS_Dutch(code);
1450 break;
1451
1452 case nrc_Finnish:
1453 case nrc_Finnish2:
1454 map_NRCS_Finnish(code);
1455 break;
1456
1457 case nrc_French:
1458 case nrc_French2:
1459 map_NRCS_French(code);
1460 break;
1461
1462 case nrc_French_Canadian:
1463 map_NRCS_French_Canadian(code);
1464 break;
1465
1466 case nrc_German:
1467 map_NRCS_German(code);
1468 break;
1469
1470 case nrc_Greek:
1471 map_NRCS_Greek(code); /* FIXME - ELOT? */
1472 break;
1473
1474 case nrc_DEC_Greek_Supp:
1475 map_DEC_Greek_Supp(code);
1476 break;
1477
1478 case nrc_ISO_Greek_Supp:
1479 map_ISO_Greek_Supp(code);
1480 break;
1481
1482 case nrc_DEC_Hebrew_Supp:
1483 map_DEC_Hebrew_Supp(code);
1484 break;
1485
1486 case nrc_Hebrew:
1487 map_NRCS_Hebrew(code);
1488 break;
1489
1490 case nrc_ISO_Hebrew_Supp:
1491 map_ISO_Hebrew(code);
1492 break;
1493
1494 case nrc_Italian:
1495 map_NRCS_Italian(code);
1496 break;
1497
1498 case nrc_ISO_Latin_2_Supp:
1499 map_ISO_Latin_2(code);
1500 break;
1501
1502 case nrc_ISO_Latin_5_Supp:
1503 map_ISO_Latin_5(code);
1504 break;
1505
1506 case nrc_ISO_Latin_Cyrillic:
1507 map_ISO_Latin_Cyrillic(code);
1508 break;
1509
1510 case nrc_Norwegian_Danish:
1511 case nrc_Norwegian_Danish2:
1512 case nrc_Norwegian_Danish3:
1513 map_NRCS_Norwegian_Danish(code);
1514 break;
1515
1516 case nrc_Portugese:
1517 map_NRCS_Portuguese(code);
1518 break;
1519
1520 case nrc_SCS_NRCS: /* vt5xx - probably Serbo/Croatian */
1521 /* FIXME */
1522 break;
1523
1524 case nrc_Spanish:
1525 map_NRCS_Spanish(code);
1526 break;
1527
1528 case nrc_Swedish2:
1529 case nrc_Swedish:
1530 map_NRCS_Swedish(code);
1531 break;
1532
1533 case nrc_Swiss:
1534 map_NRCS_Swiss(code);
1535 break;
1536
1537 case nrc_Turkish:
1538 map_NRCS_Turkish(code);
1539 break;
1540
1541 case nrc_DEC_Turkish_Supp:
1542 map_DEC_Turkish_Supp(code);
1543 break;
1544
1545 case nrc_DEC_Cyrillic:
1546 map_DEC_Cyrillic(code);
1547 break;
1548
1549 case nrc_ISO_Latin_1_Supp:
1550 case nrc_British_Latin_1:
1551 case nrc_Russian:
1552 case nrc_French_Canadian2:
1553 case nrc_Unknown:
1554 default: /* any character sets we don't recognize */
1555 break;
1556 }
1557 code &= 0x7f; /* NRC in any case is 7-bit */
1558 TRACE(("->\t%s\n",
1559 visibleUChar(code)));
1560 return code;
1561 #undef MAP
1562 #undef UNI
1563 #undef XXX
1564 }
1565
1566 /*
1567 * Translate a string to the display form. This assumes the font has the
1568 * DEC graphic characters in cells 0-31, and otherwise is ISO-8859-1.
1569 */
1570 int
xtermCharSetOut(XtermWidget xw,IChar * buf,IChar * ptr,DECNRCM_codes leftset)1571 xtermCharSetOut(XtermWidget xw, IChar *buf, IChar *ptr, DECNRCM_codes leftset)
1572 {
1573 IChar *s;
1574 TScreen *screen = TScreenOf(xw);
1575 int count = 0;
1576 DECNRCM_codes rightset = screen->gsets[(int) (screen->curgr)];
1577
1578 #define MAP(from, to) case from: chr = to; break
1579
1580 #if OPT_WIDE_CHARS
1581 #define UNI(from, to) case from: if (screen->utf8_nrc_mode) chr = to; break
1582 #define XXX(from, to) UNI(from, to)
1583 #else
1584 #define UNI(old, new) chr = old; break
1585 #define XXX(from, to) /* nothing */
1586 #endif
1587
1588 TRACE(("CHARSET-OUT GL=%s(G%d) GR=%s(G%d) SS%d\n\t%s\n",
1589 visibleScsCode(leftset), screen->curgl,
1590 visibleScsCode(rightset), screen->curgr,
1591 screen->curss,
1592 visibleIChars(buf, (unsigned) (ptr - buf))));
1593
1594 for (s = buf; s < ptr; ++s) {
1595 int eight = CharOf(E2A(*s));
1596 int seven = eight & 0x7f;
1597 DECNRCM_codes cs = (eight >= 128) ? rightset : leftset;
1598 int chr = eight;
1599
1600 count++;
1601 #if OPT_WIDE_CHARS
1602 /*
1603 * This is only partly right - prevent inadvertent remapping of
1604 * the replacement character and other non-8bit codes into bogus
1605 * 8bit codes.
1606 */
1607 if (screen->utf8_mode || screen->utf8_nrc_mode) {
1608 if (*s > 255)
1609 continue;
1610 }
1611 #endif
1612 if (*s < 32)
1613 continue;
1614
1615 switch (cs) {
1616 case nrc_ISO_Latin_1_Supp:
1617 /* FALLTHRU */
1618 case nrc_British_Latin_1:
1619 /* FALLTHRU */
1620 case nrc_British: /* United Kingdom set (or Latin 1) */
1621 if ((xw->flags & NATIONAL)
1622 || (screen->vtXX_level <= 1)) {
1623 if ((xw->flags & NATIONAL)) {
1624 chr = seven;
1625 }
1626 if (chr == 0x23) {
1627 chr = XTERM_POUND;
1628 #if OPT_WIDE_CHARS
1629 if (screen->utf8_nrc_mode) {
1630 chr = 0xa3;
1631 }
1632 #endif
1633 }
1634 } else {
1635 chr = (seven | 0x80);
1636 }
1637 break;
1638
1639 case nrc_DEC_Alt_Chars:
1640 case nrc_DEC_Alt_Graphics:
1641 case nrc_ASCII:
1642 break;
1643
1644 case nrc_DEC_Spec_Graphic:
1645 if (seven > 0x5f && seven <= 0x7e) {
1646 #if OPT_WIDE_CHARS
1647 if (screen->utf8_mode || screen->utf8_nrc_mode)
1648 chr = (int) dec2ucs(screen, (unsigned) (seven - 0x5f));
1649 else
1650 #endif
1651 chr = seven - 0x5f;
1652 } else if (chr == 0x5f) {
1653 chr = 0;
1654 } else {
1655 chr = seven;
1656 }
1657 break;
1658
1659 case nrc_DEC_Supp:
1660 map_DEC_Supp_Graphic(chr = seven, chr |= 0x80);
1661 break;
1662
1663 case nrc_DEC_Supp_Graphic:
1664 map_DEC_Supp_Graphic(chr = seven, chr |= 0x80);
1665 break;
1666
1667 case nrc_DEC_Technical:
1668 map_DEC_Technical(chr = seven);
1669 break;
1670
1671 case nrc_Dutch:
1672 map_NRCS_Dutch(chr = seven);
1673 break;
1674
1675 case nrc_Finnish:
1676 case nrc_Finnish2:
1677 map_NRCS_Finnish(chr = seven);
1678 break;
1679
1680 case nrc_French:
1681 case nrc_French2:
1682 map_NRCS_French(chr = seven);
1683 break;
1684
1685 case nrc_French_Canadian:
1686 case nrc_French_Canadian2:
1687 map_NRCS_French_Canadian(chr = seven);
1688 break;
1689
1690 case nrc_German:
1691 map_NRCS_German(chr = seven);
1692 break;
1693
1694 case nrc_Greek:
1695 map_NRCS_Greek(chr = seven); /* FIXME - ELOT? */
1696 break;
1697
1698 case nrc_DEC_Greek_Supp:
1699 map_DEC_Greek_Supp(chr = seven);
1700 break;
1701
1702 case nrc_ISO_Greek_Supp:
1703 map_ISO_Greek_Supp(chr = seven);
1704 break;
1705
1706 case nrc_DEC_Hebrew_Supp:
1707 map_DEC_Hebrew_Supp(chr = seven);
1708 break;
1709
1710 case nrc_Hebrew:
1711 map_NRCS_Hebrew(chr = seven);
1712 break;
1713
1714 case nrc_ISO_Hebrew_Supp:
1715 map_ISO_Hebrew(chr = seven);
1716 break;
1717
1718 case nrc_Italian:
1719 map_NRCS_Italian(chr = seven);
1720 break;
1721
1722 case nrc_ISO_Latin_2_Supp:
1723 map_ISO_Latin_2(chr = seven);
1724 break;
1725
1726 case nrc_ISO_Latin_5_Supp:
1727 map_ISO_Latin_5(chr = seven);
1728 break;
1729
1730 case nrc_ISO_Latin_Cyrillic:
1731 map_ISO_Latin_Cyrillic(chr = seven);
1732 break;
1733
1734 case nrc_Norwegian_Danish:
1735 case nrc_Norwegian_Danish2:
1736 case nrc_Norwegian_Danish3:
1737 map_NRCS_Norwegian_Danish(chr = seven);
1738 break;
1739
1740 case nrc_Portugese:
1741 map_NRCS_Portuguese(chr = seven);
1742 break;
1743
1744 case nrc_SCS_NRCS: /* vt5xx - probably Serbo/Croatian */
1745 /* FIXME */
1746 break;
1747
1748 case nrc_Spanish:
1749 map_NRCS_Spanish(chr = seven);
1750 break;
1751
1752 case nrc_Swedish2:
1753 case nrc_Swedish:
1754 map_NRCS_Swedish(chr = seven);
1755 break;
1756
1757 case nrc_Swiss:
1758 map_NRCS_Swiss(chr = seven);
1759 break;
1760
1761 case nrc_Turkish:
1762 map_NRCS_Turkish(chr = seven);
1763 break;
1764
1765 case nrc_DEC_Turkish_Supp:
1766 map_DEC_Turkish_Supp(chr = seven);
1767 break;
1768
1769 case nrc_DEC_Cyrillic:
1770 map_DEC_Cyrillic(chr = seven);
1771 break;
1772
1773 case nrc_Russian:
1774 case nrc_Unknown:
1775 default: /* any character sets we don't recognize */
1776 count--;
1777 break;
1778 }
1779 /*
1780 * The state machine already treated DEL as a nonprinting and
1781 * nonspacing character. If we have DEL now, remove it.
1782 */
1783 if (chr == ANSI_DEL) {
1784 IChar *s1;
1785 --ptr;
1786 for (s1 = s; s1 < ptr; ++s1) {
1787 s1[0] = s1[1];
1788 }
1789 } else {
1790 *s = (IChar) A2E(chr);
1791 }
1792 }
1793 TRACE(("%d\t%s\n",
1794 count,
1795 visibleIChars(buf, (unsigned) (ptr - buf))));
1796 return count;
1797 #undef MAP
1798 #undef UNI
1799 #undef XXX
1800 }
1801