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