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