Annotation of XML/parserInternals.h, revision 1.40

1.1       daniel      1: /*
                      2:  * parserInternals.h : internals routines exported by the parser.
                      3:  *
                      4:  * See Copyright for the status of this software.
                      5:  *
                      6:  * Daniel.Veillard@w3.org
1.40    ! veillard    7:  *
        !             8:  * 14 Nov 2000 ht - truncated declaration of xmlParseElementChildrenContentDecl 
        !             9:  * for VMS
        !            10:  *
1.1       daniel     11:  */
                     12: 
                     13: #ifndef __XML_PARSER_INTERNALS_H__
                     14: #define __XML_PARSER_INTERNALS_H__
                     15: 
1.28      daniel     16: #include <libxml/parser.h>
1.1       daniel     17: 
                     18: #ifdef __cplusplus
                     19: extern "C" {
                     20: #endif
                     21: 
1.37      veillard   22:  /* 
                     23:   * Identifiers can be longer, but this will be more costly
                     24:   * at runtime.
                     25:   */
1.35      veillard   26: #define XML_MAX_NAMELEN 100
1.14      daniel     27: 
1.37      veillard   28: /*
                     29:  * The parser tries to always have that amount of input ready
                     30:  * one of the point is providing context when reporting errors
                     31:  */
                     32: #define INPUT_CHUNK    250
                     33: 
1.3       daniel     34: /************************************************************************
                     35:  *                                                                     *
                     36:  * UNICODE version of the macros.                                              *
                     37:  *                                                                     *
                     38:  ************************************************************************/
                     39: /*
                     40:  * [2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD]
                     41:  *                  | [#x10000-#x10FFFF]
                     42:  * any Unicode character, excluding the surrogate blocks, FFFE, and FFFF.
                     43:  */
                     44: #define IS_CHAR(c)                                                     \
1.32      daniel     45:     (((c) == 0x09) || ((c) == 0x0A) || ((c) == 0x0D) ||                        \
                     46:      (((c) >= 0x20) && ((c) <= 0xD7FF)) ||                             \
                     47:      (((c) >= 0xE000) && ((c) <= 0xFFFD)) ||                           \
                     48:      (((c) >= 0x10000) && ((c) <= 0x10FFFF)))
1.3       daniel     49: 
                     50: /*
                     51:  * [3] S ::= (#x20 | #x9 | #xD | #xA)+
                     52:  */
1.29      daniel     53: #define IS_BLANK(c) (((c) == 0x20) || ((c) == 0x09) || ((c) == 0xA) || \
1.3       daniel     54:                      ((c) == 0x0D))
                     55: 
                     56: /*
                     57:  * [85] BaseChar ::= ... long list see REC ...
                     58:  */
1.36      veillard   59: #define IS_BASECHAR(c) xmlIsBaseChar(c)
1.3       daniel     60: 
                     61: /*
                     62:  * [88] Digit ::= ... long list see REC ...
                     63:  */
1.36      veillard   64: #define IS_DIGIT(c) xmlIsDigit(c)
1.3       daniel     65: 
                     66: /*
                     67:  * [87] CombiningChar ::= ... long list see REC ...
                     68:  */
1.36      veillard   69: #define IS_COMBINING(c) xmlIsCombining(c)
1.3       daniel     70: 
                     71: /*
                     72:  * [89] Extender ::= #x00B7 | #x02D0 | #x02D1 | #x0387 | #x0640 |
                     73:  *                   #x0E46 | #x0EC6 | #x3005 | [#x3031-#x3035] |
                     74:  *                   [#x309D-#x309E] | [#x30FC-#x30FE]
                     75:  */
1.36      veillard   76: #define IS_EXTENDER(c) xmlIsExtender(c)
1.3       daniel     77: 
                     78: /*
                     79:  * [86] Ideographic ::= [#x4E00-#x9FA5] | #x3007 | [#x3021-#x3029]
                     80:  */
