xmltok_ns.c revision 178848
1178848Scokane/* Copyright (c) 1998, 1999 Thai Open Source Software Center Ltd 2178848Scokane See the file COPYING for copying permission. 3178848Scokane*/ 4178848Scokane 5178848Scokane/* This file is included! */ 6178848Scokane#ifdef XML_TOK_NS_C 7178848Scokane 8104349Sphkconst ENCODING * 9104349SphkNS(XmlGetUtf8InternalEncoding)(void) 10104349Sphk{ 11104349Sphk return &ns(internal_utf8_encoding).enc; 12104349Sphk} 13104349Sphk 14104349Sphkconst ENCODING * 15104349SphkNS(XmlGetUtf16InternalEncoding)(void) 16104349Sphk{ 17104349Sphk#if BYTEORDER == 1234 18104349Sphk return &ns(internal_little2_encoding).enc; 19104349Sphk#elif BYTEORDER == 4321 20104349Sphk return &ns(internal_big2_encoding).enc; 21104349Sphk#else 22104349Sphk const short n = 1; 23104349Sphk return (*(const char *)&n 24104349Sphk ? &ns(internal_little2_encoding).enc 25104349Sphk : &ns(internal_big2_encoding).enc); 26104349Sphk#endif 27104349Sphk} 28104349Sphk 29178848Scokanestatic const ENCODING * const NS(encodings)[] = { 30104349Sphk &ns(latin1_encoding).enc, 31104349Sphk &ns(ascii_encoding).enc, 32104349Sphk &ns(utf8_encoding).enc, 33104349Sphk &ns(big2_encoding).enc, 34104349Sphk &ns(big2_encoding).enc, 35104349Sphk &ns(little2_encoding).enc, 36104349Sphk &ns(utf8_encoding).enc /* NO_ENC */ 37104349Sphk}; 38104349Sphk 39178848Scokanestatic int PTRCALL 40104349SphkNS(initScanProlog)(const ENCODING *enc, const char *ptr, const char *end, 41104349Sphk const char **nextTokPtr) 42104349Sphk{ 43104349Sphk return initScan(NS(encodings), (const INIT_ENCODING *)enc, 44104349Sphk XML_PROLOG_STATE, ptr, end, nextTokPtr); 45104349Sphk} 46104349Sphk 47178848Scokanestatic int PTRCALL 48104349SphkNS(initScanContent)(const ENCODING *enc, const char *ptr, const char *end, 49104349Sphk const char **nextTokPtr) 50104349Sphk{ 51104349Sphk return initScan(NS(encodings), (const INIT_ENCODING *)enc, 52104349Sphk XML_CONTENT_STATE, ptr, end, nextTokPtr); 53104349Sphk} 54104349Sphk 55104349Sphkint 56104349SphkNS(XmlInitEncoding)(INIT_ENCODING *p, const ENCODING **encPtr, 57104349Sphk const char *name) 58104349Sphk{ 59104349Sphk int i = getEncodingIndex(name); 60104349Sphk if (i == UNKNOWN_ENC) 61104349Sphk return 0; 62104349Sphk SET_INIT_ENC_INDEX(p, i); 63104349Sphk p->initEnc.scanners[XML_PROLOG_STATE] = NS(initScanProlog); 64104349Sphk p->initEnc.scanners[XML_CONTENT_STATE] = NS(initScanContent); 65104349Sphk p->initEnc.updatePosition = initUpdatePosition; 66104349Sphk p->encPtr = encPtr; 67104349Sphk *encPtr = &(p->initEnc); 68104349Sphk return 1; 69104349Sphk} 70104349Sphk 71104349Sphkstatic const ENCODING * 72104349SphkNS(findEncoding)(const ENCODING *enc, const char *ptr, const char *end) 73104349Sphk{ 74104349Sphk#define ENCODING_MAX 128 75104349Sphk char buf[ENCODING_MAX]; 76104349Sphk char *p = buf; 77104349Sphk int i; 78104349Sphk XmlUtf8Convert(enc, &ptr, end, &p, p + ENCODING_MAX - 1); 79104349Sphk if (ptr != end) 80104349Sphk return 0; 81104349Sphk *p = 0; 82104349Sphk if (streqci(buf, KW_UTF_16) && enc->minBytesPerChar == 2) 83104349Sphk return enc; 84104349Sphk i = getEncodingIndex(buf); 85104349Sphk if (i == UNKNOWN_ENC) 86104349Sphk return 0; 87104349Sphk return NS(encodings)[i]; 88104349Sphk} 89104349Sphk 90104349Sphkint 91104349SphkNS(XmlParseXmlDecl)(int isGeneralTextEntity, 92104349Sphk const ENCODING *enc, 93104349Sphk const char *ptr, 94104349Sphk const char *end, 95104349Sphk const char **badPtr, 96104349Sphk const char **versionPtr, 97104349Sphk const char **versionEndPtr, 98104349Sphk const char **encodingName, 99104349Sphk const ENCODING **encoding, 100104349Sphk int *standalone) 101104349Sphk{ 102104349Sphk return doParseXmlDecl(NS(findEncoding), 103104349Sphk isGeneralTextEntity, 104104349Sphk enc, 105104349Sphk ptr, 106104349Sphk end, 107104349Sphk badPtr, 108104349Sphk versionPtr, 109104349Sphk versionEndPtr, 110104349Sphk encodingName, 111104349Sphk encoding, 112104349Sphk standalone); 113104349Sphk} 114178848Scokane 115178848Scokane#endif /* XML_TOK_NS_C */ 116