X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2FDEVEL%2Fmathml_editor%2Fsrc%2FTNode.hh;fp=helm%2FDEVEL%2Fmathml_editor%2Fsrc%2FTNode.hh;h=dde315d36a05d787740afc8120353d11992e2151;hb=30060cffed61b88fe53e4d6386b606050d6dfda0;hp=0000000000000000000000000000000000000000;hpb=e6927665462cbbace76cff1b17d4f8badcb44eda;p=helm.git diff --git a/helm/DEVEL/mathml_editor/src/TNode.hh b/helm/DEVEL/mathml_editor/src/TNode.hh new file mode 100644 index 000000000..dde315d36 --- /dev/null +++ b/helm/DEVEL/mathml_editor/src/TNode.hh @@ -0,0 +1,80 @@ + +#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__