1 #ifndef CHARSET_H
2 #define CHARSET_H
3 
4 #ifndef FOR_LT
5 #include "system.h"
6 #endif
7 
8 STD_API int init_charset(void);
9 STD_API void deinit_charset(void);
10 
11 /*
12  * We'd like char8 to be unsigned char, but it causes too many problems.
13  * For example:
14  *     char8 name; ...; return name ? name : "<none>"
15  * produces a warning with many compilers if char8 is unsigned.
16  */
17 
18 typedef char char8;
19 typedef unsigned short char16;
20 typedef unsigned int char32;
21 
22 #if CHAR_SIZE == 8
23 typedef char8 Char;
24 #elif CHAR_SIZE == 16
25 typedef char16 Char;
26 #else
27 #error CHAR_SIZE must be 8 or 16
28 #endif
29 
30 /* Character encodings */
31 
32 enum character_encoding {
33     CE_unknown, CE_unspecified_ascii_superset,
34     CE_UTF_8, CE_ISO_646,
35     CE_ISO_8859_1,
36 
37     CE_ISO_8859_2, CE_ISO_8859_3, CE_ISO_8859_4, CE_ISO_8859_5,
38     CE_ISO_8859_6, CE_ISO_8859_7, CE_ISO_8859_8, CE_ISO_8859_9,
39     CE_ISO_8859_10, CE_ISO_8859_11, CE_ISO_8859_12_XXX, CE_ISO_8859_13,
40     CE_ISO_8859_14, CE_ISO_8859_15,
41 
42     CE_UTF_16B, CE_UTF_16L, CE_ISO_10646_UCS_2B, CE_ISO_10646_UCS_2L,
43     CE_enum_count
44 };
45 
46 typedef enum character_encoding CharacterEncoding;
47 
48 extern STD_API CharacterEncoding InternalCharacterEncoding;
49 
50 extern STD_API const char8 *CharacterEncodingName[CE_enum_count];
51 extern STD_API const char8 *CharacterEncodingNameAndByteOrder[CE_enum_count];
52 
53 struct character_encoding_alias {const char8 *name; CharacterEncoding enc;};
54 extern STD_API struct character_encoding_alias CharacterEncodingAlias[];
55 extern STD_API const int CE_alias_count;
56 
57 STD_API int EncodingIsAsciiSuperset(CharacterEncoding enc);
58 STD_API int EncodingsCompatible(CharacterEncoding enc1, CharacterEncoding enc2,
59 			CharacterEncoding *enc3);
60 STD_API CharacterEncoding FindEncoding(char8 *name);
61 
62 /* Translation tables for Latin-N - do this right sometime! XXX */
63 
64 extern STD_API int iso_to_unicode[14][256];
65 extern STD_API int iso_max_val[14];
66 extern STD_API char8 *unicode_to_iso[14];
67 
68 #endif /* CHARSET_H */
69