Annotation of embedaddon/expat/lib/xmltok_ns.c, revision 1.1.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: /* This file is included! */
                      6: #ifdef XML_TOK_NS_C
                      7: 
                      8: const ENCODING *
                      9: NS(XmlGetUtf8InternalEncoding)(void)
                     10: {
                     11:   return &ns(internal_utf8_encoding).enc;
                     12: }
                     13: 
                     14: const ENCODING *
                     15: NS(XmlGetUtf16InternalEncoding)(void)
                     16: {
                     17: #if BYTEORDER == 1234
                     18:   return &ns(internal_little2_encoding).enc;
                     19: #elif BYTEORDER == 4321
                     20:   return &ns(internal_big2_encoding).enc;
                     21: #else
                     22:   const short n = 1;
                     23:   return (*(const char *)&n
                     24:           ? &ns(internal_little2_encoding).enc
                     25:           : &ns(internal_big2_encoding).enc);
                     26: #endif
                     27: }
                     28: 
                     29: static const ENCODING * const NS(encodings)[] = {
                     30:   &ns(latin1_encoding).enc,
                     31:   &ns(ascii_encoding).enc,
                     32:   &ns(utf8_encoding).enc,
                     33:   &ns(big2_encoding).enc,
                     34:   &ns(big2_encoding).enc,
                     35:   &ns(little2_encoding).enc,
                     36:   &ns(utf8_encoding).enc /* NO_ENC */
                     37: };
                     38: 
                     39: static int PTRCALL
                     40: NS(initScanProlog)(const ENCODING *enc, const char *ptr, const char *end,
                     41:                    const char **nextTokPtr)
                     42: {
                     43:   return initScan(NS(encodings), (const INIT_ENCODING *)enc,
                     44:                   XML_PROLOG_STATE, ptr, end, nextTokPtr);
                     45: }
                     46: 
                     47: static int PTRCALL
                     48: NS(initScanContent)(const ENCODING *enc, const char *ptr, const char *end,
                     49:                     const char **nextTokPtr)
                     50: {
                     51:   return initScan(NS(encodings), (const INIT_ENCODING *)enc,
                     52:                   XML_CONTENT_STATE, ptr, end, nextTokPtr);
                     53: }
                     54: 
                     55: int
                     56: NS(XmlInitEncoding)(INIT_ENCODING *p, const ENCODING **encPtr,
                     57:                     const char *name)
                     58: {
                     59:   int i = getEncodingIndex(name);
                     60:   if (i == UNKNOWN_ENC)
                     61:     return 0;
                     62:   SET_INIT_ENC_INDEX(p, i);
                     63:   p->initEnc.scanners[XML_PROLOG_STATE] = NS(initScanProlog);
                     64:   p->initEnc.scanners[XML_CONTENT_STATE] = NS(initScanContent);
                     65:   p->initEnc.updatePosition = initUpdatePosition;
                     66:   p->encPtr = encPtr;
                     67:   *encPtr = &(p->initEnc);
                     68:   return 1;
                     69: }
                     70: 
                     71: static const ENCODING *
                     72: NS(findEncoding)(const ENCODING *enc, const char *ptr, const char *end)
                     73: {
                     74: #define ENCODING_MAX 128
                     75:   char buf[ENCODING_MAX];
                     76:   char *p = buf;
                     77:   int i;
                     78:   XmlUtf8Convert(enc, &ptr, end, &p, p + ENCODING_MAX - 1);
                     79:   if (ptr != end)
                     80:     return 0;
                     81:   *p = 0;
                     82:   if (streqci(buf, KW_UTF_16) && enc->minBytesPerChar == 2)
                     83:     return enc;
                     84:   i = getEncodingIndex(buf);
                     85:   if (i == UNKNOWN_ENC)
                     86:     return 0;
                     87:   return NS(encodings)[i];
                     88: }
                     89: 
                     90: int
                     91: NS(XmlParseXmlDecl)(int isGeneralTextEntity,
                     92:                     const ENCODING *enc,
                     93:                     const char *ptr,
                     94:                     const char *end,
                     95:                     const char **badPtr,
                     96:                     const char **versionPtr,
                     97:                     const char **versionEndPtr,
                     98:                     const char **encodingName,
                     99:                     const ENCODING **encoding,
                    100:                     int *standalone)
                    101: {
                    102:   return doParseXmlDecl(NS(findEncoding),
                    103:                         isGeneralTextEntity,
                    104:                         enc,
                    105:                         ptr,
                    106:                         end,
                    107:                         badPtr,
                    108:                         versionPtr,
                    109:                         versionEndPtr,
                    110:                         encodingName,
                    111:                         encoding,
                    112:                         standalone);
                    113: }
                    114: 
                    115: #endif /* XML_TOK_NS_C */

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