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