public Split ( LinkedListNode |
||
splitNode | LinkedListNode |
|
after | bool | |
return |
static ElementToken Split(ElementToken token, int index) { for (var node = token.Tokens.First; ; node = node.Next) { var r = node.Value; if (index == r.StartIndex) { return(token.Split(node, false)); } if (index < r.EndIndex) { return(SplitNode(token, node, index, false)); } } }
static ElementToken SplitBack(ElementToken token, int index) { for (var node = token.Tokens.Last; ; node = node.Previous) { var r = node.Value; if (index == r.EndIndex) { return(token.Split(node, true)); } if (index > r.StartIndex) { return(SplitNode(token, node, index, true)); } } }
static ElementToken SplitNode(ElementToken token, LinkedListNode <ParseToken> node, int index, bool back) { var curToken = node.Value; ParseToken newToken = null; if (curToken is TextToken) { // split text newToken = ((TextToken)curToken).Split(index); } else if (curToken is ElementToken) { newToken = back ? SplitBack((ElementToken)curToken, index) : Split((ElementToken)curToken, index); } // add new node after curNode token.Tokens.AddAfter(node, newToken); // split by node return(token.Split(node, true)); }
static ElementToken SplitBack(ElementToken token, int index) { for (var node = token.Tokens.Last; ; node = node.Previous) { var r = node.Value; if (index == r.EndIndex) return token.Split(node, true); if (index > r.StartIndex) return SplitNode(token, node, index, true); } }
static ElementToken Split(ElementToken token, int index) { for (var node = token.Tokens.First; ; node = node.Next) { var r = node.Value; if (index == r.StartIndex) return token.Split(node, false); if (index < r.EndIndex) return SplitNode(token, node, index, false); } }
static ElementToken SplitNode(ElementToken token, LinkedListNode<ParseToken> node, int index, bool back) { var curToken = node.Value; ParseToken newToken = null; if (curToken is TextToken) { // split text newToken = ((TextToken)curToken).Split(index); } else if (curToken is ElementToken) { newToken = back ? SplitBack((ElementToken)curToken, index) : Split((ElementToken)curToken, index); } // add new node after curNode token.Tokens.AddAfter(node, newToken); // split by node return token.Split(node, true); }