SynEdit, pas highlighter: fixed "packed class"

git-svn-id: trunk@42193 -
This commit is contained in:
martin 2013-07-24 08:57:19 +00:00
parent bbabe5442e
commit 34e144634c

View File

@ -294,6 +294,7 @@ type
FStartCodeFoldBlockLevel: integer; FStartCodeFoldBlockLevel: integer;
FPasStartLevel: Smallint; FPasStartLevel: Smallint;
fRange: TRangeStates; fRange: TRangeStates;
FOldRange: TRangeStates;
FStringKeywordMode: TSynPasStringMode; FStringKeywordMode: TSynPasStringMode;
FSynPasRangeInfo: TSynPasRangeInfo; FSynPasRangeInfo: TSynPasRangeInfo;
FAtLineStart: Boolean; // Line had only spaces or comments sofar FAtLineStart: Boolean; // Line had only spaces or comments sofar
@ -1081,7 +1082,15 @@ end;
function TSynPasSyn.Func40: TtkTokenKind; function TSynPasSyn.Func40: TtkTokenKind;
begin begin
if KeyComp('Packed') then Result := tkKey else Result := tkIdentifier; if KeyComp('Packed') then begin
Result := tkKey;
if (fRange * [rsProperty, rsAfterEqualOrColon] = [rsAfterEqualOrColon]) and
(PasCodeFoldRange.BracketNestLevel = 0)
then
FOldRange := FOldRange - [rsAfterEqualOrColon]; // Keep flag in FRange
end
else
Result := tkIdentifier;
end; end;
function TSynPasSyn.Func41: TtkTokenKind; function TSynPasSyn.Func41: TtkTokenKind;
@ -2926,7 +2935,6 @@ end;
procedure TSynPasSyn.Next; procedure TSynPasSyn.Next;
var var
IsAtCaseLabel: Boolean; IsAtCaseLabel: Boolean;
OldRange: TRangeStates;
begin begin
fAsmStart := False; fAsmStart := False;
fTokenPos := Run; fTokenPos := Run;
@ -2949,7 +2957,7 @@ begin
else if rsSlash in fRange then else if rsSlash in fRange then
SlashContinueProc SlashContinueProc
else begin else begin
OldRange := fRange; FOldRange := fRange;
//if rsAtEqual in fRange then //if rsAtEqual in fRange then
// fRange := fRange + [rsAfterEqualOrColon] - [rsAtEqual] // fRange := fRange + [rsAfterEqualOrColon] - [rsAtEqual]
//else //else
@ -2968,15 +2976,15 @@ begin
not(rsAtClosingBracket in fRange) not(rsAtClosingBracket in fRange)
then then
fRange := fRange - [rsAfterClass]; fRange := fRange - [rsAfterClass];
if rsAfterEqualOrColon in OldRange then if rsAfterEqualOrColon in FOldRange then
fRange := fRange - [rsAfterEqualOrColon]; fRange := fRange - [rsAfterEqualOrColon];
if rsAtPropertyOrReadWrite in OldRange then if rsAtPropertyOrReadWrite in FOldRange then
fRange := fRange - [rsAtPropertyOrReadWrite]; fRange := fRange - [rsAtPropertyOrReadWrite];
fRange := fRange - [rsAtClosingBracket]; fRange := fRange - [rsAtClosingBracket];
if rsAfterClassField in OldRange then if rsAfterClassField in FOldRange then
fRange := fRange - [rsAfterClassField]; fRange := fRange - [rsAfterClassField];
if rsAtClass in fRange then begin if rsAtClass in fRange then begin
if OldRange * [rsAtClass, rsAfterClass] <> [] then if FOldRange * [rsAtClass, rsAfterClass] <> [] then
fRange := fRange + [rsAfterClass] - [rsAtClass] fRange := fRange + [rsAfterClass] - [rsAtClass]
else else
fRange := fRange + [rsAfterClass]; fRange := fRange + [rsAfterClass];