2510 lines · 54.4 KB · C
RawDownload
/* 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" #if defined(FEAT_DIGRAPHS) || defined(PROTO) #ifdef FEAT_MBYTEtypedef int result_T;#elsetypedef char_u result_T;#endif 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, 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[] =#if defined(MSDOS) || defined(OS2)	/*	 * MSDOS digraphs.	 */       {{'C', ',', 128},	/* ~@ XX */	{'u', '"', 129},	/*  */	{'e', '\'', 130},	/* ‚ */	{'a', '^', 131},	/* ƒ */	{'a', '"', 132},	/* „ */	{'a', '`', 133},	/* … */	{'a', '@', 134},	/* † */	{'c', ',', 135},	/* ~G XX */	{'e', '^', 136},	/* ~H XX */	{'e', '"', 137},	/* ‰ */	{'e', '`', 138},	/* Š */	{'i', '"', 139},	/* ‹ */	{'i', '^', 140},	/* Œ */	{'i', '`', 141},	/*  */	{'A', '"', 142},	/* ~N XX */	{'A', '@', 143},	/*  */	{'E', '\'', 144},	/*  */	{'a', 'e', 145},	/* ‘ */	{'A', 'E', 146},	/* ’ */	{'o', '^', 147},	/* “ */	{'o', '"', 148},	/* ” */	{'o', '`', 149},	/* • */	{'u', '^', 150},	/* – */	{'u', '`', 151},	/* — */	{'y', '"', 152},	/* ˜ */	{'O', '"', 153},	/* ™ */	{'U', '"', 154},	/* š */	{'c', '|', 155},	/* › */	{'$', '$', 156},	/* œ */	{'Y', '-', 157},	/* ~] XX */	{'P', 't', 158},	/* ž */	{'f', 'f', 159},	/* Ÿ */	{'a', '\'', 160},	/*   */	{'i', '\'', 161},	/* ¡ */	{'o', '\'', 162},	/* ¢ */	{'u', '\'', 163},	/* x XX */	{'n', '~', 164},	/* ¤ */	{'N', '~', 165},	/* ¥ */	{'a', 'a', 166},	/* ¦ */	{'o', 'o', 167},	/* § */	{'~', '?', 168},	/* ¨ */	{'-', 'a', 169},	/* © */	{'a', '-', 170},	/* ª */	{'1', '2', 171},	/* « */	{'1', '4', 172},	/* ¬ */	{'~', '!', 173},	/* ­ */	{'<', '<', 174},	/* ® */	{'>', '>', 175},	/* ¯ */ 	{'s', 's', 225},	/* á */	{'j', 'u', 230},	/* æ */	{'o', '/', 237},	/* í */	{'+', '-', 241},	/* ñ */	{'>', '=', 242},	/* ò */	{'<', '=', 243},	/* ó */	{':', '-', 246},	/* ö */	{'~', '~', 247},	/* ÷ */	{'~', 'o', 248},	/* ø */	{'2', '2', 253},	/* ý */	{NUL, NUL, NUL}	}; #else	/* !MSDOS && !OS2 */# ifdef __MINT__ 	/*	 * ATARI digraphs	 */       {{'C', ',', 128},	/* ~@ XX */	{'u', '"', 129},	/*  */	{'e', '\'', 130},	/* ‚ */	{'a', '^', 131},	/* ƒ */	{'a', '"', 132},	/* „ */	{'a', '`', 133},	/* … */	{'a', '@', 134},	/* † */	{'c', ',', 135},	/* ~G XX */	{'e', '^', 136},	/* ~H XX */	{'e', '"', 137},	/* ‰ */	{'e', '`', 138},	/* Š */	{'i', '"', 139},	/* ‹ */	{'i', '^', 140},	/* Œ */	{'i', '`', 141},	/*  */	{'A', '"', 142},	/* Ž */	{'A', '@', 143},	/*  */	{'E', '\'', 144},	/*  */	{'a', 'e', 145},	/* ‘ */	{'A', 'E', 146},	/* ’ */	{'o', '^', 147},	/* “ */	{'o', '"', 148},	/* ” */	{'o', '`', 149},	/* • */	{'u', '^', 150},	/* – */	{'u', '`', 151},	/* — */	{'y', '"', 152},	/* ˜ */	{'O', '"', 153},	/* ™ */	{'U', '"', 154},	/* š */	{'c', '|', 155},	/* › */	{'$', '$', 156},	/* œ */	{'Y', '-', 157},	/* ~] XX */	{'s', 's', 158},	/* ž */	{'f', 'f', 159},	/* Ÿ */	{'a', '\'', 160},	/*   */	{'i', '\'', 161},	/* ¡ */	{'o', '\'', 162},	/* ¢ */	{'u', '\'', 163},	/* £ */	{'n', '~', 164},	/* ¤ */	{'N', '~', 165},	/* ¥ */	{'a', 'a', 166},	/* ¦ */	{'o', 'o', 167},	/* § */	{'~', '?', 168},	/* ¨ */	{'-', 'a', 169},	/* © */	{'a', '-', 170},	/* ª */	{'1', '2', 171},	/* « */	{'1', '4', 172},	/* ¬ */	{'~', '!', 173},	/* ­ */	{'<', '<', 174},	/* ® */	{'>', '>', 175},	/* ¯ */	{'j', 'u', 230},	/* æ */	{'o', '/', 237},	/* í */	{'+', '-', 241},	/* ñ */	{'>', '=', 242},	/* ò */	{'<', '=', 243},	/* ó */	{':', '-', 246},	/* ö */	{'~', '~', 247},	/* ÷ */	{'~', 'o', 248},	/* ø */	{'2', '2', 253},	/* ý */	{NUL, NUL, NUL}	}; # else	/* !__MINT__ */#  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 EBCDIC 	/*	 * EBCDIC - ISO digraphs	 * TODO: EBCDIC Table is Code-Page 1047	 */       {{'a', '^',    66},	/* â */	{'a', '"',    67},	/* ä */	{'a', '`',    68},	/* à */	{'a', '\'',   69},	/* á */	{'a', '~',    70},	/* ã */	{'a', '@',    71},	/* å */	{'a', 'a',    71},	/* å */	{'c', ',',    72},	/* ç */	{'n', '~',    73},	/* ñ */	{'c', '|',    74},	/* ¢ */	{'e', '\'',   81},	/* é */	{'e', '^',    82},	/* ê */	{'e', '"',    83},	/* ë */	{'e', '`',    84},	/* è */	{'i', '\'',   85},	/* í */	{'i', '^',    86},	/* î */	{'i', '"',    87},	/* ï */	{'i', '`',    88},	/* ì */	{'s', 's',    89},	/* ß */	{'A', '^',    98},	/*  */	{'A', '"',    99},	/* Ä */	{'A', '`',   100},	/* À */	{'A', '\'',  101},	/* Á */	{'A', '~',   102},	/* à */	{'A', '@',   103},	/* Å */	{'A', 'A',   103},	/* Å */	{'C', ',',   104},	/* Ç */	{'N', '~',   105},	/* Ñ */	{'|', '|',   106},	/* ¦ */	{'o', '/',   112},	/* ø */	{'E', '\'',  113},	/* É */	{'E', '^',   114},	/* Ê */	{'E', '"',   115},	/* Ë */	{'E', '`',   116},	/* È */	{'I', '\'',  117},	/* Í */	{'I', '^',   118},	/* Î */	{'I', '"',   119},	/* Ï */	{'I', '`',   120},	/* Ì */	{'O', '/',   128},	/* 0/ XX */	{'<', '<',   138},	/* « */	{'>', '>',   139},	/* » */	{'d', '-',   140},	/* ð */	{'y', '\'',  141},	/* ý */	{'i', 'p',   142},	/* þ */	{'+', '-',   143},	/* ± */	{'~', 'o',   144},	/* ° */	{'a', '-',   154},	/* ª */	{'o', '-',   155},	/* º */	{'a', 'e',   156},	/* æ */	{',', ',',   157},	/* , XX */	{'A', 'E',   158},	/* Æ */	{'o', 'x',   159},	/* ¤ - currency symbol in ISO 8859-1 */	{'e', '=',   159},	/* ¤ - euro symbol in ISO 8859-15 */	{'E', 'u',   159},	/* ¤ - euro symbol in ISO 8859-15 */	{'j', 'u',   160},	/* µ */	{'y', '"',   167},	/* x XX */	{'~', '!',   170},	/* ¡ */	{'~', '?',   171},	/* ¿ */	{'D', '-',   172},	/* Ð */	{'I', 'p',   174},	/* Þ */	{'r', 'O',   175},	/* ® */	{'-', ',',   176},	/* ¬ */	{'$', '$',   177},	/* £ */	{'Y', '-',   178},	/* ¥ */	{'~', '.',   179},	/* · */	{'c', 'O',   180},	/* © */	{'p', 'a',   181},	/* § */	{'p', 'p',   182},	/* ¶ */	{'1', '4',   183},	/* ¼ */	{'1', '2',   184},	/* ½ */	{'3', '4',   185},	/* ¾ */	{'Y', '\'',  186},	/* Ý */	{'"', '"',   187},	/* ¨ */	{'-', '=',   188},	/* ¯ */	{'\'', '\'', 190},	/* ´ */	{'O', 'E',   191},	/* × - OE in ISO 8859-15 */	{'/', '\\',  191},	/* × - multiplication symbol in ISO 8859-1 */	{'-', '-',   202},	/* ­ */	{'o', '^',   203},	/* ô */	{'o', '"',   204},	/* ö */	{'o', '`',   205},	/* ò */	{'o', '\'',  206},	/* ó */	{'o', '~',   207},	/* õ */	{'1', '1',   218},	/* ¹ */	{'u', '^',   219},	/* û */	{'u', '"',   220},	/* ü */	{'u', '`',   221},	/* ù */	{'u', '\'',  222},	/* ú */	{':', '-',   225},	/* ÷ - division symbol in ISO 8859-1 */	{'o', 'e',   225},	/* ÷ - oe in ISO 8859-15 */	{'2', '2',   234},	/* ² */	{'O', '^',   235},	/* Ô */	{'O', '"',   236},	/* Ö */	{'O', '`',   237},	/* Ò */	{'O', '\'',  238},	/* Ó */	{'O', '~',   239},	/* Õ */	{'3', '3',   250},	/* ³ */	{'U', '^',   251},	/* Û */	{'U', '"',   252},	/* Ü */	{'U', '`',   253},	/* Ù */	{'U', '\'',  254},	/* Ú */	{NUL, NUL, NUL}	}; #   else#    if defined(MACOS) && !defined(FEAT_MBYTE) 	/*	 * Macintosh digraphs	 */       {{'a', 't', 64},		/* @ */	{'A', '"', 128},	/* ~@ XX */	{'A', 'o', 129},	/* Å */	{'C', ',', 130},	/* Ç */	{'E', '\'', 131},	/* É */	{'N', '~', 132},	/* Ñ */	{'O', '"', 133},	/* Ö */	{'U', '"', 134},	/* Ü */	{'a', '\'', 135},	/* ~G XX */	{'a', '`', 136},	/* ~H XX */	{'a', '^', 137},	/* â */	{'a', '"', 138},	/* ä */	{'a', '~', 139},	/* ã */	{'a', 'o', 140},	/* å */	{'c', ',', 141},	/* ç */	{'e', '\'', 142},	/* é */	{'e', '`', 143},	/* è */	{'e', '^', 144},	/* ê */	{'e', '"', 145},	/* ë */	{'i', '\'', 146},	/* í */	{'i', '`', 147},	/* ì */	{'i', '^', 148},	/* î */	{'i', '"', 149},	/* ï */	{'n', '~', 150},	/* ñ */	{'o', '\'', 151},	/* ó */	{'o', '`', 152},	/* ò */	{'o', '^', 153},	/* ô */	{'o', '"', 154},	/* ö */	{'o', '~', 155},	/* o */	{'u', '\'', 156},	/* ú */	{'u', '`', 157},	/* ~] XX */	{'u', '^', 158},	/* û */	{'u', '"', 159},	/* ü */	{'+', '_', 160},	/* Ý */	{'~', 'o', 161},	/* ° */	{'c', '|', 162},	/* ¢ */	{'$', '$', 163},	/* £ */	{'p', 'a', 164},	/* § */	{'.', '.', 165},	/* * */	{'P', 'P', 166},	/* ¶ */	{'s', 's', 167},	/* ß */	{'r', 'O', 168},	/* ® */	{'c', 'O', 169},	/* © */	{'T', 'M', 170},	/*  */	{'=', '/', 173},	/* ‚ */	{'A', 'E', 174},	/* Æ */	{'O', '/', 175},	/* Ø */	{'0', '0', 176},	/* ƒ */	{'+', '-', 177},	/* ± */	{'<', '=', 178},	/* ¾ */	{'>', '=', 179},	/* „ */	{'Y', '-', 180},	/* ¥ */	{'j', 'u', 181},	/* µ */	{'m', 'u', 181},	/* µ */	{'d', 'd', 182},	/*  */	{'S', 'S', 183},	/* … */	{'S', 'I', 183},	/* … */	{'P', 'I', 184},	/* ½ */	{'p', 'i', 185},	/* ¼ */	{'I', 'I', 186},	/* † */	{'a', '-', 187},	/* » */	{'o', '-', 188},	/* º */	{'O', 'M', 189},	/* ½ */	{'a', 'e', 190},	/* æ */	{'o', '/', 191},	/* ø */	{'~', '?', 192},	/* ¿ */	{'~', '!', 193},	/* ¡ */	{'-', ',', 194},	/* ¬ */	{'v', '-', 195},	/* ~H XX */	{'f', '-', 196},	/* Ÿ */	{'~', '~', 197},	/* ‰ */	{'D', 'E', 198},	/*  */	{'<', '<', 199},	/* « */	{'>', '>', 200},	/* » */	{'.', ':', 201},	/* Š */	{'A', '`', 203},	/* À */	{'A', '~', 204},	/* à */	{'O', '~', 205},	/* Õ */	{'O', 'E', 206},	/* ‘ */	{'o', 'e', 207},	/* ¦ */	{'-', '.', 208},	/* - */	{'-', '-', 209},	/* - */	{'`', '`', 210},	/* " */	{'\'', '\'', 211},	/* " */	{'`', ' ', 212},	/* ' */	{'\'', ' ', 213},	/* ' */	{'-', ':', 214},	/* ÷ */	{'D', 'I', 215},	/* × */	{'y', ':', 216},	/* ÿ */	{'Y', ':', 217},	/*  */	{'/', '/', 218},	/* Ž */	{'E', '=', 219},	/* ¤ Euro System >=8.5 */	{'o', 'x', 219},	/* ¤ Currency System <=8.1*/	{'<', ' ', 220},	/* Ð */	{'>', ' ', 221},	/* ð */	{'f', 'i', 222},	/* Þ */	{'f', 'l', 223},	/* þ */	{'+', '+', 224},	/* ý */	{'~', '.', 225},	/* · */	{',', ' ', 226},	/* ’ */	{',', ',', 227},	/* “ */	{'%', '.', 228},	/* ” */	{'%', '0', 228},	/* ” */	{'A', '^', 229},	/*  */	{'E', '^', 230},	/* Ê */

Lines 1–500 of 2510.