| Index: webrtc/libjingle/xmllite/xmlparser.h
|
| diff --git a/webrtc/libjingle/xmllite/xmlparser.h b/webrtc/libjingle/xmllite/xmlparser.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..131c585e4da1748fe79fa9486cbd45d773ab9af5
|
| --- /dev/null
|
| +++ b/webrtc/libjingle/xmllite/xmlparser.h
|
| @@ -0,0 +1,103 @@
|
| +/*
|
| + * Copyright 2004 The WebRTC Project Authors. All rights reserved.
|
| + *
|
| + * Use of this source code is governed by a BSD-style license
|
| + * that can be found in the LICENSE file in the root of the source
|
| + * tree. An additional intellectual property rights grant can be found
|
| + * in the file PATENTS. All contributing project authors may
|
| + * be found in the AUTHORS file in the root of the source tree.
|
| + */
|
| +
|
| +#ifndef WEBRTC_LIBJINGLE_XMLLITE_XMLPARSER_H_
|
| +#define WEBRTC_LIBJINGLE_XMLLITE_XMLPARSER_H_
|
| +
|
| +#include <string>
|
| +
|
| +#include "webrtc/libjingle/xmllite/xmlnsstack.h"
|
| +#ifdef EXPAT_RELATIVE_PATH
|
| +#include "expat.h"
|
| +#else
|
| +#include "third_party/expat/v2_0_1/Source/lib/expat.h"
|
| +#endif // EXPAT_RELATIVE_PATH
|
| +
|
| +struct XML_ParserStruct;
|
| +typedef struct XML_ParserStruct* XML_Parser;
|
| +
|
| +namespace buzz {
|
| +
|
| +class XmlParseHandler;
|
| +class XmlParseContext;
|
| +class XmlParser;
|
| +
|
| +class XmlParseContext {
|
| +public:
|
| + virtual ~XmlParseContext() {}
|
| + virtual QName ResolveQName(const char * qname, bool isAttr) = 0;
|
| + virtual void RaiseError(XML_Error err) = 0;
|
| + virtual void GetPosition(unsigned long * line, unsigned long * column,
|
| + unsigned long * byte_index) = 0;
|
| +};
|
| +
|
| +class XmlParseHandler {
|
| +public:
|
| + virtual ~XmlParseHandler() {}
|
| + virtual void StartElement(XmlParseContext * pctx,
|
| + const char * name, const char ** atts) = 0;
|
| + virtual void EndElement(XmlParseContext * pctx,
|
| + const char * name) = 0;
|
| + virtual void CharacterData(XmlParseContext * pctx,
|
| + const char * text, int len) = 0;
|
| + virtual void Error(XmlParseContext * pctx,
|
| + XML_Error errorCode) = 0;
|
| +};
|
| +
|
| +class XmlParser {
|
| +public:
|
| + static void ParseXml(XmlParseHandler * pxph, std::string text);
|
| +
|
| + explicit XmlParser(XmlParseHandler * pxph);
|
| + bool Parse(const char * data, size_t len, bool isFinal);
|
| + void Reset();
|
| + virtual ~XmlParser();
|
| +
|
| + // expat callbacks
|
| + void ExpatStartElement(const char * name, const char ** atts);
|
| + void ExpatEndElement(const char * name);
|
| + void ExpatCharacterData(const char * text, int len);
|
| + void ExpatXmlDecl(const char * ver, const char * enc, int standalone);
|
| +
|
| +private:
|
| +
|
| + class ParseContext : public XmlParseContext {
|
| + public:
|
| + ParseContext();
|
| + virtual ~ParseContext();
|
| + virtual QName ResolveQName(const char * qname, bool isAttr);
|
| + virtual void RaiseError(XML_Error err) { if (!raised_) raised_ = err; }
|
| + virtual void GetPosition(unsigned long * line, unsigned long * column,
|
| + unsigned long * byte_index);
|
| + XML_Error RaisedError() { return raised_; }
|
| + void Reset();
|
| +
|
| + void StartElement();
|
| + void EndElement();
|
| + void StartNamespace(const char * prefix, const char * ns);
|
| + void SetPosition(int line, int column, long byte_index);
|
| +
|
| + private:
|
| + XmlnsStack xmlnsstack_;
|
| + XML_Error raised_;
|
| + XML_Size line_number_;
|
| + XML_Size column_number_;
|
| + XML_Index byte_index_;
|
| + };
|
| +
|
| + ParseContext context_;
|
| + XML_Parser expat_;
|
| + XmlParseHandler * pxph_;
|
| + bool sentError_;
|
| +};
|
| +
|
| +} // namespace buzz
|
| +
|
| +#endif // WEBRTC_LIBJINGLE_XMLLITE_XMLPARSER_H_
|
|
|