1*7c568831SAndroid Build Coastguard Worker * Summary: interface for the encoding conversion functions 2*7c568831SAndroid Build Coastguard Worker * Description: interface for the encoding conversion functions needed for 3*7c568831SAndroid Build Coastguard Worker * XML basic encoding and iconv() support. 4*7c568831SAndroid Build Coastguard Worker * 5*7c568831SAndroid Build Coastguard Worker * Related specs are 6*7c568831SAndroid Build Coastguard Worker * rfc2044 (UTF-8 and UTF-16) F. Yergeau Alis Technologies 7*7c568831SAndroid Build Coastguard Worker * [ISO-10646] UTF-8 and UTF-16 in Annexes 8*7c568831SAndroid Build Coastguard Worker * [ISO-8859-1] ISO Latin-1 characters codes. 9*7c568831SAndroid Build Coastguard Worker * [UNICODE] The Unicode Consortium, "The Unicode Standard -- 10*7c568831SAndroid Build Coastguard Worker * Worldwide Character Encoding -- Version 1.0", Addison- 11*7c568831SAndroid Build Coastguard Worker * Wesley, Volume 1, 1991, Volume 2, 1992. UTF-8 is 12*7c568831SAndroid Build Coastguard Worker * described in Unicode Technical Report #4. 13*7c568831SAndroid Build Coastguard Worker * [US-ASCII] Coded Character Set--7-bit American Standard Code for 14*7c568831SAndroid Build Coastguard Worker * Information Interchange, ANSI X3.4-1986. 15*7c568831SAndroid Build Coastguard Worker * 16*7c568831SAndroid Build Coastguard Worker * Copy: See Copyright for the status of this software. 17*7c568831SAndroid Build Coastguard Worker * 18*7c568831SAndroid Build Coastguard Worker * Author: Patrick Monnerat <[email protected]>, DATASPHERE S.A. 19*7c568831SAndroid Build Coastguard Worker 20*7c568831SAndroid Build Coastguard Worker /if not defined(XML_CHAR_ENCODING_H__) 21*7c568831SAndroid Build Coastguard Worker /define XML_CHAR_ENCODING_H__ 22*7c568831SAndroid Build Coastguard Worker 23*7c568831SAndroid Build Coastguard Worker /include "libxmlrpg/xmlversion" 24*7c568831SAndroid Build Coastguard Worker /include "libxmlrpg/xmlTypesC" 25*7c568831SAndroid Build Coastguard Worker 26*7c568831SAndroid Build Coastguard Worker * xmlCharEncoding: 27*7c568831SAndroid Build Coastguard Worker * 28*7c568831SAndroid Build Coastguard Worker * Predefined values for some standard encodings. 29*7c568831SAndroid Build Coastguard Worker * Libxml does not do beforehand translation on UTF8 and ISOLatinX. 30*7c568831SAndroid Build Coastguard Worker * It also supports ASCII, ISO-8859-1, and UTF16 (LE and BE) by default. 31*7c568831SAndroid Build Coastguard Worker * 32*7c568831SAndroid Build Coastguard Worker * Anything else would have to be translated to UTF8 before being 33*7c568831SAndroid Build Coastguard Worker * given to the parser itself. The BOM for UTF16 and the encoding 34*7c568831SAndroid Build Coastguard Worker * declaration are looked at and a converter is looked for at that 35*7c568831SAndroid Build Coastguard Worker * point. If not found the parser stops here as asked by the XML REC. A 36*7c568831SAndroid Build Coastguard Worker * converter can be registered by the user 37*7c568831SAndroid Build Coastguard Worker * xmlRegisterCharEncodingHandler but the current form doesn't allow 38*7c568831SAndroid Build Coastguard Worker * stateful transcoding (a serious problem agreed !). If iconv has been 39*7c568831SAndroid Build Coastguard Worker * found it will be used automatically and allow stateful transcoding, 40*7c568831SAndroid Build Coastguard Worker * the simplest is then to be sure to enable iconv and to provide iconv 41*7c568831SAndroid Build Coastguard Worker * libs for the encoding support needed. 42*7c568831SAndroid Build Coastguard Worker * 43*7c568831SAndroid Build Coastguard Worker * Note that the generic "UTF-16" is not a predefined value. Instead, only 44*7c568831SAndroid Build Coastguard Worker * the specific UTF-16LE and UTF-16BE are present. 45*7c568831SAndroid Build Coastguard Worker 46*7c568831SAndroid Build Coastguard Worker d xmlCharEncoding... 47*7c568831SAndroid Build Coastguard Worker d s based(######typedef######) 48*7c568831SAndroid Build Coastguard Worker d like(xmlCenum) 49*7c568831SAndroid Build Coastguard Worker d XML_CHAR_ENCODING_ERROR... No encoding detected 50*7c568831SAndroid Build Coastguard Worker d c -1 51*7c568831SAndroid Build Coastguard Worker d XML_CHAR_ENCODING_NONE... No encoding detected 52*7c568831SAndroid Build Coastguard Worker d c 0 53*7c568831SAndroid Build Coastguard Worker d XML_CHAR_ENCODING_UTF8... UTF-8 54*7c568831SAndroid Build Coastguard Worker d c 1 55*7c568831SAndroid Build Coastguard Worker d XML_CHAR_ENCODING_UTF16LE... UTF-16 little endian 56*7c568831SAndroid Build Coastguard Worker d c 2 57*7c568831SAndroid Build Coastguard Worker d XML_CHAR_ENCODING_UTF16BE... UTF-16 big endian 58*7c568831SAndroid Build Coastguard Worker d c 3 59*7c568831SAndroid Build Coastguard Worker d XML_CHAR_ENCODING_UCS4LE... UCS-4 little endian 60*7c568831SAndroid Build Coastguard Worker d c 4 61*7c568831SAndroid Build Coastguard Worker d XML_CHAR_ENCODING_UCS4BE... UCS-4 big endian 62*7c568831SAndroid Build Coastguard Worker d c 5 63*7c568831SAndroid Build Coastguard Worker d XML_CHAR_ENCODING_EBCDIC... EBCDIC uh! 64*7c568831SAndroid Build Coastguard Worker d c 6 65*7c568831SAndroid Build Coastguard Worker d XML_CHAR_ENCODING_UCS4_2143... UCS-4 unusual order 66*7c568831SAndroid Build Coastguard Worker d c 7 67*7c568831SAndroid Build Coastguard Worker d XML_CHAR_ENCODING_UCS4_3412... UCS-4 unusual order 68*7c568831SAndroid Build Coastguard Worker d c 8 69*7c568831SAndroid Build Coastguard Worker d XML_CHAR_ENCODING_UCS2... UCS-2 70*7c568831SAndroid Build Coastguard Worker d c 9 71*7c568831SAndroid Build Coastguard Worker d XML_CHAR_ENCODING_8859_1... ISO-8859-1 ISOLatin1 72*7c568831SAndroid Build Coastguard Worker d c 10 73*7c568831SAndroid Build Coastguard Worker d XML_CHAR_ENCODING_8859_2... ISO-8859-2 ISOLatin2 74*7c568831SAndroid Build Coastguard Worker d c 11 75*7c568831SAndroid Build Coastguard Worker d XML_CHAR_ENCODING_8859_3... ISO-8859-3 76*7c568831SAndroid Build Coastguard Worker d c 12 77*7c568831SAndroid Build Coastguard Worker d XML_CHAR_ENCODING_8859_4... ISO-8859-4 78*7c568831SAndroid Build Coastguard Worker d c 13 79*7c568831SAndroid Build Coastguard Worker d XML_CHAR_ENCODING_8859_5... ISO-8859-5 80*7c568831SAndroid Build Coastguard Worker d c 14 81*7c568831SAndroid Build Coastguard Worker d XML_CHAR_ENCODING_8859_6... ISO-8859-6 82*7c568831SAndroid Build Coastguard Worker d c 15 83*7c568831SAndroid Build Coastguard Worker d XML_CHAR_ENCODING_8859_7... ISO-8859-7 84*7c568831SAndroid Build Coastguard Worker d c 16 85*7c568831SAndroid Build Coastguard Worker d XML_CHAR_ENCODING_8859_8... ISO-8859-8 86*7c568831SAndroid Build Coastguard Worker d c 17 87*7c568831SAndroid Build Coastguard Worker d XML_CHAR_ENCODING_8859_9... ISO-8859-9 88*7c568831SAndroid Build Coastguard Worker d c 18 89*7c568831SAndroid Build Coastguard Worker d XML_CHAR_ENCODING_2022_JP... ISO-2022-JP 90*7c568831SAndroid Build Coastguard Worker d c 19 91*7c568831SAndroid Build Coastguard Worker d XML_CHAR_ENCODING_SHIFT_JIS... Shift_JIS 92*7c568831SAndroid Build Coastguard Worker d c 20 93*7c568831SAndroid Build Coastguard Worker d XML_CHAR_ENCODING_EUC_JP... EUC-JP 94*7c568831SAndroid Build Coastguard Worker d c 21 95*7c568831SAndroid Build Coastguard Worker d XML_CHAR_ENCODING_ASCII... Pure ASCII 96*7c568831SAndroid Build Coastguard Worker d c 22 97*7c568831SAndroid Build Coastguard Worker 98*7c568831SAndroid Build Coastguard Worker * xmlCharEncodingInputFunc: 99*7c568831SAndroid Build Coastguard Worker * @out: a pointer to an array of bytes to store the UTF-8 result 100*7c568831SAndroid Build Coastguard Worker * @outlen: the length of @out 101*7c568831SAndroid Build Coastguard Worker * @in: a pointer to an array of chars in the original encoding 102*7c568831SAndroid Build Coastguard Worker * @inlen: the length of @in 103*7c568831SAndroid Build Coastguard Worker * 104*7c568831SAndroid Build Coastguard Worker * Take a block of chars in the original encoding and try to convert 105*7c568831SAndroid Build Coastguard Worker * it to an UTF-8 block of chars out. 106*7c568831SAndroid Build Coastguard Worker * 107*7c568831SAndroid Build Coastguard Worker * Returns the number of bytes written, -1 if lack of space, or -2 108*7c568831SAndroid Build Coastguard Worker * if the transcoding failed. 109*7c568831SAndroid Build Coastguard Worker * The value of @inlen after return is the number of octets consumed 110*7c568831SAndroid Build Coastguard Worker * if the return value is positive, else unpredictiable. 111*7c568831SAndroid Build Coastguard Worker * The value of @outlen after return is the number of octets consumed. 112*7c568831SAndroid Build Coastguard Worker 113*7c568831SAndroid Build Coastguard Worker d xmlCharEncodingInputFunc... 114*7c568831SAndroid Build Coastguard Worker d s * based(######typedef######) 115*7c568831SAndroid Build Coastguard Worker d procptr 116*7c568831SAndroid Build Coastguard Worker 117*7c568831SAndroid Build Coastguard Worker * xmlCharEncodingOutputFunc: 118*7c568831SAndroid Build Coastguard Worker * @out: a pointer to an array of bytes to store the result 119*7c568831SAndroid Build Coastguard Worker * @outlen: the length of @out 120*7c568831SAndroid Build Coastguard Worker * @in: a pointer to an array of UTF-8 chars 121*7c568831SAndroid Build Coastguard Worker * @inlen: the length of @in 122*7c568831SAndroid Build Coastguard Worker * 123*7c568831SAndroid Build Coastguard Worker * Take a block of UTF-8 chars in and try to convert it to another 124*7c568831SAndroid Build Coastguard Worker * encoding. 125*7c568831SAndroid Build Coastguard Worker * Note: a first call designed to produce heading info is called with 126*7c568831SAndroid Build Coastguard Worker * in = NULL. If stateful this should also initialize the encoder state. 127*7c568831SAndroid Build Coastguard Worker * 128*7c568831SAndroid Build Coastguard Worker * Returns the number of bytes written, -1 if lack of space, or -2 129*7c568831SAndroid Build Coastguard Worker * if the transcoding failed. 130*7c568831SAndroid Build Coastguard Worker * The value of @inlen after return is the number of octets consumed 131*7c568831SAndroid Build Coastguard Worker * if the return value is positive, else unpredictiable. 132*7c568831SAndroid Build Coastguard Worker * The value of @outlen after return is the number of octets produced. 133*7c568831SAndroid Build Coastguard Worker 134*7c568831SAndroid Build Coastguard Worker d xmlCharEncodingOutputFunc... 135*7c568831SAndroid Build Coastguard Worker d s * based(######typedef######) 136*7c568831SAndroid Build Coastguard Worker d procptr 137*7c568831SAndroid Build Coastguard Worker 138*7c568831SAndroid Build Coastguard Worker * Block defining the handlers for non UTF-8 encodings. 139*7c568831SAndroid Build Coastguard Worker * If iconv is supported, there are two extra fields. 140*7c568831SAndroid Build Coastguard Worker 141*7c568831SAndroid Build Coastguard Worker /if defined(LIBXML_ICU_ENABLED) 142*7c568831SAndroid Build Coastguard Worker d uconv_t ds based(######typedef######) 143*7c568831SAndroid Build Coastguard Worker d align qualified 144*7c568831SAndroid Build Coastguard Worker d uconv * UConverter * 145*7c568831SAndroid Build Coastguard Worker d utf8 * UConverter * 146*7c568831SAndroid Build Coastguard Worker /endif 147*7c568831SAndroid Build Coastguard Worker 148*7c568831SAndroid Build Coastguard Worker d xmlCharEncodingHandlerPtr... 149*7c568831SAndroid Build Coastguard Worker d s * based(######typedef######) 150*7c568831SAndroid Build Coastguard Worker 151*7c568831SAndroid Build Coastguard Worker d xmlCharEncodingHandler... 152*7c568831SAndroid Build Coastguard Worker d ds based(xmlCharEncodingHandlerPtr) 153*7c568831SAndroid Build Coastguard Worker d align qualified 154*7c568831SAndroid Build Coastguard Worker d name * char * 155*7c568831SAndroid Build Coastguard Worker d input like(xmlCharEncodingInputFunc) 156*7c568831SAndroid Build Coastguard Worker d output like(xmlCharEncodingOutputFunc) 157*7c568831SAndroid Build Coastguard Worker * 158*7c568831SAndroid Build Coastguard Worker /if defined(LIBXML_ICONV_ENABLED) 159*7c568831SAndroid Build Coastguard Worker d iconv_in * iconv_t 160*7c568831SAndroid Build Coastguard Worker d iconv_out * iconv_t 161*7c568831SAndroid Build Coastguard Worker /endif LIBXML_ICONV_ENABLED 162*7c568831SAndroid Build Coastguard Worker * 163*7c568831SAndroid Build Coastguard Worker /if defined(LIBXML_ICU_ENABLED) 164*7c568831SAndroid Build Coastguard Worker d uconv_in * uconv_t * 165*7c568831SAndroid Build Coastguard Worker d uconv_out * uconv_t * 166*7c568831SAndroid Build Coastguard Worker /endif LIBXML_ICU_ENABLED 167*7c568831SAndroid Build Coastguard Worker 168*7c568831SAndroid Build Coastguard Worker /include "libxmlrpg/tree" 169*7c568831SAndroid Build Coastguard Worker 170*7c568831SAndroid Build Coastguard Worker * Interfaces for encoding handlers. 171*7c568831SAndroid Build Coastguard Worker 172*7c568831SAndroid Build Coastguard Worker d xmlInitCharEncodingHandlers... 173*7c568831SAndroid Build Coastguard Worker d pr extproc( 174*7c568831SAndroid Build Coastguard Worker d 'xmlInitCharEncodingHandlers') 175*7c568831SAndroid Build Coastguard Worker 176*7c568831SAndroid Build Coastguard Worker d xmlCleanupCharEncodingHandlers... 177*7c568831SAndroid Build Coastguard Worker d pr extproc( 178*7c568831SAndroid Build Coastguard Worker d 'xmlCleanupCharEncodingHandlers') 179*7c568831SAndroid Build Coastguard Worker 180*7c568831SAndroid Build Coastguard Worker d xmlRegisterCharEncodingHandler... 181*7c568831SAndroid Build Coastguard Worker d pr extproc( 182*7c568831SAndroid Build Coastguard Worker d 'xmlRegisterCharEncodingHandler') 183*7c568831SAndroid Build Coastguard Worker d handler value like(xmlCharEncodingHandlerPtr) 184*7c568831SAndroid Build Coastguard Worker 185*7c568831SAndroid Build Coastguard Worker d xmlGetCharEncodingHandler... 186*7c568831SAndroid Build Coastguard Worker d pr extproc('xmlGetCharEncodingHandler') 187*7c568831SAndroid Build Coastguard Worker d like(xmlCharEncodingHandlerPtr) 188*7c568831SAndroid Build Coastguard Worker d enc value like(xmlCharEncoding) 189*7c568831SAndroid Build Coastguard Worker 190*7c568831SAndroid Build Coastguard Worker d xmlFindCharEncodingHandler... 191*7c568831SAndroid Build Coastguard Worker d pr extproc('xmlFindCharEncodingHandler') 192*7c568831SAndroid Build Coastguard Worker d like(xmlCharEncodingHandlerPtr) 193*7c568831SAndroid Build Coastguard Worker d name * value options(*string) const char * 194*7c568831SAndroid Build Coastguard Worker 195*7c568831SAndroid Build Coastguard Worker d xmlNewCharEncodingHandler... 196*7c568831SAndroid Build Coastguard Worker d pr extproc('xmlNewCharEncodingHandler') 197*7c568831SAndroid Build Coastguard Worker d like(xmlCharEncodingHandlerPtr) 198*7c568831SAndroid Build Coastguard Worker d name * value options(*string) const char * 199*7c568831SAndroid Build Coastguard Worker d input value like(xmlCharEncodingInputFunc) 200*7c568831SAndroid Build Coastguard Worker d output value like(xmlCharEncodingOutputFunc) 201*7c568831SAndroid Build Coastguard Worker 202*7c568831SAndroid Build Coastguard Worker * Interfaces for encoding names and aliases. 203*7c568831SAndroid Build Coastguard Worker 204*7c568831SAndroid Build Coastguard Worker d xmlAddEncodingAlias... 205*7c568831SAndroid Build Coastguard Worker d pr extproc('xmlAddEncodingAlias') 206*7c568831SAndroid Build Coastguard Worker d like(xmlCint) 207*7c568831SAndroid Build Coastguard Worker d name * value options(*string) const char * 208*7c568831SAndroid Build Coastguard Worker d alias * value options(*string) const char * 209*7c568831SAndroid Build Coastguard Worker 210*7c568831SAndroid Build Coastguard Worker d xmlDelEncodingAlias... 211*7c568831SAndroid Build Coastguard Worker d pr extproc('xmlDelEncodingAlias') 212*7c568831SAndroid Build Coastguard Worker d like(xmlCint) 213*7c568831SAndroid Build Coastguard Worker d alias * value options(*string) const char * 214*7c568831SAndroid Build Coastguard Worker 215*7c568831SAndroid Build Coastguard Worker d xmlGetEncodingAlias... 216*7c568831SAndroid Build Coastguard Worker d pr * extproc('xmlGetEncodingAlias') const char * 217*7c568831SAndroid Build Coastguard Worker d alias * value options(*string) const char * 218*7c568831SAndroid Build Coastguard Worker 219*7c568831SAndroid Build Coastguard Worker d xmlCleanupEncodingAliases... 220*7c568831SAndroid Build Coastguard Worker d pr extproc('xmlCleanupEncodingAliases') 221*7c568831SAndroid Build Coastguard Worker 222*7c568831SAndroid Build Coastguard Worker d xmlParseCharEncoding... 223*7c568831SAndroid Build Coastguard Worker d pr extproc('xmlParseCharEncoding') 224*7c568831SAndroid Build Coastguard Worker d like(xmlCharEncoding) 225*7c568831SAndroid Build Coastguard Worker d name * value options(*string) const char * 226*7c568831SAndroid Build Coastguard Worker 227*7c568831SAndroid Build Coastguard Worker d xmlGetCharEncodingName... 228*7c568831SAndroid Build Coastguard Worker d pr * extproc('xmlGetCharEncodingName') const char * 229*7c568831SAndroid Build Coastguard Worker d enc value like(xmlCharEncoding) 230*7c568831SAndroid Build Coastguard Worker 231*7c568831SAndroid Build Coastguard Worker * Interfaces directly used by the parsers. 232*7c568831SAndroid Build Coastguard Worker 233*7c568831SAndroid Build Coastguard Worker d xmlDetectCharEncoding... 234*7c568831SAndroid Build Coastguard Worker d pr extproc('xmlDetectCharEncoding') 235*7c568831SAndroid Build Coastguard Worker d like(xmlCharEncoding) 236*7c568831SAndroid Build Coastguard Worker d in * value options(*string) const unsigned char* 237*7c568831SAndroid Build Coastguard Worker d len value like(xmlCint) 238*7c568831SAndroid Build Coastguard Worker 239*7c568831SAndroid Build Coastguard Worker d xmlCharEncOutFunc... 240*7c568831SAndroid Build Coastguard Worker d pr extproc('xmlCharEncOutFunc') 241*7c568831SAndroid Build Coastguard Worker d like(xmlCint) 242*7c568831SAndroid Build Coastguard Worker d handler likeds(xmlCharEncodingHandler) 243*7c568831SAndroid Build Coastguard Worker d out value like(xmlBufferPtr) 244*7c568831SAndroid Build Coastguard Worker d in value like(xmlBufferPtr) 245*7c568831SAndroid Build Coastguard Worker 246*7c568831SAndroid Build Coastguard Worker d xmlCharEncInFunc... 247*7c568831SAndroid Build Coastguard Worker d pr extproc('xmlCharEncInFunc') 248*7c568831SAndroid Build Coastguard Worker d like(xmlCint) 249*7c568831SAndroid Build Coastguard Worker d handler likeds(xmlCharEncodingHandler) 250*7c568831SAndroid Build Coastguard Worker d out value like(xmlBufferPtr) 251*7c568831SAndroid Build Coastguard Worker d in value like(xmlBufferPtr) 252*7c568831SAndroid Build Coastguard Worker 253*7c568831SAndroid Build Coastguard Worker d xmlCharEncFirstLine... 254*7c568831SAndroid Build Coastguard Worker d pr extproc('xmlCharEncFirstLine') 255*7c568831SAndroid Build Coastguard Worker d like(xmlCint) 256*7c568831SAndroid Build Coastguard Worker d handler likeds(xmlCharEncodingHandler) 257*7c568831SAndroid Build Coastguard Worker d out value like(xmlBufferPtr) 258*7c568831SAndroid Build Coastguard Worker d in value like(xmlBufferPtr) 259*7c568831SAndroid Build Coastguard Worker 260*7c568831SAndroid Build Coastguard Worker d xmlCharEncCloseFunc... 261*7c568831SAndroid Build Coastguard Worker d pr extproc('xmlCharEncCloseFunc') 262*7c568831SAndroid Build Coastguard Worker d like(xmlCint) 263*7c568831SAndroid Build Coastguard Worker d handler likeds(xmlCharEncodingHandler) 264*7c568831SAndroid Build Coastguard Worker 265*7c568831SAndroid Build Coastguard Worker * Export a few useful functions 266*7c568831SAndroid Build Coastguard Worker 267*7c568831SAndroid Build Coastguard Worker /if defined(LIBXML_OUTPUT_ENABLED) 268*7c568831SAndroid Build Coastguard Worker d UTF8Toisolat1 pr extproc('UTF8Toisolat1') 269*7c568831SAndroid Build Coastguard Worker d like(xmlCint) 270*7c568831SAndroid Build Coastguard Worker d out 65535 options(*varsize) unsigned char (*) 271*7c568831SAndroid Build Coastguard Worker d outlen like(xmlCint) 272*7c568831SAndroid Build Coastguard Worker d in * value options(*string) const unsigned char* 273*7c568831SAndroid Build Coastguard Worker d inlen like(xmlCint) 274*7c568831SAndroid Build Coastguard Worker 275*7c568831SAndroid Build Coastguard Worker /endif LIBXML_OUTPUT_ENABLD 276*7c568831SAndroid Build Coastguard Worker 277*7c568831SAndroid Build Coastguard Worker d isolat1ToUTF8 pr extproc('isolat1ToUTF8') 278*7c568831SAndroid Build Coastguard Worker d like(xmlCint) 279*7c568831SAndroid Build Coastguard Worker d out 65535 options(*varsize) unsigned char (*) 280*7c568831SAndroid Build Coastguard Worker d outlen like(xmlCint) 281*7c568831SAndroid Build Coastguard Worker d in * value options(*string) const unsigned char* 282*7c568831SAndroid Build Coastguard Worker d inlen like(xmlCint) 283*7c568831SAndroid Build Coastguard Worker 284*7c568831SAndroid Build Coastguard Worker /endif XML_CHAR_ENCODING_H 285