Index: third_party/libxml/src/encoding.c |
diff --git a/third_party/libxml/src/encoding.c b/third_party/libxml/src/encoding.c |
index 0f41df9a3a8ac9c5755df6ba959ce196baa90316..574e1aedeb46edd723a182af0093f06aab91b2c2 100644 |
--- a/third_party/libxml/src/encoding.c |
+++ b/third_party/libxml/src/encoding.c |
@@ -1,7 +1,7 @@ |
/* |
* encoding.c : implements the encoding conversion functions needed for XML |
* |
- * Related specs: |
+ * Related specs: |
* rfc2044 (UTF-8 and UTF-16) F. Yergeau Alis Technologies |
* rfc2781 UTF-16, an encoding of ISO 10646, P. Hoffman, F. Yergeau |
* [ISO-10646] UTF-8 and UTF-16 in Annexes |
@@ -24,6 +24,7 @@ |
#include "libxml.h" |
#include <string.h> |
+#include <limits.h> |
#ifdef HAVE_CTYPE_H |
#include <ctype.h> |
@@ -44,6 +45,9 @@ |
#include <libxml/globals.h> |
#include <libxml/xmlerror.h> |
+#include "buf.h" |
+#include "enc.h" |
+ |
static xmlCharEncodingHandlerPtr xmlUTF16LEHandler = NULL; |
static xmlCharEncodingHandlerPtr xmlUTF16BEHandler = NULL; |
@@ -98,7 +102,7 @@ xmlEncodingErr(xmlParserErrors error, const char *msg, const char *val) |
} |
#ifdef LIBXML_ICU_ENABLED |
-static uconv_t* |
+static uconv_t* |
openIcuConverter(const char* name, int toUnicode) |
{ |
UErrorCode status = U_ZERO_ERROR; |
@@ -112,11 +116,11 @@ openIcuConverter(const char* name, int toUnicode) |
status = U_ZERO_ERROR; |
if (toUnicode) { |
- ucnv_setToUCallBack(conv->uconv, UCNV_TO_U_CALLBACK_STOP, |
+ ucnv_setToUCallBack(conv->uconv, UCNV_TO_U_CALLBACK_STOP, |
NULL, NULL, NULL, &status); |
} |
else { |
- ucnv_setFromUCallBack(conv->uconv, UCNV_FROM_U_CALLBACK_STOP, |
+ ucnv_setFromUCallBack(conv->uconv, UCNV_FROM_U_CALLBACK_STOP, |
NULL, NULL, NULL, &status); |
} |
if (U_FAILURE(status)) |
@@ -128,7 +132,7 @@ openIcuConverter(const char* name, int toUnicode) |
return conv; |
error: |
- if (conv->uconv) |
+ if (conv->uconv) |
ucnv_close(conv->uconv); |
xmlFree(conv); |
return NULL; |
@@ -183,12 +187,12 @@ asciiToUTF8(unsigned char* out, int *outlen, |
break; |
if (c < 0x80) { |
*out++ = c; |
- } else { |
+ } else { |
*outlen = out - outstart; |
*inlen = processed - base; |
return(-1); |
} |
- |
+ |
processed = (const unsigned char*) in; |
} |
*outlen = out - outstart; |
@@ -254,7 +258,7 @@ UTF8Toascii(unsigned char* out, int *outlen, |
if (inend - in < trailing) { |
break; |
- } |
+ } |
for ( ; trailing; trailing--) { |
if ((in >= inend) || (((d= *in++) & 0xC0) != 0x80)) |
@@ -311,19 +315,19 @@ isolat1ToUTF8(unsigned char* out, int *outlen, |
outend = out + *outlen; |
inend = in + (*inlen); |
instop = inend; |
- |
- while (in < inend && out < outend - 1) { |
- if (*in >= 0x80) { |
+ |
+ while ((in < inend) && (out < outend - 1)) { |
+ if (*in >= 0x80) { |
*out++ = (((*in) >> 6) & 0x1F) | 0xC0; |
- *out++ = ((*in) & 0x3F) | 0x80; |
+ *out++ = ((*in) & 0x3F) | 0x80; |
++in; |
} |
- if (instop - in > outend - out) instop = in + (outend - out); |
- while (in < instop && *in < 0x80) { |
+ if ((instop - in) > (outend - out)) instop = in + (outend - out); |
+ while ((in < instop) && (*in < 0x80)) { |
*out++ = *in++; |
} |
- } |
- if (in < inend && out < outend && *in < 0x80) { |
+ } |
+ if ((in < inend) && (out < outend) && (*in < 0x80)) { |
*out++ = *in++; |
} |
*outlen = out - outstart; |
@@ -427,7 +431,7 @@ UTF8Toisolat1(unsigned char* out, int *outlen, |
if (inend - in < trailing) { |
break; |
- } |
+ } |
for ( ; trailing; trailing--) { |
if (in >= inend) |
@@ -535,7 +539,7 @@ UTF16LEToUTF8(unsigned char* out, int *outlen, |
else if (c < 0x800) { *out++= ((c >> 6) & 0x1F) | 0xC0; bits= 0; } |
else if (c < 0x10000) { *out++= ((c >> 12) & 0x0F) | 0xE0; bits= 6; } |
else { *out++= ((c >> 18) & 0x07) | 0xF0; bits= 12; } |
- |
+ |
for ( ; bits >= 0; bits-= 6) { |
if (out >= outend) |
break; |
@@ -560,7 +564,7 @@ UTF16LEToUTF8(unsigned char* out, int *outlen, |
* block of chars out. |
* |
* Returns the number of bytes written, or -1 if lack of space, or -2 |
- * if the transcoding failed. |
+ * if the transcoding failed. |
*/ |
static int |
UTF8ToUTF16LE(unsigned char* outb, int *outlen, |
@@ -606,7 +610,7 @@ UTF8ToUTF16LE(unsigned char* outb, int *outlen, |
if (inend - in < trailing) { |
break; |
- } |
+ } |
for ( ; trailing; trailing--) { |
if ((in >= inend) || (((d= *in++) & 0xC0) != 0x80)) |
@@ -669,7 +673,7 @@ UTF8ToUTF16LE(unsigned char* outb, int *outlen, |
* block of chars out. |
* |
* Returns the number of bytes written, or -1 if lack of space, or -2 |
- * if the transcoding failed. |
+ * if the transcoding failed. |
*/ |
static int |
UTF8ToUTF16(unsigned char* outb, int *outlen, |
@@ -741,7 +745,7 @@ UTF16BEToUTF8(unsigned char* out, int *outlen, |
in++; |
} else { |
c= *in++; |
- } |
+ } |
if ((c & 0xFC00) == 0xD800) { /* surrogates */ |
if (in >= inend) { /* (in > inend) shouldn't happens */ |
*outlen = out - outstart; |
@@ -771,15 +775,15 @@ UTF16BEToUTF8(unsigned char* out, int *outlen, |
} |
/* assertion: c is a single UTF-4 value */ |
- if (out >= outend) |
+ if (out >= outend) |
break; |
if (c < 0x80) { *out++= c; bits= -6; } |
else if (c < 0x800) { *out++= ((c >> 6) & 0x1F) | 0xC0; bits= 0; } |
else if (c < 0x10000) { *out++= ((c >> 12) & 0x0F) | 0xE0; bits= 6; } |
else { *out++= ((c >> 18) & 0x07) | 0xF0; bits= 12; } |
- |
+ |
for ( ; bits >= 0; bits-= 6) { |
- if (out >= outend) |
+ if (out >= outend) |
break; |
*out++= ((c >> bits) & 0x3F) | 0x80; |
} |
@@ -802,7 +806,7 @@ UTF16BEToUTF8(unsigned char* out, int *outlen, |
* block of chars out. |
* |
* Returns the number of byte written, or -1 by lack of space, or -2 |
- * if the transcoding failed. |
+ * if the transcoding failed. |
*/ |
static int |
UTF8ToUTF16BE(unsigned char* outb, int *outlen, |
@@ -848,7 +852,7 @@ UTF8ToUTF16BE(unsigned char* outb, int *outlen, |
if (inend - in < trailing) { |
break; |
- } |
+ } |
for ( ; trailing; trailing--) { |
if ((in >= inend) || (((d= *in++) & 0xC0) != 0x80)) break; |
@@ -912,13 +916,13 @@ UTF8ToUTF16BE(unsigned char* outb, int *outlen, |
* |
* Guess the encoding of the entity using the first bytes of the entity content |
* according to the non-normative appendix F of the XML-1.0 recommendation. |
- * |
+ * |
* Returns one of the XML_CHAR_ENCODING_... values. |
*/ |
xmlCharEncoding |
xmlDetectCharEncoding(const unsigned char* in, int len) |
{ |
- if (in == NULL) |
+ if (in == NULL) |
return(XML_CHAR_ENCODING_NONE); |
if (len >= 4) { |
if ((in[0] == 0x00) && (in[1] == 0x00) && |
@@ -999,7 +1003,7 @@ xmlCleanupEncodingAliases(void) { |
* @alias: the alias name as parsed, in UTF-8 format (ASCII actually) |
* |
* Lookup an encoding name for the given alias. |
- * |
+ * |
* Returns NULL if not found, otherwise the original name |
*/ |
const char * |
@@ -1037,7 +1041,7 @@ xmlGetEncodingAlias(const char *alias) { |
* |
* Registers an alias @alias for an encoding named @name. Existing alias |
* will be overwritten. |
- * |
+ * |
* Returns 0 in case of success, -1 in case of error |
*/ |
int |
@@ -1057,13 +1061,13 @@ xmlAddEncodingAlias(const char *name, const char *alias) { |
if (xmlCharEncodingAliases == NULL) { |
xmlCharEncodingAliasesNb = 0; |
xmlCharEncodingAliasesMax = 20; |
- xmlCharEncodingAliases = (xmlCharEncodingAliasPtr) |
+ xmlCharEncodingAliases = (xmlCharEncodingAliasPtr) |
xmlMalloc(xmlCharEncodingAliasesMax * sizeof(xmlCharEncodingAlias)); |
if (xmlCharEncodingAliases == NULL) |
return(-1); |
} else if (xmlCharEncodingAliasesNb >= xmlCharEncodingAliasesMax) { |
xmlCharEncodingAliasesMax *= 2; |
- xmlCharEncodingAliases = (xmlCharEncodingAliasPtr) |
+ xmlCharEncodingAliases = (xmlCharEncodingAliasPtr) |
xmlRealloc(xmlCharEncodingAliases, |
xmlCharEncodingAliasesMax * sizeof(xmlCharEncodingAlias)); |
} |
@@ -1094,7 +1098,7 @@ xmlAddEncodingAlias(const char *name, const char *alias) { |
* @alias: the alias name as parsed, in UTF-8 format (ASCII actually) |
* |
* Unregisters an encoding alias @alias |
- * |
+ * |
* Returns 0 in case of success, -1 in case of error |
*/ |
int |
@@ -1129,7 +1133,7 @@ xmlDelEncodingAlias(const char *alias) { |
* Compare the string to the encoding schemes already known. Note |
* that the comparison is case insensitive accordingly to the section |
* [XML] 4.3.3 Character Encoding in Entities. |
- * |
+ * |
* Returns one of the XML_CHAR_ENCODING_... values or XML_CHAR_ENCODING_NONE |
* if not recognized. |
*/ |
@@ -1166,7 +1170,7 @@ xmlParseCharEncoding(const char* name) |
*/ |
if (!strcmp(upper, "UTF-16")) return(XML_CHAR_ENCODING_UTF16LE); |
if (!strcmp(upper, "UTF16")) return(XML_CHAR_ENCODING_UTF16LE); |
- |
+ |
if (!strcmp(upper, "ISO-10646-UCS-2")) return(XML_CHAR_ENCODING_UCS2); |
if (!strcmp(upper, "UCS-2")) return(XML_CHAR_ENCODING_UCS2); |
if (!strcmp(upper, "UCS2")) return(XML_CHAR_ENCODING_UCS2); |
@@ -1179,7 +1183,7 @@ xmlParseCharEncoding(const char* name) |
if (!strcmp(upper, "UCS-4")) return(XML_CHAR_ENCODING_UCS4LE); |
if (!strcmp(upper, "UCS4")) return(XML_CHAR_ENCODING_UCS4LE); |
- |
+ |
if (!strcmp(upper, "ISO-8859-1")) return(XML_CHAR_ENCODING_8859_1); |
if (!strcmp(upper, "ISO-LATIN-1")) return(XML_CHAR_ENCODING_8859_1); |
if (!strcmp(upper, "ISO LATIN 1")) return(XML_CHAR_ENCODING_8859_1); |
@@ -1302,7 +1306,7 @@ static xmlCharEncodingHandlerPtr xmlDefaultCharEncodingHandler = NULL; |
* Returns the xmlCharEncodingHandlerPtr created (or NULL in case of error). |
*/ |
xmlCharEncodingHandlerPtr |
-xmlNewCharEncodingHandler(const char *name, |
+xmlNewCharEncodingHandler(const char *name, |
xmlCharEncodingInputFunc input, |
xmlCharEncodingOutputFunc output) { |
xmlCharEncodingHandlerPtr handler; |
@@ -1347,6 +1351,7 @@ xmlNewCharEncodingHandler(const char *name, |
xmlEncodingErrMemory("xmlNewCharEncodingHandler : out of memory !\n"); |
return(NULL); |
} |
+ memset(handler, 0, sizeof(xmlCharEncodingHandler)); |
handler->input = input; |
handler->output = output; |
handler->name = up; |
@@ -1382,7 +1387,7 @@ xmlNewCharEncodingHandler(const char *name, |
void |
xmlInitCharEncodingHandlers(void) { |
unsigned short int tst = 0x1234; |
- unsigned char *ptr = (unsigned char *) &tst; |
+ unsigned char *ptr = (unsigned char *) &tst; |
if (handlers != NULL) return; |
@@ -1402,9 +1407,9 @@ xmlInitCharEncodingHandlers(void) { |
} |
xmlNewCharEncodingHandler("UTF-8", UTF8ToUTF8, UTF8ToUTF8); |
#ifdef LIBXML_OUTPUT_ENABLED |
- xmlUTF16LEHandler = |
+ xmlUTF16LEHandler = |
xmlNewCharEncodingHandler("UTF-16LE", UTF16LEToUTF8, UTF8ToUTF16LE); |
- xmlUTF16BEHandler = |
+ xmlUTF16BEHandler = |
xmlNewCharEncodingHandler("UTF-16BE", UTF16BEToUTF8, UTF8ToUTF16BE); |
xmlNewCharEncodingHandler("UTF-16", UTF16LEToUTF8, UTF8ToUTF16); |
xmlNewCharEncodingHandler("ISO-8859-1", isolat1ToUTF8, UTF8Toisolat1); |
@@ -1414,9 +1419,9 @@ xmlInitCharEncodingHandlers(void) { |
xmlNewCharEncodingHandler("HTML", NULL, UTF8ToHtml); |
#endif |
#else |
- xmlUTF16LEHandler = |
+ xmlUTF16LEHandler = |
xmlNewCharEncodingHandler("UTF-16LE", UTF16LEToUTF8, NULL); |
- xmlUTF16BEHandler = |
+ xmlUTF16BEHandler = |
xmlNewCharEncodingHandler("UTF-16BE", UTF16BEToUTF8, NULL); |
xmlNewCharEncodingHandler("UTF-16", UTF16LEToUTF8, NULL); |
xmlNewCharEncodingHandler("ISO-8859-1", isolat1ToUTF8, NULL); |
@@ -1512,6 +1517,8 @@ xmlGetCharEncodingHandler(xmlCharEncoding enc) { |
if (handler != NULL) return(handler); |
handler = xmlFindCharEncodingHandler("EBCDIC-US"); |
if (handler != NULL) return(handler); |
+ handler = xmlFindCharEncodingHandler("IBM-037"); |
+ if (handler != NULL) return(handler); |
break; |
case XML_CHAR_ENCODING_UCS4BE: |
handler = xmlFindCharEncodingHandler("ISO-10646-UCS-4"); |
@@ -1602,10 +1609,10 @@ xmlGetCharEncodingHandler(xmlCharEncoding enc) { |
handler = xmlFindCharEncodingHandler("EUC-JP"); |
if (handler != NULL) return(handler); |
break; |
- default: |
+ default: |
break; |
} |
- |
+ |
#ifdef DEBUG_ENCODING |
xmlGenericError(xmlGenericErrorContext, |
"No handler found for encoding %d\n", enc); |
@@ -1631,7 +1638,7 @@ xmlFindCharEncodingHandler(const char *name) { |
iconv_t icv_in, icv_out; |
#endif /* LIBXML_ICONV_ENABLED */ |
#ifdef LIBXML_ICU_ENABLED |
- xmlCharEncodingHandlerPtr enc; |
+ xmlCharEncodingHandlerPtr encu; |
uconv_t *ucv_in, *ucv_out; |
#endif /* LIBXML_ICU_ENABLED */ |
char upper[100]; |
@@ -1688,6 +1695,7 @@ xmlFindCharEncodingHandler(const char *name) { |
iconv_close(icv_out); |
return(NULL); |
} |
+ memset(enc, 0, sizeof(xmlCharEncodingHandler)); |
enc->name = xmlMemStrdup(name); |
enc->input = NULL; |
enc->output = NULL; |
@@ -1708,23 +1716,24 @@ xmlFindCharEncodingHandler(const char *name) { |
ucv_in = openIcuConverter(name, 1); |
ucv_out = openIcuConverter(name, 0); |
if (ucv_in != NULL && ucv_out != NULL) { |
- enc = (xmlCharEncodingHandlerPtr) |
- xmlMalloc(sizeof(xmlCharEncodingHandler)); |
- if (enc == NULL) { |
+ encu = (xmlCharEncodingHandlerPtr) |
+ xmlMalloc(sizeof(xmlCharEncodingHandler)); |
+ if (encu == NULL) { |
closeIcuConverter(ucv_in); |
closeIcuConverter(ucv_out); |
return(NULL); |
} |
- enc->name = xmlMemStrdup(name); |
- enc->input = NULL; |
- enc->output = NULL; |
- enc->uconv_in = ucv_in; |
- enc->uconv_out = ucv_out; |
+ memset(encu, 0, sizeof(xmlCharEncodingHandler)); |
+ encu->name = xmlMemStrdup(name); |
+ encu->input = NULL; |
+ encu->output = NULL; |
+ encu->uconv_in = ucv_in; |
+ encu->uconv_out = ucv_out; |
#ifdef DEBUG_ENCODING |
xmlGenericError(xmlGenericErrorContext, |
"Found ICU converter handler for encoding %s\n", name); |
#endif |
- return enc; |
+ return encu; |
} else if (ucv_in != NULL || ucv_out != NULL) { |
closeIcuConverter(ucv_in); |
closeIcuConverter(ucv_out); |
@@ -1769,12 +1778,12 @@ xmlFindCharEncodingHandler(const char *name) { |
* @in: a pointer to an array of ISO Latin 1 chars |
* @inlen: the length of @in |
* |
- * Returns 0 if success, or |
+ * Returns 0 if success, or |
* -1 by lack of space, or |
* -2 if the transcoding fails (for *in is not valid utf8 string or |
* the result of transformation can't fit into the encoding we want), or |
* -3 if there the last byte can't form a single output char. |
- * |
+ * |
* The value of @inlen after return is the number of octets consumed |
* as the return value is positive, else unpredictable. |
* The value of @outlen after return is the number of ocetes consumed. |
@@ -1822,7 +1831,7 @@ xmlIconvWrapper(iconv_t cd, unsigned char *out, int *outlen, |
/************************************************************************ |
* * |
- * ICU based generic conversion functions * |
+ * ICU based generic conversion functions * |
* * |
************************************************************************/ |
@@ -1836,12 +1845,12 @@ xmlIconvWrapper(iconv_t cd, unsigned char *out, int *outlen, |
* @in: a pointer to an array of ISO Latin 1 chars |
* @inlen: the length of @in |
* |
- * Returns 0 if success, or |
+ * Returns 0 if success, or |
* -1 by lack of space, or |
* -2 if the transcoding fails (for *in is not valid utf8 string or |
* the result of transformation can't fit into the encoding we want), or |
* -3 if there the last byte can't form a single output char. |
- * |
+ * |
* The value of @inlen after return is the number of octets consumed |
* as the return value is positive, else unpredictable. |
* The value of @outlen after return is the number of ocetes consumed. |
@@ -1858,7 +1867,7 @@ xmlUconvWrapper(uconv_t *cd, int toUnicode, unsigned char *out, int *outlen, |
return(-1); |
} |
- /* |
+ /* |
* TODO(jungshik) |
* 1. is ucnv_convert(To|From)Algorithmic better? |
* 2. had we better use an explicit pivot buffer? |
@@ -1876,7 +1885,7 @@ xmlUconvWrapper(uconv_t *cd, int toUnicode, unsigned char *out, int *outlen, |
&ucv_in, ucv_in + *inlen, NULL, NULL, NULL, NULL, |
0, TRUE, &err); |
} |
- *inlen = ucv_in - (const char*) in; |
+ *inlen = ucv_in - (const char*) in; |
*outlen = ucv_out - (char *) out; |
if (U_SUCCESS(err)) |
return 0; |
@@ -1894,9 +1903,6 @@ xmlUconvWrapper(uconv_t *cd, int toUnicode, unsigned char *out, int *outlen, |
* The real API used by libxml for on-the-fly conversion * |
* * |
************************************************************************/ |
-int |
-xmlCharEncFirstLineInt(xmlCharEncodingHandler *handler, xmlBufferPtr out, |
- xmlBufferPtr in, int len); |
/** |
* xmlCharEncFirstLineInt: |
@@ -1925,7 +1931,7 @@ xmlCharEncFirstLineInt(xmlCharEncodingHandler *handler, xmlBufferPtr out, |
if (in == NULL) return(-1); |
/* calculate space available */ |
- written = out->size - out->use; |
+ written = out->size - out->use - 1; /* count '\0' */ |
toconv = in->use; |
/* |
* echo '<?xml version="1.0" encoding="UCS4"?>' | wc -c => 38 |
@@ -1943,7 +1949,7 @@ xmlCharEncFirstLineInt(xmlCharEncodingHandler *handler, xmlBufferPtr out, |
toconv = 180; |
} |
if (toconv * 2 >= written) { |
- xmlBufferGrow(out, toconv); |
+ xmlBufferGrow(out, toconv * 2); |
written = out->size - out->use - 1; |
} |
@@ -2026,6 +2032,252 @@ xmlCharEncFirstLine(xmlCharEncodingHandler *handler, xmlBufferPtr out, |
} |
/** |
+ * xmlCharEncFirstLineInput: |
+ * @input: a parser input buffer |
+ * @len: number of bytes to convert for the first line, or -1 |
+ * |
+ * Front-end for the encoding handler input function, but handle only |
+ * the very first line. Point is that this is based on autodetection |
+ * of the encoding and once that first line is converted we may find |
+ * out that a different decoder is needed to process the input. |
+ * |
+ * Returns the number of byte written if success, or |
+ * -1 general error |
+ * -2 if the transcoding fails (for *in is not valid utf8 string or |
+ * the result of transformation can't fit into the encoding we want), or |
+ */ |
+int |
+xmlCharEncFirstLineInput(xmlParserInputBufferPtr input, int len) |
+{ |
+ int ret = -2; |
+ size_t written; |
+ size_t toconv; |
+ int c_in; |
+ int c_out; |
+ xmlBufPtr in; |
+ xmlBufPtr out; |
+ |
+ if ((input == NULL) || (input->encoder == NULL) || |
+ (input->buffer == NULL) || (input->raw == NULL)) |
+ return (-1); |
+ out = input->buffer; |
+ in = input->raw; |
+ |
+ toconv = xmlBufUse(in); |
+ if (toconv == 0) |
+ return (0); |
+ written = xmlBufAvail(out) - 1; /* count '\0' */ |
+ /* |
+ * echo '<?xml version="1.0" encoding="UCS4"?>' | wc -c => 38 |
+ * 45 chars should be sufficient to reach the end of the encoding |
+ * declaration without going too far inside the document content. |
+ * on UTF-16 this means 90bytes, on UCS4 this means 180 |
+ * The actual value depending on guessed encoding is passed as @len |
+ * if provided |
+ */ |
+ if (len >= 0) { |
+ if (toconv > (unsigned int) len) |
+ toconv = len; |
+ } else { |
+ if (toconv > 180) |
+ toconv = 180; |
+ } |
+ if (toconv * 2 >= written) { |
+ xmlBufGrow(out, toconv * 2); |
+ written = xmlBufAvail(out) - 1; |
+ } |
+ if (written > 360) |
+ written = 360; |
+ |
+ c_in = toconv; |
+ c_out = written; |
+ if (input->encoder->input != NULL) { |
+ ret = input->encoder->input(xmlBufEnd(out), &c_out, |
+ xmlBufContent(in), &c_in); |
+ xmlBufShrink(in, c_in); |
+ xmlBufAddLen(out, c_out); |
+ } |
+#ifdef LIBXML_ICONV_ENABLED |
+ else if (input->encoder->iconv_in != NULL) { |
+ ret = xmlIconvWrapper(input->encoder->iconv_in, xmlBufEnd(out), |
+ &c_out, xmlBufContent(in), &c_in); |
+ xmlBufShrink(in, c_in); |
+ xmlBufAddLen(out, c_out); |
+ if (ret == -1) |
+ ret = -3; |
+ } |
+#endif /* LIBXML_ICONV_ENABLED */ |
+#ifdef LIBXML_ICU_ENABLED |
+ else if (input->encoder->uconv_in != NULL) { |
+ ret = xmlUconvWrapper(input->encoder->uconv_in, 1, xmlBufEnd(out), |
+ &c_out, xmlBufContent(in), &c_in); |
+ xmlBufShrink(in, c_in); |
+ xmlBufAddLen(out, c_out); |
+ if (ret == -1) |
+ ret = -3; |
+ } |
+#endif /* LIBXML_ICU_ENABLED */ |
+ switch (ret) { |
+ case 0: |
+#ifdef DEBUG_ENCODING |
+ xmlGenericError(xmlGenericErrorContext, |
+ "converted %d bytes to %d bytes of input\n", |
+ c_in, c_out); |
+#endif |
+ break; |
+ case -1: |
+#ifdef DEBUG_ENCODING |
+ xmlGenericError(xmlGenericErrorContext, |
+ "converted %d bytes to %d bytes of input, %d left\n", |
+ c_in, c_out, (int)xmlBufUse(in)); |
+#endif |
+ break; |
+ case -3: |
+#ifdef DEBUG_ENCODING |
+ xmlGenericError(xmlGenericErrorContext, |
+ "converted %d bytes to %d bytes of input, %d left\n", |
+ c_in, c_out, (int)xmlBufUse(in)); |
+#endif |
+ break; |
+ case -2: { |
+ char buf[50]; |
+ const xmlChar *content = xmlBufContent(in); |
+ |
+ snprintf(&buf[0], 49, "0x%02X 0x%02X 0x%02X 0x%02X", |
+ content[0], content[1], |
+ content[2], content[3]); |
+ buf[49] = 0; |
+ xmlEncodingErr(XML_I18N_CONV_FAILED, |
+ "input conversion failed due to input error, bytes %s\n", |
+ buf); |
+ } |
+ } |
+ /* |
+ * Ignore when input buffer is not on a boundary |
+ */ |
+ if (ret == -3) ret = 0; |
+ if (ret == -1) ret = 0; |
+ return(ret); |
+} |
+ |
+/** |
+ * xmlCharEncInput: |
+ * @input: a parser input buffer |
+ * @flush: try to flush all the raw buffer |
+ * |
+ * Generic front-end for the encoding handler on parser input |
+ * |
+ * Returns the number of byte written if success, or |
+ * -1 general error |
+ * -2 if the transcoding fails (for *in is not valid utf8 string or |
+ * the result of transformation can't fit into the encoding we want), or |
+ */ |
+int |
+xmlCharEncInput(xmlParserInputBufferPtr input, int flush) |
+{ |
+ int ret = -2; |
+ size_t written; |
+ size_t toconv; |
+ int c_in; |
+ int c_out; |
+ xmlBufPtr in; |
+ xmlBufPtr out; |
+ |
+ if ((input == NULL) || (input->encoder == NULL) || |
+ (input->buffer == NULL) || (input->raw == NULL)) |
+ return (-1); |
+ out = input->buffer; |
+ in = input->raw; |
+ |
+ toconv = xmlBufUse(in); |
+ if (toconv == 0) |
+ return (0); |
+ if ((toconv > 64 * 1024) && (flush == 0)) |
+ toconv = 64 * 1024; |
+ written = xmlBufAvail(out); |
+ if (written > 0) |
+ written--; /* count '\0' */ |
+ if (toconv * 2 >= written) { |
+ xmlBufGrow(out, toconv * 2); |
+ written = xmlBufAvail(out); |
+ if (written > 0) |
+ written--; /* count '\0' */ |
+ } |
+ if ((written > 128 * 1024) && (flush == 0)) |
+ written = 128 * 1024; |
+ |
+ c_in = toconv; |
+ c_out = written; |
+ if (input->encoder->input != NULL) { |
+ ret = input->encoder->input(xmlBufEnd(out), &c_out, |
+ xmlBufContent(in), &c_in); |
+ xmlBufShrink(in, c_in); |
+ xmlBufAddLen(out, c_out); |
+ } |
+#ifdef LIBXML_ICONV_ENABLED |
+ else if (input->encoder->iconv_in != NULL) { |
+ ret = xmlIconvWrapper(input->encoder->iconv_in, xmlBufEnd(out), |
+ &c_out, xmlBufContent(in), &c_in); |
+ xmlBufShrink(in, c_in); |
+ xmlBufAddLen(out, c_out); |
+ if (ret == -1) |
+ ret = -3; |
+ } |
+#endif /* LIBXML_ICONV_ENABLED */ |
+#ifdef LIBXML_ICU_ENABLED |
+ else if (input->encoder->uconv_in != NULL) { |
+ ret = xmlUconvWrapper(input->encoder->uconv_in, 1, xmlBufEnd(out), |
+ &c_out, xmlBufContent(in), &c_in); |
+ xmlBufShrink(in, c_in); |
+ xmlBufAddLen(out, c_out); |
+ if (ret == -1) |
+ ret = -3; |
+ } |
+#endif /* LIBXML_ICU_ENABLED */ |
+ switch (ret) { |
+ case 0: |
+#ifdef DEBUG_ENCODING |
+ xmlGenericError(xmlGenericErrorContext, |
+ "converted %d bytes to %d bytes of input\n", |
+ c_in, c_out); |
+#endif |
+ break; |
+ case -1: |
+#ifdef DEBUG_ENCODING |
+ xmlGenericError(xmlGenericErrorContext, |
+ "converted %d bytes to %d bytes of input, %d left\n", |
+ c_in, c_out, (int)xmlBufUse(in)); |
+#endif |
+ break; |
+ case -3: |
+#ifdef DEBUG_ENCODING |
+ xmlGenericError(xmlGenericErrorContext, |
+ "converted %d bytes to %d bytes of input, %d left\n", |
+ c_in, c_out, (int)xmlBufUse(in)); |
+#endif |
+ break; |
+ case -2: { |
+ char buf[50]; |
+ const xmlChar *content = xmlBufContent(in); |
+ |
+ snprintf(&buf[0], 49, "0x%02X 0x%02X 0x%02X 0x%02X", |
+ content[0], content[1], |
+ content[2], content[3]); |
+ buf[49] = 0; |
+ xmlEncodingErr(XML_I18N_CONV_FAILED, |
+ "input conversion failed due to input error, bytes %s\n", |
+ buf); |
+ } |
+ } |
+ /* |
+ * Ignore when input buffer is not on a boundary |
+ */ |
+ if (ret == -3) |
+ ret = 0; |
+ return (c_out? c_out : ret); |
+} |
+ |
+/** |
* xmlCharEncInFunc: |
* @handler: char encoding transformation data structure |
* @out: an xmlBuffer for the output. |
@@ -2056,7 +2308,7 @@ xmlCharEncInFunc(xmlCharEncodingHandler * handler, xmlBufferPtr out, |
toconv = in->use; |
if (toconv == 0) |
return (0); |
- written = out->size - out->use; |
+ written = out->size - out->use -1; /* count '\0' */ |
if (toconv * 2 >= written) { |
xmlBufferGrow(out, out->size + toconv * 2); |
written = out->size - out->use - 1; |
@@ -2115,7 +2367,7 @@ xmlCharEncInFunc(xmlCharEncodingHandler * handler, xmlBufferPtr out, |
case -2: { |
char buf[50]; |
- snprintf(&buf[0], 49, "0x%02X 0x%02X 0x%02X 0x%02X", |
+ snprintf(&buf[0], 49, "0x%02X 0x%02X 0x%02X 0x%02X", |
in->content[0], in->content[1], |
in->content[2], in->content[3]); |
buf[49] = 0; |
@@ -2132,20 +2384,251 @@ xmlCharEncInFunc(xmlCharEncodingHandler * handler, xmlBufferPtr out, |
return (written? written : ret); |
} |
+#ifdef LIBXML_OUTPUT_ENABLED |
+/** |
+ * xmlCharEncOutput: |
+ * @output: a parser output buffer |
+ * @init: is this an initialization call without data |
+ * |
+ * Generic front-end for the encoding handler on parser output |
+ * a first call with @init == 1 has to be made first to initiate the |
+ * output in case of non-stateless encoding needing to initiate their |
+ * state or the output (like the BOM in UTF16). |
+ * In case of UTF8 sequence conversion errors for the given encoder, |
+ * the content will be automatically remapped to a CharRef sequence. |
+ * |
+ * Returns the number of byte written if success, or |
+ * -1 general error |
+ * -2 if the transcoding fails (for *in is not valid utf8 string or |
+ * the result of transformation can't fit into the encoding we want), or |
+ */ |
+int |
+xmlCharEncOutput(xmlOutputBufferPtr output, int init) |
+{ |
+ int ret = -2; |
+ size_t written; |
+ size_t writtentot = 0; |
+ size_t toconv; |
+ int c_in; |
+ int c_out; |
+ xmlBufPtr in; |
+ xmlBufPtr out; |
+ int charref_len = 0; |
+ |
+ if ((output == NULL) || (output->encoder == NULL) || |
+ (output->buffer == NULL) || (output->conv == NULL)) |
+ return (-1); |
+ out = output->conv; |
+ in = output->buffer; |
+ |
+retry: |
+ |
+ written = xmlBufAvail(out); |
+ if (written > 0) |
+ written--; /* count '\0' */ |
+ |
+ /* |
+ * First specific handling of the initialization call |
+ */ |
+ if (init) { |
+ c_in = 0; |
+ c_out = written; |
+ if (output->encoder->output != NULL) { |
+ ret = output->encoder->output(xmlBufEnd(out), &c_out, |
+ NULL, &c_in); |
+ if (ret > 0) /* Gennady: check return value */ |
+ xmlBufAddLen(out, c_out); |
+ } |
+#ifdef LIBXML_ICONV_ENABLED |
+ else if (output->encoder->iconv_out != NULL) { |
+ ret = xmlIconvWrapper(output->encoder->iconv_out, xmlBufEnd(out), |
+ &c_out, NULL, &c_in); |
+ xmlBufAddLen(out, c_out); |
+ } |
+#endif /* LIBXML_ICONV_ENABLED */ |
+#ifdef LIBXML_ICU_ENABLED |
+ else if (output->encoder->uconv_out != NULL) { |
+ ret = xmlUconvWrapper(output->encoder->uconv_out, 0, xmlBufEnd(out), |
+ &c_out, NULL, &c_in); |
+ xmlBufAddLen(out, c_out); |
+ } |
+#endif /* LIBXML_ICU_ENABLED */ |
+#ifdef DEBUG_ENCODING |
+ xmlGenericError(xmlGenericErrorContext, |
+ "initialized encoder\n"); |
+#endif |
+ return(0); |
+ } |
+ |
+ /* |
+ * Conversion itself. |
+ */ |
+ toconv = xmlBufUse(in); |
+ if (toconv == 0) |
+ return (0); |
+ if (toconv > 64 * 1024) |
+ toconv = 64 * 1024; |
+ if (toconv * 4 >= written) { |
+ xmlBufGrow(out, toconv * 4); |
+ written = xmlBufAvail(out) - 1; |
+ } |
+ if (written > 256 * 1024) |
+ written = 256 * 1024; |
+ |
+ c_in = toconv; |
+ c_out = written; |
+ if (output->encoder->output != NULL) { |
+ ret = output->encoder->output(xmlBufEnd(out), &c_out, |
+ xmlBufContent(in), &c_in); |
+ if (c_out > 0) { |
+ xmlBufShrink(in, c_in); |
+ xmlBufAddLen(out, c_out); |
+ writtentot += c_out; |
+ } |
+ } |
+#ifdef LIBXML_ICONV_ENABLED |
+ else if (output->encoder->iconv_out != NULL) { |
+ ret = xmlIconvWrapper(output->encoder->iconv_out, xmlBufEnd(out), |
+ &c_out, xmlBufContent(in), &c_in); |
+ xmlBufShrink(in, c_in); |
+ xmlBufAddLen(out, c_out); |
+ writtentot += c_out; |
+ if (ret == -1) { |
+ if (c_out > 0) { |
+ /* |
+ * Can be a limitation of iconv |
+ */ |
+ charref_len = 0; |
+ goto retry; |
+ } |
+ ret = -3; |
+ } |
+ } |
+#endif /* LIBXML_ICONV_ENABLED */ |
+#ifdef LIBXML_ICU_ENABLED |
+ else if (output->encoder->uconv_out != NULL) { |
+ ret = xmlUconvWrapper(output->encoder->uconv_out, 0, xmlBufEnd(out), |
+ &c_out, xmlBufContent(in), &c_in); |
+ xmlBufShrink(in, c_in); |
+ xmlBufAddLen(out, c_out); |
+ writtentot += c_out; |
+ if (ret == -1) { |
+ if (c_out > 0) { |
+ /* |
+ * Can be a limitation of uconv |
+ */ |
+ charref_len = 0; |
+ goto retry; |
+ } |
+ ret = -3; |
+ } |
+ } |
+#endif /* LIBXML_ICU_ENABLED */ |
+ else { |
+ xmlEncodingErr(XML_I18N_NO_OUTPUT, |
+ "xmlCharEncOutFunc: no output function !\n", NULL); |
+ return(-1); |
+ } |
+ |
+ if (ret >= 0) output += ret; |
+ |
+ /* |
+ * Attempt to handle error cases |
+ */ |
+ switch (ret) { |
+ case 0: |
+#ifdef DEBUG_ENCODING |
+ xmlGenericError(xmlGenericErrorContext, |
+ "converted %d bytes to %d bytes of output\n", |
+ c_in, c_out); |
+#endif |
+ break; |
+ case -1: |
+#ifdef DEBUG_ENCODING |
+ xmlGenericError(xmlGenericErrorContext, |
+ "output conversion failed by lack of space\n"); |
+#endif |
+ break; |
+ case -3: |
+#ifdef DEBUG_ENCODING |
+ xmlGenericError(xmlGenericErrorContext,"converted %d bytes to %d bytes of output %d left\n", |
+ c_in, c_out, (int) xmlBufUse(in)); |
+#endif |
+ break; |
+ case -2: { |
+ int len = (int) xmlBufUse(in); |
+ xmlChar *content = xmlBufContent(in); |
+ int cur; |
+ |
+ cur = xmlGetUTF8Char(content, &len); |
+ if ((charref_len != 0) && (c_out < charref_len)) { |
+ /* |
+ * We attempted to insert a character reference and failed. |
+ * Undo what was written and skip the remaining charref. |
+ */ |
+ xmlBufErase(out, c_out); |
+ writtentot -= c_out; |
+ xmlBufShrink(in, charref_len - c_out); |
+ charref_len = 0; |
+ |
+ ret = -1; |
+ break; |
+ } else if (cur > 0) { |
+ xmlChar charref[20]; |
+ |
+#ifdef DEBUG_ENCODING |
+ xmlGenericError(xmlGenericErrorContext, |
+ "handling output conversion error\n"); |
+ xmlGenericError(xmlGenericErrorContext, |
+ "Bytes: 0x%02X 0x%02X 0x%02X 0x%02X\n", |
+ content[0], content[1], |
+ content[2], content[3]); |
+#endif |
+ /* |
+ * Removes the UTF8 sequence, and replace it by a charref |
+ * and continue the transcoding phase, hoping the error |
+ * did not mangle the encoder state. |
+ */ |
+ charref_len = snprintf((char *) &charref[0], sizeof(charref), |
+ "&#%d;", cur); |
+ xmlBufShrink(in, len); |
+ xmlBufAddHead(in, charref, -1); |
+ |
+ goto retry; |
+ } else { |
+ char buf[50]; |
+ |
+ snprintf(&buf[0], 49, "0x%02X 0x%02X 0x%02X 0x%02X", |
+ content[0], content[1], |
+ content[2], content[3]); |
+ buf[49] = 0; |
+ xmlEncodingErr(XML_I18N_CONV_FAILED, |
+ "output conversion failed due to conv error, bytes %s\n", |
+ buf); |
+ if (xmlBufGetAllocationScheme(in) != XML_BUFFER_ALLOC_IMMUTABLE) |
+ content[0] = ' '; |
+ } |
+ break; |
+ } |
+ } |
+ return(ret); |
+} |
+#endif |
+ |
/** |
* xmlCharEncOutFunc: |
* @handler: char enconding transformation data structure |
* @out: an xmlBuffer for the output. |
* @in: an xmlBuffer for the input |
- * |
+ * |
* Generic front-end for the encoding handler output function |
- * a first call with @in == NULL has to be made firs to initiate the |
+ * a first call with @in == NULL has to be made firs to initiate the |
* output in case of non-stateless encoding needing to initiate their |
* state or the output (like the BOM in UTF16). |
* In case of UTF8 sequence conversion errors for the given encoder, |
* the content will be automatically remapped to a CharRef sequence. |
- * |
- * Returns the number of byte written if success, or |
+ * |
+ * Returns the number of byte written if success, or |
* -1 general error |
* -2 if the transcoding fails (for *in is not valid utf8 string or |
* the result of transformation can't fit into the encoding we want), or |
@@ -2158,12 +2641,13 @@ xmlCharEncOutFunc(xmlCharEncodingHandler *handler, xmlBufferPtr out, |
int writtentot = 0; |
int toconv; |
int output = 0; |
+ int charref_len = 0; |
if (handler == NULL) return(-1); |
if (out == NULL) return(-1); |
retry: |
- |
+ |
written = out->size - out->use; |
if (written > 0) |
@@ -2194,7 +2678,7 @@ retry: |
else if (handler->uconv_out != NULL) { |
ret = xmlUconvWrapper(handler->uconv_out, 0, |
&out->content[out->use], |
- &written, NULL, &toconv); |
+ &written, NULL, &toconv); |
out->use += written; |
out->content[out->use] = 0; |
} |
@@ -2223,7 +2707,7 @@ retry: |
xmlBufferShrink(in, toconv); |
out->use += written; |
writtentot += written; |
- } |
+ } |
out->content[out->use] = 0; |
} |
#ifdef LIBXML_ICONV_ENABLED |
@@ -2239,6 +2723,7 @@ retry: |
/* |
* Can be a limitation of iconv |
*/ |
+ charref_len = 0; |
goto retry; |
} |
ret = -3; |
@@ -2259,6 +2744,7 @@ retry: |
/* |
* Can be a limitation of iconv |
*/ |
+ charref_len = 0; |
goto retry; |
} |
ret = -3; |
@@ -2302,7 +2788,19 @@ retry: |
int cur; |
cur = xmlGetUTF8Char(utf, &len); |
- if (cur > 0) { |
+ if ((charref_len != 0) && (written < charref_len)) { |
+ /* |
+ * We attempted to insert a character reference and failed. |
+ * Undo what was written and skip the remaining charref. |
+ */ |
+ out->use -= written; |
+ writtentot -= written; |
+ xmlBufferShrink(in, charref_len - written); |
+ charref_len = 0; |
+ |
+ ret = -1; |
+ break; |
+ } else if (cur > 0) { |
xmlChar charref[20]; |
#ifdef DEBUG_ENCODING |
@@ -2318,7 +2816,8 @@ retry: |
* and continue the transcoding phase, hoping the error |
* did not mangle the encoder state. |
*/ |
- snprintf((char *) &charref[0], sizeof(charref), "&#%d;", cur); |
+ charref_len = snprintf((char *) &charref[0], sizeof(charref), |
+ "&#%d;", cur); |
xmlBufferShrink(in, len); |
xmlBufferAddHead(in, charref, -1); |
@@ -2326,7 +2825,7 @@ retry: |
} else { |
char buf[50]; |
- snprintf(&buf[0], 49, "0x%02X 0x%02X 0x%02X 0x%02X", |
+ snprintf(&buf[0], 49, "0x%02X 0x%02X 0x%02X 0x%02X", |
in->content[0], in->content[1], |
in->content[2], in->content[3]); |
buf[49] = 0; |
@@ -2345,7 +2844,7 @@ retry: |
/** |
* xmlCharEncCloseFunc: |
* @handler: char enconding transformation data structure |
- * |
+ * |
* Generic front-end for encoding handler close function |
* |
* Returns 0 if success, or -1 in case of error |
@@ -2353,17 +2852,27 @@ retry: |
int |
xmlCharEncCloseFunc(xmlCharEncodingHandler *handler) { |
int ret = 0; |
+ int tofree = 0; |
+ int i, handler_in_list = 0; |
+ |
if (handler == NULL) return(-1); |
if (handler->name == NULL) return(-1); |
+ if (handlers != NULL) { |
+ for (i = 0;i < nbCharEncodingHandler; i++) { |
+ if (handler == handlers[i]) { |
+ handler_in_list = 1; |
+ break; |
+ } |
+ } |
+ } |
#ifdef LIBXML_ICONV_ENABLED |
/* |
* Iconv handlers can be used only once, free the whole block. |
* and the associated icon resources. |
*/ |
- if ((handler->iconv_out != NULL) || (handler->iconv_in != NULL)) { |
- if (handler->name != NULL) |
- xmlFree(handler->name); |
- handler->name = NULL; |
+ if ((handler_in_list == 0) && |
+ ((handler->iconv_out != NULL) || (handler->iconv_in != NULL))) { |
+ tofree = 1; |
if (handler->iconv_out != NULL) { |
if (iconv_close(handler->iconv_out)) |
ret = -1; |
@@ -2374,14 +2883,12 @@ xmlCharEncCloseFunc(xmlCharEncodingHandler *handler) { |
ret = -1; |
handler->iconv_in = NULL; |
} |
- xmlFree(handler); |
} |
#endif /* LIBXML_ICONV_ENABLED */ |
#ifdef LIBXML_ICU_ENABLED |
- if ((handler->uconv_out != NULL) || (handler->uconv_in != NULL)) { |
- if (handler->name != NULL) |
- xmlFree(handler->name); |
- handler->name = NULL; |
+ if ((handler_in_list == 0) && |
+ ((handler->uconv_out != NULL) || (handler->uconv_in != NULL))) { |
+ tofree = 1; |
if (handler->uconv_out != NULL) { |
closeIcuConverter(handler->uconv_out); |
handler->uconv_out = NULL; |
@@ -2390,9 +2897,15 @@ xmlCharEncCloseFunc(xmlCharEncodingHandler *handler) { |
closeIcuConverter(handler->uconv_in); |
handler->uconv_in = NULL; |
} |
- xmlFree(handler); |
} |
#endif |
+ if (tofree) { |
+ /* free up only dynamic handlers iconv/uconv */ |
+ if (handler->name != NULL) |
+ xmlFree(handler->name); |
+ handler->name = NULL; |
+ xmlFree(handler); |
+ } |
#ifdef DEBUG_ENCODING |
if (ret) |
xmlGenericError(xmlGenericErrorContext, |
@@ -2422,7 +2935,7 @@ xmlCharEncCloseFunc(xmlCharEncodingHandler *handler) { |
long |
xmlByteConsumed(xmlParserCtxtPtr ctxt) { |
xmlParserInputPtr in; |
- |
+ |
if (ctxt == NULL) return(-1); |
in = ctxt->input; |
if (in == NULL) return(-1); |
@@ -2484,6 +2997,7 @@ xmlByteConsumed(xmlParserCtxtPtr ctxt) { |
unused += written; |
cur += toconv; |
} while (ret == -2); |
+#endif |
} else { |
/* could not find a converter */ |
return(-1); |
@@ -2495,7 +3009,6 @@ xmlByteConsumed(xmlParserCtxtPtr ctxt) { |
} |
return(in->consumed + (in->cur - in->base)); |
} |
-#endif |
#if !defined(LIBXML_ICONV_ENABLED) && !defined(LIBXML_ICU_ENABLED) |
#ifdef LIBXML_ISO8859X_ENABLED |
@@ -2523,6 +3036,7 @@ UTF8ToISO8859x(unsigned char* out, int *outlen, |
const unsigned char* outstart = out; |
const unsigned char* inend; |
const unsigned char* instart = in; |
+ const unsigned char* processed = in; |
if ((out == NULL) || (outlen == NULL) || (inlen == NULL) || |
(xlattable == NULL)) |
@@ -2539,81 +3053,82 @@ UTF8ToISO8859x(unsigned char* out, int *outlen, |
while (in < inend) { |
unsigned char d = *in++; |
if (d < 0x80) { |
- *out++ = d; |
+ *out++ = d; |
} else if (d < 0xC0) { |
/* trailing byte in leading position */ |
*outlen = out - outstart; |
- *inlen = in - instart - 1; |
+ *inlen = processed - instart; |
return(-2); |
} else if (d < 0xE0) { |
unsigned char c; |
if (!(in < inend)) { |
/* trailing byte not in input buffer */ |
*outlen = out - outstart; |
- *inlen = in - instart - 1; |
- return(-2); |
+ *inlen = processed - instart; |
+ return(-3); |
} |
c = *in++; |
if ((c & 0xC0) != 0x80) { |
/* not a trailing byte */ |
*outlen = out - outstart; |
- *inlen = in - instart - 2; |
+ *inlen = processed - instart; |
return(-2); |
} |
- c = c & 0x3F; |
+ c = c & 0x3F; |
d = d & 0x1F; |
d = xlattable [48 + c + xlattable [d] * 64]; |
if (d == 0) { |
/* not in character set */ |
*outlen = out - outstart; |
- *inlen = in - instart - 2; |
+ *inlen = processed - instart; |
return(-2); |
} |
- *out++ = d; |
+ *out++ = d; |
} else if (d < 0xF0) { |
unsigned char c1; |
unsigned char c2; |
if (!(in < inend - 1)) { |
/* trailing bytes not in input buffer */ |
*outlen = out - outstart; |
- *inlen = in - instart - 1; |
- return(-2); |
+ *inlen = processed - instart; |
+ return(-3); |
} |
c1 = *in++; |
if ((c1 & 0xC0) != 0x80) { |
/* not a trailing byte (c1) */ |
*outlen = out - outstart; |
- *inlen = in - instart - 2; |
+ *inlen = processed - instart; |
return(-2); |
} |
c2 = *in++; |
if ((c2 & 0xC0) != 0x80) { |
/* not a trailing byte (c2) */ |
*outlen = out - outstart; |
- *inlen = in - instart - 2; |
+ *inlen = processed - instart; |
return(-2); |
} |
- c1 = c1 & 0x3F; |
- c2 = c2 & 0x3F; |
+ c1 = c1 & 0x3F; |
+ c2 = c2 & 0x3F; |
d = d & 0x0F; |
- d = xlattable [48 + c2 + xlattable [48 + c1 + |
- xlattable [32 + d] * 64] * 64]; |
+ d = xlattable [48 + c2 + xlattable [48 + c1 + |
+ xlattable [32 + d] * 64] * 64]; |
if (d == 0) { |
/* not in character set */ |
*outlen = out - outstart; |
- *inlen = in - instart - 3; |
+ *inlen = processed - instart; |
return(-2); |
} |
- *out++ = d; |
+ *out++ = d; |
} else { |
/* cannot transcode >= U+010000 */ |
*outlen = out - outstart; |
- *inlen = in - instart - 1; |
+ *inlen = processed - instart; |
return(-2); |
} |
+ processed = in; |
} |
*outlen = out - outstart; |
- *inlen = in - instart; |
+ *inlen = processed - instart; |
return(*outlen); |
} |
@@ -2647,16 +3162,16 @@ ISO8859xToUTF8(unsigned char* out, int *outlen, |
outend = out + *outlen; |
inend = in + *inlen; |
instop = inend; |
- c = *in; |
- while (in < inend && out < outend - 1) { |
- if (c >= 0x80) { |
- c = unicodetable [c - 0x80]; |
+ |
+ while ((in < inend) && (out < outend - 2)) { |
+ if (*in >= 0x80) { |
+ c = unicodetable [*in - 0x80]; |
if (c == 0) { |
/* undefined code point */ |
*outlen = out - outstart; |
*inlen = in - instart; |
return (-1); |
- } |
+ } |
if (c < 0x800) { |
*out++ = ((c >> 6) & 0x1F) | 0xC0; |
*out++ = (c & 0x3F) | 0x80; |
@@ -2664,48 +3179,47 @@ ISO8859xToUTF8(unsigned char* out, int *outlen, |
*out++ = ((c >> 12) & 0x0F) | 0xE0; |
*out++ = ((c >> 6) & 0x3F) | 0x80; |
*out++ = (c & 0x3F) | 0x80; |
- } |
+ } |
++in; |
- c = *in; |
} |
- if (instop - in > outend - out) instop = in + (outend - out); |
- while (c < 0x80 && in < instop) { |
- *out++ = c; |
- ++in; |
- c = *in; |
+ if (instop - in > outend - out) instop = in + (outend - out); |
+ while ((*in < 0x80) && (in < instop)) { |
+ *out++ = *in++; |
} |
- } |
- if (in < inend && out < outend && c < 0x80) { |
- *out++ = c; |
- ++in; |
+ } |
+ if ((in < inend) && (out < outend) && (*in < 0x80)) { |
+ *out++ = *in++; |
+ } |
+ if ((in < inend) && (out < outend) && (*in < 0x80)) { |
+ *out++ = *in++; |
} |
*outlen = out - outstart; |
*inlen = in - instart; |
return (*outlen); |
} |
- |
+ |
/************************************************************************ |
* Lookup tables for ISO-8859-2..ISO-8859-16 transcoding * |
************************************************************************/ |
static unsigned short const xmlunicodetable_ISO8859_2 [128] = { |
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
- 0x00a0, 0x0104, 0x02d8, 0x0141, 0x00a4, 0x013d, 0x015a, 0x00a7, |
- 0x00a8, 0x0160, 0x015e, 0x0164, 0x0179, 0x00ad, 0x017d, 0x017b, |
- 0x00b0, 0x0105, 0x02db, 0x0142, 0x00b4, 0x013e, 0x015b, 0x02c7, |
- 0x00b8, 0x0161, 0x015f, 0x0165, 0x017a, 0x02dd, 0x017e, 0x017c, |
- 0x0154, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0139, 0x0106, 0x00c7, |
- 0x010c, 0x00c9, 0x0118, 0x00cb, 0x011a, 0x00cd, 0x00ce, 0x010e, |
- 0x0110, 0x0143, 0x0147, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x00d7, |
- 0x0158, 0x016e, 0x00da, 0x0170, 0x00dc, 0x00dd, 0x0162, 0x00df, |
- 0x0155, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x013a, 0x0107, 0x00e7, |
- 0x010d, 0x00e9, 0x0119, 0x00eb, 0x011b, 0x00ed, 0x00ee, 0x010f, |
- 0x0111, 0x0144, 0x0148, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x00f7, |
- 0x0159, 0x016f, 0x00fa, 0x0171, 0x00fc, 0x00fd, 0x0163, 0x02d9, |
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
+ 0x00a0, 0x0104, 0x02d8, 0x0141, 0x00a4, 0x013d, 0x015a, 0x00a7, |
+ 0x00a8, 0x0160, 0x015e, 0x0164, 0x0179, 0x00ad, 0x017d, 0x017b, |
+ 0x00b0, 0x0105, 0x02db, 0x0142, 0x00b4, 0x013e, 0x015b, 0x02c7, |
+ 0x00b8, 0x0161, 0x015f, 0x0165, 0x017a, 0x02dd, 0x017e, 0x017c, |
+ 0x0154, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0139, 0x0106, 0x00c7, |
+ 0x010c, 0x00c9, 0x0118, 0x00cb, 0x011a, 0x00cd, 0x00ce, 0x010e, |
+ 0x0110, 0x0143, 0x0147, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x00d7, |
+ 0x0158, 0x016e, 0x00da, 0x0170, 0x00dc, 0x00dd, 0x0162, 0x00df, |
+ 0x0155, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x013a, 0x0107, 0x00e7, |
+ 0x010d, 0x00e9, 0x0119, 0x00eb, 0x011b, 0x00ed, 0x00ee, 0x010f, |
+ 0x0111, 0x0144, 0x0148, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x00f7, |
+ 0x0159, 0x016f, 0x00fa, 0x0171, 0x00fc, 0x00fd, 0x0163, 0x02d9, |
}; |
static unsigned char const xmltranscodetable_ISO8859_2 [48 + 6 * 64] = { |
@@ -2739,22 +3253,22 @@ static unsigned char const xmltranscodetable_ISO8859_2 [48 + 6 * 64] = { |
}; |
static unsigned short const xmlunicodetable_ISO8859_3 [128] = { |
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
- 0x00a0, 0x0126, 0x02d8, 0x00a3, 0x00a4, 0x0000, 0x0124, 0x00a7, |
- 0x00a8, 0x0130, 0x015e, 0x011e, 0x0134, 0x00ad, 0x0000, 0x017b, |
- 0x00b0, 0x0127, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x0125, 0x00b7, |
- 0x00b8, 0x0131, 0x015f, 0x011f, 0x0135, 0x00bd, 0x0000, 0x017c, |
- 0x00c0, 0x00c1, 0x00c2, 0x0000, 0x00c4, 0x010a, 0x0108, 0x00c7, |
- 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, |
- 0x0000, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x0120, 0x00d6, 0x00d7, |
- 0x011c, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x016c, 0x015c, 0x00df, |
- 0x00e0, 0x00e1, 0x00e2, 0x0000, 0x00e4, 0x010b, 0x0109, 0x00e7, |
- 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, |
- 0x0000, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x0121, 0x00f6, 0x00f7, |
- 0x011d, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x016d, 0x015d, 0x02d9, |
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
+ 0x00a0, 0x0126, 0x02d8, 0x00a3, 0x00a4, 0x0000, 0x0124, 0x00a7, |
+ 0x00a8, 0x0130, 0x015e, 0x011e, 0x0134, 0x00ad, 0x0000, 0x017b, |
+ 0x00b0, 0x0127, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x0125, 0x00b7, |
+ 0x00b8, 0x0131, 0x015f, 0x011f, 0x0135, 0x00bd, 0x0000, 0x017c, |
+ 0x00c0, 0x00c1, 0x00c2, 0x0000, 0x00c4, 0x010a, 0x0108, 0x00c7, |
+ 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, |
+ 0x0000, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x0120, 0x00d6, 0x00d7, |
+ 0x011c, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x016c, 0x015c, 0x00df, |
+ 0x00e0, 0x00e1, 0x00e2, 0x0000, 0x00e4, 0x010b, 0x0109, 0x00e7, |
+ 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, |
+ 0x0000, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x0121, 0x00f6, 0x00f7, |
+ 0x011d, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x016d, 0x015d, 0x02d9, |
}; |
static unsigned char const xmltranscodetable_ISO8859_3 [48 + 7 * 64] = { |
@@ -2792,22 +3306,22 @@ static unsigned char const xmltranscodetable_ISO8859_3 [48 + 7 * 64] = { |
}; |
static unsigned short const xmlunicodetable_ISO8859_4 [128] = { |
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
- 0x00a0, 0x0104, 0x0138, 0x0156, 0x00a4, 0x0128, 0x013b, 0x00a7, |
- 0x00a8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00ad, 0x017d, 0x00af, |
- 0x00b0, 0x0105, 0x02db, 0x0157, 0x00b4, 0x0129, 0x013c, 0x02c7, |
- 0x00b8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014a, 0x017e, 0x014b, |
- 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e, |
- 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x012a, |
- 0x0110, 0x0145, 0x014c, 0x0136, 0x00d4, 0x00d5, 0x00d6, 0x00d7, |
- 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x0168, 0x016a, 0x00df, |
- 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f, |
- 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x012b, |
- 0x0111, 0x0146, 0x014d, 0x0137, 0x00f4, 0x00f5, 0x00f6, 0x00f7, |
- 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x0169, 0x016b, 0x02d9, |
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
+ 0x00a0, 0x0104, 0x0138, 0x0156, 0x00a4, 0x0128, 0x013b, 0x00a7, |
+ 0x00a8, 0x0160, 0x0112, 0x0122, 0x0166, 0x00ad, 0x017d, 0x00af, |
+ 0x00b0, 0x0105, 0x02db, 0x0157, 0x00b4, 0x0129, 0x013c, 0x02c7, |
+ 0x00b8, 0x0161, 0x0113, 0x0123, 0x0167, 0x014a, 0x017e, 0x014b, |
+ 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e, |
+ 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x012a, |
+ 0x0110, 0x0145, 0x014c, 0x0136, 0x00d4, 0x00d5, 0x00d6, 0x00d7, |
+ 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x0168, 0x016a, 0x00df, |
+ 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f, |
+ 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x012b, |
+ 0x0111, 0x0146, 0x014d, 0x0137, 0x00f4, 0x00f5, 0x00f6, 0x00f7, |
+ 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x0169, 0x016b, 0x02d9, |
}; |
static unsigned char const xmltranscodetable_ISO8859_4 [48 + 6 * 64] = { |
@@ -2841,22 +3355,22 @@ static unsigned char const xmltranscodetable_ISO8859_4 [48 + 6 * 64] = { |
}; |
static unsigned short const xmlunicodetable_ISO8859_5 [128] = { |
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
- 0x00a0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, |
- 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f, |
- 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, |
- 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, |
- 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, |
- 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, |
- 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, |
- 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, |
- 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, |
- 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, |
- 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, |
- 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x00a7, 0x045e, 0x045f, |
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
+ 0x00a0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, |
+ 0x0408, 0x0409, 0x040a, 0x040b, 0x040c, 0x00ad, 0x040e, 0x040f, |
+ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, |
+ 0x0418, 0x0419, 0x041a, 0x041b, 0x041c, 0x041d, 0x041e, 0x041f, |
+ 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, |
+ 0x0428, 0x0429, 0x042a, 0x042b, 0x042c, 0x042d, 0x042e, 0x042f, |
+ 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, |
+ 0x0438, 0x0439, 0x043a, 0x043b, 0x043c, 0x043d, 0x043e, 0x043f, |
+ 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, |
+ 0x0448, 0x0449, 0x044a, 0x044b, 0x044c, 0x044d, 0x044e, 0x044f, |
+ 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, |
+ 0x0458, 0x0459, 0x045a, 0x045b, 0x045c, 0x00a7, 0x045e, 0x045f, |
}; |
static unsigned char const xmltranscodetable_ISO8859_5 [48 + 6 * 64] = { |
@@ -2890,22 +3404,22 @@ static unsigned char const xmltranscodetable_ISO8859_5 [48 + 6 * 64] = { |
}; |
static unsigned short const xmlunicodetable_ISO8859_6 [128] = { |
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
- 0x00a0, 0x0000, 0x0000, 0x0000, 0x00a4, 0x0000, 0x0000, 0x0000, |
- 0x0000, 0x0000, 0x0000, 0x0000, 0x060c, 0x00ad, 0x0000, 0x0000, |
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
- 0x0000, 0x0000, 0x0000, 0x061b, 0x0000, 0x0000, 0x0000, 0x061f, |
- 0x0000, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, |
- 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, |
- 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, |
- 0x0638, 0x0639, 0x063a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
- 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, |
- 0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f, |
- 0x0650, 0x0651, 0x0652, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
+ 0x00a0, 0x0000, 0x0000, 0x0000, 0x00a4, 0x0000, 0x0000, 0x0000, |
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x060c, 0x00ad, 0x0000, 0x0000, |
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
+ 0x0000, 0x0000, 0x0000, 0x061b, 0x0000, 0x0000, 0x0000, 0x061f, |
+ 0x0000, 0x0621, 0x0622, 0x0623, 0x0624, 0x0625, 0x0626, 0x0627, |
+ 0x0628, 0x0629, 0x062a, 0x062b, 0x062c, 0x062d, 0x062e, 0x062f, |
+ 0x0630, 0x0631, 0x0632, 0x0633, 0x0634, 0x0635, 0x0636, 0x0637, |
+ 0x0638, 0x0639, 0x063a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
+ 0x0640, 0x0641, 0x0642, 0x0643, 0x0644, 0x0645, 0x0646, 0x0647, |
+ 0x0648, 0x0649, 0x064a, 0x064b, 0x064c, 0x064d, 0x064e, 0x064f, |
+ 0x0650, 0x0651, 0x0652, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
}; |
static unsigned char const xmltranscodetable_ISO8859_6 [48 + 5 * 64] = { |
@@ -2935,22 +3449,22 @@ static unsigned char const xmltranscodetable_ISO8859_6 [48 + 5 * 64] = { |
}; |
static unsigned short const xmlunicodetable_ISO8859_7 [128] = { |
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
- 0x00a0, 0x2018, 0x2019, 0x00a3, 0x0000, 0x0000, 0x00a6, 0x00a7, |
- 0x00a8, 0x00a9, 0x0000, 0x00ab, 0x00ac, 0x00ad, 0x0000, 0x2015, |
- 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x0384, 0x0385, 0x0386, 0x00b7, |
- 0x0388, 0x0389, 0x038a, 0x00bb, 0x038c, 0x00bd, 0x038e, 0x038f, |
- 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, |
- 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, |
- 0x03a0, 0x03a1, 0x0000, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, |
- 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af, |
- 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, |
- 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, |
- 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, |
- 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0x0000, |
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
+ 0x00a0, 0x2018, 0x2019, 0x00a3, 0x0000, 0x0000, 0x00a6, 0x00a7, |
+ 0x00a8, 0x00a9, 0x0000, 0x00ab, 0x00ac, 0x00ad, 0x0000, 0x2015, |
+ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x0384, 0x0385, 0x0386, 0x00b7, |
+ 0x0388, 0x0389, 0x038a, 0x00bb, 0x038c, 0x00bd, 0x038e, 0x038f, |
+ 0x0390, 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, |
+ 0x0398, 0x0399, 0x039a, 0x039b, 0x039c, 0x039d, 0x039e, 0x039f, |
+ 0x03a0, 0x03a1, 0x0000, 0x03a3, 0x03a4, 0x03a5, 0x03a6, 0x03a7, |
+ 0x03a8, 0x03a9, 0x03aa, 0x03ab, 0x03ac, 0x03ad, 0x03ae, 0x03af, |
+ 0x03b0, 0x03b1, 0x03b2, 0x03b3, 0x03b4, 0x03b5, 0x03b6, 0x03b7, |
+ 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bc, 0x03bd, 0x03be, 0x03bf, |
+ 0x03c0, 0x03c1, 0x03c2, 0x03c3, 0x03c4, 0x03c5, 0x03c6, 0x03c7, |
+ 0x03c8, 0x03c9, 0x03ca, 0x03cb, 0x03cc, 0x03cd, 0x03ce, 0x0000, |
}; |
static unsigned char const xmltranscodetable_ISO8859_7 [48 + 7 * 64] = { |
@@ -2988,22 +3502,22 @@ static unsigned char const xmltranscodetable_ISO8859_7 [48 + 7 * 64] = { |
}; |
static unsigned short const xmlunicodetable_ISO8859_8 [128] = { |
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
- 0x00a0, 0x0000, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, |
- 0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, |
- 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, |
- 0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x0000, |
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
- 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2017, |
- 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, |
- 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, |
- 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, |
- 0x05e8, 0x05e9, 0x05ea, 0x0000, 0x0000, 0x200e, 0x200f, 0x0000, |
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
+ 0x00a0, 0x0000, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, |
+ 0x00a8, 0x00a9, 0x00d7, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, |
+ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, |
+ 0x00b8, 0x00b9, 0x00f7, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x0000, |
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, |
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2017, |
+ 0x05d0, 0x05d1, 0x05d2, 0x05d3, 0x05d4, 0x05d5, 0x05d6, 0x05d7, |
+ 0x05d8, 0x05d9, 0x05da, 0x05db, 0x05dc, 0x05dd, 0x05de, 0x05df, |
+ 0x05e0, 0x05e1, 0x05e2, 0x05e3, 0x05e4, 0x05e5, 0x05e6, 0x05e7, |
+ 0x05e8, 0x05e9, 0x05ea, 0x0000, 0x0000, 0x200e, 0x200f, 0x0000, |
}; |
static unsigned char const xmltranscodetable_ISO8859_8 [48 + 7 * 64] = { |
@@ -3041,22 +3555,22 @@ static unsigned char const xmltranscodetable_ISO8859_8 [48 + 7 * 64] = { |
}; |
static unsigned short const xmlunicodetable_ISO8859_9 [128] = { |
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
- 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, |
- 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, |
- 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, |
- 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, |
- 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, |
- 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, |
- 0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, |
- 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df, |
- 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, |
- 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, |
- 0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, |
- 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff, |
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
+ 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7, |
+ 0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, |
+ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7, |
+ 0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf, |
+ 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, |
+ 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, |
+ 0x011e, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, |
+ 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0130, 0x015e, 0x00df, |
+ 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, |
+ 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, |
+ 0x011f, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, |
+ 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0131, 0x015f, 0x00ff, |
}; |
static unsigned char const xmltranscodetable_ISO8859_9 [48 + 5 * 64] = { |
@@ -3086,22 +3600,22 @@ static unsigned char const xmltranscodetable_ISO8859_9 [48 + 5 * 64] = { |
}; |
static unsigned short const xmlunicodetable_ISO8859_10 [128] = { |
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
- 0x00a0, 0x0104, 0x0112, 0x0122, 0x012a, 0x0128, 0x0136, 0x00a7, |
- 0x013b, 0x0110, 0x0160, 0x0166, 0x017d, 0x00ad, 0x016a, 0x014a, |
- 0x00b0, 0x0105, 0x0113, 0x0123, 0x012b, 0x0129, 0x0137, 0x00b7, |
- 0x013c, 0x0111, 0x0161, 0x0167, 0x017e, 0x2015, 0x016b, 0x014b, |
- 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e, |
- 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x00cf, |
- 0x00d0, 0x0145, 0x014c, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x0168, |
- 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, |
- 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f, |
- 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x00ef, |
- 0x00f0, 0x0146, 0x014d, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x0169, |
- 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x0138, |
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
+ 0x00a0, 0x0104, 0x0112, 0x0122, 0x012a, 0x0128, 0x0136, 0x00a7, |
+ 0x013b, 0x0110, 0x0160, 0x0166, 0x017d, 0x00ad, 0x016a, 0x014a, |
+ 0x00b0, 0x0105, 0x0113, 0x0123, 0x012b, 0x0129, 0x0137, 0x00b7, |
+ 0x013c, 0x0111, 0x0161, 0x0167, 0x017e, 0x2015, 0x016b, 0x014b, |
+ 0x0100, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x012e, |
+ 0x010c, 0x00c9, 0x0118, 0x00cb, 0x0116, 0x00cd, 0x00ce, 0x00cf, |
+ 0x00d0, 0x0145, 0x014c, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x0168, |
+ 0x00d8, 0x0172, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, |
+ 0x0101, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x012f, |
+ 0x010d, 0x00e9, 0x0119, 0x00eb, 0x0117, 0x00ed, 0x00ee, 0x00ef, |
+ 0x00f0, 0x0146, 0x014d, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x0169, |
+ 0x00f8, 0x0173, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x0138, |
}; |
static unsigned char const xmltranscodetable_ISO8859_10 [48 + 7 * 64] = { |
@@ -3139,22 +3653,22 @@ static unsigned char const xmltranscodetable_ISO8859_10 [48 + 7 * 64] = { |
}; |
static unsigned short const xmlunicodetable_ISO8859_11 [128] = { |
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
- 0x00a0, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07, |
- 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f, |
- 0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17, |
- 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f, |
- 0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27, |
- 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f, |
- 0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37, |
- 0x0e38, 0x0e39, 0x0e3a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0e3f, |
- 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47, |
- 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f, |
- 0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57, |
- 0x0e58, 0x0e59, 0x0e5a, 0x0e5b, 0x0000, 0x0000, 0x0000, 0x0000, |
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
+ 0x00a0, 0x0e01, 0x0e02, 0x0e03, 0x0e04, 0x0e05, 0x0e06, 0x0e07, |
+ 0x0e08, 0x0e09, 0x0e0a, 0x0e0b, 0x0e0c, 0x0e0d, 0x0e0e, 0x0e0f, |
+ 0x0e10, 0x0e11, 0x0e12, 0x0e13, 0x0e14, 0x0e15, 0x0e16, 0x0e17, |
+ 0x0e18, 0x0e19, 0x0e1a, 0x0e1b, 0x0e1c, 0x0e1d, 0x0e1e, 0x0e1f, |
+ 0x0e20, 0x0e21, 0x0e22, 0x0e23, 0x0e24, 0x0e25, 0x0e26, 0x0e27, |
+ 0x0e28, 0x0e29, 0x0e2a, 0x0e2b, 0x0e2c, 0x0e2d, 0x0e2e, 0x0e2f, |
+ 0x0e30, 0x0e31, 0x0e32, 0x0e33, 0x0e34, 0x0e35, 0x0e36, 0x0e37, |
+ 0x0e38, 0x0e39, 0x0e3a, 0x0000, 0x0000, 0x0000, 0x0000, 0x0e3f, |
+ 0x0e40, 0x0e41, 0x0e42, 0x0e43, 0x0e44, 0x0e45, 0x0e46, 0x0e47, |
+ 0x0e48, 0x0e49, 0x0e4a, 0x0e4b, 0x0e4c, 0x0e4d, 0x0e4e, 0x0e4f, |
+ 0x0e50, 0x0e51, 0x0e52, 0x0e53, 0x0e54, 0x0e55, 0x0e56, 0x0e57, |
+ 0x0e58, 0x0e59, 0x0e5a, 0x0e5b, 0x0000, 0x0000, 0x0000, 0x0000, |
}; |
static unsigned char const xmltranscodetable_ISO8859_11 [48 + 6 * 64] = { |
@@ -3188,22 +3702,22 @@ static unsigned char const xmltranscodetable_ISO8859_11 [48 + 6 * 64] = { |
}; |
static unsigned short const xmlunicodetable_ISO8859_13 [128] = { |
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
- 0x00a0, 0x201d, 0x00a2, 0x00a3, 0x00a4, 0x201e, 0x00a6, 0x00a7, |
- 0x00d8, 0x00a9, 0x0156, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00c6, |
- 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x201c, 0x00b5, 0x00b6, 0x00b7, |
- 0x00f8, 0x00b9, 0x0157, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00e6, |
- 0x0104, 0x012e, 0x0100, 0x0106, 0x00c4, 0x00c5, 0x0118, 0x0112, |
- 0x010c, 0x00c9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012a, 0x013b, |
- 0x0160, 0x0143, 0x0145, 0x00d3, 0x014c, 0x00d5, 0x00d6, 0x00d7, |
- 0x0172, 0x0141, 0x015a, 0x016a, 0x00dc, 0x017b, 0x017d, 0x00df, |
- 0x0105, 0x012f, 0x0101, 0x0107, 0x00e4, 0x00e5, 0x0119, 0x0113, |
- 0x010d, 0x00e9, 0x017a, 0x0117, 0x0123, 0x0137, 0x012b, 0x013c, |
- 0x0161, 0x0144, 0x0146, 0x00f3, 0x014d, 0x00f5, 0x00f6, 0x00f7, |
- 0x0173, 0x0142, 0x015b, 0x016b, 0x00fc, 0x017c, 0x017e, 0x2019, |
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
+ 0x00a0, 0x201d, 0x00a2, 0x00a3, 0x00a4, 0x201e, 0x00a6, 0x00a7, |
+ 0x00d8, 0x00a9, 0x0156, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00c6, |
+ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x201c, 0x00b5, 0x00b6, 0x00b7, |
+ 0x00f8, 0x00b9, 0x0157, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00e6, |
+ 0x0104, 0x012e, 0x0100, 0x0106, 0x00c4, 0x00c5, 0x0118, 0x0112, |
+ 0x010c, 0x00c9, 0x0179, 0x0116, 0x0122, 0x0136, 0x012a, 0x013b, |
+ 0x0160, 0x0143, 0x0145, 0x00d3, 0x014c, 0x00d5, 0x00d6, 0x00d7, |
+ 0x0172, 0x0141, 0x015a, 0x016a, 0x00dc, 0x017b, 0x017d, 0x00df, |
+ 0x0105, 0x012f, 0x0101, 0x0107, 0x00e4, 0x00e5, 0x0119, 0x0113, |
+ 0x010d, 0x00e9, 0x017a, 0x0117, 0x0123, 0x0137, 0x012b, 0x013c, |
+ 0x0161, 0x0144, 0x0146, 0x00f3, 0x014d, 0x00f5, 0x00f6, 0x00f7, |
+ 0x0173, 0x0142, 0x015b, 0x016b, 0x00fc, 0x017c, 0x017e, 0x2019, |
}; |
static unsigned char const xmltranscodetable_ISO8859_13 [48 + 7 * 64] = { |
@@ -3241,22 +3755,22 @@ static unsigned char const xmltranscodetable_ISO8859_13 [48 + 7 * 64] = { |
}; |
static unsigned short const xmlunicodetable_ISO8859_14 [128] = { |
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
- 0x00a0, 0x1e02, 0x1e03, 0x00a3, 0x010a, 0x010b, 0x1e0a, 0x00a7, |
- 0x1e80, 0x00a9, 0x1e82, 0x1e0b, 0x1ef2, 0x00ad, 0x00ae, 0x0178, |
- 0x1e1e, 0x1e1f, 0x0120, 0x0121, 0x1e40, 0x1e41, 0x00b6, 0x1e56, |
- 0x1e81, 0x1e57, 0x1e83, 0x1e60, 0x1ef3, 0x1e84, 0x1e85, 0x1e61, |
- 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, |
- 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, |
- 0x0174, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x1e6a, |
- 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x0176, 0x00df, |
- 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, |
- 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, |
- 0x0175, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x1e6b, |
- 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x0177, 0x00ff, |
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
+ 0x00a0, 0x1e02, 0x1e03, 0x00a3, 0x010a, 0x010b, 0x1e0a, 0x00a7, |
+ 0x1e80, 0x00a9, 0x1e82, 0x1e0b, 0x1ef2, 0x00ad, 0x00ae, 0x0178, |
+ 0x1e1e, 0x1e1f, 0x0120, 0x0121, 0x1e40, 0x1e41, 0x00b6, 0x1e56, |
+ 0x1e81, 0x1e57, 0x1e83, 0x1e60, 0x1ef3, 0x1e84, 0x1e85, 0x1e61, |
+ 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, |
+ 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, |
+ 0x0174, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x1e6a, |
+ 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x0176, 0x00df, |
+ 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, |
+ 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, |
+ 0x0175, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x1e6b, |
+ 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x0177, 0x00ff, |
}; |
static unsigned char const xmltranscodetable_ISO8859_14 [48 + 10 * 64] = { |
@@ -3306,22 +3820,22 @@ static unsigned char const xmltranscodetable_ISO8859_14 [48 + 10 * 64] = { |
}; |
static unsigned short const xmlunicodetable_ISO8859_15 [128] = { |
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
- 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x20ac, 0x00a5, 0x0160, 0x00a7, |
- 0x0161, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, |
- 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x017d, 0x00b5, 0x00b6, 0x00b7, |
- 0x017e, 0x00b9, 0x00ba, 0x00bb, 0x0152, 0x0153, 0x0178, 0x00bf, |
- 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, |
- 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, |
- 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, |
- 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, |
- 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, |
- 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, |
- 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, |
- 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff, |
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
+ 0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x20ac, 0x00a5, 0x0160, 0x00a7, |
+ 0x0161, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af, |
+ 0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x017d, 0x00b5, 0x00b6, 0x00b7, |
+ 0x017e, 0x00b9, 0x00ba, 0x00bb, 0x0152, 0x0153, 0x0178, 0x00bf, |
+ 0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7, |
+ 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, |
+ 0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7, |
+ 0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df, |
+ 0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7, |
+ 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, |
+ 0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7, |
+ 0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff, |
}; |
static unsigned char const xmltranscodetable_ISO8859_15 [48 + 6 * 64] = { |
@@ -3355,22 +3869,22 @@ static unsigned char const xmltranscodetable_ISO8859_15 [48 + 6 * 64] = { |
}; |
static unsigned short const xmlunicodetable_ISO8859_16 [128] = { |
- 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
- 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
- 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
- 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
- 0x00a0, 0x0104, 0x0105, 0x0141, 0x20ac, 0x201e, 0x0160, 0x00a7, |
- 0x0161, 0x00a9, 0x0218, 0x00ab, 0x0179, 0x00ad, 0x017a, 0x017b, |
- 0x00b0, 0x00b1, 0x010c, 0x0142, 0x017d, 0x201d, 0x00b6, 0x00b7, |
- 0x017e, 0x010d, 0x0219, 0x00bb, 0x0152, 0x0153, 0x0178, 0x017c, |
- 0x00c0, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0106, 0x00c6, 0x00c7, |
- 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, |
- 0x0110, 0x0143, 0x00d2, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x015a, |
- 0x0170, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0118, 0x021a, 0x00df, |
- 0x00e0, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x0107, 0x00e6, 0x00e7, |
- 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, |
- 0x0111, 0x0144, 0x00f2, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x015b, |
- 0x0171, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0119, 0x021b, 0x00ff, |
+ 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, |
+ 0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f, |
+ 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, |
+ 0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f, |
+ 0x00a0, 0x0104, 0x0105, 0x0141, 0x20ac, 0x201e, 0x0160, 0x00a7, |
+ 0x0161, 0x00a9, 0x0218, 0x00ab, 0x0179, 0x00ad, 0x017a, 0x017b, |
+ 0x00b0, 0x00b1, 0x010c, 0x0142, 0x017d, 0x201d, 0x00b6, 0x00b7, |
+ 0x017e, 0x010d, 0x0219, 0x00bb, 0x0152, 0x0153, 0x0178, 0x017c, |
+ 0x00c0, 0x00c1, 0x00c2, 0x0102, 0x00c4, 0x0106, 0x00c6, 0x00c7, |
+ 0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf, |
+ 0x0110, 0x0143, 0x00d2, 0x00d3, 0x00d4, 0x0150, 0x00d6, 0x015a, |
+ 0x0170, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x0118, 0x021a, 0x00df, |
+ 0x00e0, 0x00e1, 0x00e2, 0x0103, 0x00e4, 0x0107, 0x00e6, 0x00e7, |
+ 0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef, |
+ 0x0111, 0x0144, 0x00f2, 0x00f3, 0x00f4, 0x0151, 0x00f6, 0x015b, |
+ 0x0171, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x0119, 0x021b, 0x00ff, |
}; |
static unsigned char const xmltranscodetable_ISO8859_16 [48 + 9 * 64] = { |
@@ -3569,4 +4083,3 @@ xmlRegisterCharEncodingHandlersISO8859x (void) { |
#define bottom_encoding |
#include "elfgcchack.h" |
- |