]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/DEVEL/mathml_editor/src/TNode.cc
Initial revision
[helm.git] / helm / DEVEL / mathml_editor / src / TNode.cc
diff --git a/helm/DEVEL/mathml_editor/src/TNode.cc b/helm/DEVEL/mathml_editor/src/TNode.cc
new file mode 100644 (file)
index 0000000..4235f37
--- /dev/null
@@ -0,0 +1,195 @@
+
+#include "globals.hh"
+#include "TNode.hh"
+
+TNode
+TNode::next() const
+{
+  assert(node);
+  DOM::Node p = node.get_nextSibling();
+  while (p && p.get_nodeType() != DOM::Node::ELEMENT_NODE) p = p.get_nextSibling();
+  return p;
+}
+
+TNode
+TNode::nextL() const
+{
+  assert(node);
+  if (TNode n = next())
+    if (n.isG()) return n.firstL();
+    else return n;
+  else return TNode();
+}
+
+TNode
+TNode::prev() const
+{
+  assert(node);
+  DOM::Node p = node.get_previousSibling();
+  while (p && p.get_nodeType() != DOM::Node::ELEMENT_NODE) p = p.get_previousSibling();
+  return p;
+}
+
+TNode
+TNode::prevL() const
+{
+  assert(node);
+  if (TNode n = prev())
+    if (n.isG()) return n.lastL();
+    else return n;
+  else return TNode();
+}
+
+TNode
+TNode::last() const
+{
+  assert(node);
+  DOM::Node p = node.get_lastChild();
+  while (p && p.get_nodeType() != DOM::Node::ELEMENT_NODE) p = p.get_previousSibling();
+  return p;
+}
+
+TNode
+TNode::lastL() const
+{
+  assert(node);
+  if (TNode n = last())
+    if (n.isG()) return n.lastL();
+    else return n;
+  else
+    return TNode();
+}
+
+TNode
+TNode::first() const
+{
+  assert(node);
+  DOM::Node p = node.get_firstChild();
+  while (p && p.get_nodeType() != DOM::Node::ELEMENT_NODE) p = p.get_nextSibling();
+  return p;
+}
+
+TNode
+TNode::firstL() const
+{
+  assert(node);
+  if (TNode n = first())
+    if (n.isG()) return n.firstL();
+    else return n;
+  else
+    return TNode();
+}
+
+TNode
+TNode::core() const
+{
+  assert(node);
+  // check also if there is a macro embellishment (\not)
+  if (isSb() || isSp()) return first().core();
+  else return *this;
+}
+
+TNode
+TNode::parent() const
+{
+  assert(node);
+  DOM::Node p = node.get_parentNode();
+  assert(!p || p.get_nodeType() == DOM::Node::ELEMENT_NODE);
+  return p;
+}
+
+unsigned
+TNode::size() const
+{
+  assert(node);
+  unsigned size = 0;
+  TNode p = first();
+  while (p)
+    {
+      p = p.next();
+      size++;
+    }
+
+  return size;
+}
+
+void
+TNode::remove() const
+{
+  assert(node);
+  DOM::Node parent = node.get_parentNode();
+  parent.removeChild(node);
+}
+
+void
+TNode::replace(const TNode& newNode) const
+{
+  assert(node);
+  DOM::Node parent = node.get_parentNode();
+  parent.replaceChild(newNode.node, node);
+}
+
+void
+TNode::insert(const TNode& newNode) const
+{
+  assert(node);
+  DOM::Node parent = node.get_parentNode();
+  parent.insertBefore(newNode.node, node);
+}
+
+void
+TNode::append(const TNode& newNode) const
+{
+  assert(node);
+  node.appendChild(newNode.node);
+}
+
+void
+TNode::append(const TNode& first, const TNode& last) const
+{
+  assert(node);
+  assert(first);
+  assert(last);
+
+  TNode p = first;
+  while (p != last)
+    {
+      TNode next = p.next();
+      append(p);
+      p = next;
+    }
+}
+
+void
+TNode::prepend(const TNode& newNode) const
+{
+  assert(node);
+  DOM::Node parent = node.get_parentNode();
+  parent.insertBefore(newNode.node, parent.get_firstChild());
+}
+
+#if 0
+#endif
+
+TNode
+TNode::child(unsigned pos) const
+{
+  assert(node);
+  TNode p = first();
+  while (p && pos-- > 0) p = p.next();
+  return p;
+}
+
+std::string
+TNode::get(const std::string& name) const
+{
+  assert(node);
+  return node.getAttribute(name);
+}
+
+void
+TNode::set(const std::string& name, const std::string& value) const
+{
+  assert(node);
+  node.setAttribute(name, value);
+}