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