• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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