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); }
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); }