OLD | NEW |
1 /* | 1 /* |
2 * xmlsave.c: Implemetation of the document serializer | 2 * xmlsave.c: Implemetation of the document serializer |
3 * | 3 * |
4 * See Copyright for the status of this software. | 4 * See Copyright for the status of this software. |
5 * | 5 * |
6 * daniel@veillard.com | 6 * daniel@veillard.com |
7 */ | 7 */ |
8 | 8 |
9 #define IN_LIBXML | 9 #define IN_LIBXML |
10 #include "libxml.h" | 10 #include "libxml.h" |
(...skipping 2079 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2090 xmlBufAdd(buf, base, cur - base); | 2090 xmlBufAdd(buf, base, cur - base); |
2091 xmlBufAdd(buf, BAD_CAST ">", 4); | 2091 xmlBufAdd(buf, BAD_CAST ">", 4); |
2092 cur++; | 2092 cur++; |
2093 base = cur; | 2093 base = cur; |
2094 } else if (*cur == '&') { | 2094 } else if (*cur == '&') { |
2095 if (base != cur) | 2095 if (base != cur) |
2096 xmlBufAdd(buf, base, cur - base); | 2096 xmlBufAdd(buf, base, cur - base); |
2097 xmlBufAdd(buf, BAD_CAST "&", 5); | 2097 xmlBufAdd(buf, BAD_CAST "&", 5); |
2098 cur++; | 2098 cur++; |
2099 base = cur; | 2099 base = cur; |
2100 } else if ((*cur >= 0x80) && ((doc == NULL) || | 2100 } else if ((*cur >= 0x80) && (cur[1] != 0) && |
2101 (doc->encoding == NULL))) { | 2101 » ((doc == NULL) || (doc->encoding == NULL))) { |
2102 /* | 2102 /* |
2103 * We assume we have UTF-8 content. | 2103 * We assume we have UTF-8 content. |
2104 */ | 2104 */ |
2105 unsigned char tmp[12]; | 2105 unsigned char tmp[12]; |
2106 int val = 0, l = 1; | 2106 int val = 0, l = 1; |
2107 | 2107 |
2108 if (base != cur) | 2108 if (base != cur) |
2109 xmlBufAdd(buf, base, cur - base); | 2109 xmlBufAdd(buf, base, cur - base); |
2110 if (*cur < 0xC0) { | 2110 if (*cur < 0xC0) { |
2111 xmlSaveErr(XML_SAVE_NOT_UTF8, (xmlNodePtr) attr, NULL); | 2111 xmlSaveErr(XML_SAVE_NOT_UTF8, (xmlNodePtr) attr, NULL); |
2112 if (doc != NULL) | 2112 if (doc != NULL) |
2113 doc->encoding = xmlStrdup(BAD_CAST "ISO-8859-1"); | 2113 doc->encoding = xmlStrdup(BAD_CAST "ISO-8859-1"); |
2114 xmlSerializeHexCharRef(tmp, *cur); | 2114 xmlSerializeHexCharRef(tmp, *cur); |
2115 xmlBufAdd(buf, (xmlChar *) tmp, -1); | 2115 xmlBufAdd(buf, (xmlChar *) tmp, -1); |
2116 cur++; | 2116 cur++; |
2117 base = cur; | 2117 base = cur; |
2118 continue; | 2118 continue; |
2119 } else if (*cur < 0xE0) { | 2119 } else if (*cur < 0xE0) { |
2120 val = (cur[0]) & 0x1F; | 2120 val = (cur[0]) & 0x1F; |
2121 val <<= 6; | 2121 val <<= 6; |
2122 val |= (cur[1]) & 0x3F; | 2122 val |= (cur[1]) & 0x3F; |
2123 l = 2; | 2123 l = 2; |
2124 } else if (*cur < 0xF0) { | 2124 } else if ((*cur < 0xF0) && (cur [2] != 0)) { |
2125 val = (cur[0]) & 0x0F; | 2125 val = (cur[0]) & 0x0F; |
2126 val <<= 6; | 2126 val <<= 6; |
2127 val |= (cur[1]) & 0x3F; | 2127 val |= (cur[1]) & 0x3F; |
2128 val <<= 6; | 2128 val <<= 6; |
2129 val |= (cur[2]) & 0x3F; | 2129 val |= (cur[2]) & 0x3F; |
2130 l = 3; | 2130 l = 3; |
2131 } else if (*cur < 0xF8) { | 2131 } else if ((*cur < 0xF8) && (cur [2] != 0) && (cur[3] != 0)) { |
2132 val = (cur[0]) & 0x07; | 2132 val = (cur[0]) & 0x07; |
2133 val <<= 6; | 2133 val <<= 6; |
2134 val |= (cur[1]) & 0x3F; | 2134 val |= (cur[1]) & 0x3F; |
2135 val <<= 6; | 2135 val <<= 6; |
2136 val |= (cur[2]) & 0x3F; | 2136 val |= (cur[2]) & 0x3F; |
2137 val <<= 6; | 2137 val <<= 6; |
2138 val |= (cur[3]) & 0x3F; | 2138 val |= (cur[3]) & 0x3F; |
2139 l = 4; | 2139 l = 4; |
2140 } | 2140 } |
2141 if ((l == 1) || (!IS_CHAR(val))) { | 2141 if ((l == 1) || (!IS_CHAR(val))) { |
(...skipping 637 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2779 */ | 2779 */ |
2780 int | 2780 int |
2781 xmlSaveFile(const char *filename, xmlDocPtr cur) { | 2781 xmlSaveFile(const char *filename, xmlDocPtr cur) { |
2782 return(xmlSaveFormatFileEnc(filename, cur, NULL, 0)); | 2782 return(xmlSaveFormatFileEnc(filename, cur, NULL, 0)); |
2783 } | 2783 } |
2784 | 2784 |
2785 #endif /* LIBXML_OUTPUT_ENABLED */ | 2785 #endif /* LIBXML_OUTPUT_ENABLED */ |
2786 | 2786 |
2787 #define bottom_xmlsave | 2787 #define bottom_xmlsave |
2788 #include "elfgcchack.h" | 2788 #include "elfgcchack.h" |
OLD | NEW |