diff --git a/components/synedit/synhighlighterpas.pp b/components/synedit/synhighlighterpas.pp index 30ec5bb971..8b7053a4b9 100644 --- a/components/synedit/synhighlighterpas.pp +++ b/components/synedit/synhighlighterpas.pp @@ -86,7 +86,8 @@ type // Also included after class modifiers "sealed" and "abstract" rsAtClass, rsAfterClass, - rsAfterIdentifier, + rsAfterIdentifierOrValue, // anywhere where a ^ deref can happen "foo^", "foo^^", "foo()^", "foo[]^" + rsAfterIdentifierOrValueAdd, rsAtClosingBracket, // ')' rsAtCaseLabel, @@ -2757,7 +2758,7 @@ begin ) and (fRange * [rsInTypeBlock, rsAfterEqual] = [rsAfterEqual]) )) and - not(rsAfterIdentifier in fRange) + not(rsAfterIdentifierOrValue in fRange) then begin if Run []) then @@ -2895,6 +2899,7 @@ procedure TSynPasSyn.SquareCloseProc; begin inc(Run); fTokenID := tkSymbol; + fRange := fRange + [rsAfterIdentifierOrValueAdd]; PasCodeFoldRange.DecBracketNestLevel; end; @@ -3071,8 +3076,8 @@ begin fRange := fRange - [rsAfterClass]; fRange := fRange - - (FOldRange * [rsAfterEqualOrColon, rsAtPropertyOrReadWrite, rsAfterClassField]) - - [rsAtClosingBracket, rsAfterIdentifier]; + (FOldRange * [rsAfterEqualOrColon, rsAtPropertyOrReadWrite, rsAfterClassField, rsAfterIdentifierOrValue]) - + [rsAtClosingBracket]; if rsAtClass in fRange then begin if FOldRange * [rsAtClass, rsAfterClass] <> [] then @@ -3087,8 +3092,8 @@ begin fRange := fRange + [rsAfterClass]; end; - if FTokenID = tkIdentifier then - fRange := fRange + [rsAfterIdentifier]; + if (FTokenID = tkIdentifier) or (rsAfterIdentifierOrValueAdd in fRange) then + fRange := fRange + [rsAfterIdentifierOrValue] - [rsAfterIdentifierOrValueAdd]; end end; if FAtLineStart and not(FTokenID in [tkSpace, tkComment, tkIDEDirective]) then diff --git a/components/synedit/test/testhighlightpas.pas b/components/synedit/test/testhighlightpas.pas index 7bdc4bf5c2..ad00685d08 100644 --- a/components/synedit/test/testhighlightpas.pas +++ b/components/synedit/test/testhighlightpas.pas @@ -1101,7 +1101,11 @@ begin 'c:=p ^;', 'c:=p(**)^;', 'c:=p{} ^;', - 'c:=p^+^i''e''^a#13^x;', //20 + 'i:=f(1)^;', // 20 + 'i:=f[1]^;', + 'i:=f^^;', + 'c:=p^+^i''e''^a#13^x;', + 'c:=x=^a and ^a=k and(^a^a=z);', 'end;', '' ]); @@ -1140,10 +1144,23 @@ begin CheckTokensForLine('c:=p{} ^;', 19, [tkIdentifier, tkSymbol, tkIdentifier, tkComment, tkSpace, tkSymbol, tkSymbol]); - CheckTokensForLine('c:=p^+^i''e''^a#13^x;', 20, + CheckTokensForLine('c:=p(1)^;', 20, + [tkIdentifier, tkSymbol, tkIdentifier, tkSymbol, tkNumber, tkSymbol, tkSymbol]); + CheckTokensForLine('c:=p[1]^;', 21, + [tkIdentifier, tkSymbol, tkIdentifier, tkSymbol, tkNumber, tkSymbol, tkSymbol]); + CheckTokensForLine('c:=p^^;', 22, + [tkIdentifier, tkSymbol, tkIdentifier, tkSymbol, tkSymbol, tkSymbol]); + + CheckTokensForLine('c:=p^+^i''e''^a#13^x;', 23, [tkIdentifier, tkSymbol, tkIdentifier, tkSymbol, tkSymbol, // c:=p^+ tkString, tkString, tkString, tkString, tkString, tkSymbol // ^i'e'^a#13^x; ]); + CheckTokensForLine('c:=x=^a and ^a=k and(^a^a=z);', 24, + [tkIdentifier, tkSymbol, tkIdentifier, tkSymbol, tkString, tkSpace, // c:=x=^a + tkKey, tkSpace, tkString, tkSymbol, tkIdentifier, tkSpace, // and ^a=k + tkKey, tkSymbol, tkString, tkString, tkSymbol, tkIdentifier, // and(^a^a=z + tkSymbol, tkSymbol // );' + ]); end;