/// <summary>
        /// Indents the current line assuming we already have normal indentation, applying syntax specific rules.
        /// </summary>
        /// <param name="editor">The editor.</param>
        /// <param name="onEnter">True if called after user pressed enter.</param>
        private void ConditionalIndent(ITextEditor editor, bool onEnter = false)
        {
            var currentLine = editor.CurrentLine();

            if (currentLine.PreviousLine != null)
            {
                var lastCharInfo = editor.Document.GetLastNonWhiteSpaceCharBefore(currentLine.PreviousLine.EndOffset, currentLine.PreviousLine.Offset);

                if (lastCharInfo.index != -1)
                {
                    if (lastCharInfo.character == '{' && onEnter)
                    {
                        var whiteSpace = editor.Document.GetWhitespaceAfter(editor.PreviousLine().Offset);

                        var currentChar = editor.Document.GetCharAt(editor.Offset);

                        if (char.IsWhiteSpace(currentChar) || currentChar == '}')
                        {
                            editor.Document.Insert(editor.Offset, "\n" + editor.Document.GetText(whiteSpace));

                            editor.Offset = editor.PreviousLine().EndOffset;
                        }
                    }
                    else if (lastCharInfo.character == ')')
                    {
                        var lineText = editor.CurrentLineText();

                        if (!lineText.Contains("{"))
                        {
                            editor.Document.Insert(editor.Offset, new string(' ', 4));
                        }
                    }
                    else
                    {
                        var previousLineText = editor.PreviousLineText().Trim();

                        if (previousLineText.EndsWith("else"))
                        {
                            var lineText = editor.CurrentLineText();

                            if (!lineText.Contains("{"))
                            {
                                editor.Document.Insert(editor.Offset, new string(' ', 4));
                            }
                        }
                    }
                }
            }
        }
        public bool AfterTextInput(ITextEditor editor, string inputText)
        {
            if (inputText == "\n")
            {
                var previousBracketInfo = GetPreviousBracketInfo(editor, editor.Offset - 1);

                if (previousBracketInfo.whitespace != null)
                {
                    Indent(editor, editor.Line, previousBracketInfo.whitespace, previousBracketInfo.character);
                }

                ConditionalIndent(editor, true);
            }
            else if (inputText == "{" || inputText == "}" || inputText == ";")
            {
                var prevLine = editor.PreviousLine();

                if (prevLine != null)
                {
                    var lastCharInfo = editor.Document.GetLastNonWhiteSpaceCharBefore(prevLine.EndOffset, prevLine.Offset);

                    if (!(inputText == "{" && lastCharInfo.character == '{'))
                    {
                        if (inputText == "{" || inputText == "}")
                        {
                            var lastBracketWhitespaceInfo = GetPreviousBracketInfo(editor, editor.Offset - 2);

                            Indent(editor, editor.Line, lastBracketWhitespaceInfo.whitespace, lastBracketWhitespaceInfo.character);
                        }
                        else
                        {
                            var lastBracketWhitespaceInfo = GetPreviousBracketInfo(editor, editor.Offset - 1);

                            if (lastCharInfo.character == ')')
                            {
                                Indent(editor, editor.Line, lastBracketWhitespaceInfo.whitespace, lastBracketWhitespaceInfo.character, lastBracketWhitespaceInfo.character == '{' ? 2 : 1, true);
                            }
                            else
                            {
                                var previousLineText = editor.PreviousLineText().Trim();

                                if (previousLineText.EndsWith("else"))
                                {
                                    var lineText = editor.CurrentLineText();

                                    if (!lineText.Contains("{"))
                                    {
                                        Indent(editor, editor.Line, lastBracketWhitespaceInfo.whitespace, lastBracketWhitespaceInfo.character, lastBracketWhitespaceInfo.character == '{' ? 2 : 1, true);
                                    }
                                }
                                else
                                {
                                    Indent(editor, editor.Line, lastBracketWhitespaceInfo.whitespace, lastBracketWhitespaceInfo.character);
                                }
                            }
                        }
                    }
                }
                else
                {
                    Indent(editor, editor.Line, null, null);
                }
            }

            return(false);
        }