X-Git-Url: http://matita.cs.unibo.it/gitweb/?p=helm.git;a=blobdiff_plain;f=helm%2FDEVEL%2Fmathml_editor%2Fsrc%2FTNode.cc;fp=helm%2FDEVEL%2Fmathml_editor%2Fsrc%2FTNode.cc;h=4235f3728f4d449e8cb8c4e9a3bce74b64f8cf1d;hp=0000000000000000000000000000000000000000;hb=89262281b6e83bd2321150f81f1a0583645eb0c8;hpb=b1fb6b8e1767d775bc452303629e95941d142bea diff --git a/helm/DEVEL/mathml_editor/src/TNode.cc b/helm/DEVEL/mathml_editor/src/TNode.cc new file mode 100644 index 000000000..4235f3728 --- /dev/null +++ b/helm/DEVEL/mathml_editor/src/TNode.cc @@ -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); +}