summaryrefslogtreecommitdiff
path: root/cpp/src/IceXML/Parser.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceXML/Parser.h')
-rw-r--r--cpp/src/IceXML/Parser.h187
1 files changed, 187 insertions, 0 deletions
diff --git a/cpp/src/IceXML/Parser.h b/cpp/src/IceXML/Parser.h
new file mode 100644
index 00000000000..dd391156cf4
--- /dev/null
+++ b/cpp/src/IceXML/Parser.h
@@ -0,0 +1,187 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2016 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#ifndef ICE_XML_PARSER_H
+#define ICE_XML_PARSER_H
+
+#include <IceUtil/Shared.h>
+#include <IceUtil/Handle.h>
+#include <IceUtil/Exception.h>
+
+#include <vector>
+#include <map>
+
+#ifndef ICE_XML_API
+# ifdef ICE_XML_API_EXPORTS
+# define ICE_XML_API ICE_DECLSPEC_EXPORT
+# elif defined(ICE_STATIC_LIBS)
+# define ICE_XML_API /**/
+# else
+# define ICE_XML_API ICE_DECLSPEC_IMPORT
+# endif
+#endif
+
+//
+// Automatically link IceXML[D|++11|++11D].lib with Visual C++
+//
+
+#if !defined(ICE_BUILDING_ICE_XML) && defined(ICE_XML_API_EXPORTS)
+# define ICE_BUILDING_ICE_XML
+#endif
+
+#if defined(_MSC_VER) && !defined(ICE_BUILDING_ICE_XML)
+# pragma comment(lib, ICE_LIBNAME("IceXML"))
+#endif
+
+namespace IceXML
+{
+
+class ICE_XML_API ParserException : public IceUtil::Exception
+{
+public:
+
+ ParserException(const std::string&);
+ ParserException(const char*, int, const std::string&);
+ virtual ~ParserException() ICE_NOEXCEPT;
+
+ virtual std::string ice_id() const;
+ virtual void ice_print(std::ostream&) const;
+#ifndef ICE_CPP11_MAPPING
+ virtual ParserException* ice_clone() const;
+#endif
+ virtual void ice_throw() const;
+
+ std::string reason() const;
+
+private:
+
+ std::string _reason;
+ static const char* _name;
+};
+
+class Node;
+typedef IceUtil::Handle< Node > NodePtr;
+
+typedef std::vector<NodePtr> NodeList;
+
+class Element;
+typedef IceUtil::Handle< Element > ElementPtr;
+
+class Text;
+typedef IceUtil::Handle< Text > TextPtr;
+
+class Document;
+typedef IceUtil::Handle< Document > DocumentPtr;
+
+typedef std::map<std::string, std::string> Attributes;
+
+class ICE_XML_API Node : public IceUtil::Shared
+{
+public:
+
+ virtual ~Node();
+
+ virtual NodePtr getParent() const;
+ virtual std::string getName() const;
+ virtual std::string getValue() const;
+ virtual NodeList getChildren() const;
+ virtual Attributes getAttributes() const;
+ virtual std::string getAttribute(const std::string&) const;
+
+ virtual bool addChild(const NodePtr&);
+
+ virtual void destroy();
+
+ int getLine() const;
+ int getColumn() const;
+
+protected:
+
+ Node(const NodePtr&, const std::string&, const std::string&, int, int);
+
+ NodePtr _parent;
+ std::string _name;
+ std::string _value;
+ int _line;
+ int _column;
+};
+
+class ICE_XML_API Element : public Node
+{
+public:
+
+ Element(const NodePtr&, const std::string&, const Attributes&, int, int);
+ virtual ~Element();
+
+ virtual NodeList getChildren() const;
+ virtual Attributes getAttributes() const;
+ virtual std::string getAttribute(const std::string&) const;
+
+ virtual bool addChild(const NodePtr&);
+
+ virtual void destroy();
+
+private:
+
+ NodeList _children;
+ Attributes _attributes;
+};
+
+class ICE_XML_API Text : public Node
+{
+public:
+
+ Text(const NodePtr&, const std::string&, int, int);
+ virtual ~Text();
+};
+
+class ICE_XML_API Document : public Node
+{
+public:
+
+ Document();
+ virtual ~Document();
+
+ virtual NodeList getChildren() const;
+
+ virtual bool addChild(const NodePtr&);
+
+ virtual void destroy();
+
+private:
+
+ NodeList _children;
+};
+
+class ICE_XML_API Handler
+{
+public:
+
+ virtual ~Handler();
+
+ virtual void startElement(const std::string&, const Attributes&, int, int) = 0;
+ virtual void endElement(const std::string&, int, int) = 0;
+ virtual void characters(const std::string&, int, int) = 0;
+ virtual void error(const std::string&, int, int);
+};
+
+class ICE_XML_API Parser
+{
+public:
+
+ static DocumentPtr parse(const std::string&); // The given filename must be UTF-8 encoded
+ static DocumentPtr parse(std::istream&);
+
+ static void parse(const std::string&, Handler&);
+ static void parse(std::istream&, Handler&);
+};
+
+}
+
+#endif