#include "lstream.h"
#include "device.h"
#include "faces.h"
+#include "mule-ccl.h"
/* The various pre-defined charsets. */
Lisp_Object Vcharset_japanese_jisx0212;
Lisp_Object Vcharset_chinese_cns11643_1;
Lisp_Object Vcharset_chinese_cns11643_2;
+#ifdef UTF2000
+Lisp_Object Vcharset_chinese_cns11643_3;
+Lisp_Object Vcharset_chinese_cns11643_4;
+Lisp_Object Vcharset_chinese_cns11643_5;
+Lisp_Object Vcharset_chinese_cns11643_6;
+Lisp_Object Vcharset_chinese_cns11643_7;
+Lisp_Object Vcharset_ucs_bmp;
+Lisp_Object Vcharset_latin_viscii_lower;
+Lisp_Object Vcharset_latin_viscii_upper;
+#endif
Lisp_Object Vcharset_chinese_big5_1;
Lisp_Object Vcharset_chinese_big5_2;
#endif /* ENABLE_COMPOSITE_CHARS */
/* Table of charsets indexed by leading byte. */
-Lisp_Object charset_by_leading_byte[128];
+Lisp_Object charset_by_leading_byte[NUM_LEADING_BYTES];
/* Table of charsets indexed by type/final-byte/direction. */
+#ifdef UTF2000
+Lisp_Object charset_by_attributes[4][128];
+#else
Lisp_Object charset_by_attributes[4][128][2];
+#endif
+#ifndef UTF2000
/* Table of number of bytes in the string representation of a character
indexed by the first byte of that representation.
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
/* 0x80 - 0x8f are for Dimension-1 official charsets */
+#ifdef CHAR_IS_UCS4
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3,
+#else
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+#endif
/* 0x90 - 0x9d are for Dimension-2 official charsets */
/* 0x9e is for Dimension-1 private charsets */
/* 0x9f is for Dimension-2 private charsets */
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4
};
+#endif
+
+#ifdef UTF2000
+Emchar_to_byte_table*
+make_byte_from_character_table ()
+{
+ Emchar_to_byte_table* table
+ = (Emchar_to_byte_table*) xmalloc (sizeof (Emchar_to_byte_table));
+
+ table->base = NULL;
+ return table;
+}
+
+void
+put_byte_from_character_table (Emchar ch, unsigned char val,
+ Emchar_to_byte_table* table)
+{
+ if (table->base == NULL)
+ {
+ table->base = xmalloc (128);
+ table->offset = ch - (ch % 128);
+ table->size = 128;
+ table->base[ch - table->offset] = val;
+ }
+ else
+ {
+ int i = ch - table->offset;
+
+ if (i < 0)
+ {
+ size_t new_size = table->size - i;
+ size_t j;
+
+ new_size += 128 - (new_size % 128);
+ table->base = xrealloc (table->base, new_size);
+ memmove (table->base + (new_size - table->size), table->base,
+ table->size);
+ for (j = 0; j < (new_size - table->size); j++)
+ table->base[j] = 0;
+ table->offset -= (new_size - table->size);
+ table->base[ch - table->offset] = val;
+ table->size = new_size;
+ }
+ else if (i >= table->size)
+ {
+ size_t new_size = i + 1;
+ size_t j;
+
+ new_size += 128 - (new_size % 128);
+ table->base = xrealloc (table->base, new_size);
+ for (j = table->size; j < new_size; j++)
+ table->base[j] = 0;
+ table->base[i] = val;
+ table->size = new_size;
+ }
+ else
+ {
+ table->base[i] = val;
+ }
+ }
+}
+
+unsigned char
+get_byte_from_character_table (Emchar ch, Emchar_to_byte_table* table)
+{
+ size_t i = ch - table->offset;
+ if (i < table->size)
+ return table->base[i];
+ else
+ return 0;
+}
+
+#define CHAR96(ft,b) (MIN_CHAR_96 + (ft - '0') * 96 + (b & 0x7f) - 32)
+
+Emchar latin_jisx0201_to_ucs[94] =
+{
+ 0x0021 /* 0x21 EXCLAMATION MARK */,
+ 0x0022 /* 0x22 QUOTATION MARK */,
+ 0x0023 /* 0x23 NUMBER SIGN */,
+ 0x0024 /* 0x24 DOLLAR SIGN */,
+ 0x0025 /* 0x25 PERCENT SIGN */,
+ 0x0026 /* 0x26 AMPERSAND */,
+ 0x0027 /* 0x27 APOSTROPHE */,
+ 0x0028 /* 0x28 LEFT PARENTHESIS */,
+ 0x0029 /* 0x29 RIGHT PARENTHESIS */,
+ 0x002A /* 0x2A ASTERISK */,
+ 0x002B /* 0x2B PLUS SIGN */,
+ 0x002C /* 0x2C COMMA */,
+ 0x002D /* 0x2D HYPHEN-MINUS */,
+ 0x002E /* 0x2E FULL STOP */,
+ 0x002F /* 0x2F SOLIDUS */,
+ 0x0030 /* 0x30 DIGIT ZERO */,
+ 0x0031 /* 0x31 DIGIT ONE */,
+ 0x0032 /* 0x32 DIGIT TWO */,
+ 0x0033 /* 0x33 DIGIT THREE */,
+ 0x0034 /* 0x34 DIGIT FOUR */,
+ 0x0035 /* 0x35 DIGIT FIVE */,
+ 0x0036 /* 0x36 DIGIT SIX */,
+ 0x0037 /* 0x37 DIGIT SEVEN */,
+ 0x0038 /* 0x38 DIGIT EIGHT */,
+ 0x0039 /* 0x39 DIGIT NINE */,
+ 0x003A /* 0x3A COLON */,
+ 0x003B /* 0x3B SEMICOLON */,
+ 0x003C /* 0x3C LESS-THAN SIGN */,
+ 0x003D /* 0x3D EQUALS SIGN */,
+ 0x003E /* 0x3E GREATER-THAN SIGN */,
+ 0x003F /* 0x3F QUESTION MARK */,
+ 0x0040 /* 0x40 COMMERCIAL AT */,
+ 0x0041 /* 0x41 LATIN CAPITAL LETTER A */,
+ 0x0042 /* 0x42 LATIN CAPITAL LETTER B */,
+ 0x0043 /* 0x43 LATIN CAPITAL LETTER C */,
+ 0x0044 /* 0x44 LATIN CAPITAL LETTER D */,
+ 0x0045 /* 0x45 LATIN CAPITAL LETTER E */,
+ 0x0046 /* 0x46 LATIN CAPITAL LETTER F */,
+ 0x0047 /* 0x47 LATIN CAPITAL LETTER G */,
+ 0x0048 /* 0x48 LATIN CAPITAL LETTER H */,
+ 0x0049 /* 0x49 LATIN CAPITAL LETTER I */,
+ 0x004A /* 0x4A LATIN CAPITAL LETTER J */,
+ 0x004B /* 0x4B LATIN CAPITAL LETTER K */,
+ 0x004C /* 0x4C LATIN CAPITAL LETTER L */,
+ 0x004D /* 0x4D LATIN CAPITAL LETTER M */,
+ 0x004E /* 0x4E LATIN CAPITAL LETTER N */,
+ 0x004F /* 0x4F LATIN CAPITAL LETTER O */,
+ 0x0050 /* 0x50 LATIN CAPITAL LETTER P */,
+ 0x0051 /* 0x51 LATIN CAPITAL LETTER Q */,
+ 0x0052 /* 0x52 LATIN CAPITAL LETTER R */,
+ 0x0053 /* 0x53 LATIN CAPITAL LETTER S */,
+ 0x0054 /* 0x54 LATIN CAPITAL LETTER T */,
+ 0x0055 /* 0x55 LATIN CAPITAL LETTER U */,
+ 0x0056 /* 0x56 LATIN CAPITAL LETTER V */,
+ 0x0057 /* 0x57 LATIN CAPITAL LETTER W */,
+ 0x0058 /* 0x58 LATIN CAPITAL LETTER X */,
+ 0x0059 /* 0x59 LATIN CAPITAL LETTER Y */,
+ 0x005A /* 0x5A LATIN CAPITAL LETTER Z */,
+ 0x005B /* 0x5B LEFT SQUARE BRACKET */,
+ 0x00A5 /* 0x5C YEN SIGN */,
+ 0x005D /* 0x5D RIGHT SQUARE BRACKET */,
+ 0x005E /* 0x5E CIRCUMFLEX ACCENT */,
+ 0x005F /* 0x5F LOW LINE */,
+ 0x0060 /* 0x60 GRAVE ACCENT */,
+ 0x0061 /* 0x61 LATIN SMALL LETTER A */,
+ 0x0062 /* 0x62 LATIN SMALL LETTER B */,
+ 0x0063 /* 0x63 LATIN SMALL LETTER C */,
+ 0x0064 /* 0x64 LATIN SMALL LETTER D */,
+ 0x0065 /* 0x65 LATIN SMALL LETTER E */,
+ 0x0066 /* 0x66 LATIN SMALL LETTER F */,
+ 0x0067 /* 0x67 LATIN SMALL LETTER G */,
+ 0x0068 /* 0x68 LATIN SMALL LETTER H */,
+ 0x0069 /* 0x69 LATIN SMALL LETTER I */,
+ 0x006A /* 0x6A LATIN SMALL LETTER J */,
+ 0x006B /* 0x6B LATIN SMALL LETTER K */,
+ 0x006C /* 0x6C LATIN SMALL LETTER L */,
+ 0x006D /* 0x6D LATIN SMALL LETTER M */,
+ 0x006E /* 0x6E LATIN SMALL LETTER N */,
+ 0x006F /* 0x6F LATIN SMALL LETTER O */,
+ 0x0070 /* 0x70 LATIN SMALL LETTER P */,
+ 0x0071 /* 0x71 LATIN SMALL LETTER Q */,
+ 0x0072 /* 0x72 LATIN SMALL LETTER R */,
+ 0x0073 /* 0x73 LATIN SMALL LETTER S */,
+ 0x0074 /* 0x74 LATIN SMALL LETTER T */,
+ 0x0075 /* 0x75 LATIN SMALL LETTER U */,
+ 0x0076 /* 0x76 LATIN SMALL LETTER V */,
+ 0x0077 /* 0x77 LATIN SMALL LETTER W */,
+ 0x0078 /* 0x78 LATIN SMALL LETTER X */,
+ 0x0079 /* 0x79 LATIN SMALL LETTER Y */,
+ 0x007A /* 0x7A LATIN SMALL LETTER Z */,
+ 0x007B /* 0x7B LEFT CURLY BRACKET */,
+ 0x007C /* 0x7C VERTICAL LINE */,
+ 0x007D /* 0x7D RIGHT CURLY BRACKET */,
+ 0x203E /* 0x7E OVERLINE */
+};
+
+Emchar latin_iso8859_2_to_ucs[96] =
+{
+ 0x00A0 /* 0xA0 NO-BREAK SPACE */,
+ 0x0104 /* 0xA1 LATIN CAPITAL LETTER A WITH OGONEK */,
+ 0x02D8 /* 0xA2 BREVE */,
+ 0x0141 /* 0xA3 LATIN CAPITAL LETTER L WITH STROKE */,
+ 0x00A4 /* 0xA4 CURRENCY SIGN */,
+ 0x013D /* 0xA5 LATIN CAPITAL LETTER L WITH CARON */,
+ 0x015A /* 0xA6 LATIN CAPITAL LETTER S WITH ACUTE */,
+ 0x00A7 /* 0xA7 SECTION SIGN */,
+ 0x00A8 /* 0xA8 DIAERESIS */,
+ 0x0160 /* 0xA9 LATIN CAPITAL LETTER S WITH CARON */,
+ 0x015E /* 0xAA LATIN CAPITAL LETTER S WITH CEDILLA */,
+ 0x0164 /* 0xAB LATIN CAPITAL LETTER T WITH CARON */,
+ 0x0179 /* 0xAC LATIN CAPITAL LETTER Z WITH ACUTE */,
+ 0x00AD /* 0xAD SOFT HYPHEN */,
+ 0x017D /* 0xAE LATIN CAPITAL LETTER Z WITH CARON */,
+ 0x017B /* 0xAF LATIN CAPITAL LETTER Z WITH DOT ABOVE */,
+ 0x00B0 /* 0xB0 DEGREE SIGN */,
+ 0x0105 /* 0xB1 LATIN SMALL LETTER A WITH OGONEK */,
+ 0x02DB /* 0xB2 OGONEK */,
+ 0x0142 /* 0xB3 LATIN SMALL LETTER L WITH STROKE */,
+ 0x00B4 /* 0xB4 ACUTE ACCENT */,
+ 0x013E /* 0xB5 LATIN SMALL LETTER L WITH CARON */,
+ 0x015B /* 0xB6 LATIN SMALL LETTER S WITH ACUTE */,
+ 0x02C7 /* 0xB7 CARON */,
+ 0x00B8 /* 0xB8 CEDILLA */,
+ 0x0161 /* 0xB9 LATIN SMALL LETTER S WITH CARON */,
+ 0x015F /* 0xBA LATIN SMALL LETTER S WITH CEDILLA */,
+ 0x0165 /* 0xBB LATIN SMALL LETTER T WITH CARON */,
+ 0x017A /* 0xBC LATIN SMALL LETTER Z WITH ACUTE */,
+ 0x02DD /* 0xBD DOUBLE ACUTE ACCENT */,
+ 0x017E /* 0xBE LATIN SMALL LETTER Z WITH CARON */,
+ 0x017C /* 0xBF LATIN SMALL LETTER Z WITH DOT ABOVE */,
+ 0x0154 /* 0xC0 LATIN CAPITAL LETTER R WITH ACUTE */,
+ 0x00C1 /* 0xC1 LATIN CAPITAL LETTER A WITH ACUTE */,
+ 0x00C2 /* 0xC2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX */,
+ 0x0102 /* 0xC3 LATIN CAPITAL LETTER A WITH BREVE */,
+ 0x00C4 /* 0xC4 LATIN CAPITAL LETTER A WITH DIAERESIS */,
+ 0x0139 /* 0xC5 LATIN CAPITAL LETTER L WITH ACUTE */,
+ 0x0106 /* 0xC6 LATIN CAPITAL LETTER C WITH ACUTE */,
+ 0x00C7 /* 0xC7 LATIN CAPITAL LETTER C WITH CEDILLA */,
+ 0x010C /* 0xC8 LATIN CAPITAL LETTER C WITH CARON */,
+ 0x00C9 /* 0xC9 LATIN CAPITAL LETTER E WITH ACUTE */,
+ 0x0118 /* 0xCA LATIN CAPITAL LETTER E WITH OGONEK */,
+ 0x00CB /* 0xCB LATIN CAPITAL LETTER E WITH DIAERESIS */,
+ 0x011A /* 0xCC LATIN CAPITAL LETTER E WITH CARON */,
+ 0x00CD /* 0xCD LATIN CAPITAL LETTER I WITH ACUTE */,
+ 0x00CE /* 0xCE LATIN CAPITAL LETTER I WITH CIRCUMFLEX */,
+ 0x010E /* 0xCF LATIN CAPITAL LETTER D WITH CARON */,
+ 0x0110 /* 0xD0 LATIN CAPITAL LETTER D WITH STROKE */,
+ 0x0143 /* 0xD1 LATIN CAPITAL LETTER N WITH ACUTE */,
+ 0x0147 /* 0xD2 LATIN CAPITAL LETTER N WITH CARON */,
+ 0x00D3 /* 0xD3 LATIN CAPITAL LETTER O WITH ACUTE */,
+ 0x00D4 /* 0xD4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX */,
+ 0x0150 /* 0xD5 LATIN CAPITAL LETTER O WITH DOUBLE ACUTE */,
+ 0x00D6 /* 0xD6 LATIN CAPITAL LETTER O WITH DIAERESIS */,
+ 0x00D7 /* 0xD7 MULTIPLICATION SIGN */,
+ 0x0158 /* 0xD8 LATIN CAPITAL LETTER R WITH CARON */,
+ 0x016E /* 0xD9 LATIN CAPITAL LETTER U WITH RING ABOVE */,
+ 0x00DA /* 0xDA LATIN CAPITAL LETTER U WITH ACUTE */,
+ 0x0170 /* 0xDB LATIN CAPITAL LETTER U WITH DOUBLE ACUTE */,
+ 0x00DC /* 0xDC LATIN CAPITAL LETTER U WITH DIAERESIS */,
+ 0x00DD /* 0xDD LATIN CAPITAL LETTER Y WITH ACUTE */,
+ 0x0162 /* 0xDE LATIN CAPITAL LETTER T WITH CEDILLA */,
+ 0x00DF /* 0xDF LATIN SMALL LETTER SHARP S */,
+ 0x0155 /* 0xE0 LATIN SMALL LETTER R WITH ACUTE */,
+ 0x00E1 /* 0xE1 LATIN SMALL LETTER A WITH ACUTE */,
+ 0x00E2 /* 0xE2 LATIN SMALL LETTER A WITH CIRCUMFLEX */,
+ 0x0103 /* 0xE3 LATIN SMALL LETTER A WITH BREVE */,
+ 0x00E4 /* 0xE4 LATIN SMALL LETTER A WITH DIAERESIS */,
+ 0x013A /* 0xE5 LATIN SMALL LETTER L WITH ACUTE */,
+ 0x0107 /* 0xE6 LATIN SMALL LETTER C WITH ACUTE */,
+ 0x00E7 /* 0xE7 LATIN SMALL LETTER C WITH CEDILLA */,
+ 0x010D /* 0xE8 LATIN SMALL LETTER C WITH CARON */,
+ 0x00E9 /* 0xE9 LATIN SMALL LETTER E WITH ACUTE */,
+ 0x0119 /* 0xEA LATIN SMALL LETTER E WITH OGONEK */,
+ 0x00EB /* 0xEB LATIN SMALL LETTER E WITH DIAERESIS */,
+ 0x011B /* 0xEC LATIN SMALL LETTER E WITH CARON */,
+ 0x00ED /* 0xED LATIN SMALL LETTER I WITH ACUTE */,
+ 0x00EE /* 0xEE LATIN SMALL LETTER I WITH CIRCUMFLEX */,
+ 0x010F /* 0xEF LATIN SMALL LETTER D WITH CARON */,
+ 0x0111 /* 0xF0 LATIN SMALL LETTER D WITH STROKE */,
+ 0x0144 /* 0xF1 LATIN SMALL LETTER N WITH ACUTE */,
+ 0x0148 /* 0xF2 LATIN SMALL LETTER N WITH CARON */,
+ 0x00F3 /* 0xF3 LATIN SMALL LETTER O WITH ACUTE */,
+ 0x00F4 /* 0xF4 LATIN SMALL LETTER O WITH CIRCUMFLEX */,
+ 0x0151 /* 0xF5 LATIN SMALL LETTER O WITH DOUBLE ACUTE */,
+ 0x00F6 /* 0xF6 LATIN SMALL LETTER O WITH DIAERESIS */,
+ 0x00F7 /* 0xF7 DIVISION SIGN */,
+ 0x0159 /* 0xF8 LATIN SMALL LETTER R WITH CARON */,
+ 0x016F /* 0xF9 LATIN SMALL LETTER U WITH RING ABOVE */,
+ 0x00FA /* 0xFA LATIN SMALL LETTER U WITH ACUTE */,
+ 0x0171 /* 0xFB LATIN SMALL LETTER U WITH DOUBLE ACUTE */,
+ 0x00FC /* 0xFC LATIN SMALL LETTER U WITH DIAERESIS */,
+ 0x00FD /* 0xFD LATIN SMALL LETTER Y WITH ACUTE */,
+ 0x0163 /* 0xFE LATIN SMALL LETTER T WITH CEDILLA */,
+ 0x02D9 /* 0xFF DOT ABOVE */
+};
+
+Emchar latin_iso8859_3_to_ucs[96] =
+{
+ 0x00A0 /* 0xA0 NO-BREAK SPACE */,
+ 0x0126 /* 0xA1 LATIN CAPITAL LETTER H WITH STROKE */,
+ 0x02D8 /* 0xA2 BREVE */,
+ 0x00A3 /* 0xA3 POUND SIGN */,
+ 0x00A4 /* 0xA4 CURRENCY SIGN */,
+ CHAR96('C', 0xA5),
+ 0x0124 /* 0xA6 LATIN CAPITAL LETTER H WITH CIRCUMFLEX */,
+ 0x00A7 /* 0xA7 SECTION SIGN */,
+ 0x00A8 /* 0xA8 DIAERESIS */,
+ 0x0130 /* 0xA9 LATIN CAPITAL LETTER I WITH DOT ABOVE */,
+ 0x015E /* 0xAA LATIN CAPITAL LETTER S WITH CEDILLA */,
+ 0x011E /* 0xAB LATIN CAPITAL LETTER G WITH BREVE */,
+ 0x0134 /* 0xAC LATIN CAPITAL LETTER J WITH CIRCUMFLEX */,
+ 0x00AD /* 0xAD SOFT HYPHEN */,
+ CHAR96('C', 0xAE),
+ 0x017B /* 0xAF LATIN CAPITAL LETTER Z WITH DOT ABOVE */,
+ 0x00B0 /* 0xB0 DEGREE SIGN */,
+ 0x0127 /* 0xB1 LATIN SMALL LETTER H WITH STROKE */,
+ 0x00B2 /* 0xB2 SUPERSCRIPT TWO */,
+ 0x00B3 /* 0xB3 SUPERSCRIPT THREE */,
+ 0x00B4 /* 0xB4 ACUTE ACCENT */,
+ 0x00B5 /* 0xB5 MICRO SIGN */,
+ 0x0125 /* 0xB6 LATIN SMALL LETTER H WITH CIRCUMFLEX */,
+ 0x00B7 /* 0xB7 MIDDLE DOT */,
+ 0x00B8 /* 0xB8 CEDILLA */,
+ 0x0131 /* 0xB9 LATIN SMALL LETTER DOTLESS I */,
+ 0x015F /* 0xBA LATIN SMALL LETTER S WITH CEDILLA */,
+ 0x011F /* 0xBB LATIN SMALL LETTER G WITH BREVE */,
+ 0x0135 /* 0xBC LATIN SMALL LETTER J WITH CIRCUMFLEX */,
+ 0x00BD /* 0xBD VULGAR FRACTION ONE HALF */,
+ CHAR96('C', 0xBE),
+ 0x017C /* 0xBF LATIN SMALL LETTER Z WITH DOT ABOVE */,
+ 0x00C0 /* 0xC0 LATIN CAPITAL LETTER A WITH GRAVE */,
+ 0x00C1 /* 0xC1 LATIN CAPITAL LETTER A WITH ACUTE */,
+ 0x00C2 /* 0xC2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX */,
+ CHAR96('C', 0xC3),
+ 0x00C4 /* 0xC4 LATIN CAPITAL LETTER A WITH DIAERESIS */,
+ 0x010A /* 0xC5 LATIN CAPITAL LETTER C WITH DOT ABOVE */,
+ 0x0108 /* 0xC6 LATIN CAPITAL LETTER C WITH CIRCUMFLEX */,
+ 0x00C7 /* 0xC7 LATIN CAPITAL LETTER C WITH CEDILLA */,
+ 0x00C8 /* 0xC8 LATIN CAPITAL LETTER E WITH GRAVE */,
+ 0x00C9 /* 0xC9 LATIN CAPITAL LETTER E WITH ACUTE */,
+ 0x00CA /* 0xCA LATIN CAPITAL LETTER E WITH CIRCUMFLEX */,
+ 0x00CB /* 0xCB LATIN CAPITAL LETTER E WITH DIAERESIS */,
+ 0x00CC /* 0xCC LATIN CAPITAL LETTER I WITH GRAVE */,
+ 0x00CD /* 0xCD LATIN CAPITAL LETTER I WITH ACUTE */,
+ 0x00CE /* 0xCE LATIN CAPITAL LETTER I WITH CIRCUMFLEX */,
+ 0x00CF /* 0xCF LATIN CAPITAL LETTER I WITH DIAERESIS */,
+ CHAR96('C', 0xD0),
+ 0x00D1 /* 0xD1 LATIN CAPITAL LETTER N WITH TILDE */,
+ 0x00D2 /* 0xD2 LATIN CAPITAL LETTER O WITH GRAVE */,
+ 0x00D3 /* 0xD3 LATIN CAPITAL LETTER O WITH ACUTE */,
+ 0x00D4 /* 0xD4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX */,
+ 0x0120 /* 0xD5 LATIN CAPITAL LETTER G WITH DOT ABOVE */,
+ 0x00D6 /* 0xD6 LATIN CAPITAL LETTER O WITH DIAERESIS */,
+ 0x00D7 /* 0xD7 MULTIPLICATION SIGN */,
+ 0x011C /* 0xD8 LATIN CAPITAL LETTER G WITH CIRCUMFLEX */,
+ 0x00D9 /* 0xD9 LATIN CAPITAL LETTER U WITH GRAVE */,
+ 0x00DA /* 0xDA LATIN CAPITAL LETTER U WITH ACUTE */,
+ 0x00DB /* 0xDB LATIN CAPITAL LETTER U WITH CIRCUMFLEX */,
+ 0x00DC /* 0xDC LATIN CAPITAL LETTER U WITH DIAERESIS */,
+ 0x016C /* 0xDD LATIN CAPITAL LETTER U WITH BREVE */,
+ 0x015C /* 0xDE LATIN CAPITAL LETTER S WITH CIRCUMFLEX */,
+ 0x00DF /* 0xDF LATIN SMALL LETTER SHARP S */,
+ 0x00E0 /* 0xE0 LATIN SMALL LETTER A WITH GRAVE */,
+ 0x00E1 /* 0xE1 LATIN SMALL LETTER A WITH ACUTE */,
+ 0x00E2 /* 0xE2 LATIN SMALL LETTER A WITH CIRCUMFLEX */,
+ CHAR96('C', 0xE3),
+ 0x00E4 /* 0xE4 LATIN SMALL LETTER A WITH DIAERESIS */,
+ 0x010B /* 0xE5 LATIN SMALL LETTER C WITH DOT ABOVE */,
+ 0x0109 /* 0xE6 LATIN SMALL LETTER C WITH CIRCUMFLEX */,
+ 0x00E7 /* 0xE7 LATIN SMALL LETTER C WITH CEDILLA */,
+ 0x00E8 /* 0xE8 LATIN SMALL LETTER E WITH GRAVE */,
+ 0x00E9 /* 0xE9 LATIN SMALL LETTER E WITH ACUTE */,
+ 0x00EA /* 0xEA LATIN SMALL LETTER E WITH CIRCUMFLEX */,
+ 0x00EB /* 0xEB LATIN SMALL LETTER E WITH DIAERESIS */,
+ 0x00EC /* 0xEC LATIN SMALL LETTER I WITH GRAVE */,
+ 0x00ED /* 0xED LATIN SMALL LETTER I WITH ACUTE */,
+ 0x00EE /* 0xEE LATIN SMALL LETTER I WITH CIRCUMFLEX */,
+ 0x00EF /* 0xEF LATIN SMALL LETTER I WITH DIAERESIS */,
+ CHAR96('C', 0xF0),
+ 0x00F1 /* 0xF1 LATIN SMALL LETTER N WITH TILDE */,
+ 0x00F2 /* 0xF2 LATIN SMALL LETTER O WITH GRAVE */,
+ 0x00F3 /* 0xF3 LATIN SMALL LETTER O WITH ACUTE */,
+ 0x00F4 /* 0xF4 LATIN SMALL LETTER O WITH CIRCUMFLEX */,
+ 0x0121 /* 0xF5 LATIN SMALL LETTER G WITH DOT ABOVE */,
+ 0x00F6 /* 0xF6 LATIN SMALL LETTER O WITH DIAERESIS */,
+ 0x00F7 /* 0xF7 DIVISION SIGN */,
+ 0x011D /* 0xF8 LATIN SMALL LETTER G WITH CIRCUMFLEX */,
+ 0x00F9 /* 0xF9 LATIN SMALL LETTER U WITH GRAVE */,
+ 0x00FA /* 0xFA LATIN SMALL LETTER U WITH ACUTE */,
+ 0x00FB /* 0xFB LATIN SMALL LETTER U WITH CIRCUMFLEX */,
+ 0x00FC /* 0xFC LATIN SMALL LETTER U WITH DIAERESIS */,
+ 0x016D /* 0xFD LATIN SMALL LETTER U WITH BREVE */,
+ 0x015D /* 0xFE LATIN SMALL LETTER S WITH CIRCUMFLEX */,
+ 0x02D9 /* 0xFF DOT ABOVE */
+};
+
+Emchar latin_iso8859_4_to_ucs[96] =
+{
+ 0x00A0 /* 0xA0 NO-BREAK SPACE */,
+ 0x0104 /* 0xA1 LATIN CAPITAL LETTER A WITH OGONEK */,
+ 0x0138 /* 0xA2 LATIN SMALL LETTER KRA */,
+ 0x0156 /* 0xA3 LATIN CAPITAL LETTER R WITH CEDILLA */,
+ 0x00A4 /* 0xA4 CURRENCY SIGN */,
+ 0x0128 /* 0xA5 LATIN CAPITAL LETTER I WITH TILDE */,
+ 0x013B /* 0xA6 LATIN CAPITAL LETTER L WITH CEDILLA */,
+ 0x00A7 /* 0xA7 SECTION SIGN */,
+ 0x00A8 /* 0xA8 DIAERESIS */,
+ 0x0160 /* 0xA9 LATIN CAPITAL LETTER S WITH CARON */,
+ 0x0112 /* 0xAA LATIN CAPITAL LETTER E WITH MACRON */,
+ 0x0122 /* 0xAB LATIN CAPITAL LETTER G WITH CEDILLA */,
+ 0x0166 /* 0xAC LATIN CAPITAL LETTER T WITH STROKE */,
+ 0x00AD /* 0xAD SOFT HYPHEN */,
+ 0x017D /* 0xAE LATIN CAPITAL LETTER Z WITH CARON */,
+ 0x00AF /* 0xAF MACRON */,
+ 0x00B0 /* 0xB0 DEGREE SIGN */,
+ 0x0105 /* 0xB1 LATIN SMALL LETTER A WITH OGONEK */,
+ 0x02DB /* 0xB2 OGONEK */,
+ 0x0157 /* 0xB3 LATIN SMALL LETTER R WITH CEDILLA */,
+ 0x00B4 /* 0xB4 ACUTE ACCENT */,
+ 0x0129 /* 0xB5 LATIN SMALL LETTER I WITH TILDE */,
+ 0x013C /* 0xB6 LATIN SMALL LETTER L WITH CEDILLA */,
+ 0x02C7 /* 0xB7 CARON */,
+ 0x00B8 /* 0xB8 CEDILLA */,
+ 0x0161 /* 0xB9 LATIN SMALL LETTER S WITH CARON */,
+ 0x0113 /* 0xBA LATIN SMALL LETTER E WITH MACRON */,
+ 0x0123 /* 0xBB LATIN SMALL LETTER G WITH CEDILLA */,
+ 0x0167 /* 0xBC LATIN SMALL LETTER T WITH STROKE */,
+ 0x014A /* 0xBD LATIN CAPITAL LETTER ENG */,
+ 0x017E /* 0xBE LATIN SMALL LETTER Z WITH CARON */,
+ 0x014B /* 0xBF LATIN SMALL LETTER ENG */,
+ 0x0100 /* 0xC0 LATIN CAPITAL LETTER A WITH MACRON */,
+ 0x00C1 /* 0xC1 LATIN CAPITAL LETTER A WITH ACUTE */,
+ 0x00C2 /* 0xC2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX */,
+ 0x00C3 /* 0xC3 LATIN CAPITAL LETTER A WITH TILDE */,
+ 0x00C4 /* 0xC4 LATIN CAPITAL LETTER A WITH DIAERESIS */,
+ 0x00C5 /* 0xC5 LATIN CAPITAL LETTER A WITH RING ABOVE */,
+ 0x00C6 /* 0xC6 LATIN CAPITAL LETTER AE */,
+ 0x012E /* 0xC7 LATIN CAPITAL LETTER I WITH OGONEK */,
+ 0x010C /* 0xC8 LATIN CAPITAL LETTER C WITH CARON */,
+ 0x00C9 /* 0xC9 LATIN CAPITAL LETTER E WITH ACUTE */,
+ 0x0118 /* 0xCA LATIN CAPITAL LETTER E WITH OGONEK */,
+ 0x00CB /* 0xCB LATIN CAPITAL LETTER E WITH DIAERESIS */,
+ 0x0116 /* 0xCC LATIN CAPITAL LETTER E WITH DOT ABOVE */,
+ 0x00CD /* 0xCD LATIN CAPITAL LETTER I WITH ACUTE */,
+ 0x00CE /* 0xCE LATIN CAPITAL LETTER I WITH CIRCUMFLEX */,
+ 0x012A /* 0xCF LATIN CAPITAL LETTER I WITH MACRON */,
+ 0x0110 /* 0xD0 LATIN CAPITAL LETTER D WITH STROKE */,
+ 0x0145 /* 0xD1 LATIN CAPITAL LETTER N WITH CEDILLA */,
+ 0x014C /* 0xD2 LATIN CAPITAL LETTER O WITH MACRON */,
+ 0x0136 /* 0xD3 LATIN CAPITAL LETTER K WITH CEDILLA */,
+ 0x00D4 /* 0xD4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX */,
+ 0x00D5 /* 0xD5 LATIN CAPITAL LETTER O WITH TILDE */,
+ 0x00D6 /* 0xD6 LATIN CAPITAL LETTER O WITH DIAERESIS */,
+ 0x00D7 /* 0xD7 MULTIPLICATION SIGN */,
+ 0x00D8 /* 0xD8 LATIN CAPITAL LETTER O WITH STROKE */,
+ 0x0172 /* 0xD9 LATIN CAPITAL LETTER U WITH OGONEK */,
+ 0x00DA /* 0xDA LATIN CAPITAL LETTER U WITH ACUTE */,
+ 0x00DB /* 0xDB LATIN CAPITAL LETTER U WITH CIRCUMFLEX */,
+ 0x00DC /* 0xDC LATIN CAPITAL LETTER U WITH DIAERESIS */,
+ 0x0168 /* 0xDD LATIN CAPITAL LETTER U WITH TILDE */,
+ 0x016A /* 0xDE LATIN CAPITAL LETTER U WITH MACRON */,
+ 0x00DF /* 0xDF LATIN SMALL LETTER SHARP S */,
+ 0x0101 /* 0xE0 LATIN SMALL LETTER A WITH MACRON */,
+ 0x00E1 /* 0xE1 LATIN SMALL LETTER A WITH ACUTE */,
+ 0x00E2 /* 0xE2 LATIN SMALL LETTER A WITH CIRCUMFLEX */,
+ 0x00E3 /* 0xE3 LATIN SMALL LETTER A WITH TILDE */,
+ 0x00E4 /* 0xE4 LATIN SMALL LETTER A WITH DIAERESIS */,
+ 0x00E5 /* 0xE5 LATIN SMALL LETTER A WITH RING ABOVE */,
+ 0x00E6 /* 0xE6 LATIN SMALL LETTER AE */,
+ 0x012F /* 0xE7 LATIN SMALL LETTER I WITH OGONEK */,
+ 0x010D /* 0xE8 LATIN SMALL LETTER C WITH CARON */,
+ 0x00E9 /* 0xE9 LATIN SMALL LETTER E WITH ACUTE */,
+ 0x0119 /* 0xEA LATIN SMALL LETTER E WITH OGONEK */,
+ 0x00EB /* 0xEB LATIN SMALL LETTER E WITH DIAERESIS */,
+ 0x0117 /* 0xEC LATIN SMALL LETTER E WITH DOT ABOVE */,
+ 0x00ED /* 0xED LATIN SMALL LETTER I WITH ACUTE */,
+ 0x00EE /* 0xEE LATIN SMALL LETTER I WITH CIRCUMFLEX */,
+ 0x012B /* 0xEF LATIN SMALL LETTER I WITH MACRON */,
+ 0x0111 /* 0xF0 LATIN SMALL LETTER D WITH STROKE */,
+ 0x0146 /* 0xF1 LATIN SMALL LETTER N WITH CEDILLA */,
+ 0x014D /* 0xF2 LATIN SMALL LETTER O WITH MACRON */,
+ 0x0137 /* 0xF3 LATIN SMALL LETTER K WITH CEDILLA */,
+ 0x00F4 /* 0xF4 LATIN SMALL LETTER O WITH CIRCUMFLEX */,
+ 0x00F5 /* 0xF5 LATIN SMALL LETTER O WITH TILDE */,
+ 0x00F6 /* 0xF6 LATIN SMALL LETTER O WITH DIAERESIS */,
+ 0x00F7 /* 0xF7 DIVISION SIGN */,
+ 0x00F8 /* 0xF8 LATIN SMALL LETTER O WITH STROKE */,
+ 0x0173 /* 0xF9 LATIN SMALL LETTER U WITH OGONEK */,
+ 0x00FA /* 0xFA LATIN SMALL LETTER U WITH ACUTE */,
+ 0x00FB /* 0xFB LATIN SMALL LETTER U WITH CIRCUMFLEX */,
+ 0x00FC /* 0xFC LATIN SMALL LETTER U WITH DIAERESIS */,
+ 0x0169 /* 0xFD LATIN SMALL LETTER U WITH TILDE */,
+ 0x016B /* 0xFE LATIN SMALL LETTER U WITH MACRON */,
+ 0x02D9 /* 0xFF DOT ABOVE */
+};
+
+Emchar latin_iso8859_9_to_ucs[96] =
+{
+ 0x00A0 /* 0xA0 NO-BREAK SPACE */,
+ 0x00A1 /* 0xA1 INVERTED EXCLAMATION MARK */,
+ 0x00A2 /* 0xA2 CENT SIGN */,
+ 0x00A3 /* 0xA3 POUND SIGN */,
+ 0x00A4 /* 0xA4 CURRENCY SIGN */,
+ 0x00A5 /* 0xA5 YEN SIGN */,
+ 0x00A6 /* 0xA6 BROKEN BAR */,
+ 0x00A7 /* 0xA7 SECTION SIGN */,
+ 0x00A8 /* 0xA8 DIAERESIS */,
+ 0x00A9 /* 0xA9 COPYRIGHT SIGN */,
+ 0x00AA /* 0xAA FEMININE ORDINAL INDICATOR */,
+ 0x00AB /* 0xAB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */,
+ 0x00AC /* 0xAC NOT SIGN */,
+ 0x00AD /* 0xAD SOFT HYPHEN */,
+ 0x00AE /* 0xAE REGISTERED SIGN */,
+ 0x00AF /* 0xAF MACRON */,
+ 0x00B0 /* 0xB0 DEGREE SIGN */,
+ 0x00B1 /* 0xB1 PLUS-MINUS SIGN */,
+ 0x00B2 /* 0xB2 SUPERSCRIPT TWO */,
+ 0x00B3 /* 0xB3 SUPERSCRIPT THREE */,
+ 0x00B4 /* 0xB4 ACUTE ACCENT */,
+ 0x00B5 /* 0xB5 MICRO SIGN */,
+ 0x00B6 /* 0xB6 PILCROW SIGN */,
+ 0x00B7 /* 0xB7 MIDDLE DOT */,
+ 0x00B8 /* 0xB8 CEDILLA */,
+ 0x00B9 /* 0xB9 SUPERSCRIPT ONE */,
+ 0x00BA /* 0xBA MASCULINE ORDINAL INDICATOR */,
+ 0x00BB /* 0xBB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */,
+ 0x00BC /* 0xBC VULGAR FRACTION ONE QUARTER */,
+ 0x00BD /* 0xBD VULGAR FRACTION ONE HALF */,
+ 0x00BE /* 0xBE VULGAR FRACTION THREE QUARTERS */,
+ 0x00BF /* 0xBF INVERTED QUESTION MARK */,
+ 0x00C0 /* 0xC0 LATIN CAPITAL LETTER A WITH GRAVE */,
+ 0x00C1 /* 0xC1 LATIN CAPITAL LETTER A WITH ACUTE */,
+ 0x00C2 /* 0xC2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX */,
+ 0x00C3 /* 0xC3 LATIN CAPITAL LETTER A WITH TILDE */,
+ 0x00C4 /* 0xC4 LATIN CAPITAL LETTER A WITH DIAERESIS */,
+ 0x00C5 /* 0xC5 LATIN CAPITAL LETTER A WITH RING ABOVE */,
+ 0x00C6 /* 0xC6 LATIN CAPITAL LETTER AE */,
+ 0x00C7 /* 0xC7 LATIN CAPITAL LETTER C WITH CEDILLA */,
+ 0x00C8 /* 0xC8 LATIN CAPITAL LETTER E WITH GRAVE */,
+ 0x00C9 /* 0xC9 LATIN CAPITAL LETTER E WITH ACUTE */,
+ 0x00CA /* 0xCA LATIN CAPITAL LETTER E WITH CIRCUMFLEX */,
+ 0x00CB /* 0xCB LATIN CAPITAL LETTER E WITH DIAERESIS */,
+ 0x00CC /* 0xCC LATIN CAPITAL LETTER I WITH GRAVE */,
+ 0x00CD /* 0xCD LATIN CAPITAL LETTER I WITH ACUTE */,
+ 0x00CE /* 0xCE LATIN CAPITAL LETTER I WITH CIRCUMFLEX */,
+ 0x00CF /* 0xCF LATIN CAPITAL LETTER I WITH DIAERESIS */,
+ 0x011E /* 0xD0 LATIN CAPITAL LETTER G WITH BREVE */,
+ 0x00D1 /* 0xD1 LATIN CAPITAL LETTER N WITH TILDE */,
+ 0x00D2 /* 0xD2 LATIN CAPITAL LETTER O WITH GRAVE */,
+ 0x00D3 /* 0xD3 LATIN CAPITAL LETTER O WITH ACUTE */,
+ 0x00D4 /* 0xD4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX */,
+ 0x00D5 /* 0xD5 LATIN CAPITAL LETTER O WITH TILDE */,
+ 0x00D6 /* 0xD6 LATIN CAPITAL LETTER O WITH DIAERESIS */,
+ 0x00D7 /* 0xD7 MULTIPLICATION SIGN */,
+ 0x00D8 /* 0xD8 LATIN CAPITAL LETTER O WITH STROKE */,
+ 0x00D9 /* 0xD9 LATIN CAPITAL LETTER U WITH GRAVE */,
+ 0x00DA /* 0xDA LATIN CAPITAL LETTER U WITH ACUTE */,
+ 0x00DB /* 0xDB LATIN CAPITAL LETTER U WITH CIRCUMFLEX */,
+ 0x00DC /* 0xDC LATIN CAPITAL LETTER U WITH DIAERESIS */,
+ 0x0130 /* 0xDD LATIN CAPITAL LETTER I WITH DOT ABOVE */,
+ 0x015E /* 0xDE LATIN CAPITAL LETTER S WITH CEDILLA */,
+ 0x00DF /* 0xDF LATIN SMALL LETTER SHARP S */,
+ 0x00E0 /* 0xE0 LATIN SMALL LETTER A WITH GRAVE */,
+ 0x00E1 /* 0xE1 LATIN SMALL LETTER A WITH ACUTE */,
+ 0x00E2 /* 0xE2 LATIN SMALL LETTER A WITH CIRCUMFLEX */,
+ 0x00E3 /* 0xE3 LATIN SMALL LETTER A WITH TILDE */,
+ 0x00E4 /* 0xE4 LATIN SMALL LETTER A WITH DIAERESIS */,
+ 0x00E5 /* 0xE5 LATIN SMALL LETTER A WITH RING ABOVE */,
+ 0x00E6 /* 0xE6 LATIN SMALL LETTER AE */,
+ 0x00E7 /* 0xE7 LATIN SMALL LETTER C WITH CEDILLA */,
+ 0x00E8 /* 0xE8 LATIN SMALL LETTER E WITH GRAVE */,
+ 0x00E9 /* 0xE9 LATIN SMALL LETTER E WITH ACUTE */,
+ 0x00EA /* 0xEA LATIN SMALL LETTER E WITH CIRCUMFLEX */,
+ 0x00EB /* 0xEB LATIN SMALL LETTER E WITH DIAERESIS */,
+ 0x00EC /* 0xEC LATIN SMALL LETTER I WITH GRAVE */,
+ 0x00ED /* 0xED LATIN SMALL LETTER I WITH ACUTE */,
+ 0x00EE /* 0xEE LATIN SMALL LETTER I WITH CIRCUMFLEX */,
+ 0x00EF /* 0xEF LATIN SMALL LETTER I WITH DIAERESIS */,
+ 0x011F /* 0xF0 LATIN SMALL LETTER G WITH BREVE */,
+ 0x00F1 /* 0xF1 LATIN SMALL LETTER N WITH TILDE */,
+ 0x00F2 /* 0xF2 LATIN SMALL LETTER O WITH GRAVE */,
+ 0x00F3 /* 0xF3 LATIN SMALL LETTER O WITH ACUTE */,
+ 0x00F4 /* 0xF4 LATIN SMALL LETTER O WITH CIRCUMFLEX */,
+ 0x00F5 /* 0xF5 LATIN SMALL LETTER O WITH TILDE */,
+ 0x00F6 /* 0xF6 LATIN SMALL LETTER O WITH DIAERESIS */,
+ 0x00F7 /* 0xF7 DIVISION SIGN */,
+ 0x00F8 /* 0xF8 LATIN SMALL LETTER O WITH STROKE */,
+ 0x00F9 /* 0xF9 LATIN SMALL LETTER U WITH GRAVE */,
+ 0x00FA /* 0xFA LATIN SMALL LETTER U WITH ACUTE */,
+ 0x00FB /* 0xFB LATIN SMALL LETTER U WITH CIRCUMFLEX */,
+ 0x00FC /* 0xFC LATIN SMALL LETTER U WITH DIAERESIS */,
+ 0x0131 /* 0xFD LATIN SMALL LETTER DOTLESS I */,
+ 0x015F /* 0xFE LATIN SMALL LETTER S WITH CEDILLA */,
+ 0x00FF /* 0xFF LATIN SMALL LETTER Y WITH DIAERESIS */,
+};
+
+Emchar latin_viscii_lower_to_ucs[96] =
+{
+ CHAR96('1', 0x20),
+ 0x1eaf /* 0x21 */,
+ 0x1eb1 /* 0x22 */,
+ 0x1eb7 /* 0x23 */,
+ 0x1ea5 /* 0x24 */,
+ 0x1ea7 /* 0x25 */,
+ 0x1ea9 /* 0x26 */,
+ 0x1ead /* 0x27 */,
+ 0x1ebd /* 0x28 */,
+ 0x1eb9 /* 0x29 */,
+ 0x1ebf /* 0x2a */,
+ 0x1ec1 /* 0x2b */,
+ 0x1ec3 /* 0x2c */,
+ 0x1ec5 /* 0x2d */,
+ 0x1ec7 /* 0x2e */,
+ 0x1ed1 /* 0x2f */,
+ 0x1ed3 /* 0x30 */,
+ 0x1ed5 /* 0x31 */,
+ 0x1ed7 /* 0x32 */,
+ CHAR96('1', 0x33),
+ CHAR96('1', 0x34),
+ 0x1ed9 /* 0x35 */,
+ 0x1edd /* 0x36 */,
+ 0x1edf /* 0x37 */,
+ 0x1ecb /* 0x38 */,
+ CHAR96('1', 0x39),
+ CHAR96('1', 0x3A),
+ CHAR96('1', 0x3B),
+ CHAR96('1', 0x3C),
+ 0x01a1 /* 0x3d */,
+ 0x1edb /* 0x3e */,
+ CHAR96('1', 0x3F),
+ CHAR96('1', 0x40),
+ CHAR96('1', 0x41),
+ CHAR96('1', 0x42),
+ CHAR96('1', 0x43),
+ CHAR96('1', 0x44),
+ CHAR96('1', 0x45),
+ 0x1eb3 /* 0x46 */,
+ 0x1eb5 /* 0x47 */,
+ CHAR96('1', 0x48),
+ CHAR96('1', 0x49),
+ CHAR96('1', 0x4A),
+ CHAR96('1', 0x4B),
+ CHAR96('1', 0x4C),
+ CHAR96('1', 0x4D),
+ CHAR96('1', 0x4E),
+ 0x1ef3 /* 0x4f */,
+ CHAR96('1', 0x50),
+ 0x1ee9 /* 0x51 */,
+ CHAR96('1', 0x52),
+ CHAR96('1', 0x53),
+ CHAR96('1', 0x54),
+ 0x1ea1 /* 0x55 */,
+ 0x1ef7 /* 0x56 */,
+ 0x1eeb /* 0x57 */,
+ 0x1eed /* 0x58 */,
+ CHAR96('1', 0x59),
+ CHAR96('1', 0x5A),
+ 0x1ef9 /* 0x5b */,
+ 0x1ef5 /* 0x5c */,
+ CHAR96('1', 0x5D),
+ 0x1ee1 /* 0x5e */,
+ 0x01b0 /* 0x5f */,
+ 0x00e0 /* 0x60 */,
+ 0x00e1 /* 0x61 */,
+ 0x00e2 /* 0x62 */,
+ 0x00e3 /* 0x63 */,
+ 0x1ea3 /* 0x64 */,
+ 0x0103 /* 0x65 */,
+ 0x1eef /* 0x66 */,
+ 0x1eab /* 0x67 */,
+ 0x00e8 /* 0x68 */,
+ 0x00e9 /* 0x69 */,
+ 0x00ea /* 0x6a */,
+ 0x1ebb /* 0x6b */,
+ 0x00ec /* 0x6c */,
+ 0x00ed /* 0x6d */,
+ 0x0129 /* 0x6e */,
+ 0x1ec9 /* 0x6f */,
+ 0x0111 /* 0x70 */,
+ 0x1ef1 /* 0x71 */,
+ 0x00f2 /* 0x72 */,
+ 0x00f3 /* 0x73 */,
+ 0x00f4 /* 0x74 */,
+ 0x00f5 /* 0x75 */,
+ 0x1ecf /* 0x76 */,
+ 0x1ecd /* 0x77 */,
+ 0x1ee5 /* 0x78 */,
+ 0x00f9 /* 0x79 */,
+ 0x00fa /* 0x7a */,
+ 0x0169 /* 0x7b */,
+ 0x1ee7 /* 0x7c */,
+ 0x00fd /* 0x7d */,
+ 0x1ee3 /* 0x7e */,
+ CHAR96('1', 0x7F)
+};
+
+Emchar latin_viscii_upper_to_ucs[96] =
+{
+ CHAR96('2', 0x20),
+ 0x1eae /* 0x21 */,
+ 0x1eb0 /* 0x22 */,
+ 0x1eb6 /* 0x23 */,
+ 0x1ea4 /* 0x24 */,
+ 0x1ea6 /* 0x25 */,
+ 0x1ea8 /* 0x26 */,
+ 0x1eac /* 0x27 */,
+ 0x1ebc /* 0x28 */,
+ 0x1eb8 /* 0x29 */,
+ 0x1ebe /* 0x2a */,
+ 0x1ec0 /* 0x2b */,
+ 0x1ec2 /* 0x2c */,
+ 0x1ec4 /* 0x2d */,
+ 0x1ec6 /* 0x2e */,
+ 0x1ed0 /* 0x2f */,
+ 0x1ed2 /* 0x30 */,
+ 0x1ed4 /* 0x31 */,
+ 0x1ed6 /* 0x32 */,
+ CHAR96('2', 0x33),
+ CHAR96('2', 0x34),
+ 0x1ed8 /* 0x35 */,
+ 0x1edc /* 0x36 */,
+ 0x1ede /* 0x37 */,
+ 0x1eca /* 0x38 */,
+ CHAR96('2', 0x39),
+ CHAR96('2', 0x3a),
+ CHAR96('2', 0x3b),
+ CHAR96('2', 0x3c),
+ 0x01a0 /* 0x3d */,
+ 0x1eda /* 0x3e */,
+ CHAR96('2', 0x3f),
+ CHAR96('2', 0x40),
+ CHAR96('2', 0x41),
+ CHAR96('2', 0x42),
+ CHAR96('2', 0x43),
+ CHAR96('2', 0x44),
+ CHAR96('2', 0x45),
+ 0x1eb2 /* 0x46 */,
+ 0x1eb4 /* 0x47 */,
+ CHAR96('2', 0x48),
+ CHAR96('2', 0x49),
+ CHAR96('2', 0x4a),
+ CHAR96('2', 0x4b),
+ CHAR96('2', 0x4c),
+ CHAR96('2', 0x4d),
+ CHAR96('2', 0x4e),
+ 0x1ef2 /* 0x4f */,
+ CHAR96('2', 0x50),
+ 0x1ee8 /* 0x51 */,
+ CHAR96('2', 0x52),
+ CHAR96('2', 0x53),
+ CHAR96('2', 0x54),
+ 0x1ea0 /* 0x55 */,
+ 0x1ef6 /* 0x56 */,
+ 0x1eea /* 0x57 */,
+ 0x1eec /* 0x58 */,
+ CHAR96('2', 0x59),
+ CHAR96('2', 0x5a),
+ 0x1ef8 /* 0x5b */,
+ 0x1ef4 /* 0x5c */,
+ CHAR96('2', 0x5d),
+ 0x1ee0 /* 0x5e */,
+ 0x01af /* 0x5f */,
+ 0x00c0 /* 0x60 */,
+ 0x00c1 /* 0x61 */,
+ 0x00c2 /* 0x62 */,
+ 0x00c3 /* 0x63 */,
+ 0x1ea2 /* 0x64 */,
+ 0x0102 /* 0x65 */,
+ 0x1eee /* 0x66 */,
+ 0x1eaa /* 0x67 */,
+ 0x00c8 /* 0x68 */,
+ 0x00c9 /* 0x69 */,
+ 0x00ca /* 0x6a */,
+ 0x1eba /* 0x6b */,
+ 0x00cc /* 0x6c */,
+ 0x00cd /* 0x6d */,
+ 0x0128 /* 0x6e */,
+ 0x1ec8 /* 0x6f */,
+ 0x0110 /* 0x70 */,
+ 0x1ef0 /* 0x71 */,
+ 0x00d2 /* 0x72 */,
+ 0x00d3 /* 0x73 */,
+ 0x00d4 /* 0x74 */,
+ 0x00d5 /* 0x75 */,
+ 0x1ece /* 0x76 */,
+ 0x1ecc /* 0x77 */,
+ 0x1ee4 /* 0x78 */,
+ 0x00d9 /* 0x79 */,
+ 0x00da /* 0x7a */,
+ 0x0168 /* 0x7b */,
+ 0x1ee6 /* 0x7c */,
+ 0x00dd /* 0x7d */,
+ 0x1ee2 /* 0x7e */,
+ CHAR96('2', 0x7f)
+};
+
+Emchar latin_tcvn5712_to_ucs[96] =
+{
+ 0x00A0 /* 0xA0 NO-BREAK SPACE */,
+ 0x0102 /* 0xA1 LATIN CAPITAL LETTER A WITH BREVE */,
+ 0x00C2 /* 0xA2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX */,
+ 0x00CA /* 0xA3 LATIN CAPITAL LETTER E WITH CIRCUMFLEX */,
+ 0x00D4 /* 0xA4 LATIN CAPITAL LETTER O WITH CIRCUMFLEX */,
+ 0x01A0 /* 0xA5 LATIN CAPITAL LETTER O WITH HORN */,
+ 0x01AF /* 0xA6 LATIN CAPITAL LETTER U WITH HORN */,
+ 0x0110 /* 0xA7 LATIN CAPITAL LETTER D WITH STROKE */,
+ 0x0103 /* 0xA8 LATIN SMALL LETTER A WITH BREVE */,
+ 0x00E2 /* 0xA9 LATIN SMALL LETTER A WITH CIRCUMFLEX */,
+ 0x00EA /* 0xAA LATIN SMALL LETTER E WITH CIRCUMFLEX */,
+ 0x00F4 /* 0xAB LATIN SMALL LETTER O WITH CIRCUMFLEX */,
+ 0x01A1 /* 0xAC LATIN SMALL LETTER O WITH HORN */,
+ 0x01B0 /* 0xAD LATIN SMALL LETTER U WITH HORN */,
+ 0x0111 /* 0xAE LATIN SMALL LETTER D WITH STROKE */,
+ 0x1EB0 /* 0xAF LATIN CAPITAL LETTER A WITH BREVE AND GRAVE */,
+ 0x0300 /* 0xB0 COMBINING GRAVE ACCENT */,
+ 0x0309 /* 0xB1 COMBINING HOOK ABOVE */,
+ 0x0303 /* 0xB2 COMBINING TILDE */,
+ 0x0301 /* 0xB3 COMBINING ACUTE ACCENT */,
+ 0x0323 /* 0xB4 COMBINING DOT BELOW */,
+ 0x00E0 /* 0xB5 LATIN SMALL LETTER A WITH GRAVE */,
+ 0x1EA3 /* 0xB6 LATIN SMALL LETTER A WITH HOOK ABOVE */,
+ 0x00E3 /* 0xB7 LATIN SMALL LETTER A WITH TILDE */,
+ 0x00E1 /* 0xB8 LATIN SMALL LETTER A WITH ACUTE */,
+ 0x1EA1 /* 0xB9 LATIN SMALL LETTER A WITH DOT BELOW */,
+ 0x1EB2 /* 0xBA LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE */,
+ 0x1EB1 /* 0xBB LATIN SMALL LETTER A WITH BREVE AND GRAVE */,
+ 0x1EB3 /* 0xBC LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE */,
+ 0x1EB5 /* 0xBD LATIN SMALL LETTER A WITH BREVE AND TILDE */,
+ 0x1EAF /* 0xBE LATIN SMALL LETTER A WITH BREVE AND ACUTE */,
+ 0x1EB4 /* 0xBF LATIN CAPITAL LETTER A WITH BREVE AND TILDE */,
+ 0x1EAE /* 0xC0 LATIN CAPITAL LETTER A WITH BREVE AND ACUTE */,
+ 0x1EA6 /* 0xC1 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE */,
+ 0x1EA8 /* 0xC2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */,
+ 0x1EAA /* 0xC3 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE */,
+ 0x1EA4 /* 0xC4 LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE */,
+ 0x1EC0 /* 0xC5 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE */,
+ 0x1EB7 /* 0xC6 LATIN SMALL LETTER A WITH BREVE AND DOT BELOW */,
+ 0x1EA7 /* 0xC7 LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE */,
+ 0x1EA9 /* 0xC8 LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE */,
+ 0x1EAB /* 0xC9 LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE */,
+ 0x1EA5 /* 0xCA LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE */,
+ 0x1EAD /* 0xCB LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW */,
+ 0x00E8 /* 0xCC LATIN SMALL LETTER E WITH GRAVE */,
+ 0x1EC2 /* 0xCD LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */,
+ 0x1EBB /* 0xCE LATIN SMALL LETTER E WITH HOOK ABOVE */,
+ 0x1EBD /* 0xCF LATIN SMALL LETTER E WITH TILDE */,
+ 0x00E9 /* 0xD0 LATIN SMALL LETTER E WITH ACUTE */,
+ 0x1EB9 /* 0xD1 LATIN SMALL LETTER E WITH DOT BELOW */,
+ 0x1EC1 /* 0xD2 LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE */,
+ 0x1EC3 /* 0xD3 LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE */,
+ 0x1EC5 /* 0xD4 LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE */,
+ 0x1EBF /* 0xD5 LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE */,
+ 0x1EC7 /* 0xD6 LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW */,
+ 0x00EC /* 0xD7 LATIN SMALL LETTER I WITH GRAVE */,
+ 0x1EC9 /* 0xD8 LATIN SMALL LETTER I WITH HOOK ABOVE */,
+ 0x1EC4 /* 0xD9 LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE */,
+ 0x1EBE /* 0xDA LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE */,
+ 0x1ED2 /* 0xDB LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE */,
+ 0x0129 /* 0xDC LATIN SMALL LETTER I WITH TILDE */,
+ 0x00ED /* 0xDD LATIN SMALL LETTER I WITH ACUTE */,
+ 0x1ECB /* 0xDE LATIN SMALL LETTER I WITH DOT BELOW */,
+ 0x00F2 /* 0xDF LATIN SMALL LETTER O WITH GRAVE */,
+ 0x1ED4 /* 0xE0 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */,
+ 0x1ECF /* 0xE1 LATIN SMALL LETTER O WITH HOOK ABOVE */,
+ 0x00F5 /* 0xE2 LATIN SMALL LETTER O WITH TILDE */,
+ 0x00F3 /* 0xE3 LATIN SMALL LETTER O WITH ACUTE */,
+ 0x1ECD /* 0xE4 LATIN SMALL LETTER O WITH DOT BELOW */,
+ 0x1ED3 /* 0xE5 LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE */,
+ 0x1ED5 /* 0xE6 LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE */,
+ 0x1ED7 /* 0xE7 LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE */,
+ 0x1ED1 /* 0xE8 LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE */,
+ 0x1ED9 /* 0xE9 LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW */,
+ 0x1EDD /* 0xEA LATIN SMALL LETTER O WITH HORN AND GRAVE */,
+ 0x1EDF /* 0xEB LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE */,
+ 0x1EE1 /* 0xEC LATIN SMALL LETTER O WITH HORN AND TILDE */,
+ 0x1EDB /* 0xED LATIN SMALL LETTER O WITH HORN AND ACUTE */,
+ 0x1EE3 /* 0xEE LATIN SMALL LETTER O WITH HORN AND DOT BELOW */,
+ 0x00F9 /* 0xEF LATIN SMALL LETTER U WITH GRAVE */,
+ 0x1ED6 /* 0xF0 LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE */,
+ 0x1EE7 /* 0xF1 LATIN SMALL LETTER U WITH HOOK ABOVE */,
+ 0x0169 /* 0xF2 LATIN SMALL LETTER U WITH TILDE */,
+ 0x00FA /* 0xF3 LATIN SMALL LETTER U WITH ACUTE */,
+ 0x1EE5 /* 0xF4 LATIN SMALL LETTER U WITH DOT BELOW */,
+ 0x1EEB /* 0xF5 LATIN SMALL LETTER U WITH HORN AND GRAVE */,
+ 0x1EED /* 0xF6 LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE */,
+ 0x1EEF /* 0xF7 LATIN SMALL LETTER U WITH HORN AND TILDE */,
+ 0x1EE9 /* 0xF8 LATIN SMALL LETTER U WITH HORN AND ACUTE */,
+ 0x1EF1 /* 0xF9 LATIN SMALL LETTER U WITH HORN AND DOT BELOW */,
+ 0x1EF3 /* 0xFA LATIN SMALL LETTER Y WITH GRAVE */,
+ 0x1EF7 /* 0xFB LATIN SMALL LETTER Y WITH HOOK ABOVE */,
+ 0x1EF9 /* 0xFC LATIN SMALL LETTER Y WITH TILDE */,
+ 0x00FD /* 0xFD LATIN SMALL LETTER Y WITH ACUTE */,
+ 0x1EF5 /* 0xFE LATIN SMALL LETTER Y WITH DOT BELOW */,
+ 0x1ED0 /* 0xFF LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE */
+};
+
+Charset_ID latin_a_char_to_charset[128] = {
+ /* U+0100 */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+0101 */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+0102 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0103 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0104 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0105 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0106 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0107 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0108 */ LEADING_BYTE_LATIN_ISO8859_3,
+ /* U+0109 */ LEADING_BYTE_LATIN_ISO8859_3,
+ /* U+010A */ LEADING_BYTE_LATIN_ISO8859_3,
+ /* U+010B */ LEADING_BYTE_LATIN_ISO8859_3,
+ /* U+010C */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+010D */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+010E */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+010F */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0110 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0111 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0112 */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+0113 */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+0114 */ LEADING_BYTE_UCS_BMP,
+ /* U+0115 */ LEADING_BYTE_UCS_BMP,
+ /* U+0116 */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+0117 */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+0118 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0119 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+011A */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+011B */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+011C */ LEADING_BYTE_LATIN_ISO8859_3,
+ /* U+011D */ LEADING_BYTE_LATIN_ISO8859_3,
+ /* U+011E */ LEADING_BYTE_LATIN_ISO8859_3,
+ /* U+011F */ LEADING_BYTE_LATIN_ISO8859_3,
+ /* U+0120 */ LEADING_BYTE_LATIN_ISO8859_3,
+ /* U+0121 */ LEADING_BYTE_LATIN_ISO8859_3,
+ /* U+0122 */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+0123 */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+0124 */ LEADING_BYTE_LATIN_ISO8859_3,
+ /* U+0125 */ LEADING_BYTE_LATIN_ISO8859_3,
+ /* U+0126 */ LEADING_BYTE_LATIN_ISO8859_3,
+ /* U+0127 */ LEADING_BYTE_LATIN_ISO8859_3,
+ /* U+0128 */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+0129 */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+012A */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+012B */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+012C */ LEADING_BYTE_UCS_BMP,
+ /* U+012D */ LEADING_BYTE_UCS_BMP,
+ /* U+012E */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+012F */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+0130 */ LEADING_BYTE_LATIN_ISO8859_3,
+ /* U+0131 */ LEADING_BYTE_LATIN_ISO8859_3,
+ /* U+0132 */ LEADING_BYTE_JAPANESE_JISX0212,
+ /* U+0133 */ LEADING_BYTE_JAPANESE_JISX0212,
+ /* U+0134 */ LEADING_BYTE_LATIN_ISO8859_3,
+ /* U+0135 */ LEADING_BYTE_LATIN_ISO8859_3,
+ /* U+0136 */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+0137 */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+0138 */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+0139 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+013A */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+013B */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+013C */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+013D */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+013E */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+013F */ LEADING_BYTE_JAPANESE_JISX0212,
+ /* U+0140 */ LEADING_BYTE_JAPANESE_JISX0212,
+ /* U+0141 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0142 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0143 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0144 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0145 */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+0146 */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+0147 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0148 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0149 */ LEADING_BYTE_JAPANESE_JISX0212,
+ /* U+014A */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+014B */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+014C */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+014D */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+014E */ LEADING_BYTE_UCS_BMP,
+ /* U+014F */ LEADING_BYTE_UCS_BMP,
+ /* U+0150 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0151 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0152 */ LEADING_BYTE_JAPANESE_JISX0212,
+ /* U+0153 */ LEADING_BYTE_JAPANESE_JISX0212,
+ /* U+0154 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0155 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0156 */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+0157 */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+0158 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0159 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+015A */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+015B */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+015C */ LEADING_BYTE_LATIN_ISO8859_3,
+ /* U+015D */ LEADING_BYTE_LATIN_ISO8859_3,
+ /* U+015E */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+015F */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0160 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0161 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0162 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0163 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0164 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0165 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0166 */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+0167 */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+0168 */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+0169 */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+016A */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+016B */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+016C */ LEADING_BYTE_LATIN_ISO8859_3,
+ /* U+016D */ LEADING_BYTE_LATIN_ISO8859_3,
+ /* U+016E */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+016F */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0170 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0171 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+0172 */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+0173 */ LEADING_BYTE_LATIN_ISO8859_4,
+ /* U+0174 */ LEADING_BYTE_JAPANESE_JISX0212,
+ /* U+0175 */ LEADING_BYTE_JAPANESE_JISX0212,
+ /* U+0176 */ LEADING_BYTE_JAPANESE_JISX0212,
+ /* U+0177 */ LEADING_BYTE_JAPANESE_JISX0212,
+ /* U+0178 */ LEADING_BYTE_JAPANESE_JISX0212,
+ /* U+0179 */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+017A */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+017B */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+017C */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+017D */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+017E */ LEADING_BYTE_LATIN_ISO8859_2,
+ /* U+017F */ LEADING_BYTE_UCS_BMP
+};
+
+unsigned char latin_a_char_to_byte1[128] = {
+ /* U+0100 */ 0xC0 - 0x80,
+ /* U+0101 */ 0xE0 - 0x80,
+ /* U+0102 */ 0xC3 - 0x80,
+ /* U+0103 */ 0xE3 - 0x80,
+ /* U+0104 */ 0xA1 - 0x80,
+ /* U+0105 */ 0xB1 - 0x80,
+ /* U+0106 */ 0xC6 - 0x80,
+ /* U+0107 */ 0xE6 - 0x80,
+ /* U+0108 */ 0xC6 - 0x80,
+ /* U+0109 */ 0xE6 - 0x80,
+ /* U+010A */ 0xC5 - 0x80,
+ /* U+010B */ 0xE5 - 0x80,
+ /* U+010C */ 0xC8 - 0x80,
+ /* U+010D */ 0xE8 - 0x80,
+ /* U+010E */ 0xCF - 0x80,
+ /* U+010F */ 0xEF - 0x80,
+ /* U+0110 */ 0xD0 - 0x80,
+ /* U+0111 */ 0xF0 - 0x80,
+ /* U+0112 */ 0xAA - 0x80,
+ /* U+0113 */ 0xBA - 0x80,
+ /* U+0114 */ 0x01,
+ /* U+0115 */ 0x01,
+ /* U+0116 */ 0xCC - 0x80,
+ /* U+0117 */ 0xEC - 0x80,
+ /* U+0118 */ 0xCA - 0x80,
+ /* U+0119 */ 0xEA - 0x80,
+ /* U+011A */ 0xCC - 0x80,
+ /* U+011B */ 0xEC - 0x80,
+ /* U+011C */ 0xD8 - 0x80,
+ /* U+011D */ 0xF8 - 0x80,
+ /* U+011E */ 0xAB - 0x80,
+ /* U+011F */ 0xBB - 0x80,
+ /* U+0120 */ 0xD5 - 0x80,
+ /* U+0121 */ 0xF5 - 0x80,
+ /* U+0122 */ 0xAB - 0x80,
+ /* U+0123 */ 0xBB - 0x80,
+ /* U+0124 */ 0xA6 - 0x80,
+ /* U+0125 */ 0xB6 - 0x80,
+ /* U+0126 */ 0xA1 - 0x80,
+ /* U+0127 */ 0xB1 - 0x80,
+ /* U+0128 */ 0xA5 - 0x80,
+ /* U+0129 */ 0xB5 - 0x80,
+ /* U+012A */ 0xCF - 0x80,
+ /* U+012B */ 0xEF - 0x80,
+ /* U+012C */ 0x01,
+ /* U+012D */ 0x01,
+ /* U+012E */ 0xC7 - 0x80,
+ /* U+012F */ 0xE7 - 0x80,
+ /* U+0130 */ 0xA9 - 0x80,
+ /* U+0131 */ 0xB9 - 0x80,
+ /* U+0132 */ 0x29,
+ /* U+0133 */ 0x29,
+ /* U+0134 */ 0xAC - 0x80,
+ /* U+0135 */ 0xBC - 0x80,
+ /* U+0136 */ 0xD3 - 0x80,
+ /* U+0137 */ 0xF3 - 0x80,
+ /* U+0138 */ 0xA2 - 0x80,
+ /* U+0139 */ 0xC5 - 0x80,
+ /* U+013A */ 0xE5 - 0x80,
+ /* U+013B */ 0xA6 - 0x80,
+ /* U+013C */ 0xB6 - 0x80,
+ /* U+013D */ 0xA5 - 0x80,
+ /* U+013E */ 0xB5 - 0x80,
+ /* U+013F */ 0x29,
+ /* U+0140 */ 0x29,
+ /* U+0141 */ 0xA3 - 0x80,
+ /* U+0142 */ 0xB3 - 0x80,
+ /* U+0143 */ 0xD1 - 0x80,
+ /* U+0144 */ 0xF1 - 0x80,
+ /* U+0145 */ 0xD1 - 0x80,
+ /* U+0146 */ 0xF1 - 0x80,
+ /* U+0147 */ 0xD2 - 0x80,
+ /* U+0148 */ 0xF2 - 0x80,
+ /* U+0149 */ 0x29,
+ /* U+014A */ 0xBD - 0x80,
+ /* U+014B */ 0xBF - 0x80,
+ /* U+014C */ 0xD2 - 0x80,
+ /* U+014D */ 0xF2 - 0x80,
+ /* U+014E */ 0x01,
+ /* U+014F */ 0x01,
+ /* U+0150 */ 0xD5 - 0x80,
+ /* U+0151 */ 0xF5 - 0x80,
+ /* U+0152 */ 0x29,
+ /* U+0153 */ 0x29,
+ /* U+0154 */ 0xC0 - 0x80,
+ /* U+0155 */ 0xE0 - 0x80,
+ /* U+0156 */ 0xA3 - 0x80,
+ /* U+0157 */ 0xB3 - 0x80,
+ /* U+0158 */ 0xD8 - 0x80,
+ /* U+0159 */ 0xF8 - 0x80,
+ /* U+015A */ 0xA6 - 0x80,
+ /* U+015B */ 0xB6 - 0x80,
+ /* U+015C */ 0xDE - 0x80,
+ /* U+015D */ 0xFE - 0x80,
+ /* U+015E */ 0xAA - 0x80,
+ /* U+015F */ 0xBA - 0x80,
+ /* U+0160 */ 0xA9 - 0x80,
+ /* U+0161 */ 0xB9 - 0x80,
+ /* U+0162 */ 0xDE - 0x80,
+ /* U+0163 */ 0xFE - 0x80,
+ /* U+0164 */ 0xAB - 0x80,
+ /* U+0165 */ 0xBB - 0x80,
+ /* U+0166 */ 0xAC - 0x80,
+ /* U+0167 */ 0xBC - 0x80,
+ /* U+0168 */ 0xDD - 0x80,
+ /* U+0169 */ 0xFD - 0x80,
+ /* U+016A */ 0xDE - 0x80,
+ /* U+016B */ 0xFE - 0x80,
+ /* U+016C */ 0xDD - 0x80,
+ /* U+016D */ 0xFD - 0x80,
+ /* U+016E */ 0xD9 - 0x80,
+ /* U+016F */ 0xF9 - 0x80,
+ /* U+0170 */ 0xDB - 0x80,
+ /* U+0171 */ 0xFB - 0x80,
+ /* U+0172 */ 0xD9 - 0x80,
+ /* U+0173 */ 0xF9 - 0x80,
+ /* U+0174 */ 0x2A,
+ /* U+0175 */ 0x2B,
+ /* U+0176 */ 0x2A,
+ /* U+0177 */ 0x2B,
+ /* U+0178 */ 0x2A,
+ /* U+0179 */ 0xAC - 0x80,
+ /* U+017A */ 0xBC - 0x80,
+ /* U+017B */ 0xAF - 0x80,
+ /* U+017C */ 0xBF - 0x80,
+ /* U+017D */ 0xAE - 0x80,
+ /* U+017E */ 0xBE - 0x80,
+ /* U+017F */ 0x01
+};
+
+unsigned char latin_a_char_to_byte2[128] = {
+ /* U+0100 */ 0x00,
+ /* U+0101 */ 0x00,
+ /* U+0102 */ 0x00,
+ /* U+0103 */ 0x00,
+ /* U+0104 */ 0x00,
+ /* U+0105 */ 0x00,
+ /* U+0106 */ 0x00,
+ /* U+0107 */ 0x00,
+ /* U+0108 */ 0x00,
+ /* U+0109 */ 0x00,
+ /* U+010A */ 0x00,
+ /* U+010B */ 0x00,
+ /* U+010C */ 0x00,
+ /* U+010D */ 0x00,
+ /* U+010E */ 0x00,
+ /* U+010F */ 0x00,
+ /* U+0110 */ 0x00,
+ /* U+0111 */ 0x00,
+ /* U+0112 */ 0x00,
+ /* U+0113 */ 0x00,
+ /* U+0114 */ 0x14,
+ /* U+0115 */ 0x15,
+ /* U+0116 */ 0x00,
+ /* U+0117 */ 0x00,
+ /* U+0118 */ 0x00,
+ /* U+0119 */ 0x00,
+ /* U+011A */ 0x00,
+ /* U+011B */ 0x00,
+ /* U+011C */ 0x00,
+ /* U+011D */ 0x00,
+ /* U+011E */ 0x00,
+ /* U+011F */ 0x00,
+ /* U+0120 */ 0x00,
+ /* U+0121 */ 0x00,
+ /* U+0122 */ 0x00,
+ /* U+0123 */ 0x00,
+ /* U+0124 */ 0x00,
+ /* U+0125 */ 0x00,
+ /* U+0126 */ 0x00,
+ /* U+0127 */ 0x00,
+ /* U+0128 */ 0x00,
+ /* U+0129 */ 0x00,
+ /* U+012A */ 0x00,
+ /* U+012B */ 0x00,
+ /* U+012C */ 0x2C,
+ /* U+012D */ 0x2D,
+ /* U+012E */ 0x00,
+ /* U+012F */ 0x00,
+ /* U+0130 */ 0x00,
+ /* U+0131 */ 0x00,
+ /* U+0132 */ 0x26,
+ /* U+0133 */ 0x46,
+ /* U+0134 */ 0x00,
+ /* U+0135 */ 0x00,
+ /* U+0136 */ 0x00,
+ /* U+0137 */ 0x00,
+ /* U+0138 */ 0x00,
+ /* U+0139 */ 0x00,
+ /* U+013A */ 0x00,
+ /* U+013B */ 0x00,
+ /* U+013C */ 0x00,
+ /* U+013D */ 0x00,
+ /* U+013E */ 0x00,
+ /* U+013F */ 0x29,
+ /* U+0140 */ 0x49,
+ /* U+0141 */ 0x00,
+ /* U+0142 */ 0x00,
+ /* U+0143 */ 0x00,
+ /* U+0144 */ 0x00,
+ /* U+0145 */ 0x00,
+ /* U+0146 */ 0x00,
+ /* U+0147 */ 0x00,
+ /* U+0148 */ 0x00,
+ /* U+0149 */ 0x4A,
+ /* U+014A */ 0x00,
+ /* U+014B */ 0x00,
+ /* U+014C */ 0x00,
+ /* U+014D */ 0x00,
+ /* U+014E */ 0x4E,
+ /* U+014F */ 0x4F,
+ /* U+0150 */ 0x00,
+ /* U+0151 */ 0x00,
+ /* U+0152 */ 0x2D,
+ /* U+0153 */ 0x4D,
+ /* U+0154 */ 0x00,
+ /* U+0155 */ 0x00,
+ /* U+0156 */ 0x00,
+ /* U+0157 */ 0x00,
+ /* U+0158 */ 0x00,
+ /* U+0159 */ 0x00,
+ /* U+015A */ 0x00,
+ /* U+015B */ 0x00,
+ /* U+015C */ 0x00,
+ /* U+015D */ 0x00,
+ /* U+015E */ 0x00,
+ /* U+015F */ 0x00,
+ /* U+0160 */ 0x00,
+ /* U+0161 */ 0x00,
+ /* U+0162 */ 0x00,
+ /* U+0163 */ 0x00,
+ /* U+0164 */ 0x00,
+ /* U+0165 */ 0x00,
+ /* U+0166 */ 0x00,
+ /* U+0167 */ 0x00,
+ /* U+0168 */ 0x00,
+ /* U+0169 */ 0x00,
+ /* U+016A */ 0x00,
+ /* U+016B */ 0x00,
+ /* U+016C */ 0x00,
+ /* U+016D */ 0x00,
+ /* U+016E */ 0x00,
+ /* U+016F */ 0x00,
+ /* U+0170 */ 0x00,
+ /* U+0171 */ 0x00,
+ /* U+0172 */ 0x00,
+ /* U+0173 */ 0x00,
+ /* U+0174 */ 0x71,
+ /* U+0175 */ 0x71,
+ /* U+0176 */ 0x74,
+ /* U+0177 */ 0x74,
+ /* U+0178 */ 0x73,
+ /* U+0179 */ 0x00,
+ /* U+017A */ 0x00,
+ /* U+017B */ 0x00,
+ /* U+017C */ 0x00,
+ /* U+017D */ 0x00,
+ /* U+017E */ 0x00,
+ /* U+017F */ 0x7F
+};
Lisp_Object Vutf_2000_version;
+#endif
+#ifndef UTF2000
int leading_code_private_11;
+#endif
Lisp_Object Qcharsetp;
Lisp_Object Qregistry, Qfinal, Qgraphic;
Lisp_Object Qdirection;
Lisp_Object Qreverse_direction_charset;
-Lisp_Object Qccl_program;
Lisp_Object Qleading_byte;
Lisp_Object Qshort_name, Qlong_name;
Qjapanese_jisx0212,
Qchinese_cns11643_1,
Qchinese_cns11643_2,
+#ifdef UTF2000
+ Qchinese_cns11643_3,
+ Qchinese_cns11643_4,
+ Qchinese_cns11643_5,
+ Qchinese_cns11643_6,
+ Qchinese_cns11643_7,
+ Qucs_bmp,
+ Qlatin_viscii_lower,
+ Qlatin_viscii_upper,
+#endif
Qchinese_big5_1,
Qchinese_big5_2,
Qcomposite;
Lisp_Object Vcharset_hash_table;
-static Bufbyte next_allocated_1_byte_leading_byte;
-static Bufbyte next_allocated_2_byte_leading_byte;
+static Charset_ID next_allocated_1_byte_leading_byte;
+static Charset_ID next_allocated_2_byte_leading_byte;
/* Composite characters are characters constructed by overstriking two
or more regular characters.
{
Bufbyte *p;
#ifndef UTF2000
- Bufbyte lb;
+ Charset_ID lb;
int c1, c2;
Lisp_Object charset;
#endif
write_c_string (buf, printcharfun);
}
+static const struct lrecord_description charset_description[] = {
+ { XD_LISP_OBJECT, offsetof(struct Lisp_Charset, name), 7 },
+ { XD_END }
+};
+
DEFINE_LRECORD_IMPLEMENTATION ("charset", charset,
mark_charset, print_charset, 0, 0, 0,
+ charset_description,
struct Lisp_Charset);
/* Make a new charset. */
static Lisp_Object
-make_charset (int id, Lisp_Object name, unsigned char rep_bytes,
+make_charset (Charset_ID id, Lisp_Object name,
unsigned char type, unsigned char columns, unsigned char graphic,
- Bufbyte final, unsigned char direction, Lisp_Object short_name,
+ Bufbyte final, unsigned char direction, Lisp_Object short_name,
Lisp_Object long_name, Lisp_Object doc,
- Lisp_Object reg)
+ Lisp_Object reg,
+ Emchar* decoding_table)
{
Lisp_Object obj;
struct Lisp_Charset *cs =
CHARSET_NAME (cs) = name;
CHARSET_SHORT_NAME (cs) = short_name;
CHARSET_LONG_NAME (cs) = long_name;
- CHARSET_REP_BYTES (cs) = rep_bytes;
CHARSET_DIRECTION (cs) = direction;
CHARSET_TYPE (cs) = type;
CHARSET_COLUMNS (cs) = columns;
CHARSET_REGISTRY (cs) = reg;
CHARSET_CCL_PROGRAM (cs) = Qnil;
CHARSET_REVERSE_DIRECTION_CHARSET (cs) = Qnil;
+#ifdef UTF2000
+ CHARSET_DECODING_TABLE(cs) = decoding_table;
+#endif
- CHARSET_DIMENSION (cs) = (CHARSET_TYPE (cs) == CHARSET_TYPE_94 ||
- CHARSET_TYPE (cs) == CHARSET_TYPE_96) ? 1 : 2;
- CHARSET_CHARS (cs) = (CHARSET_TYPE (cs) == CHARSET_TYPE_94 ||
- CHARSET_TYPE (cs) == CHARSET_TYPE_94X94) ? 94 : 96;
+ switch ( CHARSET_TYPE (cs) )
+ {
+ case CHARSET_TYPE_94:
+ CHARSET_DIMENSION (cs) = 1;
+ CHARSET_CHARS (cs) = 94;
+#ifdef UTF2000
+ if (decoding_table != NULL)
+ {
+ size_t i;
+ CHARSET_TO_BYTE1_TABLE(cs) = make_byte_from_character_table();
+ for (i = 0; i < 94; i++)
+ {
+ Emchar c = decoding_table[i];
+
+ if (c <= 0xffff)
+ put_byte_from_character_table (c, i + 33,
+ CHARSET_TO_BYTE1_TABLE(cs));
+ }
+ }
+ else
+ CHARSET_TO_BYTE1_TABLE(cs) = NULL;
+ CHARSET_TO_BYTE2_TABLE(cs) = NULL;
+#endif
+ break;
+ case CHARSET_TYPE_96:
+ CHARSET_DIMENSION (cs) = 1;
+ CHARSET_CHARS (cs) = 96;
+#ifdef UTF2000
+ if (decoding_table != NULL)
+ {
+ size_t i;
+ CHARSET_TO_BYTE1_TABLE(cs) = make_byte_from_character_table();
+ for (i = 0; i < 96; i++)
+ {
+ Emchar c = decoding_table[i];
+
+ if (c <= 0xffff)
+ put_byte_from_character_table (c, i + 32,
+ CHARSET_TO_BYTE1_TABLE(cs));
+ }
+ }
+ else
+ CHARSET_TO_BYTE1_TABLE(cs) = NULL;
+ CHARSET_TO_BYTE2_TABLE(cs) = NULL;
+#endif
+ break;
+ case CHARSET_TYPE_94X94:
+ CHARSET_DIMENSION (cs) = 2;
+ CHARSET_CHARS (cs) = 94;
+#ifdef UTF2000
+ CHARSET_TO_BYTE1_TABLE(cs) = NULL;
+ CHARSET_TO_BYTE2_TABLE(cs) = NULL;
+#endif
+ break;
+ case CHARSET_TYPE_96X96:
+ CHARSET_DIMENSION (cs) = 2;
+ CHARSET_CHARS (cs) = 96;
+#ifdef UTF2000
+ CHARSET_TO_BYTE1_TABLE(cs) = NULL;
+ CHARSET_TO_BYTE2_TABLE(cs) = NULL;
+#endif
+ break;
+#ifdef UTF2000
+ case CHARSET_TYPE_128X128:
+ CHARSET_DIMENSION (cs) = 2;
+ CHARSET_CHARS (cs) = 128;
+#ifdef UTF2000
+ CHARSET_TO_BYTE1_TABLE(cs) = NULL;
+ CHARSET_TO_BYTE2_TABLE(cs) = NULL;
+#endif
+ break;
+ case CHARSET_TYPE_256X256:
+ CHARSET_DIMENSION (cs) = 2;
+ CHARSET_CHARS (cs) = 256;
+#ifdef UTF2000
+ CHARSET_TO_BYTE1_TABLE(cs) = NULL;
+ CHARSET_TO_BYTE2_TABLE(cs) = NULL;
+#endif
+ break;
+#endif
+ }
+#ifndef UTF2000
+ if (id == LEADING_BYTE_ASCII)
+ CHARSET_REP_BYTES (cs) = 1;
+ else if (id < 0xA0)
+ CHARSET_REP_BYTES (cs) = CHARSET_DIMENSION (cs) + 1;
+ else
+ CHARSET_REP_BYTES (cs) = CHARSET_DIMENSION (cs) + 2;
+#endif
+
if (final)
{
/* some charsets do not have final characters. This includes
ASCII, Control-1, Composite, and the two faux private
charsets. */
+#if UTF2000
+ assert (NILP (charset_by_attributes[type][final]));
+ charset_by_attributes[type][final] = obj;
+#else
assert (NILP (charset_by_attributes[type][final][direction]));
charset_by_attributes[type][final][direction] = obj;
+#endif
}
- assert (NILP (charset_by_leading_byte[id - 128]));
- charset_by_leading_byte[id - 128] = obj;
+ assert (NILP (charset_by_leading_byte[id - MIN_LEADING_BYTE]));
+ charset_by_leading_byte[id - MIN_LEADING_BYTE] = obj;
+#ifndef UTF2000
if (id < 0xA0)
/* official leading byte */
- rep_bytes_by_first_byte[id] = rep_bytes;
+ rep_bytes_by_first_byte[id] = CHARSET_REP_BYTES (cs);
+#endif
/* Some charsets are "faux" and don't have names or really exist at
all except in the leading-byte table. */
static int
get_unallocated_leading_byte (int dimension)
{
- int lb;
+ Charset_ID lb;
if (dimension == 1)
{
error
("Character set already defined for this DIMENSION/CHARS/FINAL combo");
+#ifdef UTF2000
+ if (dimension == 1)
+ {
+ if (chars == 94)
+ {
+ /* id = CHARSET_ID_OFFSET_94 + final; */
+ id = get_unallocated_leading_byte (dimension);
+ }
+ else if (chars == 96)
+ {
+ id = get_unallocated_leading_byte (dimension);
+ }
+ else
+ {
+ abort ();
+ }
+ }
+ else if (dimension == 2)
+ {
+ if (chars == 94)
+ {
+ id = get_unallocated_leading_byte (dimension);
+ }
+ else if (chars == 96)
+ {
+ id = get_unallocated_leading_byte (dimension);
+ }
+ else
+ {
+ abort ();
+ }
+ }
+ else
+ {
+ abort ();
+ }
+#else
id = get_unallocated_leading_byte (dimension);
+#endif
if (NILP (doc_string))
doc_string = build_string ("");
if (columns == -1)
columns = dimension;
- charset = make_charset (id, name, dimension + 2, type, columns, graphic,
- final, direction, short_name, long_name, doc_string, registry);
+ charset = make_charset (id, name, type, columns, graphic,
+ final, direction, short_name, long_name,
+ doc_string, registry,
+ NULL);
if (!NILP (ccl_program))
XCHARSET_CCL_PROGRAM (charset) = ccl_program;
return charset;
long_name = CHARSET_LONG_NAME (cs);
registry = CHARSET_REGISTRY (cs);
- new_charset = make_charset (id, new_name, dimension + 2, type, columns,
+ new_charset = make_charset (id, new_name, type, columns,
graphic, final, direction, short_name, long_name,
- doc_string, registry);
+ doc_string, registry,
+ NULL);
CHARSET_REVERSE_DIRECTION_CHARSET (cs) = new_charset;
XCHARSET_REVERSE_DIRECTION_CHARSET (new_charset) = charset;
if (EQ (charset, Vcharset_ascii)) lowlim = 0, highlim = 127;
else if (EQ (charset, Vcharset_control_1)) lowlim = 0, highlim = 31;
+#ifdef UTF2000
+ else if (CHARSET_CHARS (cs) == 256) lowlim = 0, highlim = 255;
+#endif
else if (CHARSET_CHARS (cs) == 94) lowlim = 33, highlim = 126;
else /* CHARSET_CHARS (cs) == 96) */ lowlim = 32, highlim = 127;
the 8th bit off ARG1 and ARG2 becaue it allows programmers to
write (make-char 'latin-iso8859-2 CODE) where code is the actual
Latin 2 code of the character. */
- a1 = XINT (arg1) & 0x7f;
+#ifdef UTF2000
+ a1 = XINT (arg1);
+ if (highlim < 128)
+ a1 &= 0x7f;
+#else
+ a1 = XINT (arg1);
+#endif
if (a1 < lowlim || a1 > highlim)
args_out_of_range_3 (arg1, make_int (lowlim), make_int (highlim));
}
CHECK_INT (arg2);
+#ifdef UTF2000
+ a2 = XINT (arg2);
+ if (highlim < 128)
+ a2 &= 0x7f;
+#else
a2 = XINT (arg2) & 0x7f;
+#endif
if (a2 < lowlim || a2 > highlim)
args_out_of_range_3 (arg2, make_int (lowlim), make_int (highlim));
{
CHECK_CHAR_COERCE_INT (ch);
- return XCHARSET_NAME (CHARSET_BY_LEADING_BYTE
- (CHAR_LEADING_BYTE (XCHAR (ch))));
+ return XCHARSET_NAME (CHAR_CHARSET (XCHAR (ch)));
}
-DEFUN ("char-octet", Fchar_octet, 1, 2, 0, /*
-Return the octet numbered N (should be 0 or 1) of char CH.
-N defaults to 0 if omitted.
+DEFUN ("split-char", Fsplit_char, 1, 1, 0, /*
+Return list of charset and one or two position-codes of CHAR.
*/
- (ch, n))
+ (character))
{
- Lisp_Object charset;
- int c1, c2, int_n;
+ /* This function can GC */
+ struct gcpro gcpro1, gcpro2;
+ Lisp_Object charset = Qnil;
+ Lisp_Object rc = Qnil;
+ int c1, c2;
- CHECK_CHAR_COERCE_INT (ch);
- if (NILP (n))
- int_n = 0;
+ GCPRO2 (charset, rc);
+ CHECK_CHAR_COERCE_INT (character);
+
+ BREAKUP_CHAR (XCHAR (character), charset, c1, c2);
+
+ if (XCHARSET_DIMENSION (Fget_charset (charset)) == 2)
+ {
+ rc = list3 (XCHARSET_NAME (charset), make_int (c1), make_int (c2));
+ }
else
{
- CHECK_INT (n);
- int_n = XINT (n);
- if (int_n != 0 && int_n != 1)
- signal_simple_error ("Octet number must be 0 or 1", n);
+ rc = list2 (XCHARSET_NAME (charset), make_int (c1));
}
- BREAKUP_CHAR (XCHAR (ch), charset, c1, c2);
- return make_int (int_n == 0 ? c1 : c2);
+ UNGCPRO;
+
+ return rc;
}
\f
DEFSUBR (Fmake_char);
DEFSUBR (Fchar_charset);
- DEFSUBR (Fchar_octet);
+ DEFSUBR (Fsplit_char);
#ifdef ENABLE_COMPOSITE_CHARS
DEFSUBR (Fmake_composite_char);
defsymbol (&Qgraphic, "graphic");
defsymbol (&Qdirection, "direction");
defsymbol (&Qreverse_direction_charset, "reverse-direction-charset");
- defsymbol (&Qccl_program, "ccl-program");
defsymbol (&Qshort_name, "short-name");
defsymbol (&Qlong_name, "long-name");
defsymbol (&Qjapanese_jisx0212, "japanese-jisx0212");
defsymbol (&Qchinese_cns11643_1, "chinese-cns11643-1");
defsymbol (&Qchinese_cns11643_2, "chinese-cns11643-2");
+#ifdef UTF2000
+ defsymbol (&Qchinese_cns11643_3, "chinese-cns11643-3");
+ defsymbol (&Qchinese_cns11643_4, "chinese-cns11643-4");
+ defsymbol (&Qchinese_cns11643_5, "chinese-cns11643-5");
+ defsymbol (&Qchinese_cns11643_6, "chinese-cns11643-6");
+ defsymbol (&Qchinese_cns11643_7, "chinese-cns11643-7");
+ defsymbol (&Qucs_bmp, "ucs-bmp");
+ defsymbol (&Qlatin_viscii_lower, "vietnamese-viscii-lower");
+ defsymbol (&Qlatin_viscii_upper, "vietnamese-viscii-upper");
+#endif
defsymbol (&Qchinese_big5_1, "chinese-big5-1");
defsymbol (&Qchinese_big5_2, "chinese-big5-2");
defsymbol (&Qcomposite, "composite");
-
-#ifdef UTF2000
- Vutf_2000_version = build_string("0.2");
- DEFVAR_LISP ("utf-2000-version", &Vutf_2000_version /*
-Version number of UTF-2000.
-*/ );
-#endif
-
- leading_code_private_11 = PRE_LEADING_BYTE_PRIVATE_1;
- DEFVAR_INT ("leading-code-private-11", &leading_code_private_11 /*
-Leading-code of private TYPE9N charset of column-width 1.
-*/ );
- leading_code_private_11 = PRE_LEADING_BYTE_PRIVATE_1;
}
void
vars_of_mule_charset (void)
{
- int i, j, k;
+ int i, j;
+#ifndef UTF2000
+ int k;
+#endif
/* Table of charsets indexed by leading byte. */
for (i = 0; i < countof (charset_by_leading_byte); i++)
charset_by_leading_byte[i] = Qnil;
+#ifdef UTF2000
+ /* Table of charsets indexed by type/final-byte. */
+ for (i = 0; i < countof (charset_by_attributes); i++)
+ for (j = 0; j < countof (charset_by_attributes[0]); j++)
+ charset_by_attributes[i][j] = Qnil;
+#else
/* Table of charsets indexed by type/final-byte/direction. */
for (i = 0; i < countof (charset_by_attributes); i++)
for (j = 0; j < countof (charset_by_attributes[0]); j++)
for (k = 0; k < countof (charset_by_attributes[0][0]); k++)
charset_by_attributes[i][j][k] = Qnil;
+#endif
next_allocated_1_byte_leading_byte = MIN_LEADING_BYTE_PRIVATE_1;
+#ifdef UTF2000
+ next_allocated_2_byte_leading_byte = LEADING_BYTE_CHINESE_BIG5_2 + 1;
+#else
next_allocated_2_byte_leading_byte = MIN_LEADING_BYTE_PRIVATE_2;
+#endif
+
+#ifndef UTF2000
+ leading_code_private_11 = PRE_LEADING_BYTE_PRIVATE_1;
+ DEFVAR_INT ("leading-code-private-11", &leading_code_private_11 /*
+Leading-code of private TYPE9N charset of column-width 1.
+*/ );
+ leading_code_private_11 = PRE_LEADING_BYTE_PRIVATE_1;
+#endif
+
+#ifdef UTF2000
+ Vutf_2000_version = build_string("0.7 (Hirano)");
+ DEFVAR_LISP ("utf-2000-version", &Vutf_2000_version /*
+Version number of UTF-2000.
+*/ );
+#endif
}
void
/* Predefined character sets. We store them into variables for
ease of access. */
+#ifdef UTF2000
+ Vcharset_ucs_bmp =
+ make_charset (LEADING_BYTE_UCS_BMP, Qucs_bmp,
+ CHARSET_TYPE_256X256, 1, 0, 0,
+ CHARSET_LEFT_TO_RIGHT,
+ build_string ("BMP"),
+ build_string ("BMP"),
+ build_string ("BMP"),
+ build_string (""),
+ NULL);
+#endif
Vcharset_ascii =
- make_charset (LEADING_BYTE_ASCII, Qascii, 1,
+ make_charset (LEADING_BYTE_ASCII, Qascii,
CHARSET_TYPE_94, 1, 0, 'B',
CHARSET_LEFT_TO_RIGHT,
build_string ("ASCII"),
build_string ("ASCII)"),
build_string ("ASCII (ISO646 IRV)"),
- build_string ("\\(iso8859-[0-9]*\\|-ascii\\)"));
+ build_string ("\\(iso8859-[0-9]*\\|-ascii\\)"),
+ NULL);
Vcharset_control_1 =
- make_charset (LEADING_BYTE_CONTROL_1, Qcontrol_1, 2,
+ make_charset (LEADING_BYTE_CONTROL_1, Qcontrol_1,
CHARSET_TYPE_94, 1, 1, 0,
CHARSET_LEFT_TO_RIGHT,
build_string ("C1"),
build_string ("Control characters"),
build_string ("Control characters 128-191"),
- build_string (""));
+ build_string (""),
+ NULL);
Vcharset_latin_iso8859_1 =
- make_charset (LEADING_BYTE_LATIN_ISO8859_1, Qlatin_iso8859_1, 2,
+ make_charset (LEADING_BYTE_LATIN_ISO8859_1, Qlatin_iso8859_1,
CHARSET_TYPE_96, 1, 1, 'A',
CHARSET_LEFT_TO_RIGHT,
build_string ("Latin-1"),
build_string ("ISO8859-1 (Latin-1)"),
build_string ("ISO8859-1 (Latin-1)"),
- build_string ("iso8859-1"));
+ build_string ("iso8859-1"),
+ NULL);
Vcharset_latin_iso8859_2 =
- make_charset (LEADING_BYTE_LATIN_ISO8859_2, Qlatin_iso8859_2, 2,
+ make_charset (LEADING_BYTE_LATIN_ISO8859_2, Qlatin_iso8859_2,
CHARSET_TYPE_96, 1, 1, 'B',
CHARSET_LEFT_TO_RIGHT,
build_string ("Latin-2"),
build_string ("ISO8859-2 (Latin-2)"),
build_string ("ISO8859-2 (Latin-2)"),
- build_string ("iso8859-2"));
+ build_string ("iso8859-2"),
+ latin_iso8859_2_to_ucs);
Vcharset_latin_iso8859_3 =
- make_charset (LEADING_BYTE_LATIN_ISO8859_3, Qlatin_iso8859_3, 2,
+ make_charset (LEADING_BYTE_LATIN_ISO8859_3, Qlatin_iso8859_3,
CHARSET_TYPE_96, 1, 1, 'C',
CHARSET_LEFT_TO_RIGHT,
build_string ("Latin-3"),
build_string ("ISO8859-3 (Latin-3)"),
build_string ("ISO8859-3 (Latin-3)"),
- build_string ("iso8859-3"));
+ build_string ("iso8859-3"),
+ latin_iso8859_3_to_ucs);
Vcharset_latin_iso8859_4 =
- make_charset (LEADING_BYTE_LATIN_ISO8859_4, Qlatin_iso8859_4, 2,
+ make_charset (LEADING_BYTE_LATIN_ISO8859_4, Qlatin_iso8859_4,
CHARSET_TYPE_96, 1, 1, 'D',
CHARSET_LEFT_TO_RIGHT,
build_string ("Latin-4"),
build_string ("ISO8859-4 (Latin-4)"),
build_string ("ISO8859-4 (Latin-4)"),
- build_string ("iso8859-4"));
+ build_string ("iso8859-4"),
+ latin_iso8859_4_to_ucs);
Vcharset_thai_tis620 =
- make_charset (LEADING_BYTE_THAI_TIS620, Qthai_tis620, 2,
+ make_charset (LEADING_BYTE_THAI_TIS620, Qthai_tis620,
CHARSET_TYPE_96, 1, 1, 'T',
CHARSET_LEFT_TO_RIGHT,
build_string ("TIS620"),
build_string ("TIS620 (Thai)"),
build_string ("TIS620.2529 (Thai)"),
- build_string ("tis620"));
+ build_string ("tis620"),
+ NULL);
Vcharset_greek_iso8859_7 =
- make_charset (LEADING_BYTE_GREEK_ISO8859_7, Qgreek_iso8859_7, 2,
+ make_charset (LEADING_BYTE_GREEK_ISO8859_7, Qgreek_iso8859_7,
CHARSET_TYPE_96, 1, 1, 'F',
CHARSET_LEFT_TO_RIGHT,
build_string ("ISO8859-7"),
build_string ("ISO8859-7 (Greek)"),
build_string ("ISO8859-7 (Greek)"),
- build_string ("iso8859-7"));
+ build_string ("iso8859-7"),
+ NULL);
Vcharset_arabic_iso8859_6 =
- make_charset (LEADING_BYTE_ARABIC_ISO8859_6, Qarabic_iso8859_6, 2,
+ make_charset (LEADING_BYTE_ARABIC_ISO8859_6, Qarabic_iso8859_6,
CHARSET_TYPE_96, 1, 1, 'G',
CHARSET_RIGHT_TO_LEFT,
build_string ("ISO8859-6"),
build_string ("ISO8859-6 (Arabic)"),
build_string ("ISO8859-6 (Arabic)"),
- build_string ("iso8859-6"));
+ build_string ("iso8859-6"),
+ NULL);
Vcharset_hebrew_iso8859_8 =
- make_charset (LEADING_BYTE_HEBREW_ISO8859_8, Qhebrew_iso8859_8, 2,
+ make_charset (LEADING_BYTE_HEBREW_ISO8859_8, Qhebrew_iso8859_8,
CHARSET_TYPE_96, 1, 1, 'H',
CHARSET_RIGHT_TO_LEFT,
build_string ("ISO8859-8"),
build_string ("ISO8859-8 (Hebrew)"),
build_string ("ISO8859-8 (Hebrew)"),
- build_string ("iso8859-8"));
+ build_string ("iso8859-8"),
+ NULL);
Vcharset_katakana_jisx0201 =
- make_charset (LEADING_BYTE_KATAKANA_JISX0201, Qkatakana_jisx0201, 2,
+ make_charset (LEADING_BYTE_KATAKANA_JISX0201, Qkatakana_jisx0201,
CHARSET_TYPE_94, 1, 1, 'I',
CHARSET_LEFT_TO_RIGHT,
build_string ("JISX0201 Kana"),
build_string ("JISX0201.1976 (Japanese Kana)"),
build_string ("JISX0201.1976 Japanese Kana"),
- build_string ("jisx0201.1976"));
+ build_string ("jisx0201.1976"),
+ NULL);
Vcharset_latin_jisx0201 =
- make_charset (LEADING_BYTE_LATIN_JISX0201, Qlatin_jisx0201, 2,
+ make_charset (LEADING_BYTE_LATIN_JISX0201, Qlatin_jisx0201,
CHARSET_TYPE_94, 1, 0, 'J',
CHARSET_LEFT_TO_RIGHT,
build_string ("JISX0201 Roman"),
build_string ("JISX0201.1976 (Japanese Roman)"),
build_string ("JISX0201.1976 Japanese Roman"),
- build_string ("jisx0201.1976"));
+ build_string ("jisx0201.1976"),
+ latin_jisx0201_to_ucs);
Vcharset_cyrillic_iso8859_5 =
- make_charset (LEADING_BYTE_CYRILLIC_ISO8859_5, Qcyrillic_iso8859_5, 2,
+ make_charset (LEADING_BYTE_CYRILLIC_ISO8859_5, Qcyrillic_iso8859_5,
CHARSET_TYPE_96, 1, 1, 'L',
CHARSET_LEFT_TO_RIGHT,
build_string ("ISO8859-5"),
build_string ("ISO8859-5 (Cyrillic)"),
build_string ("ISO8859-5 (Cyrillic)"),
- build_string ("iso8859-5"));
+ build_string ("iso8859-5"),
+ NULL);
Vcharset_latin_iso8859_9 =
- make_charset (LEADING_BYTE_LATIN_ISO8859_9, Qlatin_iso8859_9, 2,
+ make_charset (LEADING_BYTE_LATIN_ISO8859_9, Qlatin_iso8859_9,
CHARSET_TYPE_96, 1, 1, 'M',
CHARSET_LEFT_TO_RIGHT,
build_string ("Latin-5"),
build_string ("ISO8859-9 (Latin-5)"),
build_string ("ISO8859-9 (Latin-5)"),
- build_string ("iso8859-9"));
+ build_string ("iso8859-9"),
+ latin_iso8859_9_to_ucs);
Vcharset_japanese_jisx0208_1978 =
- make_charset (LEADING_BYTE_JAPANESE_JISX0208_1978, Qjapanese_jisx0208_1978, 3,
+ make_charset (LEADING_BYTE_JAPANESE_JISX0208_1978, Qjapanese_jisx0208_1978,
CHARSET_TYPE_94X94, 2, 0, '@',
CHARSET_LEFT_TO_RIGHT,
build_string ("JISX0208.1978"),
build_string ("JISX0208.1978 (Japanese)"),
build_string
("JISX0208.1978 Japanese Kanji (so called \"old JIS\")"),
- build_string ("\\(jisx0208\\|jisc6226\\)\\.1978"));
+ build_string ("\\(jisx0208\\|jisc6226\\)\\.1978"),
+ NULL);
Vcharset_chinese_gb2312 =
- make_charset (LEADING_BYTE_CHINESE_GB2312, Qchinese_gb2312, 3,
+ make_charset (LEADING_BYTE_CHINESE_GB2312, Qchinese_gb2312,
CHARSET_TYPE_94X94, 2, 0, 'A',
CHARSET_LEFT_TO_RIGHT,
build_string ("GB2312"),
build_string ("GB2312)"),
build_string ("GB2312 Chinese simplified"),
- build_string ("gb2312"));
+ build_string ("gb2312"),
+ NULL);
Vcharset_japanese_jisx0208 =
- make_charset (LEADING_BYTE_JAPANESE_JISX0208, Qjapanese_jisx0208, 3,
+ make_charset (LEADING_BYTE_JAPANESE_JISX0208, Qjapanese_jisx0208,
CHARSET_TYPE_94X94, 2, 0, 'B',
CHARSET_LEFT_TO_RIGHT,
build_string ("JISX0208"),
build_string ("JISX0208.1983/1990 (Japanese)"),
build_string ("JISX0208.1983/1990 Japanese Kanji"),
- build_string ("jisx0208.19\\(83\\|90\\)"));
+ build_string ("jisx0208.19\\(83\\|90\\)"),
+ NULL);
Vcharset_korean_ksc5601 =
- make_charset (LEADING_BYTE_KOREAN_KSC5601, Qkorean_ksc5601, 3,
+ make_charset (LEADING_BYTE_KOREAN_KSC5601, Qkorean_ksc5601,
CHARSET_TYPE_94X94, 2, 0, 'C',
CHARSET_LEFT_TO_RIGHT,
build_string ("KSC5601"),
build_string ("KSC5601 (Korean"),
build_string ("KSC5601 Korean Hangul and Hanja"),
- build_string ("ksc5601"));
+ build_string ("ksc5601"),
+ NULL);
Vcharset_japanese_jisx0212 =
- make_charset (LEADING_BYTE_JAPANESE_JISX0212, Qjapanese_jisx0212, 3,
+ make_charset (LEADING_BYTE_JAPANESE_JISX0212, Qjapanese_jisx0212,
CHARSET_TYPE_94X94, 2, 0, 'D',
CHARSET_LEFT_TO_RIGHT,
build_string ("JISX0212"),
build_string ("JISX0212 (Japanese)"),
build_string ("JISX0212 Japanese Supplement"),
- build_string ("jisx0212"));
+ build_string ("jisx0212"),
+ NULL);
#define CHINESE_CNS_PLANE_RE(n) "cns11643[.-]\\(.*[.-]\\)?" n "$"
Vcharset_chinese_cns11643_1 =
- make_charset (LEADING_BYTE_CHINESE_CNS11643_1, Qchinese_cns11643_1, 3,
+ make_charset (LEADING_BYTE_CHINESE_CNS11643_1, Qchinese_cns11643_1,
CHARSET_TYPE_94X94, 2, 0, 'G',
CHARSET_LEFT_TO_RIGHT,
build_string ("CNS11643-1"),
build_string ("CNS11643-1 (Chinese traditional)"),
build_string
("CNS 11643 Plane 1 Chinese traditional"),
- build_string (CHINESE_CNS_PLANE_RE("1")));
+ build_string (CHINESE_CNS_PLANE_RE("1")),
+ NULL);
Vcharset_chinese_cns11643_2 =
- make_charset (LEADING_BYTE_CHINESE_CNS11643_2, Qchinese_cns11643_2, 3,
+ make_charset (LEADING_BYTE_CHINESE_CNS11643_2, Qchinese_cns11643_2,
CHARSET_TYPE_94X94, 2, 0, 'H',
CHARSET_LEFT_TO_RIGHT,
build_string ("CNS11643-2"),
build_string ("CNS11643-2 (Chinese traditional)"),
build_string
("CNS 11643 Plane 2 Chinese traditional"),
- build_string (CHINESE_CNS_PLANE_RE("2")));
+ build_string (CHINESE_CNS_PLANE_RE("2")),
+ NULL);
+#ifdef UTF2000
+ Vcharset_chinese_cns11643_3 =
+ make_charset (LEADING_BYTE_CHINESE_CNS11643_3, Qchinese_cns11643_3,
+ CHARSET_TYPE_94X94, 2, 0, 'I',
+ CHARSET_LEFT_TO_RIGHT,
+ build_string ("CNS11643-3"),
+ build_string ("CNS11643-3 (Chinese traditional)"),
+ build_string
+ ("CNS 11643 Plane 3 Chinese traditional"),
+ build_string (CHINESE_CNS_PLANE_RE("3")),
+ NULL);
+ Vcharset_chinese_cns11643_4 =
+ make_charset (LEADING_BYTE_CHINESE_CNS11643_4, Qchinese_cns11643_4,
+ CHARSET_TYPE_94X94, 2, 0, 'J',
+ CHARSET_LEFT_TO_RIGHT,
+ build_string ("CNS11643-4"),
+ build_string ("CNS11643-4 (Chinese traditional)"),
+ build_string
+ ("CNS 11643 Plane 4 Chinese traditional"),
+ build_string (CHINESE_CNS_PLANE_RE("4")),
+ NULL);
+ Vcharset_chinese_cns11643_5 =
+ make_charset (LEADING_BYTE_CHINESE_CNS11643_5, Qchinese_cns11643_5,
+ CHARSET_TYPE_94X94, 2, 0, 'K',
+ CHARSET_LEFT_TO_RIGHT,
+ build_string ("CNS11643-5"),
+ build_string ("CNS11643-5 (Chinese traditional)"),
+ build_string
+ ("CNS 11643 Plane 5 Chinese traditional"),
+ build_string (CHINESE_CNS_PLANE_RE("5")),
+ NULL);
+ Vcharset_chinese_cns11643_6 =
+ make_charset (LEADING_BYTE_CHINESE_CNS11643_6, Qchinese_cns11643_6,
+ CHARSET_TYPE_94X94, 2, 0, 'L',
+ CHARSET_LEFT_TO_RIGHT,
+ build_string ("CNS11643-6"),
+ build_string ("CNS11643-6 (Chinese traditional)"),
+ build_string
+ ("CNS 11643 Plane 6 Chinese traditional"),
+ build_string (CHINESE_CNS_PLANE_RE("6")),
+ NULL);
+ Vcharset_chinese_cns11643_7 =
+ make_charset (LEADING_BYTE_CHINESE_CNS11643_7, Qchinese_cns11643_7,
+ CHARSET_TYPE_94X94, 2, 0, 'M',
+ CHARSET_LEFT_TO_RIGHT,
+ build_string ("CNS11643-7"),
+ build_string ("CNS11643-7 (Chinese traditional)"),
+ build_string
+ ("CNS 11643 Plane 7 Chinese traditional"),
+ build_string (CHINESE_CNS_PLANE_RE("7")),
+ NULL);
+ Vcharset_latin_viscii_lower =
+ make_charset (LEADING_BYTE_LATIN_VISCII_LOWER, Qlatin_viscii_lower,
+ CHARSET_TYPE_96, 1, 1, '1',
+ CHARSET_LEFT_TO_RIGHT,
+ build_string ("VISCII lower"),
+ build_string ("VISCII lower (Vietnamese)"),
+ build_string ("VISCII lower (Vietnamese)"),
+ build_string ("VISCII1.1"),
+ latin_viscii_lower_to_ucs);
+ Vcharset_latin_viscii_upper =
+ make_charset (LEADING_BYTE_LATIN_VISCII_UPPER, Qlatin_viscii_upper,
+ CHARSET_TYPE_96, 1, 1, '2',
+ CHARSET_LEFT_TO_RIGHT,
+ build_string ("VISCII upper"),
+ build_string ("VISCII upper (Vietnamese)"),
+ build_string ("VISCII upper (Vietnamese)"),
+ build_string ("VISCII1.1"),
+ latin_viscii_upper_to_ucs);
+#endif
Vcharset_chinese_big5_1 =
- make_charset (LEADING_BYTE_CHINESE_BIG5_1, Qchinese_big5_1, 3,
+ make_charset (LEADING_BYTE_CHINESE_BIG5_1, Qchinese_big5_1,
CHARSET_TYPE_94X94, 2, 0, '0',
CHARSET_LEFT_TO_RIGHT,
build_string ("Big5"),
build_string ("Big5 (Level-1)"),
build_string
("Big5 Level-1 Chinese traditional"),
- build_string ("big5"));
+ build_string ("big5"),
+ NULL);
Vcharset_chinese_big5_2 =
- make_charset (LEADING_BYTE_CHINESE_BIG5_2, Qchinese_big5_2, 3,
+ make_charset (LEADING_BYTE_CHINESE_BIG5_2, Qchinese_big5_2,
CHARSET_TYPE_94X94, 2, 0, '1',
CHARSET_LEFT_TO_RIGHT,
build_string ("Big5"),
build_string ("Big5 (Level-2)"),
build_string
("Big5 Level-2 Chinese traditional"),
- build_string ("big5"));
-
+ build_string ("big5"),
+ NULL);
#ifdef ENABLE_COMPOSITE_CHARS
/* #### For simplicity, we put composite chars into a 96x96 charset.
This is going to lead to problems because you can run out of
room, esp. as we don't yet recycle numbers. */
Vcharset_composite =
- make_charset (LEADING_BYTE_COMPOSITE, Qcomposite, 3,
+ make_charset (LEADING_BYTE_COMPOSITE, Qcomposite,
CHARSET_TYPE_96X96, 2, 0, 0,
CHARSET_LEFT_TO_RIGHT,
build_string ("Composite"),