]> matita.cs.unibo.it Git - helm.git/blob - helm/DEVEL/mathml_editor/src/TNode.cc
Initial revision
[helm.git] / helm / DEVEL / mathml_editor / src / TNode.cc
1
2 #include "globals.hh"
3 #include "TNode.hh"
4
5 TNode
6 TNode::next() const
7 {
8   assert(node);
9   DOM::Node p = node.get_nextSibling();
10   while (p && p.get_nodeType() != DOM::Node::ELEMENT_NODE) p = p.get_nextSibling();
11   return p;
12 }
13
14 TNode
15 TNode::nextL() const
16 {
17   assert(node);
18   if (TNode n = next())
19     if (n.isG()) return n.firstL();
20     else return n;
21   else return TNode();
22 }
23
24 TNode
25 TNode::prev() const
26 {
27   assert(node);
28   DOM::Node p = node.get_previousSibling();
29   while (p && p.get_nodeType() != DOM::Node::ELEMENT_NODE) p = p.get_previousSibling();
30   return p;
31 }
32
33 TNode
34 TNode::prevL() const
35 {
36   assert(node);
37   if (TNode n = prev())
38     if (n.isG()) return n.lastL();
39     else return n;
40   else return TNode();
41 }
42
43 TNode
44 TNode::last() const
45 {
46   assert(node);
47   DOM::Node p = node.get_lastChild();
48   while (p && p.get_nodeType() != DOM::Node::ELEMENT_NODE) p = p.get_previousSibling();
49   return p;
50 }
51
52 TNode
53 TNode::lastL() const
54 {
55   assert(node);
56   if (TNode n = last())
57     if (n.isG()) return n.lastL();
58     else return n;
59   else
60     return TNode();
61 }
62
63 TNode
64 TNode::first() const
65 {
66   assert(node);
67   DOM::Node p = node.get_firstChild();
68   while (p && p.get_nodeType() != DOM::Node::ELEMENT_NODE) p = p.get_nextSibling();
69   return p;
70 }
71
72 TNode
73 TNode::firstL() const
74 {
75   assert(node);
76   if (TNode n = first())
77     if (n.isG()) return n.firstL();
78     else return n;
79   else
80     return TNode();
81 }
82
83 TNode
84 TNode::core() const
85 {
86   assert(node);
87   // check also if there is a macro embellishment (\not)
88   if (isSb() || isSp()) return first().core();
89   else return *this;
90 }
91
92 TNode
93 TNode::parent() const
94 {
95   assert(node);
96   DOM::Node p = node.get_parentNode();
97   assert(!p || p.get_nodeType() == DOM::Node::ELEMENT_NODE);
98   return p;
99 }
100
101 unsigned
102 TNode::size() const
103 {
104   assert(node);
105   unsigned size = 0;
106   TNode p = first();
107   while (p)
108     {
109       p = p.next();
110       size++;
111     }
112
113   return size;
114 }
115
116 void
117 TNode::remove() const
118 {
119   assert(node);
120   DOM::Node parent = node.get_parentNode();
121   parent.removeChild(node);
122 }
123
124 void
125 TNode::replace(const TNode& newNode) const
126 {
127   assert(node);
128   DOM::Node parent = node.get_parentNode();
129   parent.replaceChild(newNode.node, node);
130 }
131
132 void
133 TNode::insert(const TNode& newNode) const
134 {
135   assert(node);
136   DOM::Node parent = node.get_parentNode();
137   parent.insertBefore(newNode.node, node);
138 }
139
140 void
141 TNode::append(const TNode& newNode) const
142 {
143   assert(node);
144   node.appendChild(newNode.node);
145 }
146
147 void
148 TNode::append(const TNode& first, const TNode& last) const
149 {
150   assert(node);
151   assert(first);
152   assert(last);
153
154   TNode p = first;
155   while (p != last)
156     {
157       TNode next = p.next();
158       append(p);
159       p = next;
160     }
161 }
162
163 void
164 TNode::prepend(const TNode& newNode) const
165 {
166   assert(node);
167   DOM::Node parent = node.get_parentNode();
168   parent.insertBefore(newNode.node, parent.get_firstChild());
169 }
170
171 #if 0
172 #endif
173
174 TNode
175 TNode::child(unsigned pos) const
176 {
177   assert(node);
178   TNode p = first();
179   while (p && pos-- > 0) p = p.next();
180   return p;
181 }
182
183 std::string
184 TNode::get(const std::string& name) const
185 {
186   assert(node);
187   return node.getAttribute(name);
188 }
189
190 void
191 TNode::set(const std::string& name, const std::string& value) const
192 {
193   assert(node);
194   node.setAttribute(name, value);
195 }