public BracketSearchResult SearchBracket(TextDocument document, int offset) { if (offset > 0) { var 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), Math.Max(offset - 1, otherOffset)); SearchDefinition(document, result); return result; } } return null; }
public void SetHighlight(BracketSearchResult result) { if (this.result != result) { this.result = result; textView.InvalidateLayer(Layer); } }
void SearchDefinition(TextDocument document, BracketSearchResult result) { if (document.GetCharAt(result.OpeningOffset) != '{') return; // get line var documentLine = document.GetLineByOffset(result.OpeningOffset); while (documentLine != null && IsBracketOnly(document, documentLine)) documentLine = documentLine.PreviousLine; if (documentLine != null) { result.DefinitionHeaderOffset = documentLine.Offset; result.DefinitionHeaderLength = documentLine.Length; } }