/* * SAX.c : Old SAX v1 handlers to build a tree. * Deprecated except for compatibility * * See Copyright for the status of this software. * * Daniel Veillard */ #define IN_LIBXML #include "libxml.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /* #define DEBUG_SAX */ /* #define DEBUG_SAX_TREE */ static int deprecated_msg = 0; #define DEPRECATED(n) \ if (deprecated_msg == 0) \ xmlGenericError(xmlGenericErrorContext, \ "Use of deprecated SAXv1 function %s\n", n); \ deprecated_msg++; /** * getPublicId: * @ctx: the user data (XML parser context) * * Provides the public ID e.g. "-//SGMLSOURCE//DTD DEMO//EN" * DEPRECATED: use xmlSAX2GetPublicId() * * Returns a xmlChar * */ const xmlChar * getPublicId(void *ctx) { DEPRECATED("getPublicId") return(xmlSAX2GetPublicId(ctx)); } /** * getSystemId: * @ctx: the user data (XML parser context) * * Provides the system ID, basically URL or filename e.g. * http://www.sgmlsource.com/dtds/memo.dtd * DEPRECATED: use xmlSAX2GetSystemId() * * Returns a xmlChar * */ const xmlChar * getSystemId(void *ctx) { DEPRECATED("getSystemId") return(xmlSAX2GetSystemId(ctx)); } /** * getLineNumber: * @ctx: the user data (XML parser context) * * Provide the line number of the current parsing point. * DEPRECATED: use xmlSAX2GetLineNumber() * * Returns an int */ int getLineNumber(void *ctx) { DEPRECATED("getLineNumber") return(xmlSAX2GetLineNumber(ctx)); } /** * getColumnNumber: * @ctx: the user data (XML parser context) * * Provide the column number of the current parsing point. * DEPRECATED: use xmlSAX2GetColumnNumber() * * Returns an int */ int getColumnNumber(void *ctx) { DEPRECATED("getColumnNumber") return(xmlSAX2GetColumnNumber(ctx)); } /** * isStandalone: * @ctx: the user data (XML parser context) * * Is this document tagged standalone ? * DEPRECATED: use xmlSAX2IsStandalone() * * Returns 1 if true */ int isStandalone(void *ctx) { DEPRECATED("isStandalone") return(xmlSAX2IsStandalone(ctx)); } /** * hasInternalSubset: * @ctx: the user data (XML parser context) * * Does this document has an internal subset * DEPRECATED: use xmlSAX2HasInternalSubset() * * Returns 1 if true */ int hasInternalSubset(void *ctx) { DEPRECATED("hasInternalSubset") return(xmlSAX2HasInternalSubset(ctx)); } /** * hasExternalSubset: * @ctx: the user data (XML parser context) * * Does this document has an external subset * DEPRECATED: use xmlSAX2HasExternalSubset() * * Returns 1 if true */ int hasExternalSubset(void *ctx) { DEPRECATED("hasExternalSubset") return(xmlSAX2HasExternalSubset(ctx)); } /** * internalSubset: * @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. * DEPRECATED: use xmlSAX2InternalSubset() */ void internalSubset(void *ctx, const xmlChar *name, const xmlChar *ExternalID, const xmlChar *SystemID) { DEPRECATED("internalSubset") xmlSAX2InternalSubset(ctx, name, ExternalID, SystemID); } /** * externalSubset: * @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. * DEPRECATED: use xmlSAX2ExternalSubset() */ void externalSubset(void *ctx, const xmlChar *name, const xmlChar *ExternalID, const xmlChar *SystemID) { DEPRECATED("externalSubset") xmlSAX2ExternalSubset(ctx, name, ExternalID, SystemID); } /** * resolveEntity: * @ctx: the user data (XML parser context) * @publicId: The public ID of the entity * @systemId: The system ID of the entity * * 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 * DEPRECATED: use xmlSAX2ResolveEntity() * * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour. */ xmlParserInputPtr resolveEntity(void *ctx, const xmlChar *publicId, const xmlChar *systemId) { DEPRECATED("resolveEntity") return(xmlSAX2ResolveEntity(ctx, publicId, systemId)); } /** * getEntity: * @ctx: the user data (XML parser context) * @name: The entity name * * Get an entity by name * DEPRECATED: use xmlSAX2GetEntity() * * Returns the xmlEntityPtr if found. */ xmlEntityPtr getEntity(void *ctx, const xmlChar *name) { DEPRECATED("getEntity") return(xmlSAX2GetEntity(ctx, name)); } /** * getParameterEntity: * @ctx: the user data (XML parser context) * @name: The entity name * * Get a parameter entity by name * DEPRECATED: use xmlSAX2GetParameterEntity() * * Returns the xmlEntityPtr if found. */ xmlEntityPtr getParameterEntity(void *ctx, const xmlChar *name) { DEPRECATED("getParameterEntity") return(xmlSAX2GetParameterEntity(ctx, name)); } /** * entityDecl: * @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 * DEPRECATED: use xmlSAX2EntityDecl() */ void entityDecl(void *ctx, const xmlChar *name, int type, const xmlChar *publicId, const xmlChar *systemId, xmlChar *content) { DEPRECATED("entityDecl") xmlSAX2EntityDecl(ctx, name, type, publicId, systemId, content); } /** * attributeDecl: * @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 * DEPRECATED: use xmlSAX2AttributeDecl() */ void attributeDecl(void *ctx, const xmlChar *elem, const xmlChar *fullname, int type, int def, const xmlChar *defaultValue, xmlEnumerationPtr tree) { DEPRECATED("attributeDecl") xmlSAX2AttributeDecl(ctx, elem, fullname, type, def, defaultValue, tree); } /** * elementDecl: * @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 * DEPRECATED: use xmlSAX2ElementDecl() */ void elementDecl(void *ctx, const xmlChar * name, int type, xmlElementContentPtr content) { DEPRECATED("elementDecl") xmlSAX2ElementDecl(ctx, name, type, content); } /** * notationDecl: * @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. * DEPRECATED: use xmlSAX2NotationDecl() */ void notationDecl(void *ctx, const xmlChar *name, const xmlChar *publicId, const xmlChar *systemId) { DEPRECATED("notationDecl") xmlSAX2NotationDecl(ctx, name, publicId, systemId); } /** * unparsedEntityDecl: * @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 * DEPRECATED: use xmlSAX2UnparsedEntityDecl() */ void unparsedEntityDecl(void *ctx, const xmlChar *name, const xmlChar *publicId, const xmlChar *systemId, const xmlChar *notationName) { DEPRECATED("unparsedEntityDecl") xmlSAX2UnparsedEntityDecl(ctx, name, publicId, systemId, notationName); } /** * setDocumentLocator: * @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. * DEPRECATED */ void setDocumentLocator(void *ctx ATTRIBUTE_UNUSED, xmlSAXLocatorPtr loc ATTRIBUTE_UNUSED) { DEPRECATED("setDocumentLocator") } /** * startDocument: * @ctx: the user data (XML parser context) * * called when the document start being processed. * DEPRECATED: use xmlSAX2StartDocument() */ void startDocument(void *ctx) { DEPRECATED("startDocument") xmlSAX2StartDocument(ctx); } /** * endDocument: * @ctx: the user data (XML parser context) * * called when the document end has been detected. * DEPRECATED: use xmlSAX2EndDocument() */ void endDocument(void *ctx) { DEPRECATED("endDocument") xmlSAX2EndDocument(ctx); } /** * attribute: * @ctx: the user data (XML parser context) * @fullname: 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. * DEPRECATED: use xmlSAX2Attribute() */ void attribute(void *ctx ATTRIBUTE_UNUSED, const xmlChar *fullname ATTRIBUTE_UNUSED, const xmlChar *value ATTRIBUTE_UNUSED) { DEPRECATED("attribute") } /** * startElement: * @ctx: the user data (XML parser context) * @fullname: The element name, including namespace prefix * @atts: An array of name/value attributes pairs, NULL terminated * * called when an opening tag has been processed. * DEPRECATED: use xmlSAX2StartElement() */ void startElement(void *ctx, const xmlChar *fullname, const xmlChar **atts) { DEPRECATED("startElement") xmlSAX2StartElement(ctx, fullname, atts); } /** * endElement: * @ctx: the user data (XML parser context) * @name: The element name * * called when the end of an element has been detected. * DEPRECATED: use xmlSAX2EndElement() */ void endElement(void *ctx, const xmlChar *name ATTRIBUTE_UNUSED) { DEPRECATED("endElement") xmlSAX2EndElement(ctx, name); } /** * reference: * @ctx: the user data (XML parser context) * @name: The entity name * * called when an entity reference is detected. * DEPRECATED: use xmlSAX2Reference() */ void reference(void *ctx, const xmlChar *name) { DEPRECATED("reference") xmlSAX2Reference(ctx, name); } /** * characters: * @ctx: the user data (XML parser context) * @ch: a xmlChar string * @len: the number of xmlChar * * receiving some chars from the parser. * DEPRECATED: use xmlSAX2Characters() */ void characters(void *ctx, const xmlChar *ch, int len) { DEPRECATED("characters") xmlSAX2Characters(ctx, ch, len); } /** * ignorableWhitespace: * @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 * DEPRECATED: use xmlSAX2IgnorableWhitespace() */ void ignorableWhitespace(void *ctx ATTRIBUTE_UNUSED, const xmlChar *ch ATTRIBUTE_UNUSED, int len ATTRIBUTE_UNUSED) { DEPRECATED("ignorableWhitespace") } /** * processingInstruction: * @ctx: the user data (XML parser context) * @target: the target name * @data: the PI data's * * A processing instruction has been parsed. * DEPRECATED: use xmlSAX2ProcessingInstruction() */ void processingInstruction(void *ctx, const xmlChar *target, const xmlChar *data) { DEPRECATED("processingInstruction") xmlSAX2ProcessingInstruction(ctx, target, data); } /** * globalNamespace: * @ctx: the user data (XML parser context) * @href: the namespace associated URN * @prefix: the namespace prefix * * An old global namespace has been parsed. * DEPRECATED */ void globalNamespace(void *ctx ATTRIBUTE_UNUSED, const xmlChar *href ATTRIBUTE_UNUSED, const xmlChar *prefix ATTRIBUTE_UNUSED) { DEPRECATED("globalNamespace") } /** * setNamespace: * @ctx: the user data (XML parser context) * @name: the namespace prefix * * Set the current element namespace. * DEPRECATED */ void setNamespace(void *ctx ATTRIBUTE_UNUSED, const xmlChar *name ATTRIBUTE_UNUSED) { DEPRECATED("setNamespace") } /** * getNamespace: * @ctx: the user data (XML parser context) * * Get the current element namespace. * DEPRECATED * * Returns the xmlNsPtr or NULL if none */ xmlNsPtr getNamespace(void *ctx ATTRIBUTE_UNUSED) { DEPRECATED("getNamespace") return(NULL); } /** * checkNamespace: * @ctx: the user data (XML parser context) * @namespace: the namespace to check against * * Check that the current element namespace is the same as the * one read upon parsing. * DEPRECATED * * Returns 1 if true 0 otherwise */ int checkNamespace(void *ctx ATTRIBUTE_UNUSED, xmlChar *namespace ATTRIBUTE_UNUSED) { DEPRECATED("checkNamespace") return(0); } /** * namespaceDecl: * @ctx: the user data (XML parser context) * @href: the namespace associated URN * @prefix: the namespace prefix * * A namespace has been parsed. * DEPRECATED */ void namespaceDecl(void *ctx ATTRIBUTE_UNUSED, const xmlChar *href ATTRIBUTE_UNUSED, const xmlChar *prefix ATTRIBUTE_UNUSED) { DEPRECATED("namespaceDecl") } /** * comment: * @ctx: the user data (XML parser context) * @value: the comment content * * A comment has been parsed. * DEPRECATED: use xmlSAX2Comment() */ void comment(void *ctx, const xmlChar *value) { DEPRECATED("comment") xmlSAX2Comment(ctx, value); } /** * cdataBlock: * @ctx: the user data (XML parser context) * @value: The pcdata content * @len: the block length * * called when a pcdata block has been parsed * DEPRECATED: use xmlSAX2CDataBlock() */ void cdataBlock(void *ctx, const xmlChar *value, int len) { DEPRECATED("cdataBlock") xmlSAX2CDataBlock(ctx, value, len); } /** * initxmlDefaultSAXHandler: * @hdlr: the SAX handler * @warning: flag if non-zero sets the handler warning procedure * * Initialize the default XML SAX version 1 handler * DEPRECATED: use xmlSAX2InitDefaultSAXHandler() for the new SAX2 blocks */ void initxmlDefaultSAXHandler(xmlSAXHandler *hdlr, int warning) { if(hdlr->initialized == 1) return; hdlr->internalSubset = xmlSAX2InternalSubset; hdlr->externalSubset = xmlSAX2ExternalSubset; hdlr->isStandalone = xmlSAX2IsStandalone; hdlr->hasInternalSubset = xmlSAX2HasInternalSubset; hdlr->hasExternalSubset = xmlSAX2HasExternalSubset; hdlr->resolveEntity = xmlSAX2ResolveEntity; hdlr->getEntity = xmlSAX2GetEntity; hdlr->getParameterEntity = xmlSAX2GetParameterEntity; hdlr->entityDecl = xmlSAX2EntityDecl; hdlr->attributeDecl = xmlSAX2AttributeDecl; hdlr->elementDecl = xmlSAX2ElementDecl; hdlr->notationDecl = xmlSAX2NotationDecl; hdlr->unparsedEntityDecl = xmlSAX2UnparsedEntityDecl; hdlr->setDocumentLocator = xmlSAX2SetDocumentLocator; hdlr->startDocument = xmlSAX2StartDocument; hdlr->endDocument = xmlSAX2EndDocument; hdlr->startElement = xmlSAX2StartElement; hdlr->endElement = xmlSAX2EndElement; hdlr->reference = xmlSAX2Reference; hdlr->characters = xmlSAX2Characters; hdlr->cdataBlock = xmlSAX2CDataBlock; hdlr->ignorableWhitespace = xmlSAX2Characters; hdlr->processingInstruction = xmlSAX2ProcessingInstruction; if (warning == 0) hdlr->warning = NULL; else hdlr->warning = xmlParserWarning; hdlr->error = xmlParserError; hdlr->fatalError = xmlParserError; hdlr->initialized = 1; } #ifdef LIBXML_HTML_ENABLED /** * inithtmlDefaultSAXHandler: * @hdlr: the SAX handler * * Initialize the default HTML SAX version 1 handler * DEPRECATED: use xmlSAX2InitHtmlDefaultSAXHandler() for the new SAX2 blocks */ void inithtmlDefaultSAXHandler(xmlSAXHandler *hdlr) { if(hdlr->initialized == 1) return; hdlr->internalSubset = xmlSAX2InternalSubset; hdlr->externalSubset = NULL; hdlr->isStandalone = NULL; hdlr->hasInternalSubset = NULL; hdlr->hasExternalSubset = NULL; hdlr->resolveEntity = NULL; hdlr->getEntity = xmlSAX2GetEntity; hdlr->getParameterEntity = NULL; hdlr->entityDecl = NULL; hdlr->attributeDecl = NULL; hdlr->elementDecl = NULL; hdlr->notationDecl = NULL; hdlr->unparsedEntityDecl = NULL; hdlr->setDocumentLocator = xmlSAX2SetDocumentLocator; hdlr->startDocument = xmlSAX2StartDocument; hdlr->endDocument = xmlSAX2EndDocument; hdlr->startElement = xmlSAX2StartElement; hdlr->endElement = xmlSAX2EndElement; hdlr->reference = NULL; hdlr->characters = xmlSAX2Characters; hdlr->cdataBlock = xmlSAX2CDataBlock; hdlr->ignorableWhitespace = xmlSAX2IgnorableWhitespace; hdlr->processingInstruction = NULL; hdlr->comment = xmlSAX2Comment; hdlr->warning = xmlParserWarning; hdlr->error = xmlParserError; hdlr->fatalError = xmlParserError; hdlr->initialized = 1; } #endif /* LIBXML_HTML_ENABLED */ #ifdef LIBXML_DOCB_ENABLED /** * initdocbDefaultSAXHandler: * @hdlr: the SAX handler * * Initialize the default DocBook SAX version 1 handler * DEPRECATED: use xmlSAX2InitDocbDefaultSAXHandler() for the new SAX2 blocks */ void initdocbDefaultSAXHandler(xmlSAXHandler *hdlr) { if(hdlr->initialized == 1) return; hdlr->internalSubset = xmlSAX2InternalSubset; hdlr->externalSubset = NULL; hdlr->isStandalone = xmlSAX2IsStandalone; hdlr->hasInternalSubset = xmlSAX2HasInternalSubset; hdlr->hasExternalSubset = xmlSAX2HasExternalSubset; hdlr->resolveEntity = xmlSAX2ResolveEntity; hdlr->getEntity = xmlSAX2GetEntity; hdlr->getParameterEntity = NULL; hdlr->entityDecl = xmlSAX2EntityDecl; hdlr->attributeDecl = NULL; hdlr->elementDecl = NULL; hdlr->notationDecl = NULL; hdlr->unparsedEntityDecl = NULL; hdlr->setDocumentLocator = xmlSAX2SetDocumentLocator; hdlr->startDocument = xmlSAX2StartDocument; hdlr->endDocument = xmlSAX2EndDocument; hdlr->startElement = xmlSAX2StartElement; hdlr->endElement = xmlSAX2EndElement; hdlr->reference = xmlSAX2Reference; hdlr->characters = xmlSAX2Characters; hdlr->cdataBlock = NULL; hdlr->ignorableWhitespace = xmlSAX2IgnorableWhitespace; hdlr->processingInstruction = NULL; hdlr->comment = xmlSAX2Comment; hdlr->warning = xmlParserWarning; hdlr->error = xmlParserError; hdlr->fatalError = xmlParserError; hdlr->initialized = 1; } #endif /* LIBXML_DOCB_ENABLED */