GetTextWithoutCommentsAndStrings() static private méthode

static private GetTextWithoutCommentsAndStrings ( Mono doc, int start, int end ) : IEnumerable
doc Mono
start int
end int
Résultat IEnumerable
        public override bool Handle(TextEditor editor, DocumentContext ctx, KeyDescriptor descriptor)
        {
            if (descriptor.KeyChar == '\'' && editor.MimeType == "text/fsharp")
            {
                return(false);
            }
            int braceIndex = openBrackets.IndexOf(descriptor.KeyChar);

            if (braceIndex < 0)
            {
                return(false);
            }

            var extEditor = ((SourceEditorView)editor.Implementation).SourceEditorWidget.TextEditor;

            var line = extEditor.Document.GetLine(extEditor.Caret.Line);

            if (line == null)
            {
                return(false);
            }

            bool inStringOrComment = false;

            var stack = extEditor.SyntaxHighlighting.GetScopeStackAsync(Math.Max(0, extEditor.Caret.Offset - 2), CancellationToken.None).WaitAndGetResult(CancellationToken.None);

            foreach (var span in stack)
            {
                if (string.IsNullOrEmpty(span))
                {
                    continue;
                }
                if (span.Contains("string") ||
                    span.Contains("comment"))
                {
                    inStringOrComment = true;
                    break;
                }
            }
            char insertionChar         = '\0';
            bool insertMatchingBracket = false;

            if (!inStringOrComment)
            {
                char closingBrace = closingBrackets [braceIndex];
                char openingBrace = openBrackets [braceIndex];

                int count = 0;
                foreach (char curCh in ExtensibleTextEditor.GetTextWithoutCommentsAndStrings(extEditor.Document, 0, extEditor.Document.Length))
                {
                    if (curCh == openingBrace)
                    {
                        count++;
                    }
                    else if (curCh == closingBrace)
                    {
                        count--;
                    }
                }

                if (count >= 0)
                {
                    insertMatchingBracket = true;
                    insertionChar         = closingBrace;
                }
            }

            if (insertMatchingBracket)
            {
                using (var undo = editor.OpenUndoGroup()) {
                    editor.EnsureCaretIsNotVirtual();
                    editor.InsertAtCaret(insertionChar.ToString());
                    editor.CaretOffset--;
                    editor.StartSession(new SkipCharSession(insertionChar));
                }
                return(true);
            }

            return(false);
        }
        public override bool Handle(TextEditor editor, DocumentContext ctx, KeyDescriptor descriptor)
        {
            int braceIndex = openBrackets.IndexOf(descriptor.KeyChar);

            if (braceIndex < 0)
            {
                return(false);
            }

            var extEditor = ((SourceEditorView)editor.Implementation).SourceEditorWidget.TextEditor;

            var line = extEditor.Document.GetLine(extEditor.Caret.Line);

            if (line == null)
            {
                return(false);
            }

            bool inStringOrComment = false;

            var stack = line.StartSpan.Clone();
            var sm    = extEditor.Document.SyntaxMode as SyntaxMode;

            if (sm != null)
            {
                // extEditor.Caret.Offset - 1 means we care if we were inside string
                // before typing current char
                Mono.TextEditor.Highlighting.SyntaxModeService.ScanSpans(extEditor.Document, sm, sm, stack, line.Offset, extEditor.Caret.Offset - 1);
            }
            foreach (var span in stack)
            {
                if (string.IsNullOrEmpty(span.Color))
                {
                    continue;
                }
                if (span.Color.StartsWith("String", StringComparison.Ordinal) ||
                    span.Color.StartsWith("Comment", StringComparison.Ordinal) ||
                    span.Color.StartsWith("Xml Attribute Value", StringComparison.Ordinal))
                {
                    inStringOrComment = true;
                    break;
                }
            }
            char insertionChar         = '\0';
            bool insertMatchingBracket = false;

            if (!inStringOrComment)
            {
                char closingBrace = closingBrackets [braceIndex];
                char openingBrace = openBrackets [braceIndex];

                int count = 0;
                foreach (char curCh in ExtensibleTextEditor.GetTextWithoutCommentsAndStrings(extEditor.Document, 0, extEditor.Document.TextLength))
                {
                    if (curCh == openingBrace)
                    {
                        count++;
                    }
                    else if (curCh == closingBrace)
                    {
                        count--;
                    }
                }

                if (count >= 0)
                {
                    insertMatchingBracket = true;
                    insertionChar         = closingBrace;
                }
            }

            if (insertMatchingBracket)
            {
                using (var undo = editor.OpenUndoGroup()) {
                    editor.EnsureCaretIsNotVirtual();
                    editor.InsertAtCaret(insertionChar.ToString());
                    editor.CaretOffset--;
                    editor.StartSession(new SkipCharSession(insertionChar));
                }
                return(true);
            }

            return(false);
        }