]> matita.cs.unibo.it Git - helm.git/blob - helm/DEVEL/mathml_editor/src/TNode.hh
Initial revision
[helm.git] / helm / DEVEL / mathml_editor / src / TNode.hh
1
2 #ifndef __TNode_hh__
3 #define __TNode_hh__
4
5 #include "dom.hh"
6 #include "globals.hh"
7 #include "TDictionary.hh"
8
9 class TNode
10 {
11 public:
12   TNode(void) : node(0) { };
13   TNode(const DOM::Node& n) : node(n) { };
14   TNode(const DOM::Element& elem) : node(elem) { };
15   TNode(const TNode& n) : node(n.node) { };
16
17   TNode next(void) const;
18   TNode nextL(void) const;
19   TNode prev(void) const;
20   TNode prevL(void) const;
21   TNode core(void) const;
22   TNode parent(void) const;
23   TNode first(void) const;
24   TNode firstL(void) const;
25   TNode last(void) const;
26   TNode lastL(void) const;
27   TNode child(unsigned) const;
28   unsigned size(void) const;
29   bool  empty(void) const { return !first().node; };
30   std::string value(void) const { return (*this)["val"]; };
31
32   class ProxyAttr
33   {
34   public:
35     ProxyAttr(const DOM::Element& n, const std::string& s) : node(n), name(s) { };
36     operator std::string() const { return node.getAttribute(name); };
37     ProxyAttr& operator=(const std::string& v) { node.setAttribute(name, v); };
38     bool       operator==(const std::string& v) const { return node.getAttribute(name) == v; };
39     bool       operator!=(const std::string& v) const { return node.getAttribute(name) != v; };
40   private:
41     DOM::Element node;
42     std::string  name;
43   };
44
45   operator bool() const { return node; };
46   DOM::Element element(void) const { return node; };
47   bool operator==(const TNode& n) const { return node == n.node; };
48   bool operator!=(const TNode& n) const { return node != n.node; };
49   TNode operator[](int i) const { return child(i); };
50   ProxyAttr operator[](const char* s) const { return ProxyAttr(node, s); };
51
52   //void  advance(const TNode&) const;
53   void  remove(void) const;
54   void  replace(const TNode&) const;
55   void  insert(const TNode&) const;
56   void  append(const TNode&) const;
57   void  append(const TNode&, const TNode&) const;
58   void  prepend(const TNode&) const;
59
60   std::string get(const std::string&) const;
61   void  set(const std::string&, const std::string&) const;
62
63   std::string name(void) const { return node.get_localName(); };
64   std::string nameC(void) const { return node.getAttribute("name"); };
65   bool  hasId(void) const { return node.hasAttribute("id"); };
66   bool  is(const std::string& s) const { return name() == s; };
67   bool  isG(void) const { return is("g"); };
68   bool  isSb(void) const { return is("sb"); };
69   bool  isSp(void) const { return is("sp"); };
70   bool  isC(void) const { return is("c"); }
71   bool  isC(const std::string& name) const
72   { return isC() && node.getAttribute("name") == name; };
73
74   friend class TDocument;
75
76 private:
77   DOM::Element node;
78 };
79
80 #endif // __TNode_hh__