File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / expat / lib / xmltok_ns.c
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 23:00:54 2012 UTC (12 years, 4 months ago) by misho
Branches: expat, MAIN
CVS tags: v2_1_0, v2_0_1p0, v2_0_1, HEAD
expat

    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>