#ifndef __XML_CATALOG_H__
#define __XML_CATALOG_H__
#include <stdio.h>
#include <libxml/xmlversion.h>
#include <libxml/xmlstring.h>
#include <libxml/tree.h>
#ifdef LIBXML_CATALOG_ENABLED
#ifdef __cplusplus
extern "C" {
#endif
#define XML_CATALOGS_NAMESPACE                                  \
    (const xmlChar *) "urn:oasis:names:tc:entity:xmlns:xml:catalog"
#define XML_CATALOG_PI                                          \
    (const xmlChar *) "oasis-xml-catalog"
typedef enum {
    XML_CATA_PREFER_NONE = 0,
    XML_CATA_PREFER_PUBLIC = 1,
    XML_CATA_PREFER_SYSTEM
} xmlCatalogPrefer;
typedef enum {
    XML_CATA_ALLOW_NONE = 0,
    XML_CATA_ALLOW_GLOBAL = 1,
    XML_CATA_ALLOW_DOCUMENT = 2,
    XML_CATA_ALLOW_ALL = 3
} xmlCatalogAllow;
typedef struct _xmlCatalog xmlCatalog;
typedef xmlCatalog *xmlCatalogPtr;
XMLPUBFUN xmlCatalogPtr XMLCALL
                xmlNewCatalog           (int sgml);
XMLPUBFUN xmlCatalogPtr XMLCALL 
                xmlLoadACatalog         (const char *filename);
XMLPUBFUN xmlCatalogPtr XMLCALL 
                xmlLoadSGMLSuperCatalog (const char *filename);
XMLPUBFUN int XMLCALL           
                xmlConvertSGMLCatalog   (xmlCatalogPtr catal);
XMLPUBFUN int XMLCALL           
                xmlACatalogAdd          (xmlCatalogPtr catal,
                                         const xmlChar *type,
                                         const xmlChar *orig,
                                         const xmlChar *replace);
XMLPUBFUN int XMLCALL           
                xmlACatalogRemove       (xmlCatalogPtr catal,
                                         const xmlChar *value);
XMLPUBFUN xmlChar * XMLCALL     
                xmlACatalogResolve      (xmlCatalogPtr catal,
                                         const xmlChar *pubID,
                                         const xmlChar *sysID);
XMLPUBFUN xmlChar * XMLCALL     
                xmlACatalogResolveSystem(xmlCatalogPtr catal,
                                         const xmlChar *sysID);
XMLPUBFUN xmlChar * XMLCALL     
                xmlACatalogResolvePublic(xmlCatalogPtr catal,
                                         const xmlChar *pubID);
XMLPUBFUN xmlChar * XMLCALL     
                xmlACatalogResolveURI   (xmlCatalogPtr catal,
                                         const xmlChar *URI);
#ifdef LIBXML_OUTPUT_ENABLED
XMLPUBFUN void XMLCALL          
                xmlACatalogDump         (xmlCatalogPtr catal,
                                         FILE *out);
#endif 
XMLPUBFUN void XMLCALL          
                xmlFreeCatalog          (xmlCatalogPtr catal);
XMLPUBFUN int XMLCALL           
                xmlCatalogIsEmpty       (xmlCatalogPtr catal);
XMLPUBFUN void XMLCALL          
                xmlInitializeCatalog    (void);
XMLPUBFUN int XMLCALL           
                xmlLoadCatalog          (const char *filename);
XMLPUBFUN void XMLCALL          
                xmlLoadCatalogs         (const char *paths);
XMLPUBFUN void XMLCALL          
                xmlCatalogCleanup       (void);
#ifdef LIBXML_OUTPUT_ENABLED
XMLPUBFUN void XMLCALL          
                xmlCatalogDump          (FILE *out);
#endif 
XMLPUBFUN xmlChar * XMLCALL     
                xmlCatalogResolve       (const xmlChar *pubID,
                                         const xmlChar *sysID);
XMLPUBFUN xmlChar * XMLCALL     
                xmlCatalogResolveSystem (const xmlChar *sysID);
XMLPUBFUN xmlChar * XMLCALL     
                xmlCatalogResolvePublic (const xmlChar *pubID);
XMLPUBFUN xmlChar * XMLCALL     
                xmlCatalogResolveURI    (const xmlChar *URI);
XMLPUBFUN int XMLCALL           
                xmlCatalogAdd           (const xmlChar *type,
                                         const xmlChar *orig,
                                         const xmlChar *replace);
XMLPUBFUN int XMLCALL           
                xmlCatalogRemove        (const xmlChar *value);
XMLPUBFUN xmlDocPtr XMLCALL     
                xmlParseCatalogFile     (const char *filename);
XMLPUBFUN int XMLCALL           
                xmlCatalogConvert       (void);
XMLPUBFUN void XMLCALL          
                xmlCatalogFreeLocal     (void *catalogs);
XMLPUBFUN void * XMLCALL                
                xmlCatalogAddLocal      (void *catalogs,
                                         const xmlChar *URL);
XMLPUBFUN xmlChar * XMLCALL     
                xmlCatalogLocalResolve  (void *catalogs,
                                         const xmlChar *pubID,
                                         const xmlChar *sysID);
XMLPUBFUN xmlChar * XMLCALL     
                xmlCatalogLocalResolveURI(void *catalogs,
                                         const xmlChar *URI);
XMLPUBFUN int XMLCALL           
                xmlCatalogSetDebug      (int level);
XMLPUBFUN xmlCatalogPrefer XMLCALL 
                xmlCatalogSetDefaultPrefer(xmlCatalogPrefer prefer);
XMLPUBFUN void XMLCALL          
                xmlCatalogSetDefaults   (xmlCatalogAllow allow);
XMLPUBFUN xmlCatalogAllow XMLCALL       
                xmlCatalogGetDefaults   (void);
XMLPUBFUN const xmlChar * XMLCALL       
                xmlCatalogGetSystem     (const xmlChar *sysID);
XMLPUBFUN const xmlChar * XMLCALL       
                xmlCatalogGetPublic     (const xmlChar *pubID);
#ifdef __cplusplus
}
#endif
#endif 
#endif