1.36      veillard   81: #define IS_IDEOGRAPHIC(c) xmlIsIdeographic(c)
1.3       daniel     82: 
                     83: /*
                     84:  * [84] Letter ::= BaseChar | Ideographic 
                     85:  */
                     86: #define IS_LETTER(c) (IS_BASECHAR(c) || IS_IDEOGRAPHIC(c))
                     87: 
                     88: 
                     89: /*
                     90:  * [13] PubidChar ::= #x20 | #xD | #xA | [a-zA-Z0-9] | [-'()+,./:=?;!*#@$_%]
                     91:  */
1.36      veillard   92: #define IS_PUBIDCHAR(c)        xmlIsPubidChar(c)
1.3       daniel     93: 
                     94: #define SKIP_EOL(p)                                                    \
                     95:     if (*(p) == 0x13) { p++ ; if (*(p) == 0x10) p++; }                 \
                     96:     if (*(p) == 0x10) { p++ ; if (*(p) == 0x13) p++; }
                     97: 
                     98: #define MOVETO_ENDTAG(p)                                               \
1.21      daniel     99:     while ((*p) && (*(p) != '>')) (p)++
1.3       daniel    100: 
                    101: #define MOVETO_STARTTAG(p)                                             \
1.21      daniel    102:     while ((*p) && (*(p) != '<')) (p)++
1.36      veillard  103: 
1.37      veillard  104: /**
                    105:  * Global vaiables affecting the default parser behaviour.
                    106:  */
                    107: 
1.39      veillard  108: LIBXML_DLL_IMPORT extern int xmlParserDebugEntities;
                    109: LIBXML_DLL_IMPORT extern int xmlGetWarningsDefaultValue;
                    110: LIBXML_DLL_IMPORT extern int xmlParserDebugEntities;
                    111: LIBXML_DLL_IMPORT extern int xmlSubstituteEntitiesDefaultValue;
                    112: LIBXML_DLL_IMPORT extern int xmlDoValidityCheckingDefaultValue;
                    113: LIBXML_DLL_IMPORT extern int xmlPedanticParserDefaultValue;
                    114: LIBXML_DLL_IMPORT extern int xmlKeepBlanksDefaultValue;
1.37      veillard  115: 
1.36      veillard  116: /*
                    117:  * Function to finish teh work of the macros where needed
                    118:  */
                    119: int                    xmlIsBaseChar   (int c);
                    120: int                    xmlIsBlank      (int c);
                    121: int                    xmlIsPubidChar  (int c);
                    122: int                    xmlIsLetter     (int c);
                    123: int                    xmlIsDigit      (int c);
                    124: int                    xmlIsIdeographic(int c);
                    125: int                    xmlIsCombining  (int c);
                    126: int                    xmlIsExtender   (int c);
                    127: int                    xmlIsCombining  (int c);
                    128: int                    xmlIsChar       (int c);
1.8       daniel    129: 
                    130: /**
1.2       daniel    131:  * Parser context
                    132:  */
1.18      daniel    133: xmlParserCtxtPtr       xmlCreateDocParserCtxt  (xmlChar *cur);
1.15      daniel    134: xmlParserCtxtPtr       xmlCreateFileParserCtxt (const char *filename);
                    135: xmlParserCtxtPtr       xmlCreateMemoryParserCtxt(char *buffer,
                    136:                                                 int size);
                    137: xmlParserCtxtPtr       xmlNewParserCtxt        (void);
1.26      daniel    138: xmlParserCtxtPtr       xmlCreateEntityParserCtxt(const xmlChar *URL,
                    139:                                                 const xmlChar *ID,
                    140:                                                 const xmlChar *base);
1.31      daniel    141: int                    xmlSwitchEncoding       (xmlParserCtxtPtr ctxt,
1.15      daniel    142:                                                 xmlCharEncoding enc);
1.31      daniel    143: int                    xmlSwitchToEncoding     (xmlParserCtxtPtr ctxt,
                    144:                                             xmlCharEncodingHandlerPtr handler);
