SAX based XML parser

Dependents:   giken9_HTMLServer_Temp_Sample

Committer:
andrewbonney
Date:
Thu May 26 10:03:14 2011 +0000
Revision:
1:e96b2af301dd
Parent:
0:07919e3d6c56
Update to reduce buffer sizes

Who changed what in which revision?

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