OLD | NEW |
| (Empty) |
1 /* | |
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | |
3 * | |
4 * Use of this source code is governed by a BSD-style license | |
5 * that can be found in the LICENSE file in the root of the source | |
6 * tree. An additional intellectual property rights grant can be found | |
7 * in the file PATENTS. All contributing project authors may | |
8 * be found in the AUTHORS file in the root of the source tree. | |
9 */ | |
10 | |
11 #ifndef WEBRTC_LIBJINGLE_XMLLITE_XMLPARSER_H_ | |
12 #define WEBRTC_LIBJINGLE_XMLLITE_XMLPARSER_H_ | |
13 | |
14 #include <string> | |
15 | |
16 #include "webrtc/libjingle/xmllite/xmlnsstack.h" | |
17 #ifdef EXPAT_RELATIVE_PATH | |
18 #include "expat.h" | |
19 #else | |
20 #include "third_party/expat/v2_0_1/Source/lib/expat.h" | |
21 #endif // EXPAT_RELATIVE_PATH | |
22 | |
23 struct XML_ParserStruct; | |
24 typedef struct XML_ParserStruct* XML_Parser; | |
25 | |
26 namespace buzz { | |
27 | |
28 class XmlParseHandler; | |
29 class XmlParseContext; | |
30 class XmlParser; | |
31 | |
32 class XmlParseContext { | |
33 public: | |
34 virtual ~XmlParseContext() {} | |
35 virtual QName ResolveQName(const char * qname, bool isAttr) = 0; | |
36 virtual void RaiseError(XML_Error err) = 0; | |
37 virtual void GetPosition(unsigned long * line, unsigned long * column, | |
38 unsigned long * byte_index) = 0; | |
39 }; | |
40 | |
41 class XmlParseHandler { | |
42 public: | |
43 virtual ~XmlParseHandler() {} | |
44 virtual void StartElement(XmlParseContext * pctx, | |
45 const char * name, const char ** atts) = 0; | |
46 virtual void EndElement(XmlParseContext * pctx, | |
47 const char * name) = 0; | |
48 virtual void CharacterData(XmlParseContext * pctx, | |
49 const char * text, int len) = 0; | |
50 virtual void Error(XmlParseContext * pctx, | |
51 XML_Error errorCode) = 0; | |
52 }; | |
53 | |
54 class XmlParser { | |
55 public: | |
56 static void ParseXml(XmlParseHandler * pxph, std::string text); | |
57 | |
58 explicit XmlParser(XmlParseHandler * pxph); | |
59 bool Parse(const char * data, size_t len, bool isFinal); | |
60 void Reset(); | |
61 virtual ~XmlParser(); | |
62 | |
63 // expat callbacks | |
64 void ExpatStartElement(const char * name, const char ** atts); | |
65 void ExpatEndElement(const char * name); | |
66 void ExpatCharacterData(const char * text, int len); | |
67 void ExpatXmlDecl(const char * ver, const char * enc, int standalone); | |
68 | |
69 private: | |
70 | |
71 class ParseContext : public XmlParseContext { | |
72 public: | |
73 ParseContext(); | |
74 virtual ~ParseContext(); | |
75 virtual QName ResolveQName(const char * qname, bool isAttr); | |
76 virtual void RaiseError(XML_Error err) { if (!raised_) raised_ = err; } | |
77 virtual void GetPosition(unsigned long * line, unsigned long * column, | |
78 unsigned long * byte_index); | |
79 XML_Error RaisedError() { return raised_; } | |
80 void Reset(); | |
81 | |
82 void StartElement(); | |
83 void EndElement(); | |
84 void StartNamespace(const char * prefix, const char * ns); | |
85 void SetPosition(int line, int column, long byte_index); | |
86 | |
87 private: | |
88 XmlnsStack xmlnsstack_; | |
89 XML_Error raised_; | |
90 XML_Size line_number_; | |
91 XML_Size column_number_; | |
92 XML_Index byte_index_; | |
93 }; | |
94 | |
95 ParseContext context_; | |
96 XML_Parser expat_; | |
97 XmlParseHandler * pxph_; | |
98 bool sentError_; | |
99 }; | |
100 | |
101 } // namespace buzz | |
102 | |
103 #endif // WEBRTC_LIBJINGLE_XMLLITE_XMLPARSER_H_ | |
OLD | NEW |