Spaces:
Sleeping
Sleeping
/* | |
* Summary: the core parser module | |
* Description: Interfaces, constants and types related to the XML parser | |
* | |
* Copy: See Copyright for the status of this software. | |
* | |
* Author: Daniel Veillard | |
*/ | |
extern "C" { | |
/** | |
* XML_DEFAULT_VERSION: | |
* | |
* The default version of XML used: 1.0 | |
*/ | |
/** | |
* xmlParserInput: | |
* | |
* An xmlParserInput is an input flow for the XML processor. | |
* Each entity parsed is associated an xmlParserInput (except the | |
* few predefined ones). This is the case both for internal entities | |
* - in which case the flow is already completely in memory - or | |
* external entities - in which case we use the buf structure for | |
* progressive reading and I18N conversions to the internal UTF-8 format. | |
*/ | |
/** | |
* xmlParserInputDeallocate: | |
* @str: the string to deallocate | |
* | |
* Callback for freeing some parser input allocations. | |
*/ | |
typedef void (* xmlParserInputDeallocate)(xmlChar *str); | |
struct _xmlParserInput { | |
/* Input buffer */ | |
xmlParserInputBufferPtr buf; /* UTF-8 encoded buffer */ | |
const char *filename; /* The file analyzed, if any */ | |
const char *directory; /* the directory/base of the file */ | |
const xmlChar *base; /* Base of the array to parse */ | |
const xmlChar *cur; /* Current char being parsed */ | |
const xmlChar *end; /* end of the array to parse */ | |
int length; /* length if known */ | |
int line; /* Current line */ | |
int col; /* Current column */ | |
/* | |
* NOTE: consumed is only tested for equality in the parser code, | |
* so even if there is an overflow this should not give troubles | |
* for parsing very large instances. | |
*/ | |
unsigned long consumed; /* How many xmlChars already consumed */ | |
xmlParserInputDeallocate free; /* function to deallocate the base */ | |
const xmlChar *encoding; /* the encoding string for entity */ | |
const xmlChar *version; /* the version string for entity */ | |
int standalone; /* Was that entity marked standalone */ | |
int id; /* an unique identifier for the entity */ | |
}; | |
/** | |
* xmlParserNodeInfo: | |
* | |
* The parser can be asked to collect Node information, i.e. at what | |
* place in the file they were detected. | |
* NOTE: This is off by default and not very well tested. | |
*/ | |
typedef struct _xmlParserNodeInfo xmlParserNodeInfo; | |
typedef xmlParserNodeInfo *xmlParserNodeInfoPtr; | |
struct _xmlParserNodeInfo { | |
const struct _xmlNode* node; | |
/* Position & line # that text that created the node begins & ends on */ | |
unsigned long begin_pos; | |
unsigned long begin_line; | |
unsigned long end_pos; | |
unsigned long end_line; | |
}; | |
typedef struct _xmlParserNodeInfoSeq xmlParserNodeInfoSeq; | |
typedef xmlParserNodeInfoSeq *xmlParserNodeInfoSeqPtr; | |
struct _xmlParserNodeInfoSeq { | |
unsigned long maximum; | |
unsigned long length; | |
xmlParserNodeInfo* buffer; | |
}; | |
/** | |
* xmlParserInputState: | |
* | |
* The parser is now working also as a state based parser. | |
* The recursive one use the state info for entities processing. | |
*/ | |
typedef enum { | |
XML_PARSER_EOF = -1, /* nothing is to be parsed */ | |
XML_PARSER_START = 0, /* nothing has been parsed */ | |
XML_PARSER_MISC, /* Misc* before int subset */ | |
XML_PARSER_PI, /* Within a processing instruction */ | |
XML_PARSER_DTD, /* within some DTD content */ | |
XML_PARSER_PROLOG, /* Misc* after internal subset */ | |
XML_PARSER_COMMENT, /* within a comment */ | |
XML_PARSER_START_TAG, /* within a start tag */ | |
XML_PARSER_CONTENT, /* within the content */ | |
XML_PARSER_CDATA_SECTION, /* within a CDATA section */ | |
XML_PARSER_END_TAG, /* within a closing tag */ | |
XML_PARSER_ENTITY_DECL, /* within an entity declaration */ | |
XML_PARSER_ENTITY_VALUE, /* within an entity value in a decl */ | |
XML_PARSER_ATTRIBUTE_VALUE, /* within an attribute value */ | |
XML_PARSER_SYSTEM_LITERAL, /* within a SYSTEM value */ | |
XML_PARSER_EPILOG, /* the Misc* after the last end tag */ | |
XML_PARSER_IGNORE, /* within an IGNORED section */ | |
XML_PARSER_PUBLIC_LITERAL /* within a PUBLIC value */ | |
} xmlParserInputState; | |
/** | |
* XML_DETECT_IDS: | |
* | |
* Bit in the loadsubset context field to tell to do ID/REFs lookups. | |
* Use it to initialize xmlLoadExtDtdDefaultValue. | |
*/ | |
/** | |
* XML_COMPLETE_ATTRS: | |
* | |
* Bit in the loadsubset context field to tell to do complete the | |
* elements attributes lists with the ones defaulted from the DTDs. | |
* Use it to initialize xmlLoadExtDtdDefaultValue. | |
*/ | |
/** | |
* XML_SKIP_IDS: | |
* | |
* Bit in the loadsubset context field to tell to not do ID/REFs registration. | |
* Used to initialize xmlLoadExtDtdDefaultValue in some special cases. | |
*/ | |
/** | |
* xmlParserMode: | |
* | |
* A parser can operate in various modes | |
*/ | |
typedef enum { | |
XML_PARSE_UNKNOWN = 0, | |
XML_PARSE_DOM = 1, | |
XML_PARSE_SAX = 2, | |
XML_PARSE_PUSH_DOM = 3, | |
XML_PARSE_PUSH_SAX = 4, | |
XML_PARSE_READER = 5 | |
} xmlParserMode; | |
typedef struct _xmlStartTag xmlStartTag; | |
/** | |
* xmlParserCtxt: | |
* | |
* The parser context. | |
* NOTE This doesn't completely define the parser state, the (current ?) | |
* design of the parser uses recursive function calls since this allow | |
* and easy mapping from the production rules of the specification | |
* to the actual code. The drawback is that the actual function call | |
* also reflect the parser state. However most of the parsing routines | |
* takes as the only argument the parser context pointer, so migrating | |
* to a state based parser for progressive parsing shouldn't be too hard. | |
*/ | |
struct _xmlParserCtxt { | |
struct _xmlSAXHandler *sax; /* The SAX handler */ | |
void *userData; /* For SAX interface only, used by DOM build */ | |
xmlDocPtr myDoc; /* the document being built */ | |
int wellFormed; /* is the document well formed */ | |
int replaceEntities; /* shall we replace entities ? */ | |
const xmlChar *version; /* the XML version string */ | |
const xmlChar *encoding; /* the declared encoding, if any */ | |
int standalone; /* standalone document */ | |
int html; /* an HTML(1) document | |
* 3 is HTML after <head> | |
* 10 is HTML after <body> | |
*/ | |
/* Input stream stack */ | |
xmlParserInputPtr input; /* Current input stream */ | |
int inputNr; /* Number of current input streams */ | |
int inputMax; /* Max number of input streams */ | |
xmlParserInputPtr *inputTab; /* stack of inputs */ | |
/* Node analysis stack only used for DOM building */ | |
xmlNodePtr node; /* Current parsed Node */ | |
int nodeNr; /* Depth of the parsing stack */ | |
int nodeMax; /* Max depth of the parsing stack */ | |
xmlNodePtr *nodeTab; /* array of nodes */ | |
int record_info; /* Whether node info should be kept */ | |
xmlParserNodeInfoSeq node_seq; /* info about each node parsed */ | |
int errNo; /* error code */ | |
int hasExternalSubset; /* reference and external subset */ | |
int hasPErefs; /* the internal subset has PE refs */ | |
int external; /* are we parsing an external entity */ | |
int valid; /* is the document valid */ | |
int validate; /* shall we try to validate ? */ | |
xmlValidCtxt vctxt; /* The validity context */ | |
xmlParserInputState instate; /* current type of input */ | |
int token; /* next char look-ahead */ | |
char *directory; /* the data directory */ | |
/* Node name stack */ | |
const xmlChar *name; /* Current parsed Node */ | |
int nameNr; /* Depth of the parsing stack */ | |
int nameMax; /* Max depth of the parsing stack */ | |
const xmlChar * *nameTab; /* array of nodes */ | |
long nbChars; /* unused */ | |
long checkIndex; /* used by progressive parsing lookup */ | |
int keepBlanks; /* ugly but ... */ | |
int disableSAX; /* SAX callbacks are disabled */ | |
int inSubset; /* Parsing is in int 1/ext 2 subset */ | |
const xmlChar * intSubName; /* name of subset */ | |
xmlChar * extSubURI; /* URI of external subset */ | |
xmlChar * extSubSystem; /* SYSTEM ID of external subset */ | |
/* xml:space values */ | |
int * space; /* Should the parser preserve spaces */ | |
int spaceNr; /* Depth of the parsing stack */ | |
int spaceMax; /* Max depth of the parsing stack */ | |
int * spaceTab; /* array of space infos */ | |
int depth; /* to prevent entity substitution loops */ | |
xmlParserInputPtr entity; /* used to check entities boundaries */ | |
int charset; /* encoding of the in-memory content | |
actually an xmlCharEncoding */ | |
int nodelen; /* Those two fields are there to */ | |
int nodemem; /* Speed up large node parsing */ | |
int pedantic; /* signal pedantic warnings */ | |
void *_private; /* For user data, libxml won't touch it */ | |
int loadsubset; /* should the external subset be loaded */ | |
int linenumbers; /* set line number in element content */ | |
void *catalogs; /* document's own catalog */ | |
int recovery; /* run in recovery mode */ | |
int progressive; /* is this a progressive parsing */ | |
xmlDictPtr dict; /* dictionary for the parser */ | |
const xmlChar * *atts; /* array for the attributes callbacks */ | |
int maxatts; /* the size of the array */ | |
int docdict; /* use strings from dict to build tree */ | |
/* | |
* pre-interned strings | |
*/ | |
const xmlChar *str_xml; | |
const xmlChar *str_xmlns; | |
const xmlChar *str_xml_ns; | |
/* | |
* Everything below is used only by the new SAX mode | |
*/ | |
int sax2; /* operating in the new SAX mode */ | |
int nsNr; /* the number of inherited namespaces */ | |
int nsMax; /* the size of the arrays */ | |
const xmlChar * *nsTab; /* the array of prefix/namespace name */ | |
int *attallocs; /* which attribute were allocated */ | |
xmlStartTag *pushTab; /* array of data for push */ | |
xmlHashTablePtr attsDefault; /* defaulted attributes if any */ | |
xmlHashTablePtr attsSpecial; /* non-CDATA attributes if any */ | |
int nsWellFormed; /* is the document XML Namespace okay */ | |
int options; /* Extra options */ | |
/* | |
* Those fields are needed only for streaming parsing so far | |
*/ | |
int dictNames; /* Use dictionary names for the tree */ | |
int freeElemsNr; /* number of freed element nodes */ | |
xmlNodePtr freeElems; /* List of freed element nodes */ | |
int freeAttrsNr; /* number of freed attributes nodes */ | |
xmlAttrPtr freeAttrs; /* List of freed attributes nodes */ | |
/* | |
* the complete error information for the last error. | |
*/ | |
xmlError lastError; | |
xmlParserMode parseMode; /* the parser mode */ | |
unsigned long nbentities; /* number of entities references */ | |
unsigned long sizeentities; /* size of parsed entities */ | |
/* for use by HTML non-recursive parser */ | |
xmlParserNodeInfo *nodeInfo; /* Current NodeInfo */ | |
int nodeInfoNr; /* Depth of the parsing stack */ | |
int nodeInfoMax; /* Max depth of the parsing stack */ | |
xmlParserNodeInfo *nodeInfoTab; /* array of nodeInfos */ | |
int input_id; /* we need to label inputs */ | |
unsigned long sizeentcopy; /* volume of entity copy */ | |
}; | |
/** | |
* xmlSAXLocator: | |
* | |
* A SAX Locator. | |
*/ | |
struct _xmlSAXLocator { | |
const xmlChar *(*getPublicId)(void *ctx); | |
const xmlChar *(*getSystemId)(void *ctx); | |
int (*getLineNumber)(void *ctx); | |
int (*getColumnNumber)(void *ctx); | |
}; | |
/** | |
* xmlSAXHandler: | |
* | |
* A SAX handler is bunch of callbacks called by the parser when processing | |
* of the input generate data or structure information. | |
*/ | |
/** | |
* resolveEntitySAXFunc: | |
* @ctx: the user data (XML parser context) | |
* @publicId: The public ID of the entity | |
* @systemId: The system ID of the entity | |
* | |
* Callback: | |
* The entity loader, to control the loading of external entities, | |
* the application can either: | |
* - override this resolveEntity() callback in the SAX block | |
* - or better use the xmlSetExternalEntityLoader() function to | |
* set up it's own entity resolution routine | |
* | |
* Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour. | |
*/ | |
typedef xmlParserInputPtr (*resolveEntitySAXFunc) (void *ctx, | |
const xmlChar *publicId, | |
const xmlChar *systemId); | |
/** | |
* internalSubsetSAXFunc: | |
* @ctx: the user data (XML parser context) | |
* @name: the root element name | |
* @ExternalID: the external ID | |
* @SystemID: the SYSTEM ID (e.g. filename or URL) | |
* | |
* Callback on internal subset declaration. | |
*/ | |
typedef void (*internalSubsetSAXFunc) (void *ctx, | |
const xmlChar *name, | |
const xmlChar *ExternalID, | |
const xmlChar *SystemID); | |
/** | |
* externalSubsetSAXFunc: | |
* @ctx: the user data (XML parser context) | |
* @name: the root element name | |
* @ExternalID: the external ID | |
* @SystemID: the SYSTEM ID (e.g. filename or URL) | |
* | |
* Callback on external subset declaration. | |
*/ | |
typedef void (*externalSubsetSAXFunc) (void *ctx, | |
const xmlChar *name, | |
const xmlChar *ExternalID, | |
const xmlChar *SystemID); | |
/** | |
* getEntitySAXFunc: | |
* @ctx: the user data (XML parser context) | |
* @name: The entity name | |
* | |
* Get an entity by name. | |
* | |
* Returns the xmlEntityPtr if found. | |
*/ | |
typedef xmlEntityPtr (*getEntitySAXFunc) (void *ctx, | |
const xmlChar *name); | |
/** | |
* getParameterEntitySAXFunc: | |
* @ctx: the user data (XML parser context) | |
* @name: The entity name | |
* | |
* Get a parameter entity by name. | |
* | |
* Returns the xmlEntityPtr if found. | |
*/ | |
typedef xmlEntityPtr (*getParameterEntitySAXFunc) (void *ctx, | |
const xmlChar *name); | |
/** | |
* entityDeclSAXFunc: | |
* @ctx: the user data (XML parser context) | |
* @name: the entity name | |
* @type: the entity type | |
* @publicId: The public ID of the entity | |
* @systemId: The system ID of the entity | |
* @content: the entity value (without processing). | |
* | |
* An entity definition has been parsed. | |
*/ | |
typedef void (*entityDeclSAXFunc) (void *ctx, | |
const xmlChar *name, | |
int type, | |
const xmlChar *publicId, | |
const xmlChar *systemId, | |
xmlChar *content); | |
/** | |
* notationDeclSAXFunc: | |
* @ctx: the user data (XML parser context) | |
* @name: The name of the notation | |
* @publicId: The public ID of the entity | |
* @systemId: The system ID of the entity | |
* | |
* What to do when a notation declaration has been parsed. | |
*/ | |
typedef void (*notationDeclSAXFunc)(void *ctx, | |
const xmlChar *name, | |
const xmlChar *publicId, | |
const xmlChar *systemId); | |
/** | |
* attributeDeclSAXFunc: | |
* @ctx: the user data (XML parser context) | |
* @elem: the name of the element | |
* @fullname: the attribute name | |
* @type: the attribute type | |
* @def: the type of default value | |
* @defaultValue: the attribute default value | |
* @tree: the tree of enumerated value set | |
* | |
* An attribute definition has been parsed. | |
*/ | |
typedef void (*attributeDeclSAXFunc)(void *ctx, | |
const xmlChar *elem, | |
const xmlChar *fullname, | |
int type, | |
int def, | |
const xmlChar *defaultValue, | |
xmlEnumerationPtr tree); | |
/** | |
* elementDeclSAXFunc: | |
* @ctx: the user data (XML parser context) | |
* @name: the element name | |
* @type: the element type | |
* @content: the element value tree | |
* | |
* An element definition has been parsed. | |
*/ | |
typedef void (*elementDeclSAXFunc)(void *ctx, | |
const xmlChar *name, | |
int type, | |
xmlElementContentPtr content); | |
/** | |
* unparsedEntityDeclSAXFunc: | |
* @ctx: the user data (XML parser context) | |
* @name: The name of the entity | |
* @publicId: The public ID of the entity | |
* @systemId: The system ID of the entity | |
* @notationName: the name of the notation | |
* | |
* What to do when an unparsed entity declaration is parsed. | |
*/ | |
typedef void (*unparsedEntityDeclSAXFunc)(void *ctx, | |
const xmlChar *name, | |
const xmlChar *publicId, | |
const xmlChar *systemId, | |
const xmlChar *notationName); | |
/** | |
* setDocumentLocatorSAXFunc: | |
* @ctx: the user data (XML parser context) | |
* @loc: A SAX Locator | |
* | |
* Receive the document locator at startup, actually xmlDefaultSAXLocator. | |
* Everything is available on the context, so this is useless in our case. | |
*/ | |
typedef void (*setDocumentLocatorSAXFunc) (void *ctx, | |
xmlSAXLocatorPtr loc); | |
/** | |
* startDocumentSAXFunc: | |
* @ctx: the user data (XML parser context) | |
* | |
* Called when the document start being processed. | |
*/ | |
typedef void (*startDocumentSAXFunc) (void *ctx); | |
/** | |
* endDocumentSAXFunc: | |
* @ctx: the user data (XML parser context) | |
* | |
* Called when the document end has been detected. | |
*/ | |
typedef void (*endDocumentSAXFunc) (void *ctx); | |
/** | |
* startElementSAXFunc: | |
* @ctx: the user data (XML parser context) | |
* @name: The element name, including namespace prefix | |
* @atts: An array of name/value attributes pairs, NULL terminated | |
* | |
* Called when an opening tag has been processed. | |
*/ | |
typedef void (*startElementSAXFunc) (void *ctx, | |
const xmlChar *name, | |
const xmlChar **atts); | |
/** | |
* endElementSAXFunc: | |
* @ctx: the user data (XML parser context) | |
* @name: The element name | |
* | |
* Called when the end of an element has been detected. | |
*/ | |
typedef void (*endElementSAXFunc) (void *ctx, | |
const xmlChar *name); | |
/** | |
* attributeSAXFunc: | |
* @ctx: the user data (XML parser context) | |
* @name: The attribute name, including namespace prefix | |
* @value: The attribute value | |
* | |
* Handle an attribute that has been read by the parser. | |
* The default handling is to convert the attribute into an | |
* DOM subtree and past it in a new xmlAttr element added to | |
* the element. | |
*/ | |
typedef void (*attributeSAXFunc) (void *ctx, | |
const xmlChar *name, | |
const xmlChar *value); | |
/** | |
* referenceSAXFunc: | |
* @ctx: the user data (XML parser context) | |
* @name: The entity name | |
* | |
* Called when an entity reference is detected. | |
*/ | |
typedef void (*referenceSAXFunc) (void *ctx, | |
const xmlChar *name); | |
/** | |
* charactersSAXFunc: | |
* @ctx: the user data (XML parser context) | |
* @ch: a xmlChar string | |
* @len: the number of xmlChar | |
* | |
* Receiving some chars from the parser. | |
*/ | |
typedef void (*charactersSAXFunc) (void *ctx, | |
const xmlChar *ch, | |
int len); | |
/** | |
* ignorableWhitespaceSAXFunc: | |
* @ctx: the user data (XML parser context) | |
* @ch: a xmlChar string | |
* @len: the number of xmlChar | |
* | |
* Receiving some ignorable whitespaces from the parser. | |
* UNUSED: by default the DOM building will use characters. | |
*/ | |
typedef void (*ignorableWhitespaceSAXFunc) (void *ctx, | |
const xmlChar *ch, | |
int len); | |
/** | |
* processingInstructionSAXFunc: | |
* @ctx: the user data (XML parser context) | |
* @target: the target name | |
* @data: the PI data's | |
* | |
* A processing instruction has been parsed. | |
*/ | |
typedef void (*processingInstructionSAXFunc) (void *ctx, | |
const xmlChar *target, | |
const xmlChar *data); | |
/** | |
* commentSAXFunc: | |
* @ctx: the user data (XML parser context) | |
* @value: the comment content | |
* | |
* A comment has been parsed. | |
*/ | |
typedef void (*commentSAXFunc) (void *ctx, | |
const xmlChar *value); | |
/** | |
* cdataBlockSAXFunc: | |
* @ctx: the user data (XML parser context) | |
* @value: The pcdata content | |
* @len: the block length | |
* | |
* Called when a pcdata block has been parsed. | |
*/ | |
typedef void (*cdataBlockSAXFunc) ( | |
void *ctx, | |
const xmlChar *value, | |
int len); | |
/** | |
* warningSAXFunc: | |
* @ctx: an XML parser context | |
* @msg: the message to display/transmit | |
* @...: extra parameters for the message display | |
* | |
* Display and format a warning messages, callback. | |
*/ | |
typedef void (XMLCDECL *warningSAXFunc) (void *ctx, | |
const char *msg, ...) LIBXML_ATTR_FORMAT(2,3); | |
/** | |
* errorSAXFunc: | |
* @ctx: an XML parser context | |
* @msg: the message to display/transmit | |
* @...: extra parameters for the message display | |
* | |
* Display and format an error messages, callback. | |
*/ | |
typedef void (XMLCDECL *errorSAXFunc) (void *ctx, | |
const char *msg, ...) LIBXML_ATTR_FORMAT(2,3); | |
/** | |
* fatalErrorSAXFunc: | |
* @ctx: an XML parser context | |
* @msg: the message to display/transmit | |
* @...: extra parameters for the message display | |
* | |
* Display and format fatal error messages, callback. | |
* Note: so far fatalError() SAX callbacks are not used, error() | |
* get all the callbacks for errors. | |
*/ | |
typedef void (XMLCDECL *fatalErrorSAXFunc) (void *ctx, | |
const char *msg, ...) LIBXML_ATTR_FORMAT(2,3); | |
/** | |
* isStandaloneSAXFunc: | |
* @ctx: the user data (XML parser context) | |
* | |
* Is this document tagged standalone? | |
* | |
* Returns 1 if true | |
*/ | |
typedef int (*isStandaloneSAXFunc) (void *ctx); | |
/** | |
* hasInternalSubsetSAXFunc: | |
* @ctx: the user data (XML parser context) | |
* | |
* Does this document has an internal subset. | |
* | |
* Returns 1 if true | |
*/ | |
typedef int (*hasInternalSubsetSAXFunc) (void *ctx); | |
/** | |
* hasExternalSubsetSAXFunc: | |
* @ctx: the user data (XML parser context) | |
* | |
* Does this document has an external subset? | |
* | |
* Returns 1 if true | |
*/ | |
typedef int (*hasExternalSubsetSAXFunc) (void *ctx); | |
/************************************************************************ | |
* * | |
* The SAX version 2 API extensions * | |
* * | |
************************************************************************/ | |
/** | |
* XML_SAX2_MAGIC: | |
* | |
* Special constant found in SAX2 blocks initialized fields | |
*/ | |
/** | |
* startElementNsSAX2Func: | |
* @ctx: the user data (XML parser context) | |
* @localname: the local name of the element | |
* @prefix: the element namespace prefix if available | |
* @URI: the element namespace name if available | |
* @nb_namespaces: number of namespace definitions on that node | |
* @namespaces: pointer to the array of prefix/URI pairs namespace definitions | |
* @nb_attributes: the number of attributes on that node | |
* @nb_defaulted: the number of defaulted attributes. The defaulted | |
* ones are at the end of the array | |
* @attributes: pointer to the array of (localname/prefix/URI/value/end) | |
* attribute values. | |
* | |
* SAX2 callback when an element start has been detected by the parser. | |
* It provides the namespace information for the element, as well as | |
* the new namespace declarations on the element. | |
*/ | |
typedef void (*startElementNsSAX2Func) (void *ctx, | |
const xmlChar *localname, | |
const xmlChar *prefix, | |
const xmlChar *URI, | |
int nb_namespaces, | |
const xmlChar **namespaces, | |
int nb_attributes, | |
int nb_defaulted, | |
const xmlChar **attributes); | |
/** | |
* endElementNsSAX2Func: | |
* @ctx: the user data (XML parser context) | |
* @localname: the local name of the element | |
* @prefix: the element namespace prefix if available | |
* @URI: the element namespace name if available | |
* | |
* SAX2 callback when an element end has been detected by the parser. | |
* It provides the namespace information for the element. | |
*/ | |
typedef void (*endElementNsSAX2Func) (void *ctx, | |
const xmlChar *localname, | |
const xmlChar *prefix, | |
const xmlChar *URI); | |
struct _xmlSAXHandler { | |
internalSubsetSAXFunc internalSubset; | |
isStandaloneSAXFunc isStandalone; | |
hasInternalSubsetSAXFunc hasInternalSubset; | |
hasExternalSubsetSAXFunc hasExternalSubset; | |
resolveEntitySAXFunc resolveEntity; | |
getEntitySAXFunc getEntity; | |
entityDeclSAXFunc entityDecl; | |
notationDeclSAXFunc notationDecl; | |
attributeDeclSAXFunc attributeDecl; | |
elementDeclSAXFunc elementDecl; | |
unparsedEntityDeclSAXFunc unparsedEntityDecl; | |
setDocumentLocatorSAXFunc setDocumentLocator; | |
startDocumentSAXFunc startDocument; | |
endDocumentSAXFunc endDocument; | |
startElementSAXFunc startElement; | |
endElementSAXFunc endElement; | |
referenceSAXFunc reference; | |
charactersSAXFunc characters; | |
ignorableWhitespaceSAXFunc ignorableWhitespace; | |
processingInstructionSAXFunc processingInstruction; | |
commentSAXFunc comment; | |
warningSAXFunc warning; | |
errorSAXFunc error; | |
fatalErrorSAXFunc fatalError; /* unused error() get all the errors */ | |
getParameterEntitySAXFunc getParameterEntity; | |
cdataBlockSAXFunc cdataBlock; | |
externalSubsetSAXFunc externalSubset; | |
unsigned int initialized; | |
/* The following fields are extensions available only on version 2 */ | |
void *_private; | |
startElementNsSAX2Func startElementNs; | |
endElementNsSAX2Func endElementNs; | |
xmlStructuredErrorFunc serror; | |
}; | |
/* | |
* SAX Version 1 | |
*/ | |
typedef struct _xmlSAXHandlerV1 xmlSAXHandlerV1; | |
typedef xmlSAXHandlerV1 *xmlSAXHandlerV1Ptr; | |
struct _xmlSAXHandlerV1 { | |
internalSubsetSAXFunc internalSubset; | |
isStandaloneSAXFunc isStandalone; | |
hasInternalSubsetSAXFunc hasInternalSubset; | |
hasExternalSubsetSAXFunc hasExternalSubset; | |
resolveEntitySAXFunc resolveEntity; | |
getEntitySAXFunc getEntity; | |
entityDeclSAXFunc entityDecl; | |
notationDeclSAXFunc notationDecl; | |
attributeDeclSAXFunc attributeDecl; | |
elementDeclSAXFunc elementDecl; | |
unparsedEntityDeclSAXFunc unparsedEntityDecl; | |
setDocumentLocatorSAXFunc setDocumentLocator; | |
startDocumentSAXFunc startDocument; | |
endDocumentSAXFunc endDocument; | |
startElementSAXFunc startElement; | |
endElementSAXFunc endElement; | |
referenceSAXFunc reference; | |
charactersSAXFunc characters; | |
ignorableWhitespaceSAXFunc ignorableWhitespace; | |
processingInstructionSAXFunc processingInstruction; | |
commentSAXFunc comment; | |
warningSAXFunc warning; | |
errorSAXFunc error; | |
fatalErrorSAXFunc fatalError; /* unused error() get all the errors */ | |
getParameterEntitySAXFunc getParameterEntity; | |
cdataBlockSAXFunc cdataBlock; | |
externalSubsetSAXFunc externalSubset; | |
unsigned int initialized; | |
}; | |
/** | |
* xmlExternalEntityLoader: | |
* @URL: The System ID of the resource requested | |
* @ID: The Public ID of the resource requested | |
* @context: the XML parser context | |
* | |
* External entity loaders types. | |
* | |
* Returns the entity input parser. | |
*/ | |
typedef xmlParserInputPtr (*xmlExternalEntityLoader) (const char *URL, | |
const char *ID, | |
xmlParserCtxtPtr context); | |
} | |
extern "C" { | |
/* | |
* Init/Cleanup | |
*/ | |
XMLPUBFUN void XMLCALL | |
xmlInitParser (void); | |
XMLPUBFUN void XMLCALL | |
xmlCleanupParser (void); | |
/* | |
* Input functions | |
*/ | |
XMLPUBFUN int XMLCALL | |
xmlParserInputRead (xmlParserInputPtr in, | |
int len); | |
XMLPUBFUN int XMLCALL | |
xmlParserInputGrow (xmlParserInputPtr in, | |
int len); | |
/* | |
* Basic parsing Interfaces | |
*/ | |
XMLPUBFUN xmlDocPtr XMLCALL | |
xmlParseDoc (const xmlChar *cur); | |
XMLPUBFUN xmlDocPtr XMLCALL | |
xmlParseFile (const char *filename); | |
XMLPUBFUN xmlDocPtr XMLCALL | |
xmlParseMemory (const char *buffer, | |
int size); | |
XMLPUBFUN int XMLCALL | |
xmlSubstituteEntitiesDefault(int val); | |
XMLPUBFUN int XMLCALL | |
xmlKeepBlanksDefault (int val); | |
XMLPUBFUN void XMLCALL | |
xmlStopParser (xmlParserCtxtPtr ctxt); | |
XMLPUBFUN int XMLCALL | |
xmlPedanticParserDefault(int val); | |
XMLPUBFUN int XMLCALL | |
xmlLineNumbersDefault (int val); | |
/* | |
* Recovery mode | |
*/ | |
XMLPUBFUN xmlDocPtr XMLCALL | |
xmlRecoverDoc (const xmlChar *cur); | |
XMLPUBFUN xmlDocPtr XMLCALL | |
xmlRecoverMemory (const char *buffer, | |
int size); | |
XMLPUBFUN xmlDocPtr XMLCALL | |
xmlRecoverFile (const char *filename); | |
/* | |
* Less common routines and SAX interfaces | |
*/ | |
XMLPUBFUN int XMLCALL | |
xmlParseDocument (xmlParserCtxtPtr ctxt); | |
XMLPUBFUN int XMLCALL | |
xmlParseExtParsedEnt (xmlParserCtxtPtr ctxt); | |
XMLPUBFUN int XMLCALL | |
xmlSAXUserParseFile (xmlSAXHandlerPtr sax, | |
void *user_data, | |
const char *filename); | |
XMLPUBFUN int XMLCALL | |
xmlSAXUserParseMemory (xmlSAXHandlerPtr sax, | |
void *user_data, | |
const char *buffer, | |
int size); | |
XMLPUBFUN xmlDocPtr XMLCALL | |
xmlSAXParseDoc (xmlSAXHandlerPtr sax, | |
const xmlChar *cur, | |
int recovery); | |
XMLPUBFUN xmlDocPtr XMLCALL | |
xmlSAXParseMemory (xmlSAXHandlerPtr sax, | |
const char *buffer, | |
int size, | |
int recovery); | |
XMLPUBFUN xmlDocPtr XMLCALL | |
xmlSAXParseMemoryWithData (xmlSAXHandlerPtr sax, | |
const char *buffer, | |
int size, | |
int recovery, | |
void *data); | |
XMLPUBFUN xmlDocPtr XMLCALL | |
xmlSAXParseFile (xmlSAXHandlerPtr sax, | |
const char *filename, | |
int recovery); | |
XMLPUBFUN xmlDocPtr XMLCALL | |
xmlSAXParseFileWithData (xmlSAXHandlerPtr sax, | |
const char *filename, | |
int recovery, | |
void *data); | |
XMLPUBFUN xmlDocPtr XMLCALL | |
xmlSAXParseEntity (xmlSAXHandlerPtr sax, | |
const char *filename); | |
XMLPUBFUN xmlDocPtr XMLCALL | |
xmlParseEntity (const char *filename); | |
XMLPUBFUN xmlDtdPtr XMLCALL | |
xmlSAXParseDTD (xmlSAXHandlerPtr sax, | |
const xmlChar *ExternalID, | |
const xmlChar *SystemID); | |
XMLPUBFUN xmlDtdPtr XMLCALL | |
xmlParseDTD (const xmlChar *ExternalID, | |
const xmlChar *SystemID); | |
XMLPUBFUN xmlDtdPtr XMLCALL | |
xmlIOParseDTD (xmlSAXHandlerPtr sax, | |
xmlParserInputBufferPtr input, | |
xmlCharEncoding enc); | |
XMLPUBFUN int XMLCALL | |
xmlParseBalancedChunkMemory(xmlDocPtr doc, | |
xmlSAXHandlerPtr sax, | |
void *user_data, | |
int depth, | |
const xmlChar *string, | |
xmlNodePtr *lst); | |
XMLPUBFUN xmlParserErrors XMLCALL | |
xmlParseInNodeContext (xmlNodePtr node, | |
const char *data, | |
int datalen, | |
int options, | |
xmlNodePtr *lst); | |
XMLPUBFUN int XMLCALL | |
xmlParseBalancedChunkMemoryRecover(xmlDocPtr doc, | |
xmlSAXHandlerPtr sax, | |
void *user_data, | |
int depth, | |
const xmlChar *string, | |
xmlNodePtr *lst, | |
int recover); | |
XMLPUBFUN int XMLCALL | |
xmlParseExternalEntity (xmlDocPtr doc, | |
xmlSAXHandlerPtr sax, | |
void *user_data, | |
int depth, | |
const xmlChar *URL, | |
const xmlChar *ID, | |
xmlNodePtr *lst); | |
XMLPUBFUN int XMLCALL | |
xmlParseCtxtExternalEntity(xmlParserCtxtPtr ctx, | |
const xmlChar *URL, | |
const xmlChar *ID, | |
xmlNodePtr *lst); | |
/* | |
* Parser contexts handling. | |
*/ | |
XMLPUBFUN xmlParserCtxtPtr XMLCALL | |
xmlNewParserCtxt (void); | |
XMLPUBFUN int XMLCALL | |
xmlInitParserCtxt (xmlParserCtxtPtr ctxt); | |
XMLPUBFUN void XMLCALL | |
xmlClearParserCtxt (xmlParserCtxtPtr ctxt); | |
XMLPUBFUN void XMLCALL | |
xmlFreeParserCtxt (xmlParserCtxtPtr ctxt); | |
XMLPUBFUN void XMLCALL | |
xmlSetupParserForBuffer (xmlParserCtxtPtr ctxt, | |
const xmlChar* buffer, | |
const char *filename); | |
XMLPUBFUN xmlParserCtxtPtr XMLCALL | |
xmlCreateDocParserCtxt (const xmlChar *cur); | |
/* | |
* Reading/setting optional parsing features. | |
*/ | |
XML_DEPRECATED | |
XMLPUBFUN int XMLCALL | |
xmlGetFeaturesList (int *len, | |
const char **result); | |
XML_DEPRECATED | |
XMLPUBFUN int XMLCALL | |
xmlGetFeature (xmlParserCtxtPtr ctxt, | |
const char *name, | |
void *result); | |
XML_DEPRECATED | |
XMLPUBFUN int XMLCALL | |
xmlSetFeature (xmlParserCtxtPtr ctxt, | |
const char *name, | |
void *value); | |
/* | |
* Interfaces for the Push mode. | |
*/ | |
XMLPUBFUN xmlParserCtxtPtr XMLCALL | |
xmlCreatePushParserCtxt(xmlSAXHandlerPtr sax, | |
void *user_data, | |
const char *chunk, | |
int size, | |
const char *filename); | |
XMLPUBFUN int XMLCALL | |
xmlParseChunk (xmlParserCtxtPtr ctxt, | |
const char *chunk, | |
int size, | |
int terminate); | |
/* | |
* Special I/O mode. | |
*/ | |
XMLPUBFUN xmlParserCtxtPtr XMLCALL | |
xmlCreateIOParserCtxt (xmlSAXHandlerPtr sax, | |
void *user_data, | |
xmlInputReadCallback ioread, | |
xmlInputCloseCallback ioclose, | |
void *ioctx, | |
xmlCharEncoding enc); | |
XMLPUBFUN xmlParserInputPtr XMLCALL | |
xmlNewIOInputStream (xmlParserCtxtPtr ctxt, | |
xmlParserInputBufferPtr input, | |
xmlCharEncoding enc); | |
/* | |
* Node infos. | |
*/ | |
XMLPUBFUN const xmlParserNodeInfo* XMLCALL | |
xmlParserFindNodeInfo (const xmlParserCtxtPtr ctxt, | |
const xmlNodePtr node); | |
XMLPUBFUN void XMLCALL | |
xmlInitNodeInfoSeq (xmlParserNodeInfoSeqPtr seq); | |
XMLPUBFUN void XMLCALL | |
xmlClearNodeInfoSeq (xmlParserNodeInfoSeqPtr seq); | |
XMLPUBFUN unsigned long XMLCALL | |
xmlParserFindNodeInfoIndex(const xmlParserNodeInfoSeqPtr seq, | |
const xmlNodePtr node); | |
XMLPUBFUN void XMLCALL | |
xmlParserAddNodeInfo (xmlParserCtxtPtr ctxt, | |
const xmlParserNodeInfoPtr info); | |
/* | |
* External entities handling actually implemented in xmlIO. | |
*/ | |
XMLPUBFUN void XMLCALL | |
xmlSetExternalEntityLoader(xmlExternalEntityLoader f); | |
XMLPUBFUN xmlExternalEntityLoader XMLCALL | |
xmlGetExternalEntityLoader(void); | |
XMLPUBFUN xmlParserInputPtr XMLCALL | |
xmlLoadExternalEntity (const char *URL, | |
const char *ID, | |
xmlParserCtxtPtr ctxt); | |
/* | |
* Index lookup, actually implemented in the encoding module | |
*/ | |
XMLPUBFUN long XMLCALL | |
xmlByteConsumed (xmlParserCtxtPtr ctxt); | |
/* | |
* New set of simpler/more flexible APIs | |
*/ | |
/** | |
* xmlParserOption: | |
* | |
* This is the set of XML parser options that can be passed down | |
* to the xmlReadDoc() and similar calls. | |
*/ | |
typedef enum { | |
XML_PARSE_RECOVER = 1<<0, /* recover on errors */ | |
XML_PARSE_NOENT = 1<<1, /* substitute entities */ | |
XML_PARSE_DTDLOAD = 1<<2, /* load the external subset */ | |
XML_PARSE_DTDATTR = 1<<3, /* default DTD attributes */ | |
XML_PARSE_DTDVALID = 1<<4, /* validate with the DTD */ | |
XML_PARSE_NOERROR = 1<<5, /* suppress error reports */ | |
XML_PARSE_NOWARNING = 1<<6, /* suppress warning reports */ | |
XML_PARSE_PEDANTIC = 1<<7, /* pedantic error reporting */ | |
XML_PARSE_NOBLANKS = 1<<8, /* remove blank nodes */ | |
XML_PARSE_SAX1 = 1<<9, /* use the SAX1 interface internally */ | |
XML_PARSE_XINCLUDE = 1<<10,/* Implement XInclude substitution */ | |
XML_PARSE_NONET = 1<<11,/* Forbid network access */ | |
XML_PARSE_NODICT = 1<<12,/* Do not reuse the context dictionary */ | |
XML_PARSE_NSCLEAN = 1<<13,/* remove redundant namespaces declarations */ | |
XML_PARSE_NOCDATA = 1<<14,/* merge CDATA as text nodes */ | |
XML_PARSE_NOXINCNODE= 1<<15,/* do not generate XINCLUDE START/END nodes */ | |
XML_PARSE_COMPACT = 1<<16,/* compact small text nodes; no modification of | |
the tree allowed afterwards (will possibly | |
crash if you try to modify the tree) */ | |
XML_PARSE_OLD10 = 1<<17,/* parse using XML-1.0 before update 5 */ | |
XML_PARSE_NOBASEFIX = 1<<18,/* do not fixup XINCLUDE xml:base uris */ | |
XML_PARSE_HUGE = 1<<19,/* relax any hardcoded limit from the parser */ | |
XML_PARSE_OLDSAX = 1<<20,/* parse using SAX2 interface before 2.7.0 */ | |
XML_PARSE_IGNORE_ENC= 1<<21,/* ignore internal document encoding hint */ | |
XML_PARSE_BIG_LINES = 1<<22 /* Store big lines numbers in text PSVI field */ | |
} xmlParserOption; | |
XMLPUBFUN void XMLCALL | |
xmlCtxtReset (xmlParserCtxtPtr ctxt); | |
XMLPUBFUN int XMLCALL | |
xmlCtxtResetPush (xmlParserCtxtPtr ctxt, | |
const char *chunk, | |
int size, | |
const char *filename, | |
const char *encoding); | |
XMLPUBFUN int XMLCALL | |
xmlCtxtUseOptions (xmlParserCtxtPtr ctxt, | |
int options); | |
XMLPUBFUN xmlDocPtr XMLCALL | |
xmlReadDoc (const xmlChar *cur, | |
const char *URL, | |
const char *encoding, | |
int options); | |
XMLPUBFUN xmlDocPtr XMLCALL | |
xmlReadFile (const char *URL, | |
const char *encoding, | |
int options); | |
XMLPUBFUN xmlDocPtr XMLCALL | |
xmlReadMemory (const char *buffer, | |
int size, | |
const char *URL, | |
const char *encoding, | |
int options); | |
XMLPUBFUN xmlDocPtr XMLCALL | |
xmlReadFd (int fd, | |
const char *URL, | |
const char *encoding, | |
int options); | |
XMLPUBFUN xmlDocPtr XMLCALL | |
xmlReadIO (xmlInputReadCallback ioread, | |
xmlInputCloseCallback ioclose, | |
void *ioctx, | |
const char *URL, | |
const char *encoding, | |
int options); | |
XMLPUBFUN xmlDocPtr XMLCALL | |
xmlCtxtReadDoc (xmlParserCtxtPtr ctxt, | |
const xmlChar *cur, | |
const char *URL, | |
const char *encoding, | |
int options); | |
XMLPUBFUN xmlDocPtr XMLCALL | |
xmlCtxtReadFile (xmlParserCtxtPtr ctxt, | |
const char *filename, | |
const char *encoding, | |
int options); | |
XMLPUBFUN xmlDocPtr XMLCALL | |
xmlCtxtReadMemory (xmlParserCtxtPtr ctxt, | |
const char *buffer, | |
int size, | |
const char *URL, | |
const char *encoding, | |
int options); | |
XMLPUBFUN xmlDocPtr XMLCALL | |
xmlCtxtReadFd (xmlParserCtxtPtr ctxt, | |
int fd, | |
const char *URL, | |
const char *encoding, | |
int options); | |
XMLPUBFUN xmlDocPtr XMLCALL | |
xmlCtxtReadIO (xmlParserCtxtPtr ctxt, | |
xmlInputReadCallback ioread, | |
xmlInputCloseCallback ioclose, | |
void *ioctx, | |
const char *URL, | |
const char *encoding, | |
int options); | |
/* | |
* Library wide options | |
*/ | |
/** | |
* xmlFeature: | |
* | |
* Used to examine the existence of features that can be enabled | |
* or disabled at compile-time. | |
* They used to be called XML_FEATURE_xxx but this clashed with Expat | |
*/ | |
typedef enum { | |
XML_WITH_THREAD = 1, | |
XML_WITH_TREE = 2, | |
XML_WITH_OUTPUT = 3, | |
XML_WITH_PUSH = 4, | |
XML_WITH_READER = 5, | |
XML_WITH_PATTERN = 6, | |
XML_WITH_WRITER = 7, | |
XML_WITH_SAX1 = 8, | |
XML_WITH_FTP = 9, | |
XML_WITH_HTTP = 10, | |
XML_WITH_VALID = 11, | |
XML_WITH_HTML = 12, | |
XML_WITH_LEGACY = 13, | |
XML_WITH_C14N = 14, | |
XML_WITH_CATALOG = 15, | |
XML_WITH_XPATH = 16, | |
XML_WITH_XPTR = 17, | |
XML_WITH_XINCLUDE = 18, | |
XML_WITH_ICONV = 19, | |
XML_WITH_ISO8859X = 20, | |
XML_WITH_UNICODE = 21, | |
XML_WITH_REGEXP = 22, | |
XML_WITH_AUTOMATA = 23, | |
XML_WITH_EXPR = 24, | |
XML_WITH_SCHEMAS = 25, | |
XML_WITH_SCHEMATRON = 26, | |
XML_WITH_MODULES = 27, | |
XML_WITH_DEBUG = 28, | |
XML_WITH_DEBUG_MEM = 29, | |
XML_WITH_DEBUG_RUN = 30, | |
XML_WITH_ZLIB = 31, | |
XML_WITH_ICU = 32, | |
XML_WITH_LZMA = 33, | |
XML_WITH_NONE = 99999 /* just to be sure of allocation size */ | |
} xmlFeature; | |
XMLPUBFUN int XMLCALL | |
xmlHasFeature (xmlFeature feature); | |
} | |