示例#1
0
        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
        }
示例#4
0
        char lastTyped()
        {
            string _text = CaretPosition.GetTextInRun(LogicalDirection.Backward);

            if (!string.IsNullOrEmpty(_text))
            {
                return(_text.Last());
            }
            return(new char());
        }
示例#5
0
        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);
        }
示例#7
0
        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();
            }
        }