charsets.c revision 5307cd1a
1/* $XTermId: charsets.c,v 1.112 2020/12/24 22:07:02 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 */ 1400unsigned 1401xtermCharSetIn(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 */ 1570int 1571xtermCharSetOut(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