Release of libxml-1.1, Daniel.
diff --git a/tree.c b/tree.c
index c1e1ebd..617264c 100644
--- a/tree.c
+++ b/tree.c
@@ -478,7 +478,7 @@
while ((*cur != 0) && (cur - value < len) && (*cur != ';')) cur++;
if ((*cur == 0) || (cur - value >= len)) {
fprintf(stderr,
- "xmlStringGetNodeList: unterminated entity %30s\n", q);
+ "xmlStringLenGetNodeList: unterminated entity %30s\n", q);
return(ret);
}
if (cur != q) {
@@ -2292,7 +2292,7 @@
/**
* xmlBufferWriteChar:
- * @buf: the XML buffer
+ * @buf: the XML buffer output
* @string: the string to add
*
* routine which manage and grows an output buffer. This one add
@@ -2305,7 +2305,38 @@
/**
+ * xmlBufferWriteQuotedString:
+ * @buf: the XML buffer output
+ * @string: the string to add
+ *
+ * routine which manage and grows an output buffer. This one writes
+ * a quoted or double quoted CHAR string, checking first if it holds
+ * quote or double-quotes internally
+ */
+void
+xmlBufferWriteQuotedString(xmlBufferPtr buf, const CHAR *string) {
+ /*
+ * TODO: fix strchr by xmlStrchr to work coreectly on UTF-8 !!!
+ */
+ if (strchr(string, '"')) {
+ if (strchr(string, '\'')) {
+ fprintf(stderr,
+ "xmlBufferWriteQuotedString: string contains quote and double-quotes !\n");
+ }
+ xmlBufferCCat(buf, "'");
+ xmlBufferCat(buf, string);
+ xmlBufferCCat(buf, "'");
+ } else {
+ xmlBufferCCat(buf, "\"");
+ xmlBufferCat(buf, string);
+ xmlBufferCCat(buf, "\"");
+ }
+}
+
+
+/**
* xmlGlobalNsDump:
+ * @buf: the XML buffer output
* @cur: a namespace
*
* Dump a global Namespace, this is the old version based on PIs.
@@ -2319,14 +2350,12 @@
if (cur->type == XML_GLOBAL_NAMESPACE) {
xmlBufferWriteChar(buf, "<?namespace");
if (cur->href != NULL) {
- xmlBufferWriteChar(buf, " href=\"");
- xmlBufferWriteCHAR(buf, cur->href);
- xmlBufferWriteChar(buf, "\"");
+ xmlBufferWriteChar(buf, " href=");
+ xmlBufferWriteQuotedString(buf, cur->href);
}
if (cur->prefix != NULL) {
- xmlBufferWriteChar(buf, " AS=\"");
- xmlBufferWriteCHAR(buf, cur->prefix);
- xmlBufferWriteChar(buf, "\"");
+ xmlBufferWriteChar(buf, " AS=");
+ xmlBufferWriteQuotedString(buf, cur->prefix);
}
xmlBufferWriteChar(buf, "?>\n");
}
@@ -2334,6 +2363,7 @@
/**
* xmlGlobalNsListDump:
+ * @buf: the XML buffer output
* @cur: the first namespace
*
* Dump a list of global Namespace, this is the old version based on PIs.
@@ -2348,6 +2378,7 @@
/**
* xmlNsDump:
+ * @buf: the XML buffer output
* @cur: a namespace
*
* Dump a local Namespace definition.
@@ -2366,14 +2397,14 @@
xmlBufferWriteCHAR(buf, cur->prefix);
} else
xmlBufferWriteChar(buf, " xmlns");
- xmlBufferWriteChar(buf, "=\"");
- xmlBufferWriteCHAR(buf, cur->href);
- xmlBufferWriteChar(buf, "\"");
+ xmlBufferWriteChar(buf, "=");
+ xmlBufferWriteQuotedString(buf, cur->href);
}
}
/**
* xmlNsListDump:
+ * @buf: the XML buffer output
* @cur: the first namespace
*
* Dump a list of local Namespace definitions.
@@ -2389,6 +2420,7 @@
/**
* xmlDtdDump:
+ * @buf: the XML buffer output
* @doc: the document
*
* Dump the XML document DTD, if any.
@@ -2404,15 +2436,13 @@
xmlBufferWriteChar(buf, "<!DOCTYPE ");
xmlBufferWriteCHAR(buf, cur->name);
if (cur->ExternalID != NULL) {
- xmlBufferWriteChar(buf, " PUBLIC \"");
- xmlBufferWriteCHAR(buf, cur->ExternalID);
- xmlBufferWriteChar(buf, "\" \"");
- xmlBufferWriteCHAR(buf, cur->SystemID);
- xmlBufferWriteChar(buf, "\"");
+ xmlBufferWriteChar(buf, " PUBLIC ");
+ xmlBufferWriteQuotedString(buf, cur->ExternalID);
+ xmlBufferWriteChar(buf, " ");
+ xmlBufferWriteQuotedString(buf, cur->SystemID);
} else if (cur->SystemID != NULL) {
- xmlBufferWriteChar(buf, " SYSTEM \"");
- xmlBufferWriteCHAR(buf, cur->SystemID);
- xmlBufferWriteChar(buf, "\"");
+ xmlBufferWriteChar(buf, " SYSTEM ");
+ xmlBufferWriteQuotedString(buf, cur->SystemID);
}
if ((cur->entities == NULL) && (cur->elements == NULL) &&
(cur->attributes == NULL) && (cur->notations == NULL)) {
@@ -2436,6 +2466,7 @@
/**
* xmlAttrDump:
+ * @buf: the XML buffer output
* @doc: the document
* @cur: the attribute pointer
*
@@ -2453,9 +2484,8 @@
xmlBufferWriteCHAR(buf, cur->name);
value = xmlNodeListGetString(doc, cur->val, 0);
if (value) {
- xmlBufferWriteChar(buf, "=\"");
- xmlBufferWriteCHAR(buf, value);
- xmlBufferWriteChar(buf, "\"");
+ xmlBufferWriteChar(buf, "=");
+ xmlBufferWriteQuotedString(buf, value);
free(value);
} else {
xmlBufferWriteChar(buf, "=\"\"");
@@ -2464,6 +2494,7 @@
/**
* xmlAttrListDump:
+ * @buf: the XML buffer output
* @doc: the document
* @cur: the first attribute pointer
*
@@ -2486,6 +2517,7 @@
xmlNodeDump(xmlBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur, int level);
/**
* xmlNodeListDump:
+ * @buf: the XML buffer output
* @doc: the document
* @cur: the first node
* @level: the imbrication level for indenting
@@ -2518,6 +2550,7 @@
/**
* xmlNodeDump:
+ * @buf: the XML buffer output
* @doc: the document
* @cur: the current node
* @level: the imbrication level for indenting
@@ -2589,6 +2622,7 @@
/**
* xmlDocContentDump:
+ * @buf: the XML buffer output
* @cur: the document
*
* Dump an XML document.
@@ -2596,15 +2630,13 @@
static void
xmlDocContentDump(xmlBufferPtr buf, xmlDocPtr cur) {
if (oldXMLWDcompatibility)
- xmlBufferWriteChar(buf, "<?XML version=\"");
+ xmlBufferWriteChar(buf, "<?XML version=");
else
- xmlBufferWriteChar(buf, "<?xml version=\"");
- xmlBufferWriteCHAR(buf, cur->version);
- xmlBufferWriteChar(buf, "\"");
+ xmlBufferWriteChar(buf, "<?xml version=");
+ xmlBufferWriteQuotedString(buf, cur->version);
if (cur->encoding != NULL) {
- xmlBufferWriteChar(buf, " encoding=\"");
- xmlBufferWriteCHAR(buf, cur->encoding);
- xmlBufferWriteChar(buf, "\"");
+ xmlBufferWriteChar(buf, " encoding=");
+ xmlBufferWriteQuotedString(buf, cur->encoding);
}
switch (cur->standalone) {
case 0: