コード例 #1
0
        private int[] GetCollapseSelectionRange(TextPosition clickPosition, VisualTextLine activeLine, int lineLength)
        {
            var startColumn = clickPosition.Column;
            var endColumn   = clickPosition.Column;

            if (endColumn + 1 <= lineLength)
            {
                endColumn += 1;
            }
            else
            {
                startColumn -= 1;
            }
            // move left from current position
            for (var i = clickPosition.Column; i >= 0; i--)
            {
                var charInfo = activeLine.GetCharInfoAt(i);

                if (!charInfo.IsCharacter && !char.IsLetterOrDigit(charInfo.Text[0]))
                {
                    startColumn = i;
                }
                else
                {
                    break;
                }
            }
            // move right from current position
            for (var i = clickPosition.Column; i < lineLength; i++)
            {
                var charInfo = activeLine.GetCharInfoAt(i);

                if (!charInfo.IsCharacter && !char.IsLetterOrDigit(charInfo.Text[0]))
                {
                    endColumn = i + 1;
                }
                else
                {
                    break;
                }
            }

            return(new[] { startColumn, endColumn });
        }
コード例 #2
0
        private VisualTextLine Cut(VisualTextLine line, int startIndex, int?count = null)
        {
            var substringLength = count == null ? line.Length - startIndex : count.Value;

            if (line is CollapsedVisualTextLine)
            {
                var charInfos = Enumerable.Range(startIndex, substringLength).Select(index => line.GetCharInfoAt(index));

                if (charInfos.Any(info => !info.IsCharacter))
                {
                    return(GetPartialLineBeforeCollapse(charInfos, line, startIndex, substringLength));
                }
                else
                {
                    return(GetPartialLineAfterCollapse(line, startIndex, substringLength));
                }
            }
            else
            {
                return(CutStandardLine(line, startIndex, substringLength));
            }
        }