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