private void print(int level, StringBuilder sb, Node<Structure> n) { startTag(level, sb, n.getItem()); int offset = 0; for (final Node<Structure> child : n.getChildren()) { addText( level + 1, sb, n.getItem(), offset, AnnotationNode.getBegin(child) - AnnotationNode.getBegin(n)); print(level + 1, sb, child); offset = AnnotationNode.getEnd(child) - AnnotationNode.getBegin(n); } addText( level + 1, sb, n.getItem(), offset, AnnotationNode.getEnd(n) - AnnotationNode.getBegin(n)); endTag(level, sb, n.getItem()); }