1.25      daniel    145: void                   xmlFreeParserCtxt       (xmlParserCtxtPtr ctxt);
1.2       daniel    146: 
                    147: /**
1.1       daniel    148:  * Entities
                    149:  */
1.15      daniel    150: void                   xmlHandleEntity         (xmlParserCtxtPtr ctxt,
                    151:                                                 xmlEntityPtr entity);
1.1       daniel    152: 
1.2       daniel    153: /**
                    154:  * Input Streams
                    155:  */
1.15      daniel    156: xmlParserInputPtr      xmlNewEntityInputStream (xmlParserCtxtPtr ctxt,
                    157:                                                 xmlEntityPtr entity);
                    158: void                   xmlPushInput            (xmlParserCtxtPtr ctxt,
                    159:                                                 xmlParserInputPtr input);
1.18      daniel    160: xmlChar                        xmlPopInput             (xmlParserCtxtPtr ctxt);
1.15      daniel    161: void                   xmlFreeInputStream      (xmlParserInputPtr input);
                    162: xmlParserInputPtr      xmlNewInputFromFile     (xmlParserCtxtPtr ctxt,
                    163:                                                 const char *filename);
1.37      veillard  164: xmlParserInputPtr      xmlNewInputStream       (xmlParserCtxtPtr ctxt);
1.2       daniel    165: 
                    166: /**
1.1       daniel    167:  * Namespaces.
                    168:  */
1.23      daniel    169: xmlChar *              xmlSplitQName           (xmlParserCtxtPtr ctxt,
1.22      daniel    170:                                                 const xmlChar *name,
1.18      daniel    171:                                                 xmlChar **prefix);
1.23      daniel    172: xmlChar *              xmlNamespaceParseNCName (xmlParserCtxtPtr ctxt);
                    173: xmlChar *              xmlNamespaceParseQName  (xmlParserCtxtPtr ctxt,
1.18      daniel    174:                                                 xmlChar **prefix);
1.23      daniel    175: xmlChar *              xmlNamespaceParseNSDef  (xmlParserCtxtPtr ctxt);
                    176: xmlChar *              xmlParseQuotedString    (xmlParserCtxtPtr ctxt);
1.15      daniel    177: void                   xmlParseNamespace       (xmlParserCtxtPtr ctxt);
1.1       daniel    178: 
1.2       daniel    179: /**
1.1       daniel    180:  * Generic production rules
                    181:  */
1.23      daniel    182: xmlChar *              xmlScanName             (xmlParserCtxtPtr ctxt);
                    183: xmlChar *              xmlParseName            (xmlParserCtxtPtr ctxt);
                    184: xmlChar *              xmlParseNmtoken         (xmlParserCtxtPtr ctxt);
                    185: xmlChar *              xmlParseEntityValue     (xmlParserCtxtPtr ctxt,
1.18      daniel    186:                                                 xmlChar **orig);
1.23      daniel    187: xmlChar *              xmlParseAttValue        (xmlParserCtxtPtr ctxt);
                    188: xmlChar *              xmlParseSystemLiteral   (xmlParserCtxtPtr ctxt);
                    189: xmlChar *              xmlParsePubidLiteral    (xmlParserCtxtPtr ctxt);
1.15      daniel    190: void                   xmlParseCharData        (xmlParserCtxtPtr ctxt,
                    191:                                                 int cdata);
1.23      daniel    192: xmlChar *              xmlParseExternalID      (xmlParserCtxtPtr ctxt,
1.18      daniel    193:                                                 xmlChar **publicID,
1.15      daniel    194:                                                 int strict);
                    195: void                   xmlParseComment         (xmlParserCtxtPtr ctxt);
