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