BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
xmltok_ns.c
Go to the documentation of this file.
1const ENCODING* NS( XmlGetUtf8InternalEncoding )() {
2 return &ns( internal_utf8_encoding ).enc;
3}
4
5const ENCODING* NS( XmlGetUtf16InternalEncoding )() {
6#if XML_BYTE_ORDER == 12
7 return &ns( internal_little2_encoding ).enc;
8#elif XML_BYTE_ORDER == 21
9 return &ns( internal_big2_encoding ).enc;
10#else
11 const short n = 1;
12 return *(const char*)&n ? &ns( internal_little2_encoding ).enc
13 : &ns( internal_big2_encoding ).enc;
14#endif
15}
16
17static const ENCODING* NS( encodings )[] = {
18 &ns( latin1_encoding ).enc, &ns( ascii_encoding ).enc, &ns( utf8_encoding ).enc,
19 &ns( big2_encoding ).enc, &ns( big2_encoding ).enc, &ns( little2_encoding ).enc,
20 &ns( utf8_encoding ).enc /* NO_ENC */
21};
22
23static int NS( initScanProlog )( const ENCODING* enc, const char* ptr, const char* end,
24 const char** nextTokPtr ) {
25 return initScan( NS( encodings ), (const INIT_ENCODING*)enc, XML_PROLOG_STATE, ptr, end,
26 nextTokPtr );
27}
28
29static int NS( initScanContent )( const ENCODING* enc, const char* ptr, const char* end,
30 const char** nextTokPtr ) {
31 return initScan( NS( encodings ), (const INIT_ENCODING*)enc, XML_CONTENT_STATE, ptr, end,
32 nextTokPtr );
33}
34
35int NS( XmlInitEncoding )( INIT_ENCODING* p, const ENCODING** encPtr, const char* name ) {
36 int i = getEncodingIndex( name );
37 if ( i == UNKNOWN_ENC ) return 0;
38 INIT_ENC_INDEX( p ) = (char)i;
39 p->initEnc.scanners[XML_PROLOG_STATE] = NS( initScanProlog );
40 p->initEnc.scanners[XML_CONTENT_STATE] = NS( initScanContent );
41 p->initEnc.updatePosition = initUpdatePosition;
42 p->encPtr = encPtr;
43 *encPtr = &( p->initEnc );
44 return 1;
45}
46
47static const ENCODING* NS( findEncoding )( const ENCODING* enc, const char* ptr,
48 const char* end ) {
49#define ENCODING_MAX 128
50 char buf[ENCODING_MAX];
51 char* p = buf;
52 int i;
53 XmlUtf8Convert( enc, &ptr, end, &p, p + ENCODING_MAX - 1 );
54 if ( ptr != end ) return 0;
55 *p = 0;
56 if ( streqci( buf, "UTF-16" ) && enc->minBytesPerChar == 2 ) return enc;
57 i = getEncodingIndex( buf );
58 if ( i == UNKNOWN_ENC ) return 0;
59 return NS( encodings )[i];
60}
61
62int NS( XmlParseXmlDecl )( int isGeneralTextEntity, const ENCODING* enc, const char* ptr,
63 const char* end, const char** badPtr, const char** versionPtr,
64 const char** encodingName, const ENCODING** encoding,
65 int* standalone ) {
66 return doParseXmlDecl( NS( findEncoding ), isGeneralTextEntity, enc, ptr, end, badPtr,
67 versionPtr, encodingName, encoding, standalone );
68}
const Int_t n
#define NS(x)
Definition xmltok.c:1354
#define INIT_ENC_INDEX(enc)
Definition xmltok.c:1242
#define ns(x)
Definition xmltok.c:1355
@ UNKNOWN_ENC
Definition xmltok.c:1212
#define ENCODING_MAX
int NS XmlInitEncoding(INIT_ENCODING *p, const ENCODING **encPtr, const char *name)
Definition xmltok_ns.c:35
const ENCODING *NS XmlGetUtf16InternalEncoding()
Definition xmltok_ns.c:5
const ENCODING *NS XmlGetUtf8InternalEncoding()
Definition xmltok_ns.c:1
int NS XmlParseXmlDecl(int isGeneralTextEntity, const ENCODING *enc, const char *ptr, const char *end, const char **badPtr, const char **versionPtr, const char **encodingName, const ENCODING **encoding, int *standalone)
Definition xmltok_ns.c:62