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