xmlwriter.c revision 20c5e7878d462bfd93aa4eede7f1f5faabd377fe
15841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 21d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/* 31d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlwriter.c: XML text writer implementation 41d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 51d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * For license and disclaimer see the license and disclaimer of 61d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * libxml2. 71d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 81d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * alfred@mickautsch.de 91d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 11b23de5ad89fbcd0a0a6dcab2053cb8e25fc7aa0fIgor Zlatkovic#define IN_LIBXML 121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard#include <string.h> 131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard#include "libxml.h" 151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard#include <libxml/xmlmemory.h> 161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard#include <libxml/parser.h> 175841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard#include <libxml/uri.h> 185841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard#include <libxml/HTMLtree.h> 191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard#ifdef LIBXML_WRITER_ENABLED 211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard#include <libxml/xmlwriter.h> 231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard#define B64LINELEN 72 251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard#define B64CRLF "\r\n" 261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/* 281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Types are kept private 291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardtypedef enum { 311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard XML_TEXTWRITER_NONE = 0, 321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard XML_TEXTWRITER_NAME, 331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard XML_TEXTWRITER_ATTRIBUTE, 341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard XML_TEXTWRITER_TEXT, 351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard XML_TEXTWRITER_PI, 361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard XML_TEXTWRITER_PI_TEXT, 371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard XML_TEXTWRITER_CDATA, 381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard XML_TEXTWRITER_DTD, 391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard XML_TEXTWRITER_DTD_TEXT, 401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard XML_TEXTWRITER_DTD_ELEM, 411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard XML_TEXTWRITER_DTD_ATTL, 421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard XML_TEXTWRITER_DTD_ENTY 431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} xmlTextWriterState; 441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardtypedef struct _xmlTextWriterStackEntry xmlTextWriterStackEntry; 461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstruct _xmlTextWriterStackEntry { 481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *name; 491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterState state; 501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard}; 511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardtypedef struct _xmlTextWriterNsStackEntry xmlTextWriterNsStackEntry; 531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstruct _xmlTextWriterNsStackEntry { 541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *prefix; 551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *uri; 561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr elem; 571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard}; 581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstruct _xmlTextWriter { 601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlOutputBufferPtr out; /* output buffer */ 611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPtr nodes; /* element name stack */ 621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPtr nsstack; /* name spaces stack */ 631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int level; 642cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard int indent; /* enable indent */ 652cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard int doindent; /* internal indent flag */ 662cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard xmlChar *ichar; /* indent character */ 671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard char qchar; /* character used for quoting attribute values */ 6820c5e7878d462bfd93aa4eede7f1f5faabd377feDaniel Veillard xmlParserCtxtPtr ctxt; 691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard}; 701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic void xmlFreeTextWriterStackEntry(xmlLinkPtr lk); 721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic int xmlCmpTextWriterStackEntry(const void *data0, 731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const void *data1); 741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic void xmlFreeTextWriterNsStackEntry(xmlLinkPtr lk); 751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic int xmlCmpTextWriterNsStackEntry(const void *data0, 761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const void *data1); 771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic int xmlTextWriterWriteMemCallback(void *context, 781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * str, int len); 791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic int xmlTextWriterCloseMemCallback(void *context); 805841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillardstatic int xmlTextWriterWriteDocCallback(void *context, 815841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard const xmlChar * str, int len); 825841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillardstatic int xmlTextWriterCloseDocCallback(void *context); 835841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic xmlChar *xmlTextWriterVSprintf(const char *format, va_list argptr); 851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic int xmlOutputBufferWriteBase64(xmlOutputBufferPtr out, int len, 861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const unsigned char *data); 875841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillardstatic void xmlTextWriterStartDocumentCallback(void *ctx); 882cca446b86a77022d5b847b106544aede7207dbcDaniel Veillardstatic int xmlTextWriterWriteIndent (xmlTextWriterPtr writer); 891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlNewTextWriter: 921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @out: an xmlOutputBufferPtr 931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Create a new xmlNewTextWriter structure using an xmlOutputBufferPtr 951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the new xmlTextWriterPtr or NULL in case of error 971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 981d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterPtr 991d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlNewTextWriter(xmlOutputBufferPtr out) 1001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 1011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterPtr ret; 1021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ret = (xmlTextWriterPtr) xmlMalloc(sizeof(xmlTextWriter)); 1041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (ret == NULL) { 1051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 1061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlNewTextWriter : out of memory!\n"); 1071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return NULL; 1081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 1091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard memset(ret, 0, (size_t) sizeof(xmlTextWriter)); 1101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ret->nodes = xmlListCreate((xmlListDeallocator) 1121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFreeTextWriterStackEntry, 1131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard (xmlListDataCompare) 1141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlCmpTextWriterStackEntry); 1151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (ret->nodes == NULL) { 1161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 1171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlNewTextWriter : out of memory!\n"); 1181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(ret); 1191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return NULL; 1201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 1211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ret->nsstack = xmlListCreate((xmlListDeallocator) 1231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFreeTextWriterNsStackEntry, 1241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard (xmlListDataCompare) 1251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlCmpTextWriterNsStackEntry); 1261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (ret->nsstack == NULL) { 1271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 1281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlNewTextWriter : out of memory!\n"); 1291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(ret->nodes); 1301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(ret); 1311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return NULL; 1321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 1331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ret->out = out; 1352cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard ret->ichar = xmlStrdup (BAD_CAST " "); 1361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ret->qchar = '"'; 1371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1382cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard if (!ret->ichar) return NULL; 1392cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard 1401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return ret; 1411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 1421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 1441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlNewTextWriterFilename: 1451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @uri: the URI of the resource for the output 1461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @compression: compress the output? 1471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 1481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Create a new xmlNewTextWriter structure with @uri as output 1491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 1501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the new xmlTextWriterPtr or NULL in case of error 1511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 1521d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterPtr 1531d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlNewTextWriterFilename(const char *uri, int compression) 1541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 1551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterPtr ret; 1561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlOutputBufferPtr out; 1571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard out = xmlOutputBufferCreateFilename(uri, NULL, compression); 1591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (out == NULL) { 1601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 1611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlNewTextWriterFilename : out of memory!\n"); 1621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return NULL; 1631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 1641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ret = xmlNewTextWriter(out); 1661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (ret == NULL) { 1671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 1681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlNewTextWriterFilename : out of memory!\n"); 1691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlOutputBufferClose(out); 1701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return NULL; 1711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 1721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1732cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard ret->indent = 0; 1742cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard ret->doindent = 0; 1751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return ret; 1761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 1771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 1791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlNewTextWriterMemory: 1801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @buf: xmlBufferPtr 1811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @compression: compress the output? 1821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 1831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Create a new xmlNewTextWriter structure with @buf as output 1841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * TODO: handle compression 1851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 1861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the new xmlTextWriterPtr or NULL in case of error 1871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 1881d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterPtr 1891d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlNewTextWriterMemory(xmlBufferPtr buf, int compression ATTRIBUTE_UNUSED) 1901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 1911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterPtr ret; 1921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlOutputBufferPtr out; 1931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/*::todo handle compression */ 1951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard out = xmlOutputBufferCreateIO((xmlOutputWriteCallback) 1961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterWriteMemCallback, 1971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard (xmlOutputCloseCallback) 1981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterCloseMemCallback, 1991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard (void *) buf, NULL); 2001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (out == NULL) { 2011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 2021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlNewTextWriterMemory : out of memory!\n"); 2031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return NULL; 2041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 2051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 2061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ret = xmlNewTextWriter(out); 2071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (ret == NULL) { 2081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 2091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlNewTextWriterMemory : out of memory!\n"); 2101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlOutputBufferClose(out); 2111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return NULL; 2121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 2131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 2141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return ret; 2151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 2161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 2171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 2185841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlNewTextWriterPushParser: 2195841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @ctxt: xmlParserCtxtPtr to hold the new XML document tree 2205841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @compression: compress the output? 2215841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 2225841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Create a new xmlNewTextWriter structure with @ctxt as output 2235841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * TODO: handle compression 2245841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 2255841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the new xmlTextWriterPtr or NULL in case of error 2265841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 2275841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel VeillardxmlTextWriterPtr 2281d913863130a17a638db69c2c50f89e5b0d4aae4Daniel VeillardxmlNewTextWriterPushParser(xmlParserCtxtPtr ctxt, 2291d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard int compression ATTRIBUTE_UNUSED) 2305841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard{ 2315841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlTextWriterPtr ret; 2325841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlOutputBufferPtr out; 2335841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 2345841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard out = xmlOutputBufferCreateIO((xmlOutputWriteCallback) 2355841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlTextWriterWriteDocCallback, 2365841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard (xmlOutputCloseCallback) 2375841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlTextWriterCloseDocCallback, 2385841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard (void *) ctxt, NULL); 2395841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (out == NULL) { 2405841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlGenericError(xmlGenericErrorContext, 2415841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard "xmlNewTextWriterPushParser : error at xmlOutputBufferCreateIO!\n"); 2425841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return NULL; 2435841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 2445841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 2455841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ret = xmlNewTextWriter(out); 2465841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (ret == NULL) { 2475841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlGenericError(xmlGenericErrorContext, 2485841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard "xmlNewTextWriterPushParser : error at xmlNewTextWriter!\n"); 2495841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlOutputBufferClose(out); 2505841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return NULL; 2515841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 2525841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 25320c5e7878d462bfd93aa4eede7f1f5faabd377feDaniel Veillard ret->ctxt = ctxt; 25420c5e7878d462bfd93aa4eede7f1f5faabd377feDaniel Veillard 2555841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return ret; 2565841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard} 2575841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 2585841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 2595841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlNewTextWriterDoc: 2605841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @doc: address of a xmlDocPtr to hold the new XML document tree 2615841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @compression: compress the output? 2625841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 2635841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Create a new xmlNewTextWriter structure with @*doc as output 2645841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 2655841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the new xmlTextWriterPtr or NULL in case of error 2665841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 2675841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel VeillardxmlTextWriterPtr 2685841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel VeillardxmlNewTextWriterDoc(xmlDocPtr * doc, int compression) 2695841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard{ 2705841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlTextWriterPtr ret; 2715841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlSAXHandler saxHandler; 2725841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlParserCtxtPtr ctxt; 2735841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 2745841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard memset(&saxHandler, '\0', sizeof(saxHandler)); 2755841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlSAX2InitDefaultSAXHandler(&saxHandler, 1); 2765841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard saxHandler.startDocument = xmlTextWriterStartDocumentCallback; 2775841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard saxHandler.startElement = xmlSAX2StartElement; 2785841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard saxHandler.endElement = xmlSAX2EndElement; 2795841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 2805841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt = xmlCreatePushParserCtxt(&saxHandler, NULL, NULL, 0, NULL); 2815841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (ctxt == NULL) { 2825841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlGenericError(xmlGenericErrorContext, 2835841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard "xmlNewTextWriterDoc : error at xmlCreatePushParserCtxt!\n"); 2845841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return NULL; 2855841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 2865841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 2871d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard ctxt->myDoc = xmlNewDoc(BAD_CAST XML_DEFAULT_VERSION); 2885841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (ctxt->myDoc == NULL) { 2895841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlFreeParserCtxt(ctxt); 2905841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlGenericError(xmlGenericErrorContext, 2915841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard "xmlNewTextWriterDoc : error at xmlNewDoc!\n"); 2925841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return NULL; 2935841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 2945841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 2955841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ret = xmlNewTextWriterPushParser(ctxt, compression); 2965841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (ret == NULL) { 2975841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlGenericError(xmlGenericErrorContext, 2985841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard "xmlNewTextWriterDoc : error at xmlNewTextWriterPushParser!\n"); 2995841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return NULL; 3005841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 3015841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 3025841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard *doc = ctxt->myDoc; 3035841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlSetDocCompressMode(*doc, compression); 3045841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 3055841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return ret; 3065841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard} 3075841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 3085841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 3095841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlNewTextWriterTree: 3105841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @doc: xmlDocPtr 3115841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @node: xmlNodePtr or NULL for doc->children 3125841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @compression: compress the output? 3135841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 3145841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Create a new xmlNewTextWriter structure with @doc as output 3155841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * starting at @node 3165841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 3175841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the new xmlTextWriterPtr or NULL in case of error 3185841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 3195841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel VeillardxmlTextWriterPtr 3205841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel VeillardxmlNewTextWriterTree(xmlDocPtr doc, xmlNodePtr node, int compression) 3215841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard{ 3225841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlTextWriterPtr ret; 3235841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlSAXHandler saxHandler; 3245841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlParserCtxtPtr ctxt; 3255841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 3265841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (doc == NULL) { 3275841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return NULL; 3285841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 3295841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 3305841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard memset(&saxHandler, '\0', sizeof(saxHandler)); 3315841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlSAX2InitDefaultSAXHandler(&saxHandler, 1); 3325841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard saxHandler.startDocument = xmlTextWriterStartDocumentCallback; 3335841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard saxHandler.startElement = xmlSAX2StartElement; 3345841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard saxHandler.endElement = xmlSAX2EndElement; 3355841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 3365841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt = xmlCreatePushParserCtxt(&saxHandler, NULL, NULL, 0, NULL); 3375841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (ctxt == NULL) { 3385841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlGenericError(xmlGenericErrorContext, 3395841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard "xmlNewTextWriterDoc : error at xmlCreatePushParserCtxt!\n"); 3405841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return NULL; 3415841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 3425841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 3435841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->myDoc = doc; 3445841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->node = node; 3455841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 3465841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ret = xmlNewTextWriterPushParser(ctxt, compression); 3475841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (ret == NULL) { 3485841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlGenericError(xmlGenericErrorContext, 3495841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard "xmlNewTextWriterDoc : error at xmlNewTextWriterPushParser!\n"); 3505841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return NULL; 3515841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 3525841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 3535841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlSetDocCompressMode(doc, compression); 3545841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 3555841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return ret; 3565841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard} 3575841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 3585841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 3591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlFreeTextWriter: 3601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 3611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 3621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Deallocate all the resources associated to the writer 3631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 3641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardvoid 3651d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlFreeTextWriter(xmlTextWriterPtr writer) 3661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 3671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 3681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return; 3691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 3701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer->out != NULL) 3711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlOutputBufferClose(writer->out); 3721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 3731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer->nodes != NULL) 3741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListDelete(writer->nodes); 3751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 3761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer->nsstack != NULL) 3771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListDelete(writer->nsstack); 3781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37920c5e7878d462bfd93aa4eede7f1f5faabd377feDaniel Veillard if (writer->ctxt != NULL) 38020c5e7878d462bfd93aa4eede7f1f5faabd377feDaniel Veillard xmlFreeParserCtxt(writer->ctxt); 38120c5e7878d462bfd93aa4eede7f1f5faabd377feDaniel Veillard 3821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(writer); 3831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 3841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 3851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 3861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterStartDocument: 3871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 3881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @version: the xml version ("1.0") or NULL for default ("1.0") 3891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @encoding: the encoding or NULL for default 3901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @standalone: "yes" or "no" or NULL for default 3911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 3921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Start a new xml document 3931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 3941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 3951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 3961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 3971d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterStartDocument(xmlTextWriterPtr writer, const char *version, 3981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *encoding, const char *standalone) 3991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 4001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 4011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 4021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 4031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlCharEncodingHandlerPtr encoder; 4041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 4051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if ((writer == NULL) || (writer->out == NULL)) 4061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 4071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 4081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 4091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if ((lk != NULL) && (xmlLinkGetData(lk) != NULL)) { 4101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 4111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartDocument : only one prolog allowed in an XML document!\n"); 4121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 4131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 4141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 4151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard encoder = NULL; 4161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (encoding != NULL) { 4171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard encoder = xmlFindCharEncodingHandler(encoding); 4181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (encoder == NULL) { 4191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 4201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartDocument : out of memory!\n"); 4211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 4221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 4231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 4241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 4251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard writer->out->encoder = encoder; 4261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (encoder != NULL) { 4271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard writer->out->conv = xmlBufferCreateSize(4000); 4281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlCharEncOutFunc(encoder, writer->out->conv, NULL); 4291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } else 4301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard writer->out->conv = NULL; 4311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 4321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 4331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "<?xml version="); 4341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 4351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 4361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 4371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 4381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 4391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 4401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 4411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (version != 0) 4421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, version); 4431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard else 4441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "1.0"); 4451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 4461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 4471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 4481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 4491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 4501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 4511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 4521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer->out->encoder != 0) { 4531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " encoding="); 4541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 4551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 4561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 4571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 4581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 4591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 4601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 4611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = 4621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlOutputBufferWriteString(writer->out, 4631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard writer->out->encoder->name); 4641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 4651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 4661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 4671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 4681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 4691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 4701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 4711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 4721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 4731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (standalone != 0) { 4741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " standalone="); 4751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 4761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 4771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 4781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 4791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 4801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 4811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 4821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, standalone); 4831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 4841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 4851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 4861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 4871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 4881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 4891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 4901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 4911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 4921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "?>\n"); 4931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 4941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 4951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 4961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 4971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 4981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 4991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 5001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 5011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterEndDocument: 5021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 5031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 5041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * End an xml document. All open elements are closed 5051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 5061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 5071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 5081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 5091d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterEndDocument(xmlTextWriterPtr writer) 5101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 5111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 5121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 5131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 5141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 5151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 5161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 5171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 5181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 5191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 5201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard while ((lk = xmlListFront(writer->nodes)) != NULL) { 5211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 5221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) 5231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 5241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 5251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NAME: 5261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_ATTRIBUTE: 5271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_TEXT: 5281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndElement(writer); 5291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 5301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 5311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 5321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 5331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI: 5341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI_TEXT: 5351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndPI(writer); 5361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 5371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 5381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 5391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 5401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_CDATA: 5411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndCDATA(writer); 5421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 5431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 5441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 5451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 5461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD: 5471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndDTD(writer); 5481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 5491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 5501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 5511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 5521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 5531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 5541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 5551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 5561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 5572cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard if (!writer->indent) { 5585841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "\n"); 5595841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if(count < 0) 5605841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return -1; 5615841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard sum += count; 5622cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard } 5631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 5641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 5651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 5661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 5671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteFormatComment: 5681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 5691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 5701d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard * @...: extra parameters for the format 5711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 5721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write an xml comment. 5731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 5741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 5751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 5761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 5771d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteFormatComment(xmlTextWriterPtr writer, 5781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, ...) 5791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 5801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 5811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list ap; 5821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 5831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_start(ap, format); 5841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 5851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteVFormatComment(writer, format, ap); 5861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 5871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_end(ap); 5881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 5891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 5901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 5911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 5921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteVFormatComment: 5931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 5941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 5951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 5961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 5971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write an xml comment. 5981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 5991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 6001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 6011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 6021d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteVFormatComment(xmlTextWriterPtr writer, 6031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, va_list argptr) 6041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 6051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 6061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 6071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 6081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 6091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 6101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 6111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlTextWriterVSprintf(format, argptr); 6121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == 0) 6131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 6141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 6151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteComment(writer, buf); 6161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 6171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 6181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 6191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 6201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 6211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 6221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteComment: 6231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 6241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @content: comment string 6251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 6261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write an xml comment. 6271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 6281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 6291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 6301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 6311d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteComment(xmlTextWriterPtr writer, const xmlChar * content) 6321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 6331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 6341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 6351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 6361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 6371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 6381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if ((writer == NULL) || (writer->out == NULL)) 6391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 6401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 6411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (content == NULL) 6421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 6431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 6441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 6451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 6461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk != 0) { 6471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 6481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p != 0) { 6491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 6501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI: 6511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI_TEXT: 6521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 6531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NONE: 6541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_TEXT: 6551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 6561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NAME: 6571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, ">"); 6581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 6591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 6601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 6611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_TEXT; 6621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 6631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 6641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 6651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 6661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 6671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 6681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 6692cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard if (writer->indent) { 6702cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard count = xmlOutputBufferWriteString (writer->out, "\n"); 6712cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard sum += count; 6722cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard } 6732cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard 6741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "<!--"); 6751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 6761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 6771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 6785841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard count = xmlOutputBufferWriteString(writer->out, 6795841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard (const char *) content); 6801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 6811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 6821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 6831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "-->"); 6841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 6851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 6861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 6871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 6882cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard if (writer->indent) { 6892cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard count = xmlOutputBufferWriteString (writer->out, "\n"); 6902cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard sum += count; 6912cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard } 6922cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard 6931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 6941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 6951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 6961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 6971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterStartElement: 6981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 6991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: element name 7001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 7011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Start an xml element. 7021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 7031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 7041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 7051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 7061d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterStartElement(xmlTextWriterPtr writer, const xmlChar * name) 7071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 7081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 7091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 7101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 7111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 7121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 7131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if ((writer == NULL) || (name == NULL) || (*name == '\0')) 7141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 7151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 7161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 7171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 7181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk != 0) { 7191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 7201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p != 0) { 7211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 7221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI: 7231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI_TEXT: 7241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 7251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NONE: 7261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 7271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NAME: 7281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, ">"); 7291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 7301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 7311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 7322cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard if (writer->indent) 7332cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard count = xmlOutputBufferWriteString (writer->out, "\n"); 7341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_TEXT; 7351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 7361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 7371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 7381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 7391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 7401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 7411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 7421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) 7431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlMalloc(sizeof(xmlTextWriterStackEntry)); 7441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) { 7451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 7461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartElement : out of memory!\n"); 7471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 7481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 7491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 7501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->name = xmlStrdup(name); 7511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p->name == 0) { 7521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 7531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartElement : out of memory!\n"); 7541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(p); 7551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 7561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 7571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_NAME; 7581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 7591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPushFront(writer->nodes, p); 7601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 7612cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard if (writer->indent) { 7622cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard count = xmlTextWriterWriteIndent (writer); 7632cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard sum += count; 7642cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard } 7652cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard 7661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "<"); 7671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 7681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 7691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 7705841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard count = 7715841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlOutputBufferWriteString(writer->out, (const char *) p->name); 7721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 7731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 7741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 7751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 7761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 7771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 7781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 7791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 7801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterStartElementNS: 7811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 7821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @prefix: namespace prefix or NULL 7831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: element local name 7841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @namespaceURI: namespace URI or NULL 7851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 7861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Start an xml element with namespace support. 7871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 7881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 7891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 7901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 7911d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterStartElementNS(xmlTextWriterPtr writer, 7921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * prefix, const xmlChar * name, 7931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * namespaceURI) 7941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 7951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 7961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 7971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 7981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 7991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if ((writer == NULL) || (name == NULL) || (*name == '\0')) 8001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 8011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 8021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = 0; 8031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (prefix != 0) { 8041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrdup(prefix); 8051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrcat(buf, BAD_CAST ":"); 8061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 8071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrcat(buf, name); 8081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 8091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 8101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterStartElement(writer, buf); 8111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 8121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 8131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 8141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 8151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 8161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (namespaceURI != 0) { 8171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrdup(BAD_CAST "xmlns"); 8181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (prefix != 0) { 8191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrcat(buf, BAD_CAST ":"); 8201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrcat(buf, prefix); 8211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 8221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 8231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteAttribute(writer, buf, namespaceURI); 8241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 8251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 8261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 8271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 8281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 8291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 8301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 8311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 8321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 8331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 8341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterEndElement: 8351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 8361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 8371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * End the current xml element. 8381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 8391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 8401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 8411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 8421d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterEndElement(xmlTextWriterPtr writer) 8431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 8441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 8451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 8461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 8471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 8481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 8491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 8501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 8511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 8521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 8531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk == 0) 8541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 8551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 8561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 8571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) 8581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 8591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 8601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 8611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 8621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_ATTRIBUTE: 8631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndAttribute(writer); 8641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 8651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 8661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 8671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard /* fallthrough */ 8681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NAME: 8691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "/>"); 8701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 8711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 8721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 8731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 8741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_TEXT: 8752cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard if ((writer->indent) && (writer->doindent)) { 8762cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard count = xmlTextWriterWriteIndent (writer); 8772cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard sum += count; 8782cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard writer->doindent = 1; 8792cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard } else writer->doindent = 1; 8801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "</"); 8811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 8821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 8831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 8841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, 8851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard (const char *)p->name); 8861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 8871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 8881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 8891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, ">"); 8901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 8911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 8921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 8931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 8941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 8951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 8961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 8971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 8982cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard if (writer->indent) { 8992cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard count = xmlOutputBufferWriteString (writer->out, "\n"); 9002cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard sum += count; 9012cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard } 9022cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard 9031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPopFront(writer->nodes); 9041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 9051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 9061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 9071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 9081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterFullEndElement: 9091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 9101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 9111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * End the current xml element. Writes an end tag even if the element is empty 9121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 9131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 9141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 9151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 9161d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterFullEndElement(xmlTextWriterPtr writer) 9171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 9181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 9191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 9201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 9211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 9221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 9231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 9241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 9251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 9261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 9271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk == 0) 9281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 9291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 9301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 9311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) 9321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 9331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 9341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 9351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 9361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_ATTRIBUTE: 9371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndAttribute(writer); 9381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 9391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 9401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 9411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard /* fallthrough */ 9421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NAME: 9431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, ">"); 9441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 9451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 9461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 9471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard /* fallthrough */ 9481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_TEXT: 9491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "</"); 9501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 9511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 9521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 9531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, 9541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard (const char *) p->name); 9551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 9561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 9571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 9581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, ">"); 9591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 9601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 9611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 9621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 9631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 9641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 9651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 9661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 9671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPopFront(writer->nodes); 9681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 9691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 9701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 9711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 9721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteFormatRaw: 9731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 9741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 9751d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard * @...: extra parameters for the format 9761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 9771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted raw xml text. 9781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 9791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 9801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 9811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 9821d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteFormatRaw(xmlTextWriterPtr writer, const char *format, 9831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ...) 9841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 9851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 9861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list ap; 9871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 9881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_start(ap, format); 9891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 9901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteVFormatRaw(writer, format, ap); 9911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 9921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_end(ap); 9931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 9941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 9951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 9961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 9971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteVFormatRaw: 9981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 9991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 10001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 10011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 10021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted raw xml text. 10031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 10041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 10051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 10061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 10071d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteVFormatRaw(xmlTextWriterPtr writer, const char *format, 10081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list argptr) 10091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 10101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 10111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 10121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 10131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 10141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 10151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 10161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlTextWriterVSprintf(format, argptr); 10171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == 0) 10181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 10191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 10201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteRaw(writer, buf); 10211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 10221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 10231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 10241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 10251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 10261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 10271e90661bb817402f85103c3b9d3ce6ebab570f38Daniel Veillard * xmlTextWriterWriteRawLen: 10281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 10291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @content: text string 10301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @len: length of the text string 10311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 10321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write an xml text. 10331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * TODO: what about entities and special chars?? 10341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 10351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 10361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 10371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 10381d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteRawLen(xmlTextWriterPtr writer, const xmlChar * content, 10391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int len) 10401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 10411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 10421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 10431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 10441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 10451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 10461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 10471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 10481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 10491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 10501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk == 0) 10511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 10521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 10531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 10541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) 10551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 10561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 10571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 10581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 10591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NONE: 10601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 10611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NAME: 10621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, ">"); 10631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 10641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 10651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 10661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_TEXT; 10671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 10681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI: 10691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " "); 10701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 10711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 10721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 10731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_PI_TEXT; 10741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 10751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD: 10761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " ["); 10771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 10781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 10791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 10801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_DTD_TEXT; 10811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 10821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 10831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 10841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 10851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 10861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, len, (const char *) content); 10871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 10881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 10891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 10901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 10911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 10921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 10931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 10941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 10951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteRaw: 10961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 10971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @content: text string 10981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 10991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a raw xml text. 11001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 11011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 11021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 11031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 11041d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteRaw(xmlTextWriterPtr writer, const xmlChar * content) 11051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 11061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return xmlTextWriterWriteRawLen(writer, content, xmlStrlen(content)); 11071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 11081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 11091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 11101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteFormatString: 11111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 11121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 11131d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard * @...: extra parameters for the format 11141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 11151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted xml text. 11161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 11171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 11181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 11191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 11201d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteFormatString(xmlTextWriterPtr writer, const char *format, 11211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ...) 11221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 11231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 11241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list ap; 11251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 11261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_start(ap, format); 11271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 11281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteVFormatString(writer, format, ap); 11291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 11301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_end(ap); 11311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 11321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 11331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 11341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 11351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteVFormatString: 11361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 11371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 11381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 11391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 11401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted xml text. 11411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 11421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 11431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 11441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 11451d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteVFormatString(xmlTextWriterPtr writer, 11461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, va_list argptr) 11471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 11481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 11491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 11501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 11511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 11521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 11531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 11541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlTextWriterVSprintf(format, argptr); 11551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == 0) 11561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 11571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 11581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteString(writer, buf); 11591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 11601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 11611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 11621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 11631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 11641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 11651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteString: 11661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 11671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @content: text string 11681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 11691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write an xml text. 11701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 11711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 11721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 11731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 11741d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteString(xmlTextWriterPtr writer, const xmlChar * content) 11751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 11761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 11771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 11781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 11791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 11801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf = NULL; 11811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 11821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 11831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 11841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 11851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 11861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk == 0) 11871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 11881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 11891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 11901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) 11911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 11921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 11931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 11941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 11951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NONE: 11961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 11971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NAME: 11981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, ">"); 11991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 12001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 12011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 12021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_TEXT; 12031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard goto encode; 12041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI: 12051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " "); 12061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 12071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 12081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 12091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_PI_TEXT; 12101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard /* fallthrough */ 12111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI_TEXT: 12121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_TEXT: 12131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_ATTRIBUTE: 12141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard encode: 12155841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard buf = xmlEncodeSpecialChars(NULL, content); 12161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 12171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD: 12181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " ["); 12191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 12201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 12211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 12221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_DTD_TEXT; 12231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard /* fallthrough */ 12241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD_TEXT: 12251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD_ELEM: 12261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_CDATA: 12271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrdup(content); 12281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 12291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 12301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 12311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 12321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1233751c9ec657e784bd941802d722632f19f17f17aeDaniel Veillard if (writer->indent) 1234751c9ec657e784bd941802d722632f19f17f17aeDaniel Veillard writer->doindent = 0; 1235751c9ec657e784bd941802d722632f19f17f17aeDaniel Veillard 12361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf != 0) { 12375841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard count = 12385841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlOutputBufferWriteString(writer->out, (const char *) buf); 12391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 12401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } else 12411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = -1; 12421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 12431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 12441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 12451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 12461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 12471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 12481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 12491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 12501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlOutputBufferWriteBase64: 12511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @out: the xmlOutputBufferPtr 12521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @data: binary data 12531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @len: the number of bytes to encode 12541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 12551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write base64 encoded data to an xmlOutputBuffer. 12561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Adapted from John Walker's base64.c (http://www.fourmilab.ch/). 12571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 12581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 12591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 12601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic int 12611d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlOutputBufferWriteBase64(xmlOutputBufferPtr out, int len, 12621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const unsigned char *data) 12631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 12641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard static unsigned char dtable[64] = 12651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; 12661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int i; 12671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int linelen; 12681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 12691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 12701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 12711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard linelen = 0; 12721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 12731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 12741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard i = 0; 12751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard while (1) { 12761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard unsigned char igroup[3]; 12771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard unsigned char ogroup[4]; 12781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int c; 12791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int n; 12801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 12811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard igroup[0] = igroup[1] = igroup[2] = 0; 12821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard for (n = 0; n < 3 && i < len; n++, i++) { 12831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard c = data[i]; 12841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard igroup[n] = (unsigned char) c; 12851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 12861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 12871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (n > 0) { 12881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ogroup[0] = dtable[igroup[0] >> 2]; 12891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ogroup[1] = dtable[((igroup[0] & 3) << 4) | (igroup[1] >> 4)]; 12901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ogroup[2] = 12911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard dtable[((igroup[1] & 0xF) << 2) | (igroup[2] >> 6)]; 12921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ogroup[3] = dtable[igroup[2] & 0x3F]; 12931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 12941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (n < 3) { 12951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ogroup[3] = '='; 12961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (n < 2) { 12971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ogroup[2] = '='; 12981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 12991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 13001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 13011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (linelen >= B64LINELEN) { 13021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(out, 2, B64CRLF); 13031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 13041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 13051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 13061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard linelen = 0; 13071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 13081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(out, 4, (const char *) ogroup); 13091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 13101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 13111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 13121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 13131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard linelen += 4; 13141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 1315929714b707a2d793cd78b033bfacb56fbaea3e36Daniel Veillard 1316929714b707a2d793cd78b033bfacb56fbaea3e36Daniel Veillard if (i >= len) 1317929714b707a2d793cd78b033bfacb56fbaea3e36Daniel Veillard break; 13181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 13191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 13201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(out, 2, B64CRLF); 13211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 13221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 13231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 13241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 13251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 13261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 13271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 13281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 13291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteBase64: 13301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 13311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @data: binary data 13321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @start: the position within the data of the first byte to encode 13331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @len: the number of bytes to encode 13341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 13351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write an base64 encoded xml text. 13361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 13371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 13381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 13391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 13401d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteBase64(xmlTextWriterPtr writer, const char * data, 13411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int start, int len) 13421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 13431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 13441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 13451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 13461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 13471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 13481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 13491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 13501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 13511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 13521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk == 0) 13531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 13541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 13551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 13561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) 13571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 13581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 13591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 13601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 13611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NONE: 13621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 13631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NAME: 13641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, ">"); 13651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 13661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 13671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 13681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_TEXT; 13691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 13701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI: 13711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " "); 13721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 13731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 13741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 13751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_PI_TEXT; 13761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 13771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD: 13781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " ["); 13791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 13801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 13811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 13821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_DTD_TEXT; 13831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 13841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 13851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 13861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 13871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 13881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = 13891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlOutputBufferWriteBase64(writer->out, len, 13901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard (unsigned char *) data + start); 13911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 13921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 13931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 13941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 13951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 13961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 13971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 13981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 13991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlOutputBufferWriteBinHex: 14001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @out: the xmlOutputBufferPtr 14011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @data: binary data 14021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @len: the number of bytes to encode 14031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 14041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write hqx encoded data to an xmlOutputBuffer. 14051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * ::todo 14061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 14071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 14081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 14091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic int 14101d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlOutputBufferWriteBinHex(xmlOutputBufferPtr out ATTRIBUTE_UNUSED, 14111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int len ATTRIBUTE_UNUSED, 14121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const unsigned char *data ATTRIBUTE_UNUSED) 14131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 14141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 14151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 14161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 14171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 14181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteBinHex: 14191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 14201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @data: binary data 14211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @start: the position within the data of the first byte to encode 14221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @len: the number of bytes to encode 14231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 14241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a BinHex encoded xml text. 14251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 14261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 14271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 14281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 14291d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteBinHex(xmlTextWriterPtr writer, const char * data, 14301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int start, int len) 14311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 14321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 14331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 14341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 14351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 14361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 14371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 14381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 14391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 14401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 14411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk == 0) 14421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 14431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 14441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 14451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) 14461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 14471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 14481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 14491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 14501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NONE: 14511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 14521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NAME: 14531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, ">"); 14541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 14551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 14561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 14571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_TEXT; 14581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 14591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI: 14601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " "); 14611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 14621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 14631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 14641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_PI_TEXT; 14651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 14661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD: 14671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " ["); 14681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 14691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 14701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 14711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_DTD_TEXT; 14721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 14731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 14741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 14751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 14761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 14771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = 14781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlOutputBufferWriteBinHex(writer->out, len, 14791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard (unsigned char *) data + start); 14801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 14811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 14821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 14831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 14841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 14851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 14861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 14871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 14881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterStartAttribute: 14891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 14901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: element name 14911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 14921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Start an xml attribute. 14931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 14941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 14951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 14961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 14971d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterStartAttribute(xmlTextWriterPtr writer, const xmlChar * name) 14981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 14991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 15001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 15011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 15021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 15031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 15041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if ((writer == NULL) || (name == NULL) || (*name == '\0')) 15051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 15061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 15071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 15081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 15091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk == 0) 15101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 15111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 15121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 15131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) 15141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 15151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 15161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 15171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_ATTRIBUTE: 15181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndAttribute(writer); 15191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 15201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 15211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 15221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard /* fallthrough */ 15231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NAME: 15241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " "); 15251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 15261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 15271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 15285841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard count = 15295841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlOutputBufferWriteString(writer->out, 15305841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard (const char *) name); 15311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 15321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 15331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 15341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "="); 15351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 15361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 15371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 15381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 15391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 15401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 15411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 15421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_ATTRIBUTE; 15431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 15441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 15451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 15461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 15471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 15481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 15491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 15501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 15511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 15521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterStartAttributeNS: 15531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 15541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @prefix: namespace prefix or NULL 15551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: element local name 15561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @namespaceURI: namespace URI or NULL 15571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 15581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Start an xml attribute with namespace support. 15591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 15601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 15611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 15621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 15631d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterStartAttributeNS(xmlTextWriterPtr writer, 15641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * prefix, const xmlChar * name, 15651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * namespaceURI) 15661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 15671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 15681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 15691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 15701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterNsStackEntry *p; 15711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 15721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if ((writer == NULL) || (name == NULL) || (*name == '\0')) 15731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 15741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 15751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = 0; 15761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (prefix != 0) { 15771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrdup(prefix); 15781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrcat(buf, BAD_CAST ":"); 15791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 15801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrcat(buf, name); 15811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 15821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 15831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterStartAttribute(writer, buf); 15841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 15851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 15861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 15871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 15881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 15891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (namespaceURI != 0) { 15901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrdup(BAD_CAST "xmlns"); 15911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (prefix != 0) { 15921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrcat(buf, BAD_CAST ":"); 15931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrcat(buf, prefix); 15941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 15951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 15961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterNsStackEntry *) 15971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlMalloc(sizeof(xmlTextWriterNsStackEntry)); 15981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) { 15991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 16001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartAttributeNS : out of memory!\n"); 16011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 16021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 16031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 16041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->prefix = buf; 16051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->uri = xmlStrdup(namespaceURI); 16061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p->uri == 0) { 16071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 16081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartAttributeNS : out of memory!\n"); 16091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(p); 16101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 16111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 16121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->elem = xmlListFront(writer->nodes); 16131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 16141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPushFront(writer->nsstack, p); 16151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 16161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 16171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 16181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 16191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 16201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 16211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterEndAttribute: 16221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 16231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 16241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * End the current xml element. 16251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 16261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 16271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 16281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 16291d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterEndAttribute(xmlTextWriterPtr writer) 16301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 16311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 16321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 16331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 16341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 16351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterNsStackEntry *np; 16361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 16371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 16381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 16391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 16401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 16411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk == 0) { 16421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListDelete(writer->nsstack); 16431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 16441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 16451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 16461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 16471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) { 16481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListDelete(writer->nsstack); 16491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 16501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 16511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 16521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 16531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 16541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_ATTRIBUTE: 16551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_NAME; 16561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 16571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 16581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) { 16591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListDelete(writer->nsstack); 16601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 16611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 16621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 16631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 16641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard while (!xmlListEmpty(writer->nsstack)) { 16651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nsstack); 16661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard np = (xmlTextWriterNsStackEntry *) xmlLinkGetData(lk); 16671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (np != 0) { 16681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = 16691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterWriteAttribute(writer, np->prefix, 16701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard np->uri); 16711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) { 16721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListDelete(writer->nsstack); 16731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 16741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 16751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 16761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 16771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 16781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPopFront(writer->nsstack); 16791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 16801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 16811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 16821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 16831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListClear(writer->nsstack); 16841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 16851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 16861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 16871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 16881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 16891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 16901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 16911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteFormatAttribute: 16921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 16931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: attribute name 16941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 16951d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard * @...: extra parameters for the format 16961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 16971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted xml attribute. 16981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 16991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 17001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 17011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 17021d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteFormatAttribute(xmlTextWriterPtr writer, 17031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, const char *format, 17041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ...) 17051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 17061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 17071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list ap; 17081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 17091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_start(ap, format); 17101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 17111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteVFormatAttribute(writer, name, format, ap); 17121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 17131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_end(ap); 17141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 17151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 17161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 17171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 17181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteVFormatAttribute: 17191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 17201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: attribute name 17211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 17221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 17231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 17241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted xml attribute. 17251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 17261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 17271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 17281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 17291d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteVFormatAttribute(xmlTextWriterPtr writer, 17301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 17311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, va_list argptr) 17321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 17331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 17341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 17351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 17361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 17371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 17381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 17391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlTextWriterVSprintf(format, argptr); 17401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == 0) 17411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 17421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 17431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteAttribute(writer, name, buf); 17441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 17451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 17461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 17471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 17481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 17491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 17501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteAttribute: 17511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 17521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: attribute name 17531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @content: attribute content 17541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 17551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write an xml attribute. 17561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 17571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 17581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 17591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 17601d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteAttribute(xmlTextWriterPtr writer, const xmlChar * name, 17611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * content) 17621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 17631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 17641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 17651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 17661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 17671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterStartAttribute(writer, name); 17681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 17691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 17701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 17711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteString(writer, content); 17721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 17731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 17741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 17751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndAttribute(writer); 17761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 17771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 17781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 17791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 17801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 17811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 17821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 17831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 17841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteFormatAttributeNS: 17851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 17861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @prefix: namespace prefix 17871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: attribute local name 17881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @namespaceURI: namespace URI 17891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 17901d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard * @...: extra parameters for the format 17911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 17921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted xml attribute.with namespace support 17931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 17941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 17951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 17961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 17971d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteFormatAttributeNS(xmlTextWriterPtr writer, 17981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * prefix, 17991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 18001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * namespaceURI, 18011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, ...) 18021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 18031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 18041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list ap; 18051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_start(ap, format); 18071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteVFormatAttributeNS(writer, prefix, name, 18091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard namespaceURI, format, ap); 18101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_end(ap); 18121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 18131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 18141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 18161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteVFormatAttributeNS: 18171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 18181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @prefix: namespace prefix 18191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: attribute local name 18201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @namespaceURI: namespace URI 18211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 18221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 18231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 18241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted xml attribute.with namespace support 18251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 18261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 18271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 18281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 18291d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteVFormatAttributeNS(xmlTextWriterPtr writer, 18301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * prefix, 18311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 18321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * namespaceURI, 18331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, va_list argptr) 18341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 18351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 18361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 18371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 18391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 18401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlTextWriterVSprintf(format, argptr); 18421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == 0) 18431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 18441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteAttributeNS(writer, prefix, name, namespaceURI, 18461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf); 18471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 18491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 18501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 18511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 18531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteAttributeNS: 18541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 18551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @prefix: namespace prefix 18561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: attribute local name 18571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @namespaceURI: namespace URI 18581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @content: attribute content 18591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 18601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write an xml attribute. 18611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 18621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 18631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 18641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 18651d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteAttributeNS(xmlTextWriterPtr writer, 18661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * prefix, const xmlChar * name, 18671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * namespaceURI, 18681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * content) 18691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 18701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 18711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 18721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 18731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if ((writer == NULL) || (name == NULL) || (*name == '\0')) 18751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 18761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = 0; 18781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (prefix != NULL) { 18791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrdup(prefix); 18801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrcat(buf, BAD_CAST ":"); 18811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 18821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrcat(buf, name); 18831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 18851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteAttribute(writer, buf, content); 18861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 18871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 18881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 18891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 18901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (namespaceURI != NULL) { 18921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = 0; 18931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrdup(BAD_CAST "xmlns"); 18941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (prefix != NULL) { 18951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrcat(buf, BAD_CAST ":"); 18961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrcat(buf, prefix); 18971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 18981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteAttribute(writer, buf, namespaceURI); 18991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 19001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 19011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 19021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 19031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 19041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 19051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 19061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 19071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 19081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteFormatElement: 19091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 19101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: element name 19111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 19121d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard * @...: extra parameters for the format 19131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 19141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted xml element. 19151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 19161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 19171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 19181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 19191d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteFormatElement(xmlTextWriterPtr writer, 19201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, const char *format, 19211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ...) 19221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 19231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 19241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list ap; 19251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 19261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_start(ap, format); 19271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 19281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteVFormatElement(writer, name, format, ap); 19291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 19301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_end(ap); 19311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 19321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 19331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 19341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 19351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteVFormatElement: 19361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 19371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: element name 19381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 19391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 19401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 19411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted xml element. 19421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 19431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 19441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 19451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 19461d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteVFormatElement(xmlTextWriterPtr writer, 19471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, const char *format, 19481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list argptr) 19491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 19501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 19511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 19521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 19531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 19541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 19551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 19561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlTextWriterVSprintf(format, argptr); 19571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == 0) 19581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 19591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 19601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteElement(writer, name, buf); 19611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 19621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 19631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 19641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 19651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 19661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 19671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteElement: 19681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 19691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: element name 19701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @content: element content 19711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 19721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write an xml element. 19731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 19741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 19751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 19761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 19771d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteElement(xmlTextWriterPtr writer, const xmlChar * name, 19781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * content) 19791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 19801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 19811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 19821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 19831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 19841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterStartElement(writer, name); 19851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 19861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 19871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 19881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteString(writer, content); 19891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 19901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 19911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 19921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndElement(writer); 19931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 19941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 19951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 19961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 19971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 19981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 19991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 20001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 20011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteFormatElementNS: 20021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 20031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @prefix: namespace prefix 20041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: element local name 20051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @namespaceURI: namespace URI 20061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 20071d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard * @...: extra parameters for the format 20081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 20091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted xml element with namespace support. 20101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 20111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 20121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 20131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 20141d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteFormatElementNS(xmlTextWriterPtr writer, 20151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * prefix, 20161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 20171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * namespaceURI, 20181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, ...) 20191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 20201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 20211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list ap; 20221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 20231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_start(ap, format); 20241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 20251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteVFormatElementNS(writer, prefix, name, 20261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard namespaceURI, format, ap); 20271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 20281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_end(ap); 20291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 20301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 20311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 20321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 20331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteVFormatElementNS: 20341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 20351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @prefix: namespace prefix 20361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: element local name 20371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @namespaceURI: namespace URI 20381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 20391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 20401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 20411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted xml element with namespace support. 20421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 20431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 20441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 20451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 20461d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteVFormatElementNS(xmlTextWriterPtr writer, 20471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * prefix, 20481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 20491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * namespaceURI, 20501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, va_list argptr) 20511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 20521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 20531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 20541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 20551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 20561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 20571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 20581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlTextWriterVSprintf(format, argptr); 20591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == 0) 20601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 20611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 20621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteElementNS(writer, prefix, name, namespaceURI, 20631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf); 20641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 20651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 20661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 20671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 20681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 20691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 20701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteElementNS: 20711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 20721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @prefix: namespace prefix 20731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: element local name 20741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @namespaceURI: namespace URI 20751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @content: element content 20761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 20771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write an xml element with namespace support. 20781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 20791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 20801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 20811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 20821d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteElementNS(xmlTextWriterPtr writer, 20831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * prefix, const xmlChar * name, 20841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * namespaceURI, 20851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * content) 20861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 20871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 20881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 20891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 20901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if ((writer == NULL) || (name == NULL) || (*name == '\0')) 20911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 20921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 20931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 20941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = 20951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStartElementNS(writer, prefix, name, namespaceURI); 20961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 20971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 20981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 20991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteString(writer, content); 21001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 21011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 21021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 21031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndElement(writer); 21041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 21051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 21061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 21071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 21081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 21091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 21101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 21111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 21121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterStartPI: 21131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 21141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @target: PI target 21151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 21161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Start an xml PI. 21171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 21181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 21191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 21201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 21211d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterStartPI(xmlTextWriterPtr writer, const xmlChar * target) 21221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 21231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 21241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 21251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 21261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 21271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 21281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if ((writer == NULL) || (target == NULL) || (*target == '\0')) 21291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 21301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 21311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (xmlStrcasecmp(target, (const xmlChar *) "xml") == 0) { 21321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 21331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartPI : target name [Xx][Mm][Ll] is reserved for xml standardization!\n"); 21341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 21351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 21361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 21371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 21381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 21391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk != 0) { 21401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 21411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p != 0) { 21421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 21431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_ATTRIBUTE: 21441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndAttribute(writer); 21451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 21461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 21471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 21481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard /* fallthrough */ 21491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NAME: 21501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, ">"); 21511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 21521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 21531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 21541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_TEXT; 21551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 215610c08c7d064d24eb9f4c25301f3743dce7186529Daniel Veillard case XML_TEXTWRITER_NONE: 215710c08c7d064d24eb9f4c25301f3743dce7186529Daniel Veillard case XML_TEXTWRITER_TEXT: 215810c08c7d064d24eb9f4c25301f3743dce7186529Daniel Veillard case XML_TEXTWRITER_DTD: 215910c08c7d064d24eb9f4c25301f3743dce7186529Daniel Veillard break; 21601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI: 21611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI_TEXT: 21621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 21631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartPI : nested PI!\n"); 21641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 21651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 21661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 21671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 21681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 21691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 21701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 21711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) 21721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlMalloc(sizeof(xmlTextWriterStackEntry)); 21731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) { 21741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 21751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartPI : out of memory!\n"); 21761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 21771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 21781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 21791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->name = xmlStrdup(target); 21801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p->name == 0) { 21811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 21821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartPI : out of memory!\n"); 21831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(p); 21841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 21851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 21861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_PI; 21871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 21881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPushFront(writer->nodes, p); 21891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 21901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "<?"); 21911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 21921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 21931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 21945841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard count = 21955841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlOutputBufferWriteString(writer->out, (const char *) p->name); 21961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 21971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 21981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 21991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 22001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 22011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 22021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 22031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 22041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterEndPI: 22051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 22061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 22071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * End the current xml PI. 22081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 22091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 22101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 22111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 22121d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterEndPI(xmlTextWriterPtr writer) 22131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 22141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 22151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 22161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 22171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 22181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 22191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 22201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 22211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 22221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 22231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk == 0) 22241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 22251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 22261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 22271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) 22281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 22291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 22301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 22311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 22321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI: 22331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI_TEXT: 22341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "?>"); 22351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 22361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 22371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 22381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 22391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 22401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 22411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 22421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 22431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPopFront(writer->nodes); 22441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 22451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 22461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 22471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 22481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteFormatPI: 22491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 22501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @target: PI target 22511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 22521d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard * @...: extra parameters for the format 22531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 22541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted PI. 22551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 22561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 22571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 22581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 22591d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteFormatPI(xmlTextWriterPtr writer, const xmlChar * target, 22601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, ...) 22611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 22621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 22631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list ap; 22641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 22651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_start(ap, format); 22661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 22671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteVFormatPI(writer, target, format, ap); 22681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 22691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_end(ap); 22701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 22711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 22721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 22731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 22741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteVFormatPI: 22751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 22761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @target: PI target 22771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 22785841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 22791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 22801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted xml PI. 22811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 22821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 22831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 22841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 22851d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteVFormatPI(xmlTextWriterPtr writer, 22861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * target, const char *format, 22871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list argptr) 22881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 22891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 22901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 22911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 22921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 22931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 22941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 22951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlTextWriterVSprintf(format, argptr); 22961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == 0) 22971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 22981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 22991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWritePI(writer, target, buf); 23001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 23011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 23021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 23031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 23041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 23051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 23061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWritePI: 23071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 23081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @target: PI target 23091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @content: PI content 23101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 23111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write an xml PI. 23121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 23131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 23141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 23151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 23161d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWritePI(xmlTextWriterPtr writer, const xmlChar * target, 23171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * content) 23181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 23191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 23201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 23211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 23221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 23231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterStartPI(writer, target); 23241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 23251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 23261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 23271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (content != 0) { 23281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteString(writer, content); 23291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 23301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 23311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 23321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 23331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndPI(writer); 23341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 23351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 23361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 23371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 23381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 23391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 23401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 23411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 23421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterStartCDATA: 23431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 23441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 23451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Start an xml CDATA section. 23461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 23471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 23481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 23491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 23501d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterStartCDATA(xmlTextWriterPtr writer) 23511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 23521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 23531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 23541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 23551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 23561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 23571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 23581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 23591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 23601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 23611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 23621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk != 0) { 23631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 23641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p != 0) { 23651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 23661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NONE: 23671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI: 23681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI_TEXT: 23691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 23701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_ATTRIBUTE: 23711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndAttribute(writer); 23721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 23731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 23741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 23751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard /* fallthrough */ 23761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NAME: 23771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, ">"); 23781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 23791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 23801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 23811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_TEXT; 23821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 23831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_CDATA: 23841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 23851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartCDATA : CDATA not allowed in this context!\n"); 23861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 23871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 23881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 23891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 23901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 23911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 23921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 23931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) 23941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlMalloc(sizeof(xmlTextWriterStackEntry)); 23951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) { 23961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 23971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartCDATA : out of memory!\n"); 23981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 23991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 24001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->name = 0; 24021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_CDATA; 24031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPushFront(writer->nodes, p); 24051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "<![CDATA["); 24071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 24081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 24091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 24101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 24121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 24131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 24151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterEndCDATA: 24161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 24171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 24181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * End an xml CDATA section. 24191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 24201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 24211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 24221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 24231d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterEndCDATA(xmlTextWriterPtr writer) 24241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 24251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 24261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 24271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 24281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 24291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 24311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 24321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 24341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk == 0) 24351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 24361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 24381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) 24391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 24401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 24421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 24431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_CDATA: 24441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "]]>"); 24451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 24461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 24471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 24481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 24491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 24501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 24511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 24521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPopFront(writer->nodes); 24541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 24551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 24561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 24581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteFormatCDATA: 24591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 24601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 24611d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard * @...: extra parameters for the format 24621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 24631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted xml CDATA. 24641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 24651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 24661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 24671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 24681d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteFormatCDATA(xmlTextWriterPtr writer, const char *format, 24691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ...) 24701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 24711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 24721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list ap; 24731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_start(ap, format); 24751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteVFormatCDATA(writer, format, ap); 24771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_end(ap); 24791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 24801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 24811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 24831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteVFormatCDATA: 24841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 24851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 24865841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 24871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 24881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted xml CDATA. 24891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 24901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 24911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 24921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 24931d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteVFormatCDATA(xmlTextWriterPtr writer, const char *format, 24941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list argptr) 24951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 24961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 24971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 24981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 25001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 25011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 25021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlTextWriterVSprintf(format, argptr); 25031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == 0) 25041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 25051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 25061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteCDATA(writer, buf); 25071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 25081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 25091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 25101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 25111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 25121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 25131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteCDATA: 25141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 25151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @content: CDATA content 25161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 25171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write an xml CDATA. 25181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 25191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 25201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 25211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 25221d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteCDATA(xmlTextWriterPtr writer, const xmlChar * content) 25231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 25241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 25251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 25261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 25271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 25281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterStartCDATA(writer); 25291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 25301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 25311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 25321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (content != 0) { 25331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteString(writer, content); 25341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 25351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 25361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 25371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 25381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndCDATA(writer); 25391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 25401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 25411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 25421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 25431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 25441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 25451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 25461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 25471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterStartDTD: 25481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 25491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: the name of the DTD 25501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @pubid: the public identifier, which is an alternative to the system identifier 25511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @sysid: the system identifier, which is the URI of the DTD 25521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 25531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Start an xml DTD. 25541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 25551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 25561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 25571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 25581d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterStartDTD(xmlTextWriterPtr writer, 25591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 25601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * pubid, const xmlChar * sysid) 25611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 25621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 25631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 25641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 25651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 25661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 25671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL || name == NULL || *name == '\0') 25681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 25691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 25701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 25711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 25721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk != 0) { 25731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 25741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartDTD : DTD allowed only in prolog!\n"); 25751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 25761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 25771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 25781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) 25791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlMalloc(sizeof(xmlTextWriterStackEntry)); 25801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) { 25811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 25821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartDTD : out of memory!\n"); 25831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 25841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 25851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 25861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->name = xmlStrdup(name); 25871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p->name == 0) { 25881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 25891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartDTD : out of memory!\n"); 25901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(p); 25911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 25921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 25931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_DTD; 25941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 25951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPushFront(writer->nodes, p); 25961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 25971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "<!DOCTYPE "); 25981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 25991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 26001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 26011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, (const char *) name); 26021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 26031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 26041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 26051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (pubid != 0) { 26071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (sysid == 0) { 26081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 26091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartDTD : system identifier needed!\n"); 26101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 26111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 26121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " PUBLIC \""); 26141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 26151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 26161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 26171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26185841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard count = 26195841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlOutputBufferWriteString(writer->out, (const char *) pubid); 26201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 26211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 26221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 26231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "\""); 26251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 26261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 26271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 26281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 26291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (sysid != 0) { 26311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (pubid == 0) { 26321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " SYSTEM"); 26331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 26341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 26351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 26361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 26371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " \""); 26391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 26401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 26411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 26421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26435841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard count = 26445841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlOutputBufferWriteString(writer->out, (const char *) sysid); 26451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 26461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 26471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 26481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "\""); 26501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 26511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 26521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 26531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 26541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 26561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 26571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 26591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterEndDTD: 26601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 26611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 26621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * End an xml DTD. 26631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 26641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 26651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 26661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 26671d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterEndDTD(xmlTextWriterPtr writer) 26681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 26691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 26701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 26711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 26721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 26731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 26751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 26761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 26781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 26791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk == 0) 26801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 26811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 26831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) 26841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 26851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 26871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD_TEXT: 26881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "]"); 26891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 26901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 26911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 26921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard /* fallthrough */ 26931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD: 26941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD_ELEM: 26951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD_ATTL: 26961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, ">"); 26971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 26981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 26991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 27001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 27011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 27021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 27031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 27041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 27051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPopFront(writer->nodes); 27061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 27071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 27081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 27091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 27101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteFormatDTD: 27111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 27121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: the name of the DTD 27131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @pubid: the public identifier, which is an alternative to the system identifier 27141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @sysid: the system identifier, which is the URI of the DTD 27151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 27161d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard * @...: extra parameters for the format 27171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 27181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a DTD with a formatted markup declarations part. 27191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 27201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 27211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 27221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 27231d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteFormatDTD(xmlTextWriterPtr writer, 27241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 27251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * pubid, 27261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * sysid, const char *format, ...) 27271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 27281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 27291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list ap; 27301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 27311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_start(ap, format); 27321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 27331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteVFormatDTD(writer, name, pubid, sysid, format, 27341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ap); 27351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 27361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_end(ap); 27371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 27381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 27391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 27401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 27411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteVFormatDTD: 27421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 27431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: the name of the DTD 27441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @pubid: the public identifier, which is an alternative to the system identifier 27451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @sysid: the system identifier, which is the URI of the DTD 27461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 27475841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 27481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 27491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a DTD with a formatted markup declarations part. 27501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 27511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 27521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 27531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 27541d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteVFormatDTD(xmlTextWriterPtr writer, 27551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 27561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * pubid, 27571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * sysid, 27581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, va_list argptr) 27591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 27601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 27611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 27621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 27631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 27641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 27651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 27661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlTextWriterVSprintf(format, argptr); 27671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == 0) 27681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 27691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 27701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteDTD(writer, name, pubid, sysid, buf); 27711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 27721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 27731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 27741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 27751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 27761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 27771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteDTD: 27781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 27791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: the name of the DTD 27801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @pubid: the public identifier, which is an alternative to the system identifier 27811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @sysid: the system identifier, which is the URI of the DTD 2782b1d531659b2bee47492ca1c319180116eaaf566eWilliam M. Brack * @subset: string content of the DTD 27831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 27841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a DTD. 27851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 27861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 27871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 27881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 27891d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteDTD(xmlTextWriterPtr writer, 27901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 27911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * pubid, 27921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * sysid, const xmlChar * subset) 27931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 27941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 27951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 27961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 27971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 27981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterStartDTD(writer, name, pubid, sysid); 27991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 28001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 28011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 28021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (subset != 0) { 28031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteString(writer, subset); 28041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 28051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 28061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 28071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 28081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndDTD(writer); 28091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 28101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 28111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 28121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 28131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 28141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 28151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 28165841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 28175841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterStartDTDElement: 28185841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 28195841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD element 28205841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 28215841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Start an xml DTD element. 28225841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 28235841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 28245841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 28251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 28261d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterStartDTDElement(xmlTextWriterPtr writer, const xmlChar * name) 28271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 28281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 28291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 28301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 28311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 28321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 28331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL || name == NULL || *name == '\0') 28341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 28351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 28361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 28371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 28381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk == 0) { 28391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 28401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 28411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 28421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 28431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) 28441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 28451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 28461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 28471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD: 28481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " ["); 28491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 28501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 28511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 28521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_DTD_TEXT; 28531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard /* fallthrough */ 28541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD_TEXT: 28551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 28561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD_ELEM: 28571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndDTDElement(writer); 28581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 28591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 28601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 28611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 28621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 28631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 28641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 28651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 28661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) 28671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlMalloc(sizeof(xmlTextWriterStackEntry)); 28681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) { 28691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 28701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartDTDElement : out of memory!\n"); 28711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 28721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 28731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 28741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->name = xmlStrdup(name); 28751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p->name == 0) { 28761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 28771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartDTDElement : out of memory!\n"); 28781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(p); 28791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 28801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 28811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_DTD_ELEM; 28821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 28831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPushFront(writer->nodes, p); 28841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 28851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "<!ELEMENT "); 28861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 28871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 28881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 28891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, (const char *) name); 28901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 28911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 28921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 28931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 28941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 28951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 28961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 28975841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 28985841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterWriteFormatDTDElement: 28995841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 29005841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD element 29015841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @format: format string (see printf) 29021d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard * @...: extra parameters for the format 29035841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 29045841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Write a formatted DTD element. 29055841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 29065841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 29075841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 29081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 29091d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteFormatDTDElement(xmlTextWriterPtr writer, 29101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 29111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, ...) 29121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 29131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 29141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list ap; 29151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 29161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_start(ap, format); 29171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 29181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteVFormatDTDElement(writer, name, format, ap); 29191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 29201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_end(ap); 29211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 29221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 29231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 29245841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 29255841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterWriteVFormatDTDElement: 29265841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 29275841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD element 29285841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @format: format string (see printf) 29295841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 29305841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 29315841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Write a formatted DTD element. 29325841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 29335841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 29345841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 29351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 29361d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteVFormatDTDElement(xmlTextWriterPtr writer, 29371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 29381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, va_list argptr) 29391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 29401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 29411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 29421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 29431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 29441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 29451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 29461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlTextWriterVSprintf(format, argptr); 29471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == 0) 29481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 29491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 29501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteDTDElement(writer, name, buf); 29511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 29521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 29531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 29541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 29551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 29565841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 29575841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterWriteDTDElement: 29585841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 29595841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD element 29605841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @content: content of the element 29615841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 29625841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Write a DTD element. 29635841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 29645841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 29655841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 29661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 29671d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteDTDElement(xmlTextWriterPtr writer, 29681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, const xmlChar * content) 29691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 29701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 29711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 29721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 29731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (content == NULL) 29741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 29751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 29761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 29771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterStartDTDElement(writer, name); 29781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 29791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 29801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 29811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 29821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteString(writer, BAD_CAST " "); 29831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 29841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 29851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 29861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteString(writer, content); 29871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 29881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 29891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 29901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 29911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndDTDElement(writer); 29921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 29931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 29941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 29951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 29961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 29971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 29981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 29995841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 30005841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterStartDTDAttlist: 30015841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 30025841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD ATTLIST 30035841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 30045841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Start an xml DTD ATTLIST. 30055841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 30065841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 30075841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 30081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 30091d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterStartDTDAttlist(xmlTextWriterPtr writer, const xmlChar * name) 30101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 30111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 30121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 30131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 30141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 30151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 30161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL || name == NULL || *name == '\0') 30171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 30181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 30191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 30201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 30211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk == 0) { 30221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 30231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 30241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 30251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 30261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) 30271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 30281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 30291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 30301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD: 30311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " ["); 30321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 30331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 30341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 30351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_DTD_TEXT; 30361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard /* fallthrough */ 30371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD_TEXT: 30381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 30391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD_ELEM: 30401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD_ATTL: 30411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD_ENTY: 30421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndDTD(writer); 30431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 30441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 30451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 30461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 30471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 30481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 30491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 30501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 30511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) 30521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlMalloc(sizeof(xmlTextWriterStackEntry)); 30531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) { 30541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 30551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartDTDAttlist : out of memory!\n"); 30561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 30571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 30581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 30591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->name = xmlStrdup(name); 30601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p->name == 0) { 30611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 30621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartDTDAttlist : out of memory!\n"); 30631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(p); 30641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 30651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 30661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_DTD_ATTL; 30671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 30681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPushFront(writer->nodes, p); 30691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 30701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "<!ATTLIST "); 30711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 30721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 30731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 30741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, (const char *)name); 30751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 30761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 30771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 30781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 30791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 30801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 30811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 30825841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 30835841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterWriteFormatDTDAttlist: 30845841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 30855841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD ATTLIST 30865841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @format: format string (see printf) 30871d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard * @...: extra parameters for the format 30885841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 30895841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Write a formatted DTD ATTLIST. 30905841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 30915841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 30925841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 30931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 30941d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteFormatDTDAttlist(xmlTextWriterPtr writer, 30951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 30961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, ...) 30971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 30981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 30991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list ap; 31001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 31011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_start(ap, format); 31021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 31031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteVFormatDTDAttlist(writer, name, format, ap); 31041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 31051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_end(ap); 31061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 31071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 31081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 31095841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 31105841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterWriteVFormatDTDAttlist: 31115841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 31125841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD ATTLIST 31135841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @format: format string (see printf) 31145841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 31155841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 31165841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Write a formatted DTD ATTLIST. 31175841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 31185841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 31195841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 31201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 31211d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteVFormatDTDAttlist(xmlTextWriterPtr writer, 31221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 31231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, va_list argptr) 31241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 31251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 31261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 31271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 31281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 31291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 31301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 31311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlTextWriterVSprintf(format, argptr); 31321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == 0) 31331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 31341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 31351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteDTDAttlist(writer, name, buf); 31361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 31371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 31381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 31391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 31401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 31415841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 31425841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterWriteDTDAttlist: 31435841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 31445841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD ATTLIST 31455841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @content: content of the ATTLIST 31465841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 31475841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Write a DTD ATTLIST. 31485841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 31495841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 31505841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 31511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 31521d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteDTDAttlist(xmlTextWriterPtr writer, 31531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, const xmlChar * content) 31541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 31551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 31561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 31571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 31581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (content == NULL) 31591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 31601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 31611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 31621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterStartDTDAttlist(writer, name); 31631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 31641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 31651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 31661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 31671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteString(writer, BAD_CAST " "); 31681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 31691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 31701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 31711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteString(writer, content); 31721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 31731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 31741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 31751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 31761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndDTDAttlist(writer); 31771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 31781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 31791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 31801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 31811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 31821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 31831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 31845841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 31855841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterStartDTDEntity: 31865841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 31875841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @pe: TRUE if this is a parameter entity, FALSE if not 31885841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD ATTLIST 31895841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 31905841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Start an xml DTD ATTLIST. 31915841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 31925841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 31935841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 31941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 31951d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterStartDTDEntity(xmlTextWriterPtr writer, 31961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int pe, const xmlChar * name) 31971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 31981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 31991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 32001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 32011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 32021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL || name == NULL || *name == '\0') 32041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 32051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 32071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 32081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk == 0) { 32091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 32101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 32111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 32131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) 32141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 32151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 32171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD: 32181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " ["); 32191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 32201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 32211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 32221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_DTD_TEXT; 32231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard /* fallthrough */ 32241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD_TEXT: 32251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 32261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD_ELEM: 32271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD_ATTL: 32281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD_ENTY: 32291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndDTD(writer); 32301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 32311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 32321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 32331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 32341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 32351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 32361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 32371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) 32391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlMalloc(sizeof(xmlTextWriterStackEntry)); 32401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) { 32411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 32421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartDTDElement : out of memory!\n"); 32431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 32441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 32451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->name = xmlStrdup(name); 32471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p->name == 0) { 32481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 32491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartDTDElement : out of memory!\n"); 32501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(p); 32511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 32521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 32531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_DTD_ENTY; 32541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPushFront(writer->nodes, p); 32561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "<!ENTITY "); 32581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 32591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 32601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 32611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (pe != 0) { 32631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " % "); 32641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 32651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 32661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 32671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 32681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, (const char *)name); 32701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 32711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 32721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 32731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 32751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 32761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32775841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 32785841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterWriteFormatDTDInternalEntity: 32795841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 32805841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @pe: TRUE if this is a parameter entity, FALSE if not 32815841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD entity 32825841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @format: format string (see printf) 32831d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard * @...: extra parameters for the format 32845841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 32855841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Write a formatted DTD internal entity. 32865841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 32875841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 32885841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 32891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 32901d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteFormatDTDInternalEntity(xmlTextWriterPtr writer, 32911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int pe, 32921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 32931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, ...) 32941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 32951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 32961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list ap; 32971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_start(ap, format); 32991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 33001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteVFormatDTDInternalEntity(writer, pe, name, 33011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard format, ap); 33021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 33031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_end(ap); 33041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 33051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 33061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 33075841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 33085841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterWriteVFormatDTDInternalEntity: 33095841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 33105841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @pe: TRUE if this is a parameter entity, FALSE if not 33115841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD entity 33125841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @format: format string (see printf) 33135841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 33145841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 33155841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Write a formatted DTD internal entity. 33165841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 33175841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 33185841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 33191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 33201d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteVFormatDTDInternalEntity(xmlTextWriterPtr writer, 33211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int pe, 33221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 33231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, 33241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list argptr) 33251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 33261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 33271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 33281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 33291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 33301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 33311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 33321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlTextWriterVSprintf(format, argptr); 33331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == 0) 33341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 33351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 33361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteDTDInternalEntity(writer, pe, name, buf); 33371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 33381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 33391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 33401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 33411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 33425841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 33435841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterWriteDTDEntity: 33445841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 33455841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @pe: TRUE if this is a parameter entity, FALSE if not 33465841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD entity 33475841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @pubid: the public identifier, which is an alternative to the system identifier 33485841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @sysid: the system identifier, which is the URI of the DTD 33495841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @ndataid: the xml notation name. 33505841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @content: content of the entity 33515841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 33525841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Write a DTD entity. 33535841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 33545841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 33555841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 33561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 33571d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteDTDEntity(xmlTextWriterPtr writer, 33581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int pe, 33591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 33601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * pubid, 33611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * sysid, 33621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * ndataid, 33631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * content) 33641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 33651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (((content == NULL) && (pubid == NULL) && (sysid == NULL)) 33661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard || ((content != NULL) && ((pubid != NULL) || (sysid != NULL)))) 33671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 33681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if ((pe != 0) && (ndataid != NULL)) 33691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 33701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 33711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (content != 0) 33721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return xmlTextWriterWriteDTDInternalEntity(writer, pe, name, 33731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard content); 33741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 33751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return xmlTextWriterWriteDTDExternalEntity(writer, pe, name, pubid, 33761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sysid, ndataid); 33771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 33781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 33795841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 33805841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterWriteDTDInternalEntity: 33815841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 33825841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @pe: TRUE if this is a parameter entity, FALSE if not 33835841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD entity 33845841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @content: content of the entity 33855841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 33865841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Write a DTD internal entity. 33875841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 33885841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 33895841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 33901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 33911d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteDTDInternalEntity(xmlTextWriterPtr writer, 33921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int pe, 33931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 33941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * content) 33951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 33961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 33971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 33981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 33991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if ((name == NULL) || (*name == '\0') || (content == NULL)) 34001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 34011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 34021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 34031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterStartDTDEntity(writer, pe, name); 34041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 34051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 34061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 34071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 34081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteString(writer, BAD_CAST " "); 34091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 34101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 34111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 34121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 34131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 34141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 34151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 34161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteString(writer, content); 34171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 34181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 34191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 34201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 34211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 34221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 34231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 34241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 34251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndDTDEntity(writer); 34261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 34271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 34281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 34291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 34301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 34311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 34321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 34335841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 34345841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterWriteDTDExternalEntity: 34355841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 34365841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @pe: TRUE if this is a parameter entity, FALSE if not 34375841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD entity 34385841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @pubid: the public identifier, which is an alternative to the system identifier 34395841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @sysid: the system identifier, which is the URI of the DTD 34405841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @ndataid: the xml notation name. 34415841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 34425841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Write a DTD internal entity. 34435841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 34445841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 34455841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 34461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 34471d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteDTDExternalEntity(xmlTextWriterPtr writer, 34481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int pe, 34491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 34501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * pubid, 34511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * sysid, 34521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * ndataid) 34531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 34541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 34551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 34561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 34571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if ((name == NULL) || (*name == '\0') 34581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard || ((pubid == NULL) && (sysid == NULL))) 34591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 34601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if ((pe != 0) && (ndataid != NULL)) 34611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 34621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 34631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 34641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterStartDTDEntity(writer, pe, name); 34651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 34661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 34671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 34681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 34691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (pubid != 0) { 34701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (sysid == 0) { 34711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 34721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterWriteDTDEntity : system identifier needed!\n"); 34731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 34741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 34751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 34761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " PUBLIC "); 34771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 34781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 34791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 34801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 34811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 34821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 34831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 34841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 34851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 34865841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard count = 34875841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlOutputBufferWriteString(writer->out, (const char *) pubid); 34881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 34891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 34901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 34911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 34921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 34931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 34941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 34951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 34961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 34971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 34981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (sysid != 0) { 34991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (pubid == 0) { 35001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " SYSTEM"); 35011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 35021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 35031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 35041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 35051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 35061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " "); 35071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 35081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 35091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 35101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 35111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 35121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 35131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 35141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 35151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 35165841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard count = 35175841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlOutputBufferWriteString(writer->out, (const char *) sysid); 35181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 35191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 35201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 35211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 35221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 35231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 35241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 35251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 35261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 35271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 35281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (ndataid != NULL) { 35291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " NDATA "); 35301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 35311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 35321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 35331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 35345841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard count = 35355841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlOutputBufferWriteString(writer->out, 35365841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard (const char *) ndataid); 35371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 35381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 35391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 35401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 35411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 35421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndDTDEntity(writer); 35431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 35441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 35451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 35461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 35471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 35481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 35491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 35505841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 35515841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterWriteDTDNotation: 35525841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 35535841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the xml notation 35545841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @pubid: the public identifier, which is an alternative to the system identifier 35555841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @sysid: the system identifier, which is the URI of the DTD 35565841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 35575841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Write a DTD entity. 35585841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 35595841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 35605841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 35611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 35621d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteDTDNotation(xmlTextWriterPtr writer, 35631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 35641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * pubid, const xmlChar * sysid) 35651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 35661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 35671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 35681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 35691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 35701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 35711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL || name == NULL || *name == '\0') 35721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 35731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 35741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 35751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 35761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk == 0) { 35771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 35781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 35791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 35801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 35811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) 35821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 35831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 35841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 35851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD: 35861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " ["); 35871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 35881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 35891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 35901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_DTD_TEXT; 35911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard /* fallthrough */ 35921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD_TEXT: 35931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 35941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD_ELEM: 35951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD_ATTL: 35961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD_ENTY: 35971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndDTD(writer); 35981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 35991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 36001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 36011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 36021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 36031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 36041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 36051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 36061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "<!NOTATION "); 36071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 36081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 36091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 36101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, (const char *) name); 36111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 36121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 36131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 36141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 36151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (pubid != 0) { 36161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " PUBLIC "); 36171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 36181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 36191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 36201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 36211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 36221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 36231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 36245841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard count = 36255841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlOutputBufferWriteString(writer->out, (const char *) pubid); 36261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 36271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 36281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 36291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 36301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 36311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 36321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 36331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 36341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 36351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (sysid != 0) { 36361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (pubid == 0) { 36371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " SYSTEM"); 36381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 36391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 36401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 36411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 36421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " "); 36431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 36441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 36451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 36461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 36471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 36481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 36491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 36505841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard count = 36515841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlOutputBufferWriteString(writer->out, (const char *) sysid); 36521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 36531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 36541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 36551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 36561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 36571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 36581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 36591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 36601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 36611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, ">"); 36621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 36631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 36641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 36651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 36661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 36671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 36681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 36691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 36701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterFlush: 36711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 36721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 36731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Flush the output buffer. 36741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 36751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 36761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 36771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 36781d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterFlush(xmlTextWriterPtr writer) 36791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 36801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 36811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 36821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 36831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 36841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 36851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer->out == NULL) 36861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = 0; 36871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard else 36881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferFlush(writer->out); 36891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 36901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return count; 36911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 36921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 36931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 36941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * misc 36951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 36961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 36971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 36981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlFreeTextWriterStackEntry: 36991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @lk: the xmlLinkPtr 37001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 37011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Free callback for the xmlList. 37021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 37031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic void 37041d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlFreeTextWriterStackEntry(xmlLinkPtr lk) 37051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 37061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 37071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 37091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) 37101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return; 37111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p->name != 0) 37131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(p->name); 37141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(p); 37151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 37161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 37181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlCmpTextWriterStackEntry: 37191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @data0: the first data 37201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @data1: the second data 37211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 37221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Compare callback for the xmlList. 37231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 37241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns -1, 0, 1 37251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 37261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic int 37271d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlCmpTextWriterStackEntry(const void *data0, const void *data1) 37281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 37291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p0; 37301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p1; 37311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (data0 == data1) 37331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 37341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (data0 == 0) 37361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 37371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (data1 == 0) 37391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 1; 37401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p0 = (xmlTextWriterStackEntry *) data0; 37421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p1 = (xmlTextWriterStackEntry *) data1; 37431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return xmlStrcmp(p0->name, p1->name); 37451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 37461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 37481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * misc 37491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 37501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 37521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlFreeTextWriterNsStackEntry: 37531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @lk: the xmlLinkPtr 37541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 37551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Free callback for the xmlList. 37561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 37571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic void 37581d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlFreeTextWriterNsStackEntry(xmlLinkPtr lk) 37591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 37601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterNsStackEntry *p; 37611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterNsStackEntry *) xmlLinkGetData(lk); 37631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) 37641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return; 37651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p->prefix != 0) 37671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(p->prefix); 37681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p->uri != 0) 37691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(p->uri); 37701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(p); 37721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 37731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 37751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlCmpTextWriterNsStackEntry: 37761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @data0: the first data 37771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @data1: the second data 37781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 37791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Compare callback for the xmlList. 37801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 37811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns -1, 0, 1 37821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 37831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic int 37841d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlCmpTextWriterNsStackEntry(const void *data0, const void *data1) 37851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 37861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterNsStackEntry *p0; 37871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterNsStackEntry *p1; 37881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 37891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (data0 == data1) 37911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 37921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (data0 == 0) 37941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 37951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (data1 == 0) 37971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 1; 37981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p0 = (xmlTextWriterNsStackEntry *) data0; 38001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p1 = (xmlTextWriterNsStackEntry *) data1; 38011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 38021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlStrcmp(p0->prefix, p1->prefix); 38031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 38041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (rc == 0) 38051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = p0->elem == p1->elem; 38061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 38071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 38081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 38091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 38101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 38111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteMemCallback: 38121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @context: the xmlBufferPtr 38131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @str: the data to write 38141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @len: the length of the data 38151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 38161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write callback for the xmlOutputBuffer with target xmlBuffer 38171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 38181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns -1, 0, 1 38191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 38201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic int 38211d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteMemCallback(void *context, const xmlChar * str, int len) 38221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 38231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlBufferPtr buf = (xmlBufferPtr) context; 38241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 38251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlBufferAdd(buf, str, len); 38261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 38271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return len; 38281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 38291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 38301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 38311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterCloseMemCallback: 38321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @context: the xmlBufferPtr 38331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 38341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Close callback for the xmlOutputBuffer with target xmlBuffer 38351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 38361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns -1, 0, 1 38371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 38381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic int 38391d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterCloseMemCallback(void *context ATTRIBUTE_UNUSED) 38401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 38411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 38421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 38431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 38441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 38455841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterWriteDocCallback: 38465841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @context: the xmlBufferPtr 38475841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @str: the data to write 38485841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @len: the length of the data 38495841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 38505841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Write callback for the xmlOutputBuffer with target xmlBuffer 38515841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 38525841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns -1, 0, 1 38535841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 38545841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillardstatic int 38555841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel VeillardxmlTextWriterWriteDocCallback(void *context, const xmlChar * str, int len) 38565841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard{ 38575841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) context; 38585841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard int rc; 38595841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 38601d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard if ((rc = xmlParseChunk(ctxt, (const char *) str, len, 0)) != 0) { 38615841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlGenericError(xmlGenericErrorContext, 38625841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard "xmlTextWriterWriteDocCallback : XML error %d !\n", 38635841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard rc); 38645841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return -1; 38655841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 38665841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 38675841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return len; 38685841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard} 38695841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 38705841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 38715841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterCloseDocCallback: 38725841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @context: the xmlBufferPtr 38735841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 38745841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Close callback for the xmlOutputBuffer with target xmlBuffer 38755841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 38765841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns -1, 0, 1 38775841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 38785841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillardstatic int 38795841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel VeillardxmlTextWriterCloseDocCallback(void *context) 38805841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard{ 38815841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) context; 38825841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard int rc; 38835841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 38845841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if ((rc = xmlParseChunk(ctxt, NULL, 0, 1)) != 0) { 38855841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlGenericError(xmlGenericErrorContext, 38865841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard "xmlTextWriterWriteDocCallback : XML error %d !\n", 38875841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard rc); 38885841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return -1; 38895841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 38905841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 38915841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return 0; 38925841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard} 38935841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 38945841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 38951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterVSprintf: 38961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: see printf 38971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 38981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 38991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Utility function for formatted output 39001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 39011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns a new xmlChar buffer with the data or NULL on error. This buffer must be freed. 39021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 39031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic xmlChar * 39041d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterVSprintf(const char *format, va_list argptr) 39051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 39061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int size; 39071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 39081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 39091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 39101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard size = BUFSIZ; 39111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = (xmlChar *) xmlMalloc(size); 39121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == NULL) { 39131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 39141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterVSprintf : out of memory!\n"); 39151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return NULL; 39161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 39171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 39181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard while (((count = vsnprintf((char *) buf, size, format, argptr)) < 0) 39191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard || (count == size - 1) || (count == size) || (count > size)) { 39201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 39211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard size += BUFSIZ; 39221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = (xmlChar *) xmlMalloc(size); 39231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == NULL) { 39241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlGenericError(xmlGenericErrorContext, 39251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterVSprintf : out of memory!\n"); 39261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return NULL; 39271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 39281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 39291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 39301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return buf; 39311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 39321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 39335841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 39345841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterStartDocumentCallback: 39355841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @ctx: the user data (XML parser context) 39365841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 39375841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * called at the start of document processing. 39385841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 39395841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillardstatic void 39405841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel VeillardxmlTextWriterStartDocumentCallback(void *ctx) 39415841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard{ 39425841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; 39435841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlDocPtr doc; 39445841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 39455841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard#ifdef DEBUG_SAX 39465841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlGenericError(xmlGenericErrorContext, "SAX.startDocument()\n"); 39475841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard#endif 39485841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (ctxt->html) { 39495841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard#ifdef LIBXML_HTML_ENABLED 39505841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (ctxt->myDoc == NULL) 39515841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->myDoc = htmlNewDocNoDtD(NULL, NULL); 39525841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (ctxt->myDoc == NULL) { 39535841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL)) 39545841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->sax->error(ctxt->userData, 39555841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard "SAX.startDocument(): out of memory\n"); 39565841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->errNo = XML_ERR_NO_MEMORY; 39575841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->instate = XML_PARSER_EOF; 39585841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->disableSAX = 1; 39595841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return; 39605841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 39615841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard#else 39625841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlGenericError(xmlGenericErrorContext, 39635841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard "libxml2 built without HTML support\n"); 39645841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->errNo = XML_ERR_INTERNAL_ERROR; 39655841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->instate = XML_PARSER_EOF; 39665841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->disableSAX = 1; 39675841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return; 39685841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard#endif 39695841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } else { 39705841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard doc = ctxt->myDoc; 39715841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (doc == NULL) 39725841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard doc = ctxt->myDoc = xmlNewDoc(ctxt->version); 39735841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (doc != NULL) { 39745841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (doc->children == NULL) { 39755841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (ctxt->encoding != NULL) 39765841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard doc->encoding = xmlStrdup(ctxt->encoding); 39775841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard else 39785841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard doc->encoding = NULL; 39795841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard doc->standalone = ctxt->standalone; 39805841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 39815841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } else { 39825841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL)) 39835841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->sax->error(ctxt->userData, 39845841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard "SAX.startDocument(): out of memory\n"); 39855841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->errNo = XML_ERR_NO_MEMORY; 39865841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->instate = XML_PARSER_EOF; 39875841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->disableSAX = 1; 39885841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return; 39895841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 39905841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 39915841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if ((ctxt->myDoc != NULL) && (ctxt->myDoc->URL == NULL) && 39925841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard (ctxt->input != NULL) && (ctxt->input->filename != NULL)) { 39935841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->myDoc->URL = 39945841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlCanonicPath((const xmlChar *) ctxt->input->filename); 39955841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (ctxt->myDoc->URL == NULL) 39965841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->myDoc->URL = 39975841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlStrdup((const xmlChar *) ctxt->input->filename); 39985841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 39995841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard} 40005841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 40012cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard/** 40022cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * xmlTextWriterSetIndent: 40032cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * @writer: the xmlTextWriterPtr 40042cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * @indent: do indentation? 40052cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * 40062cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * Set indentation output. indent = 0 do not indentation. indent > 0 do indentation. 40072cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * 40082cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * Returns -1 on error or 0 otherwise. 40092cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard */ 40102cca446b86a77022d5b847b106544aede7207dbcDaniel Veillardint 40112cca446b86a77022d5b847b106544aede7207dbcDaniel VeillardxmlTextWriterSetIndent (xmlTextWriterPtr writer, int indent) 40122cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard{ 40132cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard if (indent < 0) 40142cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard return -1; 40152cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard 40162cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard writer->indent = indent; 40172cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard writer->doindent = 1; 40182cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard 40192cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard return 0; 40202cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard} 40212cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard 40222cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard/** 40232cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * xmlTextWriterSetIndentString: 40242cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * @writer: the xmlTextWriterPtr 40252cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * @str: the xmlChar string 40262cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * 40272cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * Set string indentation. 40282cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * 40292cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * Returns -1 on error or 0 otherwise. 40302cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard */ 40312cca446b86a77022d5b847b106544aede7207dbcDaniel Veillardint 40322cca446b86a77022d5b847b106544aede7207dbcDaniel VeillardxmlTextWriterSetIndentString (xmlTextWriterPtr writer, xmlChar *str) 40332cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard{ 40342cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard 40352cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard if (!str) 40362cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard return -1; 40372cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard 40382cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard writer->ichar = xmlStrdup (str); 40392cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard 40402cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard if (!writer->ichar) 40412cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard return -1; 40422cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard else 40432cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard return 0; 40442cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard} 40452cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard 40462cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard/** 40472cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * xmlTextWriterWriteIndent: 40482cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * @writer: the xmlTextWriterPtr 40492cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * 40502cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * Write indent string. 40512cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * 40522cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * Returns -1 on error or the number of strings written. 40532cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard */ 40542cca446b86a77022d5b847b106544aede7207dbcDaniel Veillardstatic int 40552cca446b86a77022d5b847b106544aede7207dbcDaniel VeillardxmlTextWriterWriteIndent (xmlTextWriterPtr writer) 40562cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard{ 40572cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard int lksize; 40582cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard int i; 40595d4cba413a2abd090b2d4b934e6316e198509eccWilliam M. Brack int ret = -1; /* just in case of an empty list */ 40602cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard 40612cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard lksize = xmlListSize (writer->nodes); 40622cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard for (i = 0; i < (lksize-1); i++) { 40635d4cba413a2abd090b2d4b934e6316e198509eccWilliam M. Brack ret = xmlOutputBufferWriteString (writer->out, 40645d4cba413a2abd090b2d4b934e6316e198509eccWilliam M. Brack (const char *)writer->ichar); 40652cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard if (ret == -1) 40662cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard break; 40672cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard } 40682cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard 40692cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard return (ret == -1)?ret:i; 40702cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard} 40712cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard 40721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard#endif 4073