private void OnTokenTextChanged(object sender, TextChangedEventArgs e) { var text = CaretPosition.GetTextInRun(LogicalDirection.Backward); if (TokenMatcher != null) { var token = TokenMatcher(text); if (token != null) { ReplaceTextWithToken(text, token); } if (CaretPosition.Paragraph != null) { _preventCallback = true; Text = string.Join(Splitter.ToString(), CaretPosition.Paragraph.Inlines.Where(x => x is InlineUIContainer).Cast <InlineUIContainer>().Select( x => { var contentPresenter = x.Child as ContentPresenter; return(contentPresenter != null ? contentPresenter.Content.ToString() : null); }).ToArray()); _preventCallback = false; } } }
/// <summary> /// determine last word typed in. Looks for list word until reaches space ' ', or any of the characters: '{', '}', '(', ')', '=' /// </summary> /// <returns></returns> private string GetLastWord() { //Get the last word in the text from current Caret position string txtBefore = CaretPosition.GetTextInRun(LogicalDirection.Backward); string txtAfter = CaretPosition.GetTextInRun(LogicalDirection.Forward); string[] tokens = txtBefore.Split(SplitTokens); string[] tokensAfter = txtAfter.Split(SplitTokens); string lastToken = tokens[tokens.Length - 1]; if (tokensAfter.Length > 0 && string.IsNullOrWhiteSpace(tokensAfter[0]) == false) { lastToken = lastToken + tokensAfter[0]; } // Make sure that the previous character isn't whitespace - eg. we haven't moved past the last word. if (txtBefore.Length > 0) { string previousString = new string(txtBefore[txtBefore.Length - 1], 1); if (string.IsNullOrWhiteSpace(previousString)) { lastToken = string.Empty; } } return(lastToken); }
/// <summary> /// Gets the current word at the cursor /// </summary> ///<param name="key">key currently pressed</param> private void SetWordAtPointer() { MergeRuns(); string textRunBack = CaretPosition.GetTextInRun(LogicalDirection.Backward); //text from CaretPosition backwards string textRunForward = CaretPosition.GetTextInRun(LogicalDirection.Forward); //text from CaretPosition forwards string wordBeforePointer = new string(textRunBack.Reverse().TakeWhile(c => char.IsLetterOrDigit(c) || (c == '_')).Reverse().ToArray()); string wordAfterPointer = new string(textRunForward.TakeWhile(c => char.IsLetterOrDigit(c) || (c == '_')).ToArray()); _wordAtPointer = wordBeforePointer + wordAfterPointer; _wordAtPointer = _wordAtPointer.ToUpper(); _startWord = CaretPosition.GetPositionAtOffset(-wordBeforePointer.Length); _endWord = CaretPosition.GetPositionAtOffset(wordAfterPointer.Length); if (_isInserting) { //CaretPosition = _endWord; } #if DEBUG Debug.Print("-----SetWordAtPointer()------"); Debug.Print("textRunBack = {0}", textRunBack); Debug.Print("textRunForward = {0}", textRunForward); Debug.Print("wordCharactersBeforePointer = {0}", wordBeforePointer); Debug.Print("wordCharactersAfterPointer = {0}", wordAfterPointer); Debug.Print("wordAtPointer = {0}", _wordAtPointer); #endif }
char lastTyped() { string _text = CaretPosition.GetTextInRun(LogicalDirection.Backward); if (!string.IsNullOrEmpty(_text)) { return(_text.Last()); } return(new char()); }
private void OnTokenTextChanged(object sender, TextChangedEventArgs e) { var text = CaretPosition.GetTextInRun(LogicalDirection.Backward); if (TokenMatcher != null) { var token = TokenMatcher(text); if (token != null) { ReplaceTextWithToken(text, token); } } }
private void RecognizeMatches() { if (_suppressRecognition) { return; } var text = CaretPosition.GetTextInRun(LogicalDirection.Backward); var match = string.Empty; var success = _tokenMatchers.Any(x => x.TryMatch(text, out match)); if (!success) { return; } var container = CreateTokenContainerFromString(match); AppendContainer(container); }
public void OnTagTextChanged(object sender, TextChangedEventArgs e) { string module = $"{_product}.{_class}.{MethodBase.GetCurrentMethod().Name}()"; try { var text = CaretPosition.GetTextInRun(LogicalDirection.Backward); if (TagMatcher != null) { var token = TagMatcher(text); if (token != null) { ReplaceTextWithTag(text, token); } } } catch (Exception ex) { new ReportError(Globals.Chem4WordV3.Telemetry, Globals.Chem4WordV3.WordTopLeft, module, ex).ShowDialog(); } }