public BracketSearchResult SearchBracket(IDocument document, int offset) { if (offset > 0) { char c = document.GetCharAt(offset - 1); int index = openingBrackets.IndexOf(c); int otherOffset = -1; if (index > -1) { otherOffset = SearchBracketForward(document, offset, openingBrackets[index], closingBrackets[index]); } index = closingBrackets.IndexOf(c); if (index > -1) { otherOffset = SearchBracketBackward(document, offset - 2, openingBrackets[index], closingBrackets[index]); } if (otherOffset > -1) { var result = new BracketSearchResult(Math.Min(offset - 1, otherOffset), 1, Math.Max(offset - 1, otherOffset), 1); SearchDefinition(document, result); return(result); } } return(null); }
public void SetHighlight(BracketSearchResult result) { if (this.result != result) { this.result = result; textView.InvalidateLayer(this.Layer); } }
public void SetHighlight(BracketSearchResult result) { if (_result != result) { _result = result; _textView.InvalidateLayer(Layer); } }
public void SetHighlight(BracketSearchResult result) { if (this._result != result) { this._result = result; this._textView.InvalidateLayer(this.Layer); } }
public void Show(BracketSearchResult bracketSearchResult) { ClosePopup(); if (bracketSearchResult == null || bracketSearchResult.DefinitionHeaderLength == 0) { return; } int startOffset = bracketSearchResult.DefinitionHeaderOffset; int endOffset = startOffset + bracketSearchResult.DefinitionHeaderLength; // show whole line even if the definition is only a part: DocumentLine firstLine = editor.Document.GetLineByOffset(startOffset); DocumentLine lastLine = editor.Document.GetLineByOffset(endOffset); TextEditor popupEditor = new TextEditor(); popupEditor.IsReadOnly = true; popupEditor.HorizontalScrollBarVisibility = ScrollBarVisibility.Hidden; popupEditor.VerticalScrollBarVisibility = ScrollBarVisibility.Hidden; popupEditor.CopySettingsFrom(editor); IHighlighter oldHighlighter = editor.GetRequiredService <IHighlighter>(); FixedHighlighter newHighlighter = FixedHighlighter.CreateView(oldHighlighter, firstLine.Offset, lastLine.EndOffset); popupEditor.Document = (TextDocument)newHighlighter.Document; popupEditor.TextArea.TextView.LineTransformers.Add(new HighlightingColorizer(newHighlighter)); popup = new ExtendedPopup(editor.TextArea); const double borderThickness = 1; popup.Child = new Border() { Child = popupEditor, BorderBrush = editor.TextArea.Foreground, BorderThickness = new Thickness(borderThickness) }; popup.HorizontalOffset = -borderThickness - editor.TextArea.TextView.ScrollOffset.X; popup.Placement = PlacementMode.Top; popup.PlacementTarget = editor.TextArea.TextView; this.currentStartOffset = firstLine.Offset; editor.TextArea.TextView.VisualLinesChanged += textView_VisualLinesChanged; if (editor.TextArea.TextView.VisualLinesValid) { textView_VisualLinesChanged(null, null); // open popup if necessary } }
public static void Run(ITextEditor editor, int offset) { BracketSearchResult result = editor.Language.BracketSearcher.SearchBracket(editor.Document, offset); if (result != null) { // place caret after the other bracket if (result.OpeningBracketOffset <= offset && offset <= result.OpeningBracketOffset + result.OpeningBracketLength) { editor.Select(result.ClosingBracketOffset + result.ClosingBracketLength, 0); } else { editor.Select(result.OpeningBracketOffset + result.OpeningBracketLength, 0); } } }
void SearchDefinition(IDocument document, BracketSearchResult result) { if (document.GetCharAt(result.OpeningBracketOffset) != '{') { return; } // get line var documentLine = document.GetLineByOffset(result.OpeningBracketOffset); while (documentLine != null && IsBracketOnly(document, documentLine)) { documentLine = documentLine.PreviousLine; } if (documentLine != null) { result.DefinitionHeaderOffset = documentLine.Offset; result.DefinitionHeaderLength = documentLine.Length; } }