X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/5def752285da767c159c1ef88fe7f927dc5286f2..6f1e7b78af0f9c4c502609392f62771cf2528d8f:/unicode.c diff --git a/unicode.c b/unicode.c index 506aab3f..11357e60 100644 --- a/unicode.c +++ b/unicode.c @@ -18,7 +18,7 @@ */ static char **uni_tbl; -static WCHAR unitab_xterm_std[32] = { +static const WCHAR unitab_xterm_std[32] = { 0x2666, 0x2592, 0x2409, 0x240c, 0x240d, 0x240a, 0x00b0, 0x00b1, 0x2424, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c, 0x23ba, 0x23bb, 0x2500, 0x23bc, 0x23bd, 0x251c, 0x2524, 0x2534, 0x252c, @@ -32,14 +32,15 @@ static WCHAR unitab_xterm_std[32] = { */ /* - * Tables for ISO-8859-{1-9,13-16} derived from those downloaded + * Tables for ISO-8859-{1-10,13-16} derived from those downloaded * 2001-10-02 from -- jtn + * Table for ISO-8859-11 derived from same on 2002-11-18. -- bjh21 */ /* XXX: This could be done algorithmically, but I'm not sure it's * worth the hassle -- jtn */ /* ISO/IEC 8859-1:1998 (Latin-1, "Western", "West European") */ -static wchar_t iso_8859_1[] = { +static const wchar_t iso_8859_1[] = { 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, @@ -54,8 +55,8 @@ static wchar_t iso_8859_1[] = { 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF }; -/* ISO 8859-2:1999 (Latin-2, "Central European", "East European") */ -static wchar_t iso_8859_2[] = { +/* ISO/IEC 8859-2:1999 (Latin-2, "Central European", "East European") */ +static const wchar_t iso_8859_2[] = { 0x00A0, 0x0104, 0x02D8, 0x0141, 0x00A4, 0x013D, 0x015A, 0x00A7, 0x00A8, 0x0160, 0x015E, 0x0164, 0x0179, 0x00AD, 0x017D, 0x017B, 0x00B0, 0x0105, 0x02DB, 0x0142, 0x00B4, 0x013E, 0x015B, 0x02C7, @@ -71,7 +72,7 @@ static wchar_t iso_8859_2[] = { }; /* ISO/IEC 8859-3:1999 (Latin-3, "South European", "Maltese & Esperanto") */ -static wchar_t iso_8859_3[] = { +static const wchar_t iso_8859_3[] = { 0x00A0, 0x0126, 0x02D8, 0x00A3, 0x00A4, 0xFFFD, 0x0124, 0x00A7, 0x00A8, 0x0130, 0x015E, 0x011E, 0x0134, 0x00AD, 0xFFFD, 0x017B, 0x00B0, 0x0127, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x0125, 0x00B7, @@ -87,7 +88,7 @@ static wchar_t iso_8859_3[] = { }; /* ISO/IEC 8859-4:1998 (Latin-4, "North European") */ -static wchar_t iso_8859_4[] = { +static const wchar_t iso_8859_4[] = { 0x00A0, 0x0104, 0x0138, 0x0156, 0x00A4, 0x0128, 0x013B, 0x00A7, 0x00A8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00AD, 0x017D, 0x00AF, 0x00B0, 0x0105, 0x02DB, 0x0157, 0x00B4, 0x0129, 0x013C, 0x02C7, @@ -102,8 +103,8 @@ static wchar_t iso_8859_4[] = { 0x00F8, 0x0173, 0x00FA, 0x00FB, 0x00FC, 0x0169, 0x016B, 0x02D9 }; -/* ISO 8859-5:1999 (Latin/Cyrillic) */ -static wchar_t iso_8859_5[] = { +/* ISO/IEC 8859-5:1999 (Latin/Cyrillic) */ +static const wchar_t iso_8859_5[] = { 0x00A0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409, 0x040A, 0x040B, 0x040C, 0x00AD, 0x040E, 0x040F, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, @@ -118,8 +119,8 @@ static wchar_t iso_8859_5[] = { 0x0458, 0x0459, 0x045A, 0x045B, 0x045C, 0x00A7, 0x045E, 0x045F }; -/* ISO 8859-6:1999 (Latin/Arabic) */ -static wchar_t iso_8859_6[] = { +/* ISO/IEC 8859-6:1999 (Latin/Arabic) */ +static const wchar_t iso_8859_6[] = { 0x00A0, 0xFFFD, 0xFFFD, 0xFFFD, 0x00A4, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0x060C, 0x00AD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, @@ -135,7 +136,7 @@ static wchar_t iso_8859_6[] = { }; /* ISO 8859-7:1987 (Latin/Greek) */ -static wchar_t iso_8859_7[] = { +static const wchar_t iso_8859_7[] = { 0x00A0, 0x2018, 0x2019, 0x00A3, 0xFFFD, 0xFFFD, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0xFFFD, 0x00AB, 0x00AC, 0x00AD, 0xFFFD, 0x2015, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x0384, 0x0385, 0x0386, 0x00B7, @@ -151,7 +152,7 @@ static wchar_t iso_8859_7[] = { }; /* ISO/IEC 8859-8:1999 (Latin/Hebrew) */ -static wchar_t iso_8859_8[] = { +static const wchar_t iso_8859_8[] = { 0x00A0, 0xFFFD, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00D7, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, @@ -167,7 +168,7 @@ static wchar_t iso_8859_8[] = { }; /* ISO/IEC 8859-9:1999 (Latin-5, "Turkish") */ -static wchar_t iso_8859_9[] = { +static const wchar_t iso_8859_9[] = { 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, @@ -182,15 +183,12 @@ static wchar_t iso_8859_9[] = { 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0131, 0x015F, 0x00FF }; -/* ISO 8859-10:1993? (Latin-6, "Nordic" [Sami, Inuit, Icelandic]) */ -/* Translation table from RDB. unicode.org (ISO/IEC 8859-10:1998) has - * U+2015 (HORIZONTAL BAR) at codepoint 0xBD instead - * (U+2014 is EM DASH). -- jtn */ -static wchar_t iso_8859_10[] = { +/* ISO/IEC 8859-10:1998 (Latin-6, "Nordic" [Sami, Inuit, Icelandic]) */ +static const wchar_t iso_8859_10[] = { 0x00A0, 0x0104, 0x0112, 0x0122, 0x012A, 0x0128, 0x0136, 0x00A7, 0x013B, 0x0110, 0x0160, 0x0166, 0x017D, 0x00AD, 0x016A, 0x014A, 0x00B0, 0x0105, 0x0113, 0x0123, 0x012B, 0x0129, 0x0137, 0x00B7, - 0x013C, 0x0111, 0x0161, 0x0167, 0x017E, 0x2014, 0x016B, 0x014B, + 0x013C, 0x0111, 0x0161, 0x0167, 0x017E, 0x2015, 0x016B, 0x014B, 0x0100, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x012E, 0x010C, 0x00C9, 0x0118, 0x00CB, 0x0116, 0x00CD, 0x00CE, 0x00CF, 0x00D0, 0x0145, 0x014C, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x0168, @@ -201,10 +199,8 @@ static wchar_t iso_8859_10[] = { 0x00F8, 0x0173, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x0138 }; -/* "ISO 8859-11:1997" ("Thai", "TIS620") */ -/* From RDB -- ISO and unicode.org disclaim all knowledge of this one. - * Maybe still in draft. --jtn */ -static wchar_t iso_8859_11[] = { +/* ISO/IEC 8859-11:2001 ("Thai", "TIS620") */ +static const wchar_t iso_8859_11[] = { 0x00A0, 0x0E01, 0x0E02, 0x0E03, 0x0E04, 0x0E05, 0x0E06, 0x0E07, 0x0E08, 0x0E09, 0x0E0A, 0x0E0B, 0x0E0C, 0x0E0D, 0x0E0E, 0x0E0F, 0x0E10, 0x0E11, 0x0E12, 0x0E13, 0x0E14, 0x0E15, 0x0E16, 0x0E17, @@ -220,7 +216,7 @@ static wchar_t iso_8859_11[] = { }; /* ISO/IEC 8859-13:1998 (Latin-7, "Baltic Rim") */ -static wchar_t iso_8859_13[] = { +static const wchar_t iso_8859_13[] = { 0x00A0, 0x201D, 0x00A2, 0x00A3, 0x00A4, 0x201E, 0x00A6, 0x00A7, 0x00D8, 0x00A9, 0x0156, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00C6, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x201C, 0x00B5, 0x00B6, 0x00B7, @@ -236,7 +232,7 @@ static wchar_t iso_8859_13[] = { }; /* ISO/IEC 8859-14:1998 (Latin-8, "Celtic", "Gaelic/Welsh") */ -static wchar_t iso_8859_14[] = { +static const wchar_t iso_8859_14[] = { 0x00A0, 0x1E02, 0x1E03, 0x00A3, 0x010A, 0x010B, 0x1E0A, 0x00A7, 0x1E80, 0x00A9, 0x1E82, 0x1E0B, 0x1EF2, 0x00AD, 0x00AE, 0x0178, 0x1E1E, 0x1E1F, 0x0120, 0x0121, 0x1E40, 0x1E41, 0x00B6, 0x1E56, @@ -252,7 +248,7 @@ static wchar_t iso_8859_14[] = { }; /* ISO/IEC 8859-15:1999 (Latin-9 aka -0, "euro") */ -static wchar_t iso_8859_15[] = { +static const wchar_t iso_8859_15[] = { 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AC, 0x00A5, 0x0160, 0x00A7, 0x0161, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x017D, 0x00B5, 0x00B6, 0x00B7, @@ -268,7 +264,7 @@ static wchar_t iso_8859_15[] = { }; /* ISO/IEC 8859-16:2001 (Latin-10, "Balkan") */ -static wchar_t iso_8859_16[] = { +static const wchar_t iso_8859_16[] = { 0x00A0, 0x0104, 0x0105, 0x0141, 0x20AC, 0x201E, 0x0160, 0x00A7, 0x0161, 0x00A9, 0x0218, 0x00AB, 0x0179, 0x00AD, 0x017A, 0x017B, 0x00B0, 0x00B1, 0x010C, 0x0142, 0x017D, 0x201D, 0x00B6, 0x00B7, @@ -283,7 +279,7 @@ static wchar_t iso_8859_16[] = { 0x0171, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x0119, 0x021B, 0x00FF }; -static wchar_t roman8[] = { +static const wchar_t roman8[] = { 0x00A0, 0x00C0, 0x00C2, 0x00C8, 0x00CA, 0x00CB, 0x00CE, 0x00CF, 0x00B4, 0x02CB, 0x02C6, 0x00A8, 0x02DC, 0x00D9, 0x00DB, 0x20A4, 0x00AF, 0x00DD, 0x00FD, 0x00B0, 0x00C7, 0x00E7, 0x00D1, 0x00F1, @@ -298,7 +294,7 @@ static wchar_t roman8[] = { 0x00BD, 0x00AA, 0x00BA, 0x00AB, 0x25A0, 0x00BB, 0x00B1, 0xFFFD }; -static wchar_t koi8_u[] = { +static const wchar_t koi8_u[] = { 0x2500, 0x2502, 0x250C, 0x2510, 0x2514, 0x2518, 0x251C, 0x2524, 0x252C, 0x2534, 0x253C, 0x2580, 0x2584, 0x2588, 0x258C, 0x2590, 0x2591, 0x2592, 0x2593, 0x2320, 0x25A0, 0x2022, 0x221A, 0x2248, @@ -317,7 +313,7 @@ static wchar_t koi8_u[] = { 0x042C, 0x042B, 0x0417, 0x0428, 0x042D, 0x0429, 0x0427, 0x042A }; -static wchar_t vscii[] = { +static const wchar_t vscii[] = { 0x0000, 0x0001, 0x1EB2, 0x0003, 0x0004, 0x1EB4, 0x1EAA, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, 0x0010, 0x0011, 0x0012, 0x0013, 0x1EF6, 0x0015, 0x0016, 0x0017, @@ -352,7 +348,7 @@ static wchar_t vscii[] = { 0x1EE5, 0x00F9, 0x00FA, 0x0169, 0x1EE7, 0x00FD, 0x1EE3, 0x1EEE }; -static wchar_t dec_mcs[] = { +static const wchar_t dec_mcs[] = { 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0xFFFD, 0x00A5, 0xFFFD, 0x00A7, 0x00A4, 0x00A9, 0x00AA, 0x00AB, 0xFFFD, 0xFFFD, 0xFFFD, 0xFFFD, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0xFFFD, 0x00B5, 0x00B6, 0x00B7, @@ -371,10 +367,10 @@ struct cp_list_item { char *name; int codepage; int cp_size; - wchar_t *cp_table; + const wchar_t *cp_table; }; -static struct cp_list_item cp_list[] = { +static const struct cp_list_item cp_list[] = { {"ISO-8859-1:1998 (Latin-1, West Europe)", 0, 96, iso_8859_1}, {"ISO-8859-2:1999 (Latin-2, East Europe)", 0, 96, iso_8859_2}, {"ISO-8859-3:1999 (Latin-3, South Europe)", 0, 96, iso_8859_3}, @@ -384,8 +380,8 @@ static struct cp_list_item cp_list[] = { {"ISO-8859-7:1987 (Latin/Greek)", 0, 96, iso_8859_7}, {"ISO-8859-8:1999 (Latin/Hebrew)", 0, 96, iso_8859_8}, {"ISO-8859-9:1999 (Latin-5, Turkish)", 0, 96, iso_8859_9}, - {"ISO-8859-10:1993 (Latin-6, Nordic)", 0, 96, iso_8859_10}, - {"ISO-8859-11:1997 (Latin/Thai)", 0, 96, iso_8859_11}, + {"ISO-8859-10:1998 (Latin-6, Nordic)", 0, 96, iso_8859_10}, + {"ISO-8859-11:2001 (Latin/Thai)", 0, 96, iso_8859_11}, {"ISO-8859-13:1998 (Latin-7, Baltic)", 0, 96, iso_8859_13}, {"ISO-8859-14:1998 (Latin-8, Celtic)", 0, 96, iso_8859_14}, {"ISO-8859-15:1999 (Latin-9, \"euro\")", 0, 96, iso_8859_15}, @@ -982,7 +978,7 @@ int check_compose(int first, int second) int decode_codepage(char *cp_name) { char *s, *d; - struct cp_list_item *cpi; + const struct cp_list_item *cpi; int codepage = -1; CPINFO cpinfo; @@ -1092,7 +1088,7 @@ int decode_codepage(char *cp_name) char *cp_name(int codepage) { - struct cp_list_item *cpi, *cpno; + const struct cp_list_item *cpi, *cpno; static char buf[32]; if (codepage == -1) {