SubTextNode should be a logical subnode to TextNode.
public class SubTextNode : TextNode {
public SubTextNode(TextRange range, TextNode parent) { /* ... */ }
// Text is a reference to a substring of Parent.Text
public override string Text {
get { return Parent.Text.SubString(range.Start, range.End); }
set { Parent.Text.SubString(range.Start, range.End) = value; }
}
}
SubTextNode should be a logical subnode to TextNode.