/*
 * Summary: the XML document serializer
 * Description: API to save document or subtree of document
 *
 * Copy: See Copyright for the status of this software.
 *
 * Author: Daniel Veillard
 */

#ifndef __XML_XMLSAVE_H__
#define __XML_XMLSAVE_H__

#include "xmlversion.h"
#include "tree.h"
#include "encoding.h"
#include "xmlIO.h"

#ifdef LIBXML_OUTPUT_ENABLED
#ifdef __cplusplus
extern "C" {
#endif

/**
 * xmlSaveOption:
 *
 * This is the set of XML save options that can be passed down
 * to the xmlSaveToFd() and similar calls.
 */
typedef enum {
    XML_SAVE_FORMAT     = 1<<0, /* format save output */
    XML_SAVE_NO_DECL    = 1<<1, /* drop the xml declaration */
    XML_SAVE_NO_EMPTY   = 1<<2, /* no empty tags */
    XML_SAVE_NO_XHTML   = 1<<3  /* disable XHTML1 specific rules */
} xmlSaveOption;


typedef struct _xmlSaveCtxt xmlSaveCtxt;
typedef xmlSaveCtxt *xmlSaveCtxtPtr;

XMLPUBFUN xmlSaveCtxtPtr XMLCALL
                xmlSaveToFd             (int fd,
                                         const char *encoding,
                                         int options);
XMLPUBFUN xmlSaveCtxtPtr XMLCALL
                xmlSaveToFilename       (const char *filename,
                                         const char *encoding,
                                         int options);

XMLPUBFUN xmlSaveCtxtPtr XMLCALL
                xmlSaveToBuffer         (xmlBufferPtr buffer,
                                         const char *encoding,
                                         int options);

XMLPUBFUN xmlSaveCtxtPtr XMLCALL
                xmlSaveToIO             (xmlOutputWriteCallback iowrite,
                                         xmlOutputCloseCallback ioclose,
                                         void *ioctx,
                                         const char *encoding,
                                         int options);

XMLPUBFUN long XMLCALL
                xmlSaveDoc              (xmlSaveCtxtPtr ctxt,
                                         xmlDocPtr doc);
XMLPUBFUN long XMLCALL
                xmlSaveTree             (xmlSaveCtxtPtr ctxt,
                                         xmlNodePtr node);

XMLPUBFUN int XMLCALL
                xmlSaveFlush            (xmlSaveCtxtPtr ctxt);
XMLPUBFUN int XMLCALL
                xmlSaveClose            (xmlSaveCtxtPtr ctxt);
XMLPUBFUN int XMLCALL
                xmlSaveSetEscape        (xmlSaveCtxtPtr ctxt,
                                         xmlCharEncodingOutputFunc escape);
XMLPUBFUN int XMLCALL
                xmlSaveSetAttrEscape    (xmlSaveCtxtPtr ctxt,
                                         xmlCharEncodingOutputFunc escape);
#ifdef __cplusplus
}
#endif
#endif /* LIBXML_OUTPUT_ENABLED */
#endif /* __XML_XMLSAVE_H__ */


