Ejemplo n.º 1
0
        void TextBuffer_ChangedHighPriority(object sender, Microsoft.VisualStudio.Text.TextContentChangedEventArgs e)
        {
            foreach (var change in e.Changes)
            {
                if (change.NewText.EndsWith("{"))
                {
                    var line    = e.After.GetLineFromPosition(change.NewPosition);
                    int linenum = line.LineNumber;

                    if (linenum > 0)
                    {
                        int?ind = lineindenter.GetDesiredIndentation(line);
                        int indentLevel;
                        if (ind == null)
                        {
                            int    previousLine     = LineIndenter.GetPreviousNonWhitespaceLine(e.After, linenum);
                            string previousLineText = e.After.GetLineFromLineNumber(previousLine).GetText();
                            indentLevel = LineIndenter.GetIndentLevel(e.After, previousLineText);
                        }
                        else
                        {
                            indentLevel = (int)ind;
                        }

                        Span s = new Span(line.Start, line.Length - 1);
                        if (string.IsNullOrWhiteSpace(e.After.GetText(s)))
                        {
                            e.After.TextBuffer.Replace(s, new string(' ', indentLevel));
                        }
                    }
                }
                else if (change.NewText.EndsWith("}"))
                {
                    var line = e.After.GetLineFromPosition(change.NewPosition);

                    FormatClosingBrace(e.After, line);
                }
            }
        }