1.23      daniel    196: xmlChar *              xmlParsePITarget        (xmlParserCtxtPtr ctxt);
1.15      daniel    197: void                   xmlParsePI              (xmlParserCtxtPtr ctxt);
                    198: void                   xmlParseNotationDecl    (xmlParserCtxtPtr ctxt);
                    199: void                   xmlParseEntityDecl      (xmlParserCtxtPtr ctxt);
                    200: int                    xmlParseDefaultDecl     (xmlParserCtxtPtr ctxt,
1.18      daniel    201:                                                 xmlChar **value);
1.15      daniel    202: xmlEnumerationPtr      xmlParseNotationType    (xmlParserCtxtPtr ctxt);
                    203: xmlEnumerationPtr      xmlParseEnumerationType (xmlParserCtxtPtr ctxt);
                    204: int                    xmlParseEnumeratedType  (xmlParserCtxtPtr ctxt,
                    205:                                                 xmlEnumerationPtr *tree);
                    206: int                    xmlParseAttributeType   (xmlParserCtxtPtr ctxt,
                    207:                                                 xmlEnumerationPtr *tree);
                    208: void                   xmlParseAttributeListDecl(xmlParserCtxtPtr ctxt);
                    209: xmlElementContentPtr   xmlParseElementMixedContentDecl
                    210:                                                (xmlParserCtxtPtr ctxt);
1.40    ! veillard  211: #ifdef VMS
        !           212: xmlElementContentPtr   xmlParseElementChildrenContentD
        !           213:                                                (xmlParserCtxtPtr ctxt);
        !           214: #define xmlParseElementChildrenContentDecl     xmlParseElementChildrenContentD
        !           215: #else
1.15      daniel    216: xmlElementContentPtr   xmlParseElementChildrenContentDecl
                    217:                                                (xmlParserCtxtPtr ctxt);
1.40    ! veillard  218: #endif
1.15      daniel    219: int                    xmlParseElementContentDecl(xmlParserCtxtPtr ctxt,
1.18      daniel    220:                                                 xmlChar *name,
1.15      daniel    221:                                                 xmlElementContentPtr *result);
                    222: int                    xmlParseElementDecl     (xmlParserCtxtPtr ctxt);
                    223: void                   xmlParseMarkupDecl      (xmlParserCtxtPtr ctxt);
                    224: int                    xmlParseCharRef         (xmlParserCtxtPtr ctxt);
                    225: xmlEntityPtr           xmlParseEntityRef       (xmlParserCtxtPtr ctxt);
                    226: void                   xmlParseReference       (xmlParserCtxtPtr ctxt);
                    227: void                   xmlParsePEReference     (xmlParserCtxtPtr ctxt);
                    228: void                   xmlParseDocTypeDecl     (xmlParserCtxtPtr ctxt);
1.23      daniel    229: xmlChar *              xmlParseAttribute       (xmlParserCtxtPtr ctxt,
1.18      daniel    230:                                                 xmlChar **value);
1.23      daniel    231: xmlChar *              xmlParseStartTag        (xmlParserCtxtPtr ctxt);
1.20      daniel    232: void                   xmlParseEndTag          (xmlParserCtxtPtr ctxt);
1.15      daniel    233: void                   xmlParseCDSect          (xmlParserCtxtPtr ctxt);
                    234: void                   xmlParseContent         (xmlParserCtxtPtr ctxt);
                    235: void                   xmlParseElement         (xmlParserCtxtPtr ctxt);
1.23      daniel    236: xmlChar *              xmlParseVersionNum      (xmlParserCtxtPtr ctxt);
                    237: xmlChar *              xmlParseVersionInfo     (xmlParserCtxtPtr ctxt);
                    238: xmlChar *              xmlParseEncName         (xmlParserCtxtPtr ctxt);
                    239: xmlChar *              xmlParseEncodingDecl    (xmlParserCtxtPtr ctxt);
1.15      daniel    240: int                    xmlParseSDDecl          (xmlParserCtxtPtr ctxt);
                    241: void                   xmlParseXMLDecl         (xmlParserCtxtPtr ctxt);
