Annotation of embedaddon/expat/lib/xmltok.h, revision 1.1

1.1     ! misho       1: /* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd
        !             2:    See the file COPYING for copying permission.
        !             3: */
        !             4: 
        !             5: #ifndef XmlTok_INCLUDED
        !             6: #define XmlTok_INCLUDED 1
        !             7: 
        !             8: #ifdef __cplusplus
        !             9: extern "C" {
        !            10: #endif
        !            11: 
        !            12: /* The following token may be returned by XmlContentTok */
        !            13: #define XML_TOK_TRAILING_RSQB -5 /* ] or ]] at the end of the scan; might be
        !            14:                                     start of illegal ]]> sequence */
        !            15: /* The following tokens may be returned by both XmlPrologTok and
        !            16:    XmlContentTok.
        !            17: */
        !            18: #define XML_TOK_NONE -4          /* The string to be scanned is empty */
        !            19: #define XML_TOK_TRAILING_CR -3   /* A CR at the end of the scan;
        !            20:                                     might be part of CRLF sequence */
        !            21: #define XML_TOK_PARTIAL_CHAR -2  /* only part of a multibyte sequence */
        !            22: #define XML_TOK_PARTIAL -1       /* only part of a token */
        !            23: #define XML_TOK_INVALID 0
        !            24: 
        !            25: /* The following tokens are returned by XmlContentTok; some are also
        !            26:    returned by XmlAttributeValueTok, XmlEntityTok, XmlCdataSectionTok.
        !            27: */
        !            28: #define XML_TOK_START_TAG_WITH_ATTS 1
        !            29: #define XML_TOK_START_TAG_NO_ATTS 2
        !            30: #define XML_TOK_EMPTY_ELEMENT_WITH_ATTS 3 /* empty element tag <e/> */
        !            31: #define XML_TOK_EMPTY_ELEMENT_NO_ATTS 4
        !            32: #define XML_TOK_END_TAG 5
        !            33: #define XML_TOK_DATA_CHARS 6
        !            34: #define XML_TOK_DATA_NEWLINE 7
        !            35: #define XML_TOK_CDATA_SECT_OPEN 8
        !            36: #define XML_TOK_ENTITY_REF 9
        !            37: #define XML_TOK_CHAR_REF 10               /* numeric character reference */
        !            38: 
        !            39: /* The following tokens may be returned by both XmlPrologTok and
        !            40:    XmlContentTok.
        !            41: */
        !            42: #define XML_TOK_PI 11                     /* processing instruction */
        !            43: #define XML_TOK_XML_DECL 12               /* XML decl or text decl */
        !            44: #define XML_TOK_COMMENT 13
        !            45: #define XML_TOK_BOM 14                    /* Byte order mark */
        !            46: 
        !            47: /* The following tokens are returned only by XmlPrologTok */
        !            48: #define XML_TOK_PROLOG_S 15
        !            49: #define XML_TOK_DECL_OPEN 16              /* <!foo */
        !            50: #define XML_TOK_DECL_CLOSE 17             /* > */
        !            51: #define XML_TOK_NAME 18
        !            52: #define XML_TOK_NMTOKEN 19
        !            53: #define XML_TOK_POUND_NAME 20             /* #name */
        !            54: #define XML_TOK_OR 21                     /* | */
        !            55: #define XML_TOK_PERCENT 22
        !            56: #define XML_TOK_OPEN_PAREN 23
        !            57: #define XML_TOK_CLOSE_PAREN 24
        !            58: #define XML_TOK_OPEN_BRACKET 25
        !            59: #define XML_TOK_CLOSE_BRACKET 26
        !            60: #define XML_TOK_LITERAL 27
        !            61: #define XML_TOK_PARAM_ENTITY_REF 28
        !            62: #define XML_TOK_INSTANCE_START 29
        !            63: 
        !            64: /* The following occur only in element type declarations */
        !            65: #define XML_TOK_NAME_QUESTION 30          /* name? */
        !            66: #define XML_TOK_NAME_ASTERISK 31          /* name* */
        !            67: #define XML_TOK_NAME_PLUS 32              /* name+ */
        !            68: #define XML_TOK_COND_SECT_OPEN 33         /* <![ */
        !            69: #define XML_TOK_COND_SECT_CLOSE 34        /* ]]> */
        !            70: #define XML_TOK_CLOSE_PAREN_QUESTION 35   /* )? */
        !            71: #define XML_TOK_CLOSE_PAREN_ASTERISK 36   /* )* */
        !            72: #define XML_TOK_CLOSE_PAREN_PLUS 37       /* )+ */
        !            73: #define XML_TOK_COMMA 38
        !            74: 
        !            75: /* The following token is returned only by XmlAttributeValueTok */
        !            76: #define XML_TOK_ATTRIBUTE_VALUE_S 39
        !            77: 
        !            78: /* The following token is returned only by XmlCdataSectionTok */
        !            79: #define XML_TOK_CDATA_SECT_CLOSE 40
        !            80: 
        !            81: /* With namespace processing this is returned by XmlPrologTok for a
        !            82:    name with a colon.
        !            83: */
        !            84: #define XML_TOK_PREFIXED_NAME 41
        !            85: 
        !            86: #ifdef XML_DTD
        !            87: #define XML_TOK_IGNORE_SECT 42
        !            88: #endif /* XML_DTD */
        !            89: 
        !            90: #ifdef XML_DTD
        !            91: #define XML_N_STATES 4
        !            92: #else /* not XML_DTD */
        !            93: #define XML_N_STATES 3
        !            94: #endif /* not XML_DTD */
        !            95: 
        !            96: #define XML_PROLOG_STATE 0
        !            97: #define XML_CONTENT_STATE 1
        !            98: #define XML_CDATA_SECTION_STATE 2
        !            99: #ifdef XML_DTD
        !           100: #define XML_IGNORE_SECTION_STATE 3
        !           101: #endif /* XML_DTD */
        !           102: 
        !           103: #define XML_N_LITERAL_TYPES 2
        !           104: #define XML_ATTRIBUTE_VALUE_LITERAL 0
        !           105: #define XML_ENTITY_VALUE_LITERAL 1
        !           106: 
        !           107: /* The size of the buffer passed to XmlUtf8Encode must be at least this. */
        !           108: #define XML_UTF8_ENCODE_MAX 4
        !           109: /* The size of the buffer passed to XmlUtf16Encode must be at least this. */
        !           110: #define XML_UTF16_ENCODE_MAX 2
        !           111: 
        !           112: typedef struct position {
        !           113:   /* first line and first column are 0 not 1 */
        !           114:   XML_Size lineNumber;
        !           115:   XML_Size columnNumber;
        !           116: } POSITION;
        !           117: 
        !           118: typedef struct {
        !           119:   const char *name;
        !           120:   const char *valuePtr;
        !           121:   const char *valueEnd;
        !           122:   char normalized;
        !           123: } ATTRIBUTE;
        !           124: 
        !           125: struct encoding;
        !           126: typedef struct encoding ENCODING;
        !           127: 
        !           128: typedef int (PTRCALL *SCANNER)(const ENCODING *,
        !           129:                                const char *,
        !           130:                                const char *,
        !           131:                                const char **);
        !           132: 
        !           133: struct encoding {
        !           134:   SCANNER scanners[XML_N_STATES];
        !           135:   SCANNER literalScanners[XML_N_LITERAL_TYPES];
        !           136:   int (PTRCALL *sameName)(const ENCODING *,
        !           137:                           const char *,
        !           138:                           const char *);
        !           139:   int (PTRCALL *nameMatchesAscii)(const ENCODING *,
        !           140:                                   const char *,
        !           141:                                   const char *,
        !           142:                                   const char *);
        !           143:   int (PTRFASTCALL *nameLength)(const ENCODING *, const char *);
        !           144:   const char *(PTRFASTCALL *skipS)(const ENCODING *, const char *);
        !           145:   int (PTRCALL *getAtts)(const ENCODING *enc,
        !           146:                          const char *ptr,
        !           147:                          int attsMax,
        !           148:                          ATTRIBUTE *atts);
        !           149:   int (PTRFASTCALL *charRefNumber)(const ENCODING *enc, const char *ptr);
        !           150:   int (PTRCALL *predefinedEntityName)(const ENCODING *,
        !           151:                                       const char *,
        !           152:                                       const char *);
        !           153:   void (PTRCALL *updatePosition)(const ENCODING *,
        !           154:                                  const char *ptr,
        !           155:                                  const char *end,
        !           156:                                  POSITION *);
        !           157:   int (PTRCALL *isPublicId)(const ENCODING *enc,
        !           158:                             const char *ptr,
        !           159:                             const char *end,
        !           160:                             const char **badPtr);
        !           161:   void (PTRCALL *utf8Convert)(const ENCODING *enc,
        !           162:                               const char **fromP,
        !           163:                               const char *fromLim,
        !           164:                               char **toP,
        !           165:                               const char *toLim);
        !           166:   void (PTRCALL *utf16Convert)(const ENCODING *enc,
        !           167:                                const char **fromP,
        !           168:                                const char *fromLim,
        !           169:                                unsigned short **toP,
        !           170:                                const unsigned short *toLim);
        !           171:   int minBytesPerChar;
        !           172:   char isUtf8;
        !           173:   char isUtf16;
        !           174: };
        !           175: 
        !           176: /* Scan the string starting at ptr until the end of the next complete
        !           177:    token, but do not scan past eptr.  Return an integer giving the
        !           178:    type of token.
        !           179: 
        !           180:    Return XML_TOK_NONE when ptr == eptr; nextTokPtr will not be set.
        !           181: 
        !           182:    Return XML_TOK_PARTIAL when the string does not contain a complete
        !           183:    token; nextTokPtr will not be set.
        !           184: 
        !           185:    Return XML_TOK_INVALID when the string does not start a valid
        !           186:    token; nextTokPtr will be set to point to the character which made
        !           187:    the token invalid.
        !           188: 
        !           189:    Otherwise the string starts with a valid token; nextTokPtr will be
        !           190:    set to point to the character following the end of that token.
        !           191: 
        !           192:    Each data character counts as a single token, but adjacent data
        !           193:    characters may be returned together.  Similarly for characters in
        !           194:    the prolog outside literals, comments and processing instructions.
        !           195: */
        !           196: 
        !           197: 
        !           198: #define XmlTok(enc, state, ptr, end, nextTokPtr) \
        !           199:   (((enc)->scanners[state])(enc, ptr, end, nextTokPtr))
        !           200: 
        !           201: #define XmlPrologTok(enc, ptr, end, nextTokPtr) \
        !           202:    XmlTok(enc, XML_PROLOG_STATE, ptr, end, nextTokPtr)
        !           203: 
        !           204: #define XmlContentTok(enc, ptr, end, nextTokPtr) \
        !           205:    XmlTok(enc, XML_CONTENT_STATE, ptr, end, nextTokPtr)
        !           206: 
        !           207: #define XmlCdataSectionTok(enc, ptr, end, nextTokPtr) \
        !           208:    XmlTok(enc, XML_CDATA_SECTION_STATE, ptr, end, nextTokPtr)
        !           209: 
        !           210: #ifdef XML_DTD
        !           211: 
        !           212: #define XmlIgnoreSectionTok(enc, ptr, end, nextTokPtr) \
        !           213:    XmlTok(enc, XML_IGNORE_SECTION_STATE, ptr, end, nextTokPtr)
        !           214: 
        !           215: #endif /* XML_DTD */
        !           216: 
        !           217: /* This is used for performing a 2nd-level tokenization on the content
        !           218:    of a literal that has already been returned by XmlTok.
        !           219: */
        !           220: #define XmlLiteralTok(enc, literalType, ptr, end, nextTokPtr) \
        !           221:   (((enc)->literalScanners[literalType])(enc, ptr, end, nextTokPtr))
        !           222: 
        !           223: #define XmlAttributeValueTok(enc, ptr, end, nextTokPtr) \
        !           224:    XmlLiteralTok(enc, XML_ATTRIBUTE_VALUE_LITERAL, ptr, end, nextTokPtr)
        !           225: 
        !           226: #define XmlEntityValueTok(enc, ptr, end, nextTokPtr) \
        !           227:    XmlLiteralTok(enc, XML_ENTITY_VALUE_LITERAL, ptr, end, nextTokPtr)
        !           228: 
        !           229: #define XmlSameName(enc, ptr1, ptr2) (((enc)->sameName)(enc, ptr1, ptr2))
        !           230: 
        !           231: #define XmlNameMatchesAscii(enc, ptr1, end1, ptr2) \
        !           232:   (((enc)->nameMatchesAscii)(enc, ptr1, end1, ptr2))
        !           233: 
        !           234: #define XmlNameLength(enc, ptr) \
        !           235:   (((enc)->nameLength)(enc, ptr))
        !           236: 
        !           237: #define XmlSkipS(enc, ptr) \
        !           238:   (((enc)->skipS)(enc, ptr))
        !           239: 
        !           240: #define XmlGetAttributes(enc, ptr, attsMax, atts) \
        !           241:   (((enc)->getAtts)(enc, ptr, attsMax, atts))
        !           242: 
        !           243: #define XmlCharRefNumber(enc, ptr) \
        !           244:   (((enc)->charRefNumber)(enc, ptr))
        !           245: 
        !           246: #define XmlPredefinedEntityName(enc, ptr, end) \
        !           247:   (((enc)->predefinedEntityName)(enc, ptr, end))
        !           248: 
        !           249: #define XmlUpdatePosition(enc, ptr, end, pos) \
        !           250:   (((enc)->updatePosition)(enc, ptr, end, pos))
        !           251: 
        !           252: #define XmlIsPublicId(enc, ptr, end, badPtr) \
        !           253:   (((enc)->isPublicId)(enc, ptr, end, badPtr))
        !           254: 
        !           255: #define XmlUtf8Convert(enc, fromP, fromLim, toP, toLim) \
        !           256:   (((enc)->utf8Convert)(enc, fromP, fromLim, toP, toLim))
        !           257: 
        !           258: #define XmlUtf16Convert(enc, fromP, fromLim, toP, toLim) \
        !           259:   (((enc)->utf16Convert)(enc, fromP, fromLim, toP, toLim))
        !           260: 
        !           261: typedef struct {
        !           262:   ENCODING initEnc;
        !           263:   const ENCODING **encPtr;
        !           264: } INIT_ENCODING;
        !           265: 
        !           266: int XmlParseXmlDecl(int isGeneralTextEntity,
        !           267:                     const ENCODING *enc,
        !           268:                     const char *ptr,
        !           269:                     const char *end,
        !           270:                     const char **badPtr,
        !           271:                     const char **versionPtr,
        !           272:                     const char **versionEndPtr,
        !           273:                     const char **encodingNamePtr,
        !           274:                     const ENCODING **namedEncodingPtr,
        !           275:                     int *standalonePtr);
        !           276: 
        !           277: int XmlInitEncoding(INIT_ENCODING *, const ENCODING **, const char *name);
        !           278: const ENCODING *XmlGetUtf8InternalEncoding(void);
        !           279: const ENCODING *XmlGetUtf16InternalEncoding(void);
        !           280: int FASTCALL XmlUtf8Encode(int charNumber, char *buf);
        !           281: int FASTCALL XmlUtf16Encode(int charNumber, unsigned short *buf);
        !           282: int XmlSizeOfUnknownEncoding(void);
        !           283: 
        !           284: 
        !           285: typedef int (XMLCALL *CONVERTER) (void *userData, const char *p);
        !           286: 
        !           287: ENCODING *
        !           288: XmlInitUnknownEncoding(void *mem,
        !           289:                        int *table,
        !           290:                        CONVERTER convert,
        !           291:                        void *userData);
        !           292: 
        !           293: int XmlParseXmlDeclNS(int isGeneralTextEntity,
        !           294:                       const ENCODING *enc,
        !           295:                       const char *ptr,
        !           296:                       const char *end,
        !           297:                       const char **badPtr,
        !           298:                       const char **versionPtr,
        !           299:                       const char **versionEndPtr,
        !           300:                       const char **encodingNamePtr,
        !           301:                       const ENCODING **namedEncodingPtr,
        !           302:                       int *standalonePtr);
        !           303: 
        !           304: int XmlInitEncodingNS(INIT_ENCODING *, const ENCODING **, const char *name);
        !           305: const ENCODING *XmlGetUtf8InternalEncodingNS(void);
        !           306: const ENCODING *XmlGetUtf16InternalEncodingNS(void);
        !           307: ENCODING *
        !           308: XmlInitUnknownEncodingNS(void *mem,
        !           309:                          int *table,
        !           310:                          CONVERTER convert,
        !           311:                          void *userData);
        !           312: #ifdef __cplusplus
        !           313: }
        !           314: #endif
        !           315: 
        !           316: #endif /* not XmlTok_INCLUDED */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>