2 NS(XmlGetUtf8InternalEncoding
)(void)
4 return &ns(internal_utf8_encoding
).enc
;
8 NS(XmlGetUtf16InternalEncoding
)(void)
11 return &ns(internal_little2_encoding
).enc
;
12 #elif BYTEORDER == 4321
13 return &ns(internal_big2_encoding
).enc
;
16 return (*(const char *)&n
17 ? &ns(internal_little2_encoding
).enc
18 : &ns(internal_big2_encoding
).enc
);
22 static const ENCODING
*NS(encodings
)[] = {
23 &ns(latin1_encoding
).enc
,
24 &ns(ascii_encoding
).enc
,
25 &ns(utf8_encoding
).enc
,
26 &ns(big2_encoding
).enc
,
27 &ns(big2_encoding
).enc
,
28 &ns(little2_encoding
).enc
,
29 &ns(utf8_encoding
).enc
/* NO_ENC */
33 NS(initScanProlog
)(const ENCODING
*enc
, const char *ptr
, const char *end
,
34 const char **nextTokPtr
)
36 return initScan(NS(encodings
), (const INIT_ENCODING
*)enc
,
37 XML_PROLOG_STATE
, ptr
, end
, nextTokPtr
);
41 NS(initScanContent
)(const ENCODING
*enc
, const char *ptr
, const char *end
,
42 const char **nextTokPtr
)
44 return initScan(NS(encodings
), (const INIT_ENCODING
*)enc
,
45 XML_CONTENT_STATE
, ptr
, end
, nextTokPtr
);
49 NS(XmlInitEncoding
)(INIT_ENCODING
*p
, const ENCODING
**encPtr
,
52 int i
= getEncodingIndex(name
);
55 SET_INIT_ENC_INDEX(p
, i
);
56 p
->initEnc
.scanners
[XML_PROLOG_STATE
] = NS(initScanProlog
);
57 p
->initEnc
.scanners
[XML_CONTENT_STATE
] = NS(initScanContent
);
58 p
->initEnc
.updatePosition
= initUpdatePosition
;
60 *encPtr
= &(p
->initEnc
);
64 static const ENCODING
*
65 NS(findEncoding
)(const ENCODING
*enc
, const char *ptr
, const char *end
)
67 #define ENCODING_MAX 128
68 char buf
[ENCODING_MAX
];
71 XmlUtf8Convert(enc
, &ptr
, end
, &p
, p
+ ENCODING_MAX
- 1);
75 if (streqci(buf
, KW_UTF_16
) && enc
->minBytesPerChar
== 2)
77 i
= getEncodingIndex(buf
);
80 return NS(encodings
)[i
];
84 NS(XmlParseXmlDecl
)(int isGeneralTextEntity
,
89 const char **versionPtr
,
90 const char **versionEndPtr
,
91 const char **encodingName
,
92 const ENCODING
**encoding
,
95 return doParseXmlDecl(NS(findEncoding
),