Home | History | Annotate | Download | only in libxml2
      1 /*
      2  * legacy.c: set of deprecated routines, not to be used anymore but
      3  *           kept purely for ABI compatibility
      4  *
      5  * See Copyright for the status of this software.
      6  *
      7  * daniel (at) veillard.com
      8  */
      9 
     10 #define IN_LIBXML
     11 #include "libxml.h"
     12 
     13 #ifdef LIBXML_LEGACY_ENABLED
     14 #include <string.h>
     15 
     16 #include <libxml/tree.h>
     17 #include <libxml/entities.h>
     18 #include <libxml/SAX.h>
     19 #include <libxml/parserInternals.h>
     20 #include <libxml/HTMLparser.h>
     21 
     22 void xmlUpgradeOldNs(xmlDocPtr doc);
     23 
     24 /************************************************************************
     25  *									*
     26  *		Deprecated functions kept for compatibility		*
     27  *									*
     28  ************************************************************************/
     29 
     30 #ifdef LIBXML_HTML_ENABLED
     31 xmlChar *htmlDecodeEntities(htmlParserCtxtPtr ctxt, int len, xmlChar end,
     32                             xmlChar end2, xmlChar end3);
     33 
     34 /**
     35  * htmlDecodeEntities:
     36  * @ctxt:  the parser context
     37  * @len:  the len to decode (in bytes !), -1 for no size limit
     38  * @end:  an end marker xmlChar, 0 if none
     39  * @end2:  an end marker xmlChar, 0 if none
     40  * @end3:  an end marker xmlChar, 0 if none
     41  *
     42  * Substitute the HTML entities by their value
     43  *
     44  * DEPRECATED !!!!
     45  *
     46  * Returns A newly allocated string with the substitution done. The caller
     47  *      must deallocate it !
     48  */
     49 xmlChar *
     50 htmlDecodeEntities(htmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
     51                    int len ATTRIBUTE_UNUSED, xmlChar end ATTRIBUTE_UNUSED,
     52                    xmlChar end2 ATTRIBUTE_UNUSED,
     53                    xmlChar end3 ATTRIBUTE_UNUSED)
     54 {
     55     static int deprecated = 0;
     56 
     57     if (!deprecated) {
     58         xmlGenericError(xmlGenericErrorContext,
     59                         "htmlDecodeEntities() deprecated function reached\n");
     60         deprecated = 1;
     61     }
     62     return (NULL);
     63 }
     64 #endif
     65 
     66 /**
     67  * xmlInitializePredefinedEntities:
     68  *
     69  * Set up the predefined entities.
     70  * Deprecated call
     71  */
     72 void
     73 xmlInitializePredefinedEntities(void)
     74 {
     75 }
     76 
     77 /**
     78  * xmlCleanupPredefinedEntities:
     79  *
     80  * Cleanup up the predefined entities table.
     81  * Deprecated call
     82  */
     83 void
     84 xmlCleanupPredefinedEntities(void)
     85 {
     86 }
     87 
     88 static const char *xmlFeaturesList[] = {
     89     "validate",
     90     "load subset",
     91     "keep blanks",
     92     "disable SAX",
     93     "fetch external entities",
     94     "substitute entities",
     95     "gather line info",
     96     "user data",
     97     "is html",
     98     "is standalone",
     99     "stop parser",
    100     "document",
    101     "is well formed",
    102     "is valid",
    103     "SAX block",
    104     "SAX function internalSubset",
    105     "SAX function isStandalone",
    106     "SAX function hasInternalSubset",
    107     "SAX function hasExternalSubset",
    108     "SAX function resolveEntity",
    109     "SAX function getEntity",
    110     "SAX function entityDecl",
    111     "SAX function notationDecl",
    112     "SAX function attributeDecl",
    113     "SAX function elementDecl",
    114     "SAX function unparsedEntityDecl",
    115     "SAX function setDocumentLocator",
    116     "SAX function startDocument",
    117     "SAX function endDocument",
    118     "SAX function startElement",
    119     "SAX function endElement",
    120     "SAX function reference",
    121     "SAX function characters",
    122     "SAX function ignorableWhitespace",
    123     "SAX function processingInstruction",
    124     "SAX function comment",
    125     "SAX function warning",
    126     "SAX function error",
    127     "SAX function fatalError",
    128     "SAX function getParameterEntity",
    129     "SAX function cdataBlock",
    130     "SAX function externalSubset",
    131 };
    132 
    133 /**
    134  * xmlGetFeaturesList:
    135  * @len:  the length of the features name array (input/output)
    136  * @result:  an array of string to be filled with the features name.
    137  *
    138  * Copy at most *@len feature names into the @result array
    139  *
    140  * Returns -1 in case or error, or the total number of features,
    141  *            len is updated with the number of strings copied,
    142  *            strings must not be deallocated
    143  */
    144 int
    145 xmlGetFeaturesList(int *len, const char **result)
    146 {
    147     int ret, i;
    148 
    149     ret = sizeof(xmlFeaturesList) / sizeof(xmlFeaturesList[0]);
    150     if ((len == NULL) || (result == NULL))
    151         return (ret);
    152     if ((*len < 0) || (*len >= 1000))
    153         return (-1);
    154     if (*len > ret)
    155         *len = ret;
    156     for (i = 0; i < *len; i++)
    157         result[i] = xmlFeaturesList[i];
    158     return (ret);
    159 }
    160 
    161 /**
    162  * xmlGetFeature:
    163  * @ctxt:  an XML/HTML parser context
    164  * @name:  the feature name
    165  * @result:  location to store the result
    166  *
    167  * Read the current value of one feature of this parser instance
    168  *
    169  * Returns -1 in case or error, 0 otherwise
    170  */
    171 int
    172 xmlGetFeature(xmlParserCtxtPtr ctxt, const char *name, void *result)
    173 {
    174     if ((ctxt == NULL) || (name == NULL) || (result == NULL))
    175         return (-1);
    176 
    177     if (!strcmp(name, "validate")) {
    178         *((int *) result) = ctxt->validate;
    179     } else if (!strcmp(name, "keep blanks")) {
    180         *((int *) result) = ctxt->keepBlanks;
    181     } else if (!strcmp(name, "disable SAX")) {
    182         *((int *) result) = ctxt->disableSAX;
    183     } else if (!strcmp(name, "fetch external entities")) {
    184         *((int *) result) = ctxt->loadsubset;
    185     } else if (!strcmp(name, "substitute entities")) {
    186         *((int *) result) = ctxt->replaceEntities;
    187     } else if (!strcmp(name, "gather line info")) {
    188         *((int *) result) = ctxt->record_info;
    189     } else if (!strcmp(name, "user data")) {
    190         *((void **) result) = ctxt->userData;
    191     } else if (!strcmp(name, "is html")) {
    192         *((int *) result) = ctxt->html;
    193     } else if (!strcmp(name, "is standalone")) {
    194         *((int *) result) = ctxt->standalone;
    195     } else if (!strcmp(name, "document")) {
    196         *((xmlDocPtr *) result) = ctxt->myDoc;
    197     } else if (!strcmp(name, "is well formed")) {
    198         *((int *) result) = ctxt->wellFormed;
    199     } else if (!strcmp(name, "is valid")) {
    200         *((int *) result) = ctxt->valid;
    201     } else if (!strcmp(name, "SAX block")) {
    202         *((xmlSAXHandlerPtr *) result) = ctxt->sax;
    203     } else if (!strcmp(name, "SAX function internalSubset")) {
    204         *((internalSubsetSAXFunc *) result) = ctxt->sax->internalSubset;
    205     } else if (!strcmp(name, "SAX function isStandalone")) {
    206         *((isStandaloneSAXFunc *) result) = ctxt->sax->isStandalone;
    207     } else if (!strcmp(name, "SAX function hasInternalSubset")) {
    208         *((hasInternalSubsetSAXFunc *) result) =
    209             ctxt->sax->hasInternalSubset;
    210     } else if (!strcmp(name, "SAX function hasExternalSubset")) {
    211         *((hasExternalSubsetSAXFunc *) result) =
    212             ctxt->sax->hasExternalSubset;
    213     } else if (!strcmp(name, "SAX function resolveEntity")) {
    214         *((resolveEntitySAXFunc *) result) = ctxt->sax->resolveEntity;
    215     } else if (!strcmp(name, "SAX function getEntity")) {
    216         *((getEntitySAXFunc *) result) = ctxt->sax->getEntity;
    217     } else if (!strcmp(name, "SAX function entityDecl")) {
    218         *((entityDeclSAXFunc *) result) = ctxt->sax->entityDecl;
    219     } else if (!strcmp(name, "SAX function notationDecl")) {
    220         *((notationDeclSAXFunc *) result) = ctxt->sax->notationDecl;
    221     } else if (!strcmp(name, "SAX function attributeDecl")) {
    222         *((attributeDeclSAXFunc *) result) = ctxt->sax->attributeDecl;
    223     } else if (!strcmp(name, "SAX function elementDecl")) {
    224         *((elementDeclSAXFunc *) result) = ctxt->sax->elementDecl;
    225     } else if (!strcmp(name, "SAX function unparsedEntityDecl")) {
    226         *((unparsedEntityDeclSAXFunc *) result) =
    227             ctxt->sax->unparsedEntityDecl;
    228     } else if (!strcmp(name, "SAX function setDocumentLocator")) {
    229         *((setDocumentLocatorSAXFunc *) result) =
    230             ctxt->sax->setDocumentLocator;
    231     } else if (!strcmp(name, "SAX function startDocument")) {
    232         *((startDocumentSAXFunc *) result) = ctxt->sax->startDocument;
    233     } else if (!strcmp(name, "SAX function endDocument")) {
    234         *((endDocumentSAXFunc *) result) = ctxt->sax->endDocument;
    235     } else if (!strcmp(name, "SAX function startElement")) {
    236         *((startElementSAXFunc *) result) = ctxt->sax->startElement;
    237     } else if (!strcmp(name, "SAX function endElement")) {
    238         *((endElementSAXFunc *) result) = ctxt->sax->endElement;
    239     } else if (!strcmp(name, "SAX function reference")) {
    240         *((referenceSAXFunc *) result) = ctxt->sax->reference;
    241     } else if (!strcmp(name, "SAX function characters")) {
    242         *((charactersSAXFunc *) result) = ctxt->sax->characters;
    243     } else if (!strcmp(name, "SAX function ignorableWhitespace")) {
    244         *((ignorableWhitespaceSAXFunc *) result) =
    245             ctxt->sax->ignorableWhitespace;
    246     } else if (!strcmp(name, "SAX function processingInstruction")) {
    247         *((processingInstructionSAXFunc *) result) =
    248             ctxt->sax->processingInstruction;
    249     } else if (!strcmp(name, "SAX function comment")) {
    250         *((commentSAXFunc *) result) = ctxt->sax->comment;
    251     } else if (!strcmp(name, "SAX function warning")) {
    252         *((warningSAXFunc *) result) = ctxt->sax->warning;
    253     } else if (!strcmp(name, "SAX function error")) {
    254         *((errorSAXFunc *) result) = ctxt->sax->error;
    255     } else if (!strcmp(name, "SAX function fatalError")) {
    256         *((fatalErrorSAXFunc *) result) = ctxt->sax->fatalError;
    257     } else if (!strcmp(name, "SAX function getParameterEntity")) {
    258         *((getParameterEntitySAXFunc *) result) =
    259             ctxt->sax->getParameterEntity;
    260     } else if (!strcmp(name, "SAX function cdataBlock")) {
    261         *((cdataBlockSAXFunc *) result) = ctxt->sax->cdataBlock;
    262     } else if (!strcmp(name, "SAX function externalSubset")) {
    263         *((externalSubsetSAXFunc *) result) = ctxt->sax->externalSubset;
    264     } else {
    265         return (-1);
    266     }
    267     return (0);
    268 }
    269 
    270 /**
    271  * xmlSetFeature:
    272  * @ctxt:  an XML/HTML parser context
    273  * @name:  the feature name
    274  * @value:  pointer to the location of the new value
    275  *
    276  * Change the current value of one feature of this parser instance
    277  *
    278  * Returns -1 in case or error, 0 otherwise
    279  */
    280 int
    281 xmlSetFeature(xmlParserCtxtPtr ctxt, const char *name, void *value)
    282 {
    283     if ((ctxt == NULL) || (name == NULL) || (value == NULL))
    284         return (-1);
    285 
    286     if (!strcmp(name, "validate")) {
    287         int newvalidate = *((int *) value);
    288 
    289         if ((!ctxt->validate) && (newvalidate != 0)) {
    290             if (ctxt->vctxt.warning == NULL)
    291                 ctxt->vctxt.warning = xmlParserValidityWarning;
    292             if (ctxt->vctxt.error == NULL)
    293                 ctxt->vctxt.error = xmlParserValidityError;
    294             ctxt->vctxt.nodeMax = 0;
    295         }
    296         ctxt->validate = newvalidate;
    297     } else if (!strcmp(name, "keep blanks")) {
    298         ctxt->keepBlanks = *((int *) value);
    299     } else if (!strcmp(name, "disable SAX")) {
    300         ctxt->disableSAX = *((int *) value);
    301     } else if (!strcmp(name, "fetch external entities")) {
    302         ctxt->loadsubset = *((int *) value);
    303     } else if (!strcmp(name, "substitute entities")) {
    304         ctxt->replaceEntities = *((int *) value);
    305     } else if (!strcmp(name, "gather line info")) {
    306         ctxt->record_info = *((int *) value);
    307     } else if (!strcmp(name, "user data")) {
    308         ctxt->userData = *((void **) value);
    309     } else if (!strcmp(name, "is html")) {
    310         ctxt->html = *((int *) value);
    311     } else if (!strcmp(name, "is standalone")) {
    312         ctxt->standalone = *((int *) value);
    313     } else if (!strcmp(name, "document")) {
    314         ctxt->myDoc = *((xmlDocPtr *) value);
    315     } else if (!strcmp(name, "is well formed")) {
    316         ctxt->wellFormed = *((int *) value);
    317     } else if (!strcmp(name, "is valid")) {
    318         ctxt->valid = *((int *) value);
    319     } else if (!strcmp(name, "SAX block")) {
    320         ctxt->sax = *((xmlSAXHandlerPtr *) value);
    321     } else if (!strcmp(name, "SAX function internalSubset")) {
    322         ctxt->sax->internalSubset = *((internalSubsetSAXFunc *) value);
    323     } else if (!strcmp(name, "SAX function isStandalone")) {
    324         ctxt->sax->isStandalone = *((isStandaloneSAXFunc *) value);
    325     } else if (!strcmp(name, "SAX function hasInternalSubset")) {
    326         ctxt->sax->hasInternalSubset =
    327             *((hasInternalSubsetSAXFunc *) value);
    328     } else if (!strcmp(name, "SAX function hasExternalSubset")) {
    329         ctxt->sax->hasExternalSubset =
    330             *((hasExternalSubsetSAXFunc *) value);
    331     } else if (!strcmp(name, "SAX function resolveEntity")) {
    332         ctxt->sax->resolveEntity = *((resolveEntitySAXFunc *) value);
    333     } else if (!strcmp(name, "SAX function getEntity")) {
    334         ctxt->sax->getEntity = *((getEntitySAXFunc *) value);
    335     } else if (!strcmp(name, "SAX function entityDecl")) {
    336         ctxt->sax->entityDecl = *((entityDeclSAXFunc *) value);
    337     } else if (!strcmp(name, "SAX function notationDecl")) {
    338         ctxt->sax->notationDecl = *((notationDeclSAXFunc *) value);
    339     } else if (!strcmp(name, "SAX function attributeDecl")) {
    340         ctxt->sax->attributeDecl = *((attributeDeclSAXFunc *) value);
    341     } else if (!strcmp(name, "SAX function elementDecl")) {
    342         ctxt->sax->elementDecl = *((elementDeclSAXFunc *) value);
    343     } else if (!strcmp(name, "SAX function unparsedEntityDecl")) {
    344         ctxt->sax->unparsedEntityDecl =
    345             *((unparsedEntityDeclSAXFunc *) value);
    346     } else if (!strcmp(name, "SAX function setDocumentLocator")) {
    347         ctxt->sax->setDocumentLocator =
    348             *((setDocumentLocatorSAXFunc *) value);
    349     } else if (!strcmp(name, "SAX function startDocument")) {
    350         ctxt->sax->startDocument = *((startDocumentSAXFunc *) value);
    351     } else if (!strcmp(name, "SAX function endDocument")) {
    352         ctxt->sax->endDocument = *((endDocumentSAXFunc *) value);
    353     } else if (!strcmp(name, "SAX function startElement")) {
    354         ctxt->sax->startElement = *((startElementSAXFunc *) value);
    355     } else if (!strcmp(name, "SAX function endElement")) {
    356         ctxt->sax->endElement = *((endElementSAXFunc *) value);
    357     } else if (!strcmp(name, "SAX function reference")) {
    358         ctxt->sax->reference = *((referenceSAXFunc *) value);
    359     } else if (!strcmp(name, "SAX function characters")) {
    360         ctxt->sax->characters = *((charactersSAXFunc *) value);
    361     } else if (!strcmp(name, "SAX function ignorableWhitespace")) {
    362         ctxt->sax->ignorableWhitespace =
    363             *((ignorableWhitespaceSAXFunc *) value);
    364     } else if (!strcmp(name, "SAX function processingInstruction")) {
    365         ctxt->sax->processingInstruction =
    366             *((processingInstructionSAXFunc *) value);
    367     } else if (!strcmp(name, "SAX function comment")) {
    368         ctxt->sax->comment = *((commentSAXFunc *) value);
    369     } else if (!strcmp(name, "SAX function warning")) {
    370         ctxt->sax->warning = *((warningSAXFunc *) value);
    371     } else if (!strcmp(name, "SAX function error")) {
    372         ctxt->sax->error = *((errorSAXFunc *) value);
    373     } else if (!strcmp(name, "SAX function fatalError")) {
    374         ctxt->sax->fatalError = *((fatalErrorSAXFunc *) value);
    375     } else if (!strcmp(name, "SAX function getParameterEntity")) {
    376         ctxt->sax->getParameterEntity =
    377             *((getParameterEntitySAXFunc *) value);
    378     } else if (!strcmp(name, "SAX function cdataBlock")) {
    379         ctxt->sax->cdataBlock = *((cdataBlockSAXFunc *) value);
    380     } else if (!strcmp(name, "SAX function externalSubset")) {
    381         ctxt->sax->externalSubset = *((externalSubsetSAXFunc *) value);
    382     } else {
    383         return (-1);
    384     }
    385     return (0);
    386 }
    387 
    388 /**
    389  * xmlDecodeEntities:
    390  * @ctxt:  the parser context
    391  * @len:  the len to decode (in bytes !), -1 for no size limit
    392  * @what:  combination of XML_SUBSTITUTE_REF and XML_SUBSTITUTE_PEREF
    393  * @end:  an end marker xmlChar, 0 if none
    394  * @end2:  an end marker xmlChar, 0 if none
    395  * @end3:  an end marker xmlChar, 0 if none
    396  *
    397  * This function is deprecated, we now always process entities content
    398  * through xmlStringDecodeEntities
    399  *
    400  * TODO: remove it in next major release.
    401  *
    402  * [67] Reference ::= EntityRef | CharRef
    403  *
    404  * [69] PEReference ::= '%' Name ';'
    405  *
    406  * Returns A newly allocated string with the substitution done. The caller
    407  *      must deallocate it !
    408  */
    409 xmlChar *
    410 xmlDecodeEntities(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
    411                   int len ATTRIBUTE_UNUSED, int what ATTRIBUTE_UNUSED,
    412                   xmlChar end ATTRIBUTE_UNUSED,
    413                   xmlChar end2 ATTRIBUTE_UNUSED,
    414                   xmlChar end3 ATTRIBUTE_UNUSED)
    415 {
    416     static int deprecated = 0;
    417 
    418     if (!deprecated) {
    419         xmlGenericError(xmlGenericErrorContext,
    420                         "xmlDecodeEntities() deprecated function reached\n");
    421         deprecated = 1;
    422     }
    423     return (NULL);
    424 }
    425 
    426 /**
    427  * xmlNamespaceParseNCName:
    428  * @ctxt:  an XML parser context
    429  *
    430  * parse an XML namespace name.
    431  *
    432  * TODO: this seems not in use anymore, the namespace handling is done on
    433  *       top of the SAX interfaces, i.e. not on raw input.
    434  *
    435  * [NS 3] NCName ::= (Letter | '_') (NCNameChar)*
    436  *
    437  * [NS 4] NCNameChar ::= Letter | Digit | '.' | '-' | '_' |
    438  *                       CombiningChar | Extender
    439  *
    440  * Returns the namespace name or NULL
    441  */
    442 
    443 xmlChar *
    444 xmlNamespaceParseNCName(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
    445 {
    446     static int deprecated = 0;
    447 
    448     if (!deprecated) {
    449         xmlGenericError(xmlGenericErrorContext,
    450                         "xmlNamespaceParseNCName() deprecated function reached\n");
    451         deprecated = 1;
    452     }
    453     return (NULL);
    454 }
    455 
    456 /**
    457  * xmlNamespaceParseQName:
    458  * @ctxt:  an XML parser context
    459  * @prefix:  a xmlChar **
    460  *
    461  * TODO: this seems not in use anymore, the namespace handling is done on
    462  *       top of the SAX interfaces, i.e. not on raw input.
    463  *
    464  * parse an XML qualified name
    465  *
    466  * [NS 5] QName ::= (Prefix ':')? LocalPart
    467  *
    468  * [NS 6] Prefix ::= NCName
    469  *
    470  * [NS 7] LocalPart ::= NCName
    471  *
    472  * Returns the local part, and prefix is updated
    473  *   to get the Prefix if any.
    474  */
    475 
    476 xmlChar *
    477 xmlNamespaceParseQName(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
    478                        xmlChar ** prefix ATTRIBUTE_UNUSED)
    479 {
    480 
    481     static int deprecated = 0;
    482 
    483     if (!deprecated) {
    484         xmlGenericError(xmlGenericErrorContext,
    485                         "xmlNamespaceParseQName() deprecated function reached\n");
    486         deprecated = 1;
    487     }
    488     return (NULL);
    489 }
    490 
    491 /**
    492  * xmlNamespaceParseNSDef:
    493  * @ctxt:  an XML parser context
    494  *
    495  * parse a namespace prefix declaration
    496  *
    497  * TODO: this seems not in use anymore, the namespace handling is done on
    498  *       top of the SAX interfaces, i.e. not on raw input.
    499  *
    500  * [NS 1] NSDef ::= PrefixDef Eq SystemLiteral
    501  *
    502  * [NS 2] PrefixDef ::= 'xmlns' (':' NCName)?
    503  *
    504  * Returns the namespace name
    505  */
    506 
    507 xmlChar *
    508 xmlNamespaceParseNSDef(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
    509 {
    510     static int deprecated = 0;
    511 
    512     if (!deprecated) {
    513         xmlGenericError(xmlGenericErrorContext,
    514                         "xmlNamespaceParseNSDef() deprecated function reached\n");
    515         deprecated = 1;
    516     }
    517     return (NULL);
    518 }
    519 
    520 /**
    521  * xmlParseQuotedString:
    522  * @ctxt:  an XML parser context
    523  *
    524  * Parse and return a string between quotes or doublequotes
    525  *
    526  * TODO: Deprecated, to  be removed at next drop of binary compatibility
    527  *
    528  * Returns the string parser or NULL.
    529  */
    530 xmlChar *
    531 xmlParseQuotedString(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
    532 {
    533     static int deprecated = 0;
    534 
    535     if (!deprecated) {
    536         xmlGenericError(xmlGenericErrorContext,
    537                         "xmlParseQuotedString() deprecated function reached\n");
    538         deprecated = 1;
    539     }
    540     return (NULL);
    541 }
    542 
    543 /**
    544  * xmlParseNamespace:
    545  * @ctxt:  an XML parser context
    546  *
    547  * xmlParseNamespace: parse specific PI '<?namespace ...' constructs.
    548  *
    549  * This is what the older xml-name Working Draft specified, a bunch of
    550  * other stuff may still rely on it, so support is still here as
    551  * if it was declared on the root of the Tree:-(
    552  *
    553  * TODO: remove from library
    554  *
    555  * To be removed at next drop of binary compatibility
    556  */
    557 
    558 void
    559 xmlParseNamespace(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
    560 {
    561     static int deprecated = 0;
    562 
    563     if (!deprecated) {
    564         xmlGenericError(xmlGenericErrorContext,
    565                         "xmlParseNamespace() deprecated function reached\n");
    566         deprecated = 1;
    567     }
    568 }
    569 
    570 /**
    571  * xmlScanName:
    572  * @ctxt:  an XML parser context
    573  *
    574  * Trickery: parse an XML name but without consuming the input flow
    575  * Needed for rollback cases. Used only when parsing entities references.
    576  *
    577  * TODO: seems deprecated now, only used in the default part of
    578  *       xmlParserHandleReference
    579  *
    580  * [4] NameChar ::= Letter | Digit | '.' | '-' | '_' | ':' |
    581  *                  CombiningChar | Extender
    582  *
    583  * [5] Name ::= (Letter | '_' | ':') (NameChar)*
    584  *
    585  * [6] Names ::= Name (S Name)*
    586  *
    587  * Returns the Name parsed or NULL
    588  */
    589 
    590 xmlChar *
    591 xmlScanName(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
    592 {
    593     static int deprecated = 0;
    594 
    595     if (!deprecated) {
    596         xmlGenericError(xmlGenericErrorContext,
    597                         "xmlScanName() deprecated function reached\n");
    598         deprecated = 1;
    599     }
    600     return (NULL);
    601 }
    602 
    603 /**
    604  * xmlParserHandleReference:
    605  * @ctxt:  the parser context
    606  *
    607  * TODO: Remove, now deprecated ... the test is done directly in the
    608  *       content parsing
    609  * routines.
    610  *
    611  * [67] Reference ::= EntityRef | CharRef
    612  *
    613  * [68] EntityRef ::= '&' Name ';'
    614  *
    615  * [ WFC: Entity Declared ]
    616  * the Name given in the entity reference must match that in an entity
    617  * declaration, except that well-formed documents need not declare any
    618  * of the following entities: amp, lt, gt, apos, quot.
    619  *
    620  * [ WFC: Parsed Entity ]
    621  * An entity reference must not contain the name of an unparsed entity
    622  *
    623  * [66] CharRef ::= '&#' [0-9]+ ';' |
    624  *                  '&#x' [0-9a-fA-F]+ ';'
    625  *
    626  * A PEReference may have been detected in the current input stream
    627  * the handling is done accordingly to
    628  *      http://www.w3.org/TR/REC-xml#entproc
    629  */
    630 void
    631 xmlParserHandleReference(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED)
    632 {
    633     static int deprecated = 0;
    634 
    635     if (!deprecated) {
    636         xmlGenericError(xmlGenericErrorContext,
    637                         "xmlParserHandleReference() deprecated function reached\n");
    638         deprecated = 1;
    639     }
    640 
    641     return;
    642 }
    643 
    644 /**
    645  * xmlHandleEntity:
    646  * @ctxt:  an XML parser context
    647  * @entity:  an XML entity pointer.
    648  *
    649  * Default handling of defined entities, when should we define a new input
    650  * stream ? When do we just handle that as a set of chars ?
    651  *
    652  * OBSOLETE: to be removed at some point.
    653  */
    654 
    655 void
    656 xmlHandleEntity(xmlParserCtxtPtr ctxt ATTRIBUTE_UNUSED,
    657                 xmlEntityPtr entity ATTRIBUTE_UNUSED)
    658 {
    659     static int deprecated = 0;
    660 
    661     if (!deprecated) {
    662         xmlGenericError(xmlGenericErrorContext,
    663                         "xmlHandleEntity() deprecated function reached\n");
    664         deprecated = 1;
    665     }
    666 }
    667 
    668 /**
    669  * xmlNewGlobalNs:
    670  * @doc:  the document carrying the namespace
    671  * @href:  the URI associated
    672  * @prefix:  the prefix for the namespace
    673  *
    674  * Creation of a Namespace, the old way using PI and without scoping
    675  *   DEPRECATED !!!
    676  * Returns NULL this functionality had been removed
    677  */
    678 xmlNsPtr
    679 xmlNewGlobalNs(xmlDocPtr doc ATTRIBUTE_UNUSED,
    680                const xmlChar * href ATTRIBUTE_UNUSED,
    681                const xmlChar * prefix ATTRIBUTE_UNUSED)
    682 {
    683     static int deprecated = 0;
    684 
    685     if (!deprecated) {
    686         xmlGenericError(xmlGenericErrorContext,
    687                         "xmlNewGlobalNs() deprecated function reached\n");
    688         deprecated = 1;
    689     }
    690     return (NULL);
    691 }
    692 
    693 /**
    694  * xmlUpgradeOldNs:
    695  * @doc:  a document pointer
    696  *
    697  * Upgrade old style Namespaces (PI) and move them to the root of the document.
    698  * DEPRECATED
    699  */
    700 void
    701 xmlUpgradeOldNs(xmlDocPtr doc ATTRIBUTE_UNUSED)
    702 {
    703     static int deprecated = 0;
    704 
    705     if (!deprecated) {
    706         xmlGenericError(xmlGenericErrorContext,
    707                         "xmlUpgradeOldNs() deprecated function reached\n");
    708         deprecated = 1;
    709     }
    710 }
    711 
    712 /**
    713  * xmlEncodeEntities:
    714  * @doc:  the document containing the string
    715  * @input:  A string to convert to XML.
    716  *
    717  * TODO: remove xmlEncodeEntities, once we are not afraid of breaking binary
    718  *       compatibility
    719  *
    720  * People must migrate their code to xmlEncodeEntitiesReentrant !
    721  * This routine will issue a warning when encountered.
    722  *
    723  * Returns NULL
    724  */
    725 const xmlChar *
    726 xmlEncodeEntities(xmlDocPtr doc ATTRIBUTE_UNUSED,
    727                   const xmlChar * input ATTRIBUTE_UNUSED)
    728 {
    729     static int warning = 1;
    730 
    731     if (warning) {
    732         xmlGenericError(xmlGenericErrorContext,
    733                         "Deprecated API xmlEncodeEntities() used\n");
    734         xmlGenericError(xmlGenericErrorContext,
    735                         "   change code to use xmlEncodeEntitiesReentrant()\n");
    736         warning = 0;
    737     }
    738     return (NULL);
    739 }
    740 
    741 /************************************************************************
    742  *									*
    743  *		Old set of SAXv1 functions				*
    744  *									*
    745  ************************************************************************/
    746 static int deprecated_v1_msg = 0;
    747 
    748 #define DEPRECATED(n)						\
    749     if (deprecated_v1_msg == 0)					\
    750 	xmlGenericError(xmlGenericErrorContext,			\
    751 	  "Use of deprecated SAXv1 function %s\n", n);		\
    752     deprecated_v1_msg++;
    753 
    754 /**
    755  * getPublicId:
    756  * @ctx: the user data (XML parser context)
    757  *
    758  * Provides the public ID e.g. "-//SGMLSOURCE//DTD DEMO//EN"
    759  * DEPRECATED: use xmlSAX2GetPublicId()
    760  *
    761  * Returns a xmlChar *
    762  */
    763 const xmlChar *
    764 getPublicId(void *ctx)
    765 {
    766     DEPRECATED("getPublicId")
    767         return (xmlSAX2GetPublicId(ctx));
    768 }
    769 
    770 /**
    771  * getSystemId:
    772  * @ctx: the user data (XML parser context)
    773  *
    774  * Provides the system ID, basically URL or filename e.g.
    775  * http://www.sgmlsource.com/dtds/memo.dtd
    776  * DEPRECATED: use xmlSAX2GetSystemId()
    777  *
    778  * Returns a xmlChar *
    779  */
    780 const xmlChar *
    781 getSystemId(void *ctx)
    782 {
    783     DEPRECATED("getSystemId")
    784         return (xmlSAX2GetSystemId(ctx));
    785 }
    786 
    787 /**
    788  * getLineNumber:
    789  * @ctx: the user data (XML parser context)
    790  *
    791  * Provide the line number of the current parsing point.
    792  * DEPRECATED: use xmlSAX2GetLineNumber()
    793  *
    794  * Returns an int
    795  */
    796 int
    797 getLineNumber(void *ctx)
    798 {
    799     DEPRECATED("getLineNumber")
    800         return (xmlSAX2GetLineNumber(ctx));
    801 }
    802 
    803 /**
    804  * getColumnNumber:
    805  * @ctx: the user data (XML parser context)
    806  *
    807  * Provide the column number of the current parsing point.
    808  * DEPRECATED: use xmlSAX2GetColumnNumber()
    809  *
    810  * Returns an int
    811  */
    812 int
    813 getColumnNumber(void *ctx)
    814 {
    815     DEPRECATED("getColumnNumber")
    816         return (xmlSAX2GetColumnNumber(ctx));
    817 }
    818 
    819 /**
    820  * isStandalone:
    821  * @ctx: the user data (XML parser context)
    822  *
    823  * Is this document tagged standalone ?
    824  * DEPRECATED: use xmlSAX2IsStandalone()
    825  *
    826  * Returns 1 if true
    827  */
    828 int
    829 isStandalone(void *ctx)
    830 {
    831     DEPRECATED("isStandalone")
    832         return (xmlSAX2IsStandalone(ctx));
    833 }
    834 
    835 /**
    836  * hasInternalSubset:
    837  * @ctx: the user data (XML parser context)
    838  *
    839  * Does this document has an internal subset
    840  * DEPRECATED: use xmlSAX2HasInternalSubset()
    841  *
    842  * Returns 1 if true
    843  */
    844 int
    845 hasInternalSubset(void *ctx)
    846 {
    847     DEPRECATED("hasInternalSubset")
    848         return (xmlSAX2HasInternalSubset(ctx));
    849 }
    850 
    851 /**
    852  * hasExternalSubset:
    853  * @ctx: the user data (XML parser context)
    854  *
    855  * Does this document has an external subset
    856  * DEPRECATED: use xmlSAX2HasExternalSubset()
    857  *
    858  * Returns 1 if true
    859  */
    860 int
    861 hasExternalSubset(void *ctx)
    862 {
    863     DEPRECATED("hasExternalSubset")
    864         return (xmlSAX2HasExternalSubset(ctx));
    865 }
    866 
    867 /**
    868  * internalSubset:
    869  * @ctx:  the user data (XML parser context)
    870  * @name:  the root element name
    871  * @ExternalID:  the external ID
    872  * @SystemID:  the SYSTEM ID (e.g. filename or URL)
    873  *
    874  * Callback on internal subset declaration.
    875  * DEPRECATED: use xmlSAX2InternalSubset()
    876  */
    877 void
    878 internalSubset(void *ctx, const xmlChar * name,
    879                const xmlChar * ExternalID, const xmlChar * SystemID)
    880 {
    881     DEPRECATED("internalSubset")
    882         xmlSAX2InternalSubset(ctx, name, ExternalID, SystemID);
    883 }
    884 
    885 /**
    886  * externalSubset:
    887  * @ctx: the user data (XML parser context)
    888  * @name:  the root element name
    889  * @ExternalID:  the external ID
    890  * @SystemID:  the SYSTEM ID (e.g. filename or URL)
    891  *
    892  * Callback on external subset declaration.
    893  * DEPRECATED: use xmlSAX2ExternalSubset()
    894  */
    895 void
    896 externalSubset(void *ctx, const xmlChar * name,
    897                const xmlChar * ExternalID, const xmlChar * SystemID)
    898 {
    899     DEPRECATED("externalSubset")
    900         xmlSAX2ExternalSubset(ctx, name, ExternalID, SystemID);
    901 }
    902 
    903 /**
    904  * resolveEntity:
    905  * @ctx: the user data (XML parser context)
    906  * @publicId: The public ID of the entity
    907  * @systemId: The system ID of the entity
    908  *
    909  * The entity loader, to control the loading of external entities,
    910  * the application can either:
    911  *    - override this resolveEntity() callback in the SAX block
    912  *    - or better use the xmlSetExternalEntityLoader() function to
    913  *      set up it's own entity resolution routine
    914  * DEPRECATED: use xmlSAX2ResolveEntity()
    915  *
    916  * Returns the xmlParserInputPtr if inlined or NULL for DOM behaviour.
    917  */
    918 xmlParserInputPtr
    919 resolveEntity(void *ctx, const xmlChar * publicId,
    920               const xmlChar * systemId)
    921 {
    922     DEPRECATED("resolveEntity")
    923         return (xmlSAX2ResolveEntity(ctx, publicId, systemId));
    924 }
    925 
    926 /**
    927  * getEntity:
    928  * @ctx: the user data (XML parser context)
    929  * @name: The entity name
    930  *
    931  * Get an entity by name
    932  * DEPRECATED: use xmlSAX2GetEntity()
    933  *
    934  * Returns the xmlEntityPtr if found.
    935  */
    936 xmlEntityPtr
    937 getEntity(void *ctx, const xmlChar * name)
    938 {
    939     DEPRECATED("getEntity")
    940         return (xmlSAX2GetEntity(ctx, name));
    941 }
    942 
    943 /**
    944  * getParameterEntity:
    945  * @ctx: the user data (XML parser context)
    946  * @name: The entity name
    947  *
    948  * Get a parameter entity by name
    949  * DEPRECATED: use xmlSAX2GetParameterEntity()
    950  *
    951  * Returns the xmlEntityPtr if found.
    952  */
    953 xmlEntityPtr
    954 getParameterEntity(void *ctx, const xmlChar * name)
    955 {
    956     DEPRECATED("getParameterEntity")
    957         return (xmlSAX2GetParameterEntity(ctx, name));
    958 }
    959 
    960 
    961 /**
    962  * entityDecl:
    963  * @ctx: the user data (XML parser context)
    964  * @name:  the entity name
    965  * @type:  the entity type
    966  * @publicId: The public ID of the entity
    967  * @systemId: The system ID of the entity
    968  * @content: the entity value (without processing).
    969  *
    970  * An entity definition has been parsed
    971  * DEPRECATED: use xmlSAX2EntityDecl()
    972  */
    973 void
    974 entityDecl(void *ctx, const xmlChar * name, int type,
    975            const xmlChar * publicId, const xmlChar * systemId,
    976            xmlChar * content)
    977 {
    978     DEPRECATED("entityDecl")
    979         xmlSAX2EntityDecl(ctx, name, type, publicId, systemId, content);
    980 }
    981 
    982 /**
    983  * attributeDecl:
    984  * @ctx: the user data (XML parser context)
    985  * @elem:  the name of the element
    986  * @fullname:  the attribute name
    987  * @type:  the attribute type
    988  * @def:  the type of default value
    989  * @defaultValue: the attribute default value
    990  * @tree:  the tree of enumerated value set
    991  *
    992  * An attribute definition has been parsed
    993  * DEPRECATED: use xmlSAX2AttributeDecl()
    994  */
    995 void
    996 attributeDecl(void *ctx, const xmlChar * elem, const xmlChar * fullname,
    997               int type, int def, const xmlChar * defaultValue,
    998               xmlEnumerationPtr tree)
    999 {
   1000     DEPRECATED("attributeDecl")
   1001         xmlSAX2AttributeDecl(ctx, elem, fullname, type, def, defaultValue,
   1002                              tree);
   1003 }
   1004 
   1005 /**
   1006  * elementDecl:
   1007  * @ctx: the user data (XML parser context)
   1008  * @name:  the element name
   1009  * @type:  the element type
   1010  * @content: the element value tree
   1011  *
   1012  * An element definition has been parsed
   1013  * DEPRECATED: use xmlSAX2ElementDecl()
   1014  */
   1015 void
   1016 elementDecl(void *ctx, const xmlChar * name, int type,
   1017             xmlElementContentPtr content)
   1018 {
   1019     DEPRECATED("elementDecl")
   1020         xmlSAX2ElementDecl(ctx, name, type, content);
   1021 }
   1022 
   1023 /**
   1024  * notationDecl:
   1025  * @ctx: the user data (XML parser context)
   1026  * @name: The name of the notation
   1027  * @publicId: The public ID of the entity
   1028  * @systemId: The system ID of the entity
   1029  *
   1030  * What to do when a notation declaration has been parsed.
   1031  * DEPRECATED: use xmlSAX2NotationDecl()
   1032  */
   1033 void
   1034 notationDecl(void *ctx, const xmlChar * name,
   1035              const xmlChar * publicId, const xmlChar * systemId)
   1036 {
   1037     DEPRECATED("notationDecl")
   1038         xmlSAX2NotationDecl(ctx, name, publicId, systemId);
   1039 }
   1040 
   1041 /**
   1042  * unparsedEntityDecl:
   1043  * @ctx: the user data (XML parser context)
   1044  * @name: The name of the entity
   1045  * @publicId: The public ID of the entity
   1046  * @systemId: The system ID of the entity
   1047  * @notationName: the name of the notation
   1048  *
   1049  * What to do when an unparsed entity declaration is parsed
   1050  * DEPRECATED: use xmlSAX2UnparsedEntityDecl()
   1051  */
   1052 void
   1053 unparsedEntityDecl(void *ctx, const xmlChar * name,
   1054                    const xmlChar * publicId, const xmlChar * systemId,
   1055                    const xmlChar * notationName)
   1056 {
   1057     DEPRECATED("unparsedEntityDecl")
   1058         xmlSAX2UnparsedEntityDecl(ctx, name, publicId, systemId,
   1059                                   notationName);
   1060 }
   1061 
   1062 /**
   1063  * setDocumentLocator:
   1064  * @ctx: the user data (XML parser context)
   1065  * @loc: A SAX Locator
   1066  *
   1067  * Receive the document locator at startup, actually xmlDefaultSAXLocator
   1068  * Everything is available on the context, so this is useless in our case.
   1069  * DEPRECATED
   1070  */
   1071 void
   1072 setDocumentLocator(void *ctx ATTRIBUTE_UNUSED,
   1073                    xmlSAXLocatorPtr loc ATTRIBUTE_UNUSED)
   1074 {
   1075     DEPRECATED("setDocumentLocator")
   1076 }
   1077 
   1078 /**
   1079  * startDocument:
   1080  * @ctx: the user data (XML parser context)
   1081  *
   1082  * called when the document start being processed.
   1083  * DEPRECATED: use xmlSAX2StartDocument()
   1084  */
   1085 void
   1086 startDocument(void *ctx)
   1087 {
   1088    /* don't be too painful for glade users */
   1089    /*  DEPRECATED("startDocument") */
   1090         xmlSAX2StartDocument(ctx);
   1091 }
   1092 
   1093 /**
   1094  * endDocument:
   1095  * @ctx: the user data (XML parser context)
   1096  *
   1097  * called when the document end has been detected.
   1098  * DEPRECATED: use xmlSAX2EndDocument()
   1099  */
   1100 void
   1101 endDocument(void *ctx)
   1102 {
   1103     DEPRECATED("endDocument")
   1104         xmlSAX2EndDocument(ctx);
   1105 }
   1106 
   1107 /**
   1108  * attribute:
   1109  * @ctx: the user data (XML parser context)
   1110  * @fullname:  The attribute name, including namespace prefix
   1111  * @value:  The attribute value
   1112  *
   1113  * Handle an attribute that has been read by the parser.
   1114  * The default handling is to convert the attribute into an
   1115  * DOM subtree and past it in a new xmlAttr element added to
   1116  * the element.
   1117  * DEPRECATED: use xmlSAX2Attribute()
   1118  */
   1119 void
   1120 attribute(void *ctx ATTRIBUTE_UNUSED,
   1121           const xmlChar * fullname ATTRIBUTE_UNUSED,
   1122           const xmlChar * value ATTRIBUTE_UNUSED)
   1123 {
   1124     DEPRECATED("attribute")
   1125 }
   1126 
   1127 /**
   1128  * startElement:
   1129  * @ctx: the user data (XML parser context)
   1130  * @fullname:  The element name, including namespace prefix
   1131  * @atts:  An array of name/value attributes pairs, NULL terminated
   1132  *
   1133  * called when an opening tag has been processed.
   1134  * DEPRECATED: use xmlSAX2StartElement()
   1135  */
   1136 void
   1137 startElement(void *ctx, const xmlChar * fullname, const xmlChar ** atts)
   1138 {
   1139     xmlSAX2StartElement(ctx, fullname, atts);
   1140 }
   1141 
   1142 /**
   1143  * endElement:
   1144  * @ctx: the user data (XML parser context)
   1145  * @name:  The element name
   1146  *
   1147  * called when the end of an element has been detected.
   1148  * DEPRECATED: use xmlSAX2EndElement()
   1149  */
   1150 void
   1151 endElement(void *ctx, const xmlChar * name ATTRIBUTE_UNUSED)
   1152 {
   1153     DEPRECATED("endElement")
   1154     xmlSAX2EndElement(ctx, name);
   1155 }
   1156 
   1157 /**
   1158  * reference:
   1159  * @ctx: the user data (XML parser context)
   1160  * @name:  The entity name
   1161  *
   1162  * called when an entity reference is detected.
   1163  * DEPRECATED: use xmlSAX2Reference()
   1164  */
   1165 void
   1166 reference(void *ctx, const xmlChar * name)
   1167 {
   1168     DEPRECATED("reference")
   1169         xmlSAX2Reference(ctx, name);
   1170 }
   1171 
   1172 /**
   1173  * characters:
   1174  * @ctx: the user data (XML parser context)
   1175  * @ch:  a xmlChar string
   1176  * @len: the number of xmlChar
   1177  *
   1178  * receiving some chars from the parser.
   1179  * DEPRECATED: use xmlSAX2Characters()
   1180  */
   1181 void
   1182 characters(void *ctx, const xmlChar * ch, int len)
   1183 {
   1184     DEPRECATED("characters")
   1185         xmlSAX2Characters(ctx, ch, len);
   1186 }
   1187 
   1188 /**
   1189  * ignorableWhitespace:
   1190  * @ctx: the user data (XML parser context)
   1191  * @ch:  a xmlChar string
   1192  * @len: the number of xmlChar
   1193  *
   1194  * receiving some ignorable whitespaces from the parser.
   1195  * UNUSED: by default the DOM building will use characters
   1196  * DEPRECATED: use xmlSAX2IgnorableWhitespace()
   1197  */
   1198 void
   1199 ignorableWhitespace(void *ctx ATTRIBUTE_UNUSED,
   1200                     const xmlChar * ch ATTRIBUTE_UNUSED,
   1201                     int len ATTRIBUTE_UNUSED)
   1202 {
   1203     DEPRECATED("ignorableWhitespace")
   1204 }
   1205 
   1206 /**
   1207  * processingInstruction:
   1208  * @ctx: the user data (XML parser context)
   1209  * @target:  the target name
   1210  * @data: the PI data's
   1211  *
   1212  * A processing instruction has been parsed.
   1213  * DEPRECATED: use xmlSAX2ProcessingInstruction()
   1214  */
   1215 void
   1216 processingInstruction(void *ctx, const xmlChar * target,
   1217                       const xmlChar * data)
   1218 {
   1219     DEPRECATED("processingInstruction")
   1220         xmlSAX2ProcessingInstruction(ctx, target, data);
   1221 }
   1222 
   1223 /**
   1224  * globalNamespace:
   1225  * @ctx: the user data (XML parser context)
   1226  * @href:  the namespace associated URN
   1227  * @prefix: the namespace prefix
   1228  *
   1229  * An old global namespace has been parsed.
   1230  * DEPRECATED
   1231  */
   1232 void
   1233 globalNamespace(void *ctx ATTRIBUTE_UNUSED,
   1234                 const xmlChar * href ATTRIBUTE_UNUSED,
   1235                 const xmlChar * prefix ATTRIBUTE_UNUSED)
   1236 {
   1237     DEPRECATED("globalNamespace")
   1238 }
   1239 
   1240 /**
   1241  * setNamespace:
   1242  * @ctx: the user data (XML parser context)
   1243  * @name:  the namespace prefix
   1244  *
   1245  * Set the current element namespace.
   1246  * DEPRECATED
   1247  */
   1248 
   1249 void
   1250 setNamespace(void *ctx ATTRIBUTE_UNUSED,
   1251              const xmlChar * name ATTRIBUTE_UNUSED)
   1252 {
   1253     DEPRECATED("setNamespace")
   1254 }
   1255 
   1256 /**
   1257  * getNamespace:
   1258  * @ctx: the user data (XML parser context)
   1259  *
   1260  * Get the current element namespace.
   1261  * DEPRECATED
   1262  *
   1263  * Returns the xmlNsPtr or NULL if none
   1264  */
   1265 
   1266 xmlNsPtr
   1267 getNamespace(void *ctx ATTRIBUTE_UNUSED)
   1268 {
   1269     DEPRECATED("getNamespace")
   1270         return (NULL);
   1271 }
   1272 
   1273 /**
   1274  * checkNamespace:
   1275  * @ctx: the user data (XML parser context)
   1276  * @namespace: the namespace to check against
   1277  *
   1278  * Check that the current element namespace is the same as the
   1279  * one read upon parsing.
   1280  * DEPRECATED
   1281  *
   1282  * Returns 1 if true 0 otherwise
   1283  */
   1284 
   1285 int
   1286 checkNamespace(void *ctx ATTRIBUTE_UNUSED,
   1287                xmlChar * namespace ATTRIBUTE_UNUSED)
   1288 {
   1289     DEPRECATED("checkNamespace")
   1290         return (0);
   1291 }
   1292 
   1293 /**
   1294  * namespaceDecl:
   1295  * @ctx: the user data (XML parser context)
   1296  * @href:  the namespace associated URN
   1297  * @prefix: the namespace prefix
   1298  *
   1299  * A namespace has been parsed.
   1300  * DEPRECATED
   1301  */
   1302 void
   1303 namespaceDecl(void *ctx ATTRIBUTE_UNUSED,
   1304               const xmlChar * href ATTRIBUTE_UNUSED,
   1305               const xmlChar * prefix ATTRIBUTE_UNUSED)
   1306 {
   1307     DEPRECATED("namespaceDecl")
   1308 }
   1309 
   1310 /**
   1311  * comment:
   1312  * @ctx: the user data (XML parser context)
   1313  * @value:  the comment content
   1314  *
   1315  * A comment has been parsed.
   1316  * DEPRECATED: use xmlSAX2Comment()
   1317  */
   1318 void
   1319 comment(void *ctx, const xmlChar * value)
   1320 {
   1321     DEPRECATED("comment")
   1322         xmlSAX2Comment(ctx, value);
   1323 }
   1324 
   1325 /**
   1326  * cdataBlock:
   1327  * @ctx: the user data (XML parser context)
   1328  * @value:  The pcdata content
   1329  * @len:  the block length
   1330  *
   1331  * called when a pcdata block has been parsed
   1332  * DEPRECATED: use xmlSAX2CDataBlock()
   1333  */
   1334 void
   1335 cdataBlock(void *ctx, const xmlChar * value, int len)
   1336 {
   1337     DEPRECATED("cdataBlock")
   1338         xmlSAX2CDataBlock(ctx, value, len);
   1339 }
   1340 #define bottom_legacy
   1341 #include "elfgcchack.h"
   1342 #endif /* LIBXML_LEGACY_ENABLED */
   1343 
   1344