Home | History | Annotate | Line # | Download | only in lib
      1  1.1.1.2      maya /* This file is included!
      2  1.1.1.2      maya                             __  __            _
      3  1.1.1.2      maya                          ___\ \/ /_ __   __ _| |_
      4  1.1.1.2      maya                         / _ \\  /| '_ \ / _` | __|
      5  1.1.1.2      maya                        |  __//  \| |_) | (_| | |_
      6  1.1.1.2      maya                         \___/_/\_\ .__/ \__,_|\__|
      7  1.1.1.2      maya                                  |_| XML parser
      8  1.1.1.2      maya 
      9  1.1.1.2      maya    Copyright (c) 1997-2000 Thai Open Source Software Center Ltd
     10  1.1.1.3  christos    Copyright (c) 2000      Clark Cooper <coopercc (at) users.sourceforge.net>
     11  1.1.1.3  christos    Copyright (c) 2002      Greg Stein <gstein (at) users.sourceforge.net>
     12  1.1.1.3  christos    Copyright (c) 2002      Fred L. Drake, Jr. <fdrake (at) users.sourceforge.net>
     13  1.1.1.3  christos    Copyright (c) 2002-2006 Karl Waclawek <karl (at) waclawek.net>
     14  1.1.1.3  christos    Copyright (c) 2017-2021 Sebastian Pipping <sebastian (at) pipping.org>
     15  1.1.1.2      maya    Licensed under the MIT license:
     16  1.1.1.2      maya 
     17  1.1.1.2      maya    Permission is  hereby granted,  free of charge,  to any  person obtaining
     18  1.1.1.2      maya    a  copy  of  this  software   and  associated  documentation  files  (the
     19  1.1.1.2      maya    "Software"),  to  deal in  the  Software  without restriction,  including
     20  1.1.1.2      maya    without  limitation the  rights  to use,  copy,  modify, merge,  publish,
     21  1.1.1.2      maya    distribute, sublicense, and/or sell copies of the Software, and to permit
     22  1.1.1.2      maya    persons  to whom  the Software  is  furnished to  do so,  subject to  the
     23  1.1.1.2      maya    following conditions:
     24  1.1.1.2      maya 
     25  1.1.1.2      maya    The above copyright  notice and this permission notice  shall be included
     26  1.1.1.2      maya    in all copies or substantial portions of the Software.
     27  1.1.1.2      maya 
     28  1.1.1.2      maya    THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT  WARRANTY  OF  ANY  KIND,
     29  1.1.1.2      maya    EXPRESS  OR IMPLIED,  INCLUDING  BUT  NOT LIMITED  TO  THE WARRANTIES  OF
     30  1.1.1.2      maya    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
     31  1.1.1.2      maya    NO EVENT SHALL THE AUTHORS OR  COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
     32  1.1.1.2      maya    DAMAGES OR  OTHER LIABILITY, WHETHER  IN AN  ACTION OF CONTRACT,  TORT OR
     33  1.1.1.2      maya    OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
     34  1.1.1.2      maya    USE OR OTHER DEALINGS IN THE SOFTWARE.
     35      1.1      tron */
     36      1.1      tron 
     37      1.1      tron #ifdef XML_TOK_NS_C
     38      1.1      tron 
     39      1.1      tron const ENCODING *
     40  1.1.1.2      maya NS(XmlGetUtf8InternalEncoding)(void) {
     41      1.1      tron   return &ns(internal_utf8_encoding).enc;
     42      1.1      tron }
     43      1.1      tron 
     44      1.1      tron const ENCODING *
     45  1.1.1.2      maya NS(XmlGetUtf16InternalEncoding)(void) {
     46  1.1.1.2      maya #  if BYTEORDER == 1234
     47      1.1      tron   return &ns(internal_little2_encoding).enc;
     48  1.1.1.2      maya #  elif BYTEORDER == 4321
     49      1.1      tron   return &ns(internal_big2_encoding).enc;
     50  1.1.1.2      maya #  else
     51      1.1      tron   const short n = 1;
     52  1.1.1.2      maya   return (*(const char *)&n ? &ns(internal_little2_encoding).enc
     53  1.1.1.2      maya                             : &ns(internal_big2_encoding).enc);
     54  1.1.1.2      maya #  endif
     55      1.1      tron }
     56      1.1      tron 
     57  1.1.1.2      maya static const ENCODING *const NS(encodings)[] = {
     58  1.1.1.2      maya     &ns(latin1_encoding).enc, &ns(ascii_encoding).enc,
     59  1.1.1.2      maya     &ns(utf8_encoding).enc,   &ns(big2_encoding).enc,
     60  1.1.1.2      maya     &ns(big2_encoding).enc,   &ns(little2_encoding).enc,
     61  1.1.1.2      maya     &ns(utf8_encoding).enc /* NO_ENC */
     62      1.1      tron };
     63      1.1      tron 
     64      1.1      tron static int PTRCALL
     65      1.1      tron NS(initScanProlog)(const ENCODING *enc, const char *ptr, const char *end,
     66  1.1.1.2      maya                    const char **nextTokPtr) {
     67  1.1.1.2      maya   return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_PROLOG_STATE,
     68  1.1.1.2      maya                   ptr, end, nextTokPtr);
     69      1.1      tron }
     70      1.1      tron 
     71      1.1      tron static int PTRCALL
     72      1.1      tron NS(initScanContent)(const ENCODING *enc, const char *ptr, const char *end,
     73  1.1.1.2      maya                     const char **nextTokPtr) {
     74  1.1.1.2      maya   return initScan(NS(encodings), (const INIT_ENCODING *)enc, XML_CONTENT_STATE,
     75  1.1.1.2      maya                   ptr, end, nextTokPtr);
     76      1.1      tron }
     77      1.1      tron 
     78      1.1      tron int
     79      1.1      tron NS(XmlInitEncoding)(INIT_ENCODING *p, const ENCODING **encPtr,
     80  1.1.1.2      maya                     const char *name) {
     81      1.1      tron   int i = getEncodingIndex(name);
     82      1.1      tron   if (i == UNKNOWN_ENC)
     83      1.1      tron     return 0;
     84      1.1      tron   SET_INIT_ENC_INDEX(p, i);
     85      1.1      tron   p->initEnc.scanners[XML_PROLOG_STATE] = NS(initScanProlog);
     86      1.1      tron   p->initEnc.scanners[XML_CONTENT_STATE] = NS(initScanContent);
     87      1.1      tron   p->initEnc.updatePosition = initUpdatePosition;
     88      1.1      tron   p->encPtr = encPtr;
     89      1.1      tron   *encPtr = &(p->initEnc);
     90      1.1      tron   return 1;
     91      1.1      tron }
     92      1.1      tron 
     93      1.1      tron static const ENCODING *
     94  1.1.1.2      maya NS(findEncoding)(const ENCODING *enc, const char *ptr, const char *end) {
     95  1.1.1.2      maya #  define ENCODING_MAX 128
     96  1.1.1.3  christos   char buf[ENCODING_MAX] = "";
     97      1.1      tron   char *p = buf;
     98      1.1      tron   int i;
     99      1.1      tron   XmlUtf8Convert(enc, &ptr, end, &p, p + ENCODING_MAX - 1);
    100      1.1      tron   if (ptr != end)
    101      1.1      tron     return 0;
    102      1.1      tron   *p = 0;
    103      1.1      tron   if (streqci(buf, KW_UTF_16) && enc->minBytesPerChar == 2)
    104      1.1      tron     return enc;
    105      1.1      tron   i = getEncodingIndex(buf);
    106      1.1      tron   if (i == UNKNOWN_ENC)
    107      1.1      tron     return 0;
    108      1.1      tron   return NS(encodings)[i];
    109      1.1      tron }
    110      1.1      tron 
    111      1.1      tron int
    112  1.1.1.2      maya NS(XmlParseXmlDecl)(int isGeneralTextEntity, const ENCODING *enc,
    113  1.1.1.2      maya                     const char *ptr, const char *end, const char **badPtr,
    114  1.1.1.2      maya                     const char **versionPtr, const char **versionEndPtr,
    115  1.1.1.2      maya                     const char **encodingName, const ENCODING **encoding,
    116  1.1.1.2      maya                     int *standalone) {
    117  1.1.1.2      maya   return doParseXmlDecl(NS(findEncoding), isGeneralTextEntity, enc, ptr, end,
    118  1.1.1.2      maya                         badPtr, versionPtr, versionEndPtr, encodingName,
    119  1.1.1.2      maya                         encoding, standalone);
    120      1.1      tron }
    121      1.1      tron 
    122      1.1      tron #endif /* XML_TOK_NS_C */
    123