1 /*---------------------------------------------------------------------------*
2   Project: ENC library
3   File:    enc.h
4 
5   Copyright 2006 Nintendo.  All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain
8   proprietary information of Nintendo of America Inc. and/or Nintendo
9   Company Ltd., and are protected by Federal copyright law. They may
10   not be disclosed to third parties or copied or duplicated in any form,
11   in whole or in part, without the prior written consent of Nintendo.
12 
13   $Log: enc.h,v $
14   Revision 1.7  2007/02/05 23:34:45  yoshioka_yasuhiro
15   Added table stripping.
16 
17   Revision 1.6  2006/11/04 08:14:34  yoshioka_yasuhiro
18   Added windows-1252 support.
19 
20   Revision 1.5  2006/10/27 11:10:36  yoshioka_yasuhiro
21   Added some character encodings and automatic converter.
22 
23   Revision 1.4  2006/08/14 04:30:37  yoshioka_yasuhiro
24   Added ENCConvertStringJisToUnicode and ENCConvertStringUnicodeToJis.
25 
26   Revision 1.2  2006/08/09 10:36:55  yoshioka_yasuhiro
27   Specification change.
28   ENCConverString* functions returns a result code,
29   and read/write dstlen and srclen.
30 
31   Revision 1.1  2006/08/07 09:13:42  yoshioka_yasuhiro
32   Initial commit.
33 
34   $NoKeywords: $
35  *---------------------------------------------------------------------------*/
36 
37 #ifndef REVOLUTION_ENC_H__
38 #define REVOLUTION_ENC_H__
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
42 
43 #include <revolution/types.h>
44 
45 typedef enum ENCResult
46 {
47     ENC_OK = 0,
48     ENC_ERR_NO_BUF_LEFT = -1,
49     ENC_ERR_NO_MAP_RULE = -2,
50     ENC_ERR_INVALID_PARAM = -3,
51     ENC_ERR_INVALID_FORMAT = -4,
52     ENC_ERR_UNKNOWN_ENCODING = -5,
53     ENC_ERR_UNSUPPORTED = -6,
54     ENC_ERR_NOT_LOADED = -7
55 } ENCResult;
56 
57 typedef enum ENCBreakType
58 {
59     ENC_BR_KEEP = 0,
60     ENC_BR_CRLF,
61     ENC_BR_CR,
62     ENC_BR_LF
63 } ENCBreakType;
64 
65 typedef struct ENCContext
66 {
67     s32 encoding;
68     ENCBreakType brtype;
69     s32 state;
70     u16 nomap;
71     u16 invalid;
72 } ENCContext;
73 
74 #define ENC_INTERNAL_CHAR_WIDTH sizeof(u16)
75 
76 #define ENC_ENCODING_COUNT 23
77 #define ENC_ENCODING_NAME_LENGTH 16
78 
79 #define ENC_CHECK_NOT_FOUND -1
80 
81 #define ENC_ALT_STOP 0x0000
82 #define ENC_ALT_SKIP 0xFFFF
83 
84 /* Internal from/to External */
85 
86 ENCResult ENCInitContext(ENCContext *context);
87 ENCResult ENCDuplicateContext(ENCContext *duplicate, const ENCContext *original);
88 ENCResult ENCSetExternalEncoding(ENCContext* context, const u8* encoding);
89 ENCResult ENCGetExternalEncoding(const ENCContext* context, u8* encoding);
90 ENCResult ENCSetBreakType(ENCContext* context, ENCBreakType type);
91 ENCResult ENCSetAlternativeCharacter(ENCContext* context, u16 nomap, u16 invalid);
92 ENCResult ENCGetNextCharacterWidth(const ENCContext* context, const u8* src, u32* width);
93 ENCResult ENCGetExternalCharacterWidth(const ENCContext* context, u32* width);
94 ENCResult ENCConvertToInternalEncoding(ENCContext* context, u16* dst, s32* dstlen, const u8* src, s32* srclen);
95 ENCResult ENCConvertFromInternalEncoding(ENCContext* context, u8* dst, s32* dstlen, const u16* src, s32* srclen);
96 
97 
98 /* Check */
99 
100 ENCResult ENCCheckEncoding(s32* index, const u8** encodings, s32 encsize, const u16* src, s32 srclen);
101 
102 
103 ENCResult ENCIs7BitEncoding(BOOL* is7bit, const u8* encoding);
104 
105 
106 /* BOM */
107 
108 ENCResult ENCSetUnicodeBOM(u16* dst, s32 dstlen);
109 ENCResult ENCSetUnicodeBOM32(u32* dst, s32 dstlen);
110 ENCResult ENCSetUnicodeBOM16(u16* dst, s32 dstlen);
111 ENCResult ENCSetUnicodeBOM8(u8* dst, s32 dstlen);
112 
113 /* ASCII */
114 
115 ENCResult ENCConvertStringUnicodeToAscii(u8* dst, s32* dstlen, const u16* src, s32* srclen);
116 ENCResult ENCConvertStringAsciiToUnicode(u16* dst, s32* dstlen, const u8* src, s32* srclen);
117 
118 /* UTF */
119 
120 ENCResult ENCConvertStringUtf32ToUtf16(u16* dst, s32* dstlen, const u32* src, s32* srclen);
121 ENCResult ENCConvertStringUtf16ToUtf32(u32* dst, s32* dstlen, const u16* src, s32* srclen);
122 
123 ENCResult ENCConvertStringUtf32ToUtf8(u8* dst, s32* dstlen, const u32* src, s32* srclen);
124 ENCResult ENCConvertStringUtf8ToUtf32(u32* dst, s32* dstlen, const u8* src, s32* srclen);
125 
126 ENCResult ENCConvertStringUtf16ToUtf8(u8* dst, s32* dstlen, const u16* src, s32* srclen);
127 ENCResult ENCConvertStringUtf8ToUtf16(u16* dst, s32* dstlen, const u8* src, s32* srclen);
128 
129 /* Japanese */
130 
131 ENCResult ENCConvertStringSjisToUnicode(u16* dst, s32* dstlen, const u8* src, s32* srclen);
132 ENCResult ENCConvertStringUnicodeToSjis(u8* dst, s32* dstlen, const u16* src, s32* srclen);
133 
134 ENCResult ENCConvertStringJisToUnicode(u16* dst, s32* dstlen, const u8* src, s32* srclen);
135 ENCResult ENCConvertStringUnicodeToJis(u8* dst, s32* dstlen, const u16* src, s32* srclen);
136 
137 ENCResult ENCConvertStringJisToSjis(u8* dst, s32* dstlen, const u8* src, s32* srclen);
138 ENCResult ENCConvertStringSjisToJis(u8* dst, s32* dstlen, const u8* src, s32* srclen);
139 
140 /* Latin */
141 
142 ENCResult ENCConvertStringLatin1ToUnicode(u16* dst, s32* dstlen, const u8* src, s32* srclen);
143 ENCResult ENCConvertStringUnicodeToLatin1(u8* dst, s32* dstlen, const u16* src, s32* srclen);
144 
145 ENCResult ENCConvertStringLatin2ToUnicode(u16* dst, s32* dstlen, const u8* src, s32* srclen);
146 ENCResult ENCConvertStringUnicodeToLatin2(u8* dst, s32* dstlen, const u16* src, s32* srclen);
147 
148 ENCResult ENCConvertStringLatin3ToUnicode(u16* dst, s32* dstlen, const u8* src, s32* srclen);
149 ENCResult ENCConvertStringUnicodeToLatin3(u8* dst, s32* dstlen, const u16* src, s32* srclen);
150 
151 ENCResult ENCConvertStringGreekToUnicode(u16* dst, s32* dstlen, const u8* src, s32* srclen);
152 ENCResult ENCConvertStringUnicodeToGreek(u8* dst, s32* dstlen, const u16* src, s32* srclen);
153 
154 ENCResult ENCConvertStringLatin6ToUnicode(u16* dst, s32* dstlen, const u8* src, s32* srclen);
155 ENCResult ENCConvertStringUnicodeToLatin6(u8* dst, s32* dstlen, const u16* src, s32* srclen);
156 
157 ENCResult ENCConvertStringLatin9ToUnicode(u16* dst, s32* dstlen, const u8* src, s32* srclen);
158 ENCResult ENCConvertStringUnicodeToLatin9(u8* dst, s32* dstlen, const u16* src, s32* srclen);
159 
160 ENCResult ENCConvertStringWin1252ToUnicode(u16* dst, s32* dstlen, const u8* src, s32* srclen);
161 ENCResult ENCConvertStringUnicodeToWin1252(u8* dst, s32* dstlen, const u16* src, s32* srclen);
162 
163 /* one-way */
164 
165 ENCResult ENCConvertStringUtf16ToUtf16(u16* dst, s32* dstlen, const u16* src, s32* srclen);
166 ENCResult ENCConvertStringUtf16LEToUtf16BE(u16* dst, s32* dstlen, const u16* src, s32* srclen);
167 ENCResult ENCConvertStringUtf7ToUtf16(u16* dst, s32* dstlen, const u8* src, s32* srclen);
168 
169 ENCResult ENCConvertStringWin1250ToUnicode(u16* dst, s32* dstlen, const u8* src, s32* srclen);
170 ENCResult ENCConvertStringWin1253ToUnicode(u16* dst, s32* dstlen, const u8* src, s32* srclen);
171 
172 ENCResult ENCConvertStringMacromanToUnicode(u16* dst, s32* dstlen, const u8* src, s32* srclen);
173 ENCResult ENCConvertStringMacgreekToUnicode(u16* dst, s32* dstlen, const u8* src, s32* srclen);
174 ENCResult ENCConvertStringMacceToUnicode(u16* dst, s32* dstlen, const u8* src, s32* srclen);
175 
176 ENCResult ENCConvertStringIbm850ToUnicode(u16* dst, s32* dstlen, const u8* src, s32* srclen);
177 ENCResult ENCConvertStringIbm852ToUnicode(u16* dst, s32* dstlen, const u8* src, s32* srclen);
178 
179 /* strip table */
180 
181 #define ENC_STRIP_TABLE_JP \
182     BOOL enc_tbl_jp_loaded = FALSE; \
183     const u8* enc_tbl_jp_wctomb = NULL;   \
184     const u8* enc_tbl_jp_mbtowc = NULL;   \
185     const u16* enc_offset_jp = NULL;
186 
187 #ifdef __cplusplus
188 } /* extern "C" */
189 #endif
190 #endif /* REVOLUTION_ENC_H__ */
191