1 * Summary: internals routines and limits exported by the parser. 2 * Description: this module exports a number of internal parsing routines 3 * they are not really all intended for applications but 4 * can prove useful doing low level processing. 5 * 6 * Copy: See Copyright for the status of this software. 7 * 8 * Author: Patrick Monnerat <pm@datasphere.ch>, DATASPHERE S.A. 9 10 /if not defined(XML_PARSER_INTERNALS_H__) 11 /define XML_PARSER_INTERNALS_H__ 12 13 /include "libxmlrpg/xmlversion" 14 /include "libxmlrpg/xmlTypesC" 15 /include "libxmlrpg/parser" 16 /include "libxmlrpg/HTMLparser" 17 /include "libxmlrpg/chvalid" 18 19 * xmlParserMaxDepth: 20 * 21 * arbitrary depth limit for the XML documents that we allow to 22 * process. This is not a limitation of the parser but a safety 23 * boundary feature, use XML_PARSE_HUGE option to override it. 24 25 d xmlParserMaxDepth... 26 d s import('xmlParserMaxDepth') 27 d like(xmlCuint) 28 29 * XML_MAX_TEXT_LENGTH: 30 * 31 * Maximum size allowed for a single text node when building a tree. 32 * This is not a limitation of the parser but a safety boundary feature, 33 * use XML_PARSE_HUGE option to override it. 34 * Introduced in 2.9.0 35 36 d XML_MAX_TEXT_LENGTH... 37 d c 10000000 38 39 * XML_MAX_NAME_LENGTH: 40 * 41 * Maximum size allowed for a markup identitier 42 * This is not a limitation of the parser but a safety boundary feature, 43 * use XML_PARSE_HUGE option to override it. 44 * Note that with the use of parsing dictionaries overriding the limit 45 * may result in more runtime memory usage in face of "unfriendly' content 46 * Introduced in 2.9.0 47 48 d XML_MAX_NAME_LENGTH... 49 d c 50000 50 51 * XML_MAX_DICTIONARY_LIMIT: 52 * 53 * Maximum size allowed by the parser for a dictionary by default 54 * This is not a limitation of the parser but a safety boundary feature, 55 * use XML_PARSE_HUGE option to override it. 56 * Introduced in 2.9.0 57 58 d XML_MAX_DICTIONARY_LIMIT... 59 d c 10000000 60 61 * XML_MAX_LOOKUP_LIMIT: 62 * 63 * Maximum size allowed by the parser for ahead lookup 64 * This is an upper boundary enforced by the parser to avoid bad 65 * behaviour on "unfriendly' content 66 * Introduced in 2.9.0 67 68 d XML_MAX_LOOKUP_LIMIT... 69 d c 10000000 70 71 * XML_MAX_NAMELEN: 72 * 73 * Identifiers can be longer, but this will be more costly 74 * at runtime. 75 76 d XML_MAX_NAMELEN... 77 d c 100 78 79 * INPUT_CHUNK: 80 * 81 * The parser tries to always have that amount of input ready. 82 * One of the point is providing context when reporting errors. 83 84 d INPUT_CHUNK c 250 85 86 * Global variables used for predefined strings. 87 88 d xmlStringText s 4 import('xmlStringText') \0 in 5th byte 89 90 d xmlStringTextNoenc... 91 d s 9 import('xmlStringTextNoenc') \0 in 10th byte 92 93 d xmlStringComment... 94 d s 7 import('xmlStringComment') \0 in 8th byte 95 96 * Function to finish the work of the macros where needed. 97 98 d xmlIsLetter pr extproc('xmlIsLetter') 99 d like(xmlCint) 100 d c value like(xmlCint) 101 102 * Parser context. 103 104 d xmlCreateFileParserCtxt... 105 d pr extproc('xmlCreateFileParserCtxt') 106 d like(xmlParserCtxtPtr) 107 d filename * value options(*string) const char * 108 109 d xmlCreateURLParserCtxt... 110 d pr extproc('xmlCreateURLParserCtxt') 111 d like(xmlParserCtxtPtr) 112 d filename * value options(*string) const char * 113 d options value like(xmlCint) 114 115 d xmlCreateMemoryParserCtxt... 116 d pr extproc('xmlCreateMemoryParserCtxt') 117 d like(xmlParserCtxtPtr) 118 d buffer * value options(*string) const char * 119 d size value like(xmlCint) 120 121 d xmlCreateEntityParserCtxt... 122 d pr extproc('xmlCreateEntityParserCtxt') 123 d like(xmlParserCtxtPtr) 124 d URL * value options(*string) const xmlChar * 125 d ID * value options(*string) const xmlChar * 126 d base * value options(*string) const xmlChar * 127 128 d xmlSwitchEncoding... 129 d pr extproc('xmlSwitchEncoding') 130 d like(xmlCint) 131 d ctxt value like(xmlParserCtxtPtr) 132 d enc value like(xmlCharEncoding) 133 134 d xmlSwitchToEncoding... 135 d pr extproc('xmlSwitchToEncoding') 136 d like(xmlCint) 137 d ctxt value like(xmlParserCtxtPtr) 138 d handler value like(xmlCharEncodingHandlerPtr) 139 140 d xmlSwitchInputEncoding... 141 d pr extproc('xmlSwitchInputEncoding') 142 d like(xmlCint) 143 d ctxt value like(xmlParserCtxtPtr) 144 d input value like(xmlParserInputPtr) 145 d handler value like(xmlCharEncodingHandlerPtr) 146 147 * Input Streams. 148 149 d xmlNewStringInputStream... 150 d pr extproc('xmlNewStringInputStream') 151 d like(xmlParserInputPtr) 152 d ctxt value like(xmlParserCtxtPtr) 153 d buffer * value options(*string) const xmlChar * 154 155 d xmlNewEntityInputStream... 156 d pr extproc('xmlNewEntityInputStream') 157 d like(xmlParserInputPtr) 158 d ctxt value like(xmlParserCtxtPtr) 159 d entity value like(xmlEntityPtr) 160 161 d xmlPushInput pr extproc('xmlPushInput') 162 d like(xmlCint) 163 d ctxt value like(xmlParserCtxtPtr) 164 d input value like(xmlParserInputPtr) 165 166 d xmlPopInput pr extproc('xmlPopInput') 167 d like(xmlChar) 168 d ctxt value like(xmlParserCtxtPtr) 169 170 d xmlFreeInputStream... 171 d pr extproc('xmlFreeInputStream') 172 d input value like(xmlParserInputPtr) 173 174 d xmlNewInputFromFile... 175 d pr extproc('xmlNewInputFromFile') 176 d like(xmlParserInputPtr) 177 d ctxt value like(xmlParserCtxtPtr) 178 d filename * value options(*string) const char * 179 180 d xmlNewInputStream... 181 d pr extproc('xmlNewInputStream') 182 d like(xmlParserInputPtr) 183 d ctxt value like(xmlParserCtxtPtr) 184 185 * Namespaces. 186 187 d xmlSplitQName pr * extproc('xmlSplitQName') xmlChar * 188 d ctxt value like(xmlParserCtxtPtr) 189 d name * value options(*string) const xmlChar * 190 d prefix * xmlChar *(*) 191 192 * Generic production rules. 193 194 d xmlParseName pr * extproc('xmlParseName') const xmlChar * 195 d ctxt value like(xmlParserCtxtPtr) 196 197 d xmlParseNmtoken... 198 d pr * extproc('xmlParseNmtoken') xmlChar * 199 d ctxt value like(xmlParserCtxtPtr) 200 201 d xmlParseEntityValue... 202 d pr * extproc('xmlParseEntityValue') xmlChar * 203 d ctxt value like(xmlParserCtxtPtr) 204 d orig * xmlChar *(*) 205 206 d xmlParseAttValue... 207 d pr * extproc('xmlParseAttValue') xmlChar * 208 d ctxt value like(xmlParserCtxtPtr) 209 210 d xmlParseSystemLiteral... 211 d pr * extproc('xmlParseSystemLiteral') xmlChar * 212 d ctxt value like(xmlParserCtxtPtr) 213 214 d xmlParsePubidLiteral... 215 d pr * extproc('xmlParsePubidLiteral') xmlChar * 216 d ctxt value like(xmlParserCtxtPtr) 217 218 d xmlParseCharData... 219 d pr extproc('xmlParseCharData') 220 d ctxt value like(xmlParserCtxtPtr) 221 d cdata value like(xmlCint) 222 223 d xmlParseExternalID... 224 d pr * extproc('xmlParseExternalID') xmlChar * 225 d ctxt value like(xmlParserCtxtPtr) 226 d publicID * xmlChar *(*) 227 d strict value like(xmlCint) 228 229 d xmlParseComment... 230 d pr extproc('xmlParseComment') 231 d ctxt value like(xmlParserCtxtPtr) 232 233 d xmlParsePITarget... 234 d pr * extproc('xmlParsePITarget') const xmlChar * 235 d ctxt value like(xmlParserCtxtPtr) 236 237 d xmlParsePI pr extproc('xmlParsePI') 238 d ctxt value like(xmlParserCtxtPtr) 239 240 d xmlParseNotationDecl... 241 d pr extproc('xmlParseNotationDecl') 242 d ctxt value like(xmlParserCtxtPtr) 243 244 d xmlParseEntityDecl... 245 d pr extproc('xmlParseEntityDecl') 246 d ctxt value like(xmlParserCtxtPtr) 247 248 d xmlParseDefaultDecl... 249 d pr extproc('xmlParseDefaultDecl') 250 d like(xmlCint) 251 d ctxt value like(xmlParserCtxtPtr) 252 d value * xmlChar *(*) 253 254 d xmlParseNotationType... 255 d pr extproc('xmlParseNotationType') 256 d like(xmlEnumerationPtr) 257 d ctxt value like(xmlParserCtxtPtr) 258 259 d xmlParseEnumerationType... 260 d pr extproc('xmlParseEnumerationType') 261 d like(xmlEnumerationPtr) 262 d ctxt value like(xmlParserCtxtPtr) 263 264 d xmlParseEnumeratedType... 265 d pr extproc('xmlParseEnumeratedType') 266 d like(xmlCint) 267 d ctxt value like(xmlParserCtxtPtr) 268 d tree * value xmlEnumerationPtr * 269 270 d xmlParseAttributeType... 271 d pr extproc('xmlParseAttributeType') 272 d like(xmlCint) 273 d ctxt value like(xmlParserCtxtPtr) 274 d tree * value xmlEnumerationPtr * 275 276 d xmlParseAttributeListDecl... 277 d pr extproc('xmlParseAttributeListDecl') 278 d ctxt value like(xmlParserCtxtPtr) 279 280 d xmlParseElementMixedContentDecl... 281 d pr extproc( 282 d 'xmlParseElementMixedContentDecl') 283 d like(xmlElementContentPtr) 284 d ctxt value like(xmlParserCtxtPtr) 285 d inputchk value like(xmlCint) 286 287 d xmlParseElementChildrenContentDecl... 288 d pr extproc( 289 d 'xmlParseElementChildrenContentDecl') 290 d like(xmlElementContentPtr) 291 d ctxt value like(xmlParserCtxtPtr) 292 d inputchk value like(xmlCint) 293 294 d xmlParseElementContentDecl... 295 d pr extproc('xmlParseElementContentDecl') 296 d like(xmlCint) 297 d ctxt value like(xmlParserCtxtPtr) 298 d name * value options(*string) const xmlChar * 299 d result * value xmlElementContentPtr 300 d * 301 302 d xmlParseElementDecl... 303 d pr extproc('xmlParseElementDecl') 304 d like(xmlCint) 305 d ctxt value like(xmlParserCtxtPtr) 306 307 d xmlParseMarkupDecl... 308 d pr extproc('xmlParseMarkupDecl') 309 d ctxt value like(xmlParserCtxtPtr) 310 311 d xmlParseCharRef... 312 d pr extproc('xmlParseCharRef') 313 d like(xmlCint) 314 d ctxt value like(xmlParserCtxtPtr) 315 316 d xmlParseEntityRef... 317 d pr extproc('xmlParseEntityRef') 318 d like(xmlEntityPtr) 319 d ctxt value like(xmlParserCtxtPtr) 320 321 d xmlParseReference... 322 d pr extproc('xmlParseReference') 323 d ctxt value like(xmlParserCtxtPtr) 324 325 d xmlParsePEReference... 326 d pr extproc('xmlParsePEReference') 327 d ctxt value like(xmlParserCtxtPtr) 328 329 d xmlParseDocTypeDecl... 330 d pr extproc('xmlParseDocTypeDecl') 331 d ctxt value like(xmlParserCtxtPtr) 332 333 /if defined(LIBXML_SAX1_ENABLED) 334 d xmlParseAttribute... 335 d pr * extproc('xmlParseAttribute') const xmlChar * 336 d ctxt value like(xmlParserCtxtPtr) 337 d value * xmlChar *(*) 338 339 d xmlParseStartTag... 340 d pr * extproc('xmlParseStartTag') const xmlChar * 341 d ctxt value like(xmlParserCtxtPtr) 342 343 d xmlParseEndTag pr extproc('xmlParseEndTag') 344 d ctxt value like(xmlParserCtxtPtr) 345 /endif LIBXML_SAX1_ENABLED 346 347 d xmlParseCDSect pr extproc('xmlParseCDSect') 348 d ctxt value like(xmlParserCtxtPtr) 349 350 d xmlParseContent... 351 d pr extproc('xmlParseContent') 352 d ctxt value like(xmlParserCtxtPtr) 353 354 d xmlParseElement... 355 d pr extproc('xmlParseElement') 356 d ctxt value like(xmlParserCtxtPtr) 357 358 d xmlParseVersionNum... 359 d pr * extproc('xmlParseVersionNum') xmlChar * 360 d ctxt value like(xmlParserCtxtPtr) 361 362 d xmlParseVersionInfo... 363 d pr * extproc('xmlParseVersionInfo') xmlChar * 364 d ctxt value like(xmlParserCtxtPtr) 365 366 d xmlParseEncName... 367 d pr * extproc('xmlParseEncName') xmlChar * 368 d ctxt value like(xmlParserCtxtPtr) 369 370 d xmlParseEncodingDecl... 371 d pr * extproc('xmlParseEncodingDecl') const xmlChar * 372 d ctxt value like(xmlParserCtxtPtr) 373 374 d xmlParseSDDecl pr extproc('xmlParseSDDecl') 375 d like(xmlCint) 376 d ctxt value like(xmlParserCtxtPtr) 377 378 d xmlParseXMLDecl... 379 d pr extproc('xmlParseXMLDecl') 380 d ctxt value like(xmlParserCtxtPtr) 381 382 d xmlParseTextDecl... 383 d pr extproc('xmlParseTextDecl') 384 d ctxt value like(xmlParserCtxtPtr) 385 386 d xmlParseMisc pr extproc('xmlParseMisc') 387 d ctxt value like(xmlParserCtxtPtr) 388 389 d xmlParseExternalSubset... 390 d pr extproc('xmlParseExternalSubset') 391 d ctxt value like(xmlParserCtxtPtr) 392 d ExternalID * value options(*string) const xmlChar * 393 d SystemID * value options(*string) const xmlChar * 394 395 * XML_SUBSTITUTE_NONE: 396 * 397 * If no entities need to be substituted. 398 399 d XML_SUBSTITUTE_NONE... 400 d c 0 401 402 * XML_SUBSTITUTE_REF: 403 * 404 * Whether general entities need to be substituted. 405 406 d XML_SUBSTITUTE_REF... 407 d c 1 408 409 * XML_SUBSTITUTE_PEREF: 410 * 411 * Whether parameter entities need to be substituted. 412 413 d XML_SUBSTITUTE_PEREF... 414 d c 2 415 416 * XML_SUBSTITUTE_BOTH: 417 * 418 * Both general and parameter entities need to be substituted. 419 420 d XML_SUBSTITUTE_BOTH... 421 d c 3 422 423 d xmlStringDecodeEntities... 424 d pr * extproc('xmlStringDecodeEntities') xmlChar * 425 d ctxt value like(xmlParserCtxtPtr) 426 d str * value options(*string) const xmlChar * 427 d what value like(xmlCint) 428 d end value like(xmlChar) 429 d end2 value like(xmlChar) 430 d end3 value like(xmlChar) 431 432 d xmlStringLenDecodeEntities... 433 d pr * extproc('xmlStringLenDecodeEntities')xmlChar * 434 d ctxt value like(xmlParserCtxtPtr) 435 d str * value options(*string) const xmlChar * 436 d len value like(xmlCint) 437 d what value like(xmlCint) 438 d end value like(xmlChar) 439 d end2 value like(xmlChar) 440 d end3 value like(xmlChar) 441 442 * Generated by MACROS on top of parser.c c.f. PUSH_AND_POP. 443 444 d nodePush pr extproc('nodePush') 445 d like(xmlCint) 446 d ctxt value like(xmlParserCtxtPtr) 447 d value value like(xmlNodePtr) 448 449 d nodePop pr extproc('nodePop') 450 d like(xmlNodePtr) 451 d ctxt value like(xmlParserCtxtPtr) 452 453 d inputPush pr extproc('inputPush') 454 d like(xmlCint) 455 d ctxt value like(xmlParserCtxtPtr) 456 d value value like(xmlParserInputPtr) 457 458 d inputPop pr extproc('inputPop') 459 d like(xmlParserInputPtr) 460 d ctxt value like(xmlParserCtxtPtr) 461 462 d namePop pr * extproc('namePop') const xmlChar * 463 d ctxt value like(xmlParserCtxtPtr) 464 465 d namePush pr extproc('namePush') 466 d like(xmlCint) 467 d ctxt value like(xmlParserCtxtPtr) 468 d value * value options(*string) const xmlChar * 469 470 * other commodities shared between parser.c and parserInternals. 471 472 d xmlSkipBlankChars... 473 d pr extproc('xmlSkipBlankChars') 474 d like(xmlCint) 475 d ctxt value like(xmlParserCtxtPtr) 476 477 d xmlStringCurrentChar... 478 d pr extproc('xmlStringCurrentChar') 479 d like(xmlCint) 480 d ctxt value like(xmlParserCtxtPtr) 481 d cur * value options(*string) const xmlChar * 482 d len * value int * 483 484 d xmlParserHandlePEReference... 485 d pr extproc('xmlParserHandlePEReference') 486 d ctxt value like(xmlParserCtxtPtr) 487 488 d xmlCheckLanguageID... 489 d pr extproc('xmlCheckLanguageID') 490 d like(xmlCint) 491 d lang * value options(*string) const xmlChar * 492 493 * Really core function shared with HTML parser. 494 495 d xmlCurrentChar pr extproc('xmlCurrentChar') 496 d like(xmlCint) 497 d ctxt value like(xmlParserCtxtPtr) 498 d len * value int * 499 500 d xmlCopyCharMultiByte... 501 d pr extproc('xmlCopyCharMultiByte') 502 d like(xmlCint) 503 d out * value options(*string) xmlChar * 504 d val value like(xmlCint) 505 506 d xmlCopyChar pr extproc('xmlCopyChar') 507 d like(xmlCint) 508 d len value like(xmlCint) 509 d out * value options(*string) xmlChar * 510 d val value like(xmlCint) 511 512 d xmlNextChar pr extproc('xmlNextChar') 513 d ctxt value like(xmlParserCtxtPtr) 514 515 d xmlParserInputShrink... 516 d pr extproc('xmlParserInputShrink') 517 d in value like(xmlParserInputPtr) 518 519 /if defined(LIBXML_HTML_ENABLED) 520 521 * Actually comes from the HTML parser but launched from the init stuff. 522 523 d htmlInitAutoClose... 524 d pr extproc('htmlInitAutoClose') 525 526 d htmlCreateFileParserCtxt... 527 d pr extproc('htmlCreateFileParserCtxt') 528 d like(htmlParserCtxtPtr) 529 d filename * value options(*string) const char * 530 d encoding * value options(*string) const char * 531 /endif 532 533 * Specific function to keep track of entities references 534 * and used by the XSLT debugger. 535 536 /if defined(LIBXML_LEGACY_ENABLED) 537 * xmlEntityReferenceFunc: 538 * @ent: the entity 539 * @firstNode: the fist node in the chunk 540 * @lastNode: the last nod in the chunk 541 * 542 * Callback function used when one needs to be able to track back the 543 * provenance of a chunk of nodes inherited from an entity replacement. 544 545 d xmlEntityReferenceFunc... 546 d s * based(######typedef######) 547 d procptr 548 549 d xmlSetEntityReferenceFunc... 550 d pr extproc('xmlSetEntityReferenceFunc') 551 d func value like(xmlEntityReferenceFunc) 552 553 d xmlParseQuotedString... 554 d pr * extproc('xmlParseQuotedString') xmlChar * 555 d ctxt value like(xmlParserCtxtPtr) 556 557 d xmlParseNamespace... 558 d pr extproc('xmlParseNamespace') 559 d ctxt value like(xmlParserCtxtPtr) 560 561 d xmlNamespaceParseNSDef... 562 d pr * extproc('xmlNamespaceParseNSDef') xmlChar * 563 d ctxt value like(xmlParserCtxtPtr) 564 565 d xmlScanName pr * extproc('xmlScanName') xmlChar * 566 d ctxt value like(xmlParserCtxtPtr) 567 568 d xmlNamespaceParseNCName... 569 d pr * extproc('xmlNamespaceParseNCName') xmlChar * 570 d ctxt value like(xmlParserCtxtPtr) 571 572 d xmlParserHandleReference... 573 d pr extproc('xmlParserHandleReference') 574 d ctxt value like(xmlParserCtxtPtr) 575 576 d xmlNamespaceParseQName... 577 d pr * extproc('xmlNamespaceParseQName') xmlChar * 578 d ctxt value like(xmlParserCtxtPtr) 579 d prefix * xmlChar *(*) 580 581 * Entities 582 583 d xmlDecodeEntities... 584 d pr * extproc('xmlDecodeEntities') xmlChar * 585 d ctxt value like(xmlParserCtxtPtr) 586 d len value like(xmlCint) 587 d what value like(xmlCint) 588 d end value like(xmlChar) 589 d end2 value like(xmlChar) 590 d end3 value like(xmlChar) 591 592 d xmlHandleEntity... 593 d pr extproc('xmlHandleEntity') 594 d ctxt value like(xmlParserCtxtPtr) 595 d entity value like(xmlEntityPtr) 596 /endif LIBXML_LEGACY_ENABLD 597 598 /endif 599