Пример #1
0
        private async void HighlightBrackets(object sender, EventArgs eventArgs)
        {
            if (TextArea.Caret.Offset < 1)
            {
                _bracketRenderer.SetHighlight(null);
                return;
            }

            var charBack    = Text[TextArea.Caret.Offset - 1];
            var charFront   = Text.Length > TextArea.Caret.Offset ? Text[TextArea.Caret.Offset] : '\0';
            var character   = '\0';
            var isInFrontOf = false;

            if (KeystrokeService.IsBracketOrParen(charBack))
            {
                character = charBack;
            }
            else if (KeystrokeService.IsBracketOrParen(charFront))
            {
                character   = charFront;
                isInFrontOf = true;
            }

            if (character != '\0')
            {
                var openToken      = default(TokenKind); //character == '{' ? TokenKind.LCurly : TokenKind.LParen;
                var closeToken     = default(TokenKind); // character == '}' ? TokenKind.RCurly : TokenKind.RParen;
                var startWithClose = false;

                if (character == '{' || character == '}')
                {
                    openToken  = TokenKind.LCurly;
                    closeToken = TokenKind.RCurly;
                }
                else
                {
                    openToken  = TokenKind.LParen;
                    closeToken = TokenKind.RParen;
                }

                if (character == '}' || character == ')')
                {
                    startWithClose = true;
                }

                var offset = TextArea.Caret.Offset;
                if (!isInFrontOf)
                {
                    offset -= 1;
                }

                var result = await _languageContext.FindBracketMatch(offset, openToken, closeToken, startWithClose);

                if (result == null)
                {
                    _bracketRenderer.SetHighlight(null);
                    return;
                }

                _bracketRenderer.SetHighlight(result);
            }
            else
            {
                _bracketRenderer.SetHighlight(null);
            }
        }