1 /* vi:set ts=8 sts=4 sw=4 noet: 2 * 3 * VIM - Vi IMproved by Bram Moolenaar 4 * 5 * Do ":help uganda" in Vim to read copying and usage conditions. 6 * Do ":help credits" in Vim to see a list of people who contributed. 7 * See README.txt for an overview of the Vim source code. 8 */ 9 10 /* 11 * digraph.c: code for digraphs 12 */ 13 14 #include "vim.h" 15 16 #if defined(FEAT_DIGRAPHS) || defined(PROTO) 17 18 typedef int result_T; 19 20 typedef struct digraph 21 { 22 char_u char1; 23 char_u char2; 24 result_T result; 25 } digr_T; 26 27 static void printdigraph(digr_T *dp, result_T *previous); 28 29 // digraphs added by the user 30 static garray_T user_digraphs = {0, 0, (int)sizeof(digr_T), 10, NULL}; 31 32 /* 33 * Note: Characters marked with XX are not included literally, because some 34 * compilers cannot handle them (Amiga SAS/C is the most picky one). 35 */ 36 static digr_T digraphdefault[] = 37 38 #ifdef __MINT__ 39 /* 40 * ATARI digraphs 41 */ 42 {{'C', ',', 128}, // ~@ XX 43 {'u', '"', 129}, // 44 {'e', '\'', 130}, // 45 {'a', '^', 131}, // 46 {'a', '"', 132}, // 47 {'a', '`', 133}, // 48 {'a', '@', 134}, // 49 {'c', ',', 135}, // ~G XX 50 {'e', '^', 136}, // ~H XX 51 {'e', '"', 137}, // 52 {'e', '`', 138}, // 53 {'i', '"', 139}, // 54 {'i', '^', 140}, // 55 {'i', '`', 141}, // 56 {'A', '"', 142}, // 57 {'A', '@', 143}, // 58 {'E', '\'', 144}, // 59 {'a', 'e', 145}, // 60 {'A', 'E', 146}, // 61 {'o', '^', 147}, // 62 {'o', '"', 148}, // 63 {'o', '`', 149}, // 64 {'u', '^', 150}, // 65 {'u', '`', 151}, // 66 {'y', '"', 152}, // 67 {'O', '"', 153}, // 68 {'U', '"', 154}, // 69 {'c', '|', 155}, // 70 {'$', '$', 156}, // 71 {'Y', '-', 157}, // ~] XX 72 {'s', 's', 158}, // 73 {'f', 'f', 159}, // 74 {'a', '\'', 160}, // 75 {'i', '\'', 161}, // ¡ 76 {'o', '\'', 162}, // ¢ 77 {'u', '\'', 163}, // £ 78 {'n', '~', 164}, // ¤ 79 {'N', '~', 165}, // ¥ 80 {'a', 'a', 166}, // ¦ 81 {'o', 'o', 167}, // § 82 {'~', '?', 168}, // ¨ 83 {'-', 'a', 169}, // © 84 {'a', '-', 170}, // ª 85 {'1', '2', 171}, // « 86 {'1', '4', 172}, // ¬ 87 {'~', '!', 173}, // 88 {'<', '<', 174}, // ® 89 {'>', '>', 175}, // ¯ 90 {'j', 'u', 230}, // æ 91 {'o', '/', 237}, // í 92 {'+', '-', 241}, // ñ 93 {'>', '=', 242}, // ò 94 {'<', '=', 243}, // ó 95 {':', '-', 246}, // ö 96 {'~', '~', 247}, // ÷ 97 {'~', 'o', 248}, // ø 98 {'2', '2', 253}, // ý 99 {NUL, NUL, NUL} 100 }; 101 102 #else // !__MINT__ 103 # ifdef HPUX_DIGRAPHS 104 105 /* 106 * different HPUX digraphs 107 */ 108 {{'A', '`', 161}, // ¡ 109 {'A', '^', 162}, // ¢ 110 {'E', '`', 163}, // £ 111 {'E', '^', 164}, // ¤ 112 {'E', '"', 165}, // ¥ 113 {'I', '^', 166}, // ¦ 114 {'I', '"', 167}, // § 115 {'\'', '\'', 168}, // ¨ 116 {'`', '`', 169}, // © 117 {'^', '^', 170}, // ª 118 {'"', '"', 171}, // « 119 {'~', '~', 172}, // ¬ 120 {'U', '`', 173}, // 121 {'U', '^', 174}, // ® 122 {'L', '=', 175}, // ¯ 123 {'~', '_', 176}, // ° 124 {'Y', '\'', 177}, // ± 125 {'y', '\'', 178}, // ² 126 {'~', 'o', 179}, // ³ 127 {'C', ',', 180}, // ´ 128 {'c', ',', 181}, // µ 129 {'N', '~', 182}, // ¶ 130 {'n', '~', 183}, // · 131 {'~', '!', 184}, // ¸ 132 {'~', '?', 185}, // ¹ 133 {'o', 'x', 186}, // º 134 {'L', '-', 187}, // » 135 {'Y', '=', 188}, // ¼ 136 {'p', 'p', 189}, // ½ 137 {'f', 'l', 190}, // ¾ 138 {'c', '|', 191}, // ¿ 139 {'a', '^', 192}, // À 140 {'e', '^', 193}, // Á 141 {'o', '^', 194}, // Â 142 {'u', '^', 195}, // Ã 143 {'a', '\'', 196}, // Ä 144 {'e', '\'', 197}, // Å 145 {'o', '\'', 198}, // Æ 146 {'u', '\'', 199}, // Ç 147 {'a', '`', 200}, // È 148 {'e', '`', 201}, // É 149 {'o', '`', 202}, // Ê 150 {'u', '`', 203}, // Ë 151 {'a', '"', 204}, // Ì 152 {'e', '"', 205}, // Í 153 {'o', '"', 206}, // Î 154 {'u', '"', 207}, // Ï 155 {'A', 'o', 208}, // Ð 156 {'i', '^', 209}, // Ñ 157 {'O', '/', 210}, // Ò 158 {'A', 'E', 211}, // Ó 159 {'a', 'o', 212}, // Ô 160 {'i', '\'', 213}, // Õ 161 {'o', '/', 214}, // Ö 162 {'a', 'e', 215}, // × 163 {'A', '"', 216}, // Ø 164 {'i', '`', 217}, // Ù 165 {'O', '"', 218}, // Ú 166 {'U', '"', 219}, // Û 167 {'E', '\'', 220}, // Ü 168 {'i', '"', 221}, // Ý 169 {'s', 's', 222}, // Þ 170 {'O', '^', 223}, // ß 171 {'A', '\'', 224}, // à 172 {'A', '~', 225}, // á 173 {'a', '~', 226}, // â 174 {'D', '-', 227}, // ã 175 {'d', '-', 228}, // ä 176 {'I', '\'', 229}, // å 177 {'I', '`', 230}, // æ 178 {'O', '\'', 231}, // ç 179 {'O', '`', 232}, // è 180 {'O', '~', 233}, // é 181 {'o', '~', 234}, // ê 182 {'S', '~', 235}, // ë 183 {'s', '~', 236}, // ì 184 {'U', '\'', 237}, // í 185 {'Y', '"', 238}, // î 186 {'y', '"', 239}, // ï 187 {'p', '-', 240}, // ð 188 {'p', '~', 241}, // ñ 189 {'~', '.', 242}, // ò 190 {'j', 'u', 243}, // ó 191 {'P', 'p', 244}, // ô 192 {'3', '4', 245}, // õ 193 {'-', '-', 246}, // ö 194 {'1', '4', 247}, // ÷ 195 {'1', '2', 248}, // ø 196 {'a', '_', 249}, // ù 197 {'o', '_', 250}, // ú 198 {'<', '<', 251}, // û 199 {'x', 'x', 252}, // ü 200 {'>', '>', 253}, // ý 201 {'+', '-', 254}, // þ 202 {'n', 'u', 255}, // x XX 203 {NUL, NUL, NUL} 204 }; 205 206 # else // !HPUX_DIGRAPHS 207 208 # ifdef EBCDIC 209 210 /* 211 * EBCDIC - ISO digraphs 212 * TODO: EBCDIC Table is Code-Page 1047 213 */ 214 {{'a', '^', 66}, // â 215 {'a', '"', 67}, // ä 216 {'a', '`', 68}, // à 217 {'a', '\'', 69}, // á 218 {'a', '~', 70}, // ã 219 {'a', '@', 71}, // å 220 {'a', 'a', 71}, // å 221 {'c', ',', 72}, // ç 222 {'n', '~', 73}, // ñ 223 {'c', '|', 74}, // ¢ 224 {'e', '\'', 81}, // é 225 {'e', '^', 82}, // ê 226 {'e', '"', 83}, // ë 227 {'e', '`', 84}, // è 228 {'i', '\'', 85}, // í 229 {'i', '^', 86}, // î 230 {'i', '"', 87}, // ï 231 {'i', '`', 88}, // ì 232 {'s', 's', 89}, // ß 233 {'A', '^', 98}, // Â 234 {'A', '"', 99}, // Ä 235 {'A', '`', 100}, // À 236 {'A', '\'', 101}, // Á 237 {'A', '~', 102}, // Ã 238 {'A', '@', 103}, // Å 239 {'A', 'A', 103}, // Å 240 {'C', ',', 104}, // Ç 241 {'N', '~', 105}, // Ñ 242 {'|', '|', 106}, // ¦ 243 {'o', '/', 112}, // ø 244 {'E', '\'', 113}, // É 245 {'E', '^', 114}, // Ê 246 {'E', '"', 115}, // Ë 247 {'E', '`', 116}, // È 248 {'I', '\'', 117}, // Í 249 {'I', '^', 118}, // Î 250 {'I', '"', 119}, // Ï 251 {'I', '`', 120}, // Ì 252 {'O', '/', 128}, // 0/ XX 253 {'<', '<', 138}, // « 254 {'>', '>', 139}, // » 255 {'d', '-', 140}, // ð 256 {'y', '\'', 141}, // ý 257 {'i', 'p', 142}, // þ 258 {'+', '-', 143}, // ± 259 {'~', 'o', 144}, // ° 260 {'a', '-', 154}, // ª 261 {'o', '-', 155}, // º 262 {'a', 'e', 156}, // æ 263 {',', ',', 157}, // , XX 264 {'A', 'E', 158}, // Æ 265 {'o', 'x', 159}, // ¤ - currency symbol in ISO 8859-1 266 {'e', '=', 159}, // ¤ - euro symbol in ISO 8859-15 267 {'E', 'u', 159}, // ¤ - euro symbol in ISO 8859-15 268 {'j', 'u', 160}, // µ 269 {'y', '"', 167}, // x XX 270 {'~', '!', 170}, // ¡ 271 {'~', '?', 171}, // ¿ 272 {'D', '-', 172}, // Ð 273 {'I', 'p', 174}, // Þ 274 {'r', 'O', 175}, // ® 275 {'-', ',', 176}, // ¬ 276 {'$', '$', 177}, // £ 277 {'Y', '-', 178}, // ¥ 278 {'~', '.', 179}, // · 279 {'c', 'O', 180}, // © 280 {'p', 'a', 181}, // § 281 {'p', 'p', 182}, // ¶ 282 {'1', '4', 183}, // ¼ 283 {'1', '2', 184}, // ½ 284 {'3', '4', 185}, // ¾ 285 {'Y', '\'', 186}, // Ý 286 {'"', '"', 187}, // ¨ 287 {'-', '=', 188}, // ¯ 288 {'\'', '\'', 190}, // ´ 289 {'O', 'E', 191}, // × - OE in ISO 8859-15 290 {'/', '\\', 191}, // × - multiplication symbol in ISO 8859-1 291 {'-', '-', 202}, // 292 {'o', '^', 203}, // ô 293 {'o', '"', 204}, // ö 294 {'o', '`', 205}, // ò 295 {'o', '\'', 206}, // ó 296 {'o', '~', 207}, // õ 297 {'1', '1', 218}, // ¹ 298 {'u', '^', 219}, // û 299 {'u', '"', 220}, // ü 300 {'u', '`', 221}, // ù 301 {'u', '\'', 222}, // ú 302 {':', '-', 225}, // ÷ - division symbol in ISO 8859-1 303 {'o', 'e', 225}, // ÷ - oe in ISO 8859-15 304 {'2', '2', 234}, // ² 305 {'O', '^', 235}, // Ô 306 {'O', '"', 236}, // Ö 307 {'O', '`', 237}, // Ò 308 {'O', '\'', 238}, // Ó 309 {'O', '~', 239}, // Õ 310 {'3', '3', 250}, // ³ 311 {'U', '^', 251}, // Û 312 {'U', '"', 252}, // Ü 313 {'U', '`', 253}, // Ù 314 {'U', '\'', 254}, // Ú 315 {NUL, NUL, NUL} 316 }; 317 318 # else 319 # ifdef OLD_DIGRAPHS 320 321 /* 322 * digraphs compatible with Vim 5.x 323 */ 324 {{'~', '!', 161}, // ¡ 325 {'c', '|', 162}, // ¢ 326 {'$', '$', 163}, // £ 327 {'o', 'x', 164}, // ¤ - currency symbol in ISO 8859-1 328 {'e', '=', 164}, // ¤ - euro symbol in ISO 8859-15 329 {'Y', '-', 165}, // ¥ 330 {'|', '|', 166}, // ¦ 331 {'p', 'a', 167}, // § 332 {'"', '"', 168}, // ¨ 333 {'c', 'O', 169}, // © 334 {'a', '-', 170}, // ª 335 {'<', '<', 171}, // « 336 {'-', ',', 172}, // ¬ 337 {'-', '-', 173}, // 338 {'r', 'O', 174}, // ® 339 {'-', '=', 175}, // ¯ 340 {'~', 'o', 176}, // ° 341 {'+', '-', 177}, // ± 342 {'2', '2', 178}, // ² 343 {'3', '3', 179}, // ³ 344 {'\'', '\'', 180}, // ´ 345 {'j', 'u', 181}, // µ 346 {'p', 'p', 182}, // ¶ 347 {'~', '.', 183}, // · 348 {',', ',', 184}, // ¸ 349 {'1', '1', 185}, // ¹ 350 {'o', '-', 186}, // º 351 {'>', '>', 187}, // » 352 {'1', '4', 188}, // ¼ 353 {'1', '2', 189}, // ½ 354 {'3', '4', 190}, // ¾ 355 {'~', '?', 191}, // ¿ 356 {'A', '`', 192}, // À 357 {'A', '\'', 193}, // Á 358 {'A', '^', 194}, // Â 359 {'A', '~', 195}, // Ã 360 {'A', '"', 196}, // Ä 361 {'A', '@', 197}, // Å 362 {'A', 'A', 197}, // Å 363 {'A', 'E', 198}, // Æ 364 {'C', ',', 199}, // Ç 365 {'E', '`', 200}, // È 366 {'E', '\'', 201}, // É 367 {'E', '^', 202}, // Ê 368 {'E', '"', 203}, // Ë 369 {'I', '`', 204}, // Ì 370 {'I', '\'', 205}, // Í 371 {'I', '^', 206}, // Î 372 {'I', '"', 207}, // Ï 373 {'D', '-', 208}, // Ð 374 {'N', '~', 209}, // Ñ 375 {'O', '`', 210}, // Ò 376 {'O', '\'', 211}, // Ó 377 {'O', '^', 212}, // Ô 378 {'O', '~', 213}, // Õ 379 {'O', '"', 214}, // Ö 380 {'/', '\\', 215}, // × - multiplication symbol in ISO 8859-1 381 {'O', 'E', 215}, // × - OE in ISO 8859-15 382 {'O', '/', 216}, // Ø 383 {'U', '`', 217}, // Ù 384 {'U', '\'', 218}, // Ú 385 {'U', '^', 219}, // Û 386 {'U', '"', 220}, // Ü 387 {'Y', '\'', 221}, // Ý 388 {'I', 'p', 222}, // Þ 389 {'s', 's', 223}, // ß 390 {'a', '`', 224}, // à 391 {'a', '\'', 225}, // á 392 {'a', '^', 226}, // â 393 {'a', '~', 227}, // ã 394 {'a', '"', 228}, // ä 395 {'a', '@', 229}, // å 396 {'a', 'a', 229}, // å 397 {'a', 'e', 230}, // æ 398 {'c', ',', 231}, // ç 399 {'e', '`', 232}, // è 400 {'e', '\'', 233}, // é 401 {'e', '^', 234}, // ê 402 {'e', '"', 235}, // ë 403 {'i', '`', 236}, // ì 404 {'i', '\'', 237}, // í 405 {'i', '^', 238}, // î 406 {'i', '"', 239}, // ï 407 {'d', '-', 240}, // ð 408 {'n', '~', 241}, // ñ 409 {'o', '`', 242}, // ò 410 {'o', '\'', 243}, // ó 411 {'o', '^', 244}, // ô 412 {'o', '~', 245}, // õ 413 {'o', '"', 246}, // ö 414 {':', '-', 247}, // ÷ - division symbol in ISO 8859-1 415 {'o', 'e', 247}, // ÷ - oe in ISO 8859-15 416 {'o', '/', 248}, // ø 417 {'u', '`', 249}, // ù 418 {'u', '\'', 250}, // ú 419 {'u', '^', 251}, // û 420 {'u', '"', 252}, // ü 421 {'y', '\'', 253}, // ý 422 {'i', 'p', 254}, // þ 423 {'y', '"', 255}, // x XX 424 {NUL, NUL, NUL} 425 }; 426 # else // OLD_DIGRAPHS 427 428 /* 429 * digraphs for Unicode from RFC1345 430 * (also work for ISO-8859-1 aka latin1) 431 */ 432 { 433 {'N', 'U', 0x0a}, // LF for NUL 434 {'S', 'H', 0x01}, 435 {'S', 'X', 0x02}, 436 {'E', 'X', 0x03}, 437 {'E', 'T', 0x04}, 438 {'E', 'Q', 0x05}, 439 {'A', 'K', 0x06}, 440 {'B', 'L', 0x07}, 441 {'B', 'S', 0x08}, 442 {'H', 'T', 0x09}, 443 {'L', 'F', 0x0a}, 444 {'V', 'T', 0x0b}, 445 {'F', 'F', 0x0c}, 446 {'C', 'R', 0x0d}, 447 {'S', 'O', 0x0e}, 448 {'S', 'I', 0x0f}, 449 {'D', 'L', 0x10}, 450 {'D', '1', 0x11}, 451 {'D', '2', 0x12}, 452 {'D', '3', 0x13}, 453 {'D', '4', 0x14}, 454 {'N', 'K', 0x15}, 455 {'S', 'Y', 0x16}, 456 {'E', 'B', 0x17}, 457 {'C', 'N', 0x18}, 458 {'E', 'M', 0x19}, 459 {'S', 'B', 0x1a}, 460 {'E', 'C', 0x1b}, 461 {'F', 'S', 0x1c}, 462 {'G', 'S', 0x1d}, 463 {'R', 'S', 0x1e}, 464 {'U', 'S', 0x1f}, 465 {'S', 'P', 0x20}, 466 {'N', 'b', 0x23}, 467 {'D', 'O', 0x24}, 468 {'A', 't', 0x40}, 469 {'<', '(', 0x5b}, 470 {'/', '/', 0x5c}, 471 {')', '>', 0x5d}, 472 {'\'', '>', 0x5e}, 473 {'\'', '!', 0x60}, 474 {'(', '!', 0x7b}, 475 {'!', '!', 0x7c}, 476 {'!', ')', 0x7d}, 477 {'\'', '?', 0x7e}, 478 {'D', 'T', 0x7f}, 479 {'P', 'A', 0x80}, 480 {'H', 'O', 0x81}, 481 {'B', 'H', 0x82}, 482 {'N', 'H', 0x83}, 483 {'I', 'N', 0x84}, 484 {'N', 'L', 0x85}, 485 {'S', 'A', 0x86}, 486 {'E', 'S', 0x87}, 487 {'H', 'S', 0x88}, 488 {'H', 'J', 0x89}, 489 {'V', 'S', 0x8a}, 490 {'P', 'D', 0x8b}, 491 {'P', 'U', 0x8c}, 492 {'R', 'I', 0x8d}, 493 {'S', '2', 0x8e}, 494 {'S', '3', 0x8f}, 495 {'D', 'C', 0x90}, 496 {'P', '1', 0x91}, 497 {'P', '2', 0x92}, 498 {'T', 'S', 0x93}, 499 {'C', 'C', 0x94}, 500 {'M', 'W', 0x95}, 501 {'S', 'G', 0x96}, 502 {'E', 'G', 0x97}, 503 {'S', 'S', 0x98}, 504 {'G', 'C', 0x99}, 505 {'S', 'C', 0x9a}, 506 {'C', 'I', 0x9b}, 507 {'S', 'T', 0x9c}, 508 {'O', 'C', 0x9d}, 509 {'P', 'M', 0x9e}, 510 {'A', 'C', 0x9f}, 511 {'N', 'S', 0xa0}, 512 #define DG_START_LATIN 0xa1 513 {'!', 'I', 0xa1}, 514 {'~', '!', 0xa1}, // ¡ Vim 5.x compatible 515 {'C', 't', 0xa2}, 516 {'c', '|', 0xa2}, // ¢ Vim 5.x compatible 517 {'P', 'd', 0xa3}, 518 {'$', '$', 0xa3}, // £ Vim 5.x compatible 519 {'C', 'u', 0xa4}, 520 {'o', 'x', 0xa4}, // ¤ Vim 5.x compatible 521 {'Y', 'e', 0xa5}, 522 {'Y', '-', 0xa5}, // ¥ Vim 5.x compatible 523 {'B', 'B', 0xa6}, 524 {'|', '|', 0xa6}, // ¦ Vim 5.x compatible 525 {'S', 'E', 0xa7}, 526 {'\'', ':', 0xa8}, 527 {'C', 'o', 0xa9}, 528 {'c', 'O', 0xa9}, // © Vim 5.x compatible 529 {'-', 'a', 0xaa}, 530 {'<', '<', 0xab}, 531 {'N', 'O', 0xac}, 532 {'-', ',', 0xac}, // ¬ Vim 5.x compatible 533 {'-', '-', 0xad}, 534 {'R', 'g', 0xae}, 535 {'\'', 'm', 0xaf}, 536 {'-', '=', 0xaf}, // ¯ Vim 5.x compatible 537 {'D', 'G', 0xb0}, 538 {'~', 'o', 0xb0}, // ° Vim 5.x compatible 539 {'+', '-', 0xb1}, 540 {'2', 'S', 0xb2}, 541 {'2', '2', 0xb2}, // ² Vim 5.x compatible 542 {'3', 'S', 0xb3}, 543 {'3', '3', 0xb3}, // ³ Vim 5.x compatible 544 {'\'', '\'', 0xb4}, 545 {'M', 'y', 0xb5}, 546 {'P', 'I', 0xb6}, 547 {'p', 'p', 0xb6}, // ¶ Vim 5.x compatible 548 {'.', 'M', 0xb7}, 549 {'~', '.', 0xb7}, // · Vim 5.x compatible 550 {'\'', ',', 0xb8}, 551 {'1', 'S', 0xb9}, 552 {'1', '1', 0xb9}, // ¹ Vim 5.x compatible 553 {'-', 'o', 0xba}, 554 {'>', '>', 0xbb}, 555 {'1', '4', 0xbc}, 556 {'1', '2', 0xbd}, 557 {'3', '4', 0xbe}, 558 {'?', 'I', 0xbf}, 559 {'~', '?', 0xbf}, // ¿ Vim 5.x compatible 560 {'A', '!', 0xc0}, 561 {'A', '`', 0xc0}, // À Vim 5.x compatible 562 {'A', '\'', 0xc1}, 563 {'A', '>', 0xc2}, 564 {'A', '^', 0xc2}, // Â Vim 5.x compatible 565 {'A', '?', 0xc3}, 566 {'A', '~', 0xc3}, // Ã Vim 5.x compatible 567 {'A', ':', 0xc4}, 568 {'A', '"', 0xc4}, // Ä Vim 5.x compatible 569 {'A', 'A', 0xc5}, 570 {'A', '@', 0xc5}, // Å Vim 5.x compatible 571 {'A', 'E', 0xc6}, 572 {'C', ',', 0xc7}, 573 {'E', '!', 0xc8}, 574 {'E', '`', 0xc8}, // È Vim 5.x compatible 575 {'E', '\'', 0xc9}, 576 {'E', '>', 0xca}, 577 {'E', '^', 0xca}, // Ê Vim 5.x compatible 578 {'E', ':', 0xcb}, 579 {'E', '"', 0xcb}, // Ë Vim 5.x compatible 580 {'I', '!', 0xcc}, 581 {'I', '`', 0xcc}, // Ì Vim 5.x compatible 582 {'I', '\'', 0xcd}, 583 {'I', '>', 0xce}, 584 {'I', '^', 0xce}, // Î Vim 5.x compatible 585 {'I', ':', 0xcf}, 586 {'I', '"', 0xcf}, // Ï Vim 5.x compatible 587 {'D', '-', 0xd0}, 588 {'N', '?', 0xd1}, 589 {'N', '~', 0xd1}, // Ñ Vim 5.x compatible 590 {'O', '!', 0xd2}, 591 {'O', '`', 0xd2}, // Ò Vim 5.x compatible 592 {'O', '\'', 0xd3}, 593 {'O', '>', 0xd4}, 594 {'O', '^', 0xd4}, // Ô Vim 5.x compatible 595 {'O', '?', 0xd5}, 596 {'O', '~', 0xd5}, // Õ Vim 5.x compatible 597 {'O', ':', 0xd6}, 598 {'*', 'X', 0xd7}, 599 {'/', '\\', 0xd7}, // × Vim 5.x compatible 600 {'O', '/', 0xd8}, 601 {'U', '!', 0xd9}, 602 {'U', '`', 0xd9}, // Ù Vim 5.x compatible 603 {'U', '\'', 0xda}, 604 {'U', '>', 0xdb}, 605 {'U', '^', 0xdb}, // Û Vim 5.x compatible 606 {'U', ':', 0xdc}, 607 {'Y', '\'', 0xdd}, 608 {'T', 'H', 0xde}, 609 {'I', 'p', 0xde}, // Þ Vim 5.x compatible 610 {'s', 's', 0xdf}, 611 {'a', '!', 0xe0}, 612 {'a', '`', 0xe0}, // à Vim 5.x compatible 613 {'a', '\'', 0xe1}, 614 {'a', '>', 0xe2}, 615 {'a', '^', 0xe2}, // â Vim 5.x compatible 616 {'a', '?', 0xe3}, 617 {'a', '~', 0xe3}, // ã Vim 5.x compatible 618 {'a', ':', 0xe4}, 619 {'a', '"', 0xe4}, // ä Vim 5.x compatible 620 {'a', 'a', 0xe5}, 621 {'a', '@', 0xe5}, // å Vim 5.x compatible 622 {'a', 'e', 0xe6}, 623 {'c', ',', 0xe7}, 624 {'e', '!', 0xe8}, 625 {'e', '`', 0xe8}, // è Vim 5.x compatible 626 {'e', '\'', 0xe9}, 627 {'e', '>', 0xea}, 628 {'e', '^', 0xea}, // ê Vim 5.x compatible 629 {'e', ':', 0xeb}, 630 {'e', '"', 0xeb}, // ë Vim 5.x compatible 631 {'i', '!', 0xec}, 632 {'i', '`', 0xec}, // ì Vim 5.x compatible 633 {'i', '\'', 0xed}, 634 {'i', '>', 0xee}, 635 {'i', '^', 0xee}, // î Vim 5.x compatible 636 {'i', ':', 0xef}, 637 {'d', '-', 0xf0}, 638 {'n', '?', 0xf1}, 639 {'n', '~', 0xf1}, // ñ Vim 5.x compatible 640 {'o', '!', 0xf2}, 641 {'o', '`', 0xf2}, // ò Vim 5.x compatible 642 {'o', '\'', 0xf3}, 643 {'o', '>', 0xf4}, 644 {'o', '^', 0xf4}, // ô Vim 5.x compatible 645 {'o', '?', 0xf5}, 646 {'o', '~', 0xf5}, // õ Vim 5.x compatible 647 {'o', ':', 0xf6}, 648 {'-', ':', 0xf7}, 649 {'o', '/', 0xf8}, 650 {'u', '!', 0xf9}, 651 {'u', '`', 0xf9}, // ù Vim 5.x compatible 652 {'u', '\'', 0xfa}, 653 {'u', '>', 0xfb}, 654 {'u', '^', 0xfb}, // û Vim 5.x compatible 655 {'u', ':', 0xfc}, 656 {'y', '\'', 0xfd}, 657 {'t', 'h', 0xfe}, 658 {'y', ':', 0xff}, 659 {'y', '"', 0xff}, // x XX Vim 5.x compatible 660 661 # define USE_UNICODE_DIGRAPHS 662 663 {'A', '-', 0x0100}, 664 {'a', '-', 0x0101}, 665 {'A', '(', 0x0102}, 666 {'a', '(', 0x0103}, 667 {'A', ';', 0x0104}, 668 {'a', ';', 0x0105}, 669 {'C', '\'', 0x0106}, 670 {'c', '\'', 0x0107}, 671 {'C', '>', 0x0108}, 672 {'c', '>', 0x0109}, 673 {'C', '.', 0x010a}, 674 {'c', '.', 0x010b}, 675 {'C', '<', 0x010c}, 676 {'c', '<', 0x010d}, 677 {'D', '<', 0x010e}, 678 {'d', '<', 0x010f}, 679 {'D', '/', 0x0110}, 680 {'d', '/', 0x0111}, 681 {'E', '-', 0x0112}, 682 {'e', '-', 0x0113}, 683 {'E', '(', 0x0114}, 684 {'e', '(', 0x0115}, 685 {'E', '.', 0x0116}, 686 {'e', '.', 0x0117}, 687 {'E', ';', 0x0118}, 688 {'e', ';', 0x0119}, 689 {'E', '<', 0x011a}, 690 {'e', '<', 0x011b}, 691 {'G', '>', 0x011c}, 692 {'g', '>', 0x011d}, 693 {'G', '(', 0x011e}, 694 {'g', '(', 0x011f}, 695 {'G', '.', 0x0120}, 696 {'g', '.', 0x0121}, 697 {'G', ',', 0x0122}, 698 {'g', ',', 0x0123}, 699 {'H', '>', 0x0124}, 700 {'h', '>', 0x0125}, 701 {'H', '/', 0x0126}, 702 {'h', '/', 0x0127}, 703 {'I', '?', 0x0128}, 704 {'i', '?', 0x0129}, 705 {'I', '-', 0x012a}, 706 {'i', '-', 0x012b}, 707 {'I', '(', 0x012c}, 708 {'i', '(', 0x012d}, 709 {'I', ';', 0x012e}, 710 {'i', ';', 0x012f}, 711 {'I', '.', 0x0130}, 712 {'i', '.', 0x0131}, 713 {'I', 'J', 0x0132}, 714 {'i', 'j', 0x0133}, 715 {'J', '>', 0x0134}, 716 {'j', '>', 0x0135}, 717 {'K', ',', 0x0136}, 718 {'k', ',', 0x0137}, 719 {'k', 'k', 0x0138}, 720 {'L', '\'', 0x0139}, 721 {'l', '\'', 0x013a}, 722 {'L', ',', 0x013b}, 723 {'l', ',', 0x013c}, 724 {'L', '<', 0x013d}, 725 {'l', '<', 0x013e}, 726 {'L', '.', 0x013f}, 727 {'l', '.', 0x0140}, 728 {'L', '/', 0x0141}, 729 {'l', '/', 0x0142}, 730 {'N', '\'', 0x0143}, 731 {'n', '\'', 0x0144}, 732 {'N', ',', 0x0145}, 733 {'n', ',', 0x0146}, 734 {'N', '<', 0x0147}, 735 {'n', '<', 0x0148}, 736 {'\'', 'n', 0x0149}, 737 {'N', 'G', 0x014a}, 738 {'n', 'g', 0x014b}, 739 {'O', '-', 0x014c}, 740 {'o', '-', 0x014d}, 741 {'O', '(', 0x014e}, 742 {'o', '(', 0x014f}, 743 {'O', '"', 0x0150}, 744 {'o', '"', 0x0151}, 745 {'O', 'E', 0x0152}, 746 {'o', 'e', 0x0153}, 747 {'R', '\'', 0x0154}, 748 {'r', '\'', 0x0155}, 749 {'R', ',', 0x0156}, 750 {'r', ',', 0x0157}, 751 {'R', '<', 0x0158}, 752 {'r', '<', 0x0159}, 753 {'S', '\'', 0x015a}, 754 {'s', '\'', 0x015b}, 755 {'S', '>', 0x015c}, 756 {'s', '>', 0x015d}, 757 {'S', ',', 0x015e}, 758 {'s', ',', 0x015f}, 759 {'S', '<', 0x0160}, 760 {'s', '<', 0x0161}, 761 {'T', ',', 0x0162}, 762 {'t', ',', 0x0163}, 763 {'T', '<', 0x0164}, 764 {'t', '<', 0x0165}, 765 {'T', '/', 0x0166}, 766 {'t', '/', 0x0167}, 767 {'U', '?', 0x0168}, 768 {'u', '?', 0x0169}, 769 {'U', '-', 0x016a}, 770 {'u', '-', 0x016b}, 771 {'U', '(', 0x016c}, 772 {'u', '(', 0x016d}, 773 {'U', '0', 0x016e}, 774 {'u', '0', 0x016f}, 775 {'U', '"', 0x0170}, 776 {'u', '"', 0x0171}, 777 {'U', ';', 0x0172}, 778 {'u', ';', 0x0173}, 779 {'W', '>', 0x0174}, 780 {'w', '>', 0x0175}, 781 {'Y', '>', 0x0176}, 782 {'y', '>', 0x0177}, 783 {'Y', ':', 0x0178}, 784 {'Z', '\'', 0x0179}, 785 {'z', '\'', 0x017a}, 786 {'Z', '.', 0x017b}, 787 {'z', '.', 0x017c}, 788 {'Z', '<', 0x017d}, 789 {'z', '<', 0x017e}, 790 {'O', '9', 0x01a0}, 791 {'o', '9', 0x01a1}, 792 {'O', 'I', 0x01a2}, 793 {'o', 'i', 0x01a3}, 794 {'y', 'r', 0x01a6}, 795 {'U', '9', 0x01af}, 796 {'u', '9', 0x01b0}, 797 {'Z', '/', 0x01b5}, 798 {'z', '/', 0x01b6}, 799 {'E', 'D', 0x01b7}, 800 {'A', '<', 0x01cd}, 801 {'a', '<', 0x01ce}, 802 {'I', '<', 0x01cf}, 803 {'i', '<', 0x01d0}, 804 {'O', '<', 0x01d1}, 805 {'o', '<', 0x01d2}, 806 {'U', '<', 0x01d3}, 807 {'u', '<', 0x01d4}, 808 {'A', '1', 0x01de}, 809 {'a', '1', 0x01df}, 810 {'A', '7', 0x01e0}, 811 {'a', '7', 0x01e1}, 812 {'A', '3', 0x01e2}, 813 {'a', '3', 0x01e3}, 814 {'G', '/', 0x01e4}, 815 {'g', '/', 0x01e5}, 816 {'G', '<', 0x01e6}, 817 {'g', '<', 0x01e7}, 818 {'K', '<', 0x01e8}, 819 {'k', '<', 0x01e9}, 820 {'O', ';', 0x01ea}, 821 {'o', ';', 0x01eb}, 822 {'O', '1', 0x01ec}, 823 {'o', '1', 0x01ed}, 824 {'E', 'Z', 0x01ee}, 825 {'e', 'z', 0x01ef}, 826 {'j', '<', 0x01f0}, 827 {'G', '\'', 0x01f4}, 828 {'g', '\'', 0x01f5}, 829 {';', 'S', 0x02bf}, 830 {'\'', '<', 0x02c7}, 831 {'\'', '(', 0x02d8}, 832 {'\'', '.', 0x02d9}, 833 {'\'', '0', 0x02da}, 834 {'\'', ';', 0x02db}, 835 {'\'', '"', 0x02dd}, 836 #define DG_START_GREEK 0x0386 837 {'A', '%', 0x0386}, 838 {'E', '%', 0x0388}, 839 {'Y', '%', 0x0389}, 840 {'I', '%', 0x038a}, 841 {'O', '%', 0x038c}, 842 {'U', '%', 0x038e}, 843 {'W', '%', 0x038f}, 844 {'i', '3', 0x0390}, 845 {'A', '*', 0x0391}, 846 {'B', '*', 0x0392}, 847 {'G', '*', 0x0393}, 848 {'D', '*', 0x0394}, 849 {'E', '*', 0x0395}, 850 {'Z', '*', 0x0396}, 851 {'Y', '*', 0x0397}, 852 {'H', '*', 0x0398}, 853 {'I', '*', 0x0399}, 854 {'K', '*', 0x039a}, 855 {'L', '*', 0x039b}, 856 {'M', '*', 0x039c}, 857 {'N', '*', 0x039d}, 858 {'C', '*', 0x039e}, 859 {'O', '*', 0x039f}, 860 {'P', '*', 0x03a0}, 861 {'R', '*', 0x03a1}, 862 {'S', '*', 0x03a3}, 863 {'T', '*', 0x03a4}, 864 {'U', '*', 0x03a5}, 865 {'F', '*', 0x03a6}, 866 {'X', '*', 0x03a7}, 867 {'Q', '*', 0x03a8}, 868 {'W', '*', 0x03a9}, 869 {'J', '*', 0x03aa}, 870 {'V', '*', 0x03ab}, 871 {'a', '%', 0x03ac}, 872 {'e', '%', 0x03ad}, 873 {'y', '%', 0x03ae}, 874 {'i', '%', 0x03af}, 875 {'u', '3', 0x03b0}, 876 {'a', '*', 0x03b1}, 877 {'b', '*', 0x03b2}, 878 {'g', '*', 0x03b3}, 879 {'d', '*', 0x03b4}, 880 {'e', '*', 0x03b5}, 881 {'z', '*', 0x03b6}, 882 {'y', '*', 0x03b7}, 883 {'h', '*', 0x03b8}, 884 {'i', '*', 0x03b9}, 885 {'k', '*', 0x03ba}, 886 {'l', '*', 0x03bb}, 887 {'m', '*', 0x03bc}, 888 {'n', '*', 0x03bd}, 889 {'c', '*', 0x03be}, 890 {'o', '*', 0x03bf}, 891 {'p', '*', 0x03c0}, 892 {'r', '*', 0x03c1}, 893 {'*', 's', 0x03c2}, 894 {'s', '*', 0x03c3}, 895 {'t', '*', 0x03c4}, 896 {'u', '*', 0x03c5}, 897 {'f', '*', 0x03c6}, 898 {'x', '*', 0x03c7}, 899 {'q', '*', 0x03c8}, 900 {'w', '*', 0x03c9}, 901 {'j', '*', 0x03ca}, 902 {'v', '*', 0x03cb}, 903 {'o', '%', 0x03cc}, 904 {'u', '%', 0x03cd}, 905 {'w', '%', 0x03ce}, 906 {'\'', 'G', 0x03d8}, 907 {',', 'G', 0x03d9}, 908 {'T', '3', 0x03da}, 909 {'t', '3', 0x03db}, 910 {'M', '3', 0x03dc}, 911 {'m', '3', 0x03dd}, 912 {'K', '3', 0x03de}, 913 {'k', '3', 0x03df}, 914 {'P', '3', 0x03e0}, 915 {'p', '3', 0x03e1}, 916 {'\'', '%', 0x03f4}, 917 {'j', '3', 0x03f5}, 918 #define DG_START_CYRILLIC 0x0401 919 {'I', 'O', 0x0401}, 920 {'D', '%', 0x0402}, 921 {'G', '%', 0x0403}, 922 {'I', 'E', 0x0404}, 923 {'D', 'S', 0x0405}, 924 {'I', 'I', 0x0406}, 925 {'Y', 'I', 0x0407}, 926 {'J', '%', 0x0408}, 927 {'L', 'J', 0x0409}, 928 {'N', 'J', 0x040a}, 929 {'T', 's', 0x040b}, 930 {'K', 'J', 0x040c}, 931 {'V', '%', 0x040e}, 932 {'D', 'Z', 0x040f}, 933 {'A', '=', 0x0410}, 934 {'B', '=', 0x0411}, 935 {'V', '=', 0x0412}, 936 {'G', '=', 0x0413}, 937 {'D', '=', 0x0414}, 938 {'E', '=', 0x0415}, 939 {'Z', '%', 0x0416}, 940 {'Z', '=', 0x0417}, 941 {'I', '=', 0x0418}, 942 {'J', '=', 0x0419}, 943 {'K', '=', 0x041a}, 944 {'L', '=', 0x041b}, 945 {'M', '=', 0x041c}, 946 {'N', '=', 0x041d}, 947 {'O', '=', 0x041e}, 948 {'P', '=', 0x041f}, 949 {'R', '=', 0x0420}, 950 {'S', '=', 0x0421}, 951 {'T', '=', 0x0422}, 952 {'U', '=', 0x0423}, 953 {'F', '=', 0x0424}, 954 {'H', '=', 0x0425}, 955 {'C', '=', 0x0426}, 956 {'C', '%', 0x0427}, 957 {'S', '%', 0x0428}, 958 {'S', 'c', 0x0429}, 959 {'=', '"', 0x042a}, 960 {'Y', '=', 0x042b}, 961 {'%', '"', 0x042c}, 962 {'J', 'E', 0x042d}, 963 {'J', 'U', 0x042e}, 964 {'J', 'A', 0x042f}, 965 {'a', '=', 0x0430}, 966 {'b', '=', 0x0431}, 967 {'v', '=', 0x0432}, 968 {'g', '=', 0x0433}, 969 {'d', '=', 0x0434}, 970 {'e', '=', 0x0435}, 971 {'z', '%', 0x0436}, 972 {'z', '=', 0x0437}, 973 {'i', '=', 0x0438}, 974 {'j', '=', 0x0439}, 975 {'k', '=', 0x043a}, 976 {'l', '=', 0x043b}, 977 {'m', '=', 0x043c}, 978 {'n', '=', 0x043d}, 979 {'o', '=', 0x043e}, 980 {'p', '=', 0x043f}, 981 {'r', '=', 0x0440}, 982 {'s', '=', 0x0441}, 983 {'t', '=', 0x0442}, 984 {'u', '=', 0x0443}, 985 {'f', '=', 0x0444}, 986 {'h', '=', 0x0445}, 987 {'c', '=', 0x0446}, 988 {'c', '%', 0x0447}, 989 {'s', '%', 0x0448}, 990 {'s', 'c', 0x0449}, 991 {'=', '\'', 0x044a}, 992 {'y', '=', 0x044b}, 993 {'%', '\'', 0x044c}, 994 {'j', 'e', 0x044d}, 995 {'j', 'u', 0x044e}, 996 {'j', 'a', 0x044f}, 997 {'i', 'o', 0x0451}, 998 {'d', '%', 0x0452}, 999 {'g', '%', 0x0453}, 1000 {'i', 'e', 0x0454}, 1001 {'d', 's', 0x0455}, 1002 {'i', 'i', 0x0456}, 1003 {'y', 'i', 0x0457}, 1004 {'j', '%', 0x0458}, 1005 {'l', 'j', 0x0459}, 1006 {'n', 'j', 0x045a}, 1007 {'t', 's', 0x045b}, 1008 {'k', 'j', 0x045c}, 1009 {'v', '%', 0x045e}, 1010 {'d', 'z', 0x045f}, 1011 {'Y', '3', 0x0462}, 1012 {'y', '3', 0x0463}, 1013 {'O', '3', 0x046a}, 1014 {'o', '3', 0x046b}, 1015 {'F', '3', 0x0472}, 1016 {'f', '3', 0x0473}, 1017 {'V', '3', 0x0474}, 1018 {'v', '3', 0x0475}, 1019 {'C', '3', 0x0480}, 1020 {'c', '3', 0x0481}, 1021 {'G', '3', 0x0490}, 1022 {'g', '3', 0x0491}, 1023 #define DG_START_HEBREW 0x05d0 1024 {'A', '+', 0x05d0}, 1025 {'B', '+', 0x05d1}, 1026 {'G', '+', 0x05d2}, 1027 {'D', '+', 0x05d3}, 1028 {'H', '+', 0x05d4}, 1029 {'W', '+', 0x05d5}, 1030 {'Z', '+', 0x05d6}, 1031 {'X', '+', 0x05d7}, 1032 {'T', 'j', 0x05d8}, 1033 {'J', '+', 0x05d9}, 1034 {'K', '%', 0x05da}, 1035 {'K', '+', 0x05db}, 1036 {'L', '+', 0x05dc}, 1037 {'M', '%', 0x05dd}, 1038 {'M', '+', 0x05de}, 1039 {'N', '%', 0x05df}, 1040 {'N', '+', 0x05e0}, 1041 {'S', '+', 0x05e1}, 1042 {'E', '+', 0x05e2}, 1043 {'P', '%', 0x05e3}, 1044 {'P', '+', 0x05e4}, 1045 {'Z', 'j', 0x05e5}, 1046 {'Z', 'J', 0x05e6}, 1047 {'Q', '+', 0x05e7}, 1048 {'R', '+', 0x05e8}, 1049 {'S', 'h', 0x05e9}, 1050 {'T', '+', 0x05ea}, 1051 #define DG_START_ARABIC 0x060c 1052 {',', '+', 0x060c}, 1053 {';', '+', 0x061b}, 1054 {'?', '+', 0x061f}, 1055 {'H', '\'', 0x0621}, 1056 {'a', 'M', 0x0622}, 1057 {'a', 'H', 0x0623}, 1058 {'w', 'H', 0x0624}, 1059 {'a', 'h', 0x0625}, 1060 {'y', 'H', 0x0626}, 1061 {'a', '+', 0x0627}, 1062 {'b', '+', 0x0628}, 1063 {'t', 'm', 0x0629}, 1064 {'t', '+', 0x062a}, 1065 {'t', 'k', 0x062b}, 1066 {'g', '+', 0x062c}, 1067 {'h', 'k', 0x062d}, 1068 {'x', '+', 0x062e}, 1069 {'d', '+', 0x062f}, 1070 {'d', 'k', 0x0630}, 1071 {'r', '+', 0x0631}, 1072 {'z', '+', 0x0632}, 1073 {'s', '+', 0x0633}, 1074 {'s', 'n', 0x0634}, 1075 {'c', '+', 0x0635}, 1076 {'d', 'd', 0x0636}, 1077 {'t', 'j', 0x0637}, 1078 {'z', 'H', 0x0638}, 1079 {'e', '+', 0x0639}, 1080 {'i', '+', 0x063a}, 1081 {'+', '+', 0x0640}, 1082 {'f', '+', 0x0641}, 1083 {'q', '+', 0x0642}, 1084 {'k', '+', 0x0643}, 1085 {'l', '+', 0x0644}, 1086 {'m', '+', 0x0645}, 1087 {'n', '+', 0x0646}, 1088 {'h', '+', 0x0647}, 1089 {'w', '+', 0x0648}, 1090 {'j', '+', 0x0649}, 1091 {'y', '+', 0x064a}, 1092 {':', '+', 0x064b}, 1093 {'"', '+', 0x064c}, 1094 {'=', '+', 0x064d}, 1095 {'/', '+', 0x064e}, 1096 {'\'', '+', 0x064f}, 1097 {'1', '+', 0x0650}, 1098 {'3', '+', 0x0651}, 1099 {'0', '+', 0x0652}, 1100 {'a', 'S', 0x0670}, 1101 {'p', '+', 0x067e}, 1102 {'v', '+', 0x06a4}, 1103 {'g', 'f', 0x06af}, 1104 {'0', 'a', 0x06f0}, 1105 {'1', 'a', 0x06f1}, 1106 {'2', 'a', 0x06f2}, 1107 {'3', 'a', 0x06f3}, 1108 {'4', 'a', 0x06f4}, 1109 {'5', 'a', 0x06f5}, 1110 {'6', 'a', 0x06f6}, 1111 {'7', 'a', 0x06f7}, 1112 {'8', 'a', 0x06f8}, 1113 {'9', 'a', 0x06f9}, 1114 #define DG_START_LATIN_EXTENDED 0x1e02 1115 {'B', '.', 0x1e02}, 1116 {'b', '.', 0x1e03}, 1117 {'B', '_', 0x1e06}, 1118 {'b', '_', 0x1e07}, 1119 {'D', '.', 0x1e0a}, 1120 {'d', '.', 0x1e0b}, 1121 {'D', '_', 0x1e0e}, 1122 {'d', '_', 0x1e0f}, 1123 {'D', ',', 0x1e10}, 1124 {'d', ',', 0x1e11}, 1125 {'F', '.', 0x1e1e}, 1126 {'f', '.', 0x1e1f}, 1127 {'G', '-', 0x1e20}, 1128 {'g', '-', 0x1e21}, 1129 {'H', '.', 0x1e22}, 1130 {'h', '.', 0x1e23}, 1131 {'H', ':', 0x1e26}, 1132 {'h', ':', 0x1e27}, 1133 {'H', ',', 0x1e28}, 1134 {'h', ',', 0x1e29}, 1135 {'K', '\'', 0x1e30}, 1136 {'k', '\'', 0x1e31}, 1137 {'K', '_', 0x1e34}, 1138 {'k', '_', 0x1e35}, 1139 {'L', '_', 0x1e3a}, 1140 {'l', '_', 0x1e3b}, 1141 {'M', '\'', 0x1e3e}, 1142 {'m', '\'', 0x1e3f}, 1143 {'M', '.', 0x1e40}, 1144 {'m', '.', 0x1e41}, 1145 {'N', '.', 0x1e44}, 1146 {'n', '.', 0x1e45}, 1147 {'N', '_', 0x1e48}, 1148 {'n', '_', 0x1e49}, 1149 {'P', '\'', 0x1e54}, 1150 {'p', '\'', 0x1e55}, 1151 {'P', '.', 0x1e56}, 1152 {'p', '.', 0x1e57}, 1153 {'R', '.', 0x1e58}, 1154 {'r', '.', 0x1e59}, 1155 {'R', '_', 0x1e5e}, 1156 {'r', '_', 0x1e5f}, 1157 {'S', '.', 0x1e60}, 1158 {'s', '.', 0x1e61}, 1159 {'T', '.', 0x1e6a}, 1160 {'t', '.', 0x1e6b}, 1161 {'T', '_', 0x1e6e}, 1162 {'t', '_', 0x1e6f}, 1163 {'V', '?', 0x1e7c}, 1164 {'v', '?', 0x1e7d}, 1165 {'W', '!', 0x1e80}, 1166 {'W', '`', 0x1e80}, // extra alternative, easier to remember 1167 {'w', '!', 0x1e81}, 1168 {'w', '`', 0x1e81}, // extra alternative, easier to remember 1169 {'W', '\'', 0x1e82}, 1170 {'w', '\'', 0x1e83}, 1171 {'W', ':', 0x1e84}, 1172 {'w', ':', 0x1e85}, 1173 {'W', '.', 0x1e86}, 1174 {'w', '.', 0x1e87}, 1175 {'X', '.', 0x1e8a}, 1176 {'x', '.', 0x1e8b}, 1177 {'X', ':', 0x1e8c}, 1178 {'x', ':', 0x1e8d}, 1179 {'Y', '.', 0x1e8e}, 1180 {'y', '.', 0x1e8f}, 1181 {'Z', '>', 0x1e90}, 1182 {'z', '>', 0x1e91}, 1183 {'Z', '_', 0x1e94}, 1184 {'z', '_', 0x1e95}, 1185 {'h', '_', 0x1e96}, 1186 {'t', ':', 0x1e97}, 1187 {'w', '0', 0x1e98}, 1188 {'y', '0', 0x1e99}, 1189 {'A', '2', 0x1ea2}, 1190 {'a', '2', 0x1ea3}, 1191 {'E', '2', 0x1eba}, 1192 {'e', '2', 0x1ebb}, 1193 {'E', '?', 0x1ebc}, 1194 {'e', '?', 0x1ebd}, 1195 {'I', '2', 0x1ec8}, 1196 {'i', '2', 0x1ec9}, 1197 {'O', '2', 0x1ece}, 1198 {'o', '2', 0x1ecf}, 1199 {'U', '2', 0x1ee6}, 1200 {'u', '2', 0x1ee7}, 1201 {'Y', '!', 0x1ef2}, 1202 {'Y', '`', 0x1ef2}, // extra alternative, easier to remember 1203 {'y', '!', 0x1ef3}, 1204 {'y', '`', 0x1ef3}, // extra alternative, easier to remember 1205 {'Y', '2', 0x1ef6}, 1206 {'y', '2', 0x1ef7}, 1207 {'Y', '?', 0x1ef8}, 1208 {'y', '?', 0x1ef9}, 1209 #define DG_START_GREEK_EXTENDED 0x1f00 1210 {';', '\'', 0x1f00}, 1211 {',', '\'', 0x1f01}, 1212 {';', '!', 0x1f02}, 1213 {',', '!', 0x1f03}, 1214 {'?', ';', 0x1f04}, 1215 {'?', ',', 0x1f05}, 1216 {'!', ':', 0x1f06}, 1217 {'?', ':', 0x1f07}, 1218 #define DG_START_PUNCTUATION 0x2002 1219 {'1', 'N', 0x2002}, 1220 {'1', 'M', 0x2003}, 1221 {'3', 'M', 0x2004}, 1222 {'4', 'M', 0x2005}, 1223 {'6', 'M', 0x2006}, 1224 {'1', 'T', 0x2009}, 1225 {'1', 'H', 0x200a}, 1226 {'-', '1', 0x2010}, 1227 {'-', 'N', 0x2013}, 1228 {'-', 'M', 0x2014}, 1229 {'-', '3', 0x2015}, 1230 {'!', '2', 0x2016}, 1231 {'=', '2', 0x2017}, 1232 {'\'', '6', 0x2018}, 1233 {'\'', '9', 0x2019}, 1234 {'.', '9', 0x201a}, 1235 {'9', '\'', 0x201b}, 1236 {'"', '6', 0x201c}, 1237 {'"', '9', 0x201d}, 1238 {':', '9', 0x201e}, 1239 {'9', '"', 0x201f}, 1240 {'/', '-', 0x2020}, 1241 {'/', '=', 0x2021}, 1242 {'.', '.', 0x2025}, 1243 {',', '.', 0x2026}, 1244 {'%', '0', 0x2030}, 1245 {'1', '\'', 0x2032}, 1246 {'2', '\'', 0x2033}, 1247 {'3', '\'', 0x2034}, 1248 {'1', '"', 0x2035}, 1249 {'2', '"', 0x2036}, 1250 {'3', '"', 0x2037}, 1251 {'C', 'a', 0x2038}, 1252 {'<', '1', 0x2039}, 1253 {'>', '1', 0x203a}, 1254 {':', 'X', 0x203b}, 1255 {'\'', '-', 0x203e}, 1256 {'/', 'f', 0x2044}, 1257 #define DG_START_SUB_SUPER 0x2070 1258 {'0', 'S', 0x2070}, 1259 {'4', 'S', 0x2074}, 1260 {'5', 'S', 0x2075}, 1261 {'6', 'S', 0x2076}, 1262 {'7', 'S', 0x2077}, 1263 {'8', 'S', 0x2078}, 1264 {'9', 'S', 0x2079}, 1265 {'+', 'S', 0x207a}, 1266 {'-', 'S', 0x207b}, 1267 {'=', 'S', 0x207c}, 1268 {'(', 'S', 0x207d}, 1269 {')', 'S', 0x207e}, 1270 {'n', 'S', 0x207f}, 1271 {'0', 's', 0x2080}, 1272 {'1', 's', 0x2081}, 1273 {'2', 's', 0x2082}, 1274 {'3', 's', 0x2083}, 1275 {'4', 's', 0x2084}, 1276 {'5', 's', 0x2085}, 1277 {'6', 's', 0x2086}, 1278 {'7', 's', 0x2087}, 1279 {'8', 's', 0x2088}, 1280 {'9', 's', 0x2089}, 1281 {'+', 's', 0x208a}, 1282 {'-', 's', 0x208b}, 1283 {'=', 's', 0x208c}, 1284 {'(', 's', 0x208d}, 1285 {')', 's', 0x208e}, 1286 #define DG_START_CURRENCY 0x20a4 1287 {'L', 'i', 0x20a4}, 1288 {'P', 't', 0x20a7}, 1289 {'W', '=', 0x20a9}, 1290 {'=', 'e', 0x20ac}, // euro 1291 {'E', 'u', 0x20ac}, // euro 1292 {'=', 'R', 0x20bd}, // rouble 1293 {'=', 'P', 0x20bd}, // rouble 1294 #define DG_START_OTHER1 0x2103 1295 {'o', 'C', 0x2103}, 1296 {'c', 'o', 0x2105}, 1297 {'o', 'F', 0x2109}, 1298 {'N', '0', 0x2116}, 1299 {'P', 'O', 0x2117}, 1300 {'R', 'x', 0x211e}, 1301 {'S', 'M', 0x2120}, 1302 {'T', 'M', 0x2122}, 1303 {'O', 'm', 0x2126}, 1304 {'A', 'O', 0x212b}, 1305 {'1', '3', 0x2153}, 1306 {'2', '3', 0x2154}, 1307 {'1', '5', 0x2155}, 1308 {'2', '5', 0x2156}, 1309 {'3', '5', 0x2157}, 1310 {'4', '5', 0x2158}, 1311 {'1', '6', 0x2159}, 1312 {'5', '6', 0x215a}, 1313 {'1', '8', 0x215b}, 1314 {'3', '8', 0x215c}, 1315 {'5', '8', 0x215d}, 1316 {'7', '8', 0x215e}, 1317 #define DG_START_ROMAN 0x2160 1318 {'1', 'R', 0x2160}, 1319 {'2', 'R', 0x2161}, 1320 {'3', 'R', 0x2162}, 1321 {'4', 'R', 0x2163}, 1322 {'5', 'R', 0x2164}, 1323 {'6', 'R', 0x2165}, 1324 {'7', 'R', 0x2166}, 1325 {'8', 'R', 0x2167}, 1326 {'9', 'R', 0x2168}, 1327 {'a', 'R', 0x2169}, 1328 {'b', 'R', 0x216a}, 1329 {'c', 'R', 0x216b}, 1330 {'1', 'r', 0x2170}, 1331 {'2', 'r', 0x2171}, 1332 {'3', 'r', 0x2172}, 1333 {'4', 'r', 0x2173}, 1334 {'5', 'r', 0x2174}, 1335 {'6', 'r', 0x2175}, 1336 {'7', 'r', 0x2176}, 1337 {'8', 'r', 0x2177}, 1338 {'9', 'r', 0x2178}, 1339 {'a', 'r', 0x2179}, 1340 {'b', 'r', 0x217a}, 1341 {'c', 'r', 0x217b}, 1342 #define DG_START_ARROWS 0x2190 1343 {'<', '-', 0x2190}, 1344 {'-', '!', 0x2191}, 1345 {'-', '>', 0x2192}, 1346 {'-', 'v', 0x2193}, 1347 {'<', '>', 0x2194}, 1348 {'U', 'D', 0x2195}, 1349 {'<', '=', 0x21d0}, 1350 {'=', '>', 0x21d2}, 1351 {'=', '=', 0x21d4}, 1352 #define DG_START_MATH 0x2200 1353 {'F', 'A', 0x2200}, 1354 {'d', 'P', 0x2202}, 1355 {'T', 'E', 0x2203}, 1356 {'/', '0', 0x2205}, 1357 {'D', 'E', 0x2206}, 1358 {'N', 'B', 0x2207}, 1359 {'(', '-', 0x2208}, 1360 {'-', ')', 0x220b}, 1361 {'*', 'P', 0x220f}, 1362 {'+', 'Z', 0x2211}, 1363 {'-', '2', 0x2212}, 1364 {'-', '+', 0x2213}, 1365 {'*', '-', 0x2217}, 1366 {'O', 'b', 0x2218}, 1367 {'S', 'b', 0x2219}, 1368 {'R', 'T', 0x221a}, 1369 {'0', '(', 0x221d}, 1370 {'0', '0', 0x221e}, 1371 {'-', 'L', 0x221f}, 1372 {'-', 'V', 0x2220}, 1373 {'P', 'P', 0x2225}, 1374 {'A', 'N', 0x2227}, 1375 {'O', 'R', 0x2228}, 1376 {'(', 'U', 0x2229}, 1377 {')', 'U', 0x222a}, 1378 {'I', 'n', 0x222b}, 1379 {'D', 'I', 0x222c}, 1380 {'I', 'o', 0x222e}, 1381 {'.', ':', 0x2234}, 1382 {':', '.', 0x2235}, 1383 {':', 'R', 0x2236}, 1384 {':', ':', 0x2237}, 1385 {'?', '1', 0x223c}, 1386 {'C', 'G', 0x223e}, 1387 {'?', '-', 0x2243}, 1388 {'?', '=', 0x2245}, 1389 {'?', '2', 0x2248}, 1390 {'=', '?', 0x224c}, 1391 {'H', 'I', 0x2253}, 1392 {'!', '=', 0x2260}, 1393 {'=', '3', 0x2261}, 1394 {'=', '<', 0x2264}, 1395 {'>', '=', 0x2265}, 1396 {'<', '*', 0x226a}, 1397 {'*', '>', 0x226b}, 1398 {'!', '<', 0x226e}, 1399 {'!', '>', 0x226f}, 1400 {'(', 'C', 0x2282}, 1401 {')', 'C', 0x2283}, 1402 {'(', '_', 0x2286}, 1403 {')', '_', 0x2287}, 1404 {'0', '.', 0x2299}, 1405 {'0', '2', 0x229a}, 1406 {'-', 'T', 0x22a5}, 1407 {'.', 'P', 0x22c5}, 1408 {':', '3', 0x22ee}, 1409 {'.', '3', 0x22ef}, 1410 #define DG_START_TECHNICAL 0x2302 1411 {'E', 'h', 0x2302}, 1412 {'<', '7', 0x2308}, 1413 {'>', '7', 0x2309}, 1414 {'7', '<', 0x230a}, 1415 {'7', '>', 0x230b}, 1416 {'N', 'I', 0x2310}, 1417 {'(', 'A', 0x2312}, 1418 {'T', 'R', 0x2315}, 1419 {'I', 'u', 0x2320}, 1420 {'I', 'l', 0x2321}, 1421 {'<', '/', 0x2329}, 1422 {'/', '>', 0x232a}, 1423 #define DG_START_OTHER2 0x2423 1424 {'V', 's', 0x2423}, 1425 {'1', 'h', 0x2440}, 1426 {'3', 'h', 0x2441}, 1427 {'2', 'h', 0x2442}, 1428 {'4', 'h', 0x2443}, 1429 {'1', 'j', 0x2446}, 1430 {'2', 'j', 0x2447}, 1431 {'3', 'j', 0x2448}, 1432 {'4', 'j', 0x2449}, 1433 {'1', '.', 0x2488}, 1434 {'2', '.', 0x2489}, 1435 {'3', '.', 0x248a}, 1436 {'4', '.', 0x248b}, 1437 {'5', '.', 0x248c}, 1438 {'6', '.', 0x248d}, 1439 {'7', '.', 0x248e}, 1440 {'8', '.', 0x248f}, 1441 {'9', '.', 0x2490}, 1442 #define DG_START_DRAWING 0x2500 1443 {'h', 'h', 0x2500}, 1444 {'H', 'H', 0x2501}, 1445 {'v', 'v', 0x2502}, 1446 {'V', 'V', 0x2503}, 1447 {'3', '-', 0x2504}, 1448 {'3', '_', 0x2505}, 1449 {'3', '!', 0x2506}, 1450 {'3', '/', 0x2507}, 1451 {'4', '-', 0x2508}, 1452 {'4', '_', 0x2509}, 1453 {'4', '!', 0x250a}, 1454 {'4', '/', 0x250b}, 1455 {'d', 'r', 0x250c}, 1456 {'d', 'R', 0x250d}, 1457 {'D', 'r', 0x250e}, 1458 {'D', 'R', 0x250f}, 1459 {'d', 'l', 0x2510}, 1460 {'d', 'L', 0x2511}, 1461 {'D', 'l', 0x2512}, 1462 {'L', 'D', 0x2513}, 1463 {'u', 'r', 0x2514}, 1464 {'u', 'R', 0x2515}, 1465 {'U', 'r', 0x2516}, 1466 {'U', 'R', 0x2517}, 1467 {'u', 'l', 0x2518}, 1468 {'u', 'L', 0x2519}, 1469 {'U', 'l', 0x251a}, 1470 {'U', 'L', 0x251b}, 1471 {'v', 'r', 0x251c}, 1472 {'v', 'R', 0x251d}, 1473 {'V', 'r', 0x2520}, 1474 {'V', 'R', 0x2523}, 1475 {'v', 'l', 0x2524}, 1476 {'v', 'L', 0x2525}, 1477 {'V', 'l', 0x2528}, 1478 {'V', 'L', 0x252b}, 1479 {'d', 'h', 0x252c}, 1480 {'d', 'H', 0x252f}, 1481 {'D', 'h', 0x2530}, 1482 {'D', 'H', 0x2533}, 1483 {'u', 'h', 0x2534}, 1484 {'u', 'H', 0x2537}, 1485 {'U', 'h', 0x2538}, 1486 {'U', 'H', 0x253b}, 1487 {'v', 'h', 0x253c}, 1488 {'v', 'H', 0x253f}, 1489 {'V', 'h', 0x2542}, 1490 {'V', 'H', 0x254b}, 1491 {'F', 'D', 0x2571}, 1492 {'B', 'D', 0x2572}, 1493 #define DG_START_BLOCK 0x2580 1494 {'T', 'B', 0x2580}, 1495 {'L', 'B', 0x2584}, 1496 {'F', 'B', 0x2588}, 1497 {'l', 'B', 0x258c}, 1498 {'R', 'B', 0x2590}, 1499 {'.', 'S', 0x2591}, 1500 {':', 'S', 0x2592}, 1501 {'?', 'S', 0x2593}, 1502 #define DG_START_SHAPES 0x25a0 1503 {'f', 'S', 0x25a0}, 1504 {'O', 'S', 0x25a1}, 1505 {'R', 'O', 0x25a2}, 1506 {'R', 'r', 0x25a3}, 1507 {'R', 'F', 0x25a4}, 1508 {'R', 'Y', 0x25a5}, 1509 {'R', 'H', 0x25a6}, 1510 {'R', 'Z', 0x25a7}, 1511 {'R', 'K', 0x25a8}, 1512 {'R', 'X', 0x25a9}, 1513 {'s', 'B', 0x25aa}, 1514 {'S', 'R', 0x25ac}, 1515 {'O', 'r', 0x25ad}, 1516 {'U', 'T', 0x25b2}, 1517 {'u', 'T', 0x25b3}, 1518 {'P', 'R', 0x25b6}, 1519 {'T', 'r', 0x25b7}, 1520 {'D', 't', 0x25bc}, 1521 {'d', 'T', 0x25bd}, 1522 {'P', 'L', 0x25c0}, 1523 {'T', 'l', 0x25c1}, 1524 {'D', 'b', 0x25c6}, 1525 {'D', 'w', 0x25c7}, 1526 {'L', 'Z', 0x25ca}, 1527 {'0', 'm', 0x25cb}, 1528 {'0', 'o', 0x25ce}, 1529 {'0', 'M', 0x25cf}, 1530 {'0', 'L', 0x25d0}, 1531 {'0', 'R', 0x25d1}, 1532 {'S', 'n', 0x25d8}, 1533 {'I', 'c', 0x25d9}, 1534 {'F', 'd', 0x25e2}, 1535 {'B', 'd', 0x25e3}, 1536 #define DG_START_SYMBOLS 0x2605 1537 {'*', '2', 0x2605}, 1538 {'*', '1', 0x2606}, 1539 {'<', 'H', 0x261c}, 1540 {'>', 'H', 0x261e}, 1541 {'0', 'u', 0x263a}, 1542 {'0', 'U', 0x263b}, 1543 {'S', 'U', 0x263c}, 1544 {'F', 'm', 0x2640}, 1545 {'M', 'l', 0x2642}, 1546 {'c', 'S', 0x2660}, 1547 {'c', 'H', 0x2661}, 1548 {'c', 'D', 0x2662}, 1549 {'c', 'C', 0x2663}, 1550 {'M', 'd', 0x2669}, 1551 {'M', '8', 0x266a}, 1552 {'M', '2', 0x266b}, 1553 {'M', 'b', 0x266d}, 1554 {'M', 'x', 0x266e}, 1555 {'M', 'X', 0x266f}, 1556 #define DG_START_DINGBATS 0x2713 1557 {'O', 'K', 0x2713}, 1558 {'X', 'X', 0x2717}, 1559 {'-', 'X', 0x2720}, 1560 #define DG_START_CJK_SYMBOLS 0x3000 1561 {'I', 'S', 0x3000}, 1562 {',', '_', 0x3001}, 1563 {'.', '_', 0x3002}, 1564 {'+', '"', 0x3003}, 1565 {'+', '_', 0x3004}, 1566 {'*', '_', 0x3005}, 1567 {';', '_', 0x3006}, 1568 {'0', '_', 0x3007}, 1569 {'<', '+', 0x300a}, 1570 {'>', '+', 0x300b}, 1571 {'<', '\'', 0x300c}, 1572 {'>', '\'', 0x300d}, 1573 {'<', '"', 0x300e}, 1574 {'>', '"', 0x300f}, 1575 {'(', '"', 0x3010}, 1576 {')', '"', 0x3011}, 1577 {'=', 'T', 0x3012}, 1578 {'=', '_', 0x3013}, 1579 {'(', '\'', 0x3014}, 1580 {')', '\'', 0x3015}, 1581 {'(', 'I', 0x3016}, 1582 {')', 'I', 0x3017}, 1583 {'-', '?', 0x301c}, 1584 #define DG_START_HIRAGANA 0x3041 1585 {'A', '5', 0x3041}, 1586 {'a', '5', 0x3042}, 1587 {'I', '5', 0x3043}, 1588 {'i', '5', 0x3044}, 1589 {'U', '5', 0x3045}, 1590 {'u', '5', 0x3046}, 1591 {'E', '5', 0x3047}, 1592 {'e', '5', 0x3048}, 1593 {'O', '5', 0x3049}, 1594 {'o', '5', 0x304a}, 1595 {'k', 'a', 0x304b}, 1596 {'g', 'a', 0x304c}, 1597 {'k', 'i', 0x304d}, 1598 {'g', 'i', 0x304e}, 1599 {'k', 'u', 0x304f}, 1600 {'g', 'u', 0x3050}, 1601 {'k', 'e', 0x3051}, 1602 {'g', 'e', 0x3052}, 1603 {'k', 'o', 0x3053}, 1604 {'g', 'o', 0x3054}, 1605 {'s', 'a', 0x3055}, 1606 {'z', 'a', 0x3056}, 1607 {'s', 'i', 0x3057}, 1608 {'z', 'i', 0x3058}, 1609 {'s', 'u', 0x3059}, 1610 {'z', 'u', 0x305a}, 1611 {'s', 'e', 0x305b}, 1612 {'z', 'e', 0x305c}, 1613 {'s', 'o', 0x305d}, 1614 {'z', 'o', 0x305e}, 1615 {'t', 'a', 0x305f}, 1616 {'d', 'a', 0x3060}, 1617 {'t', 'i', 0x3061}, 1618 {'d', 'i', 0x3062}, 1619 {'t', 'U', 0x3063}, 1620 {'t', 'u', 0x3064}, 1621 {'d', 'u', 0x3065}, 1622 {'t', 'e', 0x3066}, 1623 {'d', 'e', 0x3067}, 1624 {'t', 'o', 0x3068}, 1625 {'d', 'o', 0x3069}, 1626 {'n', 'a', 0x306a}, 1627 {'n', 'i', 0x306b}, 1628 {'n', 'u', 0x306c}, 1629 {'n', 'e', 0x306d}, 1630 {'n', 'o', 0x306e}, 1631 {'h', 'a', 0x306f}, 1632 {'b', 'a', 0x3070}, 1633 {'p', 'a', 0x3071}, 1634 {'h', 'i', 0x3072}, 1635 {'b', 'i', 0x3073}, 1636 {'p', 'i', 0x3074}, 1637 {'h', 'u', 0x3075}, 1638 {'b', 'u', 0x3076}, 1639 {'p', 'u', 0x3077}, 1640 {'h', 'e', 0x3078}, 1641 {'b', 'e', 0x3079}, 1642 {'p', 'e', 0x307a}, 1643 {'h', 'o', 0x307b}, 1644 {'b', 'o', 0x307c}, 1645 {'p', 'o', 0x307d}, 1646 {'m', 'a', 0x307e}, 1647 {'m', 'i', 0x307f}, 1648 {'m', 'u', 0x3080}, 1649 {'m', 'e', 0x3081}, 1650 {'m', 'o', 0x3082}, 1651 {'y', 'A', 0x3083}, 1652 {'y', 'a', 0x3084}, 1653 {'y', 'U', 0x3085}, 1654 {'y', 'u', 0x3086}, 1655 {'y', 'O', 0x3087}, 1656 {'y', 'o', 0x3088}, 1657 {'r', 'a', 0x3089}, 1658 {'r', 'i', 0x308a}, 1659 {'r', 'u', 0x308b}, 1660 {'r', 'e', 0x308c}, 1661 {'r', 'o', 0x308d}, 1662 {'w', 'A', 0x308e}, 1663 {'w', 'a', 0x308f}, 1664 {'w', 'i', 0x3090}, 1665 {'w', 'e', 0x3091}, 1666 {'w', 'o', 0x3092}, 1667 {'n', '5', 0x3093}, 1668 {'v', 'u', 0x3094}, 1669 {'"', '5', 0x309b}, 1670 {'0', '5', 0x309c}, 1671 {'*', '5', 0x309d}, 1672 {'+', '5', 0x309e}, 1673 #define DG_START_KATAKANA 0x30a1 1674 {'a', '6', 0x30a1}, 1675 {'A', '6', 0x30a2}, 1676 {'i', '6', 0x30a3}, 1677 {'I', '6', 0x30a4}, 1678 {'u', '6', 0x30a5}, 1679 {'U', '6', 0x30a6}, 1680 {'e', '6', 0x30a7}, 1681 {'E', '6', 0x30a8}, 1682 {'o', '6', 0x30a9}, 1683 {'O', '6', 0x30aa}, 1684 {'K', 'a', 0x30ab}, 1685 {'G', 'a', 0x30ac}, 1686 {'K', 'i', 0x30ad}, 1687 {'G', 'i', 0x30ae}, 1688 {'K', 'u', 0x30af}, 1689 {'G', 'u', 0x30b0}, 1690 {'K', 'e', 0x30b1}, 1691 {'G', 'e', 0x30b2}, 1692 {'K', 'o', 0x30b3}, 1693 {'G', 'o', 0x30b4}, 1694 {'S', 'a', 0x30b5}, 1695 {'Z', 'a', 0x30b6}, 1696 {'S', 'i', 0x30b7}, 1697 {'Z', 'i', 0x30b8}, 1698 {'S', 'u', 0x30b9}, 1699 {'Z', 'u', 0x30ba}, 1700 {'S', 'e', 0x30bb}, 1701 {'Z', 'e', 0x30bc}, 1702 {'S', 'o', 0x30bd}, 1703 {'Z', 'o', 0x30be}, 1704 {'T', 'a', 0x30bf}, 1705 {'D', 'a', 0x30c0}, 1706 {'T', 'i', 0x30c1}, 1707 {'D', 'i', 0x30c2}, 1708 {'T', 'U', 0x30c3}, 1709 {'T', 'u', 0x30c4}, 1710 {'D', 'u', 0x30c5}, 1711 {'T', 'e', 0x30c6}, 1712 {'D', 'e', 0x30c7}, 1713 {'T', 'o', 0x30c8}, 1714 {'D', 'o', 0x30c9}, 1715 {'N', 'a', 0x30ca}, 1716 {'N', 'i', 0x30cb}, 1717 {'N', 'u', 0x30cc}, 1718 {'N', 'e', 0x30cd}, 1719 {'N', 'o', 0x30ce}, 1720 {'H', 'a', 0x30cf}, 1721 {'B', 'a', 0x30d0}, 1722 {'P', 'a', 0x30d1}, 1723 {'H', 'i', 0x30d2}, 1724 {'B', 'i', 0x30d3}, 1725 {'P', 'i', 0x30d4}, 1726 {'H', 'u', 0x30d5}, 1727 {'B', 'u', 0x30d6}, 1728 {'P', 'u', 0x30d7}, 1729 {'H', 'e', 0x30d8}, 1730 {'B', 'e', 0x30d9}, 1731 {'P', 'e', 0x30da}, 1732 {'H', 'o', 0x30db}, 1733 {'B', 'o', 0x30dc}, 1734 {'P', 'o', 0x30dd}, 1735 {'M', 'a', 0x30de}, 1736 {'M', 'i', 0x30df}, 1737 {'M', 'u', 0x30e0}, 1738 {'M', 'e', 0x30e1}, 1739 {'M', 'o', 0x30e2}, 1740 {'Y', 'A', 0x30e3}, 1741 {'Y', 'a', 0x30e4}, 1742 {'Y', 'U', 0x30e5}, 1743 {'Y', 'u', 0x30e6}, 1744 {'Y', 'O', 0x30e7}, 1745 {'Y', 'o', 0x30e8}, 1746 {'R', 'a', 0x30e9}, 1747 {'R', 'i', 0x30ea}, 1748 {'R', 'u', 0x30eb}, 1749 {'R', 'e', 0x30ec}, 1750 {'R', 'o', 0x30ed}, 1751 {'W', 'A', 0x30ee}, 1752 {'W', 'a', 0x30ef}, 1753 {'W', 'i', 0x30f0}, 1754 {'W', 'e', 0x30f1}, 1755 {'W', 'o', 0x30f2}, 1756 {'N', '6', 0x30f3}, 1757 {'V', 'u', 0x30f4}, 1758 {'K', 'A', 0x30f5}, 1759 {'K', 'E', 0x30f6}, 1760 {'V', 'a', 0x30f7}, 1761 {'V', 'i', 0x30f8}, 1762 {'V', 'e', 0x30f9}, 1763 {'V', 'o', 0x30fa}, 1764 {'.', '6', 0x30fb}, 1765 {'-', '6', 0x30fc}, 1766 {'*', '6', 0x30fd}, 1767 {'+', '6', 0x30fe}, 1768 #define DG_START_BOPOMOFO 0x3105 1769 {'b', '4', 0x3105}, 1770 {'p', '4', 0x3106}, 1771 {'m', '4', 0x3107}, 1772 {'f', '4', 0x3108}, 1773 {'d', '4', 0x3109}, 1774 {'t', '4', 0x310a}, 1775 {'n', '4', 0x310b}, 1776 {'l', '4', 0x310c}, 1777 {'g', '4', 0x310d}, 1778 {'k', '4', 0x310e}, 1779 {'h', '4', 0x310f}, 1780 {'j', '4', 0x3110}, 1781 {'q', '4', 0x3111}, 1782 {'x', '4', 0x3112}, 1783 {'z', 'h', 0x3113}, 1784 {'c', 'h', 0x3114}, 1785 {'s', 'h', 0x3115}, 1786 {'r', '4', 0x3116}, 1787 {'z', '4', 0x3117}, 1788 {'c', '4', 0x3118}, 1789 {'s', '4', 0x3119}, 1790 {'a', '4', 0x311a}, 1791 {'o', '4', 0x311b}, 1792 {'e', '4', 0x311c}, 1793 {'a', 'i', 0x311e}, 1794 {'e', 'i', 0x311f}, 1795 {'a', 'u', 0x3120}, 1796 {'o', 'u', 0x3121}, 1797 {'a', 'n', 0x3122}, 1798 {'e', 'n', 0x3123}, 1799 {'a', 'N', 0x3124}, 1800 {'e', 'N', 0x3125}, 1801 {'e', 'r', 0x3126}, 1802 {'i', '4', 0x3127}, 1803 {'u', '4', 0x3128}, 1804 {'i', 'u', 0x3129}, 1805 {'v', '4', 0x312a}, 1806 {'n', 'G', 0x312b}, 1807 {'g', 'n', 0x312c}, 1808 #define DG_START_OTHER3 0x3220 1809 {'1', 'c', 0x3220}, 1810 {'2', 'c', 0x3221}, 1811 {'3', 'c', 0x3222}, 1812 {'4', 'c', 0x3223}, 1813 {'5', 'c', 0x3224}, 1814 {'6', 'c', 0x3225}, 1815 {'7', 'c', 0x3226}, 1816 {'8', 'c', 0x3227}, 1817 {'9', 'c', 0x3228}, 1818 // code points 0xe000 - 0xefff excluded, they have no assigned 1819 // characters, only used in proposals. 1820 {'f', 'f', 0xfb00}, 1821 {'f', 'i', 0xfb01}, 1822 {'f', 'l', 0xfb02}, 1823 {'f', 't', 0xfb05}, 1824 {'s', 't', 0xfb06}, 1825 1826 {NUL, NUL, NUL} 1827 }; 1828 1829 # endif // OLD_DIGRAPHS 1830 # endif // EBCDIC 1831 # endif // !HPUX_DIGRAPHS 1832 #endif // !__MINT__ 1833 1834 /* 1835 * handle digraphs after typing a character 1836 */ 1837 int 1838 do_digraph(int c) 1839 { 1840 static int backspaced; // character before K_BS 1841 static int lastchar; // last typed character 1842 1843 if (c == -1) // init values 1844 { 1845 backspaced = -1; 1846 } 1847 else if (p_dg) 1848 { 1849 if (backspaced >= 0) 1850 c = getdigraph(backspaced, c, FALSE); 1851 backspaced = -1; 1852 if ((c == K_BS || c == Ctrl_H) && lastchar >= 0) 1853 backspaced = lastchar; 1854 } 1855 lastchar = c; 1856 return c; 1857 } 1858 1859 /* 1860 * Find a digraph for "val". If found return the string to display it. 1861 * If not found return NULL. 1862 */ 1863 char_u * 1864 get_digraph_for_char(int val_arg) 1865 { 1866 int val = val_arg; 1867 int i; 1868 int use_defaults; 1869 digr_T *dp; 1870 static char_u r[3]; 1871 1872 #if defined(USE_UNICODE_DIGRAPHS) 1873 if (!enc_utf8) 1874 { 1875 char_u buf[6], *to; 1876 vimconv_T vc; 1877 1878 // convert the character from 'encoding' to Unicode 1879 i = mb_char2bytes(val, buf); 1880 vc.vc_type = CONV_NONE; 1881 if (convert_setup(&vc, p_enc, (char_u *)"utf-8") == OK) 1882 { 1883 vc.vc_fail = TRUE; 1884 to = string_convert(&vc, buf, &i); 1885 if (to != NULL) 1886 { 1887 val = utf_ptr2char(to); 1888 vim_free(to); 1889 } 1890 (void)convert_setup(&vc, NULL, NULL); 1891 } 1892 } 1893 #endif 1894 1895 for (use_defaults = 0; use_defaults <= 1; use_defaults++) 1896 { 1897 if (use_defaults == 0) 1898 dp = (digr_T *)user_digraphs.ga_data; 1899 else 1900 dp = digraphdefault; 1901 for (i = 0; use_defaults ? dp->char1 != NUL 1902 : i < user_digraphs.ga_len; ++i) 1903 { 1904 if (dp->result == val) 1905 { 1906 r[0] = dp->char1; 1907 r[1] = dp->char2; 1908 r[2] = NUL; 1909 return r; 1910 } 1911 ++dp; 1912 } 1913 } 1914 return NULL; 1915 } 1916 1917 /* 1918 * Get a digraph. Used after typing CTRL-K on the command line or in normal 1919 * mode. 1920 * Returns composed character, or NUL when ESC was used. 1921 */ 1922 int 1923 get_digraph( 1924 int cmdline) // TRUE when called from the cmdline 1925 { 1926 int c, cc; 1927 1928 ++no_mapping; 1929 ++allow_keys; 1930 c = plain_vgetc(); 1931 --no_mapping; 1932 --allow_keys; 1933 if (c != ESC) // ESC cancels CTRL-K 1934 { 1935 if (IS_SPECIAL(c)) // insert special key code 1936 return c; 1937 if (cmdline) 1938 { 1939 if (char2cells(c) == 1 1940 #if defined(FEAT_CRYPT) || defined(FEAT_EVAL) 1941 && cmdline_star == 0 1942 #endif 1943 ) 1944 putcmdline(c, TRUE); 1945 } 1946 #ifdef FEAT_CMDL_INFO 1947 else 1948 add_to_showcmd(c); 1949 #endif 1950 ++no_mapping; 1951 ++allow_keys; 1952 cc = plain_vgetc(); 1953 --no_mapping; 1954 --allow_keys; 1955 if (cc != ESC) // ESC cancels CTRL-K 1956 return getdigraph(c, cc, TRUE); 1957 } 1958 return NUL; 1959 } 1960 1961 /* 1962 * Lookup the pair "char1", "char2" in the digraph tables. 1963 * If no match, return "char2". 1964 * If "meta_char" is TRUE and "char1" is a space, return "char2" | 0x80. 1965 */ 1966 static int 1967 getexactdigraph(int char1, int char2, int meta_char) 1968 { 1969 int i; 1970 int retval = 0; 1971 digr_T *dp; 1972 1973 if (IS_SPECIAL(char1) || IS_SPECIAL(char2)) 1974 return char2; 1975 1976 /* 1977 * Search user digraphs first. 1978 */ 1979 dp = (digr_T *)user_digraphs.ga_data; 1980 for (i = 0; i < user_digraphs.ga_len; ++i) 1981 { 1982 if ((int)dp->char1 == char1 && (int)dp->char2 == char2) 1983 { 1984 retval = dp->result; 1985 break; 1986 } 1987 ++dp; 1988 } 1989 1990 /* 1991 * Search default digraphs. 1992 */ 1993 if (retval == 0) 1994 { 1995 dp = digraphdefault; 1996 for (i = 0; dp->char1 != 0; ++i) 1997 { 1998 if ((int)dp->char1 == char1 && (int)dp->char2 == char2) 1999 { 2000 retval = dp->result; 2001 break; 2002 } 2003 ++dp; 2004 } 2005 } 2006 #ifdef USE_UNICODE_DIGRAPHS 2007 if (retval != 0 && !enc_utf8) 2008 { 2009 char_u buf[6], *to; 2010 vimconv_T vc; 2011 2012 /* 2013 * Convert the Unicode digraph to 'encoding'. 2014 */ 2015 i = utf_char2bytes(retval, buf); 2016 retval = 0; 2017 vc.vc_type = CONV_NONE; 2018 if (convert_setup(&vc, (char_u *)"utf-8", p_enc) == OK) 2019 { 2020 vc.vc_fail = TRUE; 2021 to = string_convert(&vc, buf, &i); 2022 if (to != NULL) 2023 { 2024 retval = (*mb_ptr2char)(to); 2025 vim_free(to); 2026 } 2027 (void)convert_setup(&vc, NULL, NULL); 2028 } 2029 } 2030 #endif 2031 2032 // Ignore multi-byte characters when not in multi-byte mode. 2033 if (!has_mbyte && retval > 0xff) 2034 retval = 0; 2035 2036 if (retval == 0) // digraph deleted or not found 2037 { 2038 if (char1 == ' ' && meta_char) // <space> <char> --> meta-char 2039 return (char2 | 0x80); 2040 return char2; 2041 } 2042 return retval; 2043 } 2044 2045 /* 2046 * Get digraph. 2047 * Allow for both char1-char2 and char2-char1 2048 */ 2049 int 2050 getdigraph(int char1, int char2, int meta_char) 2051 { 2052 int retval; 2053 2054 if (((retval = getexactdigraph(char1, char2, meta_char)) == char2) 2055 && (char1 != char2) 2056 && ((retval = getexactdigraph(char2, char1, meta_char)) == char1)) 2057 return char2; 2058 return retval; 2059 } 2060 2061 /* 2062 * Add the digraphs in the argument to the digraph table. 2063 * format: {c1}{c2} char {c1}{c2} char ... 2064 */ 2065 void 2066 putdigraph(char_u *str) 2067 { 2068 int char1, char2, n; 2069 int i; 2070 digr_T *dp; 2071 2072 while (*str != NUL) 2073 { 2074 str = skipwhite(str); 2075 if (*str == NUL) 2076 return; 2077 char1 = *str++; 2078 char2 = *str++; 2079 if (char2 == 0) 2080 { 2081 emsg(_(e_invarg)); 2082 return; 2083 } 2084 if (char1 == ESC || char2 == ESC) 2085 { 2086 emsg(_("E104: Escape not allowed in digraph")); 2087 return; 2088 } 2089 str = skipwhite(str); 2090 if (!VIM_ISDIGIT(*str)) 2091 { 2092 emsg(_(e_number_exp)); 2093 return; 2094 } 2095 n = getdigits(&str); 2096 2097 // If the digraph already exists, replace the result. 2098 dp = (digr_T *)user_digraphs.ga_data; 2099 for (i = 0; i < user_digraphs.ga_len; ++i) 2100 { 2101 if ((int)dp->char1 == char1 && (int)dp->char2 == char2) 2102 { 2103 dp->result = n; 2104 break; 2105 } 2106 ++dp; 2107 } 2108 2109 // Add a new digraph to the table. 2110 if (i == user_digraphs.ga_len) 2111 { 2112 if (ga_grow(&user_digraphs, 1) == OK) 2113 { 2114 dp = (digr_T *)user_digraphs.ga_data + user_digraphs.ga_len; 2115 dp->char1 = char1; 2116 dp->char2 = char2; 2117 dp->result = n; 2118 ++user_digraphs.ga_len; 2119 } 2120 } 2121 } 2122 } 2123 2124 #if defined(USE_UNICODE_DIGRAPHS) 2125 static void 2126 digraph_header(char *msg) 2127 { 2128 if (msg_col > 0) 2129 msg_putchar('\n'); 2130 msg_outtrans_attr((char_u *)msg, HL_ATTR(HLF_CM)); 2131 msg_putchar('\n'); 2132 } 2133 #endif 2134 2135 void 2136 listdigraphs(int use_headers) 2137 { 2138 int i; 2139 digr_T *dp; 2140 result_T previous = 0; 2141 2142 msg_putchar('\n'); 2143 2144 dp = digraphdefault; 2145 for (i = 0; dp->char1 != NUL && !got_int; ++i) 2146 { 2147 #if defined(USE_UNICODE_DIGRAPHS) 2148 digr_T tmp; 2149 2150 // May need to convert the result to 'encoding'. 2151 tmp.char1 = dp->char1; 2152 tmp.char2 = dp->char2; 2153 tmp.result = getexactdigraph(tmp.char1, tmp.char2, FALSE); 2154 if (tmp.result != 0 && tmp.result != tmp.char2 2155 && (has_mbyte || tmp.result <= 255)) 2156 printdigraph(&tmp, use_headers ? &previous : NULL); 2157 #else 2158 2159 if (getexactdigraph(dp->char1, dp->char2, FALSE) == dp->result 2160 && (has_mbyte || dp->result <= 255)) 2161 printdigraph(dp, use_headers ? &previous : NULL); 2162 #endif 2163 ++dp; 2164 ui_breakcheck(); 2165 } 2166 2167 dp = (digr_T *)user_digraphs.ga_data; 2168 for (i = 0; i < user_digraphs.ga_len && !got_int; ++i) 2169 { 2170 #if defined(USE_UNICODE_DIGRAPHS) 2171 if (previous >= 0 && use_headers) 2172 digraph_header(_("Custom")); 2173 previous = -1; 2174 #endif 2175 printdigraph(dp, NULL); 2176 ui_breakcheck(); 2177 ++dp; 2178 } 2179 must_redraw = CLEAR; // clear screen, because some digraphs may be 2180 // wrong, in which case we messed up ScreenLines 2181 } 2182 2183 static struct dg_header_entry { 2184 int dg_start; 2185 char *dg_header; 2186 } header_table[] = { 2187 {DG_START_LATIN, N_("Latin supplement")}, 2188 {DG_START_GREEK, N_("Greek and Coptic")}, 2189 {DG_START_CYRILLIC, N_("Cyrillic")}, 2190 {DG_START_HEBREW, N_("Hebrew")}, 2191 {DG_START_ARABIC, N_("Arabic")}, 2192 {DG_START_LATIN_EXTENDED, N_("Latin extended")}, 2193 {DG_START_GREEK_EXTENDED, N_("Greek extended")}, 2194 {DG_START_PUNCTUATION, N_("Punctuation")}, 2195 {DG_START_SUB_SUPER, N_("Super- and subscripts")}, 2196 {DG_START_CURRENCY, N_("Currency")}, 2197 {DG_START_OTHER1, N_("Other")}, 2198 {DG_START_ROMAN, N_("Roman numbers")}, 2199 {DG_START_ARROWS, N_("Arrows")}, 2200 {DG_START_MATH, N_("Mathematical operators")}, 2201 {DG_START_TECHNICAL, N_("Technical")}, 2202 {DG_START_OTHER2, N_("Other")}, 2203 {DG_START_DRAWING, N_("Box drawing")}, 2204 {DG_START_BLOCK, N_("Block elements")}, 2205 {DG_START_SHAPES, N_("Geometric shapes")}, 2206 {DG_START_SYMBOLS, N_("Symbols")}, 2207 {DG_START_DINGBATS, N_("Dingbats")}, 2208 {DG_START_CJK_SYMBOLS, N_("CJK symbols and punctuation")}, 2209 {DG_START_HIRAGANA, N_("Hiragana")}, 2210 {DG_START_KATAKANA, N_("Katakana")}, 2211 {DG_START_BOPOMOFO, N_("Bopomofo")}, 2212 {DG_START_OTHER3, N_("Other")}, 2213 {0xfffffff, NULL}, 2214 }; 2215 2216 static void 2217 printdigraph(digr_T *dp, result_T *previous) 2218 { 2219 char_u buf[30]; 2220 char_u *p; 2221 2222 int list_width; 2223 2224 if ((dy_flags & DY_UHEX) || has_mbyte) 2225 list_width = 13; 2226 else 2227 list_width = 11; 2228 2229 if (dp->result != 0) 2230 { 2231 #if defined(USE_UNICODE_DIGRAPHS) 2232 if (previous != NULL) 2233 { 2234 int i; 2235 2236 for (i = 0; header_table[i].dg_header != NULL; ++i) 2237 if (*previous < header_table[i].dg_start 2238 && dp->result >= header_table[i].dg_start 2239 && dp->result < header_table[i + 1].dg_start) 2240 { 2241 digraph_header(_(header_table[i].dg_header)); 2242 break; 2243 } 2244 *previous = dp->result; 2245 } 2246 #endif 2247 if (msg_col > Columns - list_width) 2248 msg_putchar('\n'); 2249 if (msg_col) 2250 while (msg_col % list_width != 0) 2251 msg_putchar(' '); 2252 2253 p = buf; 2254 *p++ = dp->char1; 2255 *p++ = dp->char2; 2256 *p++ = ' '; 2257 *p = NUL; 2258 msg_outtrans(buf); 2259 p = buf; 2260 if (has_mbyte) 2261 { 2262 // add a space to draw a composing char on 2263 if (enc_utf8 && utf_iscomposing(dp->result)) 2264 *p++ = ' '; 2265 p += (*mb_char2bytes)(dp->result, p); 2266 } 2267 else 2268 *p++ = (char_u)dp->result; 2269 *p = NUL; 2270 msg_outtrans_attr(buf, HL_ATTR(HLF_8)); 2271 p = buf; 2272 if (char2cells(dp->result) == 1) 2273 *p++ = ' '; 2274 vim_snprintf((char *)p, sizeof(buf) - (p - buf), " %3d", dp->result); 2275 msg_outtrans(buf); 2276 } 2277 } 2278 2279 #endif // FEAT_DIGRAPHS 2280 2281 #if defined(FEAT_KEYMAP) || defined(PROTO) 2282 2283 // structure used for b_kmap_ga.ga_data 2284 typedef struct 2285 { 2286 char_u *from; 2287 char_u *to; 2288 } kmap_T; 2289 2290 #define KMAP_MAXLEN 20 // maximum length of "from" or "to" 2291 2292 static void keymap_unload(void); 2293 2294 /* 2295 * Set up key mapping tables for the 'keymap' option. 2296 * Returns NULL if OK, an error message for failure. This only needs to be 2297 * used when setting the option, not later when the value has already been 2298 * checked. 2299 */ 2300 char * 2301 keymap_init(void) 2302 { 2303 curbuf->b_kmap_state &= ~KEYMAP_INIT; 2304 2305 if (*curbuf->b_p_keymap == NUL) 2306 { 2307 // Stop any active keymap and clear the table. Also remove 2308 // b:keymap_name, as no keymap is active now. 2309 keymap_unload(); 2310 do_cmdline_cmd((char_u *)"unlet! b:keymap_name"); 2311 } 2312 else 2313 { 2314 char_u *buf; 2315 size_t buflen; 2316 2317 // Source the keymap file. It will contain a ":loadkeymap" command 2318 // which will call ex_loadkeymap() below. 2319 buflen = STRLEN(curbuf->b_p_keymap) + STRLEN(p_enc) + 14; 2320 buf = alloc(buflen); 2321 if (buf == NULL) 2322 return e_outofmem; 2323 2324 // try finding "keymap/'keymap'_'encoding'.vim" in 'runtimepath' 2325 vim_snprintf((char *)buf, buflen, "keymap/%s_%s.vim", 2326 curbuf->b_p_keymap, p_enc); 2327 if (source_runtime(buf, 0) == FAIL) 2328 { 2329 // try finding "keymap/'keymap'.vim" in 'runtimepath' 2330 vim_snprintf((char *)buf, buflen, "keymap/%s.vim", 2331 curbuf->b_p_keymap); 2332 if (source_runtime(buf, 0) == FAIL) 2333 { 2334 vim_free(buf); 2335 return N_("E544: Keymap file not found"); 2336 } 2337 } 2338 vim_free(buf); 2339 } 2340 2341 return NULL; 2342 } 2343 2344 /* 2345 * ":loadkeymap" command: load the following lines as the keymap. 2346 */ 2347 void 2348 ex_loadkeymap(exarg_T *eap) 2349 { 2350 char_u *line; 2351 char_u *p; 2352 char_u *s; 2353 kmap_T *kp; 2354 #define KMAP_LLEN 200 // max length of "to" and "from" together 2355 char_u buf[KMAP_LLEN + 11]; 2356 int i; 2357 char_u *save_cpo = p_cpo; 2358 2359 if (!getline_equal(eap->getline, eap->cookie, getsourceline)) 2360 { 2361 emsg(_("E105: Using :loadkeymap not in a sourced file")); 2362 return; 2363 } 2364 2365 /* 2366 * Stop any active keymap and clear the table. 2367 */ 2368 keymap_unload(); 2369 2370 curbuf->b_kmap_state = 0; 2371 ga_init2(&curbuf->b_kmap_ga, (int)sizeof(kmap_T), 20); 2372 2373 // Set 'cpoptions' to "C" to avoid line continuation. 2374 p_cpo = (char_u *)"C"; 2375 2376 /* 2377 * Get each line of the sourced file, break at the end. 2378 */ 2379 for (;;) 2380 { 2381 line = eap->getline(0, eap->cookie, 0, TRUE); 2382 if (line == NULL) 2383 break; 2384 2385 p = skipwhite(line); 2386 if (*p != '"' && *p != NUL && ga_grow(&curbuf->b_kmap_ga, 1) == OK) 2387 { 2388 kp = (kmap_T *)curbuf->b_kmap_ga.ga_data + curbuf->b_kmap_ga.ga_len; 2389 s = skiptowhite(p); 2390 kp->from = vim_strnsave(p, s - p); 2391 p = skipwhite(s); 2392 s = skiptowhite(p); 2393 kp->to = vim_strnsave(p, s - p); 2394 2395 if (kp->from == NULL || kp->to == NULL 2396 || STRLEN(kp->from) + STRLEN(kp->to) >= KMAP_LLEN 2397 || *kp->from == NUL || *kp->to == NUL) 2398 { 2399 if (kp->to != NULL && *kp->to == NUL) 2400 emsg(_("E791: Empty keymap entry")); 2401 vim_free(kp->from); 2402 vim_free(kp->to); 2403 } 2404 else 2405 ++curbuf->b_kmap_ga.ga_len; 2406 } 2407 vim_free(line); 2408 } 2409 2410 /* 2411 * setup ":lnoremap" to map the keys 2412 */ 2413 for (i = 0; i < curbuf->b_kmap_ga.ga_len; ++i) 2414 { 2415 vim_snprintf((char *)buf, sizeof(buf), "<buffer> %s %s", 2416 ((kmap_T *)curbuf->b_kmap_ga.ga_data)[i].from, 2417 ((kmap_T *)curbuf->b_kmap_ga.ga_data)[i].to); 2418 (void)do_map(2, buf, LANGMAP, FALSE); 2419 } 2420 2421 p_cpo = save_cpo; 2422 2423 curbuf->b_kmap_state |= KEYMAP_LOADED; 2424 status_redraw_curbuf(); 2425 } 2426 2427 /* 2428 * Stop using 'keymap'. 2429 */ 2430 static void 2431 keymap_unload(void) 2432 { 2433 char_u buf[KMAP_MAXLEN + 10]; 2434 int i; 2435 char_u *save_cpo = p_cpo; 2436 kmap_T *kp; 2437 2438 if (!(curbuf->b_kmap_state & KEYMAP_LOADED)) 2439 return; 2440 2441 // Set 'cpoptions' to "C" to avoid line continuation. 2442 p_cpo = (char_u *)"C"; 2443 2444 // clear the ":lmap"s 2445 kp = (kmap_T *)curbuf->b_kmap_ga.ga_data; 2446 for (i = 0; i < curbuf->b_kmap_ga.ga_len; ++i) 2447 { 2448 vim_snprintf((char *)buf, sizeof(buf), "<buffer> %s", kp[i].from); 2449 (void)do_map(1, buf, LANGMAP, FALSE); 2450 } 2451 keymap_clear(&curbuf->b_kmap_ga); 2452 2453 p_cpo = save_cpo; 2454 2455 ga_clear(&curbuf->b_kmap_ga); 2456 curbuf->b_kmap_state &= ~KEYMAP_LOADED; 2457 status_redraw_curbuf(); 2458 } 2459 2460 void 2461 keymap_clear(garray_T *kmap) 2462 { 2463 int i; 2464 kmap_T *kp = (kmap_T *)kmap->ga_data; 2465 2466 for (i = 0; i < kmap->ga_len; ++i) 2467 { 2468 vim_free(kp[i].from); 2469 vim_free(kp[i].to); 2470 } 2471 } 2472 #endif // FEAT_KEYMAP 2473