+
+#ifndef __TNode_hh__
+#define __TNode_hh__
+
+#include "dom.hh"
+#include "globals.hh"
+#include "TDictionary.hh"
+
+class TNode
+{
+public:
+ TNode(void) : node(0) { };
+ TNode(const DOM::Node& n) : node(n) { };
+ TNode(const DOM::Element& elem) : node(elem) { };
+ TNode(const TNode& n) : node(n.node) { };
+
+ TNode next(void) const;
+ TNode nextL(void) const;
+ TNode prev(void) const;
+ TNode prevL(void) const;
+ TNode core(void) const;
+ TNode parent(void) const;
+ TNode first(void) const;
+ TNode firstL(void) const;
+ TNode last(void) const;
+ TNode lastL(void) const;
+ TNode child(unsigned) const;
+ unsigned size(void) const;
+ bool empty(void) const { return !first().node; };
+ std::string value(void) const { return (*this)["val"]; };
+
+ class ProxyAttr
+ {
+ public:
+ ProxyAttr(const DOM::Element& n, const std::string& s) : node(n), name(s) { };
+ operator std::string() const { return node.getAttribute(name); };
+ ProxyAttr& operator=(const std::string& v) { node.setAttribute(name, v); };
+ bool operator==(const std::string& v) const { return node.getAttribute(name) == v; };
+ bool operator!=(const std::string& v) const { return node.getAttribute(name) != v; };
+ private:
+ DOM::Element node;
+ std::string name;
+ };
+
+ operator bool() const { return node; };
+ DOM::Element element(void) const { return node; };
+ bool operator==(const TNode& n) const { return node == n.node; };
+ bool operator!=(const TNode& n) const { return node != n.node; };
+ TNode operator[](int i) const { return child(i); };
+ ProxyAttr operator[](const char* s) const { return ProxyAttr(node, s); };
+
+ //void advance(const TNode&) const;
+ void remove(void) const;
+ void replace(const TNode&) const;
+ void insert(const TNode&) const;
+ void append(const TNode&) const;
+ void append(const TNode&, const TNode&) const;
+ void prepend(const TNode&) const;
+
+ std::string get(const std::string&) const;
+ void set(const std::string&, const std::string&) const;
+
+ std::string name(void) const { return node.get_localName(); };
+ std::string nameC(void) const { return node.getAttribute("name"); };
+ bool hasId(void) const { return node.hasAttribute("id"); };
+ bool is(const std::string& s) const { return name() == s; };
+ bool isG(void) const { return is("g"); };
+ bool isSb(void) const { return is("sb"); };
+ bool isSp(void) const { return is("sp"); };
+ bool isC(void) const { return is("c"); }
+ bool isC(const std::string& name) const
+ { return isC() && node.getAttribute("name") == name; };
+
+ friend class TDocument;
+
+private:
+ DOM::Element node;
+};
+
+#endif // __TNode_hh__