예제 #1
0
        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));
                }
            }
        }
예제 #2
0
        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));
                }
            }
        }
예제 #3
0
        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));
        }
예제 #4
0
        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);
              }
        }
예제 #5
0
        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);
              }
        }
예제 #6
0
        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);
        }