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