"Fossies" - the Fresh Open Source Software Archive 
Member "xterm-379/charsets.c" (25 Dec 2020, 76844 Bytes) of package /linux/misc/xterm-379.tgz:
As a special service "Fossies" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting (style:
standard) with prefixed line numbers and
code folding option.
Alternatively you can here
view or
download the uninterpreted source code file.
For more information about "charsets.c" see the
Fossies "Dox" file reference documentation.
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
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
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 }