diff --git a/ChangeLog b/ChangeLog index 48229e7f..de8177a9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Fri Jan 2 21:03:17 CET 2004 Daniel Veillard + + * include/libxml/xmlwriter.h xmlwriter.c: applied the patch from + Lucas Brasilino to add indentation support to xmlWriter + Fri Jan 2 22:58:29 HKT 2004 William Brack * xinclude.c: fixed problem with "recursive" include (fallback diff --git a/include/libxml/xmlwriter.h b/include/libxml/xmlwriter.h index 5aeafa21..b43b439b 100644 --- a/include/libxml/xmlwriter.h +++ b/include/libxml/xmlwriter.h @@ -405,6 +405,13 @@ XMLPUBFUN int XMLCALL const xmlChar * name, const xmlChar * pubid, const xmlChar * sysid); +/* + * Indentation + */ +XMLPUBFUN int XMLCALL + xmlTextWriterSetIndent (xmlTextWriterPtr writer, int indent); +XMLPUBFUN int XMLCALL + xmlTextWriterSetIndentString (xmlTextWriterPtr writer, xmlChar *str); /* * misc diff --git a/xmlwriter.c b/xmlwriter.c index 6b2fea28..c75af546 100644 --- a/xmlwriter.c +++ b/xmlwriter.c @@ -61,8 +61,9 @@ struct _xmlTextWriter { xmlListPtr nodes; /* element name stack */ xmlListPtr nsstack; /* name spaces stack */ int level; - char indent; /* indent amount */ - char ichar; /* indent character */ + int indent; /* enable indent */ + int doindent; /* internal indent flag */ + xmlChar *ichar; /* indent character */ char qchar; /* character used for quoting attribute values */ }; @@ -83,6 +84,7 @@ static xmlChar *xmlTextWriterVSprintf(const char *format, va_list argptr); static int xmlOutputBufferWriteBase64(xmlOutputBufferPtr out, int len, const unsigned char *data); static void xmlTextWriterStartDocumentCallback(void *ctx); +static int xmlTextWriterWriteIndent (xmlTextWriterPtr writer); /** * xmlNewTextWriter: @@ -129,9 +131,11 @@ xmlNewTextWriter(xmlOutputBufferPtr out) } ret->out = out; - ret->ichar = ' '; + ret->ichar = xmlStrdup (BAD_CAST " "); ret->qchar = '"'; + if (!ret->ichar) return NULL; + return ret; } @@ -165,6 +169,8 @@ xmlNewTextWriterFilename(const char *uri, int compression) return NULL; } + ret->indent = 0; + ret->doindent = 0; return ret; } @@ -542,11 +548,12 @@ xmlTextWriterEndDocument(xmlTextWriterPtr writer) } } + if (!writer->indent) { count = xmlOutputBufferWriteString(writer->out, "\n"); if(count < 0) return -1; sum += count; - + } return sum; } @@ -653,6 +660,11 @@ xmlTextWriterWriteComment(xmlTextWriterPtr writer, const xmlChar * content) } } + if (writer->indent) { + count = xmlOutputBufferWriteString (writer->out, "\n"); + sum += count; + } + count = xmlOutputBufferWriteString(writer->out, "