From 9fe1fca4bd442f8b418e01bfe67d5dda9f540e40 Mon Sep 17 00:00:00 2001 From: martin Date: Thu, 1 Jan 2009 23:41:22 +0000 Subject: [PATCH] Synedit: Highlight matching quotes (fallback previous quote or next quote) git-svn-id: trunk@18027 - --- components/synedit/synedit.pp | 48 +++++++++++++++++++++- components/synedit/syneditmarkupbracket.pp | 2 +- 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/components/synedit/synedit.pp b/components/synedit/synedit.pp index 1c693eb6c5..9f09924b40 100644 --- a/components/synedit/synedit.pp +++ b/components/synedit/synedit.pp @@ -9392,7 +9392,8 @@ function TCustomSynEdit.FindMatchingBracket(PhysStartBracket: TPoint; ): TPoint; // returns physical (screen) position of end bracket const - Brackets: array[0..5] of char = ('(', ')', '[', ']', '{', '}'); + // keep the ' last + Brackets: array[0..6] of char = ('(', ')', '[', ']', '{', '}', ''''); type TokenPos = Record X: Integer; Attr: Integer; end; var @@ -9479,6 +9480,46 @@ var CaretXY := LogicalToPhysicalPos(Result) end; + procedure DoFindMatchingQuote; + var + Test, BracketInc, BracketDec: char; + NumBrackets, Len: integer; + begin + StartPt:=Point(PosX,PosY); + GetHighlighterAttriAtRowColEx(StartPt, s1, BracketKind, TmpStart, TmpAttr); + if (TmpStart = PosX) and (Length(s1)>0) and (s1[Length(s1)] = '''') then begin + PosX := PosX + Length(s1) - 1; + DoMatchingBracketFound; + exit; + end; + if (TmpStart + Length(s1) - 1 = PosX) and (Length(s1)>0) and (s1[1] = '''') then begin + PosX := PosX - Length(s1) + 1; + DoMatchingBracketFound; + exit; + end; + MaxKnownTokenPos := 0; + Len := PosX; + // search until start of line + while PosX > 1 do begin + Dec(PosX); + Test := Line[PosX]; + if (Test = '''') and IsContextBracket then begin + DoMatchingBracketFound; + exit; + end; + end; + PosX := Len; + Len := Length(Line); + while PosX < Len do begin + Inc(PosX); + Test := Line[PosX]; + if (Test = '''') and IsContextBracket then begin + DoMatchingBracketFound; + exit; + end; + end; + end; + procedure DoFindMatchingBracket(i: integer); var Test, BracketInc, BracketDec: char; @@ -9562,7 +9603,10 @@ var for i := Low(Brackets) to High(Brackets) do begin if Test = Brackets[i] then begin // this is the bracket, get the matching one and the direction - DoFindMatchingBracket(i); + if Brackets[i] = '''' then + DoFindMatchingQuote + else + DoFindMatchingBracket(i); exit; end; end; diff --git a/components/synedit/syneditmarkupbracket.pp b/components/synedit/syneditmarkupbracket.pp index 0018033737..e4fe1d6faf 100644 --- a/components/synedit/syneditmarkupbracket.pp +++ b/components/synedit/syneditmarkupbracket.pp @@ -87,7 +87,7 @@ end; procedure TSynEditMarkupBracket.FindMatchingBracketPair(PhysCaret: TPoint; var StartBracket, EndBracket: TPoint); const - Brackets: set of Char = ['(',')','{','}','[',']']; + Brackets: set of Char = ['(',')','{','}','[',']', '''' ]; var StartLine: string; LogCaretXY: TPoint;