/*
 * Summary: text writing API for XML
 * Description: text writing API for XML
 *
 * Copy: See Copyright for the status of this software.
 *
 * Author: Alfred Mickautsch <alfred@mickautsch.de>
 */

#ifndef __XML_XMLWRITER_H__
#define __XML_XMLWRITER_H__

#include <stdarg.h>
#include <libxml/xmlIO.h>
#include <libxml/list.h>
#include <libxml/xmlstring.h>

#ifdef __cplusplus
extern "C" {
#endif

typedef struct _xmlTextWriter xmlTextWriter;
typedef xmlTextWriter *xmlTextWriterPtr;

/*
 * Constructors & Destructor
 */
XMLPUBFUN xmlTextWriterPtr XMLCALL
	xmlNewTextWriter		(xmlOutputBufferPtr out);
XMLPUBFUN xmlTextWriterPtr XMLCALL
        xmlNewTextWriterFilename(const char *uri, int compression);
XMLPUBFUN xmlTextWriterPtr XMLCALL
        xmlNewTextWriterMemory(xmlBufferPtr buf, int compression);
XMLPUBFUN xmlTextWriterPtr XMLCALL
        xmlNewTextWriterPushParser(xmlParserCtxtPtr ctxt, int compression);
XMLPUBFUN xmlTextWriterPtr XMLCALL
        xmlNewTextWriterDoc(xmlDocPtr * doc, int compression);
XMLPUBFUN xmlTextWriterPtr XMLCALL
        xmlNewTextWriterTree(xmlDocPtr doc,
                             xmlNodePtr node, int compression);
XMLPUBFUN void XMLCALL xmlFreeTextWriter(xmlTextWriterPtr writer);

/*
 * Functions
 */


/*
 * Document
 */
XMLPUBFUN int XMLCALL
	xmlTextWriterStartDocument	(xmlTextWriterPtr writer,
					 const char *version,
					 const char *encoding,
					 const char *standalone);
XMLPUBFUN int XMLCALL
	xmlTextWriterEndDocument	(xmlTextWriterPtr writer);

/*
 * Comments
 */
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteFormatComment	(xmlTextWriterPtr writer,
					 const char *format, ...);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteVFormatComment(xmlTextWriterPtr writer,
					 const char *format,
					 va_list argptr);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteComment	(xmlTextWriterPtr writer,
					 const xmlChar * content);

/*
 * Elements
 */
XMLPUBFUN int XMLCALL
	xmlTextWriterStartElement	(xmlTextWriterPtr writer,
					 const xmlChar * name);
XMLPUBFUN int XMLCALL
	xmlTextWriterStartElementNS	(xmlTextWriterPtr writer,
					 const xmlChar * prefix,
					 const xmlChar * name,
					 const xmlChar * namespaceURI);
    XMLPUBFUN int XMLCALL xmlTextWriterEndElement(xmlTextWriterPtr writer);
XMLPUBFUN int XMLCALL
	xmlTextWriterFullEndElement	(xmlTextWriterPtr writer);

/*
 * Elements conveniency functions
 */
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteFormatElement	(xmlTextWriterPtr writer,
					 const xmlChar * name,
					 const char *format, ...);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteVFormatElement(xmlTextWriterPtr writer,
					 const xmlChar * name,
					 const char *format,
					 va_list argptr);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteElement	(xmlTextWriterPtr writer,
					 const xmlChar * name,
					 const xmlChar * content);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteFormatElementNS(xmlTextWriterPtr writer,
					 const xmlChar * prefix,
					 const xmlChar * name,
					 const xmlChar * namespaceURI,
					 const char *format, ...);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteVFormatElementNS(xmlTextWriterPtr writer,
					 const xmlChar * prefix,
					 const xmlChar * name,
					 const xmlChar * namespaceURI,
					 const char *format,
					 va_list argptr);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteElementNS	(xmlTextWriterPtr writer,
					 const xmlChar * prefix,
					 const xmlChar * name,
					 const xmlChar * namespaceURI,
					 const xmlChar * content);

/*
 * Text
 */
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteFormatRaw	(xmlTextWriterPtr writer,
					 const char *format, ...);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteVFormatRaw	(xmlTextWriterPtr writer,
                                     const char *format, va_list argptr);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteRawLen	(xmlTextWriterPtr writer,
                                 const xmlChar * content, int len);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteRaw		(xmlTextWriterPtr writer,
					 const xmlChar * content);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteFormatString	(xmlTextWriterPtr writer,
					 const char *format, ...);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteVFormatString	(xmlTextWriterPtr writer,
					 const char *format,
					 va_list argptr);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteString	(xmlTextWriterPtr writer,
					 const xmlChar * content);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteBase64	(xmlTextWriterPtr writer,
                                 const char *data, int start, int len);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteBinHex	(xmlTextWriterPtr writer,
                                 const char *data, int start, int len);

/*
 * Attributes
 */
XMLPUBFUN int XMLCALL
	xmlTextWriterStartAttribute	(xmlTextWriterPtr writer,
					 const xmlChar * name);
XMLPUBFUN int XMLCALL
	xmlTextWriterStartAttributeNS	(xmlTextWriterPtr writer,
					 const xmlChar * prefix,
					 const xmlChar * name,
					 const xmlChar * namespaceURI);
XMLPUBFUN int XMLCALL
	xmlTextWriterEndAttribute	(xmlTextWriterPtr writer);

/*
 * Attributes conveniency functions
 */
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteFormatAttribute(xmlTextWriterPtr writer,
					 const xmlChar * name,
					 const char *format, ...);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteVFormatAttribute(xmlTextWriterPtr writer,
					 const xmlChar * name,
					 const char *format,
					 va_list argptr);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteAttribute	(xmlTextWriterPtr writer,
					 const xmlChar * name,
					 const xmlChar * content);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteFormatAttributeNS(xmlTextWriterPtr writer,
					 const xmlChar * prefix,
					 const xmlChar * name,
					 const xmlChar * namespaceURI,
					 const char *format, ...);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteVFormatAttributeNS(xmlTextWriterPtr writer,
					 const xmlChar * prefix,
					 const xmlChar * name,
					 const xmlChar * namespaceURI,
					 const char *format,
					 va_list argptr);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteAttributeNS	(xmlTextWriterPtr writer,
					 const xmlChar * prefix,
					 const xmlChar * name,
					 const xmlChar * namespaceURI,
					 const xmlChar * content);

/*
 * PI's
 */
XMLPUBFUN int XMLCALL
	xmlTextWriterStartPI		(xmlTextWriterPtr writer,
					 const xmlChar * target);
XMLPUBFUN int XMLCALL xmlTextWriterEndPI(xmlTextWriterPtr writer);

/*
 * PI conveniency functions
 */
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteFormatPI	(xmlTextWriterPtr writer,
					 const xmlChar * target,
					 const char *format, ...);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteVFormatPI	(xmlTextWriterPtr writer,
					 const xmlChar * target,
                                    const char *format, va_list argptr);
XMLPUBFUN int XMLCALL
	xmlTextWriterWritePI		(xmlTextWriterPtr writer,
					 const xmlChar * target,
					 const xmlChar * content);
/**
 * xmlTextWriterWriteProcessingInstruction:
 *
 * This macro maps to xmlTextWriterWritePI
 */
#define xmlTextWriterWriteProcessingInstruction xmlTextWriterWritePI

/*
 * CDATA
 */
XMLPUBFUN int XMLCALL xmlTextWriterStartCDATA(xmlTextWriterPtr writer);
XMLPUBFUN int XMLCALL xmlTextWriterEndCDATA(xmlTextWriterPtr writer);

/*
 * CDATA conveniency functions
 */
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteFormatCDATA	(xmlTextWriterPtr writer,
					 const char *format, ...);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteVFormatCDATA	(xmlTextWriterPtr writer,
                                       const char *format, va_list argptr);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteCDATA		(xmlTextWriterPtr writer,
					 const xmlChar * content);

/*
 * DTD
 */
XMLPUBFUN int XMLCALL
	xmlTextWriterStartDTD		(xmlTextWriterPtr writer,
					 const xmlChar * name,
					 const xmlChar * pubid,
					 const xmlChar * sysid);
XMLPUBFUN int XMLCALL xmlTextWriterEndDTD(xmlTextWriterPtr writer);

/*
 * DTD conveniency functions
 */
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteFormatDTD	(xmlTextWriterPtr writer,
					 const xmlChar * name,
					 const xmlChar * pubid,
					 const xmlChar * sysid,
					 const char *format, ...);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteVFormatDTD	(xmlTextWriterPtr writer,
					 const xmlChar * name,
					 const xmlChar * pubid,
					 const xmlChar * sysid,
                                     const char *format, va_list argptr);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteDTD		(xmlTextWriterPtr writer,
					 const xmlChar * name,
					 const xmlChar * pubid,
					 const xmlChar * sysid,
					 const xmlChar * subset);
/**
 * xmlTextWriterWriteDocType:
 *
 * this macro maps to xmlTextWriterWriteDTD
 */
#define xmlTextWriterWriteDocType xmlTextWriterWriteDTD

/*
 * DTD element definition
 */
XMLPUBFUN int XMLCALL
	xmlTextWriterStartDTDElement	(xmlTextWriterPtr writer,
					 const xmlChar * name);
/**
 * xmlTextWriterEndDTDElement:
 *
 * This macro maps to xmlTextWriterEndDTD
 */
#define xmlTextWriterEndDTDElement xmlTextWriterEndDTD

/*
 * DTD element definition conveniency functions
 */
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteFormatDTDElement(xmlTextWriterPtr writer,
					 const xmlChar * name,
					 const char *format, ...);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteVFormatDTDElement(xmlTextWriterPtr writer,
					 const xmlChar * name,
					 const char *format,
					 va_list argptr);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteDTDElement	(xmlTextWriterPtr writer,
					 const xmlChar * name,
					 const xmlChar * content);

/*
 * DTD attribute list definition
 */
XMLPUBFUN int XMLCALL
	xmlTextWriterStartDTDAttlist	(xmlTextWriterPtr writer,
					 const xmlChar * name);
/**
 * xmlTextWriterEndDTDAttlist:
 *
 * This macro maps to xmlTextWriterEndDTD
 */
#define xmlTextWriterEndDTDAttlist xmlTextWriterEndDTD

/*
 * DTD attribute list definition conveniency functions
 */
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteFormatDTDAttlist(xmlTextWriterPtr writer,
					 const xmlChar * name,
					 const char *format, ...);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteVFormatDTDAttlist(xmlTextWriterPtr writer,
					 const xmlChar * name,
					 const char *format,
					 va_list argptr);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteDTDAttlist	(xmlTextWriterPtr writer,
					 const xmlChar * name,
					 const xmlChar * content);

/*
 * DTD entity definition
 */
XMLPUBFUN int XMLCALL
	xmlTextWriterStartDTDEntity	(xmlTextWriterPtr writer,
                                    int pe, const xmlChar * name);
/**
 * xmlTextWriterEndDTDEntity:
 *
 * This macro maps to xmlTextWriterEndDTD
 */
#define xmlTextWriterEndDTDEntity xmlTextWriterEndDTD

/*
 * DTD entity definition conveniency functions
 */
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteFormatDTDInternalEntity(xmlTextWriterPtr writer,
					 int pe,
					 const xmlChar * name,
					 const char *format, ...);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteVFormatDTDInternalEntity(xmlTextWriterPtr writer,
					 int pe,
					 const xmlChar * name,
					 const char *format,
					 va_list argptr);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteDTDInternalEntity(xmlTextWriterPtr writer,
					 int pe,
					 const xmlChar * name,
					 const xmlChar * content);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteDTDExternalEntity(xmlTextWriterPtr writer,
					 int pe,
					 const xmlChar * name,
					 const xmlChar * pubid,
					 const xmlChar * sysid,
					 const xmlChar * ndataid);
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteDTDEntity	(xmlTextWriterPtr writer,
					 int pe,
					 const xmlChar * name,
					 const xmlChar * pubid,
					 const xmlChar * sysid,
					 const xmlChar * ndataid,
					 const xmlChar * content);

/*
 * DTD notation definition
 */
XMLPUBFUN int XMLCALL
	xmlTextWriterWriteDTDNotation	(xmlTextWriterPtr writer,
					 const xmlChar * name,
					 const xmlChar * pubid,
					 const xmlChar * sysid);
/*
 * Indentation
 */
XMLPUBFUN int XMLCALL
        xmlTextWriterSetIndent (xmlTextWriterPtr writer, int indent);
XMLPUBFUN int XMLCALL
        xmlTextWriterSetIndentString (xmlTextWriterPtr writer, xmlChar *str);

/*
 * misc
 */
XMLPUBFUN int XMLCALL xmlTextWriterFlush(xmlTextWriterPtr writer);

#ifdef __cplusplus
}
#endif
#endif                          /* __XML_XMLWRITER_H__ */
