Files
neovim/src/digraph.c
scott-linder b76c358f3d Convert function declarations from K&R to ANSI style.
cproto (http://invisible-island.net/cproto/) was used to do the bulk of
the work in batch; even the most recent version had some issues with
typedef'd parameters; a quick "patch" was to modify `lex.l` to
explicitly include all vim typedefs as known types. One example from
`vim.h` is

    typedef unsigned char char_u;

which was added in `lex.l` as

    <INITIAL>char_u    { save_text_offset(); return T_CHAR; }

Even with these changes there were some problems:

* Two files (`mbyte.c` and `os_unix.c`) were not cleanly converted.
* Any function with the `UNUSED` macro in its parameter list was not converted.

Rather than spend more time fixing the automated approach, the two files
`mbyte.c` and `os_unix.c` were converted by hand.

The `UNUSED` macros were compiler specific, and the alternative, generic
version would require a different syntax, so in order to simplify the
conversion all uses of `UNUSED` were stripped, and then the sources were
run back through cproto. It is planned to reconsider each use of
`UNUSED` manually using a new macro definition.
2014-02-24 09:48:18 -05:00

2067 lines
50 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* vi:set ts=8 sts=4 sw=4:
*
* VIM - Vi IMproved by Bram Moolenaar
*
* Do ":help uganda" in Vim to read copying and usage conditions.
* Do ":help credits" in Vim to see a list of people who contributed.
* See README.txt for an overview of the Vim source code.
*/
/*
* digraph.c: code for digraphs
*/
#include "vim.h"
typedef int result_T;
typedef struct digraph {
char_u char1;
char_u char2;
result_T result;
} digr_T;
static int getexactdigraph __ARGS((int, int, int));
static void printdigraph __ARGS((digr_T *));
/* digraphs added by the user */
static garray_T user_digraphs = {0, 0, (int)sizeof(digr_T), 10, NULL};
/*
* Note: Characters marked with XX are not included literally, because some
* compilers cannot handle them (Amiga SAS/C is the most picky one).
*/
static digr_T digraphdefault[] =
# ifdef HPUX_DIGRAPHS
/*
* different HPUX digraphs
*/
{{'A', '`', 161}, /* ¡ */
{'A', '^', 162}, /* ¢ */
{'E', '`', 163}, /* £ */
{'E', '^', 164}, /* ¤ */
{'E', '"', 165}, /* ¥ */
{'I', '^', 166}, /* ¦ */
{'I', '"', 167}, /* § */
{'\'', '\'', 168}, /* ¨ */
{'`', '`', 169}, /* © */
{'^', '^', 170}, /* ª */
{'"', '"', 171}, /* « */
{'~', '~', 172}, /* ¬ */
{'U', '`', 173}, /* ­ */
{'U', '^', 174}, /* ® */
{'L', '=', 175}, /* ¯ */
{'~', '_', 176}, /* ° */
{'Y', '\'', 177}, /* ± */
{'y', '\'', 178}, /* ² */
{'~', 'o', 179}, /* ³ */
{'C', ',', 180}, /* ´ */
{'c', ',', 181}, /* µ */
{'N', '~', 182}, /* ¶ */
{'n', '~', 183}, /* · */
{'~', '!', 184}, /* ¸ */
{'~', '?', 185}, /* ¹ */
{'o', 'x', 186}, /* º */
{'L', '-', 187}, /* » */
{'Y', '=', 188}, /* ¼ */
{'p', 'p', 189}, /* ½ */
{'f', 'l', 190}, /* ¾ */
{'c', '|', 191}, /* ¿ */
{'a', '^', 192}, /* À */
{'e', '^', 193}, /* Á */
{'o', '^', 194}, /* Â */
{'u', '^', 195}, /* Ã */
{'a', '\'', 196}, /* Ä */
{'e', '\'', 197}, /* Å */
{'o', '\'', 198}, /* Æ */
{'u', '\'', 199}, /* Ç */
{'a', '`', 200}, /* È */
{'e', '`', 201}, /* É */
{'o', '`', 202}, /* Ê */
{'u', '`', 203}, /* Ë */
{'a', '"', 204}, /* Ì */
{'e', '"', 205}, /* Í */
{'o', '"', 206}, /* Î */
{'u', '"', 207}, /* Ï */
{'A', 'o', 208}, /* Ð */
{'i', '^', 209}, /* Ñ */
{'O', '/', 210}, /* Ò */
{'A', 'E', 211}, /* Ó */
{'a', 'o', 212}, /* Ô */
{'i', '\'', 213}, /* Õ */
{'o', '/', 214}, /* Ö */
{'a', 'e', 215}, /* × */
{'A', '"', 216}, /* Ø */
{'i', '`', 217}, /* Ù */
{'O', '"', 218}, /* Ú */
{'U', '"', 219}, /* Û */
{'E', '\'', 220}, /* Ü */
{'i', '"', 221}, /* Ý */
{'s', 's', 222}, /* Þ */
{'O', '^', 223}, /* ß */
{'A', '\'', 224}, /* à */
{'A', '~', 225}, /* á */
{'a', '~', 226}, /* â */
{'D', '-', 227}, /* ã */
{'d', '-', 228}, /* ä */
{'I', '\'', 229}, /* å */
{'I', '`', 230}, /* æ */
{'O', '\'', 231}, /* ç */
{'O', '`', 232}, /* è */
{'O', '~', 233}, /* é */
{'o', '~', 234}, /* ê */
{'S', '~', 235}, /* ë */
{'s', '~', 236}, /* ì */
{'U', '\'', 237}, /* í */
{'Y', '"', 238}, /* î */
{'y', '"', 239}, /* ï */
{'p', '-', 240}, /* ð */
{'p', '~', 241}, /* ñ */
{'~', '.', 242}, /* ò */
{'j', 'u', 243}, /* ó */
{'P', 'p', 244}, /* ô */
{'3', '4', 245}, /* õ */
{'-', '-', 246}, /* ö */
{'1', '4', 247}, /* ÷ */
{'1', '2', 248}, /* ø */
{'a', '_', 249}, /* ù */
{'o', '_', 250}, /* ú */
{'<', '<', 251}, /* û */
{'x', 'x', 252}, /* ü */
{'>', '>', 253}, /* ý */
{'+', '-', 254}, /* þ */
{'n', 'u', 255}, /* x XX */
{NUL, NUL, NUL}};
# else /* !HPUX_DIGRAPHS */
# ifdef OLD_DIGRAPHS
/*
* digraphs compatible with Vim 5.x
*/
{{'~', '!', 161}, /* ¡ */
{'c', '|', 162}, /* ¢ */
{'$', '$', 163}, /* £ */
{'o', 'x', 164}, /* ¤ - currency symbol in ISO 8859-1 */
{'e', '=', 164}, /* ¤ - euro symbol in ISO 8859-15 */
{'Y', '-', 165}, /* ¥ */
{'|', '|', 166}, /* ¦ */
{'p', 'a', 167}, /* § */
{'"', '"', 168}, /* ¨ */
{'c', 'O', 169}, /* © */
{'a', '-', 170}, /* ª */
{'<', '<', 171}, /* « */
{'-', ',', 172}, /* ¬ */
{'-', '-', 173}, /* ­ */
{'r', 'O', 174}, /* ® */
{'-', '=', 175}, /* ¯ */
{'~', 'o', 176}, /* ° */
{'+', '-', 177}, /* ± */
{'2', '2', 178}, /* ² */
{'3', '3', 179}, /* ³ */
{'\'', '\'', 180}, /* ´ */
{'j', 'u', 181}, /* µ */
{'p', 'p', 182}, /* ¶ */
{'~', '.', 183}, /* · */
{',', ',', 184}, /* ¸ */
{'1', '1', 185}, /* ¹ */
{'o', '-', 186}, /* º */
{'>', '>', 187}, /* » */
{'1', '4', 188}, /* ¼ */
{'1', '2', 189}, /* ½ */
{'3', '4', 190}, /* ¾ */
{'~', '?', 191}, /* ¿ */
{'A', '`', 192}, /* À */
{'A', '\'', 193}, /* Á */
{'A', '^', 194}, /* Â */
{'A', '~', 195}, /* Ã */
{'A', '"', 196}, /* Ä */
{'A', '@', 197}, /* Å */
{'A', 'A', 197}, /* Å */
{'A', 'E', 198}, /* Æ */
{'C', ',', 199}, /* Ç */
{'E', '`', 200}, /* È */
{'E', '\'', 201}, /* É */
{'E', '^', 202}, /* Ê */
{'E', '"', 203}, /* Ë */
{'I', '`', 204}, /* Ì */
{'I', '\'', 205}, /* Í */
{'I', '^', 206}, /* Î */
{'I', '"', 207}, /* Ï */
{'D', '-', 208}, /* Ð */
{'N', '~', 209}, /* Ñ */
{'O', '`', 210}, /* Ò */
{'O', '\'', 211}, /* Ó */
{'O', '^', 212}, /* Ô */
{'O', '~', 213}, /* Õ */
{'O', '"', 214}, /* Ö */
{'/', '\\', 215}, /* × - multiplication symbol in ISO 8859-1 */
{'O', 'E', 215}, /* × - OE in ISO 8859-15 */
{'O', '/', 216}, /* Ø */
{'U', '`', 217}, /* Ù */
{'U', '\'', 218}, /* Ú */
{'U', '^', 219}, /* Û */
{'U', '"', 220}, /* Ü */
{'Y', '\'', 221}, /* Ý */
{'I', 'p', 222}, /* Þ */
{'s', 's', 223}, /* ß */
{'a', '`', 224}, /* à */
{'a', '\'', 225}, /* á */
{'a', '^', 226}, /* â */
{'a', '~', 227}, /* ã */
{'a', '"', 228}, /* ä */
{'a', '@', 229}, /* å */
{'a', 'a', 229}, /* å */
{'a', 'e', 230}, /* æ */
{'c', ',', 231}, /* ç */
{'e', '`', 232}, /* è */
{'e', '\'', 233}, /* é */
{'e', '^', 234}, /* ê */
{'e', '"', 235}, /* ë */
{'i', '`', 236}, /* ì */
{'i', '\'', 237}, /* í */
{'i', '^', 238}, /* î */
{'i', '"', 239}, /* ï */
{'d', '-', 240}, /* ð */
{'n', '~', 241}, /* ñ */
{'o', '`', 242}, /* ò */
{'o', '\'', 243}, /* ó */
{'o', '^', 244}, /* ô */
{'o', '~', 245}, /* õ */
{'o', '"', 246}, /* ö */
{':', '-', 247}, /* ÷ - division symbol in ISO 8859-1 */
{'o', 'e', 247}, /* ÷ - oe in ISO 8859-15 */
{'o', '/', 248}, /* ø */
{'u', '`', 249}, /* ù */
{'u', '\'', 250}, /* ú */
{'u', '^', 251}, /* û */
{'u', '"', 252}, /* ü */
{'y', '\'', 253}, /* ý */
{'i', 'p', 254}, /* þ */
{'y', '"', 255}, /* x XX */
{NUL, NUL, NUL}};
# else /* OLD_DIGRAPHS */
/*
* digraphs for Unicode from RFC1345
* (also work for ISO-8859-1 aka latin1)
*/
{
{'N', 'U', 0x0a}, /* LF for NUL */
{'S', 'H', 0x01},
{'S', 'X', 0x02},
{'E', 'X', 0x03},
{'E', 'T', 0x04},
{'E', 'Q', 0x05},
{'A', 'K', 0x06},
{'B', 'L', 0x07},
{'B', 'S', 0x08},
{'H', 'T', 0x09},
{'L', 'F', 0x0a},
{'V', 'T', 0x0b},
{'F', 'F', 0x0c},
{'C', 'R', 0x0d},
{'S', 'O', 0x0e},
{'S', 'I', 0x0f},
{'D', 'L', 0x10},
{'D', '1', 0x11},
{'D', '2', 0x12},
{'D', '3', 0x13},
{'D', '4', 0x14},
{'N', 'K', 0x15},
{'S', 'Y', 0x16},
{'E', 'B', 0x17},
{'C', 'N', 0x18},
{'E', 'M', 0x19},
{'S', 'B', 0x1a},
{'E', 'C', 0x1b},
{'F', 'S', 0x1c},
{'G', 'S', 0x1d},
{'R', 'S', 0x1e},
{'U', 'S', 0x1f},
{'S', 'P', 0x20},
{'N', 'b', 0x23},
{'D', 'O', 0x24},
{'A', 't', 0x40},
{'<', '(', 0x5b},
{'/', '/', 0x5c},
{')', '>', 0x5d},
{'\'', '>', 0x5e},
{'\'', '!', 0x60},
{'(', '!', 0x7b},
{'!', '!', 0x7c},
{'!', ')', 0x7d},
{'\'', '?', 0x7e},
{'D', 'T', 0x7f},
{'P', 'A', 0x80},
{'H', 'O', 0x81},
{'B', 'H', 0x82},
{'N', 'H', 0x83},
{'I', 'N', 0x84},
{'N', 'L', 0x85},
{'S', 'A', 0x86},
{'E', 'S', 0x87},
{'H', 'S', 0x88},
{'H', 'J', 0x89},
{'V', 'S', 0x8a},
{'P', 'D', 0x8b},
{'P', 'U', 0x8c},
{'R', 'I', 0x8d},
{'S', '2', 0x8e},
{'S', '3', 0x8f},
{'D', 'C', 0x90},
{'P', '1', 0x91},
{'P', '2', 0x92},
{'T', 'S', 0x93},
{'C', 'C', 0x94},
{'M', 'W', 0x95},
{'S', 'G', 0x96},
{'E', 'G', 0x97},
{'S', 'S', 0x98},
{'G', 'C', 0x99},
{'S', 'C', 0x9a},
{'C', 'I', 0x9b},
{'S', 'T', 0x9c},
{'O', 'C', 0x9d},
{'P', 'M', 0x9e},
{'A', 'C', 0x9f},
{'N', 'S', 0xa0},
{'!', 'I', 0xa1},
{'C', 't', 0xa2},
{'P', 'd', 0xa3},
{'C', 'u', 0xa4},
{'Y', 'e', 0xa5},
{'B', 'B', 0xa6},
{'S', 'E', 0xa7},
{'\'', ':', 0xa8},
{'C', 'o', 0xa9},
{'-', 'a', 0xaa},
{'<', '<', 0xab},
{'N', 'O', 0xac},
{'-', '-', 0xad},
{'R', 'g', 0xae},
{'\'', 'm', 0xaf},
{'D', 'G', 0xb0},
{'+', '-', 0xb1},
{'2', 'S', 0xb2},
{'3', 'S', 0xb3},
{'\'', '\'', 0xb4},
{'M', 'y', 0xb5},
{'P', 'I', 0xb6},
{'.', 'M', 0xb7},
{'\'', ',', 0xb8},
{'1', 'S', 0xb9},
{'-', 'o', 0xba},
{'>', '>', 0xbb},
{'1', '4', 0xbc},
{'1', '2', 0xbd},
{'3', '4', 0xbe},
{'?', 'I', 0xbf},
{'A', '!', 0xc0},
{'A', '\'', 0xc1},
{'A', '>', 0xc2},
{'A', '?', 0xc3},
{'A', ':', 0xc4},
{'A', 'A', 0xc5},
{'A', 'E', 0xc6},
{'C', ',', 0xc7},
{'E', '!', 0xc8},
{'E', '\'', 0xc9},
{'E', '>', 0xca},
{'E', ':', 0xcb},
{'I', '!', 0xcc},
{'I', '\'', 0xcd},
{'I', '>', 0xce},
{'I', ':', 0xcf},
{'D', '-', 0xd0},
{'N', '?', 0xd1},
{'O', '!', 0xd2},
{'O', '\'', 0xd3},
{'O', '>', 0xd4},
{'O', '?', 0xd5},
{'O', ':', 0xd6},
{'*', 'X', 0xd7},
{'O', '/', 0xd8},
{'U', '!', 0xd9},
{'U', '\'', 0xda},
{'U', '>', 0xdb},
{'U', ':', 0xdc},
{'Y', '\'', 0xdd},
{'T', 'H', 0xde},
{'s', 's', 0xdf},
{'a', '!', 0xe0},
{'a', '\'', 0xe1},
{'a', '>', 0xe2},
{'a', '?', 0xe3},
{'a', ':', 0xe4},
{'a', 'a', 0xe5},
{'a', 'e', 0xe6},
{'c', ',', 0xe7},
{'e', '!', 0xe8},
{'e', '\'', 0xe9},
{'e', '>', 0xea},
{'e', ':', 0xeb},
{'i', '!', 0xec},
{'i', '\'', 0xed},
{'i', '>', 0xee},
{'i', ':', 0xef},
{'d', '-', 0xf0},
{'n', '?', 0xf1},
{'o', '!', 0xf2},
{'o', '\'', 0xf3},
{'o', '>', 0xf4},
{'o', '?', 0xf5},
{'o', ':', 0xf6},
{'-', ':', 0xf7},
{'o', '/', 0xf8},
{'u', '!', 0xf9},
{'u', '\'', 0xfa},
{'u', '>', 0xfb},
{'u', ':', 0xfc},
{'y', '\'', 0xfd},
{'t', 'h', 0xfe},
{'y', ':', 0xff},
# define USE_UNICODE_DIGRAPHS
{'A', '-', 0x0100},
{'a', '-', 0x0101},
{'A', '(', 0x0102},
{'a', '(', 0x0103},
{'A', ';', 0x0104},
{'a', ';', 0x0105},
{'C', '\'', 0x0106},
{'c', '\'', 0x0107},
{'C', '>', 0x0108},
{'c', '>', 0x0109},
{'C', '.', 0x010a},
{'c', '.', 0x010b},
{'C', '<', 0x010c},
{'c', '<', 0x010d},
{'D', '<', 0x010e},
{'d', '<', 0x010f},
{'D', '/', 0x0110},
{'d', '/', 0x0111},
{'E', '-', 0x0112},
{'e', '-', 0x0113},
{'E', '(', 0x0114},
{'e', '(', 0x0115},
{'E', '.', 0x0116},
{'e', '.', 0x0117},
{'E', ';', 0x0118},
{'e', ';', 0x0119},
{'E', '<', 0x011a},
{'e', '<', 0x011b},
{'G', '>', 0x011c},
{'g', '>', 0x011d},
{'G', '(', 0x011e},
{'g', '(', 0x011f},
{'G', '.', 0x0120},
{'g', '.', 0x0121},
{'G', ',', 0x0122},
{'g', ',', 0x0123},
{'H', '>', 0x0124},
{'h', '>', 0x0125},
{'H', '/', 0x0126},
{'h', '/', 0x0127},
{'I', '?', 0x0128},
{'i', '?', 0x0129},
{'I', '-', 0x012a},
{'i', '-', 0x012b},
{'I', '(', 0x012c},
{'i', '(', 0x012d},
{'I', ';', 0x012e},
{'i', ';', 0x012f},
{'I', '.', 0x0130},
{'i', '.', 0x0131},
{'I', 'J', 0x0132},
{'i', 'j', 0x0133},
{'J', '>', 0x0134},
{'j', '>', 0x0135},
{'K', ',', 0x0136},
{'k', ',', 0x0137},
{'k', 'k', 0x0138},
{'L', '\'', 0x0139},
{'l', '\'', 0x013a},
{'L', ',', 0x013b},
{'l', ',', 0x013c},
{'L', '<', 0x013d},
{'l', '<', 0x013e},
{'L', '.', 0x013f},
{'l', '.', 0x0140},
{'L', '/', 0x0141},
{'l', '/', 0x0142},
{'N', '\'', 0x0143},
{'n', '\'', 0x0144},
{'N', ',', 0x0145},
{'n', ',', 0x0146},
{'N', '<', 0x0147},
{'n', '<', 0x0148},
{'\'', 'n', 0x0149},
{'N', 'G', 0x014a},
{'n', 'g', 0x014b},
{'O', '-', 0x014c},
{'o', '-', 0x014d},
{'O', '(', 0x014e},
{'o', '(', 0x014f},
{'O', '"', 0x0150},
{'o', '"', 0x0151},
{'O', 'E', 0x0152},
{'o', 'e', 0x0153},
{'R', '\'', 0x0154},
{'r', '\'', 0x0155},
{'R', ',', 0x0156},
{'r', ',', 0x0157},
{'R', '<', 0x0158},
{'r', '<', 0x0159},
{'S', '\'', 0x015a},
{'s', '\'', 0x015b},
{'S', '>', 0x015c},
{'s', '>', 0x015d},
{'S', ',', 0x015e},
{'s', ',', 0x015f},
{'S', '<', 0x0160},
{'s', '<', 0x0161},
{'T', ',', 0x0162},
{'t', ',', 0x0163},
{'T', '<', 0x0164},
{'t', '<', 0x0165},
{'T', '/', 0x0166},
{'t', '/', 0x0167},
{'U', '?', 0x0168},
{'u', '?', 0x0169},
{'U', '-', 0x016a},
{'u', '-', 0x016b},
{'U', '(', 0x016c},
{'u', '(', 0x016d},
{'U', '0', 0x016e},
{'u', '0', 0x016f},
{'U', '"', 0x0170},
{'u', '"', 0x0171},
{'U', ';', 0x0172},
{'u', ';', 0x0173},
{'W', '>', 0x0174},
{'w', '>', 0x0175},
{'Y', '>', 0x0176},
{'y', '>', 0x0177},
{'Y', ':', 0x0178},
{'Z', '\'', 0x0179},
{'z', '\'', 0x017a},
{'Z', '.', 0x017b},
{'z', '.', 0x017c},
{'Z', '<', 0x017d},
{'z', '<', 0x017e},
{'O', '9', 0x01a0},
{'o', '9', 0x01a1},
{'O', 'I', 0x01a2},
{'o', 'i', 0x01a3},
{'y', 'r', 0x01a6},
{'U', '9', 0x01af},
{'u', '9', 0x01b0},
{'Z', '/', 0x01b5},
{'z', '/', 0x01b6},
{'E', 'D', 0x01b7},
{'A', '<', 0x01cd},
{'a', '<', 0x01ce},
{'I', '<', 0x01cf},
{'i', '<', 0x01d0},
{'O', '<', 0x01d1},
{'o', '<', 0x01d2},
{'U', '<', 0x01d3},
{'u', '<', 0x01d4},
{'A', '1', 0x01de},
{'a', '1', 0x01df},
{'A', '7', 0x01e0},
{'a', '7', 0x01e1},
{'A', '3', 0x01e2},
{'a', '3', 0x01e3},
{'G', '/', 0x01e4},
{'g', '/', 0x01e5},
{'G', '<', 0x01e6},
{'g', '<', 0x01e7},
{'K', '<', 0x01e8},
{'k', '<', 0x01e9},
{'O', ';', 0x01ea},
{'o', ';', 0x01eb},
{'O', '1', 0x01ec},
{'o', '1', 0x01ed},
{'E', 'Z', 0x01ee},
{'e', 'z', 0x01ef},
{'j', '<', 0x01f0},
{'G', '\'', 0x01f4},
{'g', '\'', 0x01f5},
{';', 'S', 0x02bf},
{'\'', '<', 0x02c7},
{'\'', '(', 0x02d8},
{'\'', '.', 0x02d9},
{'\'', '0', 0x02da},
{'\'', ';', 0x02db},
{'\'', '"', 0x02dd},
{'A', '%', 0x0386},
{'E', '%', 0x0388},
{'Y', '%', 0x0389},
{'I', '%', 0x038a},
{'O', '%', 0x038c},
{'U', '%', 0x038e},
{'W', '%', 0x038f},
{'i', '3', 0x0390},
{'A', '*', 0x0391},
{'B', '*', 0x0392},
{'G', '*', 0x0393},
{'D', '*', 0x0394},
{'E', '*', 0x0395},
{'Z', '*', 0x0396},
{'Y', '*', 0x0397},
{'H', '*', 0x0398},
{'I', '*', 0x0399},
{'K', '*', 0x039a},
{'L', '*', 0x039b},
{'M', '*', 0x039c},
{'N', '*', 0x039d},
{'C', '*', 0x039e},
{'O', '*', 0x039f},
{'P', '*', 0x03a0},
{'R', '*', 0x03a1},
{'S', '*', 0x03a3},
{'T', '*', 0x03a4},
{'U', '*', 0x03a5},
{'F', '*', 0x03a6},
{'X', '*', 0x03a7},
{'Q', '*', 0x03a8},
{'W', '*', 0x03a9},
{'J', '*', 0x03aa},
{'V', '*', 0x03ab},
{'a', '%', 0x03ac},
{'e', '%', 0x03ad},
{'y', '%', 0x03ae},
{'i', '%', 0x03af},
{'u', '3', 0x03b0},
{'a', '*', 0x03b1},
{'b', '*', 0x03b2},
{'g', '*', 0x03b3},
{'d', '*', 0x03b4},
{'e', '*', 0x03b5},
{'z', '*', 0x03b6},
{'y', '*', 0x03b7},
{'h', '*', 0x03b8},
{'i', '*', 0x03b9},
{'k', '*', 0x03ba},
{'l', '*', 0x03bb},
{'m', '*', 0x03bc},
{'n', '*', 0x03bd},
{'c', '*', 0x03be},
{'o', '*', 0x03bf},
{'p', '*', 0x03c0},
{'r', '*', 0x03c1},
{'*', 's', 0x03c2},
{'s', '*', 0x03c3},
{'t', '*', 0x03c4},
{'u', '*', 0x03c5},
{'f', '*', 0x03c6},
{'x', '*', 0x03c7},
{'q', '*', 0x03c8},
{'w', '*', 0x03c9},
{'j', '*', 0x03ca},
{'v', '*', 0x03cb},
{'o', '%', 0x03cc},
{'u', '%', 0x03cd},
{'w', '%', 0x03ce},
{'\'', 'G', 0x03d8},
{',', 'G', 0x03d9},
{'T', '3', 0x03da},
{'t', '3', 0x03db},
{'M', '3', 0x03dc},
{'m', '3', 0x03dd},
{'K', '3', 0x03de},
{'k', '3', 0x03df},
{'P', '3', 0x03e0},
{'p', '3', 0x03e1},
{'\'', '%', 0x03f4},
{'j', '3', 0x03f5},
{'I', 'O', 0x0401},
{'D', '%', 0x0402},
{'G', '%', 0x0403},
{'I', 'E', 0x0404},
{'D', 'S', 0x0405},
{'I', 'I', 0x0406},
{'Y', 'I', 0x0407},
{'J', '%', 0x0408},
{'L', 'J', 0x0409},
{'N', 'J', 0x040a},
{'T', 's', 0x040b},
{'K', 'J', 0x040c},
{'V', '%', 0x040e},
{'D', 'Z', 0x040f},
{'A', '=', 0x0410},
{'B', '=', 0x0411},
{'V', '=', 0x0412},
{'G', '=', 0x0413},
{'D', '=', 0x0414},
{'E', '=', 0x0415},
{'Z', '%', 0x0416},
{'Z', '=', 0x0417},
{'I', '=', 0x0418},
{'J', '=', 0x0419},
{'K', '=', 0x041a},
{'L', '=', 0x041b},
{'M', '=', 0x041c},
{'N', '=', 0x041d},
{'O', '=', 0x041e},
{'P', '=', 0x041f},
{'R', '=', 0x0420},
{'S', '=', 0x0421},
{'T', '=', 0x0422},
{'U', '=', 0x0423},
{'F', '=', 0x0424},
{'H', '=', 0x0425},
{'C', '=', 0x0426},
{'C', '%', 0x0427},
{'S', '%', 0x0428},
{'S', 'c', 0x0429},
{'=', '"', 0x042a},
{'Y', '=', 0x042b},
{'%', '"', 0x042c},
{'J', 'E', 0x042d},
{'J', 'U', 0x042e},
{'J', 'A', 0x042f},
{'a', '=', 0x0430},
{'b', '=', 0x0431},
{'v', '=', 0x0432},
{'g', '=', 0x0433},
{'d', '=', 0x0434},
{'e', '=', 0x0435},
{'z', '%', 0x0436},
{'z', '=', 0x0437},
{'i', '=', 0x0438},
{'j', '=', 0x0439},
{'k', '=', 0x043a},
{'l', '=', 0x043b},
{'m', '=', 0x043c},
{'n', '=', 0x043d},
{'o', '=', 0x043e},
{'p', '=', 0x043f},
{'r', '=', 0x0440},
{'s', '=', 0x0441},
{'t', '=', 0x0442},
{'u', '=', 0x0443},
{'f', '=', 0x0444},
{'h', '=', 0x0445},
{'c', '=', 0x0446},
{'c', '%', 0x0447},
{'s', '%', 0x0448},
{'s', 'c', 0x0449},
{'=', '\'', 0x044a},
{'y', '=', 0x044b},
{'%', '\'', 0x044c},
{'j', 'e', 0x044d},
{'j', 'u', 0x044e},
{'j', 'a', 0x044f},
{'i', 'o', 0x0451},
{'d', '%', 0x0452},
{'g', '%', 0x0453},
{'i', 'e', 0x0454},
{'d', 's', 0x0455},
{'i', 'i', 0x0456},
{'y', 'i', 0x0457},
{'j', '%', 0x0458},
{'l', 'j', 0x0459},
{'n', 'j', 0x045a},
{'t', 's', 0x045b},
{'k', 'j', 0x045c},
{'v', '%', 0x045e},
{'d', 'z', 0x045f},
{'Y', '3', 0x0462},
{'y', '3', 0x0463},
{'O', '3', 0x046a},
{'o', '3', 0x046b},
{'F', '3', 0x0472},
{'f', '3', 0x0473},
{'V', '3', 0x0474},
{'v', '3', 0x0475},
{'C', '3', 0x0480},
{'c', '3', 0x0481},
{'G', '3', 0x0490},
{'g', '3', 0x0491},
{'A', '+', 0x05d0},
{'B', '+', 0x05d1},
{'G', '+', 0x05d2},
{'D', '+', 0x05d3},
{'H', '+', 0x05d4},
{'W', '+', 0x05d5},
{'Z', '+', 0x05d6},
{'X', '+', 0x05d7},
{'T', 'j', 0x05d8},
{'J', '+', 0x05d9},
{'K', '%', 0x05da},
{'K', '+', 0x05db},
{'L', '+', 0x05dc},
{'M', '%', 0x05dd},
{'M', '+', 0x05de},
{'N', '%', 0x05df},
{'N', '+', 0x05e0},
{'S', '+', 0x05e1},
{'E', '+', 0x05e2},
{'P', '%', 0x05e3},
{'P', '+', 0x05e4},
{'Z', 'j', 0x05e5},
{'Z', 'J', 0x05e6},
{'Q', '+', 0x05e7},
{'R', '+', 0x05e8},
{'S', 'h', 0x05e9},
{'T', '+', 0x05ea},
{',', '+', 0x060c},
{';', '+', 0x061b},
{'?', '+', 0x061f},
{'H', '\'', 0x0621},
{'a', 'M', 0x0622},
{'a', 'H', 0x0623},
{'w', 'H', 0x0624},
{'a', 'h', 0x0625},
{'y', 'H', 0x0626},
{'a', '+', 0x0627},
{'b', '+', 0x0628},
{'t', 'm', 0x0629},
{'t', '+', 0x062a},
{'t', 'k', 0x062b},
{'g', '+', 0x062c},
{'h', 'k', 0x062d},
{'x', '+', 0x062e},
{'d', '+', 0x062f},
{'d', 'k', 0x0630},
{'r', '+', 0x0631},
{'z', '+', 0x0632},
{'s', '+', 0x0633},
{'s', 'n', 0x0634},
{'c', '+', 0x0635},
{'d', 'd', 0x0636},
{'t', 'j', 0x0637},
{'z', 'H', 0x0638},
{'e', '+', 0x0639},
{'i', '+', 0x063a},
{'+', '+', 0x0640},
{'f', '+', 0x0641},
{'q', '+', 0x0642},
{'k', '+', 0x0643},
{'l', '+', 0x0644},
{'m', '+', 0x0645},
{'n', '+', 0x0646},
{'h', '+', 0x0647},
{'w', '+', 0x0648},
{'j', '+', 0x0649},
{'y', '+', 0x064a},
{':', '+', 0x064b},
{'"', '+', 0x064c},
{'=', '+', 0x064d},
{'/', '+', 0x064e},
{'\'', '+', 0x064f},
{'1', '+', 0x0650},
{'3', '+', 0x0651},
{'0', '+', 0x0652},
{'a', 'S', 0x0670},
{'p', '+', 0x067e},
{'v', '+', 0x06a4},
{'g', 'f', 0x06af},
{'0', 'a', 0x06f0},
{'1', 'a', 0x06f1},
{'2', 'a', 0x06f2},
{'3', 'a', 0x06f3},
{'4', 'a', 0x06f4},
{'5', 'a', 0x06f5},
{'6', 'a', 0x06f6},
{'7', 'a', 0x06f7},
{'8', 'a', 0x06f8},
{'9', 'a', 0x06f9},
{'B', '.', 0x1e02},
{'b', '.', 0x1e03},
{'B', '_', 0x1e06},
{'b', '_', 0x1e07},
{'D', '.', 0x1e0a},
{'d', '.', 0x1e0b},
{'D', '_', 0x1e0e},
{'d', '_', 0x1e0f},
{'D', ',', 0x1e10},
{'d', ',', 0x1e11},
{'F', '.', 0x1e1e},
{'f', '.', 0x1e1f},
{'G', '-', 0x1e20},
{'g', '-', 0x1e21},
{'H', '.', 0x1e22},
{'h', '.', 0x1e23},
{'H', ':', 0x1e26},
{'h', ':', 0x1e27},
{'H', ',', 0x1e28},
{'h', ',', 0x1e29},
{'K', '\'', 0x1e30},
{'k', '\'', 0x1e31},
{'K', '_', 0x1e34},
{'k', '_', 0x1e35},
{'L', '_', 0x1e3a},
{'l', '_', 0x1e3b},
{'M', '\'', 0x1e3e},
{'m', '\'', 0x1e3f},
{'M', '.', 0x1e40},
{'m', '.', 0x1e41},
{'N', '.', 0x1e44},
{'n', '.', 0x1e45},
{'N', '_', 0x1e48},
{'n', '_', 0x1e49},
{'P', '\'', 0x1e54},
{'p', '\'', 0x1e55},
{'P', '.', 0x1e56},
{'p', '.', 0x1e57},
{'R', '.', 0x1e58},
{'r', '.', 0x1e59},
{'R', '_', 0x1e5e},
{'r', '_', 0x1e5f},
{'S', '.', 0x1e60},
{'s', '.', 0x1e61},
{'T', '.', 0x1e6a},
{'t', '.', 0x1e6b},
{'T', '_', 0x1e6e},
{'t', '_', 0x1e6f},
{'V', '?', 0x1e7c},
{'v', '?', 0x1e7d},
{'W', '!', 0x1e80},
{'w', '!', 0x1e81},
{'W', '\'', 0x1e82},
{'w', '\'', 0x1e83},
{'W', ':', 0x1e84},
{'w', ':', 0x1e85},
{'W', '.', 0x1e86},
{'w', '.', 0x1e87},
{'X', '.', 0x1e8a},
{'x', '.', 0x1e8b},
{'X', ':', 0x1e8c},
{'x', ':', 0x1e8d},
{'Y', '.', 0x1e8e},
{'y', '.', 0x1e8f},
{'Z', '>', 0x1e90},
{'z', '>', 0x1e91},
{'Z', '_', 0x1e94},
{'z', '_', 0x1e95},
{'h', '_', 0x1e96},
{'t', ':', 0x1e97},
{'w', '0', 0x1e98},
{'y', '0', 0x1e99},
{'A', '2', 0x1ea2},
{'a', '2', 0x1ea3},
{'E', '2', 0x1eba},
{'e', '2', 0x1ebb},
{'E', '?', 0x1ebc},
{'e', '?', 0x1ebd},
{'I', '2', 0x1ec8},
{'i', '2', 0x1ec9},
{'O', '2', 0x1ece},
{'o', '2', 0x1ecf},
{'U', '2', 0x1ee6},
{'u', '2', 0x1ee7},
{'Y', '!', 0x1ef2},
{'y', '!', 0x1ef3},
{'Y', '2', 0x1ef6},
{'y', '2', 0x1ef7},
{'Y', '?', 0x1ef8},
{'y', '?', 0x1ef9},
{';', '\'', 0x1f00},
{',', '\'', 0x1f01},
{';', '!', 0x1f02},
{',', '!', 0x1f03},
{'?', ';', 0x1f04},
{'?', ',', 0x1f05},
{'!', ':', 0x1f06},
{'?', ':', 0x1f07},
{'1', 'N', 0x2002},
{'1', 'M', 0x2003},
{'3', 'M', 0x2004},
{'4', 'M', 0x2005},
{'6', 'M', 0x2006},
{'1', 'T', 0x2009},
{'1', 'H', 0x200a},
{'-', '1', 0x2010},
{'-', 'N', 0x2013},
{'-', 'M', 0x2014},
{'-', '3', 0x2015},
{'!', '2', 0x2016},
{'=', '2', 0x2017},
{'\'', '6', 0x2018},
{'\'', '9', 0x2019},
{'.', '9', 0x201a},
{'9', '\'', 0x201b},
{'"', '6', 0x201c},
{'"', '9', 0x201d},
{':', '9', 0x201e},
{'9', '"', 0x201f},
{'/', '-', 0x2020},
{'/', '=', 0x2021},
{'.', '.', 0x2025},
{'%', '0', 0x2030},
{'1', '\'', 0x2032},
{'2', '\'', 0x2033},
{'3', '\'', 0x2034},
{'1', '"', 0x2035},
{'2', '"', 0x2036},
{'3', '"', 0x2037},
{'C', 'a', 0x2038},
{'<', '1', 0x2039},
{'>', '1', 0x203a},
{':', 'X', 0x203b},
{'\'', '-', 0x203e},
{'/', 'f', 0x2044},
{'0', 'S', 0x2070},
{'4', 'S', 0x2074},
{'5', 'S', 0x2075},
{'6', 'S', 0x2076},
{'7', 'S', 0x2077},
{'8', 'S', 0x2078},
{'9', 'S', 0x2079},
{'+', 'S', 0x207a},
{'-', 'S', 0x207b},
{'=', 'S', 0x207c},
{'(', 'S', 0x207d},
{')', 'S', 0x207e},
{'n', 'S', 0x207f},
{'0', 's', 0x2080},
{'1', 's', 0x2081},
{'2', 's', 0x2082},
{'3', 's', 0x2083},
{'4', 's', 0x2084},
{'5', 's', 0x2085},
{'6', 's', 0x2086},
{'7', 's', 0x2087},
{'8', 's', 0x2088},
{'9', 's', 0x2089},
{'+', 's', 0x208a},
{'-', 's', 0x208b},
{'=', 's', 0x208c},
{'(', 's', 0x208d},
{')', 's', 0x208e},
{'L', 'i', 0x20a4},
{'P', 't', 0x20a7},
{'W', '=', 0x20a9},
{'=', 'e', 0x20ac}, /* euro */
{'E', 'u', 0x20ac}, /* euro */
{'o', 'C', 0x2103},
{'c', 'o', 0x2105},
{'o', 'F', 0x2109},
{'N', '0', 0x2116},
{'P', 'O', 0x2117},
{'R', 'x', 0x211e},
{'S', 'M', 0x2120},
{'T', 'M', 0x2122},
{'O', 'm', 0x2126},
{'A', 'O', 0x212b},
{'1', '3', 0x2153},
{'2', '3', 0x2154},
{'1', '5', 0x2155},
{'2', '5', 0x2156},
{'3', '5', 0x2157},
{'4', '5', 0x2158},
{'1', '6', 0x2159},
{'5', '6', 0x215a},
{'1', '8', 0x215b},
{'3', '8', 0x215c},
{'5', '8', 0x215d},
{'7', '8', 0x215e},
{'1', 'R', 0x2160},
{'2', 'R', 0x2161},
{'3', 'R', 0x2162},
{'4', 'R', 0x2163},
{'5', 'R', 0x2164},
{'6', 'R', 0x2165},
{'7', 'R', 0x2166},
{'8', 'R', 0x2167},
{'9', 'R', 0x2168},
{'a', 'R', 0x2169},
{'b', 'R', 0x216a},
{'c', 'R', 0x216b},
{'1', 'r', 0x2170},
{'2', 'r', 0x2171},
{'3', 'r', 0x2172},
{'4', 'r', 0x2173},
{'5', 'r', 0x2174},
{'6', 'r', 0x2175},
{'7', 'r', 0x2176},
{'8', 'r', 0x2177},
{'9', 'r', 0x2178},
{'a', 'r', 0x2179},
{'b', 'r', 0x217a},
{'c', 'r', 0x217b},
{'<', '-', 0x2190},
{'-', '!', 0x2191},
{'-', '>', 0x2192},
{'-', 'v', 0x2193},
{'<', '>', 0x2194},
{'U', 'D', 0x2195},
{'<', '=', 0x21d0},
{'=', '>', 0x21d2},
{'=', '=', 0x21d4},
{'F', 'A', 0x2200},
{'d', 'P', 0x2202},
{'T', 'E', 0x2203},
{'/', '0', 0x2205},
{'D', 'E', 0x2206},
{'N', 'B', 0x2207},
{'(', '-', 0x2208},
{'-', ')', 0x220b},
{'*', 'P', 0x220f},
{'+', 'Z', 0x2211},
{'-', '2', 0x2212},
{'-', '+', 0x2213},
{'*', '-', 0x2217},
{'O', 'b', 0x2218},
{'S', 'b', 0x2219},
{'R', 'T', 0x221a},
{'0', '(', 0x221d},
{'0', '0', 0x221e},
{'-', 'L', 0x221f},
{'-', 'V', 0x2220},
{'P', 'P', 0x2225},
{'A', 'N', 0x2227},
{'O', 'R', 0x2228},
{'(', 'U', 0x2229},
{')', 'U', 0x222a},
{'I', 'n', 0x222b},
{'D', 'I', 0x222c},
{'I', 'o', 0x222e},
{'.', ':', 0x2234},
{':', '.', 0x2235},
{':', 'R', 0x2236},
{':', ':', 0x2237},
{'?', '1', 0x223c},
{'C', 'G', 0x223e},
{'?', '-', 0x2243},
{'?', '=', 0x2245},
{'?', '2', 0x2248},
{'=', '?', 0x224c},
{'H', 'I', 0x2253},
{'!', '=', 0x2260},
{'=', '3', 0x2261},
{'=', '<', 0x2264},
{'>', '=', 0x2265},
{'<', '*', 0x226a},
{'*', '>', 0x226b},
{'!', '<', 0x226e},
{'!', '>', 0x226f},
{'(', 'C', 0x2282},
{')', 'C', 0x2283},
{'(', '_', 0x2286},
{')', '_', 0x2287},
{'0', '.', 0x2299},
{'0', '2', 0x229a},
{'-', 'T', 0x22a5},
{'.', 'P', 0x22c5},
{':', '3', 0x22ee},
{'.', '3', 0x22ef},
{'E', 'h', 0x2302},
{'<', '7', 0x2308},
{'>', '7', 0x2309},
{'7', '<', 0x230a},
{'7', '>', 0x230b},
{'N', 'I', 0x2310},
{'(', 'A', 0x2312},
{'T', 'R', 0x2315},
{'I', 'u', 0x2320},
{'I', 'l', 0x2321},
{'<', '/', 0x2329},
{'/', '>', 0x232a},
{'V', 's', 0x2423},
{'1', 'h', 0x2440},
{'3', 'h', 0x2441},
{'2', 'h', 0x2442},
{'4', 'h', 0x2443},
{'1', 'j', 0x2446},
{'2', 'j', 0x2447},
{'3', 'j', 0x2448},
{'4', 'j', 0x2449},
{'1', '.', 0x2488},
{'2', '.', 0x2489},
{'3', '.', 0x248a},
{'4', '.', 0x248b},
{'5', '.', 0x248c},
{'6', '.', 0x248d},
{'7', '.', 0x248e},
{'8', '.', 0x248f},
{'9', '.', 0x2490},
{'h', 'h', 0x2500},
{'H', 'H', 0x2501},
{'v', 'v', 0x2502},
{'V', 'V', 0x2503},
{'3', '-', 0x2504},
{'3', '_', 0x2505},
{'3', '!', 0x2506},
{'3', '/', 0x2507},
{'4', '-', 0x2508},
{'4', '_', 0x2509},
{'4', '!', 0x250a},
{'4', '/', 0x250b},
{'d', 'r', 0x250c},
{'d', 'R', 0x250d},
{'D', 'r', 0x250e},
{'D', 'R', 0x250f},
{'d', 'l', 0x2510},
{'d', 'L', 0x2511},
{'D', 'l', 0x2512},
{'L', 'D', 0x2513},
{'u', 'r', 0x2514},
{'u', 'R', 0x2515},
{'U', 'r', 0x2516},
{'U', 'R', 0x2517},
{'u', 'l', 0x2518},
{'u', 'L', 0x2519},
{'U', 'l', 0x251a},
{'U', 'L', 0x251b},
{'v', 'r', 0x251c},
{'v', 'R', 0x251d},
{'V', 'r', 0x2520},
{'V', 'R', 0x2523},
{'v', 'l', 0x2524},
{'v', 'L', 0x2525},
{'V', 'l', 0x2528},
{'V', 'L', 0x252b},
{'d', 'h', 0x252c},
{'d', 'H', 0x252f},
{'D', 'h', 0x2530},
{'D', 'H', 0x2533},
{'u', 'h', 0x2534},
{'u', 'H', 0x2537},
{'U', 'h', 0x2538},
{'U', 'H', 0x253b},
{'v', 'h', 0x253c},
{'v', 'H', 0x253f},
{'V', 'h', 0x2542},
{'V', 'H', 0x254b},
{'F', 'D', 0x2571},
{'B', 'D', 0x2572},
{'T', 'B', 0x2580},
{'L', 'B', 0x2584},
{'F', 'B', 0x2588},
{'l', 'B', 0x258c},
{'R', 'B', 0x2590},
{'.', 'S', 0x2591},
{':', 'S', 0x2592},
{'?', 'S', 0x2593},
{'f', 'S', 0x25a0},
{'O', 'S', 0x25a1},
{'R', 'O', 0x25a2},
{'R', 'r', 0x25a3},
{'R', 'F', 0x25a4},
{'R', 'Y', 0x25a5},
{'R', 'H', 0x25a6},
{'R', 'Z', 0x25a7},
{'R', 'K', 0x25a8},
{'R', 'X', 0x25a9},
{'s', 'B', 0x25aa},
{'S', 'R', 0x25ac},
{'O', 'r', 0x25ad},
{'U', 'T', 0x25b2},
{'u', 'T', 0x25b3},
{'P', 'R', 0x25b6},
{'T', 'r', 0x25b7},
{'D', 't', 0x25bc},
{'d', 'T', 0x25bd},
{'P', 'L', 0x25c0},
{'T', 'l', 0x25c1},
{'D', 'b', 0x25c6},
{'D', 'w', 0x25c7},
{'L', 'Z', 0x25ca},
{'0', 'm', 0x25cb},
{'0', 'o', 0x25ce},
{'0', 'M', 0x25cf},
{'0', 'L', 0x25d0},
{'0', 'R', 0x25d1},
{'S', 'n', 0x25d8},
{'I', 'c', 0x25d9},
{'F', 'd', 0x25e2},
{'B', 'd', 0x25e3},
{'*', '2', 0x2605},
{'*', '1', 0x2606},
{'<', 'H', 0x261c},
{'>', 'H', 0x261e},
{'0', 'u', 0x263a},
{'0', 'U', 0x263b},
{'S', 'U', 0x263c},
{'F', 'm', 0x2640},
{'M', 'l', 0x2642},
{'c', 'S', 0x2660},
{'c', 'H', 0x2661},
{'c', 'D', 0x2662},
{'c', 'C', 0x2663},
{'M', 'd', 0x2669},
{'M', '8', 0x266a},
{'M', '2', 0x266b},
{'M', 'b', 0x266d},
{'M', 'x', 0x266e},
{'M', 'X', 0x266f},
{'O', 'K', 0x2713},
{'X', 'X', 0x2717},
{'-', 'X', 0x2720},
{'I', 'S', 0x3000},
{',', '_', 0x3001},
{'.', '_', 0x3002},
{'+', '"', 0x3003},
{'+', '_', 0x3004},
{'*', '_', 0x3005},
{';', '_', 0x3006},
{'0', '_', 0x3007},
{'<', '+', 0x300a},
{'>', '+', 0x300b},
{'<', '\'', 0x300c},
{'>', '\'', 0x300d},
{'<', '"', 0x300e},
{'>', '"', 0x300f},
{'(', '"', 0x3010},
{')', '"', 0x3011},
{'=', 'T', 0x3012},
{'=', '_', 0x3013},
{'(', '\'', 0x3014},
{')', '\'', 0x3015},
{'(', 'I', 0x3016},
{')', 'I', 0x3017},
{'-', '?', 0x301c},
{'A', '5', 0x3041},
{'a', '5', 0x3042},
{'I', '5', 0x3043},
{'i', '5', 0x3044},
{'U', '5', 0x3045},
{'u', '5', 0x3046},
{'E', '5', 0x3047},
{'e', '5', 0x3048},
{'O', '5', 0x3049},
{'o', '5', 0x304a},
{'k', 'a', 0x304b},
{'g', 'a', 0x304c},
{'k', 'i', 0x304d},
{'g', 'i', 0x304e},
{'k', 'u', 0x304f},
{'g', 'u', 0x3050},
{'k', 'e', 0x3051},
{'g', 'e', 0x3052},
{'k', 'o', 0x3053},
{'g', 'o', 0x3054},
{'s', 'a', 0x3055},
{'z', 'a', 0x3056},
{'s', 'i', 0x3057},
{'z', 'i', 0x3058},
{'s', 'u', 0x3059},
{'z', 'u', 0x305a},
{'s', 'e', 0x305b},
{'z', 'e', 0x305c},
{'s', 'o', 0x305d},
{'z', 'o', 0x305e},
{'t', 'a', 0x305f},
{'d', 'a', 0x3060},
{'t', 'i', 0x3061},
{'d', 'i', 0x3062},
{'t', 'U', 0x3063},
{'t', 'u', 0x3064},
{'d', 'u', 0x3065},
{'t', 'e', 0x3066},
{'d', 'e', 0x3067},
{'t', 'o', 0x3068},
{'d', 'o', 0x3069},
{'n', 'a', 0x306a},
{'n', 'i', 0x306b},
{'n', 'u', 0x306c},
{'n', 'e', 0x306d},
{'n', 'o', 0x306e},
{'h', 'a', 0x306f},
{'b', 'a', 0x3070},
{'p', 'a', 0x3071},
{'h', 'i', 0x3072},
{'b', 'i', 0x3073},
{'p', 'i', 0x3074},
{'h', 'u', 0x3075},
{'b', 'u', 0x3076},
{'p', 'u', 0x3077},
{'h', 'e', 0x3078},
{'b', 'e', 0x3079},
{'p', 'e', 0x307a},
{'h', 'o', 0x307b},
{'b', 'o', 0x307c},
{'p', 'o', 0x307d},
{'m', 'a', 0x307e},
{'m', 'i', 0x307f},
{'m', 'u', 0x3080},
{'m', 'e', 0x3081},
{'m', 'o', 0x3082},
{'y', 'A', 0x3083},
{'y', 'a', 0x3084},
{'y', 'U', 0x3085},
{'y', 'u', 0x3086},
{'y', 'O', 0x3087},
{'y', 'o', 0x3088},
{'r', 'a', 0x3089},
{'r', 'i', 0x308a},
{'r', 'u', 0x308b},
{'r', 'e', 0x308c},
{'r', 'o', 0x308d},
{'w', 'A', 0x308e},
{'w', 'a', 0x308f},
{'w', 'i', 0x3090},
{'w', 'e', 0x3091},
{'w', 'o', 0x3092},
{'n', '5', 0x3093},
{'v', 'u', 0x3094},
{'"', '5', 0x309b},
{'0', '5', 0x309c},
{'*', '5', 0x309d},
{'+', '5', 0x309e},
{'a', '6', 0x30a1},
{'A', '6', 0x30a2},
{'i', '6', 0x30a3},
{'I', '6', 0x30a4},
{'u', '6', 0x30a5},
{'U', '6', 0x30a6},
{'e', '6', 0x30a7},
{'E', '6', 0x30a8},
{'o', '6', 0x30a9},
{'O', '6', 0x30aa},
{'K', 'a', 0x30ab},
{'G', 'a', 0x30ac},
{'K', 'i', 0x30ad},
{'G', 'i', 0x30ae},
{'K', 'u', 0x30af},
{'G', 'u', 0x30b0},
{'K', 'e', 0x30b1},
{'G', 'e', 0x30b2},
{'K', 'o', 0x30b3},
{'G', 'o', 0x30b4},
{'S', 'a', 0x30b5},
{'Z', 'a', 0x30b6},
{'S', 'i', 0x30b7},
{'Z', 'i', 0x30b8},
{'S', 'u', 0x30b9},
{'Z', 'u', 0x30ba},
{'S', 'e', 0x30bb},
{'Z', 'e', 0x30bc},
{'S', 'o', 0x30bd},
{'Z', 'o', 0x30be},
{'T', 'a', 0x30bf},
{'D', 'a', 0x30c0},
{'T', 'i', 0x30c1},
{'D', 'i', 0x30c2},
{'T', 'U', 0x30c3},
{'T', 'u', 0x30c4},
{'D', 'u', 0x30c5},
{'T', 'e', 0x30c6},
{'D', 'e', 0x30c7},
{'T', 'o', 0x30c8},
{'D', 'o', 0x30c9},
{'N', 'a', 0x30ca},
{'N', 'i', 0x30cb},
{'N', 'u', 0x30cc},
{'N', 'e', 0x30cd},
{'N', 'o', 0x30ce},
{'H', 'a', 0x30cf},
{'B', 'a', 0x30d0},
{'P', 'a', 0x30d1},
{'H', 'i', 0x30d2},
{'B', 'i', 0x30d3},
{'P', 'i', 0x30d4},
{'H', 'u', 0x30d5},
{'B', 'u', 0x30d6},
{'P', 'u', 0x30d7},
{'H', 'e', 0x30d8},
{'B', 'e', 0x30d9},
{'P', 'e', 0x30da},
{'H', 'o', 0x30db},
{'B', 'o', 0x30dc},
{'P', 'o', 0x30dd},
{'M', 'a', 0x30de},
{'M', 'i', 0x30df},
{'M', 'u', 0x30e0},
{'M', 'e', 0x30e1},
{'M', 'o', 0x30e2},
{'Y', 'A', 0x30e3},
{'Y', 'a', 0x30e4},
{'Y', 'U', 0x30e5},
{'Y', 'u', 0x30e6},
{'Y', 'O', 0x30e7},
{'Y', 'o', 0x30e8},
{'R', 'a', 0x30e9},
{'R', 'i', 0x30ea},
{'R', 'u', 0x30eb},
{'R', 'e', 0x30ec},
{'R', 'o', 0x30ed},
{'W', 'A', 0x30ee},
{'W', 'a', 0x30ef},
{'W', 'i', 0x30f0},
{'W', 'e', 0x30f1},
{'W', 'o', 0x30f2},
{'N', '6', 0x30f3},
{'V', 'u', 0x30f4},
{'K', 'A', 0x30f5},
{'K', 'E', 0x30f6},
{'V', 'a', 0x30f7},
{'V', 'i', 0x30f8},
{'V', 'e', 0x30f9},
{'V', 'o', 0x30fa},
{'.', '6', 0x30fb},
{'-', '6', 0x30fc},
{'*', '6', 0x30fd},
{'+', '6', 0x30fe},
{'b', '4', 0x3105},
{'p', '4', 0x3106},
{'m', '4', 0x3107},
{'f', '4', 0x3108},
{'d', '4', 0x3109},
{'t', '4', 0x310a},
{'n', '4', 0x310b},
{'l', '4', 0x310c},
{'g', '4', 0x310d},
{'k', '4', 0x310e},
{'h', '4', 0x310f},
{'j', '4', 0x3110},
{'q', '4', 0x3111},
{'x', '4', 0x3112},
{'z', 'h', 0x3113},
{'c', 'h', 0x3114},
{'s', 'h', 0x3115},
{'r', '4', 0x3116},
{'z', '4', 0x3117},
{'c', '4', 0x3118},
{'s', '4', 0x3119},
{'a', '4', 0x311a},
{'o', '4', 0x311b},
{'e', '4', 0x311c},
{'a', 'i', 0x311e},
{'e', 'i', 0x311f},
{'a', 'u', 0x3120},
{'o', 'u', 0x3121},
{'a', 'n', 0x3122},
{'e', 'n', 0x3123},
{'a', 'N', 0x3124},
{'e', 'N', 0x3125},
{'e', 'r', 0x3126},
{'i', '4', 0x3127},
{'u', '4', 0x3128},
{'i', 'u', 0x3129},
{'v', '4', 0x312a},
{'n', 'G', 0x312b},
{'g', 'n', 0x312c},
{'1', 'c', 0x3220},
{'2', 'c', 0x3221},
{'3', 'c', 0x3222},
{'4', 'c', 0x3223},
{'5', 'c', 0x3224},
{'6', 'c', 0x3225},
{'7', 'c', 0x3226},
{'8', 'c', 0x3227},
{'9', 'c', 0x3228},
/* code points 0xe000 - 0xefff excluded, they have no assigned
* characters, only used in proposals. */
{'f', 'f', 0xfb00},
{'f', 'i', 0xfb01},
{'f', 'l', 0xfb02},
{'f', 't', 0xfb05},
{'s', 't', 0xfb06},
/* Vim 5.x compatible digraphs that don't conflict with the above */
{'~', '!', 161}, /* ¡ */
{'c', '|', 162}, /* ¢ */
{'$', '$', 163}, /* £ */
{'o', 'x', 164}, /* ¤ - currency symbol in ISO 8859-1 */
{'Y', '-', 165}, /* ¥ */
{'|', '|', 166}, /* ¦ */
{'c', 'O', 169}, /* © */
{'-', ',', 172}, /* ¬ */
{'-', '=', 175}, /* ¯ */
{'~', 'o', 176}, /* ° */
{'2', '2', 178}, /* ² */
{'3', '3', 179}, /* ³ */
{'p', 'p', 182}, /* ¶ */
{'~', '.', 183}, /* · */
{'1', '1', 185}, /* ¹ */
{'~', '?', 191}, /* ¿ */
{'A', '`', 192}, /* À */
{'A', '^', 194}, /* Â */
{'A', '~', 195}, /* Ã */
{'A', '"', 196}, /* Ä */
{'A', '@', 197}, /* Å */
{'E', '`', 200}, /* È */
{'E', '^', 202}, /* Ê */
{'E', '"', 203}, /* Ë */
{'I', '`', 204}, /* Ì */
{'I', '^', 206}, /* Î */
{'I', '"', 207}, /* Ï */
{'N', '~', 209}, /* Ñ */
{'O', '`', 210}, /* Ò */
{'O', '^', 212}, /* Ô */
{'O', '~', 213}, /* Õ */
{'/', '\\', 215}, /* × - multiplication symbol in ISO 8859-1 */
{'U', '`', 217}, /* Ù */
{'U', '^', 219}, /* Û */
{'I', 'p', 222}, /* Þ */
{'a', '`', 224}, /* à */
{'a', '^', 226}, /* â */
{'a', '~', 227}, /* ã */
{'a', '"', 228}, /* ä */
{'a', '@', 229}, /* å */
{'e', '`', 232}, /* è */
{'e', '^', 234}, /* ê */
{'e', '"', 235}, /* ë */
{'i', '`', 236}, /* ì */
{'i', '^', 238}, /* î */
{'n', '~', 241}, /* ñ */
{'o', '`', 242}, /* ò */
{'o', '^', 244}, /* ô */
{'o', '~', 245}, /* õ */
{'u', '`', 249}, /* ù */
{'u', '^', 251}, /* û */
{'y', '"', 255}, /* x XX */
{NUL, NUL, NUL}
};
# endif /* OLD_DIGRAPHS */
# endif /* !HPUX_DIGRAPHS */
/*
* handle digraphs after typing a character
*/
int do_digraph(int c)
{
static int backspaced; /* character before K_BS */
static int lastchar; /* last typed character */
if (c == -1) { /* init values */
backspaced = -1;
} else if (p_dg) {
if (backspaced >= 0)
c = getdigraph(backspaced, c, FALSE);
backspaced = -1;
if ((c == K_BS || c == Ctrl_H) && lastchar >= 0)
backspaced = lastchar;
}
lastchar = c;
return c;
}
/*
* Get a digraph. Used after typing CTRL-K on the command line or in normal
* mode.
* Returns composed character, or NUL when ESC was used.
*/
int
get_digraph (
int cmdline /* TRUE when called from the cmdline */
)
{
int c, cc;
++no_mapping;
++allow_keys;
c = plain_vgetc();
--no_mapping;
--allow_keys;
if (c != ESC) { /* ESC cancels CTRL-K */
if (IS_SPECIAL(c)) /* insert special key code */
return c;
if (cmdline) {
if (char2cells(c) == 1
&& cmdline_star == 0
)
putcmdline(c, TRUE);
} else
add_to_showcmd(c);
++no_mapping;
++allow_keys;
cc = plain_vgetc();
--no_mapping;
--allow_keys;
if (cc != ESC) /* ESC cancels CTRL-K */
return getdigraph(c, cc, TRUE);
}
return NUL;
}
/*
* Lookup the pair "char1", "char2" in the digraph tables.
* If no match, return "char2".
* If "meta_char" is TRUE and "char1" is a space, return "char2" | 0x80.
*/
static int getexactdigraph(int char1, int char2, int meta_char)
{
int i;
int retval = 0;
digr_T *dp;
if (IS_SPECIAL(char1) || IS_SPECIAL(char2))
return char2;
/*
* Search user digraphs first.
*/
dp = (digr_T *)user_digraphs.ga_data;
for (i = 0; i < user_digraphs.ga_len; ++i) {
if ((int)dp->char1 == char1 && (int)dp->char2 == char2) {
retval = dp->result;
break;
}
++dp;
}
/*
* Search default digraphs.
*/
if (retval == 0) {
dp = digraphdefault;
for (i = 0; dp->char1 != 0; ++i) {
if ((int)dp->char1 == char1 && (int)dp->char2 == char2) {
retval = dp->result;
break;
}
++dp;
}
}
# ifdef USE_UNICODE_DIGRAPHS
if (retval != 0 && !enc_utf8) {
char_u buf[6], *to;
vimconv_T vc;
/*
* Convert the Unicode digraph to 'encoding'.
*/
i = utf_char2bytes(retval, buf);
retval = 0;
vc.vc_type = CONV_NONE;
if (convert_setup(&vc, (char_u *)"utf-8", p_enc) == OK) {
vc.vc_fail = TRUE;
to = string_convert(&vc, buf, &i);
if (to != NULL) {
retval = (*mb_ptr2char)(to);
vim_free(to);
}
(void)convert_setup(&vc, NULL, NULL);
}
}
# endif
/* Ignore multi-byte characters when not in multi-byte mode. */
if (!has_mbyte && retval > 0xff)
retval = 0;
if (retval == 0) { /* digraph deleted or not found */
if (char1 == ' ' && meta_char) /* <space> <char> --> meta-char */
return char2 | 0x80;
return char2;
}
return retval;
}
/*
* Get digraph.
* Allow for both char1-char2 and char2-char1
*/
int getdigraph(int char1, int char2, int meta_char)
{
int retval;
if (((retval = getexactdigraph(char1, char2, meta_char)) == char2)
&& (char1 != char2)
&& ((retval = getexactdigraph(char2, char1, meta_char)) == char1))
return char2;
return retval;
}
/*
* Add the digraphs in the argument to the digraph table.
* format: {c1}{c2} char {c1}{c2} char ...
*/
void putdigraph(char_u *str)
{
int char1, char2, n;
int i;
digr_T *dp;
while (*str != NUL) {
str = skipwhite(str);
if (*str == NUL)
return;
char1 = *str++;
char2 = *str++;
if (char2 == 0) {
EMSG(_(e_invarg));
return;
}
if (char1 == ESC || char2 == ESC) {
EMSG(_("E104: Escape not allowed in digraph"));
return;
}
str = skipwhite(str);
if (!VIM_ISDIGIT(*str)) {
EMSG(_(e_number_exp));
return;
}
n = getdigits(&str);
/* If the digraph already exists, replace the result. */
dp = (digr_T *)user_digraphs.ga_data;
for (i = 0; i < user_digraphs.ga_len; ++i) {
if ((int)dp->char1 == char1 && (int)dp->char2 == char2) {
dp->result = n;
break;
}
++dp;
}
/* Add a new digraph to the table. */
if (i == user_digraphs.ga_len) {
if (ga_grow(&user_digraphs, 1) == OK) {
dp = (digr_T *)user_digraphs.ga_data + user_digraphs.ga_len;
dp->char1 = char1;
dp->char2 = char2;
dp->result = n;
++user_digraphs.ga_len;
}
}
}
}
void listdigraphs(void) {
int i;
digr_T *dp;
msg_putchar('\n');
dp = digraphdefault;
for (i = 0; dp->char1 != NUL && !got_int; ++i) {
#if defined(USE_UNICODE_DIGRAPHS) && defined(FEAT_MBYTE)
digr_T tmp;
/* May need to convert the result to 'encoding'. */
tmp.char1 = dp->char1;
tmp.char2 = dp->char2;
tmp.result = getexactdigraph(tmp.char1, tmp.char2, FALSE);
if (tmp.result != 0 && tmp.result != tmp.char2
&& (has_mbyte || tmp.result <= 255))
printdigraph(&tmp);
#else
if (getexactdigraph(dp->char1, dp->char2, FALSE) == dp->result
&& (has_mbyte || dp->result <= 255)
)
printdigraph(dp);
#endif
++dp;
ui_breakcheck();
}
dp = (digr_T *)user_digraphs.ga_data;
for (i = 0; i < user_digraphs.ga_len && !got_int; ++i) {
printdigraph(dp);
ui_breakcheck();
++dp;
}
must_redraw = CLEAR; /* clear screen, because some digraphs may be
wrong, in which case we messed up ScreenLines */
}
static void printdigraph(digr_T *dp)
{
char_u buf[30];
char_u *p;
int list_width;
if ((dy_flags & DY_UHEX)
|| has_mbyte
)
list_width = 13;
else
list_width = 11;
if (dp->result != 0) {
if (msg_col > Columns - list_width)
msg_putchar('\n');
if (msg_col)
while (msg_col % list_width != 0)
msg_putchar(' ');
p = buf;
*p++ = dp->char1;
*p++ = dp->char2;
*p++ = ' ';
if (has_mbyte) {
/* add a space to draw a composing char on */
if (enc_utf8 && utf_iscomposing(dp->result))
*p++ = ' ';
p += (*mb_char2bytes)(dp->result, p);
} else
*p++ = (char_u)dp->result;
if (char2cells(dp->result) == 1)
*p++ = ' ';
vim_snprintf((char *)p, sizeof(buf) - (p - buf), " %3d", dp->result);
msg_outtrans(buf);
}
}
/* structure used for b_kmap_ga.ga_data */
typedef struct {
char_u *from;
char_u *to;
} kmap_T;
#define KMAP_MAXLEN 20 /* maximum length of "from" or "to" */
static void keymap_unload __ARGS((void));
/*
* Set up key mapping tables for the 'keymap' option.
* Returns NULL if OK, an error message for failure. This only needs to be
* used when setting the option, not later when the value has already been
* checked.
*/
char_u *keymap_init(void) {
curbuf->b_kmap_state &= ~KEYMAP_INIT;
if (*curbuf->b_p_keymap == NUL) {
/* Stop any active keymap and clear the table. Also remove
* b:keymap_name, as no keymap is active now. */
keymap_unload();
do_cmdline_cmd((char_u *)"unlet! b:keymap_name");
} else {
char_u *buf;
size_t buflen;
/* Source the keymap file. It will contain a ":loadkeymap" command
* which will call ex_loadkeymap() below. */
buflen = STRLEN(curbuf->b_p_keymap)
+ STRLEN(p_enc)
+ 14;
buf = alloc((unsigned)buflen);
if (buf == NULL)
return e_outofmem;
/* try finding "keymap/'keymap'_'encoding'.vim" in 'runtimepath' */
vim_snprintf((char *)buf, buflen, "keymap/%s_%s.vim",
curbuf->b_p_keymap, p_enc);
if (source_runtime(buf, FALSE) == FAIL) {
/* try finding "keymap/'keymap'.vim" in 'runtimepath' */
vim_snprintf((char *)buf, buflen, "keymap/%s.vim",
curbuf->b_p_keymap);
if (source_runtime(buf, FALSE) == FAIL) {
vim_free(buf);
return (char_u *)N_("E544: Keymap file not found");
}
}
vim_free(buf);
}
return NULL;
}
/*
* ":loadkeymap" command: load the following lines as the keymap.
*/
void ex_loadkeymap(exarg_T *eap)
{
char_u *line;
char_u *p;
char_u *s;
kmap_T *kp;
#define KMAP_LLEN 200 /* max length of "to" and "from" together */
char_u buf[KMAP_LLEN + 11];
int i;
char_u *save_cpo = p_cpo;
if (!getline_equal(eap->getline, eap->cookie, getsourceline)) {
EMSG(_("E105: Using :loadkeymap not in a sourced file"));
return;
}
/*
* Stop any active keymap and clear the table.
*/
keymap_unload();
curbuf->b_kmap_state = 0;
ga_init2(&curbuf->b_kmap_ga, (int)sizeof(kmap_T), 20);
/* Set 'cpoptions' to "C" to avoid line continuation. */
p_cpo = (char_u *)"C";
/*
* Get each line of the sourced file, break at the end.
*/
for (;; ) {
line = eap->getline(0, eap->cookie, 0);
if (line == NULL)
break;
p = skipwhite(line);
if (*p != '"' && *p != NUL && ga_grow(&curbuf->b_kmap_ga, 1) == OK) {
kp = (kmap_T *)curbuf->b_kmap_ga.ga_data + curbuf->b_kmap_ga.ga_len;
s = skiptowhite(p);
kp->from = vim_strnsave(p, (int)(s - p));
p = skipwhite(s);
s = skiptowhite(p);
kp->to = vim_strnsave(p, (int)(s - p));
if (kp->from == NULL || kp->to == NULL
|| STRLEN(kp->from) + STRLEN(kp->to) >= KMAP_LLEN
|| *kp->from == NUL || *kp->to == NUL) {
if (kp->to != NULL && *kp->to == NUL)
EMSG(_("E791: Empty keymap entry"));
vim_free(kp->from);
vim_free(kp->to);
} else
++curbuf->b_kmap_ga.ga_len;
}
vim_free(line);
}
/*
* setup ":lnoremap" to map the keys
*/
for (i = 0; i < curbuf->b_kmap_ga.ga_len; ++i) {
vim_snprintf((char *)buf, sizeof(buf), "<buffer> %s %s",
((kmap_T *)curbuf->b_kmap_ga.ga_data)[i].from,
((kmap_T *)curbuf->b_kmap_ga.ga_data)[i].to);
(void)do_map(2, buf, LANGMAP, FALSE);
}
p_cpo = save_cpo;
curbuf->b_kmap_state |= KEYMAP_LOADED;
status_redraw_curbuf();
}
/*
* Stop using 'keymap'.
*/
static void keymap_unload(void) {
char_u buf[KMAP_MAXLEN + 10];
int i;
char_u *save_cpo = p_cpo;
kmap_T *kp;
if (!(curbuf->b_kmap_state & KEYMAP_LOADED))
return;
/* Set 'cpoptions' to "C" to avoid line continuation. */
p_cpo = (char_u *)"C";
/* clear the ":lmap"s */
kp = (kmap_T *)curbuf->b_kmap_ga.ga_data;
for (i = 0; i < curbuf->b_kmap_ga.ga_len; ++i) {
vim_snprintf((char *)buf, sizeof(buf), "<buffer> %s", kp[i].from);
(void)do_map(1, buf, LANGMAP, FALSE);
vim_free(kp[i].from);
vim_free(kp[i].to);
}
p_cpo = save_cpo;
ga_clear(&curbuf->b_kmap_ga);
curbuf->b_kmap_state &= ~KEYMAP_LOADED;
status_redraw_curbuf();
}