(* * 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 *) {$IFDEF POINTER} xmlParserInputPtr = ^xmlParserInput; xmlParserInputPtrPtr = ^xmlParserInputPtr; xmlParserNodeInfoPtr = ^xmlParserNodeInfo; xmlParserNodeInfoSeqPtr = ^xmlParserNodeInfoSeq; xmlParserCtxtPtr = ^xmlParserCtxt; xmlSAXLocatorPtr = ^xmlSAXLocator; xmlSAXHandlerPtr = ^xmlSAXHandler; xmlSAXHandlerV1Ptr = ^xmlSAXHandlerV1; {$ENDIF} {$IFDEF CONST} (** * XML_DEFAULT_VERSION: * * The default version of XML used: 1.0 *) XML_DEFAULT_VERSION = '1.0'; {$ENDIF} {$IFDEF TYPE} (** * 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. *) xmlParserInputDeallocate = procedure(str: xmlCharPtr); EXTDECL; xmlParserInput = record (* Input buffer *) buf : xmlParserInputBufferPtr; (* UTF-8 encoded buffer *) filename : pchar; (* The file analyzed, if any *) directory : pchar; (* the directory/base of the file *) base : xmlCharPtr; (* Base of the array to parse *) cur : xmlCharPtr; (* Current char being parsed *) _end : xmlCharPtr; (* end of the array to parse *) length : cint; (* length if known *) line : cint; (* Current line *) col : cint; (* 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. *) consumed : culong; (* How many xmlChars already consumed *) free : xmlParserInputDeallocate; (* function to deallocate the base *) encoding : xmlCharPtr; (* the encoding string for entity *) version : xmlCharPtr; (* the version string for entity *) standalone : cint; (* Was that entity marked standalone *) id : cint; (* an unique identifier for the entity *) end; (** * xmlParserNodeInfo: * * The parser can be asked to collect Node informations, i.e. at what * place in the file they were detected. * NOTE: This is off by default and not very well tested. *) xmlParserNodeInfo = record node : xmlNodePtr; (* Position & line # that text that created the node begins & ends on *) begin_pos : culong; begin_line : culong; end_pos : culong; end_line : culong; end; xmlParserNodeInfoSeq = record maximum : culong; length : culong; buffer : xmlParserNodeInfoPtr; end; (** * xmlParserInputState: * * The parser is now working also as a state based parser. * The recursive one use the state info for entities processing. *) xmlParserInputState = ( 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 *) ); {$ENDIF} {$IFDEF CONST} (** * XML_DETECT_IDS: * * Bit in the loadsubset context field to tell to do ID/REFs lookups. * Use it to initialize xmlLoadExtDtdDefaultValue. *) XML_DETECT_IDS = 2; (** * 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_COMPLETE_ATTRS = 4; (** * 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. *) XML_SKIP_IDS = 8; {$ENDIF} {$IFDEF TYPE} (** * xmlParserMode: * * A parser can operate in various modes *) xmlParserMode = ( 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 ); (** * 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. *) xmlParserCtxt = record sax : xmlSAXHandlerPtr; (* The SAX handler *) userData : pointer; (* For SAX interface only, used by DOM build *) myDoc : xmlDocPtr; (* the document being built *) wellFormed : cint; (* is the document well formed *) replaceEntities : cint; (* shall we replace entities ? *) version : xmlCharPtr; (* the XML version string *) encoding : xmlCharPtr; (* the declared encoding, if any *) standalone : cint; (* standalone document *) html : cint; (* an HTML(1)/Docbook(2) document *) (* Input stream stack *) input : xmlParserInputPtr; (* Current input stream *) inputNr : cint; (* Number of current input streams *) inputMax : cint; (* Max number of input streams *) inputTab : xmlParserInputPtrPtr; (* stack of inputs *) (* Node analysis stack only used for DOM building *) node : xmlNodePtr; (* Current parsed Node *) nodeNr : cint; (* Depth of the parsing stack *) nodeMax : cint; (* Max depth of the parsing stack *) nodeTab : xmlNodePtrPtr; (* array of nodes *) record_info : cint; (* Whether node info should be kept *) node_seq : xmlParserNodeInfoSeq; (* info about each node parsed *) errNo : cint; (* error code *) hasExternalSubset : cint; (* reference and external subset *) hasPErefs : cint; (* the internal subset has PE refs *) external : cint; (* are we parsing an external entity *) valid : cint; (* is the document valid *) validate : cint; (* shall we try to validate ? *) vctxt : xmlValidCtxt; (* The validity context *) instate : xmlParserInputState; (* current type of input *) token : cint; (* next char look-ahead *) directory : pchar; (* the data directory *) (* Node name stack *) name : xmlCharPtr; (* Current parsed Node *) nameNr : cint; (* Depth of the parsing stack *) nameMax : cint; (* Max depth of the parsing stack *) nameTab : xmlCharPtrPtr; (* array of nodes *) nbChars : culong; (* number of xmlChar processed *) checkIndex : culong; (* used by progressive parsing lookup *) keepBlanks : cint; (* ugly but ... *) disableSAX : cint; (* SAX callbacks are disabled *) inSubset : cint; (* Parsing is in int 1/ext 2 subset *) intSubName : xmlCharPtr; (* name of subset *) extSubURI : xmlCharPtr; (* URI of external subset *) extSubSystem : xmlCharPtr; (* SYSTEM ID of external subset *) (* xml:space values *) space : pcint; (* Should the parser preserve spaces *) spaceNr : cint; (* Depth of the parsing stack *) spaceMax : cint; (* Max depth of the parsing stack *) spaceTab : pcint; (* array of space infos *) depth : cint; (* to prevent entity substitution loops *) entity : xmlParserInputPtr; (* used to check entities boundaries *) charset : cint; (* encoding of the in-memory content actually an xmlCharEncoding *) nodelen : cint; (* Those two fields are there to *) nodemem : cint; (* Speed up large node parsing *) pedantic : cint; (* signal pedantic warnings *) _private : pointer; (* For user data, libxml won't touch it *) loadsubset : cint; (* should the external subset be loaded *) linenumbers : cint; (* set line number in element content *) catalogs : pointer; (* document's own catalog *) recovery : cint; (* run in recovery mode *) progressive : cint; (* is this a progressive parsing *) dict : xmlDictPtr; (* dictionnary for the parser *) atts : xmlCharPtrPtr; (* array for the attributes callbacks *) maxatts : cint; (* the size of the array *) docdict : cint; (* use strings from dict to build tree *) (* * pre-interned strings *) str_xml : xmlCharPtr; str_xmlns : xmlCharPtr; str_xml_ns : xmlCharPtr; (* * Everything below is used only by the new SAX mode *) sax2 : cint; (* operating in the new SAX mode *) nsNr : cint; (* the number of inherited namespaces *) nsMax : cint; (* the size of the arrays *) nsTab : xmlCharPtrPtr; (* the array of prefix/namespace name *) attallocs : pcint; (* which attribute were allocated *) pushTab : ppointer; (* array of data for push *) attsDefault : xmlHashTablePtr; (* defaulted attributes if any *) attsSpecial : xmlHashTablePtr; (* non-CDATA attributes if any *) nsWellFormed : cint; (* is the document XML Nanespace okay *) options : cint; (* Extra options *) (* * Those fields are needed only for treaming parsing so far *) dictNames : cint; (* Use dictionary names for the tree *) freeElemsNr : cint; (* number of freed element nodes *) freeElems : xmlNodePtr; (* List of freed element nodes *) freeAttrsNr : cint; (* number of freed attributes nodes *) freeAttrs : xmlAttrPtr; (* List of freed attributes nodes *) (* * the complete error informations for the last error. *) lastError : xmlError; parseMode : xmlParserMode; (* the parser mode *) end; (** * xmlSAXLocator: * * A SAX Locator. *) getPublicIdFunc = function(ctx: pointer): xmlCharPtr; EXTDECL; getSystemIdFunc = function(ctx: pointer): xmlCharPtr; EXTDECL; getLineNumberFunc = function(ctx: pointer): cint; EXTDECL; getColumnNumberFunc = function(ctx: pointer): cint; EXTDECL; xmlSAXLocator = record getPublicId : getPublicIdFunc; getSystemId : getSystemIdFunc; getLineNumber : getLineNumberFunc; getColumnNumber : getColumnNumberFunc; end; (** * xmlSAXHandler: * * A SAX handler is bunch of callbacks called by the parser when processing * of the input generate data or structure informations. *) (** * 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. *) resolveEntitySAXFunc = function(ctx: pointer; publicID, systemID: xmlCharPtr): xmlParserInputPtr; EXTDECL; (** * 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. *) internalSubsetSAXFunc = procedure(ctx: pointer; name, ExternalID, SystemID: xmlCharPtr); EXTDECL; (** * 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. *) externalSubsetSAXFunc = procedure(ctx: pointer; name, ExternalID, SystemID: xmlCharPtr); EXTDECL; (** * getEntitySAXFunc: * @ctx: the user data (XML parser context) * @name: The entity name * * Get an entity by name. * * Returns the xmlEntityPtr if found. *) getEntitySAXFunc = function(ctx: pointer; name: xmlCharPtr): xmlEntityPtr; EXTDECL; (** * getParameterEntitySAXFunc: * @ctx: the user data (XML parser context) * @name: The entity name * * Get a parameter entity by name. * * Returns the xmlEntityPtr if found. *) getParameterEntitySAXFunc = function(ctx: pointer; name: xmlCharPtr): xmlEntityPtr; EXTDECL; (** * 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. *) entityDeclSAXFunc = procedure(ctx: pointer; name: xmlCharPtr; _type: cint; publicId, systemId, content: xmlCharPtr); EXTDECL; (** * 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. *) notationDeclSAXFunc = procedure(ctx: pointer; name, publicId, systemId: xmlCharPtr); EXTDECL; (** * 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. *) attributeDeclSAXFunc = procedure(ctx: pointer; elem, fullname: xmlCharPtr; _type, def: cint; defaultValue: xmlCharPtr; tree: xmlEnumerationPtr); EXTDECL; (** * 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. *) elementDeclSAXFunc = procedure(ctx: pointer; name: xmlCharPtr; _type: cint; content: xmlElementContentPtr); EXTDECL; (** * 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. *) unparsedEntityDeclSAXFunc = procedure(ctx: pointer; name, publicId, systemId, notationName: xmlCharPtr); EXTDECL; (** * 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. *) setDocumentLocatorSAXFunc = procedure(ctx: pointer; loc: xmlSAXLocatorPtr); EXTDECL; (** * startDocumentSAXFunc: * @ctx: the user data (XML parser context) * * Called when the document start being processed. *) startDocumentSAXFunc = procedure(ctx: pointer); EXTDECL; (** * endDocumentSAXFunc: * @ctx: the user data (XML parser context) * * Called when the document end has been detected. *) endDocumentSAXFunc = procedure(ctx: pointer); EXTDECL; (** * 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. *) startElementSAXFunc = procedure(ctx: pointer; name: xmlCharPtr; atts: xmlCharPtrPtr); EXTDECL; (** * endElementSAXFunc: * @ctx: the user data (XML parser context) * @name: The element name * * Called when the end of an element has been detected. *) endElementSAXFunc = procedure(ctx: pointer; name: xmlCharPtr); EXTDECL; (** * 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. *) attributeSAXFunc = procedure(ctx: pointer; name, value: xmlCharPtr); EXTDECL; (** * referenceSAXFunc: * @ctx: the user data (XML parser context) * @name: The entity name * * Called when an entity reference is detected. *) referenceSAXFunc = procedure(ctx: pointer; name: xmlCharPtr); EXTDECL; (** * charactersSAXFunc: * @ctx: the user data (XML parser context) * @ch: a xmlChar string * @len: the number of xmlChar * * Receiving some chars from the parser. *) charactersSAXFunc = procedure(ctx: pointer; ch: xmlCharPtr; len: cint); EXTDECL; (** * 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. *) ignorableWhitespaceSAXFunc = procedure(ctx: pointer; ch: xmlCharPtr; len: cint); EXTDECL; (** * processingInstructionSAXFunc: * @ctx: the user data (XML parser context) * @target: the target name * @data: the PI data's * * A processing instruction has been parsed. *) processingInstructionSAXFunc = procedure(ctx: pointer; target, data: xmlCharPtr); EXTDECL; (** * commentSAXFunc: * @ctx: the user data (XML parser context) * @value: the comment content * * A comment has been parsed. *) commentSAXFunc = procedure(ctx: pointer; value: xmlCharPtr); EXTDECL; (** * cdataBlockSAXFunc: * @ctx: the user data (XML parser context) * @value: The pcdata content * @len: the block length * * Called when a pcdata block has been parsed. *) cdataBlockSAXFunc = procedure(ctx: pointer; value: xmlCharPtr; len: cint); EXTDECL; (** * 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. *) warningSAXFunc = procedure(ctx: pointer; msg: pchar); cdecl; varargs; (** * 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. *) errorSAXFunc = procedure(ctx: pointer; msg: pchar); cdecl; varargs; (** * 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. *) fatalErrorSAXFunc = procedure(ctx: pointer; msg: pchar); cdecl; varargs; (** * isStandaloneSAXFunc: * @ctx: the user data (XML parser context) * * Is this document tagged standalone? * * Returns 1 if true *) isStandaloneSAXFunc = function(ctx: pointer): cint; EXTDECL; (** * hasInternalSubsetSAXFunc: * @ctx: the user data (XML parser context) * * Does this document has an internal subset. * * Returns 1 if true *) hasInternalSubsetSAXFunc = function(ctx: pointer): cint; EXTDECL; (** * hasExternalSubsetSAXFunc: * @ctx: the user data (XML parser context) * * Does this document has an external subset? * * Returns 1 if true *) hasExternalSubsetSAXFunc = function(ctx: pointer): cint; EXTDECL; {$ENDIF} (************************************************************************ * * * The SAX version 2 API extensions * * * ************************************************************************) (** * XML_SAX2_MAGIC: * * Special constant found in SAX2 blocks initialized fields *) {$IFDEF CONST} XML_SAX2_MAGIC = $DEEDBEAF; {$ENDIF} {$IFDEF TYPE} (** * 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 informations for the element, as well as * the new namespace declarations on the element. *) startElementNsSAX2Func = procedure(ctx: pointer; localname, prefix, URI: xmlCharPtr; nb_namespaces: cint; namespaces: xmlCharPtrPtr; nb_attributes, nb_defaulted: cint; attributes: xmlCharPtrPtr); EXTDECL; (** * 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 informations for the element. *) endElementNsSAX2Func = procedure(ctx: pointer; localname, prefix, URI: xmlCharPtr); EXTDECL; xmlSAXHandler = record internalSubset: internalSubsetSAXFunc; isStandalone: isStandaloneSAXFunc; hasInternalSubset: hasInternalSubsetSAXFunc; hasExternalSubset: hasExternalSubsetSAXFunc; resolveEntity: resolveEntitySAXFunc; getEntity: getEntitySAXFunc; entityDecl: entityDeclSAXFunc; notationDecl: notationDeclSAXFunc; attributeDecl: attributeDeclSAXFunc; elementDecl: elementDeclSAXFunc; unparsedEntityDecl: unparsedEntityDeclSAXFunc; setDocumentLocator: setDocumentLocatorSAXFunc; startDocument: startDocumentSAXFunc; endDocument: endDocumentSAXFunc; startElement: startElementSAXFunc; endElement: endElementSAXFunc; reference: referenceSAXFunc; characters: charactersSAXFunc; ignorableWhitespace: ignorableWhitespaceSAXFunc; processingInstruction: processingInstructionSAXFunc; comment: commentSAXFunc; warning: warningSAXFunc; error: errorSAXFunc; fatalError: fatalErrorSAXFunc; (* unused error() get all the errors *) getParameterEntity: getParameterEntitySAXFunc; cdataBlock: cdataBlockSAXFunc; externalSubset: externalSubsetSAXFunc; initialized: cuint; (* The following fields are extensions available only on version 2 *) _private: pointer; startElementNs: startElementNsSAX2Func; endElementNs: endElementNsSAX2Func; serror: xmlStructuredErrorFunc; end; (* * SAX Version 1 *) xmlSAXHandlerV1 = record internalSubset: internalSubsetSAXFunc; isStandalone: isStandaloneSAXFunc; hasInternalSubset: hasInternalSubsetSAXFunc; hasExternalSubset: hasExternalSubsetSAXFunc; resolveEntity: resolveEntitySAXFunc; getEntity: getEntitySAXFunc; entityDecl: entityDeclSAXFunc; notationDecl: notationDeclSAXFunc; attributeDecl: attributeDeclSAXFunc; elementDecl: elementDeclSAXFunc; unparsedEntityDecl: unparsedEntityDeclSAXFunc; setDocumentLocator: setDocumentLocatorSAXFunc; startDocument: startDocumentSAXFunc; endDocument: endDocumentSAXFunc; startElement: startElementSAXFunc; endElement: endElementSAXFunc; reference: referenceSAXFunc; characters: charactersSAXFunc; ignorableWhitespace: ignorableWhitespaceSAXFunc; processingInstruction: processingInstructionSAXFunc; comment: commentSAXFunc; warning: warningSAXFunc; error: errorSAXFunc; fatalError: fatalErrorSAXFunc; (* unused error() get all the errors *) getParameterEntity: getParameterEntitySAXFunc; cdataBlock: cdataBlockSAXFunc; externalSubset: externalSubsetSAXFunc; initialized: cuint; end; (** * 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. *) xmlExternalEntityLoader = function(URL, ID: pchar; context: xmlParserCtxtPtr): xmlParserInputPtr; EXTDECL; (** * xmlParserOption: * * This is the set of XML parser options that can be passed down * to the xmlReadDoc() and similar calls. *) xmlParserOption = type cint; {$ENDIF} {$IFDEF CONST} XML_PARSE_RECOVER = (1 shl 0); (* recover on errors *) XML_PARSE_NOENT = (1 shl 1); (* substitute entities *) XML_PARSE_DTDLOAD = (1 shl 2); (* load the external subset *) XML_PARSE_DTDATTR = (1 shl 3); (* default DTD attributes *) XML_PARSE_DTDVALID = (1 shl 4); (* validate with the DTD *) XML_PARSE_NOERROR = (1 shl 5); (* suppress error reports *) XML_PARSE_NOWARNING = (1 shl 6); (* suppress warning reports *) XML_PARSE_PEDANTIC = (1 shl 7); (* pedantic error reporting *) XML_PARSE_NOBLANKS = (1 shl 8); (* remove blank nodes *) XML_PARSE_SAX1 = (1 shl 9); (* use the SAX1 interface internally *) XML_PARSE_XINCLUDE = (1 shl 10);(* Implement XInclude substitition *) XML_PARSE_NONET = (1 shl 11);(* Forbid network access *) XML_PARSE_NODICT = (1 shl 12);(* Do not reuse the context dictionnary *) XML_PARSE_NSCLEAN = (1 shl 13);(* remove redundant namespaces declarations *) XML_PARSE_NOCDATA = (1 shl 14);(* merge CDATA as text nodes *) XML_PARSE_NOXINCNODE = (1 shl 15);(* do not generate XINCLUDE START/END nodes *) XML_PARSE_COMPACT = (1 shl 16); (* compact small text nodes); no modification of the tree allowed afterwards (will possibly crash if you try to modify the tree) *) {$ENDIF} {$IFDEF TYPE} xmlFeature = ( 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_NONE = 99999 (* just to be sure of allocation size *) ); {$ENDIF} {$IFDEF FUNCTION} (* * Init/Cleanup *) procedure xmlInitParser; EXTDECL; external xml2lib; procedure xmlCleanupParser; EXTDECL; external xml2lib; (* * Input functions *) function xmlParserInputRead(_in: xmlParserInputPtr; len: cint): cint; EXTDECL; external xml2lib; function xmlParserInputGrow(_in: xmlParserInputPtr; len: cint): cint; EXTDECL; external xml2lib; (* * Basic parsing Interfaces *) {$IFDEF LIBXML_SAX1_ENABLED} function xmlParseDoc(cur: xmlCharPtr): xmlDocPtr; EXTDECL; external xml2lib; function xmlParseFile(filename: pchar): xmlDocPtr; EXTDECL; external xml2lib; function xmlParseMemory(buffer: pchar; size: cint): xmlDocPtr; EXTDECL; external xml2lib; {$ENDIF} (* LIBXML_SAX1_ENABLED *) function xmlSubstituteEntitiesDefault(val: cint): cint; EXTDECL; external xml2lib; function xmlKeepBlanksDefault(val: cint): cint; EXTDECL; external xml2lib; procedure xmlStopParser(ctxt: xmlParserCtxtPtr); EXTDECL; external xml2lib; function xmlPedanticParserDefault(val: cint): cint; EXTDECL; external xml2lib; function xmlLineNumbersDefault(val: cint): cint; EXTDECL; external xml2lib; {$IFDEF LIBXML_SAX1_ENABLED} (* * Recovery mode *) function xmlRecoverDoc(cur: xmlCharPtr): xmlDocPtr; EXTDECL; external xml2lib; function xmlRecoverMemory(buffer: pchar; size: cint): xmlDocPtr; EXTDECL; external xml2lib; function xmlRecoverFile(filename: pchar): xmlDocPtr; EXTDECL; external xml2lib; {$ENDIF} (* LIBXML_SAX1_ENABLED *) (* * Less common routines and SAX interfaces *) function xmlParseDocument(ctxt: xmlParserCtxtPtr): cint; EXTDECL; external xml2lib; function xmlParseExtParsedEnt(ctxt: xmlParserCtxtPtr): cint; EXTDECL; external xml2lib; {$IFDEF LIBXML_SAX1_ENABLED} function xmlSAXUserParseFile(sax: xmlSAXHandlerPtr; user_data: pointer; filename: pchar): cint; EXTDECL; external xml2lib; function xmlSAXUserParseMemory(sax: xmlSAXHandlerPtr; user_data: pointer; buffer: pchar; size: cint): cint; EXTDECL; external xml2lib; function xmlSAXParseDoc(sax: xmlSAXHandlerPtr; cur: xmlCharPtr; recovery: cint): xmlDocPtr; EXTDECL; external xml2lib; function xmlSAXParseMemory(sax: xmlSAXHandlerPtr; buffer: pchar; size: cint; recovery: cint): xmlDocPtr; EXTDECL; external xml2lib; function xmlSAXParseMemoryWithData(sax: xmlSAXHandlerPtr; buffer: pchar; size: cint; recovery: cint; data: pointer): xmlDocPtr; EXTDECL; external xml2lib; function xmlSAXParseFile(sax: xmlSAXHandlerPtr; filename: pchar; recovery: cint): xmlDocPtr; EXTDECL; external xml2lib; function xmlSAXParseFileWithData(sax: xmlSAXHandlerPtr; filename: pchar; recovery: cint; data: pointer): xmlDocPtr; EXTDECL; external xml2lib; function xmlSAXParseEntity(sax: xmlSAXHandlerPtr; filename: pchar): xmlDocPtr; EXTDECL; external xml2lib; function xmlParseEntity(filename: pchar): xmlDocPtr; EXTDECL; external xml2lib; {$ENDIF} (* LIBXML_SAX1_ENABLED *) {$IFDEF LIBXML_VALID_ENABLED} function xmlSAXParseDTD(sax: xmlSAXHandlerPtr; ExternalID, SystemID: xmlCharPtr): xmlDtdPtr; EXTDECL; external xml2lib; function xmlParseDTD(ExternalID, SystemID: xmlCharPtr): xmlDtdPtr; EXTDECL; external xml2lib; function xmlIOParseDTD(sax: xmlSAXHandlerPtr; input: xmlParserInputBufferPtr; enc: xmlCharEncoding): xmlDtdPtr; EXTDECL; external xml2lib; {$ENDIF} (* LIBXML_VALID_ENABLE *) {$IFDEF LIBXML_SAX1_ENABLED} function xmlParseBalancedChunkMemory(doc: xmlDocPtr; sax: xmlSAXHandlerPtr; user_data: pointer; depth: cint; _string: xmlCharPtr; lst: xmlNodePtrPtr): cint; EXTDECL; external xml2lib; {$ENDIF} (* LIBXML_SAX1_ENABLED *) function xmlParseInNodeContext(node: xmlNodePtr; data: pchar; datalen, options: cint; lst: xmlNodePtrPtr): xmlParserErrors; EXTDECL; external xml2lib; {$IFDEF LIBXML_SAX1_ENABLED} function xmlParseBalancedChunkMemoryRecover(doc: xmlDocPtr; sax: xmlSAXHandlerPtr; user_data: pointer; depth: cint; _string: xmlCharPtr; lst: xmlNodePtrPtr; recover: cint): cint; EXTDECL; external xml2lib; function xmlParseExternalEntity(doc: xmlDocPtr; sax: xmlSAXHandlerPtr; user_data: pointer; depth: cint; URL, ID: xmlCharPtr; lst: xmlNodePtrPtr): cint; EXTDECL; external xml2lib; {$ENDIF} (* LIBXML_SAX1_ENABLED *) function xmlParseCtxtExternalEntity(ctx: xmlParserCtxtPtr; URL, ID: xmlCharPtr; lst: xmlNodePtrPtr): cint; EXTDECL; external xml2lib; (* * Parser contexts handling. *) function xmlNewParserCtxt: xmlParserCtxtPtr; EXTDECL; external xml2lib; function xmlInitParserCtxt(ctxt: xmlParserCtxtPtr): cint; EXTDECL; external xml2lib; procedure xmlClearParserCtxt(ctxt: xmlParserCtxtPtr); EXTDECL; external xml2lib; procedure xmlFreeParserCtxt(ctxt: xmlParserCtxtPtr); EXTDECL; external xml2lib; {$IFDEF LIBXML_SAX1_ENABLED} procedure xmlSetupParserForBuffer(ctxt: xmlParserCtxtPtr; buffer: xmlCharPtr; filename: pchar); EXTDECL; external xml2lib; {$ENDIF} (* LIBXML_SAX1_ENABLED *) function xmlCreateDocParserCtxt(cur: xmlCharPtr): xmlParserCtxtPtr; EXTDECL; external xml2lib; {$IFDEF LIBXML_LEGACY_ENABLED} (* * Reading/setting optional parsing features. *) function xmlGetFeaturesList(var len: cint; var result: pchar): cint; EXTDECL; external xml2lib; function xmlGetFeature(ctxt: xmlParserCtxtPtr; name: pchar; result: pointer): cint; EXTDECL; external xml2lib; function xmlSetFeature(ctxt: xmlParserCtxtPtr; name: pchar; value: pointer): cint; EXTDECL; external xml2lib; {$ENDIF} (* LIBXML_LEGACY_ENABLED *) {$IFDEF LIBXML_PUSH_ENABLED} (* * Interfaces for the Push mode. *) function xmlCreatePushParserCtxt(sax: xmlSAXHandlerPtr; user_data: pointer; chunk: pchar; size: cint; filename: pchar): xmlParserCtxtPtr; EXTDECL; external xml2lib; function xmlParseChunk(ctxt: xmlParserCtxtPtr; chunk: pchar; size, terminate: cint): cint; EXTDECL; external xml2lib; {$ENDIF} (* LIBXML_PUSH_ENABLED *) (* * Special I/O mode. *) function xmlCreateIOParserCtxt(sax: xmlSAXHandlerPtr; user_data: pointer; ioread: xmlInputReadCallback; ioclose: xmlInputCloseCallback; ioctx: pointer; enc: xmlCharEncoding): xmlParserCtxtPtr; EXTDECL; external xml2lib; function xmlNewIOInputStream(ctxt: xmlParserCtxtPtr; input: xmlParserInputBufferPtr; enc: xmlCharEncoding): xmlParserInputPtr; EXTDECL; external xml2lib; (* * Node infos. *) function xmlParserFindNodeInfo(ctxt: xmlParserCtxtPtr; node: xmlNodePtr): xmlParserNodeInfoPtr; EXTDECL; external xml2lib; procedure xmlInitNodeInfoSeq(seq: xmlParserNodeInfoSeqPtr); EXTDECL; external xml2lib; procedure xmlClearNodeInfoSeq(seq: xmlParserNodeInfoSeqPtr); EXTDECL; external xml2lib; function xmlParserFindNodeInfoIndex(seq: xmlParserNodeInfoSeqPtr; node: xmlNodePtr): culong; EXTDECL; external xml2lib; procedure xmlParserAddNodeInfo(ctxt: xmlParserCtxtPtr; info: xmlParserNodeInfoPtr); EXTDECL; external xml2lib; (* * External entities handling actually implemented in xmlIO. *) procedure xmlSetExternalEntityLoader(f: xmlExternalEntityLoader); EXTDECL; external xml2lib; function xmlGetExternalEntityLoader(): xmlExternalEntityLoader; EXTDECL; external xml2lib; function xmlLoadExternalEntity(URL, ID: pchar; ctxt: xmlParserCtxtPtr): xmlParserInputPtr; EXTDECL; external xml2lib; (* * Index lookup, actually implemented in the encoding module *) function xmlByteConsumed(ctxt: xmlParserCtxtPtr): culong; EXTDECL; external xml2lib; (* * New set of simpler/more flexible APIs *) procedure xmlCtxtReset(ctxt: xmlParserCtxtPtr); EXTDECL; external xml2lib; function xmlCtxtResetPush(ctxt: xmlParserCtxtPtr; chunk: pchar; size: cint; filename, encoding: pchar): cint; EXTDECL; external xml2lib; function xmlCtxtUseOptions(ctxt: xmlParserCtxtPtr; options: cint): cint; EXTDECL; external xml2lib; function xmlReadDoc(cur: xmlCharPtr; URL, encoding: pchar; options: cint): xmlDocPtr; EXTDECL; external xml2lib; function xmlReadFile(filename, encoding: pchar; options: cint): xmlDocPtr; EXTDECL; external xml2lib; function xmlReadMemory(buffer: pchar; size: cint; URL, encoding: pchar; options: cint): xmlDocPtr; EXTDECL; external xml2lib; function xmlReadFd(fd: cint; URL, encoding: pchar; options: cint): xmlDocPtr; EXTDECL; external xml2lib; function xmlReadIO(ioread: xmlInputReadCallback; ioclose: xmlInputCloseCallback; ioctx: pointer; URL, encoding: pchar; options: cint): xmlDocPtr; EXTDECL; external xml2lib; function xmlCtxtReadDoc(ctxt: xmlParserCtxtPtr; cur: xmlCharPtr; URL, encoding: pchar; options: cint): xmlDocPtr; EXTDECL; external xml2lib; function xmlCtxtReadFile(ctxt: xmlParserCtxtPtr; filename, encoding: pchar; options: cint): xmlDocPtr; EXTDECL; external xml2lib; function xmlCtxtReadMemory(ctxt: xmlParserCtxtPtr; buffer: pchar; size: cint; URL, encoding: pchar; options: cint): xmlDocPtr; EXTDECL; external xml2lib; function xmlCtxtReadFd(ctxt: xmlParserCtxtPtr; fd: cint; URL, encoding: pchar; options: cint): xmlDocPtr; EXTDECL; external xml2lib; function xmlCtxtReadIO(ctxt: xmlParserCtxtPtr; ioread: xmlInputReadCallback; ioclose: xmlInputCloseCallback; ioctx: pchar; URL, encoding: pchar; options: cint): xmlDocPtr; EXTDECL; external xml2lib; (* * Library wide options *) (** * xmlFeature: * * Used to examine the existance of features that can be enabled * or disabled at compile-time. * They used to be called XML_FEATURE_xxx but this clashed with Expat *) function xmlHasFeature(feature: xmlFeature): cint; EXTDECL; external xml2lib; {$ENDIF}