1.24      daniel    242: void                   xmlParseTextDecl        (xmlParserCtxtPtr ctxt);
1.15      daniel    243: void                   xmlParseMisc            (xmlParserCtxtPtr ctxt);
                    244: void                   xmlParseExternalSubset  (xmlParserCtxtPtr ctxt,
1.18      daniel    245:                                                 const xmlChar *ExternalID,
                    246:                                                 const xmlChar *SystemID); 
1.6       daniel    247: /*
                    248:  * Entities substitution
                    249:  */
                    250: #define XML_SUBSTITUTE_NONE    0
                    251: #define XML_SUBSTITUTE_REF     1
                    252: #define XML_SUBSTITUTE_PEREF   2
                    253: #define XML_SUBSTITUTE_BOTH    3
                    254: 
1.27      daniel    255: xmlChar *              xmlDecodeEntities       (xmlParserCtxtPtr ctxt,
1.15      daniel    256:                                                 int len,
1.27      daniel    257:                                                 int what,
                    258:                                                 xmlChar end,
                    259:                                                 xmlChar  end2,
                    260:                                                 xmlChar end3);
                    261: xmlChar *              xmlStringDecodeEntities (xmlParserCtxtPtr ctxt,
                    262:                                                 const xmlChar *str,
1.15      daniel    263:                                                 int what,
1.18      daniel    264:                                                 xmlChar end,
                    265:                                                 xmlChar  end2,
                    266:                                                 xmlChar end3);
1.1       daniel    267: 
1.4       daniel    268: /*
                    269:  * Generated by MACROS on top of parser.c c.f. PUSH_AND_POP
                    270:  */
1.15      daniel    271: int                    nodePush                (xmlParserCtxtPtr ctxt,
                    272:                                                 xmlNodePtr value);
                    273: xmlNodePtr             nodePop                 (xmlParserCtxtPtr ctxt);
                    274: int                    inputPush               (xmlParserCtxtPtr ctxt,
                    275:                                                 xmlParserInputPtr value);
                    276: xmlParserInputPtr      inputPop                (xmlParserCtxtPtr ctxt);
1.37      veillard  277: 
                    278: /*
                    279:  * other comodities shared between parser.c and parserInternals
                    280:  */
                    281: int                    xmlSkipBlankChars       (xmlParserCtxtPtr ctxt);
                    282: int                    xmlStringCurrentChar    (xmlParserCtxtPtr ctxt,
                    283:                                                 const xmlChar *cur,
                    284:                                                 int *len);
                    285: void                   xmlParserHandlePEReference(xmlParserCtxtPtr ctxt);
                    286: void                   xmlParserHandleReference(xmlParserCtxtPtr ctxt);
                    287: xmlChar                *namePop                        (xmlParserCtxtPtr ctxt);
                    288: int                    xmlCheckLanguageID      (const xmlChar *lang);
1.1       daniel    289: 
1.33      veillard  290: /*
                    291:  * Really core function shared with HTML parser
                    292:  */
                    293: int                    xmlCurrentChar          (xmlParserCtxtPtr ctxt,
                    294:                                                 int *len);
                    295: int                    xmlCopyChar             (int len,
                    296:                                                 xmlChar *out,
                    297:                                                 int val);
                    298: void                   xmlNextChar             (xmlParserCtxtPtr ctxt);
                    299: void                   xmlParserInputShrink    (xmlParserInputPtr in);
1.38      veillard  300: 
                    301: #ifdef LIBXML_HTML_ENABLED
                    302: /*
                    303:  * Actually comes from the HTML parser but launched from the init stuff
                    304:  */
                    305: void                   htmlInitAutoClose       (void);
                    306: #endif
1.17      daniel    307: #ifdef __cplusplus
                    308: }
                    309: #endif
1.1       daniel    310: #endif /* __XML_PARSER_INTERNALS_H__ */

Webmaster