package edu.stanford.nlp.trees.tregex.tsurgeon;
import edu.stanford.nlp.trees.Tree;
import edu.stanford.nlp.trees.Trees;
import edu.stanford.nlp.trees.tregex.TregexMatcher;
import edu.stanford.nlp.util.Pair;
/** Does a delete (NOT prune!) + insert operation
* @author Roger Levy (rog@stanford.edu)
*/
class MoveNode extends TsurgeonPattern {
TreeLocation l;
public MoveNode(TsurgeonPattern child, TreeLocation l) {
super("move", new TsurgeonPattern[] { child });
this.l = l;
}
@Override
protected void setRoot(TsurgeonPatternRoot root) {
super.setRoot(root);
l.setRoot(root);
}
@Override
public Tree evaluate(Tree t, TregexMatcher m) {
Tree nodeToMove = children[0].evaluate(t,m);
Tree oldParent = nodeToMove.parent(t);
oldParent.removeChild(Trees.objectEqualityIndexOf(oldParent,nodeToMove));
Pair<Tree,Integer> position = l.evaluate(t,m);
position.first().insertDtr(nodeToMove,position.second());
return t;
}
@Override
public String toString() {
return label + "(" + children[0] + " " + l + ")";
}
}