xmlwriter.c revision a521d287516f2dc93a8fe540c5883ffc39cb5024
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, 41500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard XML_TEXTWRITER_DTD_ELEM_TEXT, 421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard XML_TEXTWRITER_DTD_ATTL, 43500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard XML_TEXTWRITER_DTD_ATTL_TEXT, 44500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard XML_TEXTWRITER_DTD_ENTY, /* entity */ 45500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard XML_TEXTWRITER_DTD_ENTY_TEXT, 46500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard XML_TEXTWRITER_DTD_PENT, /* parameter entity */ 4787640d5f14e7ce8b9844b886c765af0c56de5ca5William M. Brack XML_TEXTWRITER_COMMENT 481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} xmlTextWriterState; 491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardtypedef struct _xmlTextWriterStackEntry xmlTextWriterStackEntry; 511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstruct _xmlTextWriterStackEntry { 531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *name; 541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterState state; 551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard}; 561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardtypedef struct _xmlTextWriterNsStackEntry xmlTextWriterNsStackEntry; 581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstruct _xmlTextWriterNsStackEntry { 591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *prefix; 601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *uri; 611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr elem; 621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard}; 631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstruct _xmlTextWriter { 65ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard xmlOutputBufferPtr out; /* output buffer */ 66ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard xmlListPtr nodes; /* element name stack */ 67ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard xmlListPtr nsstack; /* name spaces stack */ 681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int level; 69ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard int indent; /* enable indent */ 70ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard int doindent; /* internal indent flag */ 71ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard xmlChar *ichar; /* indent character */ 72ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard char qchar; /* character used for quoting attribute values */ 7320c5e7878d462bfd93aa4eede7f1f5faabd377feDaniel Veillard xmlParserCtxtPtr ctxt; 74a521d287516f2dc93a8fe540c5883ffc39cb5024Daniel Veillard int no_doc_free; 751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard}; 761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic void xmlFreeTextWriterStackEntry(xmlLinkPtr lk); 781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic int xmlCmpTextWriterStackEntry(const void *data0, 791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const void *data1); 801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic void xmlFreeTextWriterNsStackEntry(xmlLinkPtr lk); 811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic int xmlCmpTextWriterNsStackEntry(const void *data0, 821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const void *data1); 831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic int xmlTextWriterWriteMemCallback(void *context, 841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * str, int len); 851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic int xmlTextWriterCloseMemCallback(void *context); 865841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillardstatic int xmlTextWriterWriteDocCallback(void *context, 875841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard const xmlChar * str, int len); 885841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillardstatic int xmlTextWriterCloseDocCallback(void *context); 895841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic xmlChar *xmlTextWriterVSprintf(const char *format, va_list argptr); 911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic int xmlOutputBufferWriteBase64(xmlOutputBufferPtr out, int len, 921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const unsigned char *data); 935841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillardstatic void xmlTextWriterStartDocumentCallback(void *ctx); 94ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillardstatic int xmlTextWriterWriteIndent(xmlTextWriterPtr writer); 95500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillardstatic int 96500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlTextWriterHandleStateDependencies(xmlTextWriterPtr writer, 97500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlTextWriterStackEntry * p); 981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 100dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard * xmlWriterErrMsg: 101dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard * @ctxt: a writer context 102dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard * @error: the error number 103dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard * @msg: the error message 104dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard * 105dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard * Handle a writer error 106dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard */ 107dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillardstatic void 108dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel VeillardxmlWriterErrMsg(xmlTextWriterPtr ctxt, xmlParserErrors error, 109dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard const char *msg) 110dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard{ 111dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard if (ctxt != NULL) { 112dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard __xmlRaiseError(NULL, NULL, NULL, ctxt->ctxt, 113dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard NULL, XML_FROM_WRITER, error, XML_ERR_FATAL, 114dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard NULL, 0, NULL, NULL, NULL, 0, 0, msg); 115dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard } else { 116dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_WRITER, error, 117dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard XML_ERR_FATAL, NULL, 0, NULL, NULL, NULL, 0, 0, msg); 118dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard } 119dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard} 120dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard 121dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard/** 122dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard * xmlWriterErrMsgInt: 123dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard * @ctxt: a writer context 124dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard * @error: the error number 125dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard * @msg: the error message 126dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard * @val: an int 127dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard * 128dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard * Handle a writer error 129dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard */ 130dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillardstatic void 131dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel VeillardxmlWriterErrMsgInt(xmlTextWriterPtr ctxt, xmlParserErrors error, 132dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard const char *msg, int val) 133dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard{ 134dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard if (ctxt != NULL) { 135dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard __xmlRaiseError(NULL, NULL, NULL, ctxt->ctxt, 136dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard NULL, XML_FROM_WRITER, error, XML_ERR_FATAL, 137dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard NULL, 0, NULL, NULL, NULL, val, 0, msg, val); 138dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard } else { 139dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard __xmlRaiseError(NULL, NULL, NULL, NULL, NULL, XML_FROM_WRITER, error, 140dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard XML_ERR_FATAL, NULL, 0, NULL, NULL, NULL, val, 0, msg, val); 141dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard } 142dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard} 143dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard 144dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard/** 1451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlNewTextWriter: 1461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @out: an xmlOutputBufferPtr 1471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 1481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Create a new xmlNewTextWriter structure using an xmlOutputBufferPtr 149d5cc0f7f5185532120f6b8351e12ed7e81d4a28cDaniel Veillard * NOTE: the @out parameter will be deallocated when the writer is closed 150d5cc0f7f5185532120f6b8351e12ed7e81d4a28cDaniel Veillard * (if the call succeed.) 1511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 1521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the new xmlTextWriterPtr or NULL in case of error 1531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 1541d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterPtr 1551d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlNewTextWriter(xmlOutputBufferPtr out) 1561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 1571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterPtr ret; 1581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ret = (xmlTextWriterPtr) xmlMalloc(sizeof(xmlTextWriter)); 1601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (ret == NULL) { 161dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(NULL, XML_ERR_NO_MEMORY, 1621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlNewTextWriter : out of memory!\n"); 1631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return NULL; 1641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 1651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard memset(ret, 0, (size_t) sizeof(xmlTextWriter)); 1661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ret->nodes = xmlListCreate((xmlListDeallocator) 1681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFreeTextWriterStackEntry, 1691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard (xmlListDataCompare) 1701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlCmpTextWriterStackEntry); 1711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (ret->nodes == NULL) { 172dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(NULL, XML_ERR_NO_MEMORY, 1731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlNewTextWriter : out of memory!\n"); 1741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(ret); 1751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return NULL; 1761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 1771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ret->nsstack = xmlListCreate((xmlListDeallocator) 1791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFreeTextWriterNsStackEntry, 1801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard (xmlListDataCompare) 1811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlCmpTextWriterNsStackEntry); 1821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (ret->nsstack == NULL) { 183dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(NULL, XML_ERR_NO_MEMORY, 1841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlNewTextWriter : out of memory!\n"); 185500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlListDelete(ret->nodes); 1861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(ret); 1871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return NULL; 1881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 1891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ret->out = out; 191ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard ret->ichar = xmlStrdup(BAD_CAST " "); 1921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ret->qchar = '"'; 1931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 194500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (!ret->ichar) { 195500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlListDelete(ret->nodes); 196500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlListDelete(ret->nsstack); 197500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlFree(ret); 198dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(NULL, XML_ERR_NO_MEMORY, 199500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard "xmlNewTextWriter : out of memory!\n"); 200ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return NULL; 201500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 202a521d287516f2dc93a8fe540c5883ffc39cb5024Daniel Veillard ret->no_doc_free = 0; 203ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard 2041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return ret; 2051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 2061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 2071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 2081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlNewTextWriterFilename: 2091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @uri: the URI of the resource for the output 2101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @compression: compress the output? 2111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 2121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Create a new xmlNewTextWriter structure with @uri as output 2131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 2141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the new xmlTextWriterPtr or NULL in case of error 2151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 2161d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterPtr 2171d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlNewTextWriterFilename(const char *uri, int compression) 2181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 2191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterPtr ret; 2201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlOutputBufferPtr out; 2211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 2221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard out = xmlOutputBufferCreateFilename(uri, NULL, compression); 2231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (out == NULL) { 224dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(NULL, XML_ERR_NO_MEMORY, 2251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlNewTextWriterFilename : out of memory!\n"); 2261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return NULL; 2271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 2281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 2291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ret = xmlNewTextWriter(out); 2301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (ret == NULL) { 231dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(NULL, XML_ERR_NO_MEMORY, 2321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlNewTextWriterFilename : out of memory!\n"); 2331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlOutputBufferClose(out); 2341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return NULL; 2351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 2361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 2372cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard ret->indent = 0; 2382cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard ret->doindent = 0; 2391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return ret; 2401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 2411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 2421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 2431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlNewTextWriterMemory: 2441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @buf: xmlBufferPtr 2451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @compression: compress the output? 2461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 2471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Create a new xmlNewTextWriter structure with @buf as output 2481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * TODO: handle compression 2491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 2501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the new xmlTextWriterPtr or NULL in case of error 2511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 2521d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterPtr 2531d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlNewTextWriterMemory(xmlBufferPtr buf, int compression ATTRIBUTE_UNUSED) 2541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 2551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterPtr ret; 2561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlOutputBufferPtr out; 2571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 2581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/*::todo handle compression */ 2591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard out = xmlOutputBufferCreateIO((xmlOutputWriteCallback) 2601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterWriteMemCallback, 2611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard (xmlOutputCloseCallback) 2621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterCloseMemCallback, 2631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard (void *) buf, NULL); 2641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (out == NULL) { 265dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(NULL, XML_ERR_NO_MEMORY, 2661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlNewTextWriterMemory : out of memory!\n"); 2671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return NULL; 2681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 2691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 2701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ret = xmlNewTextWriter(out); 2711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (ret == NULL) { 272dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(NULL, XML_ERR_NO_MEMORY, 2731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlNewTextWriterMemory : out of memory!\n"); 2741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlOutputBufferClose(out); 2751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return NULL; 2761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 2771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 2781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return ret; 2791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 2801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 2811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 2825841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlNewTextWriterPushParser: 2835841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @ctxt: xmlParserCtxtPtr to hold the new XML document tree 2845841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @compression: compress the output? 2855841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 2865841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Create a new xmlNewTextWriter structure with @ctxt as output 287d5cc0f7f5185532120f6b8351e12ed7e81d4a28cDaniel Veillard * NOTE: the @ctxt context will be freed with the resulting writer 288d5cc0f7f5185532120f6b8351e12ed7e81d4a28cDaniel Veillard * (if the call succeeds). 2895841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * TODO: handle compression 2905841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 2915841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the new xmlTextWriterPtr or NULL in case of error 2925841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 2935841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel VeillardxmlTextWriterPtr 2941d913863130a17a638db69c2c50f89e5b0d4aae4Daniel VeillardxmlNewTextWriterPushParser(xmlParserCtxtPtr ctxt, 2951d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard int compression ATTRIBUTE_UNUSED) 2965841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard{ 2975841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlTextWriterPtr ret; 2985841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlOutputBufferPtr out; 2995841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 300500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (ctxt == NULL) { 301dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(NULL, XML_ERR_INTERNAL_ERROR, 302500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard "xmlNewTextWriterPushParser : invalid context!\n"); 303500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return NULL; 304500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 305500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3065841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard out = xmlOutputBufferCreateIO((xmlOutputWriteCallback) 3075841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlTextWriterWriteDocCallback, 3085841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard (xmlOutputCloseCallback) 3095841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlTextWriterCloseDocCallback, 3105841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard (void *) ctxt, NULL); 3115841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (out == NULL) { 312dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(NULL, XML_ERR_INTERNAL_ERROR, 3135841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard "xmlNewTextWriterPushParser : error at xmlOutputBufferCreateIO!\n"); 3145841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return NULL; 3155841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 3165841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 3175841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ret = xmlNewTextWriter(out); 3185841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (ret == NULL) { 319dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(NULL, XML_ERR_INTERNAL_ERROR, 3205841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard "xmlNewTextWriterPushParser : error at xmlNewTextWriter!\n"); 3215841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlOutputBufferClose(out); 3225841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return NULL; 3235841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 3245841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 32520c5e7878d462bfd93aa4eede7f1f5faabd377feDaniel Veillard ret->ctxt = ctxt; 32620c5e7878d462bfd93aa4eede7f1f5faabd377feDaniel Veillard 3275841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return ret; 3285841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard} 3295841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 3305841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 3315841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlNewTextWriterDoc: 3325841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @doc: address of a xmlDocPtr to hold the new XML document tree 3335841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @compression: compress the output? 3345841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 3355841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Create a new xmlNewTextWriter structure with @*doc as output 3365841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 3375841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the new xmlTextWriterPtr or NULL in case of error 3385841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 3395841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel VeillardxmlTextWriterPtr 3405841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel VeillardxmlNewTextWriterDoc(xmlDocPtr * doc, int compression) 3415841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard{ 3425841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlTextWriterPtr ret; 3435841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlSAXHandler saxHandler; 3445841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlParserCtxtPtr ctxt; 3455841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 3465841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard memset(&saxHandler, '\0', sizeof(saxHandler)); 3475841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlSAX2InitDefaultSAXHandler(&saxHandler, 1); 3485841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard saxHandler.startDocument = xmlTextWriterStartDocumentCallback; 3495841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard saxHandler.startElement = xmlSAX2StartElement; 3505841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard saxHandler.endElement = xmlSAX2EndElement; 3515841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 3525841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt = xmlCreatePushParserCtxt(&saxHandler, NULL, NULL, 0, NULL); 3535841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (ctxt == NULL) { 354dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(NULL, XML_ERR_INTERNAL_ERROR, 3555841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard "xmlNewTextWriterDoc : error at xmlCreatePushParserCtxt!\n"); 3565841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return NULL; 3575841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 35803a53c34db279cbe4a305d58969beb1f26ff3d19Daniel Veillard /* 35903a53c34db279cbe4a305d58969beb1f26ff3d19Daniel Veillard * For some reason this seems to completely break if node names 36003a53c34db279cbe4a305d58969beb1f26ff3d19Daniel Veillard * are interned. 36103a53c34db279cbe4a305d58969beb1f26ff3d19Daniel Veillard */ 36203a53c34db279cbe4a305d58969beb1f26ff3d19Daniel Veillard ctxt->dictNames = 0; 3635841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 3641d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard ctxt->myDoc = xmlNewDoc(BAD_CAST XML_DEFAULT_VERSION); 3655841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (ctxt->myDoc == NULL) { 3665841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlFreeParserCtxt(ctxt); 367dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(NULL, XML_ERR_INTERNAL_ERROR, 3685841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard "xmlNewTextWriterDoc : error at xmlNewDoc!\n"); 3695841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return NULL; 3705841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 3715841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 3725841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ret = xmlNewTextWriterPushParser(ctxt, compression); 3735841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (ret == NULL) { 374dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(NULL, XML_ERR_INTERNAL_ERROR, 3755841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard "xmlNewTextWriterDoc : error at xmlNewTextWriterPushParser!\n"); 3765841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return NULL; 3775841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 3785841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 379500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlSetDocCompressMode(ctxt->myDoc, compression); 380500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 381a521d287516f2dc93a8fe540c5883ffc39cb5024Daniel Veillard if (doc != NULL) { 382500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard *doc = ctxt->myDoc; 383a521d287516f2dc93a8fe540c5883ffc39cb5024Daniel Veillard ret->no_doc_free = 1; 384a521d287516f2dc93a8fe540c5883ffc39cb5024Daniel Veillard } 3855841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 3865841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return ret; 3875841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard} 3885841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 3895841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 3905841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlNewTextWriterTree: 3915841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @doc: xmlDocPtr 3925841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @node: xmlNodePtr or NULL for doc->children 3935841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @compression: compress the output? 3945841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 3955841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Create a new xmlNewTextWriter structure with @doc as output 3965841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * starting at @node 3975841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 3985841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the new xmlTextWriterPtr or NULL in case of error 3995841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 4005841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel VeillardxmlTextWriterPtr 4015841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel VeillardxmlNewTextWriterTree(xmlDocPtr doc, xmlNodePtr node, int compression) 4025841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard{ 4035841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlTextWriterPtr ret; 4045841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlSAXHandler saxHandler; 4055841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlParserCtxtPtr ctxt; 4065841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 4075841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (doc == NULL) { 408dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(NULL, XML_ERR_INTERNAL_ERROR, 409500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard "xmlNewTextWriterTree : invalid document tree!\n"); 4105841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return NULL; 4115841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 4125841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 4135841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard memset(&saxHandler, '\0', sizeof(saxHandler)); 4145841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlSAX2InitDefaultSAXHandler(&saxHandler, 1); 4155841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard saxHandler.startDocument = xmlTextWriterStartDocumentCallback; 4165841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard saxHandler.startElement = xmlSAX2StartElement; 4175841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard saxHandler.endElement = xmlSAX2EndElement; 4185841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 4195841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt = xmlCreatePushParserCtxt(&saxHandler, NULL, NULL, 0, NULL); 4205841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (ctxt == NULL) { 421dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(NULL, XML_ERR_INTERNAL_ERROR, 4225841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard "xmlNewTextWriterDoc : error at xmlCreatePushParserCtxt!\n"); 4235841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return NULL; 4245841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 42503a53c34db279cbe4a305d58969beb1f26ff3d19Daniel Veillard /* 42603a53c34db279cbe4a305d58969beb1f26ff3d19Daniel Veillard * For some reason this seems to completely break if node names 42703a53c34db279cbe4a305d58969beb1f26ff3d19Daniel Veillard * are interned. 42803a53c34db279cbe4a305d58969beb1f26ff3d19Daniel Veillard */ 42903a53c34db279cbe4a305d58969beb1f26ff3d19Daniel Veillard ctxt->dictNames = 0; 4305841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 4315841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ret = xmlNewTextWriterPushParser(ctxt, compression); 4325841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (ret == NULL) { 433500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlFreeParserCtxt(ctxt); 434dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(NULL, XML_ERR_INTERNAL_ERROR, 4355841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard "xmlNewTextWriterDoc : error at xmlNewTextWriterPushParser!\n"); 4365841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return NULL; 4375841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 4385841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 439500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard ctxt->myDoc = doc; 440500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard ctxt->node = node; 441a521d287516f2dc93a8fe540c5883ffc39cb5024Daniel Veillard ret->no_doc_free = 1; 442500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 4435841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlSetDocCompressMode(doc, compression); 4445841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 4455841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return ret; 4465841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard} 4475841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 4485841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 4491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlFreeTextWriter: 4501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 4511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 4521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Deallocate all the resources associated to the writer 4531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 4541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardvoid 4551d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlFreeTextWriter(xmlTextWriterPtr writer) 4561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 4571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 4581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return; 4591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 4601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer->out != NULL) 4611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlOutputBufferClose(writer->out); 4621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 4631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer->nodes != NULL) 4641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListDelete(writer->nodes); 4651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 4661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer->nsstack != NULL) 4671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListDelete(writer->nsstack); 4681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 469a521d287516f2dc93a8fe540c5883ffc39cb5024Daniel Veillard if (writer->ctxt != NULL) { 470a521d287516f2dc93a8fe540c5883ffc39cb5024Daniel Veillard if ((writer->ctxt->myDoc != NULL) && (writer->no_doc_free == 0)) { 471a521d287516f2dc93a8fe540c5883ffc39cb5024Daniel Veillard xmlFreeDoc(writer->ctxt->myDoc); 472a521d287516f2dc93a8fe540c5883ffc39cb5024Daniel Veillard writer->ctxt->myDoc = NULL; 473a521d287516f2dc93a8fe540c5883ffc39cb5024Daniel Veillard } 47420c5e7878d462bfd93aa4eede7f1f5faabd377feDaniel Veillard xmlFreeParserCtxt(writer->ctxt); 475a521d287516f2dc93a8fe540c5883ffc39cb5024Daniel Veillard } 47620c5e7878d462bfd93aa4eede7f1f5faabd377feDaniel Veillard 4774773df2a58be83e1b9b1b55840371acf37386820Daniel Veillard if (writer->ichar != NULL) 4784773df2a58be83e1b9b1b55840371acf37386820Daniel Veillard xmlFree(writer->ichar); 4791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(writer); 4801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 4811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 4821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 4831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterStartDocument: 4841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 4851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @version: the xml version ("1.0") or NULL for default ("1.0") 4861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @encoding: the encoding or NULL for default 4871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @standalone: "yes" or "no" or NULL for default 4881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 4891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Start a new xml document 4901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 4911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 4921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 4931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 4941d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterStartDocument(xmlTextWriterPtr writer, const char *version, 4951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *encoding, const char *standalone) 4961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 4971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 4981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 4991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 5001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlCharEncodingHandlerPtr encoder; 5011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 502500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if ((writer == NULL) || (writer->out == NULL)) { 503dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR, 504500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard "xmlTextWriterStartDocument : invalid writer!\n"); 5051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 506500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 5071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 5081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 5091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if ((lk != NULL) && (xmlLinkGetData(lk) != NULL)) { 510dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR, 511500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard "xmlTextWriterStartDocument : not allowed in this context!\n"); 5121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 5131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 5141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 5151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard encoder = NULL; 5161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (encoding != NULL) { 5171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard encoder = xmlFindCharEncodingHandler(encoding); 5181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (encoder == NULL) { 519dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY, 5201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartDocument : out of memory!\n"); 5211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 5221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 5231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 5241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 5251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard writer->out->encoder = encoder; 5261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (encoder != NULL) { 5271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard writer->out->conv = xmlBufferCreateSize(4000); 5281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlCharEncOutFunc(encoder, writer->out->conv, NULL); 5291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } else 5301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard writer->out->conv = NULL; 5311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 5321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 5331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "<?xml version="); 5341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 5351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 5361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 5371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 5381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 5391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 5401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 5411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (version != 0) 5421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, version); 5431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard else 5441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "1.0"); 5451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 5461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 5471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 5481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 5491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 5501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 5511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 5521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer->out->encoder != 0) { 5531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " encoding="); 5541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 5551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 5561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 5571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 5581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 5591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 5601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 5611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = 5621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlOutputBufferWriteString(writer->out, 5631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard writer->out->encoder->name); 5641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 5651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 5661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 5671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 5681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 5691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 5701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 5711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 5721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 5731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (standalone != 0) { 5741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " standalone="); 5751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 5761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 5771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 5781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 5791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 5801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 5811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 5821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, standalone); 5831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 5841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 5851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 5861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 5871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 5881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 5891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 5901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 5911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 5921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "?>\n"); 5931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 5941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 5951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 5961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 5971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 5981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 5991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 6001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 6011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterEndDocument: 6021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 6031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 6041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * End an xml document. All open elements are closed 6051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 6061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 6071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 6081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 6091d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterEndDocument(xmlTextWriterPtr writer) 6101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 6111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 6121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 6131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 6141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 6151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 616500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (writer == NULL) { 617dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR, 618500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard "xmlTextWriterEndDocument : invalid writer!\n"); 6191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 620500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 6211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 6221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 6231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard while ((lk = xmlListFront(writer->nodes)) != NULL) { 6241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 6251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) 6261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 6271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 6281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NAME: 6291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_ATTRIBUTE: 6301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_TEXT: 6311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndElement(writer); 6321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 6331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 6341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 6351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 6361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI: 6371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI_TEXT: 6381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndPI(writer); 6391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 6401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 6411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 6421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 6431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_CDATA: 6441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndCDATA(writer); 6451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 6461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 6471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 6481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 6491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_DTD: 650500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_TEXT: 651500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_ELEM: 652500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_ELEM_TEXT: 653500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_ATTL: 654500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_ATTL_TEXT: 655500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_ENTY: 656500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_ENTY_TEXT: 657500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_PENT: 6581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndDTD(writer); 6591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 6601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 6611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 6621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 663ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard case XML_TEXTWRITER_COMMENT: 664ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard count = xmlTextWriterEndComment(writer); 665ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard if (count < 0) 666ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return -1; 667ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard sum += count; 668ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard break; 6691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 670ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard break; 6711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 6721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 6731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 6742cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard if (!writer->indent) { 675ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "\n"); 676ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard if (count < 0) 677ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return -1; 678ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard sum += count; 679ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard } 680ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return sum; 681ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard} 682ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard 683ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard/** 684ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard * xmlTextWriterStartComment: 685ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard * @writer: the xmlTextWriterPtr 686ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard * 687ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard * Start an xml comment. 688ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard * 689ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 690ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard */ 691ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillardint 692ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel VeillardxmlTextWriterStartComment(xmlTextWriterPtr writer) 693ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard{ 694ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard int count; 695ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard int sum; 696ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard xmlLinkPtr lk; 697ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard xmlTextWriterStackEntry *p; 698ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard 699500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (writer == NULL) { 700dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR, 701500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard "xmlTextWriterStartComment : invalid writer!\n"); 702ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return -1; 703500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 704ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard 705ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard sum = 0; 706ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard lk = xmlListFront(writer->nodes); 707ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard if (lk != 0) { 708ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 709ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard if (p != 0) { 710ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard switch (p->state) { 711ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard case XML_TEXTWRITER_TEXT: 712ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard case XML_TEXTWRITER_NONE: 713ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard break; 714ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard case XML_TEXTWRITER_NAME: 715ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, ">"); 716ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard if (count < 0) 717ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return -1; 718ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard sum += count; 719500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (writer->indent) { 720500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = 721500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlOutputBufferWriteString(writer->out, "\n"); 722500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 723500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 724500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 725500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 726ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard p->state = XML_TEXTWRITER_TEXT; 727ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard break; 728ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard default: 729ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return -1; 730ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard } 731ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard } 732ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard } 733ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard 734ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard p = (xmlTextWriterStackEntry *) 735ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard xmlMalloc(sizeof(xmlTextWriterStackEntry)); 736ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard if (p == 0) { 737dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY, 738ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard "xmlTextWriterStartElement : out of memory!\n"); 739ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return -1; 740ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard } 741ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard 742ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard p->name = 0; 743ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard p->state = XML_TEXTWRITER_COMMENT; 744ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard 745ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard xmlListPushFront(writer->nodes, p); 746ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard 747ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard if (writer->indent) { 748ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard count = xmlTextWriterWriteIndent(writer); 749ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard if (count < 0) 750ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return -1; 751ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard sum += count; 752ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard } 753ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard 754ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "<!--"); 755ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard if (count < 0) 7565841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return -1; 7575841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard sum += count; 758ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard 759ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return sum; 760ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard} 761ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard 762ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard/** 763ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard * xmlTextWriterEndComment: 764ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard * @writer: the xmlTextWriterPtr 765ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard * 766ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard * End the current xml coment. 767ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard * 768ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 769ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard */ 770ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillardint 771ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel VeillardxmlTextWriterEndComment(xmlTextWriterPtr writer) 772ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard{ 773ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard int count; 774ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard int sum; 775ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard xmlLinkPtr lk; 776ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard xmlTextWriterStackEntry *p; 777ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard 778500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (writer == NULL) { 779dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR, 780500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard "xmlTextWriterEndComment : invalid writer!\n"); 781ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return -1; 782500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 783ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard 784ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard lk = xmlListFront(writer->nodes); 785500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (lk == 0) { 786dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR, 787500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard "xmlTextWriterEndComment : not allowed in this context!\n"); 788ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return -1; 789500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 790ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard 791ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 792ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard if (p == 0) 793ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return -1; 794ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard 795ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard sum = 0; 796ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard switch (p->state) { 797ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard case XML_TEXTWRITER_COMMENT: 798ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "-->"); 799ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard if (count < 0) 800ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return -1; 801ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard sum += count; 802ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard break; 803ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard default: 804ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return -1; 805ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard } 806ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard 807ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard if (writer->indent) { 808ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "\n"); 809ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard if (count < 0) 810ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return -1; 811ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard sum += count; 8122cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard } 813ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard 814ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard xmlListPopFront(writer->nodes); 8151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 8161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 8171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 8181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 8191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteFormatComment: 8201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 8211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 8221d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard * @...: extra parameters for the format 8231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 8241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write an xml comment. 8251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 8261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 8271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 8281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 8291d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteFormatComment(xmlTextWriterPtr writer, 8301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, ...) 8311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 8321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 8331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list ap; 8341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 8351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_start(ap, format); 8361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 8371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteVFormatComment(writer, format, ap); 8381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 8391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_end(ap); 8401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 8411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 8421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 8431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 8441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteVFormatComment: 8451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 8461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 8471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 8481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 8491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write an xml comment. 8501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 8511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 8521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 8531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 8541d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteVFormatComment(xmlTextWriterPtr writer, 8551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, va_list argptr) 8561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 8571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 8581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 8591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 860500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (writer == NULL) { 861dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR, 862500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard "xmlTextWriterWriteVFormatComment : invalid writer!\n"); 8631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 864500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 8651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 8661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlTextWriterVSprintf(format, argptr); 8671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == 0) 8681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 8691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 8701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteComment(writer, buf); 8711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 8721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 8731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 8741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 8751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 8761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 8771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteComment: 8781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 8791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @content: comment string 8801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 8811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write an xml comment. 8821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 8831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 8841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 8851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 8861d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteComment(xmlTextWriterPtr writer, const xmlChar * content) 8871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 8881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 8891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 8901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 8911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 892ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard count = xmlTextWriterStartComment(writer); 8931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 8941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 8951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 896ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard count = xmlTextWriterWriteString(writer, content); 8971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 8981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 8991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 900ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard count = xmlTextWriterEndComment(writer); 9011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 9021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 9031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 9041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 9051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 9061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 9071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 9081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 9091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterStartElement: 9101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 9111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: element name 9121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 9131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Start an xml element. 9141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 9151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 9161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 9171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 9181d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterStartElement(xmlTextWriterPtr writer, const xmlChar * name) 9191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 9201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 9211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 9221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 9231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 9241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 9251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if ((writer == NULL) || (name == NULL) || (*name == '\0')) 9261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 9271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 9281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 9291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 9301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk != 0) { 9311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 9321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p != 0) { 9331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 9341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI: 9351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI_TEXT: 9361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 9371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NONE: 9381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 9391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NAME: 9401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, ">"); 9411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 9421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 9431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 944ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard if (writer->indent) 945ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard count = 946ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard xmlOutputBufferWriteString(writer->out, "\n"); 9471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_TEXT; 9481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 949ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard default: 950ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard break; 9511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 9521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 9531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 9541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 9551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) 9561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlMalloc(sizeof(xmlTextWriterStackEntry)); 9571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) { 958dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY, 9591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartElement : out of memory!\n"); 9601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 9611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 9621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 9631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->name = xmlStrdup(name); 9641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p->name == 0) { 965dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY, 9661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartElement : out of memory!\n"); 9671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(p); 9681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 9691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 9701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_NAME; 9711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 9721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPushFront(writer->nodes, p); 9731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 974ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard if (writer->indent) { 975ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard count = xmlTextWriterWriteIndent(writer); 976ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard sum += count; 9772cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard } 9782cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard 9791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "<"); 9801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 9811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 9821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 9835841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard count = 9845841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlOutputBufferWriteString(writer->out, (const char *) p->name); 9851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 9861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 9871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 9881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 9891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 9901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 9911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 9921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 9931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterStartElementNS: 9941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 9951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @prefix: namespace prefix or NULL 9961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: element local name 9971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @namespaceURI: namespace URI or NULL 9981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 9991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Start an xml element with namespace support. 10001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 10011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 10021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 10031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 10041d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterStartElementNS(xmlTextWriterPtr writer, 10051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * prefix, const xmlChar * name, 10061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * namespaceURI) 10071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 10081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 10091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 10101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 10111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 10121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if ((writer == NULL) || (name == NULL) || (*name == '\0')) 10131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 10141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 10151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = 0; 10161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (prefix != 0) { 10171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrdup(prefix); 10181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrcat(buf, BAD_CAST ":"); 10191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 10201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrcat(buf, name); 10211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 10221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 10231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterStartElement(writer, buf); 10241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 10251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 10261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 10271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 10281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 10291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (namespaceURI != 0) { 10301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrdup(BAD_CAST "xmlns"); 10311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (prefix != 0) { 10321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrcat(buf, BAD_CAST ":"); 10331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrcat(buf, prefix); 10341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 10351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 10361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteAttribute(writer, buf, namespaceURI); 10371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 10381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 10391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 10401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 10411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 10421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 10431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 10441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 10451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 10461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 10471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterEndElement: 10481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 10491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 10501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * End the current xml element. 10511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 10521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 10531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 10541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 10551d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterEndElement(xmlTextWriterPtr writer) 10561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 10571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 10581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 10591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 10601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 10611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 10621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 10631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 10641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 10651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 10661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk == 0) 10671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 10681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 10691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 10701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) 10711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 10721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 10731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 10741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 10751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_ATTRIBUTE: 10761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndAttribute(writer); 10771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 10781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 10791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 10801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard /* fallthrough */ 10811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NAME: 1082ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard if (writer->indent) /* next element needs indent */ 1083ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard writer->doindent = 1; 10841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "/>"); 10851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 10861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 10871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 10881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 10891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_TEXT: 1090ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard if ((writer->indent) && (writer->doindent)) { 1091ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard count = xmlTextWriterWriteIndent(writer); 1092ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard sum += count; 1093ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard writer->doindent = 1; 1094ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard } else 1095ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard writer->doindent = 1; 10961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "</"); 10971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 10981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 10991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 11001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, 1101ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard (const char *) p->name); 11021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 11031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 11041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 11051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, ">"); 11061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 11071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 11081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 11091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 11101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 11111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 11121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 11131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 11142cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard if (writer->indent) { 1115ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "\n"); 1116ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard sum += count; 11172cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard } 11182cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard 11191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPopFront(writer->nodes); 11201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 11211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 11221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 11231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 11241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterFullEndElement: 11251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 11261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 11271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * End the current xml element. Writes an end tag even if the element is empty 11281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 11291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 11301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 11311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 11321d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterFullEndElement(xmlTextWriterPtr writer) 11331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 11341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 11351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 11361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 11371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 11381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 11391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 11401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 11411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 11421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 11431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk == 0) 11441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 11451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 11461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 11471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) 11481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 11491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 11501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 11511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 11521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_ATTRIBUTE: 11531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndAttribute(writer); 11541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 11551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 11561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 11571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard /* fallthrough */ 11581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NAME: 11591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, ">"); 11601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 11611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 11621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 11631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard /* fallthrough */ 11641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_TEXT: 11651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "</"); 11661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 11671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 11681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 11691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, 1170ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard (const char *) p->name); 11711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 11721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 11731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 11741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, ">"); 11751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 11761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 11771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 11781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 11791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 11801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 11811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 11821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 11831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPopFront(writer->nodes); 11841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 11851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 11861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 11871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 11881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteFormatRaw: 11891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 11901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 11911d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard * @...: extra parameters for the format 11921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 11931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted raw xml text. 11941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 11951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 11961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 11971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 11981d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteFormatRaw(xmlTextWriterPtr writer, const char *format, 11991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ...) 12001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 12011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 12021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list ap; 12031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 12041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_start(ap, format); 12051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 12061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteVFormatRaw(writer, format, ap); 12071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 12081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_end(ap); 12091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 12101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 12111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 12121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 12131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteVFormatRaw: 12141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 12151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 12161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 12171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 12181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted raw xml text. 12191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 12201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 12211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 12221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 12231d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteVFormatRaw(xmlTextWriterPtr writer, const char *format, 12241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list argptr) 12251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 12261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 12271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 12281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 12291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 12301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 12311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 12321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlTextWriterVSprintf(format, argptr); 12331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == 0) 12341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 12351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 12361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteRaw(writer, buf); 12371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 12381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 12391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 12401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 12411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 12421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 12431e90661bb817402f85103c3b9d3ce6ebab570f38Daniel Veillard * xmlTextWriterWriteRawLen: 12441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 12451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @content: text string 12461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @len: length of the text string 12471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 12481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write an xml text. 12491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * TODO: what about entities and special chars?? 12501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 12511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 12521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 12531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 12541d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteRawLen(xmlTextWriterPtr writer, const xmlChar * content, 12551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int len) 12561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 12571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 12581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 12591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 12601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 12611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1262500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (writer == NULL) { 1263dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR, 1264500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard "xmlTextWriterWriteRawLen : invalid writer!\n"); 12651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 1266500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 12671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1268e43cc574e49cd8173e157d8c31973f709a4cb7ecDaniel Veillard if ((content == NULL) || (len < 0)) { 1269dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR, 1270500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard "xmlTextWriterWriteRawLen : invalid content!\n"); 1271500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 1272500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 12731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 12741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 1275500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard lk = xmlListFront(writer->nodes); 1276500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (lk != 0) { 1277500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 1278500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlTextWriterHandleStateDependencies(writer, p); 1279500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 12801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 1281500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 12821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 12831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1284500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (writer->indent) 1285500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard writer->doindent = 0; 1286500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 1287500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (content != NULL) { 1288500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = 1289500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlOutputBufferWrite(writer->out, len, (const char *) content); 1290500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 1291500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 1292500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 1293500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 12941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 12951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 12961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 12971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 12981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 12991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteRaw: 13001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 13011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @content: text string 13021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 13031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a raw xml text. 13041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 13051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 13061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 13071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 13081d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteRaw(xmlTextWriterPtr writer, const xmlChar * content) 13091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 13101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return xmlTextWriterWriteRawLen(writer, content, xmlStrlen(content)); 13111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 13121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 13131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 13141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteFormatString: 13151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 13161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 13171d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard * @...: extra parameters for the format 13181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 13191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted xml text. 13201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 13211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 13221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 13231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 13241d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteFormatString(xmlTextWriterPtr writer, const char *format, 13251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ...) 13261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 13271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 13281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list ap; 13291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1330e43cc574e49cd8173e157d8c31973f709a4cb7ecDaniel Veillard if ((writer == NULL) || (format == NULL)) 1331e43cc574e49cd8173e157d8c31973f709a4cb7ecDaniel Veillard return -1; 1332e43cc574e49cd8173e157d8c31973f709a4cb7ecDaniel Veillard 13331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_start(ap, format); 13341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 13351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteVFormatString(writer, format, ap); 13361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 13371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_end(ap); 13381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 13391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 13401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 13411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 13421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteVFormatString: 13431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 13441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 13451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 13461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 13471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted xml text. 13481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 13491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 13501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 13511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 13521d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteVFormatString(xmlTextWriterPtr writer, 13531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, va_list argptr) 13541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 13551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 13561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 13571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1358e43cc574e49cd8173e157d8c31973f709a4cb7ecDaniel Veillard if ((writer == NULL) || (format == NULL)) 13591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 13601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 13611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlTextWriterVSprintf(format, argptr); 13621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == 0) 13631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 13641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 13651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteString(writer, buf); 13661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 13671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 13681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 13691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 13701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 13711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 13721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteString: 13731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 13741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @content: text string 13751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 13761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write an xml text. 13771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 13781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 13791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 13801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 13811d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteString(xmlTextWriterPtr writer, const xmlChar * content) 13821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 1383500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard int count; 13841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 13851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 13861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 1387500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlChar *buf; 13881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1389e43cc574e49cd8173e157d8c31973f709a4cb7ecDaniel Veillard if ((writer == NULL) || (content == NULL)) 13901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 13911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 13921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 1393500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard buf = (xmlChar *) content; 1394500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard lk = xmlListFront(writer->nodes); 1395500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (lk != 0) { 1396500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 1397500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (p != 0) { 1398500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard switch (p->state) { 1399500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_NAME: 1400500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_TEXT: 140162040be3602d66ce983dcb22017af4ccc5d8276dDaniel Veillard#if 0 140262040be3602d66ce983dcb22017af4ccc5d8276dDaniel Veillard buf = NULL; 140362040be3602d66ce983dcb22017af4ccc5d8276dDaniel Veillard xmlOutputBufferWriteEscape(writer->out, content, NULL); 140462040be3602d66ce983dcb22017af4ccc5d8276dDaniel Veillard#endif 1405500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard buf = xmlEncodeSpecialChars(NULL, content); 1406500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard break; 1407500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_ATTRIBUTE: 1408500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard buf = NULL; 1409500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlAttrSerializeTxtContent(writer->out->buffer, NULL, 1410500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard NULL, content); 1411500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard break; 141287640d5f14e7ce8b9844b886c765af0c56de5ca5William M. Brack default: 141387640d5f14e7ce8b9844b886c765af0c56de5ca5William M. Brack break; 1414500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 1415500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 14161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 14171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1418500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (buf != NULL) { 1419500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlTextWriterWriteRaw(writer, buf); 1420500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 1421500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 1422500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 1423751c9ec657e784bd941802d722632f19f17f17aeDaniel Veillard 1424500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (buf != content) /* buf was allocated by us, so free it */ 1425500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlFree(buf); 1426a9c612c3ee115278fb8dc0cac1b2f2e362f0c052William M. Brack } 14271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 14281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 14291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 14301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 14311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 14321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlOutputBufferWriteBase64: 14331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @out: the xmlOutputBufferPtr 14341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @data: binary data 14351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @len: the number of bytes to encode 14361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 14371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write base64 encoded data to an xmlOutputBuffer. 14381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Adapted from John Walker's base64.c (http://www.fourmilab.ch/). 14391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 14401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 14411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 14421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic int 14431d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlOutputBufferWriteBase64(xmlOutputBufferPtr out, int len, 14441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const unsigned char *data) 14451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 14461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard static unsigned char dtable[64] = 144747a318840053e03e60acb437f41e63366f44852cWilliam M. Brack {'A','B','C','D','E','F','G','H','I','J','K','L','M', 144847a318840053e03e60acb437f41e63366f44852cWilliam M. Brack 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z', 144947a318840053e03e60acb437f41e63366f44852cWilliam M. Brack 'a','b','c','d','e','f','g','h','i','j','k','l','m', 145047a318840053e03e60acb437f41e63366f44852cWilliam M. Brack 'n','o','p','q','r','s','t','u','v','w','x','y','z', 145147a318840053e03e60acb437f41e63366f44852cWilliam M. Brack '0','1','2','3','4','5','6','7','8','9','+','/'}; 145247a318840053e03e60acb437f41e63366f44852cWilliam M. Brack 14531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int i; 14541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int linelen; 14551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 14561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 14571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1458e43cc574e49cd8173e157d8c31973f709a4cb7ecDaniel Veillard if ((out == NULL) || (len < 0) || (data == NULL)) 1459e43cc574e49cd8173e157d8c31973f709a4cb7ecDaniel Veillard return(-1); 1460e43cc574e49cd8173e157d8c31973f709a4cb7ecDaniel Veillard 14611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard linelen = 0; 14621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 14631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 14641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard i = 0; 14651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard while (1) { 14661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard unsigned char igroup[3]; 14671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard unsigned char ogroup[4]; 14681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int c; 14691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int n; 14701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 14711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard igroup[0] = igroup[1] = igroup[2] = 0; 14721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard for (n = 0; n < 3 && i < len; n++, i++) { 14731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard c = data[i]; 14741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard igroup[n] = (unsigned char) c; 14751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 14761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 14771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (n > 0) { 14781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ogroup[0] = dtable[igroup[0] >> 2]; 14791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ogroup[1] = dtable[((igroup[0] & 3) << 4) | (igroup[1] >> 4)]; 14801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ogroup[2] = 14811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard dtable[((igroup[1] & 0xF) << 2) | (igroup[2] >> 6)]; 14821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ogroup[3] = dtable[igroup[2] & 0x3F]; 14831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 14841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (n < 3) { 14851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ogroup[3] = '='; 14861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (n < 2) { 14871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ogroup[2] = '='; 14881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 14891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 14901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 14911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (linelen >= B64LINELEN) { 14921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(out, 2, B64CRLF); 14931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 14941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 14951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 14961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard linelen = 0; 14971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 14981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(out, 4, (const char *) ogroup); 14991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 15001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 15011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 15021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 15031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard linelen += 4; 15041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 1505929714b707a2d793cd78b033bfacb56fbaea3e36Daniel Veillard 1506929714b707a2d793cd78b033bfacb56fbaea3e36Daniel Veillard if (i >= len) 1507929714b707a2d793cd78b033bfacb56fbaea3e36Daniel Veillard break; 15081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 15091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 15101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 15111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 15121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 15131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 15141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteBase64: 15151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 15161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @data: binary data 15171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @start: the position within the data of the first byte to encode 15181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @len: the number of bytes to encode 15191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 15201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write an base64 encoded xml text. 15211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 15221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 15231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 15241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 1525ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel VeillardxmlTextWriterWriteBase64(xmlTextWriterPtr writer, const char *data, 15261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int start, int len) 15271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 15281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 15291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 15301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 15311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 15321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1533e43cc574e49cd8173e157d8c31973f709a4cb7ecDaniel Veillard if ((writer == NULL) || (data == NULL) || (start < 0) || (len < 0)) 15341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 15351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 15361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 1537500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard lk = xmlListFront(writer->nodes); 1538500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (lk != 0) { 1539500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 1540500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (p != 0) { 1541500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlTextWriterHandleStateDependencies(writer, p); 15421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 15431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 15441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 1545500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 15461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 15471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1548ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard if (writer->indent) 1549ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard writer->doindent = 0; 1550ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard 15511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = 15521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlOutputBufferWriteBase64(writer->out, len, 15531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard (unsigned char *) data + start); 15541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 15551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 15561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 15571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 15581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 15591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 15601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 15611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 15621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlOutputBufferWriteBinHex: 15631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @out: the xmlOutputBufferPtr 15641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @data: binary data 15651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @len: the number of bytes to encode 15661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 15671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write hqx encoded data to an xmlOutputBuffer. 15681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * ::todo 15691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 157047a318840053e03e60acb437f41e63366f44852cWilliam M. Brack * Returns the bytes written (may be 0 because of buffering) 157147a318840053e03e60acb437f41e63366f44852cWilliam M. Brack * or -1 in case of error 15721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 15731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic int 1574ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel VeillardxmlOutputBufferWriteBinHex(xmlOutputBufferPtr out, 1575ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard int len, const unsigned char *data) 15761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 1577ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard int count; 1578ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard int sum; 157947a318840053e03e60acb437f41e63366f44852cWilliam M. Brack static char hex[16] = 158047a318840053e03e60acb437f41e63366f44852cWilliam M. Brack {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'}; 1581ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard int i; 1582ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard 1583e43cc574e49cd8173e157d8c31973f709a4cb7ecDaniel Veillard if ((out == NULL) || (data == NULL) || (len < 0)) { 1584ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return -1; 1585ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard } 1586ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard 1587ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard sum = 0; 1588ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard for (i = 0; i < len; i++) { 1589ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard count = 1590ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard xmlOutputBufferWrite(out, 1, 1591ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard (const char *) &hex[data[i] >> 4]); 1592ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard if (count == -1) 1593ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return -1; 1594ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard sum += count; 1595ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard count = 1596ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard xmlOutputBufferWrite(out, 1, 1597ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard (const char *) &hex[data[i] & 0xF]); 1598ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard if (count == -1) 1599ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return -1; 1600ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard sum += count; 1601ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard } 1602ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard 1603ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return sum; 16041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 16051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 16061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 16071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteBinHex: 16081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 16091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @data: binary data 16101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @start: the position within the data of the first byte to encode 16111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @len: the number of bytes to encode 16121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 16131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a BinHex encoded xml text. 16141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 16151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 16161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 16171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 1618ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel VeillardxmlTextWriterWriteBinHex(xmlTextWriterPtr writer, const char *data, 16191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int start, int len) 16201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 16211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 16221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 16231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 16241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 16251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1626e43cc574e49cd8173e157d8c31973f709a4cb7ecDaniel Veillard if ((writer == NULL) || (data == NULL) || (start < 0) || (len < 0)) 16271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 16281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 16291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 1630500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard lk = xmlListFront(writer->nodes); 1631500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (lk != 0) { 1632500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 1633500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (p != 0) { 1634500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlTextWriterHandleStateDependencies(writer, p); 16351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 16361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 16371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 1638500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 16391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 16401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 1641ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard if (writer->indent) 1642ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard writer->doindent = 0; 1643ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard 16441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = 16451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlOutputBufferWriteBinHex(writer->out, len, 16461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard (unsigned char *) data + start); 16471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 16481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 16491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 16501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 16511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 16521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 16531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 16541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 16551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterStartAttribute: 16561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 16571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: element name 16581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 16591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Start an xml attribute. 16601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 16611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 16621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 16631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 16641d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterStartAttribute(xmlTextWriterPtr writer, const xmlChar * name) 16651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 16661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 16671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 16681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 16691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 16701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 16711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if ((writer == NULL) || (name == NULL) || (*name == '\0')) 16721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 16731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 16741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 16751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 16761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk == 0) 16771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 16781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 16791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 16801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) 16811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 16821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 16831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 16841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_ATTRIBUTE: 16851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndAttribute(writer); 16861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 16871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 16881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 16891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard /* fallthrough */ 16901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NAME: 16911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " "); 16921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 16931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 16941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 16955841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard count = 16965841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlOutputBufferWriteString(writer->out, 16975841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard (const char *) name); 16981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 16991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 17001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 17011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "="); 17021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 17031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 17041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 17051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 17061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 17071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 17081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 17091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_ATTRIBUTE; 17101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 17111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 17121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 17131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 17141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 17151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 17161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 17171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 17181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 17191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterStartAttributeNS: 17201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 17211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @prefix: namespace prefix or NULL 17221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: element local name 17231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @namespaceURI: namespace URI or NULL 17241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 17251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Start an xml attribute with namespace support. 17261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 17271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 17281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 17291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 17301d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterStartAttributeNS(xmlTextWriterPtr writer, 17311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * prefix, const xmlChar * name, 17321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * namespaceURI) 17331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 17341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 17351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 17361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 17371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterNsStackEntry *p; 17381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 17391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if ((writer == NULL) || (name == NULL) || (*name == '\0')) 17401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 17411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 17421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = 0; 17431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (prefix != 0) { 17441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrdup(prefix); 17451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrcat(buf, BAD_CAST ":"); 17461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 17471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrcat(buf, name); 17481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 17491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 17501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterStartAttribute(writer, buf); 17511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 17521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 17531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 17541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 17551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 17561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (namespaceURI != 0) { 17571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrdup(BAD_CAST "xmlns"); 17581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (prefix != 0) { 17591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrcat(buf, BAD_CAST ":"); 17601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrcat(buf, prefix); 17611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 17621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 17631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterNsStackEntry *) 17641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlMalloc(sizeof(xmlTextWriterNsStackEntry)); 17651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) { 1766dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY, 17671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartAttributeNS : out of memory!\n"); 17681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 17691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 17701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 17711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->prefix = buf; 17721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->uri = xmlStrdup(namespaceURI); 17731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p->uri == 0) { 1774dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY, 17751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartAttributeNS : out of memory!\n"); 17761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(p); 17771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 17781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 17791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->elem = xmlListFront(writer->nodes); 17801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 17811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPushFront(writer->nsstack, p); 17821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 17831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 17841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 17851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 17861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 17871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 17881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterEndAttribute: 17891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 17901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 17911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * End the current xml element. 17921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 17931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 17941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 17951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 17961d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterEndAttribute(xmlTextWriterPtr writer) 17971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 17981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 17991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 18001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 18011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 18021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterNsStackEntry *np; 18031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 18051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 18061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 18081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk == 0) { 18091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListDelete(writer->nsstack); 1810e43cc574e49cd8173e157d8c31973f709a4cb7ecDaniel Veillard writer->nsstack = NULL; 18111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 18121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 18131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 18151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) { 18161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListDelete(writer->nsstack); 1817e43cc574e49cd8173e157d8c31973f709a4cb7ecDaniel Veillard writer->nsstack = NULL; 18181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 18191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 18201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 18221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 18231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_ATTRIBUTE: 18241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_NAME; 18251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 18271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) { 18281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListDelete(writer->nsstack); 1829e43cc574e49cd8173e157d8c31973f709a4cb7ecDaniel Veillard writer->nsstack = NULL; 18301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 18311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 18321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 18331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard while (!xmlListEmpty(writer->nsstack)) { 18351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nsstack); 18361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard np = (xmlTextWriterNsStackEntry *) xmlLinkGetData(lk); 18371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (np != 0) { 18381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = 18391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterWriteAttribute(writer, np->prefix, 18401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard np->uri); 18411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) { 18421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListDelete(writer->nsstack); 1843e43cc574e49cd8173e157d8c31973f709a4cb7ecDaniel Veillard writer->nsstack = NULL; 18441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 18451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 18461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 18471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 18481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPopFront(writer->nsstack); 18501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 18511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 18521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 18541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListClear(writer->nsstack); 18551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 18561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 18571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 18591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 18601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 18621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteFormatAttribute: 18631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 18641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: attribute name 18651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 18661d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard * @...: extra parameters for the format 18671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 18681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted xml attribute. 18691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 18701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 18711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 18721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 18731d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteFormatAttribute(xmlTextWriterPtr writer, 18741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, const char *format, 18751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ...) 18761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 18771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 18781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list ap; 18791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_start(ap, format); 18811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteVFormatAttribute(writer, name, format, ap); 18831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_end(ap); 18851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 18861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 18871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 18881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 18891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteVFormatAttribute: 18901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 18911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: attribute name 18921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 18931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 18941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 18951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted xml attribute. 18961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 18971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 18981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 18991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 19001d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteVFormatAttribute(xmlTextWriterPtr writer, 19011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 19021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, va_list argptr) 19031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 19041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 19051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 19061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 19071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 19081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 19091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 19101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlTextWriterVSprintf(format, argptr); 19111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == 0) 19121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 19131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 19141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteAttribute(writer, name, buf); 19151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 19161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 19171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 19181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 19191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 19201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 19211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteAttribute: 19221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 19231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: attribute name 19241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @content: attribute content 19251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 19261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write an xml attribute. 19271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 19281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 19291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 19301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 19311d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteAttribute(xmlTextWriterPtr writer, const xmlChar * name, 19321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * content) 19331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 19341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 19351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 19361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 19371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 19381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterStartAttribute(writer, name); 19391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 19401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 19411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 19421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteString(writer, content); 19431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 19441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 19451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 19461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndAttribute(writer); 19471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 19481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 19491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 19501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 19511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 19521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 19531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 19541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 19551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteFormatAttributeNS: 19561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 19571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @prefix: namespace prefix 19581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: attribute local name 19591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @namespaceURI: namespace URI 19601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 19611d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard * @...: extra parameters for the format 19621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 19631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted xml attribute.with namespace support 19641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 19651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 19661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 19671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 19681d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteFormatAttributeNS(xmlTextWriterPtr writer, 19691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * prefix, 19701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 19711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * namespaceURI, 19721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, ...) 19731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 19741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 19751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list ap; 19761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 19771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_start(ap, format); 19781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 19791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteVFormatAttributeNS(writer, prefix, name, 19801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard namespaceURI, format, ap); 19811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 19821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_end(ap); 19831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 19841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 19851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 19861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 19871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteVFormatAttributeNS: 19881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 19891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @prefix: namespace prefix 19901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: attribute local name 19911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @namespaceURI: namespace URI 19921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 19931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 19941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 19951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted xml attribute.with namespace support 19961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 19971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 19981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 19991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 20001d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteVFormatAttributeNS(xmlTextWriterPtr writer, 20011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * prefix, 20021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 20031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * namespaceURI, 20041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, va_list argptr) 20051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 20061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 20071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 20081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 20091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 20101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 20111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 20121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlTextWriterVSprintf(format, argptr); 20131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == 0) 20141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 20151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 20161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteAttributeNS(writer, prefix, name, namespaceURI, 20171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf); 20181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 20191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 20201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 20211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 20221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 20231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 20241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteAttributeNS: 20251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 20261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @prefix: namespace prefix 20271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: attribute local name 20281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @namespaceURI: namespace URI 20291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @content: attribute content 20301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 20311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write an xml attribute. 20321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 20331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 20341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 20351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 20361d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteAttributeNS(xmlTextWriterPtr writer, 20371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * prefix, const xmlChar * name, 20381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * namespaceURI, 20391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * content) 20401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 20411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 20421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 20431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 20441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 20451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if ((writer == NULL) || (name == NULL) || (*name == '\0')) 20461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 20471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 20481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = 0; 20491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (prefix != NULL) { 20501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrdup(prefix); 20511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrcat(buf, BAD_CAST ":"); 20521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 20531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrcat(buf, name); 20541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 20551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 20561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteAttribute(writer, buf, content); 20571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 20581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 20591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 20601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 20611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 20621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (namespaceURI != NULL) { 20631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = 0; 20641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrdup(BAD_CAST "xmlns"); 20651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (prefix != NULL) { 20661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrcat(buf, BAD_CAST ":"); 20671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlStrcat(buf, prefix); 20681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 20691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteAttribute(writer, buf, namespaceURI); 20701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 20711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 20721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 20731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 20741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 20751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 20761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 20771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 20781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 20791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteFormatElement: 20801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 20811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: element name 20821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 20831d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard * @...: extra parameters for the format 20841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 20851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted xml element. 20861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 20871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 20881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 20891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 20901d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteFormatElement(xmlTextWriterPtr writer, 20911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, const char *format, 20921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ...) 20931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 20941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 20951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list ap; 20961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 20971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_start(ap, format); 20981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 20991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteVFormatElement(writer, name, format, ap); 21001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 21011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_end(ap); 21021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 21031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 21041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 21051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 21061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteVFormatElement: 21071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 21081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: element name 21091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 21101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 21111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 21121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted xml element. 21131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 21141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 21151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 21161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 21171d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteVFormatElement(xmlTextWriterPtr writer, 21181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, const char *format, 21191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list argptr) 21201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 21211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 21221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 21231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 21241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 21251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 21261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 21271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlTextWriterVSprintf(format, argptr); 21281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == 0) 21291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 21301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 21311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteElement(writer, name, buf); 21321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 21331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 21341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 21351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 21361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 21371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 21381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteElement: 21391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 21401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: element name 21411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @content: element content 21421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 21431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write an xml element. 21441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 21451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 21461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 21471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 21481d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteElement(xmlTextWriterPtr writer, const xmlChar * name, 21491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * content) 21501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 21511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 21521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 21531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 21541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 21551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterStartElement(writer, name); 21561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 21571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 21581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 21591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteString(writer, content); 21601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 21611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 21621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 21631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndElement(writer); 21641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 21651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 21661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 21671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 21681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 21691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 21701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 21711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 21721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteFormatElementNS: 21731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 21741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @prefix: namespace prefix 21751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: element local name 21761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @namespaceURI: namespace URI 21771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 21781d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard * @...: extra parameters for the format 21791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 21801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted xml element with namespace support. 21811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 21821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 21831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 21841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 21851d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteFormatElementNS(xmlTextWriterPtr writer, 21861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * prefix, 21871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 21881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * namespaceURI, 21891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, ...) 21901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 21911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 21921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list ap; 21931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 21941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_start(ap, format); 21951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 21961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteVFormatElementNS(writer, prefix, name, 21971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard namespaceURI, format, ap); 21981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 21991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_end(ap); 22001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 22011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 22021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 22031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 22041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteVFormatElementNS: 22051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 22061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @prefix: namespace prefix 22071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: element local name 22081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @namespaceURI: namespace URI 22091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 22101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 22111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 22121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted xml element with namespace support. 22131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 22141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 22151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 22161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 22171d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteVFormatElementNS(xmlTextWriterPtr writer, 22181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * prefix, 22191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 22201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * namespaceURI, 22211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, va_list argptr) 22221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 22231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 22241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 22251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 22261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 22271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 22281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 22291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlTextWriterVSprintf(format, argptr); 22301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == 0) 22311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 22321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 22331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteElementNS(writer, prefix, name, namespaceURI, 22341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf); 22351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 22361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 22371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 22381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 22391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 22401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 22411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteElementNS: 22421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 22431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @prefix: namespace prefix 22441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: element local name 22451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @namespaceURI: namespace URI 22461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @content: element content 22471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 22481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write an xml element with namespace support. 22491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 22501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 22511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 22521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 22531d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteElementNS(xmlTextWriterPtr writer, 22541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * prefix, const xmlChar * name, 22551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * namespaceURI, 22561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * content) 22571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 22581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 22591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 22601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 22611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if ((writer == NULL) || (name == NULL) || (*name == '\0')) 22621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 22631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 22641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 22651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = 22661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStartElementNS(writer, prefix, name, namespaceURI); 22671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 22681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 22691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 22701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteString(writer, content); 22711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 22721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 22731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 22741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndElement(writer); 22751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 22761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 22771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 22781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 22791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 22801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 22811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 22821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 22831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterStartPI: 22841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 22851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @target: PI target 22861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 22871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Start an xml PI. 22881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 22891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 22901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 22911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 22921d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterStartPI(xmlTextWriterPtr writer, const xmlChar * target) 22931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 22941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 22951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 22961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 22971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 22981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 22991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if ((writer == NULL) || (target == NULL) || (*target == '\0')) 23001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 23011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 23021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (xmlStrcasecmp(target, (const xmlChar *) "xml") == 0) { 2303dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR, 23041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartPI : target name [Xx][Mm][Ll] is reserved for xml standardization!\n"); 23051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 23061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 23071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 23081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 23091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 23101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk != 0) { 23111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 23121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p != 0) { 23131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 23141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_ATTRIBUTE: 23151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndAttribute(writer); 23161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 23171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 23181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 23191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard /* fallthrough */ 23201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NAME: 23211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, ">"); 23221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 23231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 23241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 23251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_TEXT; 23261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 2327ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard case XML_TEXTWRITER_NONE: 2328ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard case XML_TEXTWRITER_TEXT: 2329ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard case XML_TEXTWRITER_DTD: 2330ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard break; 23311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI: 23321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI_TEXT: 2333dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR, 23341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartPI : nested PI!\n"); 23351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 23361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 23371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 23381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 23391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 23401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 23411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 23421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) 23431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlMalloc(sizeof(xmlTextWriterStackEntry)); 23441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) { 2345dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY, 23461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartPI : out of memory!\n"); 23471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 23481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 23491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 23501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->name = xmlStrdup(target); 23511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p->name == 0) { 2352dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY, 23531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartPI : out of memory!\n"); 23541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(p); 23551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 23561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 23571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_PI; 23581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 23591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPushFront(writer->nodes, p); 23601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 23611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "<?"); 23621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 23631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 23641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 23655841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard count = 23665841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlOutputBufferWriteString(writer->out, (const char *) p->name); 23671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 23681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 23691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 23701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 23711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 23721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 23731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 23741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 23751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterEndPI: 23761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 23771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 23781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * End the current xml PI. 23791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 23801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 23811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 23821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 23831d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterEndPI(xmlTextWriterPtr writer) 23841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 23851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 23861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 23871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 23881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 23891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 23901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 23911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 23921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 23931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 23941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk == 0) 23951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 23961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 23971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 23981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) 23991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 24001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 24021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 24031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI: 24041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI_TEXT: 24051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "?>"); 24061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 24071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 24081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 24091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 24101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 24111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 24121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 24131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPopFront(writer->nodes); 24151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 24161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 24171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 24191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteFormatPI: 24201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 24211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @target: PI target 24221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 24231d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard * @...: extra parameters for the format 24241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 24251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted PI. 24261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 24271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 24281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 24291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 24301d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteFormatPI(xmlTextWriterPtr writer, const xmlChar * target, 24311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, ...) 24321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 24331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 24341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list ap; 24351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_start(ap, format); 24371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteVFormatPI(writer, target, format, ap); 24391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_end(ap); 24411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 24421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 24431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 24451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteVFormatPI: 24461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 24471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @target: PI target 24481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 24495841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 24501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 24511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted xml PI. 24521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 24531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 24541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 24551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 24561d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteVFormatPI(xmlTextWriterPtr writer, 24571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * target, const char *format, 24581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list argptr) 24591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 24601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 24611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 24621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 24641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 24651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlTextWriterVSprintf(format, argptr); 24671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == 0) 24681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 24691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWritePI(writer, target, buf); 24711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 24731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 24741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 24751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 24771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWritePI: 24781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 24791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @target: PI target 24801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @content: PI content 24811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 24821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write an xml PI. 24831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 24841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 24851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 24861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 24871d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWritePI(xmlTextWriterPtr writer, const xmlChar * target, 24881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * content) 24891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 24901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 24911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 24921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 24931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 24941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterStartPI(writer, target); 24951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 24961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 24971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 24981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (content != 0) { 24991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteString(writer, content); 25001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 25011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 25021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 25031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 25041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndPI(writer); 25051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 25061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 25071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 25081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 25091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 25101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 25111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 25121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 25131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterStartCDATA: 25141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 25151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 25161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Start an xml CDATA section. 25171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 25181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 25191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 25201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 25211d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterStartCDATA(xmlTextWriterPtr writer) 25221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 25231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 25241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 25251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 25261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 25271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 25281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 25291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 25301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 25311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 25321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 25331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk != 0) { 25341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 25351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p != 0) { 25361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 25371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NONE: 25381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI: 25391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_PI_TEXT: 25401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 25411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_ATTRIBUTE: 25421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndAttribute(writer); 25431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 25441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 25451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 25461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard /* fallthrough */ 25471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_NAME: 25481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, ">"); 25491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 25501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 25511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 25521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_TEXT; 25531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 25541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_CDATA: 2555dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR, 25561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartCDATA : CDATA not allowed in this context!\n"); 25571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 25581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 25591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 25601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 25611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 25621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 25631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 25641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) 25651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlMalloc(sizeof(xmlTextWriterStackEntry)); 25661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) { 2567dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY, 25681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartCDATA : out of memory!\n"); 25691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 25701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 25711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 25721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->name = 0; 25731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_CDATA; 25741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 25751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPushFront(writer->nodes, p); 25761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 25771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "<![CDATA["); 25781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 25791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 25801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 25811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 25821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 25831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 25841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 25851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 25861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterEndCDATA: 25871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 25881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 25891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * End an xml CDATA section. 25901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 25911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 25921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 25931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 25941d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterEndCDATA(xmlTextWriterPtr writer) 25951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 25961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 25971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 25981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 25991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 26001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 26021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 26031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 26051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk == 0) 26061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 26071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 26091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) 26101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 26111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 26131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard switch (p->state) { 26141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard case XML_TEXTWRITER_CDATA: 26151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "]]>"); 26161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 26171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 26181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 26191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard break; 26201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard default: 26211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 26221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 26231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPopFront(writer->nodes); 26251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 26261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 26271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 26291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteFormatCDATA: 26301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 26311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 26321d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard * @...: extra parameters for the format 26331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 26341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted xml CDATA. 26351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 26361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 26371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 26381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 26391d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteFormatCDATA(xmlTextWriterPtr writer, const char *format, 26401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ...) 26411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 26421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 26431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list ap; 26441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_start(ap, format); 26461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteVFormatCDATA(writer, format, ap); 26481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_end(ap); 26501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 26511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 26521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 26541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteVFormatCDATA: 26551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 26561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 26575841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 26581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 26591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a formatted xml CDATA. 26601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 26611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 26621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 26631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 26641d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteVFormatCDATA(xmlTextWriterPtr writer, const char *format, 26651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list argptr) 26661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 26671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 26681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 26691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 26711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 26721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlTextWriterVSprintf(format, argptr); 26741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == 0) 26751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 26761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteCDATA(writer, buf); 26781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 26801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 26811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 26821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 26841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteCDATA: 26851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 26861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @content: CDATA content 26871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 26881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write an xml CDATA. 26891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 26901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 26911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 26921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 26931d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteCDATA(xmlTextWriterPtr writer, const xmlChar * content) 26941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 26951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 26961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 26971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 26981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 26991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterStartCDATA(writer); 27001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 27011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 27021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 27031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (content != 0) { 27041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteString(writer, content); 27051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 27061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 27071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 27081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 27091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndCDATA(writer); 27101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 27111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 27121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 27131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 27141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 27151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 27161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 27171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 27181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterStartDTD: 27191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 27201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: the name of the DTD 27211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @pubid: the public identifier, which is an alternative to the system identifier 27221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @sysid: the system identifier, which is the URI of the DTD 27231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 27241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Start an xml DTD. 27251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 27261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 27271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 27281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 27291d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterStartDTD(xmlTextWriterPtr writer, 27301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 27311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * pubid, const xmlChar * sysid) 27321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 27331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 27341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 27351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 27361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 27371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 27381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL || name == NULL || *name == '\0') 27391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 27401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 27411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 27421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 2743ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard if ((lk != NULL) && (xmlLinkGetData(lk) != NULL)) { 2744dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR, 27451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartDTD : DTD allowed only in prolog!\n"); 27461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 27471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 27481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 27491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) 27501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlMalloc(sizeof(xmlTextWriterStackEntry)); 27511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) { 2752dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY, 27531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartDTD : out of memory!\n"); 27541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 27551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 27561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 27571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->name = xmlStrdup(name); 27581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p->name == 0) { 2759dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY, 27601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartDTD : out of memory!\n"); 27611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(p); 27621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 27631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 27641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_DTD; 27651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 27661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPushFront(writer->nodes, p); 27671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 27681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "<!DOCTYPE "); 27691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 27701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 27711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 27721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, (const char *) name); 27731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 27741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 27751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 27761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 27771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (pubid != 0) { 27781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (sysid == 0) { 2779dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR, 27801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartDTD : system identifier needed!\n"); 27811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 27821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 27831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 2784500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (writer->indent) 2785500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, "\n"); 2786500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard else 2787500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, " "); 2788500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 2789500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 2790500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 2791500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 2792500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "PUBLIC "); 2793500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 2794500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 2795500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 2796500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 2797500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 27981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 27991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 28001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 28011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 28025841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard count = 28035841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlOutputBufferWriteString(writer->out, (const char *) pubid); 28041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 28051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 28061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 28071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 2808500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 28091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 28101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 28111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 28121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 28131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 28141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (sysid != 0) { 28151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (pubid == 0) { 2816500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (writer->indent) 2817500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, "\n"); 2818500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard else 2819500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, " "); 2820500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 2821500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 2822500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 2823500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "SYSTEM "); 2824500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 2825500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 2826500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 2827500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } else if (writer->indent) { 2828500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "\n "); 28291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 28301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 28311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 28321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 28331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 2834500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 28351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 28361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 28371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 28381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 28395841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard count = 28405841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlOutputBufferWriteString(writer->out, (const char *) sysid); 28411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 28421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 28431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 28441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 2845500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 28461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 28471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 28481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 28491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 28501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 28511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 28521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 28531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 28541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 28551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterEndDTD: 28561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 28571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 28581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * End an xml DTD. 28591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 28601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 28611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 28621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 28631d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterEndDTD(xmlTextWriterPtr writer) 28641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 2865500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard int loop; 28661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 28671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 28681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 28691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 28701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 28711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 28721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 28731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 28741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 2875500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard loop = 1; 2876500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard while (loop) { 2877500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard lk = xmlListFront(writer->nodes); 2878500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (lk == NULL) 2879500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard break; 2880500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 2881500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (p == 0) 2882500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard break; 2883500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard switch (p->state) { 2884500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_TEXT: 2885500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "]"); 2886500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 2887500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 2888500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 2889500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard /* fallthrough */ 2890500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD: 2891500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, ">"); 28921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 2893500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (writer->indent) { 2894500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 2895500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 2896500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 2897500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "\n"); 2898500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 28991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 2900500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlListPopFront(writer->nodes); 2901500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard break; 2902500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_ELEM: 2903500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_ELEM_TEXT: 2904500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlTextWriterEndDTDElement(writer); 2905500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard break; 2906500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_ATTL: 2907500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_ATTL_TEXT: 2908500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlTextWriterEndDTDAttlist(writer); 2909500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard break; 2910500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_ENTY: 2911500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_PENT: 2912500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_ENTY_TEXT: 2913500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlTextWriterEndDTDEntity(writer); 2914500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard break; 2915500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_COMMENT: 2916500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlTextWriterEndComment(writer); 2917500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard break; 2918500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard default: 2919500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard loop = 0; 2920500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard continue; 2921500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 2922500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 2923500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 29241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 2925500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 29261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 29271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 29281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 29291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 29301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 29311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 29321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteFormatDTD: 29331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 29341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: the name of the DTD 29351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @pubid: the public identifier, which is an alternative to the system identifier 29361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @sysid: the system identifier, which is the URI of the DTD 29371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 29381d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard * @...: extra parameters for the format 29391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 29401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a DTD with a formatted markup declarations part. 29411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 29421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 29431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 29441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 29451d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteFormatDTD(xmlTextWriterPtr writer, 29461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 29471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * pubid, 29481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * sysid, const char *format, ...) 29491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 29501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 29511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list ap; 29521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 29531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_start(ap, format); 29541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 29551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteVFormatDTD(writer, name, pubid, sysid, format, 29561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard ap); 29571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 29581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_end(ap); 29591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 29601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 29611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 29621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 29631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteVFormatDTD: 29641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 29651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: the name of the DTD 29661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @pubid: the public identifier, which is an alternative to the system identifier 29671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @sysid: the system identifier, which is the URI of the DTD 29681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: format string (see printf) 29695841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 29701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 29711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a DTD with a formatted markup declarations part. 29721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 29731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 29741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 29751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 29761d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteVFormatDTD(xmlTextWriterPtr writer, 29771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 29781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * pubid, 29791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * sysid, 29801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, va_list argptr) 29811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 29821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 29831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 29841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 29851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 29861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 29871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 29881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlTextWriterVSprintf(format, argptr); 29891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == 0) 29901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 29911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 29921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteDTD(writer, name, pubid, sysid, buf); 29931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 29941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 29951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 29961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 29971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 29981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 29991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteDTD: 30001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 30011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @name: the name of the DTD 30021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @pubid: the public identifier, which is an alternative to the system identifier 30031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @sysid: the system identifier, which is the URI of the DTD 3004b1d531659b2bee47492ca1c319180116eaaf566eWilliam M. Brack * @subset: string content of the DTD 30051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 30061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write a DTD. 30071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 30081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 30091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 30101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 30111d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteDTD(xmlTextWriterPtr writer, 30121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 30131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * pubid, 30141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * sysid, const xmlChar * subset) 30151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 30161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 30171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 30181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 30191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 30201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterStartDTD(writer, name, pubid, sysid); 30211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 30221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 30231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 30241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (subset != 0) { 30251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteString(writer, subset); 30261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 30271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 30281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 30291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 30301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndDTD(writer); 30311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 30321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 30331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 30341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 30351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 30361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 30371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 30385841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 30395841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterStartDTDElement: 30405841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 30415841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD element 30425841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 30435841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Start an xml DTD element. 30445841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 30455841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 30465841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 30471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 30481d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterStartDTDElement(xmlTextWriterPtr writer, const xmlChar * name) 30491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 30501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 30511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 30521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 30531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 30541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 30551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL || name == NULL || *name == '\0') 30561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 30571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 30581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 30591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 30601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk == 0) { 30611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 30621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 30631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 30641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 3065500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (p != 0) { 3066500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard switch (p->state) { 3067500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD: 3068500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " ["); 3069500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 3070500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3071500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 3072500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (writer->indent) { 3073500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "\n"); 3074500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 3075500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3076500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 3077500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 3078500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard p->state = XML_TEXTWRITER_DTD_TEXT; 3079500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard /* fallthrough */ 3080500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_TEXT: 3081500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_NONE: 3082500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard break; 3083500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard default: 30841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 3085500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 30861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 30871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 30881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) 30891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlMalloc(sizeof(xmlTextWriterStackEntry)); 30901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) { 3091dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY, 30921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartDTDElement : out of memory!\n"); 30931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 30941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 30951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 30961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->name = xmlStrdup(name); 30971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p->name == 0) { 3098dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY, 30991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartDTDElement : out of memory!\n"); 31001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(p); 31011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 31021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 31031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_DTD_ELEM; 31041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 31051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPushFront(writer->nodes, p); 31061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 3107500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (writer->indent) { 3108500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlTextWriterWriteIndent(writer); 3109500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 3110500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3111500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 3112500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 3113500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 31141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "<!ELEMENT "); 31151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 31161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 31171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 31181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, (const char *) name); 31191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 31201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 31211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 31221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 31231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 31241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 31251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 31265841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 3127500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * xmlTextWriterEndDTDElement: 3128500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * @writer: the xmlTextWriterPtr 3129500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * 3130500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * End an xml DTD element. 3131500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * 3132500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 3133500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard */ 3134500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillardint 3135500a1de533e2ea03f452844f537bb247b7e43af2Daniel VeillardxmlTextWriterEndDTDElement(xmlTextWriterPtr writer) 3136500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard{ 3137500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard int count; 3138500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard int sum; 3139500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlLinkPtr lk; 3140500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlTextWriterStackEntry *p; 3141500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3142500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (writer == NULL) 3143500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3144500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3145500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum = 0; 3146500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard lk = xmlListFront(writer->nodes); 3147500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (lk == 0) 3148500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3149500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3150500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 3151500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (p == 0) 3152500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3153500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3154500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard switch (p->state) { 3155500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_ELEM: 3156500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_ELEM_TEXT: 3157500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, ">"); 3158500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 3159500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3160500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 3161500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard break; 3162500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard default: 3163500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3164500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 3165500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3166500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (writer->indent) { 3167500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "\n"); 3168500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 3169500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3170500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 3171500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 3172500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3173500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlListPopFront(writer->nodes); 3174500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return sum; 3175500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard} 3176500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3177500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard/** 31785841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterWriteFormatDTDElement: 31795841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 31805841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD element 31815841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @format: format string (see printf) 31821d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard * @...: extra parameters for the format 31835841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 31845841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Write a formatted DTD element. 31855841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 31865841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 31875841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 31881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 31891d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteFormatDTDElement(xmlTextWriterPtr writer, 31901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 31911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, ...) 31921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 31931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 31941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list ap; 31951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 31961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_start(ap, format); 31971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 31981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteVFormatDTDElement(writer, name, format, ap); 31991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_end(ap); 32011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 32021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 32031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32045841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 32055841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterWriteVFormatDTDElement: 32065841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 32075841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD element 32085841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @format: format string (see printf) 32095841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 32105841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 32115841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Write a formatted DTD element. 32125841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 32135841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 32145841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 32151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 32161d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteVFormatDTDElement(xmlTextWriterPtr writer, 32171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 32181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, va_list argptr) 32191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 32201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 32211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 32221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 32241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 32251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlTextWriterVSprintf(format, argptr); 32271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == 0) 32281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 32291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteDTDElement(writer, name, buf); 32311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 32331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 32341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 32351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32365841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 32375841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterWriteDTDElement: 32385841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 32395841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD element 32405841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @content: content of the element 32415841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 32425841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Write a DTD element. 32435841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 32445841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 32455841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 32461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 32471d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteDTDElement(xmlTextWriterPtr writer, 32481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, const xmlChar * content) 32491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 32501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 32511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 32521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (content == NULL) 32541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 32551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 32571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterStartDTDElement(writer, name); 32581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 32591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 32601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 32611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteString(writer, content); 32631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 32641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 32651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 32661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndDTDElement(writer); 32681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 32691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 32701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 32711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 32731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 32741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32755841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 32765841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterStartDTDAttlist: 32775841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 32785841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD ATTLIST 32795841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 32805841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Start an xml DTD ATTLIST. 32815841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 32825841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 32835841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 32841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 32851d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterStartDTDAttlist(xmlTextWriterPtr writer, const xmlChar * name) 32861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 32871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 32881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 32891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 32901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 32911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL || name == NULL || *name == '\0') 32931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 32941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 32951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 32961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 32971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk == 0) { 32981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 32991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 33001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 33011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 3302500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (p != 0) { 3303500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard switch (p->state) { 3304500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD: 3305500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " ["); 3306500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 3307500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3308500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 3309500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (writer->indent) { 3310500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "\n"); 3311500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 3312500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3313500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 3314500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 3315500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard p->state = XML_TEXTWRITER_DTD_TEXT; 3316500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard /* fallthrough */ 3317500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_TEXT: 3318500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_NONE: 3319500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard break; 3320500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard default: 33211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 3322500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 33231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 33241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 33251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) 33261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlMalloc(sizeof(xmlTextWriterStackEntry)); 33271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) { 3328dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY, 33291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartDTDAttlist : out of memory!\n"); 33301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 33311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 33321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 33331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->name = xmlStrdup(name); 33341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p->name == 0) { 3335dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY, 33361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartDTDAttlist : out of memory!\n"); 33371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(p); 33381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 33391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 33401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->state = XML_TEXTWRITER_DTD_ATTL; 33411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 33421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPushFront(writer->nodes, p); 33431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 3344500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (writer->indent) { 3345500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlTextWriterWriteIndent(writer); 3346500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 3347500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3348500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 3349500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 3350500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 33511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "<!ATTLIST "); 33521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 33531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 33541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 3355ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, (const char *) name); 33561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 33571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 33581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 33591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 33601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 33611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 33621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 33635841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 3364500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * xmlTextWriterEndDTDAttlist: 3365500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * @writer: the xmlTextWriterPtr 3366500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * 3367500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * End an xml DTD attribute list. 3368500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * 3369500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 3370500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard */ 3371500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillardint 3372500a1de533e2ea03f452844f537bb247b7e43af2Daniel VeillardxmlTextWriterEndDTDAttlist(xmlTextWriterPtr writer) 3373500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard{ 3374500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard int count; 3375500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard int sum; 3376500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlLinkPtr lk; 3377500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlTextWriterStackEntry *p; 3378500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3379500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (writer == NULL) 3380500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3381500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3382500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum = 0; 3383500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard lk = xmlListFront(writer->nodes); 3384500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (lk == 0) 3385500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3386500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3387500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 3388500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (p == 0) 3389500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3390500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3391500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard switch (p->state) { 3392500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_ATTL: 3393500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_ATTL_TEXT: 3394500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, ">"); 3395500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 3396500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3397500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 3398500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard break; 3399500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard default: 3400500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3401500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 3402500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3403500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (writer->indent) { 3404500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "\n"); 3405500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 3406500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3407500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 3408500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 3409500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3410500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlListPopFront(writer->nodes); 3411500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return sum; 3412500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard} 3413500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3414500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard/** 34155841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterWriteFormatDTDAttlist: 34165841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 34175841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD ATTLIST 34185841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @format: format string (see printf) 34191d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard * @...: extra parameters for the format 34205841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 34215841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Write a formatted DTD ATTLIST. 34225841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 34235841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 34245841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 34251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 34261d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteFormatDTDAttlist(xmlTextWriterPtr writer, 34271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 34281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, ...) 34291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 34301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 34311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list ap; 34321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 34331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_start(ap, format); 34341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 34351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteVFormatDTDAttlist(writer, name, format, ap); 34361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 34371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_end(ap); 34381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 34391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 34401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 34415841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 34425841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterWriteVFormatDTDAttlist: 34435841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 34445841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD ATTLIST 34455841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @format: format string (see printf) 34465841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 34475841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 34485841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Write a formatted DTD ATTLIST. 34495841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 34505841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 34515841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 34521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 34531d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteVFormatDTDAttlist(xmlTextWriterPtr writer, 34541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 34551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, va_list argptr) 34561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 34571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 34581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 34591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 34601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 34611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 34621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 34631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlTextWriterVSprintf(format, argptr); 34641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == 0) 34651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 34661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 34671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteDTDAttlist(writer, name, buf); 34681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 34691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 34701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 34711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 34721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 34735841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 34745841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterWriteDTDAttlist: 34755841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 34765841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD ATTLIST 34775841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @content: content of the ATTLIST 34785841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 34795841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Write a DTD ATTLIST. 34805841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 34815841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 34825841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 34831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 34841d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteDTDAttlist(xmlTextWriterPtr writer, 34851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, const xmlChar * content) 34861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 34871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 34881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 34891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 34901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (content == NULL) 34911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 34921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 34931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 34941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterStartDTDAttlist(writer, name); 34951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 34961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 34971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 34981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 34991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteString(writer, content); 35001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 35011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 35021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 35031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 35041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndDTDAttlist(writer); 35051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 35061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 35071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 35081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 35091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 35101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 35111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 35125841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 35135841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterStartDTDEntity: 35145841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 35155841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @pe: TRUE if this is a parameter entity, FALSE if not 35165841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD ATTLIST 35175841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 35185841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Start an xml DTD ATTLIST. 35195841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 35205841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 35215841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 35221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 35231d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterStartDTDEntity(xmlTextWriterPtr writer, 35241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int pe, const xmlChar * name) 35251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 35261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 35271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 35281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 35291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 35301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 35311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL || name == NULL || *name == '\0') 35321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 35331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 35341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 35351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 3536500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (lk != 0) { 35371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 3538500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 3539500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (p != 0) { 3540500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard switch (p->state) { 3541500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD: 3542500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " ["); 3543500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 3544500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3545500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 3546500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (writer->indent) { 3547500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = 3548500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlOutputBufferWriteString(writer->out, "\n"); 3549500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 3550500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3551500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 3552500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 3553500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard p->state = XML_TEXTWRITER_DTD_TEXT; 3554500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard /* fallthrough */ 3555500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_TEXT: 3556500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_NONE: 3557500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard break; 3558500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard default: 3559500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3560500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 3561500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 35621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 35631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 35641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) 35651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlMalloc(sizeof(xmlTextWriterStackEntry)); 35661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) { 3567dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY, 35681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartDTDElement : out of memory!\n"); 35691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 35701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 35711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 35721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p->name = xmlStrdup(name); 35731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p->name == 0) { 3574dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_NO_MEMORY, 35751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterStartDTDElement : out of memory!\n"); 35761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(p); 35771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 35781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 3579500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3580500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (pe != 0) 3581500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard p->state = XML_TEXTWRITER_DTD_PENT; 3582500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard else 3583500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard p->state = XML_TEXTWRITER_DTD_ENTY; 35841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 35851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlListPushFront(writer->nodes, p); 35861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 3587500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (writer->indent) { 3588500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlTextWriterWriteIndent(writer); 3589500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 3590500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3591500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 3592500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 3593500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 35941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "<!ENTITY "); 35951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 35961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 35971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 35981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 35991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (pe != 0) { 3600500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "% "); 36011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 36021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 36031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 36041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 36051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 3606ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, (const char *) name); 36071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 36081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 36091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 36101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 36111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 36121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 36131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 36145841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 3615500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * xmlTextWriterEndDTDEntity: 3616500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * @writer: the xmlTextWriterPtr 3617500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * 3618500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * End an xml DTD entity. 3619500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * 3620500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 3621500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard */ 3622500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillardint 3623500a1de533e2ea03f452844f537bb247b7e43af2Daniel VeillardxmlTextWriterEndDTDEntity(xmlTextWriterPtr writer) 3624500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard{ 3625500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard int count; 3626500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard int sum; 3627500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlLinkPtr lk; 3628500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlTextWriterStackEntry *p; 3629500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3630500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (writer == NULL) 3631500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3632500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3633500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum = 0; 3634500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard lk = xmlListFront(writer->nodes); 3635500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (lk == 0) 3636500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3637500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3638500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 3639500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (p == 0) 3640500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3641500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3642500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard switch (p->state) { 3643500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_ENTY_TEXT: 3644500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 3645500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 3646500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3647500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 3648500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_ENTY: 3649500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_PENT: 3650500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, ">"); 3651500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 3652500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3653500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 3654500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard break; 3655500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard default: 3656500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3657500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 3658500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3659500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (writer->indent) { 3660500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "\n"); 3661500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 3662500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3663500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 3664500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 3665500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3666500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlListPopFront(writer->nodes); 3667500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return sum; 3668500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard} 3669500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3670500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard/** 36715841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterWriteFormatDTDInternalEntity: 36725841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 36735841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @pe: TRUE if this is a parameter entity, FALSE if not 36745841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD entity 36755841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @format: format string (see printf) 36761d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard * @...: extra parameters for the format 36775841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 36785841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Write a formatted DTD internal entity. 36795841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 36805841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 36815841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 36821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 36831d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteFormatDTDInternalEntity(xmlTextWriterPtr writer, 36841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int pe, 36851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 36861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, ...) 36871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 36881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 36891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list ap; 36901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 36911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_start(ap, format); 36921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 36931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteVFormatDTDInternalEntity(writer, pe, name, 36941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard format, ap); 36951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 36961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_end(ap); 36971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 36981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 36991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37005841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 37015841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterWriteVFormatDTDInternalEntity: 37025841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 37035841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @pe: TRUE if this is a parameter entity, FALSE if not 37045841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD entity 37055841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @format: format string (see printf) 37065841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 37075841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 37085841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Write a formatted DTD internal entity. 37095841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 37105841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 37115841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 37121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 37131d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteVFormatDTDInternalEntity(xmlTextWriterPtr writer, 37141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int pe, 37151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 37161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const char *format, 37171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard va_list argptr) 37181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 37191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 37201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 37211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 37231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 37241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = xmlTextWriterVSprintf(format, argptr); 37261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == 0) 37271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 37281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlTextWriterWriteDTDInternalEntity(writer, pe, name, buf); 37301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 37321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 37331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 37341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37355841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 37365841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterWriteDTDEntity: 37375841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 37385841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @pe: TRUE if this is a parameter entity, FALSE if not 37395841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD entity 37405841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @pubid: the public identifier, which is an alternative to the system identifier 37415841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @sysid: the system identifier, which is the URI of the DTD 37425841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @ndataid: the xml notation name. 37435841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @content: content of the entity 37445841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 37455841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Write a DTD entity. 37465841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 37475841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 37485841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 37491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 37501d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteDTDEntity(xmlTextWriterPtr writer, 37511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int pe, 37521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 37531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * pubid, 37541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * sysid, 37551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * ndataid, 37561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * content) 37571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 3758500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if ((content == NULL) && (pubid == NULL) && (sysid == NULL)) 37591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 37601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if ((pe != 0) && (ndataid != NULL)) 37611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 37621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 3763500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if ((pubid == NULL) && (sysid == NULL)) 37641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return xmlTextWriterWriteDTDInternalEntity(writer, pe, name, 37651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard content); 37661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return xmlTextWriterWriteDTDExternalEntity(writer, pe, name, pubid, 37681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sysid, ndataid); 37691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 37701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37715841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 37725841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterWriteDTDInternalEntity: 37735841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 37745841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @pe: TRUE if this is a parameter entity, FALSE if not 37755841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD entity 37765841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @content: content of the entity 37775841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 37785841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Write a DTD internal entity. 37795841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 37805841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 37815841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 37821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 37831d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteDTDInternalEntity(xmlTextWriterPtr writer, 37841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int pe, 37851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 37861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * content) 37871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 37881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 37891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 37901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if ((name == NULL) || (*name == '\0') || (content == NULL)) 37921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 37931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 37941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 37951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterStartDTDEntity(writer, pe, name); 37961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 37971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 37981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 37991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 38001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterWriteString(writer, content); 38011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 38021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 38031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 38041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 38051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterEndDTDEntity(writer); 38061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 38071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 38081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 38091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 38101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 38111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 38121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 38135841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 38145841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterWriteDTDExternalEntity: 38155841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 38165841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @pe: TRUE if this is a parameter entity, FALSE if not 38175841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the DTD entity 38185841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @pubid: the public identifier, which is an alternative to the system identifier 38195841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @sysid: the system identifier, which is the URI of the DTD 38205841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @ndataid: the xml notation name. 38215841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 3822500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * Write a DTD external entity. The entity must have been started with xmlTextWriterStartDTDEntity 38235841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 38245841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 38255841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 38261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 38271d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteDTDExternalEntity(xmlTextWriterPtr writer, 38281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int pe, 38291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 38301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * pubid, 38311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * sysid, 38321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * ndataid) 38331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 38341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 38351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 38361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 3837500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (((pubid == NULL) && (sysid == NULL))) 38381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 38391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if ((pe != 0) && (ndataid != NULL)) 38401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 38411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 38421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 38431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlTextWriterStartDTDEntity(writer, pe, name); 38441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count == -1) 38451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 38461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 38471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 3848500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = 3849500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlTextWriterWriteDTDExternalEntityContents(writer, pubid, sysid, 3850500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard ndataid); 3851500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 3852500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3853500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 3854500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3855500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlTextWriterEndDTDEntity(writer); 3856500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count == -1) 3857500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3858500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 3859500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3860500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return sum; 3861500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard} 3862500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3863500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard/** 3864500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * xmlTextWriterWriteDTDExternalEntityContents: 3865500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * @writer: the xmlTextWriterPtr 3866500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * @pubid: the public identifier, which is an alternative to the system identifier 3867500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * @sysid: the system identifier, which is the URI of the DTD 3868500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * @ndataid: the xml notation name. 3869500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * 3870500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * Write the contents of a DTD external entity. 3871500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * 3872500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 3873500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard */ 3874500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillardint 3875500a1de533e2ea03f452844f537bb247b7e43af2Daniel VeillardxmlTextWriterWriteDTDExternalEntityContents(xmlTextWriterPtr writer, 3876500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard const xmlChar * pubid, 3877500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard const xmlChar * sysid, 3878500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard const xmlChar * ndataid) 3879500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard{ 3880500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard int count; 3881500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard int sum; 3882500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlLinkPtr lk; 3883500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlTextWriterStackEntry *p; 3884500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3885500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (writer == NULL) { 3886dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR, 3887500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard "xmlTextWriterWriteDTDExternalEntityContents: xmlTextWriterPtr invalid!\n"); 3888500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3889500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 3890500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3891500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum = 0; 3892500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard lk = xmlListFront(writer->nodes); 3893500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (lk == 0) { 3894dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR, 3895500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard "xmlTextWriterWriteDTDExternalEntityContents: you must call xmlTextWriterStartDTDEntity before the call to this function!\n"); 3896500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3897500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 3898500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3899500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 3900500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (p == 0) 3901500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3902500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 3903500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard switch (p->state) { 3904500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_ENTY: 3905500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard break; 3906500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_PENT: 3907500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (ndataid != NULL) { 3908dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR, 3909500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard "xmlTextWriterWriteDTDExternalEntityContents: notation not allowed with parameter entities!\n"); 3910500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3911500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 3912500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard break; 3913500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard default: 3914dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR, 3915500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard "xmlTextWriterWriteDTDExternalEntityContents: you must call xmlTextWriterStartDTDEntity before the call to this function!\n"); 3916500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 3917500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 3918500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 39191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (pubid != 0) { 39201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (sysid == 0) { 3921dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR, 3922500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard "xmlTextWriterWriteDTDExternalEntityContents: system identifier needed!\n"); 39231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 39241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 39251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 39261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " PUBLIC "); 39271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 39281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 39291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 39301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 39311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 39321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 39331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 39341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 39351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 39365841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard count = 39375841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlOutputBufferWriteString(writer->out, (const char *) pubid); 39381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 39391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 39401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 39411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 39421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 39431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 39441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 39451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 39461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 39471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 39481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (sysid != 0) { 39491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (pubid == 0) { 39501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " SYSTEM"); 39511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 39521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 39531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 39541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 39551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 39561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " "); 39571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 39581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 39591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 39601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 39611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 39621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 39631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 39641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 39651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 39665841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard count = 39675841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlOutputBufferWriteString(writer->out, (const char *) sysid); 39681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 39691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 39701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 39711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 39721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 39731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 39741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 39751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 39761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 39771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 39781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (ndataid != NULL) { 39791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " NDATA "); 39801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 39811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 39821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 39831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 39845841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard count = 39855841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlOutputBufferWriteString(writer->out, 39865841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard (const char *) ndataid); 39871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 39881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 39891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 39901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 39911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 39921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 39931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 39941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 39955841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 39965841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterWriteDTDNotation: 39975841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @writer: the xmlTextWriterPtr 39985841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @name: the name of the xml notation 39995841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @pubid: the public identifier, which is an alternative to the system identifier 40005841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @sysid: the system identifier, which is the URI of the DTD 40015841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 40025841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Write a DTD entity. 40035841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 40045841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 40055841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 40061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 40071d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteDTDNotation(xmlTextWriterPtr writer, 40081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * name, 40091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard const xmlChar * pubid, const xmlChar * sysid) 40101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 40111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 40121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int sum; 40131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlLinkPtr lk; 40141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 40151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 40161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL || name == NULL || *name == '\0') 40171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 40181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 40191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum = 0; 40201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard lk = xmlListFront(writer->nodes); 40211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (lk == 0) { 40221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 40231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 40241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 40251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 4026500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (p != 0) { 4027500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard switch (p->state) { 4028500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD: 4029500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " ["); 4030500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 4031500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 4032500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 4033500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (writer->indent) { 4034500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "\n"); 4035500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 4036500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 4037500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 4038500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 4039500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard p->state = XML_TEXTWRITER_DTD_TEXT; 4040500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard /* fallthrough */ 4041500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_TEXT: 4042500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard break; 4043500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard default: 40441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 4045500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 4046500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 4047500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 4048500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (writer->indent) { 4049500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlTextWriterWriteIndent(writer); 4050500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 40511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 4052500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 40531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 40541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 40551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, "<!NOTATION "); 40561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 40571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 40581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 40591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, (const char *) name); 40601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 40611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 40621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 40631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 40641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (pubid != 0) { 40651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " PUBLIC "); 40661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 40671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 40681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 40691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 40701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 40711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 40721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 40735841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard count = 40745841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlOutputBufferWriteString(writer->out, (const char *) pubid); 40751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 40761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 40771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 40781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 40791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 40801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 40811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 40821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 40831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 40841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (sysid != 0) { 40851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (pubid == 0) { 40861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " SYSTEM"); 40871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 40881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 40891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 40901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 40911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, " "); 40921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 40931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 40941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 40951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 40961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 40971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 40981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 40995841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard count = 41005841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlOutputBufferWriteString(writer->out, (const char *) sysid); 41011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 41021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 41031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 41041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWrite(writer->out, 1, &writer->qchar); 41051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 41061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 41071d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 41081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 41091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 41101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferWriteString(writer->out, ">"); 41111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (count < 0) 41121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 41131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard sum += count; 41141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 41151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return sum; 41161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 41171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 41181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 41191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterFlush: 41201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @writer: the xmlTextWriterPtr 41211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 41221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Flush the output buffer. 41231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 41241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns the bytes written (may be 0 because of buffering) or -1 in case of error 41251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 41261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardint 41271d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterFlush(xmlTextWriterPtr writer) 41281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 41291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 41301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 41311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer == NULL) 41321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 41331d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 41341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (writer->out == NULL) 41351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = 0; 41361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard else 41371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard count = xmlOutputBufferFlush(writer->out); 41381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 41391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return count; 41401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 41411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 41421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 41431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * misc 41441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 41451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 41461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 41471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlFreeTextWriterStackEntry: 41481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @lk: the xmlLinkPtr 41491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 41501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Free callback for the xmlList. 41511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 41521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic void 41531d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlFreeTextWriterStackEntry(xmlLinkPtr lk) 41541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 41551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p; 41561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 41571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterStackEntry *) xmlLinkGetData(lk); 41581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) 41591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return; 41601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 41611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p->name != 0) 41621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(p->name); 41631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(p); 41641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 41651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 41661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 41671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlCmpTextWriterStackEntry: 41681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @data0: the first data 41691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @data1: the second data 41701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 41711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Compare callback for the xmlList. 41721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 41731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns -1, 0, 1 41741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 41751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic int 41761d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlCmpTextWriterStackEntry(const void *data0, const void *data1) 41771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 41781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p0; 41791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterStackEntry *p1; 41801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 41811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (data0 == data1) 41821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 41831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 41841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (data0 == 0) 41851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 41861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 41871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (data1 == 0) 41881d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 1; 41891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 41901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p0 = (xmlTextWriterStackEntry *) data0; 41911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p1 = (xmlTextWriterStackEntry *) data1; 41921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 41931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return xmlStrcmp(p0->name, p1->name); 41941d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 41951d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 41961d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 41971d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * misc 41981d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 41991d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 42001d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 42011d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlFreeTextWriterNsStackEntry: 42021d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @lk: the xmlLinkPtr 42031d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 42041d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Free callback for the xmlList. 42051d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 42061d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic void 42071d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlFreeTextWriterNsStackEntry(xmlLinkPtr lk) 42081d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 42091d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterNsStackEntry *p; 42101d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 42111d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p = (xmlTextWriterNsStackEntry *) xmlLinkGetData(lk); 42121d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p == 0) 42131d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return; 42141d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 42151d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p->prefix != 0) 42161d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(p->prefix); 42171d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (p->uri != 0) 42181d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(p->uri); 42191d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 42201d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(p); 42211d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 42221d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 42231d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 42241d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlCmpTextWriterNsStackEntry: 42251d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @data0: the first data 42261d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @data1: the second data 42271d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 42281d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Compare callback for the xmlList. 42291d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 42301d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns -1, 0, 1 42311d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 42321d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic int 42331d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlCmpTextWriterNsStackEntry(const void *data0, const void *data1) 42341d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 42351d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterNsStackEntry *p0; 42361d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlTextWriterNsStackEntry *p1; 42371d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int rc; 42381d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 42391d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (data0 == data1) 42401d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 42411d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 42421d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (data0 == 0) 42431d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return -1; 42441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 42451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (data1 == 0) 42461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 1; 42471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 42481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p0 = (xmlTextWriterNsStackEntry *) data0; 42491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard p1 = (xmlTextWriterNsStackEntry *) data1; 42501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 42511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = xmlStrcmp(p0->prefix, p1->prefix); 42521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 42531d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (rc == 0) 42541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard rc = p0->elem == p1->elem; 42551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 42561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return rc; 42571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 42581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 42591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 42601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterWriteMemCallback: 42611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @context: the xmlBufferPtr 42621d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @str: the data to write 42631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @len: the length of the data 42641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 42651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Write callback for the xmlOutputBuffer with target xmlBuffer 42661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 42671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns -1, 0, 1 42681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 42691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic int 42701d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterWriteMemCallback(void *context, const xmlChar * str, int len) 42711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 42721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlBufferPtr buf = (xmlBufferPtr) context; 42731d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 42741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlBufferAdd(buf, str, len); 42751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 42761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return len; 42771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 42781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 42791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 42801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterCloseMemCallback: 42811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @context: the xmlBufferPtr 42821d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 42831d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Close callback for the xmlOutputBuffer with target xmlBuffer 42841d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 42851d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns -1, 0, 1 42861d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 42871d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic int 42881d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterCloseMemCallback(void *context ATTRIBUTE_UNUSED) 42891d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 42901d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return 0; 42911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 42921d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 42931d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard/** 42945841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterWriteDocCallback: 42955841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @context: the xmlBufferPtr 42965841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @str: the data to write 42975841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @len: the length of the data 42985841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 42995841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Write callback for the xmlOutputBuffer with target xmlBuffer 43005841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 43015841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns -1, 0, 1 43025841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 43035841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillardstatic int 43045841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel VeillardxmlTextWriterWriteDocCallback(void *context, const xmlChar * str, int len) 43055841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard{ 43065841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) context; 43075841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard int rc; 43085841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 43091d913863130a17a638db69c2c50f89e5b0d4aae4Daniel Veillard if ((rc = xmlParseChunk(ctxt, (const char *) str, len, 0)) != 0) { 4310dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsgInt(NULL, XML_ERR_INTERNAL_ERROR, 43115841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard "xmlTextWriterWriteDocCallback : XML error %d !\n", 43125841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard rc); 43135841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return -1; 43145841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 43155841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 43165841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return len; 43175841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard} 43185841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 43195841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 43205841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterCloseDocCallback: 43215841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @context: the xmlBufferPtr 43225841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 43235841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Close callback for the xmlOutputBuffer with target xmlBuffer 43245841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 43255841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * Returns -1, 0, 1 43265841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 43275841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillardstatic int 43285841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel VeillardxmlTextWriterCloseDocCallback(void *context) 43295841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard{ 43305841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) context; 43315841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard int rc; 43325841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 43335841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if ((rc = xmlParseChunk(ctxt, NULL, 0, 1)) != 0) { 4334dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsgInt(NULL, XML_ERR_INTERNAL_ERROR, 43355841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard "xmlTextWriterWriteDocCallback : XML error %d !\n", 43365841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard rc); 43375841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return -1; 43385841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 43395841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 43405841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return 0; 43415841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard} 43425841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 43435841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 43441d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * xmlTextWriterVSprintf: 43451d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @format: see printf 43461d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * @argptr: pointer to the first member of the variable argument list. 43471d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 43481d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Utility function for formatted output 43491d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * 43501d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard * Returns a new xmlChar buffer with the data or NULL on error. This buffer must be freed. 43511d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard */ 43521d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillardstatic xmlChar * 43531d211e227372e5ed75a69fbad5f50d185d0af936Daniel VeillardxmlTextWriterVSprintf(const char *format, va_list argptr) 43541d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard{ 43551d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int size; 43561d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard int count; 43571d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlChar *buf; 43581d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 43591d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard size = BUFSIZ; 43601d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = (xmlChar *) xmlMalloc(size); 43611d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == NULL) { 4362dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(NULL, XML_ERR_NO_MEMORY, 43631d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterVSprintf : out of memory!\n"); 43641d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return NULL; 43651d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 43661d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 43671d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard while (((count = vsnprintf((char *) buf, size, format, argptr)) < 0) 43681d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard || (count == size - 1) || (count == size) || (count > size)) { 43691d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard xmlFree(buf); 43701d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard size += BUFSIZ; 43711d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard buf = (xmlChar *) xmlMalloc(size); 43721d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard if (buf == NULL) { 4373dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(NULL, XML_ERR_NO_MEMORY, 43741d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard "xmlTextWriterVSprintf : out of memory!\n"); 43751d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return NULL; 43761d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 43771d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard } 43781d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 43791d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard return buf; 43801d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard} 43811d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard 43825841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard/** 43835841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * xmlTextWriterStartDocumentCallback: 43845841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * @ctx: the user data (XML parser context) 43855841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * 43865841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard * called at the start of document processing. 43875841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard */ 43885841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillardstatic void 43895841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel VeillardxmlTextWriterStartDocumentCallback(void *ctx) 43905841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard{ 43915841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlParserCtxtPtr ctxt = (xmlParserCtxtPtr) ctx; 43925841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlDocPtr doc; 43935841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 43945841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (ctxt->html) { 43955841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard#ifdef LIBXML_HTML_ENABLED 43965841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (ctxt->myDoc == NULL) 43975841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->myDoc = htmlNewDocNoDtD(NULL, NULL); 43985841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (ctxt->myDoc == NULL) { 43995841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL)) 44005841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->sax->error(ctxt->userData, 44015841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard "SAX.startDocument(): out of memory\n"); 44025841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->errNo = XML_ERR_NO_MEMORY; 44035841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->instate = XML_PARSER_EOF; 44045841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->disableSAX = 1; 44055841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return; 44065841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 44075841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard#else 4408dd6d300896cfeacbacf7c5bceb5bec2f36790efeDaniel Veillard xmlWriterErrMsg(writer, XML_ERR_INTERNAL_ERROR, 44095841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard "libxml2 built without HTML support\n"); 44105841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->errNo = XML_ERR_INTERNAL_ERROR; 44115841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->instate = XML_PARSER_EOF; 44125841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->disableSAX = 1; 44135841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return; 44145841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard#endif 44155841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } else { 44165841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard doc = ctxt->myDoc; 44175841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (doc == NULL) 44185841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard doc = ctxt->myDoc = xmlNewDoc(ctxt->version); 44195841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (doc != NULL) { 44205841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (doc->children == NULL) { 44215841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (ctxt->encoding != NULL) 44225841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard doc->encoding = xmlStrdup(ctxt->encoding); 44235841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard else 44245841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard doc->encoding = NULL; 44255841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard doc->standalone = ctxt->standalone; 44265841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 44275841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } else { 44285841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if ((ctxt->sax != NULL) && (ctxt->sax->error != NULL)) 44295841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->sax->error(ctxt->userData, 44305841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard "SAX.startDocument(): out of memory\n"); 44315841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->errNo = XML_ERR_NO_MEMORY; 44325841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->instate = XML_PARSER_EOF; 44335841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->disableSAX = 1; 44345841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard return; 44355841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 44365841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 44375841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if ((ctxt->myDoc != NULL) && (ctxt->myDoc->URL == NULL) && 44385841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard (ctxt->input != NULL) && (ctxt->input->filename != NULL)) { 44395841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->myDoc->URL = 44405841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlCanonicPath((const xmlChar *) ctxt->input->filename); 44415841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard if (ctxt->myDoc->URL == NULL) 44425841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard ctxt->myDoc->URL = 44435841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard xmlStrdup((const xmlChar *) ctxt->input->filename); 44445841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard } 44455841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard} 44465841f0e0a44fdfaf6cee6511fbb71d5a76e3ff23Daniel Veillard 44472cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard/** 44482cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * xmlTextWriterSetIndent: 44492cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * @writer: the xmlTextWriterPtr 44502cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * @indent: do indentation? 44512cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * 44522cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * Set indentation output. indent = 0 do not indentation. indent > 0 do indentation. 44532cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * 44542cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * Returns -1 on error or 0 otherwise. 44552cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard */ 44562cca446b86a77022d5b847b106544aede7207dbcDaniel Veillardint 4457ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel VeillardxmlTextWriterSetIndent(xmlTextWriterPtr writer, int indent) 44582cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard{ 4459e43cc574e49cd8173e157d8c31973f709a4cb7ecDaniel Veillard if ((writer == NULL) || (indent < 0)) 4460ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return -1; 44612cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard 4462ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard writer->indent = indent; 4463ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard writer->doindent = 1; 44642cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard 4465ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return 0; 44662cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard} 44672cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard 44682cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard/** 44692cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * xmlTextWriterSetIndentString: 44702cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * @writer: the xmlTextWriterPtr 44712cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * @str: the xmlChar string 44722cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * 44732cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * Set string indentation. 44742cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * 44752cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * Returns -1 on error or 0 otherwise. 44762cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard */ 44772cca446b86a77022d5b847b106544aede7207dbcDaniel Veillardint 4478ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel VeillardxmlTextWriterSetIndentString(xmlTextWriterPtr writer, const xmlChar * str) 44792cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard{ 4480e43cc574e49cd8173e157d8c31973f709a4cb7ecDaniel Veillard if ((writer == NULL) || (!str)) 4481ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return -1; 44822cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard 4483ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard if (writer->ichar != NULL) 4484ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard xmlFree(writer->ichar); 4485ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard writer->ichar = xmlStrdup(str); 4486ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard 4487ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard if (!writer->ichar) 4488ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return -1; 4489ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard else 4490ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return 0; 44912cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard} 44922cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard 44932cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard/** 44942cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * xmlTextWriterWriteIndent: 44952cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * @writer: the xmlTextWriterPtr 44962cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * 44972cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * Write indent string. 44982cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * 44992cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard * Returns -1 on error or the number of strings written. 4500ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard */ 45012cca446b86a77022d5b847b106544aede7207dbcDaniel Veillardstatic int 4502ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel VeillardxmlTextWriterWriteIndent(xmlTextWriterPtr writer) 4503ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard{ 4504ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard int lksize; 4505ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard int i; 4506ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard int ret; 4507ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard 4508ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard lksize = xmlListSize(writer->nodes); 4509ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard if (lksize < 1) 4510ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return (-1); /* list is empty */ 4511ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard for (i = 0; i < (lksize - 1); i++) { 4512ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard ret = xmlOutputBufferWriteString(writer->out, 4513ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard (const char *) writer->ichar); 4514ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard if (ret == -1) 4515ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return (-1); 4516ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard } 4517ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard 4518ab69f366d0a9178749f2f0a888f6167605bf78f2Daniel Veillard return (lksize - 1); 45192cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard} 45202cca446b86a77022d5b847b106544aede7207dbcDaniel Veillard 4521500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard/** 4522500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * xmlTextWriterHandleStateDependencies: 4523500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * @writer: the xmlTextWriterPtr 4524500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * @p: the xmlTextWriterStackEntry 4525500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * 4526500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * Write state dependent strings. 4527500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * 4528500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard * Returns -1 on error or the number of characters written. 4529500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard */ 4530500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillardstatic int 4531500a1de533e2ea03f452844f537bb247b7e43af2Daniel VeillardxmlTextWriterHandleStateDependencies(xmlTextWriterPtr writer, 4532500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard xmlTextWriterStackEntry * p) 4533500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard{ 4534500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard int count; 4535500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard int sum; 4536500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard char extra[3]; 4537500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 4538500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (writer == NULL) 4539500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 4540500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 4541500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (p == NULL) 4542500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return 0; 4543500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 4544500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum = 0; 4545500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard extra[0] = extra[1] = extra[2] = '\0'; 4546500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (p != 0) { 4547500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum = 0; 4548500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard switch (p->state) { 4549500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_NAME: 4550500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard extra[0] = '>'; 4551500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard p->state = XML_TEXTWRITER_TEXT; 4552500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard break; 4553500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_PI: 4554500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard extra[0] = ' '; 4555500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard p->state = XML_TEXTWRITER_PI_TEXT; 4556500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard break; 4557500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD: 4558500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard extra[0] = ' '; 4559500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard extra[1] = '['; 4560500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard p->state = XML_TEXTWRITER_DTD_TEXT; 4561500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard break; 4562500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_ELEM: 4563500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard extra[0] = ' '; 4564500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard p->state = XML_TEXTWRITER_DTD_ELEM_TEXT; 4565500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard break; 4566500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_ATTL: 4567500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard extra[0] = ' '; 4568500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard p->state = XML_TEXTWRITER_DTD_ATTL_TEXT; 4569500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard break; 4570500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_ENTY: 4571500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard case XML_TEXTWRITER_DTD_PENT: 4572500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard extra[0] = ' '; 4573500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard extra[1] = writer->qchar; 4574500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard p->state = XML_TEXTWRITER_DTD_ENTY_TEXT; 4575500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard break; 4576500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard default: 4577500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard break; 4578500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 4579500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 4580500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 4581500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (*extra != '\0') { 4582500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard count = xmlOutputBufferWriteString(writer->out, extra); 4583500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard if (count < 0) 4584500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return -1; 4585500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard sum += count; 4586500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard } 4587500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 4588500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard return sum; 4589500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard} 4590500a1de533e2ea03f452844f537bb247b7e43af2Daniel Veillard 45911d211e227372e5ed75a69fbad5f50d185d0af936Daniel Veillard#endif 4592