public static WordPosition GetWordByPosition(WordPosition[] words, int position)
        {
            WordPosition wordPosition = new WordPosition();

            foreach (var item in words)
            {
                if (position > item.Start && position < item.End)
                {
                    wordPosition = item;
                    break;
                }
            }

            return(wordPosition);
        }
Esempio n. 2
0
        internal void SelectNextWord()
        {
            _view.Selection.Clear();
            _view.Caret.IsHidden = true;

            // Faz com que o "cursor" vá para o final da palavra, pois aqui é SelectNextWord, ou seja a próxima palavra
            for (int i = 0; i < _trackPointList.Count; i++)
            {
                ITrackingPoint cursorPos = _trackPointList[i];

                WordPosition nextWord = WordPosition.NextWord(_view.TextViewLines.FormattedSpan.GetText(), cursorPos.GetPosition(_view.TextSnapshot));

                int newCursorPosition = ((_trackPointList[i].GetPosition(_view.TextSnapshot) + nextWord.Word.Length) < _view.TextViewLines.FormattedSpan.GetText().Length) && (nextWord.Word.Length > 0) ?
                                        (_trackPointList[i].GetPosition(_view.TextSnapshot) + nextWord.Word.Length) :
                                        _view.TextViewLines.FormattedSpan.GetText().Length - 1;

                _trackPointList[i] = _view.TextSnapshot.CreateTrackingPoint(new SnapshotPoint(_view.TextSnapshot, newCursorPosition), PointTrackingMode.Positive);

                if (_selectionList.Count < _trackPointList.Count)
                {
                    _selectionList.Add(new TextSelection(
                                           new Tuple <ITrackingPoint, ITrackingPoint>
                                           (
                                               _view.TextSnapshot.CreateTrackingPoint(new SnapshotPoint(_view.TextSnapshot, nextWord.Start), PointTrackingMode.Positive),
                                               _view.TextSnapshot.CreateTrackingPoint(new SnapshotPoint(_view.TextSnapshot, nextWord.End), PointTrackingMode.Positive)
                                           ),
                                           _view));
                }
                else
                {
                    _selectionList[i].Move(newCursorPosition);
                }
            }

            Selecting = true;

            RedrawScreen();

            // Diz que está editando
            Editing = true;
        }
        public static WordPosition NextWord(string text, int init)
        {
            char[] delimiterChars = { ' ', ',', '.', ':', '\t', '(', ')', '{', '}', '[', ']' };

            WordPosition[] wordsPosition = WordPosition.Parse(text, delimiterChars);

            int index = 0;

            for (int i = 0; i < wordsPosition.Length; i++)
            {
                WordPosition item = wordsPosition[i];

                if (init >= item.Start && init <= item.End)
                {
                    index = i;
                    break;
                }
            }

            // Próxima palavra | Se o índice já for o último, a próxima palavra é a última
            WordPosition wordPosition = wordsPosition[(wordsPosition.Length == (index + 1)) ? index : (index + 1)];

            return(wordPosition);
        }