williamr@4: /* williamr@4: * Summary: the core parser module williamr@4: * Description: Interfaces, constants and types related to the XML parser williamr@4: * williamr@4: * Copy: See Copyright for the status of this software. williamr@4: * williamr@4: * Author: Daniel Veillard williamr@4: * Portion Copyright © 2009 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. williamr@4: */ williamr@4: williamr@4: /** @file williamr@4: @publishedAll williamr@4: @released williamr@4: */ williamr@4: williamr@4: #ifndef XML_PARSER_H williamr@4: #define XML_PARSER_H williamr@4: williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: #include williamr@4: williamr@4: //typedef struct _xmlParserInput xmlParserInput; williamr@4: //typedef xmlParserInput *xmlParserInputPtr; williamr@4: williamr@4: #include williamr@4: williamr@4: #ifdef __cplusplus williamr@4: extern "C" { williamr@4: #endif williamr@4: williamr@4: /** williamr@4: * XML_DEFAULT_VERSION: williamr@4: * williamr@4: * The default version of XML used: 1.0 williamr@4: */ williamr@4: #define XML_DEFAULT_VERSION "1.0" williamr@4: williamr@4: /** williamr@4: * xmlParserInput: williamr@4: * williamr@4: * An xmlParserInput is an input flow for the XML processor. williamr@4: * Each entity parsed is associated an xmlParserInput (except the williamr@4: * few predefined ones). This is the case both for internal entities williamr@4: * - in which case the flow is already completely in memory - or williamr@4: * external entities - in which case we use the buf structure for williamr@4: * progressive reading and I18N conversions to the internal UTF-8 format. williamr@4: */ williamr@4: williamr@4: /** williamr@4: * xmlParserInputDeallocate: williamr@4: * @param str the string to deallocate williamr@4: * williamr@4: * Callback for freeing some parser input allocations. williamr@4: */ williamr@4: typedef void (* xmlParserInputDeallocate)(xmlChar *str); williamr@4: williamr@4: struct _xmlParserInput { williamr@4: /* Input buffer */ williamr@4: xmlParserInputBufferPtr buf; /* UTF-8 encoded buffer */ williamr@4: williamr@4: const char *filename; /* The file analyzed, if any */ williamr@4: const char *directory; /* the directory/base of the file */ williamr@4: const xmlChar *base; /* Base of the array to parse */ williamr@4: const xmlChar *cur; /* Current char being parsed */ williamr@4: const xmlChar *end; /* end of the array to parse */ williamr@4: int length; /* length if known */ williamr@4: int line; /* Current line */ williamr@4: int col; /* Current column */ williamr@4: /* williamr@4: * NOTE: consumed is only tested for equality in the parser code, williamr@4: * so even if there is an overflow this should not give troubles williamr@4: * for parsing very large instances. williamr@4: */ williamr@4: unsigned long consumed; /* How many xmlChars already consumed */ williamr@4: xmlParserInputDeallocate free; /* function to deallocate the base */ williamr@4: const xmlChar *encoding; /* the encoding string for entity */ williamr@4: const xmlChar *version; /* the version string for entity */ williamr@4: int standalone; /* Was that entity marked standalone */ williamr@4: int id; /* an unique identifier for the entity */ williamr@4: }; williamr@4: williamr@4: /** williamr@4: * xmlParserNodeInfo: williamr@4: * williamr@4: * The parser can be asked to collect Node informations, i.e. at what williamr@4: * place in the file they were detected. williamr@4: * NOTE: This is off by default and not very well tested. williamr@4: */ williamr@4: typedef struct _xmlParserNodeInfo xmlParserNodeInfo; williamr@4: typedef xmlParserNodeInfo *xmlParserNodeInfoPtr; williamr@4: williamr@4: struct _xmlParserNodeInfo { williamr@4: const struct _xmlNode* node; williamr@4: /* Position & line # that text that created the node begins & ends on */ williamr@4: unsigned long begin_pos; williamr@4: unsigned long begin_line; williamr@4: unsigned long end_pos; williamr@4: unsigned long end_line; williamr@4: }; williamr@4: williamr@4: typedef struct _xmlParserNodeInfoSeq xmlParserNodeInfoSeq; williamr@4: typedef xmlParserNodeInfoSeq *xmlParserNodeInfoSeqPtr; williamr@4: struct _xmlParserNodeInfoSeq { williamr@4: unsigned long maximum; williamr@4: unsigned long length; williamr@4: xmlParserNodeInfo* buffer; williamr@4: }; williamr@4: williamr@4: /** williamr@4: * xmlParserInputState: williamr@4: * williamr@4: * The parser is now working also as a state based parser. williamr@4: * The recursive one use the state info for entities processing. williamr@4: */ williamr@4: typedef enum { williamr@4: XML_PARSER_EOF = -1, /* nothing is to be parsed */ williamr@4: XML_PARSER_START = 0, /* nothing has been parsed */ williamr@4: XML_PARSER_MISC, /* Misc* before int subset */ williamr@4: XML_PARSER_PI, /* Within a processing instruction */ williamr@4: XML_PARSER_DTD, /* within some DTD content */ williamr@4: XML_PARSER_PROLOG, /* Misc* after internal subset */ williamr@4: XML_PARSER_COMMENT, /* within a comment */ williamr@4: XML_PARSER_START_TAG, /* within a start tag */ williamr@4: XML_PARSER_CONTENT, /* within the content */ williamr@4: XML_PARSER_CDATA_SECTION, /* within a CDATA section */ williamr@4: XML_PARSER_END_TAG, /* within a closing tag */ williamr@4: XML_PARSER_ENTITY_DECL, /* within an entity declaration */ williamr@4: XML_PARSER_ENTITY_VALUE, /* within an entity value in a decl */ williamr@4: XML_PARSER_ATTRIBUTE_VALUE, /* within an attribute value */ williamr@4: XML_PARSER_SYSTEM_LITERAL, /* within a SYSTEM value */ williamr@4: XML_PARSER_EPILOG, /* the Misc* after the last end tag */ williamr@4: XML_PARSER_IGNORE, /* within an IGNORED section */ williamr@4: XML_PARSER_PUBLIC_LITERAL /* within a PUBLIC value */ williamr@4: } xmlParserInputState; williamr@4: williamr@4: /** williamr@4: * XML_DETECT_IDS: williamr@4: * williamr@4: * Bit in the loadsubset context field to tell to do ID/REFs lookups. williamr@4: * Use it to initialize xmlLoadExtDtdDefaultValue. williamr@4: */ williamr@4: #define XML_DETECT_IDS 2 williamr@4: williamr@4: /** williamr@4: * XML_COMPLETE_ATTRS: williamr@4: * williamr@4: * Bit in the loadsubset context field to tell to do complete the williamr@4: * elements attributes lists with the ones defaulted from the DTDs. williamr@4: * Use it to initialize xmlLoadExtDtdDefaultValue. williamr@4: */ williamr@4: #define XML_COMPLETE_ATTRS 4 williamr@4: williamr@4: /** williamr@4: * XML_SKIP_IDS: williamr@4: * williamr@4: * Bit in the loadsubset context field to tell to not do ID/REFs registration. williamr@4: * Used to initialize xmlLoadExtDtdDefaultValue in some special cases. williamr@4: */ williamr@4: #define XML_SKIP_IDS 8 williamr@4: williamr@4: /** williamr@4: * xmlParserCtxt: williamr@4: * williamr@4: * The parser context. williamr@4: * NOTE This doesn't completely define the parser state, the (current ?) williamr@4: * design of the parser uses recursive function calls since this allow williamr@4: * and easy mapping from the production rules of the specification williamr@4: * to the actual code. The drawback is that the actual function call williamr@4: * also reflect the parser state. However most of the parsing routines williamr@4: * takes as the only argument the parser context pointer, so migrating williamr@4: * to a state based parser for progressive parsing shouldn't be too hard. williamr@4: */ williamr@4: struct _xmlParserCtxt { williamr@4: struct _xmlSAXHandler *sax; /* The SAX handler */ williamr@4: void* userData; /* For SAX interface only, used by DOM build */ williamr@4: xmlDocPtr myDoc; /* the document being built */ williamr@4: int wellFormed; /* is the document well formed */ williamr@4: int replaceEntities; /* shall we replace entities ? */ williamr@4: const xmlChar* encoding; /* the declared encoding, if any */ williamr@4: int standalone; /* standalone document */ williamr@4: int html; /* an HTML(1)/Docbook(2) document */ williamr@4: williamr@4: /* Input stream stack */ williamr@4: xmlParserInputPtr input; /* Current input stream */ williamr@4: int inputNr; /* Number of current input streams */ williamr@4: int inputMax; /* Max number of input streams */ williamr@4: xmlParserInputPtr* inputTab; /* stack of inputs */ williamr@4: williamr@4: #ifdef LIBXML_ENABLE_GS_CACHING_IN_CTXT williamr@4: // Note: location is chosen trying to get GS pointer into proximity to williamr@4: // the data often referred to (to avoid cache misses) williamr@4: //XMLENGINE: NEW CODE williamr@4: void* cachedGs; /* cached GS pointer */ williamr@4: #endif williamr@4: /* Node analysis stack only used for DOM building */ williamr@4: xmlNodePtr node; /* Current parsed Node */ williamr@4: int nodeNr; /* Depth of the parsing stack */ williamr@4: int nodeMax; /* Max depth of the parsing stack */ williamr@4: xmlNodePtr* nodeTab; /* array of nodes */ williamr@4: williamr@4: int errNo; /* error code */ williamr@4: williamr@4: int hasExternalSubset; /* reference and external subset */ williamr@4: int hasPErefs; /* the internal subset has PE refs */ williamr@4: int external; /* are we parsing an external entity */ williamr@4: williamr@4: int valid; /* is the document valid */ williamr@4: int validate; /* shall we try to validate ? */ williamr@4: williamr@4: xmlParserInputState instate; /* current type of input */ williamr@4: int token; /* next char look-ahead */ williamr@4: williamr@4: char* directory; /* the data directory */ williamr@4: williamr@4: /* Node name stack */ williamr@4: const xmlChar* name; /* Current parsed Node */ williamr@4: int nameNr; /* Depth of the parsing stack */ williamr@4: int nameMax; /* Max depth of the parsing stack */ williamr@4: const xmlChar** nameTab; /* array of nodes */ williamr@4: williamr@4: long nbChars; /* number of xmlChar processed */ williamr@4: long checkIndex; /* used by progressive parsing lookup */ williamr@4: int keepBlanks; /* ugly but ... */ williamr@4: int disableSAX; /* SAX callbacks are disabled */ williamr@4: int inSubset; /* Parsing is in int 1/ext 2 subset */ williamr@4: int stackLowThreshold; /* minimum amount of thread's stack left */ williamr@4: williamr@4: /* xml:space values */ williamr@4: int* space; /* Should the parser preserve spaces */ williamr@4: int spaceNr; /* Depth of the parsing stack */ williamr@4: int spaceMax; /* Max depth of the parsing stack */ williamr@4: int* spaceTab; /* array of space infos */ williamr@4: williamr@4: int depth; /* to prevent entity substitution loops */ williamr@4: int charset; /* encoding of the in-memory content williamr@4: actually an xmlCharEncoding */ williamr@4: int nodelen; /* Those two fields are there to */ williamr@4: int nodemem; /* Speed up large node parsing */ williamr@4: int pedantic; /* signal pedantic warnings */ williamr@4: void* _private; /* For user data, libxml won't touch it */ williamr@4: williamr@4: int loadsubset; /* should the external subset be loaded */ williamr@4: williamr@4: void* catalogs; /* document's own catalog */ williamr@4: int progressive; /* is this a progressive parsing */ williamr@4: xmlDictPtr dict; /* dictionnary for the parser */ williamr@4: const xmlChar** atts; /* array for the attributes callbacks */ williamr@4: int maxatts; /* the size of the array */ williamr@4: williamr@4: /* williamr@4: * pre-interned strings williamr@4: */ williamr@4: const xmlChar* str_xml; williamr@4: const xmlChar* str_xmlns; williamr@4: const xmlChar* str_xml_ns; williamr@4: williamr@4: /* williamr@4: * Everything below is used only by the new SAX mode williamr@4: */ williamr@4: int sax2; /* operating in the new SAX mode */ williamr@4: int nsNr; /* the number of inherited namespaces */ williamr@4: int nsMax; /* the size of the arrays */ williamr@4: const xmlChar** nsTab; /* the array of prefix/namespace name */ williamr@4: int* attallocs; /* which attribute were allocated */ williamr@4: void** pushTab; /* array of data for push */ williamr@4: xmlHashTablePtr attsDefault; /* defaulted attributes if any */ williamr@4: xmlHashTablePtr attsSpecial; /* non-CDATA attributes if any */ williamr@4: int nsWellFormed; /* is the document XML Nanespace okay */ williamr@4: int options; /* Extra options */ williamr@4: williamr@4: /* williamr@4: * Those fields are needed only for streaming parsing so far williamr@4: */ williamr@4: int dictNames; /* Use dictionary names for the tree */ williamr@4: int freeElemsNr; /* number of freed element nodes */ williamr@4: xmlNodePtr freeElems; /* List of freed element nodes */ williamr@4: int freeAttrsNr; /* number of freed attributes nodes */ williamr@4: xmlAttrPtr freeAttrs; /* List of freed attributes nodes */ williamr@4: williamr@4: /* williamr@4: * the complete error informations for the last error. williamr@4: */ williamr@4: xmlError lastError; williamr@4: williamr@4: // XMLENGINE: BEGIN NEW CODE - lastNsNr attribute in parser context williamr@4: int lastNsNr; /* temporarily contains number of new namespaces in element*/ williamr@4: // XMLENGINE: END NEW CODE williamr@4: williamr@4: //== Fields less used in libxml2, so put in the end of the structure (offset is > 255) williamr@4: // williamr@4: // Note: these fields were move from their original place in the structure williamr@4: // williamr@4: const xmlChar* version; /* the XML version string */ williamr@4: const xmlChar* intSubName; /* name of subset */ williamr@4: xmlChar* extSubURI; /* URI of external subset */ williamr@4: xmlChar* extSubSystem; /* SYSTEM ID of external subset */ williamr@4: int recovery; /* run in recovery mode */ williamr@4: int docdict; /* use strings from dict to build tree */ williamr@4: xmlParserInputPtr entity; /* used to check entities boundaries */ williamr@4: williamr@4: xmlValidCtxt vctxt; /* The validity context */ williamr@4: williamr@4: //== Fields below are likely to stay disabled forever in XML ENGINE williamr@4: williamr@4: #ifdef LIBXML_ENABLE_NODE_LINEINFO williamr@4: int linenumbers; /* set line number in element content */ williamr@4: #endif williamr@4: williamr@4: #ifdef XMLENGINE_ENABLE_PARSER_RECORD_INFO williamr@4: int record_info; /* Whether node info should be kept */ williamr@4: xmlParserNodeInfoSeq node_seq; /* info about each node parsed */ williamr@4: #endif williamr@4: williamr@4: williamr@4: }; // struct _xmlParserCtxt williamr@4: williamr@4: williamr@4: williamr@4: /** williamr@4: * xmlSAXLocator: williamr@4: * williamr@4: * A SAX Locator. williamr@4: */ williamr@4: struct _xmlSAXLocator { williamr@4: const xmlChar* (*getPublicId)(void* ctx); williamr@4: const xmlChar* (*getSystemId)(void* ctx); williamr@4: int (*getLineNumber)(void* ctx); williamr@4: int (*getColumnNumber)(void* ctx); williamr@4: }; williamr@4: williamr@4: /** williamr@4: * xmlSAXHandler: williamr@4: * williamr@4: * A SAX handler is bunch of callbacks called by the parser when processing williamr@4: * of the input generate data or structure informations. williamr@4: */ williamr@4: williamr@4: /** williamr@4: * resolveEntitySAXFunc: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * @param publicId The public ID of the entity williamr@4: * @param systemId The system ID of the entity williamr@4: * williamr@4: * Callback: williamr@4: * The entity loader, to control the loading of external entities, williamr@4: * the application can either: williamr@4: * - override this resolveEntity() callback in the SAX block williamr@4: * - or better use the xmlSetExternalEntityLoader() function to williamr@4: * set up it's own entity resolution routine williamr@4: * williamr@4: * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour. williamr@4: */ williamr@4: typedef xmlParserInputPtr (*resolveEntitySAXFunc) ( williamr@4: void* ctx, williamr@4: const xmlChar* publicId, williamr@4: const xmlChar* systemId); williamr@4: /** williamr@4: * internalSubsetSAXFunc: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * @param name the root element name williamr@4: * @param ExternalID the external ID williamr@4: * @param SystemID the SYSTEM ID (e.g. filename or URL) williamr@4: * williamr@4: * Callback on internal subset declaration. williamr@4: */ williamr@4: typedef void (*internalSubsetSAXFunc) ( williamr@4: void* ctx, williamr@4: const xmlChar* name, williamr@4: const xmlChar* ExternalID, williamr@4: const xmlChar* SystemID); williamr@4: /** williamr@4: * externalSubsetSAXFunc: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * @param name the root element name williamr@4: * @param ExternalID the external ID williamr@4: * @param SystemID the SYSTEM ID (e.g. filename or URL) williamr@4: * williamr@4: * Callback on external subset declaration. williamr@4: */ williamr@4: typedef void (*externalSubsetSAXFunc) ( williamr@4: void* ctx, williamr@4: const xmlChar* name, williamr@4: const xmlChar* ExternalID, williamr@4: const xmlChar* SystemID); williamr@4: /** williamr@4: * getEntitySAXFunc: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * @param name The entity name williamr@4: * williamr@4: * Get an entity by name. williamr@4: * williamr@4: * Returns the xmlEntityPtr if found. williamr@4: */ williamr@4: typedef xmlEntityPtr (*getEntitySAXFunc) ( williamr@4: void* ctx, williamr@4: const xmlChar* name); williamr@4: /** williamr@4: * getParameterEntitySAXFunc: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * @param name The entity name williamr@4: * williamr@4: * Get a parameter entity by name. williamr@4: * williamr@4: * Returns the xmlEntityPtr if found. williamr@4: */ williamr@4: typedef xmlEntityPtr (*getParameterEntitySAXFunc) ( williamr@4: void* ctx, williamr@4: const xmlChar* name); williamr@4: /** williamr@4: * entityDeclSAXFunc: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * @param name the entity name williamr@4: * @param type the entity type williamr@4: * @param publicId The public ID of the entity williamr@4: * @param systemId The system ID of the entity williamr@4: * @param content the entity value (without processing). williamr@4: * williamr@4: * An entity definition has been parsed. williamr@4: */ williamr@4: typedef void (*entityDeclSAXFunc) ( williamr@4: void* ctx, williamr@4: const xmlChar* name, williamr@4: int type, williamr@4: const xmlChar* publicId, williamr@4: const xmlChar* systemId, williamr@4: xmlChar* content); williamr@4: /** williamr@4: * notationDeclSAXFunc: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * @param name The name of the notation williamr@4: * @param publicId The public ID of the entity williamr@4: * @param systemId The system ID of the entity williamr@4: * williamr@4: * What to do when a notation declaration has been parsed. williamr@4: */ williamr@4: typedef void (*notationDeclSAXFunc)( williamr@4: void* ctx, williamr@4: const xmlChar* name, williamr@4: const xmlChar* publicId, williamr@4: const xmlChar* systemId); williamr@4: /** williamr@4: * attributeDeclSAXFunc: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * @param elem the name of the element williamr@4: * @param fullname the attribute name williamr@4: * @param type the attribute type williamr@4: * @param def the type of default value williamr@4: * @param defaultValue the attribute default value williamr@4: * @param tree the tree of enumerated value set williamr@4: * williamr@4: * An attribute definition has been parsed. williamr@4: */ williamr@4: typedef void (*attributeDeclSAXFunc)( williamr@4: void* ctx, williamr@4: const xmlChar* elem, williamr@4: const xmlChar* fullname, williamr@4: int type, williamr@4: int def, williamr@4: const xmlChar* defaultValue, williamr@4: xmlEnumerationPtr tree); williamr@4: /** williamr@4: * elementDeclSAXFunc: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * @param name the element name williamr@4: * @param type the element type williamr@4: * @param content the element value tree williamr@4: * williamr@4: * An element definition has been parsed. williamr@4: */ williamr@4: typedef void (*elementDeclSAXFunc)( williamr@4: void* ctx, williamr@4: const xmlChar* name, williamr@4: int type, williamr@4: xmlElementContentPtr content); williamr@4: /** williamr@4: * unparsedEntityDeclSAXFunc: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * @param name The name of the entity williamr@4: * @param publicId The public ID of the entity williamr@4: * @param systemId The system ID of the entity williamr@4: * @param notationName the name of the notation williamr@4: * williamr@4: * What to do when an unparsed entity declaration is parsed. williamr@4: */ williamr@4: typedef void (*unparsedEntityDeclSAXFunc)(void *ctx, williamr@4: const xmlChar *name, williamr@4: const xmlChar *publicId, williamr@4: const xmlChar *systemId, williamr@4: const xmlChar *notationName); williamr@4: /** williamr@4: * setDocumentLocatorSAXFunc: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * @param loc A SAX Locator williamr@4: * williamr@4: * Receive the document locator at startup, actually xmlDefaultSAXLocator. williamr@4: * Everything is available on the context, so this is useless in our case. williamr@4: */ williamr@4: typedef void (*setDocumentLocatorSAXFunc) (void *ctx, williamr@4: xmlSAXLocatorPtr loc); williamr@4: /** williamr@4: * startDocumentSAXFunc: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * williamr@4: * Called when the document start being processed. williamr@4: */ williamr@4: typedef void (*startDocumentSAXFunc) (void *ctx); williamr@4: /** williamr@4: * endDocumentSAXFunc: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * williamr@4: * Called when the document end has been detected. williamr@4: */ williamr@4: typedef void (*endDocumentSAXFunc) (void *ctx); williamr@4: /** williamr@4: * startElementSAXFunc: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * @param name The element name, including namespace prefix williamr@4: * @param atts An array of name/value attributes pairs, NULL terminated williamr@4: * williamr@4: * Called when an opening tag has been processed. williamr@4: */ williamr@4: typedef void (*startElementSAXFunc) (void *ctx, williamr@4: const xmlChar *name, williamr@4: const xmlChar **atts); williamr@4: /** williamr@4: * endElementSAXFunc: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * @param name The element name williamr@4: * williamr@4: * Called when the end of an element has been detected. williamr@4: */ williamr@4: typedef void (*endElementSAXFunc) (void *ctx, williamr@4: const xmlChar *name); williamr@4: /** williamr@4: * attributeSAXFunc: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * @param name The attribute name, including namespace prefix williamr@4: * @param value The attribute value williamr@4: * williamr@4: * Handle an attribute that has been read by the parser. williamr@4: * The default handling is to convert the attribute into an williamr@4: * DOM subtree and past it in a new xmlAttr element added to williamr@4: * the element. williamr@4: */ williamr@4: typedef void (*attributeSAXFunc) (void *ctx, williamr@4: const xmlChar *name, williamr@4: const xmlChar *value); williamr@4: /** williamr@4: * referenceSAXFunc: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * @param name The entity name williamr@4: * williamr@4: * Called when an entity reference is detected. williamr@4: */ williamr@4: typedef void (*referenceSAXFunc) (void *ctx, williamr@4: const xmlChar *name); williamr@4: /** williamr@4: * charactersSAXFunc: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * @param ch a xmlChar string williamr@4: * @param len the number of xmlChar williamr@4: * williamr@4: * Receiving some chars from the parser. williamr@4: */ williamr@4: typedef void (*charactersSAXFunc) (void *ctx, williamr@4: const xmlChar *ch, williamr@4: int len); williamr@4: /** williamr@4: * ignorableWhitespaceSAXFunc: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * @param ch a xmlChar string williamr@4: * @param len the number of xmlChar williamr@4: * williamr@4: * Receiving some ignorable whitespaces from the parser. williamr@4: * UNUSED: by default the DOM building will use characters. williamr@4: */ williamr@4: typedef void (*ignorableWhitespaceSAXFunc) (void *ctx, williamr@4: const xmlChar *ch, williamr@4: int len); williamr@4: /** williamr@4: * processingInstructionSAXFunc: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * @param target the target name williamr@4: * @param data the PI data's williamr@4: * williamr@4: * A processing instruction has been parsed. williamr@4: */ williamr@4: typedef void (*processingInstructionSAXFunc) (void *ctx, williamr@4: const xmlChar *target, williamr@4: const xmlChar *data); williamr@4: /** williamr@4: * commentSAXFunc: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * @param value the comment content williamr@4: * williamr@4: * A comment has been parsed. williamr@4: */ williamr@4: typedef void (*commentSAXFunc) (void *ctx, williamr@4: const xmlChar *value); williamr@4: /** williamr@4: * cdataBlockSAXFunc: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * @param value The pcdata content williamr@4: * @param len the block length williamr@4: * williamr@4: * Called when a pcdata block has been parsed. williamr@4: */ williamr@4: typedef void (*cdataBlockSAXFunc) ( williamr@4: void *ctx, williamr@4: const xmlChar *value, williamr@4: int len); williamr@4: /** williamr@4: * warningSAXFunc: williamr@4: * @param ctx an XML parser context williamr@4: * @param msg the message to display/transmit williamr@4: * @param # extra parameters for the message display williamr@4: * williamr@4: * Display and format a warning messages, callback. williamr@4: */ williamr@4: typedef void (*warningSAXFunc) (void *ctx, williamr@4: const char *msg, ...); williamr@4: /** williamr@4: * errorSAXFunc: williamr@4: * @param ctx an XML parser context williamr@4: * @param msg the message to display/transmit williamr@4: * @param # extra parameters for the message display williamr@4: * williamr@4: * Display and format an error messages, callback. williamr@4: */ williamr@4: typedef void (*errorSAXFunc) (void *ctx, williamr@4: const char *msg, ...); williamr@4: /** williamr@4: * fatalErrorSAXFunc: williamr@4: * @param ctx an XML parser context williamr@4: * @param msg the message to display/transmit williamr@4: * @param # extra parameters for the message display williamr@4: * williamr@4: * Display and format fatal error messages, callback. williamr@4: * Note: so far fatalError() SAX callbacks are not used, error() williamr@4: * get all the callbacks for errors. williamr@4: */ williamr@4: typedef void (*fatalErrorSAXFunc) (void *ctx, williamr@4: const char *msg, ...); williamr@4: /** williamr@4: * isStandaloneSAXFunc: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * williamr@4: * Is this document tagged standalone? williamr@4: * williamr@4: * Returns 1 if true williamr@4: */ williamr@4: typedef int (*isStandaloneSAXFunc) (void *ctx); williamr@4: /** williamr@4: * hasInternalSubsetSAXFunc: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * williamr@4: * Does this document has an internal subset. williamr@4: * williamr@4: * Returns 1 if true williamr@4: */ williamr@4: typedef int (*hasInternalSubsetSAXFunc) (void *ctx); williamr@4: williamr@4: /** williamr@4: * hasExternalSubsetSAXFunc: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * williamr@4: * Does this document has an external subset? williamr@4: * williamr@4: * Returns 1 if true williamr@4: */ williamr@4: typedef int (*hasExternalSubsetSAXFunc) (void *ctx); williamr@4: williamr@4: /************************************************************************ williamr@4: * * williamr@4: * The SAX version 2 API extensions * williamr@4: * * williamr@4: ************************************************************************/ williamr@4: /** williamr@4: * XML_SAX2_MAGIC: williamr@4: * williamr@4: * Special constant found in SAX2 blocks initialized fields williamr@4: */ williamr@4: #define XML_SAX2_MAGIC 0xDEEDBEAF williamr@4: williamr@4: /** williamr@4: * startElementNsSAX2Func: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * @param localname the local name of the element williamr@4: * @param prefix the element namespace prefix if available williamr@4: * @param URI the element namespace name if available williamr@4: * @param nb_namespaces number of namespace definitions on that node williamr@4: * @param namespaces pointer to the array of prefix/URI pairs namespace definitions williamr@4: * @param nb_attributes the number of attributes on that node williamr@4: * @param nb_defaulted the number of defaulted attributes. The defaulted williamr@4: * ones are at the end of the array williamr@4: * @param attributes pointer to the array of (localname/prefix/URI/value/end) williamr@4: * attribute values. williamr@4: * williamr@4: * SAX2 callback when an element start has been detected by the parser. williamr@4: * It provides the namespace informations for the element, as well as williamr@4: * the new namespace declarations on the element. williamr@4: */ williamr@4: williamr@4: typedef void (*startElementNsSAX2Func) (void *ctx, williamr@4: const xmlChar *localname, williamr@4: const xmlChar *prefix, williamr@4: const xmlChar *URI, williamr@4: int nb_namespaces, williamr@4: const xmlChar **namespaces, williamr@4: int nb_attributes, williamr@4: int nb_defaulted, williamr@4: const xmlChar **attributes); williamr@4: williamr@4: /** williamr@4: * endElementNsSAX2Func: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * @param localname the local name of the element williamr@4: * @param prefix the element namespace prefix if available williamr@4: * @param URI the element namespace name if available williamr@4: * williamr@4: * SAX2 callback when an element end has been detected by the parser. williamr@4: * It provides the namespace informations for the element. williamr@4: */ williamr@4: williamr@4: typedef void (*endElementNsSAX2Func) (void *ctx, williamr@4: const xmlChar *localname, williamr@4: const xmlChar *prefix, williamr@4: const xmlChar *URI); williamr@4: williamr@4: // XE: BEGIN new code williamr@4: /** williamr@4: * startPrefixMappingSAX2Func: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * @param prefix the element namespace prefix if available, NULL if default namespace williamr@4: * @param URI the element namespace name if available williamr@4: * williamr@4: * SAX2 callback when namespace prefix mapping is done. williamr@4: */ williamr@4: williamr@4: typedef void (*startPrefixMappingSAX2Func) (void *ctx, williamr@4: const xmlChar *prefix, williamr@4: const xmlChar *URI); williamr@4: williamr@4: williamr@4: /** williamr@4: * endPrefixMappingSAX2Func: williamr@4: * @param ctx the user data (XML parser context) williamr@4: * @param prefix the element namespace prefix if available, NULL otherwise williamr@4: * williamr@4: * SAX2 callback when namespace prefix mapping is getting out of scope. williamr@4: */ williamr@4: williamr@4: typedef void (*endPrefixMappingSAX2Func) (void *ctx, williamr@4: const xmlChar *prefix); williamr@4: williamr@4: // XE: END new code williamr@4: williamr@4: struct _xmlSAXHandler { williamr@4: internalSubsetSAXFunc internalSubset; williamr@4: isStandaloneSAXFunc isStandalone; williamr@4: hasInternalSubsetSAXFunc hasInternalSubset; williamr@4: hasExternalSubsetSAXFunc hasExternalSubset; williamr@4: resolveEntitySAXFunc resolveEntity; williamr@4: getEntitySAXFunc getEntity; williamr@4: entityDeclSAXFunc entityDecl; williamr@4: notationDeclSAXFunc notationDecl; williamr@4: attributeDeclSAXFunc attributeDecl; williamr@4: elementDeclSAXFunc elementDecl; williamr@4: unparsedEntityDeclSAXFunc unparsedEntityDecl; williamr@4: setDocumentLocatorSAXFunc setDocumentLocator; williamr@4: startDocumentSAXFunc startDocument; williamr@4: endDocumentSAXFunc endDocument; williamr@4: startElementSAXFunc startElement; williamr@4: endElementSAXFunc endElement; williamr@4: referenceSAXFunc reference; williamr@4: charactersSAXFunc characters; williamr@4: ignorableWhitespaceSAXFunc ignorableWhitespace; williamr@4: processingInstructionSAXFunc processingInstruction; williamr@4: commentSAXFunc comment; williamr@4: warningSAXFunc warning; williamr@4: errorSAXFunc error; williamr@4: fatalErrorSAXFunc fatalError; /* unused - error() get all the errors */ williamr@4: getParameterEntitySAXFunc getParameterEntity; williamr@4: cdataBlockSAXFunc cdataBlock; williamr@4: externalSubsetSAXFunc externalSubset; williamr@4: unsigned int initialized; williamr@4: /* The following fields are extensions available only on version 2 */ williamr@4: void *_private; williamr@4: startElementNsSAX2Func startElementNs; williamr@4: endElementNsSAX2Func endElementNs; williamr@4: xmlStructuredErrorFunc serror; williamr@4: startPrefixMappingSAX2Func startPrefixMapping; williamr@4: endPrefixMappingSAX2Func endPrefixMapping; williamr@4: }; williamr@4: williamr@4: /* williamr@4: * SAX Version 1 williamr@4: */ williamr@4: typedef struct _xmlSAXHandlerV1 xmlSAXHandlerV1; williamr@4: typedef xmlSAXHandlerV1 *xmlSAXHandlerV1Ptr; williamr@4: struct _xmlSAXHandlerV1 { williamr@4: internalSubsetSAXFunc internalSubset; williamr@4: isStandaloneSAXFunc isStandalone; williamr@4: hasInternalSubsetSAXFunc hasInternalSubset; williamr@4: hasExternalSubsetSAXFunc hasExternalSubset; williamr@4: resolveEntitySAXFunc resolveEntity; williamr@4: getEntitySAXFunc getEntity; williamr@4: entityDeclSAXFunc entityDecl; williamr@4: notationDeclSAXFunc notationDecl; williamr@4: attributeDeclSAXFunc attributeDecl; williamr@4: elementDeclSAXFunc elementDecl; williamr@4: unparsedEntityDeclSAXFunc unparsedEntityDecl; williamr@4: setDocumentLocatorSAXFunc setDocumentLocator; williamr@4: startDocumentSAXFunc startDocument; williamr@4: endDocumentSAXFunc endDocument; williamr@4: startElementSAXFunc startElement; williamr@4: endElementSAXFunc endElement; williamr@4: referenceSAXFunc reference; williamr@4: charactersSAXFunc characters; williamr@4: ignorableWhitespaceSAXFunc ignorableWhitespace; williamr@4: processingInstructionSAXFunc processingInstruction; williamr@4: commentSAXFunc comment; williamr@4: warningSAXFunc warning; williamr@4: errorSAXFunc error; williamr@4: fatalErrorSAXFunc fatalError; /* unused error() get all the errors */ williamr@4: getParameterEntitySAXFunc getParameterEntity; williamr@4: cdataBlockSAXFunc cdataBlock; williamr@4: externalSubsetSAXFunc externalSubset; williamr@4: unsigned int initialized; williamr@4: }; williamr@4: williamr@4: williamr@4: /** williamr@4: * xmlExternalEntityLoader: williamr@4: * @param URL The System ID of the resource requested williamr@4: * @param ID The Public ID of the resource requested williamr@4: * @param context the XML parser context williamr@4: * williamr@4: * External entity loaders types. williamr@4: * williamr@4: * Returns the entity input parser. williamr@4: */ williamr@4: typedef xmlParserInputPtr (*xmlExternalEntityLoader) (const char *URL, williamr@4: const char *ID, williamr@4: xmlParserCtxtPtr context); williamr@4: williamr@4: #ifdef __cplusplus williamr@4: } williamr@4: #endif williamr@4: williamr@4: #ifdef __cplusplus williamr@4: extern "C" { williamr@4: #endif williamr@4: williamr@4: williamr@4: /* williamr@4: * Init/Cleanup williamr@4: */ williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlInitParser (void); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlCleanupParser (void); williamr@4: williamr@4: /* williamr@4: * Input functions williamr@4: */ williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlParserInputRead (xmlParserInputPtr in, williamr@4: int len); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlParserInputGrow (xmlParserInputPtr in, williamr@4: int len); williamr@4: williamr@4: /* williamr@4: * Basic parsing Interfaces williamr@4: */ williamr@4: XMLPUBFUN xmlDocPtr XMLCALL williamr@4: xmlParseDoc (xmlChar *cur); williamr@4: XMLPUBFUN xmlDocPtr XMLCALL williamr@4: xmlParseMemory (const char *buffer, williamr@4: int size); williamr@4: XMLPUBFUN xmlDocPtr XMLCALL williamr@4: xmlParseFile (const char *filename); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlSubstituteEntitiesDefault(int val); williamr@4: williamr@4: #ifndef XMLENGINE_EXCLUDE_UNUSED williamr@4: XMLPUBFUN int XMLCALL xmlKeepBlanksDefault (int val); williamr@4: XMLPUBFUN int XMLCALL xmlLineNumbersDefault (int val); williamr@4: #endif /* ifndef XMLENGINE_EXCLUDE_UNUSED */ williamr@4: williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlStopParser (xmlParserCtxtPtr ctxt); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlPedanticParserDefault(int val); williamr@4: williamr@4: /* williamr@4: * Recovery mode williamr@4: */ williamr@4: XMLPUBFUN xmlDocPtr XMLCALL williamr@4: xmlRecoverDoc (xmlChar *cur); williamr@4: XMLPUBFUN xmlDocPtr XMLCALL williamr@4: xmlRecoverMemory (const char *buffer, int size); williamr@4: XMLPUBFUN xmlDocPtr XMLCALL williamr@4: xmlRecoverFile (const char *filename); williamr@4: williamr@4: /* williamr@4: * Less common routines and SAX interfaces williamr@4: */ williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlParseDocument (xmlParserCtxtPtr ctxt); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlParseExtParsedEnt(xmlParserCtxtPtr ctxt); williamr@4: XMLPUBFUN xmlDocPtr XMLCALL williamr@4: xmlSAXParseDoc (xmlSAXHandlerPtr sax, williamr@4: xmlChar *cur, williamr@4: int length, williamr@4: int recovery, williamr@4: int* /* out if !NULL */ errorCode); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlSAXUserParseFile (xmlSAXHandlerPtr sax, williamr@4: void *user_data, williamr@4: const char *filename); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlSAXUserParseMemory (xmlSAXHandlerPtr sax, williamr@4: void *user_data, williamr@4: const char *buffer, williamr@4: int size); williamr@4: XMLPUBFUN xmlDocPtr XMLCALL williamr@4: xmlSAXParseMemory (xmlSAXHandlerPtr sax, williamr@4: const char *buffer, williamr@4: int size, williamr@4: int recovery); williamr@4: XMLPUBFUN xmlDocPtr XMLCALL williamr@4: xmlSAXParseMemoryWithData (xmlSAXHandlerPtr sax, williamr@4: const char *buffer, williamr@4: int size, williamr@4: int recovery, williamr@4: void *data); williamr@4: XMLPUBFUN xmlDocPtr XMLCALL williamr@4: xmlSAXParseFile (xmlSAXHandlerPtr sax, williamr@4: const char *filename, williamr@4: int recovery); williamr@4: XMLPUBFUN xmlDocPtr XMLCALL williamr@4: xmlSAXParseFileWithData (xmlSAXHandlerPtr sax, williamr@4: const char *filename, williamr@4: int recovery, williamr@4: void *data); williamr@4: XMLPUBFUN xmlDocPtr XMLCALL williamr@4: xmlSAXParseEntity (xmlSAXHandlerPtr sax, williamr@4: const char *filename); williamr@4: XMLPUBFUN xmlDocPtr XMLCALL williamr@4: xmlParseEntity (const char *filename); williamr@4: XMLPUBFUN xmlDtdPtr XMLCALL williamr@4: xmlParseDTD (const xmlChar *ExternalID, williamr@4: const xmlChar *SystemID); williamr@4: XMLPUBFUN xmlDtdPtr XMLCALL williamr@4: xmlSAXParseDTD (xmlSAXHandlerPtr sax, williamr@4: const xmlChar *ExternalID, williamr@4: const xmlChar *SystemID); williamr@4: XMLPUBFUN xmlDtdPtr XMLCALL williamr@4: xmlIOParseDTD (xmlSAXHandlerPtr sax, williamr@4: xmlParserInputBufferPtr input, williamr@4: xmlCharEncoding enc); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlParseBalancedChunkMemory(xmlDocPtr doc, williamr@4: xmlSAXHandlerPtr sax, williamr@4: void *user_data, williamr@4: int depth, williamr@4: const xmlChar *string, williamr@4: xmlNodePtr *lst); williamr@4: // XMLENGINE: added from v2.6.21 williamr@4: XMLPUBFUN xmlParserErrors XMLCALL williamr@4: xmlParseInNodeContext (xmlNodePtr node, williamr@4: const char *data, williamr@4: int datalen, williamr@4: int options, williamr@4: xmlNodePtr *lst); williamr@4: //-- williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlParseBalancedChunkMemoryRecover(xmlDocPtr doc, williamr@4: xmlSAXHandlerPtr sax, williamr@4: void *user_data, williamr@4: int depth, williamr@4: const xmlChar *string, williamr@4: xmlNodePtr *lst, williamr@4: int recover); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlParseExternalEntity (xmlDocPtr doc, williamr@4: xmlSAXHandlerPtr sax, williamr@4: void *user_data, williamr@4: int depth, williamr@4: const xmlChar *URL, williamr@4: const xmlChar *ID, williamr@4: xmlNodePtr *lst); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlParseCtxtExternalEntity(xmlParserCtxtPtr ctx, williamr@4: const xmlChar *URL, williamr@4: const xmlChar *ID, williamr@4: xmlNodePtr *lst); williamr@4: williamr@4: /* williamr@4: * Parser contexts handling. williamr@4: */ williamr@4: XMLPUBFUN xmlParserCtxtPtr XMLCALL williamr@4: xmlNewParserCtxt (void); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlInitParserCtxt (xmlParserCtxtPtr ctxt); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlClearParserCtxt (xmlParserCtxtPtr ctxt); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlFreeParserCtxt (xmlParserCtxtPtr ctxt); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlSetupParserForBuffer (xmlParserCtxtPtr ctxt, williamr@4: const xmlChar* buffer, williamr@4: const char *filename); williamr@4: XMLPUBFUN xmlParserCtxtPtr XMLCALL williamr@4: xmlCreateDocParserCtxt (const xmlChar *cur, int length); williamr@4: williamr@4: /* williamr@4: * Reading/setting optional parsing features. williamr@4: */ williamr@4: williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlGetFeaturesList (int *len, williamr@4: const char **result); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlGetFeature (xmlParserCtxtPtr ctxt, williamr@4: const char *name, williamr@4: void *result); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlSetFeature (xmlParserCtxtPtr ctxt, williamr@4: const char *name, williamr@4: void *value); williamr@4: williamr@4: #ifdef LIBXML_PUSH_ENABLED williamr@4: /* williamr@4: * Interfaces for the Push mode. williamr@4: */ williamr@4: XMLPUBFUN xmlParserCtxtPtr XMLCALL williamr@4: xmlCreatePushParserCtxt(xmlSAXHandlerPtr sax, williamr@4: void *user_data, williamr@4: const char *chunk, williamr@4: int size, williamr@4: const char *filename); williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlParseChunk (xmlParserCtxtPtr ctxt, williamr@4: const char *chunk, williamr@4: int size, williamr@4: int terminate); williamr@4: #endif /* LIBXML_PUSH_ENABLED */ williamr@4: williamr@4: /* williamr@4: * Special I/O mode. williamr@4: */ williamr@4: #ifndef XMLENGINE_EXCLUDE_UNUSED williamr@4: XMLPUBFUN xmlParserCtxtPtr XMLCALL williamr@4: xmlCreateIOParserCtxt (xmlSAXHandlerPtr sax, williamr@4: void *user_data, williamr@4: xmlInputReadCallback ioread, williamr@4: xmlInputCloseCallback ioclose, williamr@4: void *ioctx, williamr@4: xmlCharEncoding enc); williamr@4: #endif /* ifndef XMLENGINE_EXCLUDE_UNUSED */ williamr@4: williamr@4: williamr@4: XMLPUBFUN xmlParserInputPtr XMLCALL williamr@4: xmlNewIOInputStream (xmlParserCtxtPtr ctxt, williamr@4: xmlParserInputBufferPtr input, williamr@4: xmlCharEncoding enc); williamr@4: williamr@4: #ifdef XMLENGINE_ENABLE_PARSER_RECORD_INFO williamr@4: /* williamr@4: * Node infos. williamr@4: */ williamr@4: XMLPUBFUN const xmlParserNodeInfo* XMLCALL williamr@4: xmlParserFindNodeInfo (const xmlParserCtxtPtr ctxt, williamr@4: const xmlNodePtr node); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlInitNodeInfoSeq (xmlParserNodeInfoSeqPtr seq); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlClearNodeInfoSeq (xmlParserNodeInfoSeqPtr seq); williamr@4: XMLPUBFUN unsigned long XMLCALL williamr@4: xmlParserFindNodeInfoIndex(const xmlParserNodeInfoSeqPtr seq, williamr@4: const xmlNodePtr node); williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlParserAddNodeInfo (xmlParserCtxtPtr ctxt, williamr@4: const xmlParserNodeInfoPtr info); williamr@4: #endif /* XMLENGINE_ENABLE_PARSER_RECORD_INFO */ williamr@4: williamr@4: /* williamr@4: * External entities handling actually implemented in xmlIO. williamr@4: */ williamr@4: williamr@4: #ifndef XMLENGINE_EXCLUDE_UNUSED williamr@4: XMLPUBFUN void XMLCALL xmlSetExternalEntityLoader(xmlExternalEntityLoader f); williamr@4: XMLPUBFUN xmlExternalEntityLoader XMLCALL xmlGetExternalEntityLoader(void); williamr@4: #endif /* ifndef XMLENGINE_EXCLUDE_UNUSED */ williamr@4: williamr@4: XMLPUBFUN xmlParserInputPtr XMLCALL williamr@4: xmlLoadExternalEntity (const char *URL, williamr@4: const char *ID, williamr@4: xmlParserCtxtPtr ctxt); williamr@4: williamr@4: /* williamr@4: * Index lookup, actually implemented in the encoding module williamr@4: */ williamr@4: williamr@4: #ifndef XMLENGINE_EXCLUDE_UNUSED williamr@4: XMLPUBFUN long XMLCALL xmlByteConsumed (xmlParserCtxtPtr ctxt); williamr@4: #endif /* ifndef XMLENGINE_EXCLUDE_UNUSED */ williamr@4: williamr@4: /* williamr@4: * New set of simpler/more flexible APIs williamr@4: */ williamr@4: /** williamr@4: * xmlParserOption: williamr@4: * williamr@4: * This is the set of XML parser options that can be passed down williamr@4: * to the xmlReadDoc() and similar calls. williamr@4: */ williamr@4: typedef enum { williamr@4: XML_PARSE_RECOVER = 1<<0, /* recover on errors */ williamr@4: XML_PARSE_NOENT = 1<<1, /* substitute entities */ williamr@4: XML_PARSE_DTDLOAD = 1<<2, /* load the external subset */ williamr@4: XML_PARSE_DTDATTR = 1<<3, /* default DTD attributes */ williamr@4: XML_PARSE_DTDVALID = 1<<4, /* validate with the DTD */ williamr@4: XML_PARSE_NOERROR = 1<<5, /* suppress error reports */ williamr@4: XML_PARSE_NOWARNING = 1<<6, /* suppress warning reports */ williamr@4: XML_PARSE_PEDANTIC = 1<<7, /* pedantic error reporting */ williamr@4: XML_PARSE_NOBLANKS = 1<<8, /* remove blank nodes */ williamr@4: XML_PARSE_SAX1 = 1<<9, /* use the SAX1 interface internally */ williamr@4: XML_PARSE_XINCLUDE = 1<<10,/* Implement XInclude substitition */ williamr@4: XML_PARSE_NONET = 1<<11,/* Forbid network access */ williamr@4: XML_PARSE_NODICT = 1<<12,/* Do not reuse the context dictionnary */ williamr@4: XML_PARSE_NSCLEAN = 1<<13,/* remove redundant namespaces declarations */ williamr@4: XML_PARSE_NOCDATA = 1<<14 /* merge CDATA as text nodes */ williamr@4: } xmlParserOption; williamr@4: williamr@4: XMLPUBFUN void XMLCALL williamr@4: xmlCtxtReset (xmlParserCtxtPtr ctxt); williamr@4: williamr@4: #ifndef XMLENGINE_EXCLUDE_UNUSED williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlCtxtResetPush (xmlParserCtxtPtr ctxt, williamr@4: const char *chunk, williamr@4: int size, williamr@4: const char *filename, williamr@4: const char *encoding); williamr@4: #endif /* ifndef XMLENGINE_EXCLUDE_UNUSED */ williamr@4: williamr@4: XMLPUBFUN int XMLCALL williamr@4: xmlCtxtUseOptions (xmlParserCtxtPtr ctxt, williamr@4: int options); williamr@4: XMLPUBFUN xmlDocPtr XMLCALL williamr@4: xmlReadDoc (const xmlChar *cur, williamr@4: const char *URL, williamr@4: const char *encoding, williamr@4: int options); williamr@4: williamr@4: #ifndef XMLENGINE_EXCLUDE_UNUSED williamr@4: XMLPUBFUN xmlDocPtr XMLCALL williamr@4: xmlReadFile (const char *URL, williamr@4: const char *encoding, williamr@4: int options); williamr@4: #endif williamr@4: williamr@4: XMLPUBFUN xmlDocPtr XMLCALL williamr@4: xmlReadMemory (const char *buffer, williamr@4: int size, williamr@4: const char *URL, williamr@4: const char *encoding, williamr@4: int options); williamr@4: XMLPUBFUN xmlDocPtr XMLCALL williamr@4: xmlReadFd (int fd, williamr@4: const char *URL, williamr@4: const char *encoding, williamr@4: int options); williamr@4: XMLPUBFUN xmlDocPtr XMLCALL williamr@4: xmlReadIO (xmlInputReadCallback ioread, williamr@4: xmlInputCloseCallback ioclose, williamr@4: void *ioctx, williamr@4: const char *URL, williamr@4: const char *encoding, williamr@4: int options); williamr@4: williamr@4: #ifndef XMLENGINE_EXCLUDE_UNUSED williamr@4: williamr@4: XMLPUBFUN xmlDocPtr XMLCALL williamr@4: xmlCtxtReadDoc (xmlParserCtxtPtr ctxt, williamr@4: const xmlChar *cur, williamr@4: const char *URL, williamr@4: const char *encoding, williamr@4: int options); williamr@4: XMLPUBFUN xmlDocPtr XMLCALL williamr@4: xmlCtxtReadFd (xmlParserCtxtPtr ctxt, williamr@4: int fd, williamr@4: const char *URL, williamr@4: const char *encoding, williamr@4: int options); williamr@4: XMLPUBFUN xmlDocPtr XMLCALL williamr@4: xmlCtxtReadFile (xmlParserCtxtPtr ctxt, williamr@4: const char *filename, williamr@4: const char *encoding, williamr@4: int options); williamr@4: XMLPUBFUN xmlDocPtr XMLCALL williamr@4: xmlCtxtReadMemory (xmlParserCtxtPtr ctxt, williamr@4: const char *buffer, williamr@4: int size, williamr@4: const char *URL, williamr@4: const char *encoding, williamr@4: int options); williamr@4: XMLPUBFUN xmlDocPtr XMLCALL williamr@4: xmlCtxtReadIO (xmlParserCtxtPtr ctxt, williamr@4: xmlInputReadCallback ioread, williamr@4: xmlInputCloseCallback ioclose, williamr@4: void *ioctx, williamr@4: const char *URL, williamr@4: const char *encoding, williamr@4: int options); williamr@4: #endif /* ifndef XMLENGINE_EXCLUDE_UNUSED */ williamr@4: williamr@4: #ifdef __cplusplus williamr@4: } williamr@4: #endif williamr@4: #endif /* XML_PARSER_H */ williamr@4: williamr@4: