mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-14 11:19:24 +02:00
SynEdit: PascalHighlighter, refactor - reduce code duplication, group tokens of the same kind
This commit is contained in:
parent
266a8bffbf
commit
d58545a684
@ -807,6 +807,23 @@ type
|
|||||||
function Func181: TtkTokenKind;
|
function Func181: TtkTokenKind;
|
||||||
function Func191: TtkTokenKind;
|
function Func191: TtkTokenKind;
|
||||||
function Func220: TtkTokenKind;
|
function Func220: TtkTokenKind;
|
||||||
|
function IsCallingConventionModifier(tfb: TPascalCodeFoldBlockType): Boolean; inline;
|
||||||
|
function IsCallingConventionModifier(const AnUpperKey: string): Boolean; inline;
|
||||||
|
function IsCallingConventionModifier(const AnUpperKey: string; tfb: TPascalCodeFoldBlockType): Boolean; inline;
|
||||||
|
function DoCallingConventionModifier: TtkTokenKind; inline;
|
||||||
|
function IsHintModifier(tfb: TPascalCodeFoldBlockType): Boolean; inline;
|
||||||
|
function IsHintModifier(const AnUpperKey: string): Boolean; inline;
|
||||||
|
function IsHintModifier(const AnUpperKey: string; tfb: TPascalCodeFoldBlockType): Boolean; inline;
|
||||||
|
function DoHintModifier: TtkTokenKind; inline;
|
||||||
|
function IsClassSection: Boolean; inline;
|
||||||
|
function IsClassSection(const AnUpperKey: string): Boolean; inline;
|
||||||
|
function DoClassSection: TtkTokenKind; inline;
|
||||||
|
function IsVirtualityModifier: Boolean; inline;
|
||||||
|
function IsVirtualityModifier(const AnUpperKey: string): Boolean; inline;
|
||||||
|
function DoVirtualityModifier: TtkTokenKind; inline;
|
||||||
|
function IsPropertyDefinitionKey: Boolean; inline;
|
||||||
|
function IsPropertyDefinitionKey(const AnUpperKey: string): Boolean; inline;
|
||||||
|
function DoPropertyDefinitionKey: TtkTokenKind; inline;
|
||||||
function AltFunc: TtkTokenKind;
|
function AltFunc: TtkTokenKind;
|
||||||
procedure InitIdent;
|
procedure InitIdent;
|
||||||
function IdentKind(p: integer): TtkTokenKind;
|
function IdentKind(p: integer): TtkTokenKind;
|
||||||
@ -866,6 +883,7 @@ type
|
|||||||
procedure DestroyDividerDrawConfig;
|
procedure DestroyDividerDrawConfig;
|
||||||
protected
|
protected
|
||||||
function KeyComp(const aKey: string): Boolean;
|
function KeyComp(const aKey: string): Boolean;
|
||||||
|
function KeyCompU(const AnUpperKey: string): Boolean; // Only a..z / Key must be already uppercase
|
||||||
function KeyCompEx(AText1, AText2: pchar; ALen: Integer): Boolean;
|
function KeyCompEx(AText1, AText2: pchar; ALen: Integer): Boolean;
|
||||||
function GetIdentChars: TSynIdentChars; override;
|
function GetIdentChars: TSynIdentChars; override;
|
||||||
function IsFilterStored: boolean; override; //mh 2000-10-08
|
function IsFilterStored: boolean; override; //mh 2000-10-08
|
||||||
@ -1404,6 +1422,26 @@ begin
|
|||||||
end else Result := False;
|
end else Result := False;
|
||||||
end; { KeyComp }
|
end; { KeyComp }
|
||||||
|
|
||||||
|
function TSynPasSyn.KeyCompU(const AnUpperKey: string): Boolean;
|
||||||
|
var
|
||||||
|
Temp, Temp2: PChar;
|
||||||
|
k: Byte;
|
||||||
|
begin
|
||||||
|
Result := Length(AnUpperKey) = fStringLen;
|
||||||
|
if Result then begin
|
||||||
|
Temp := fLine + fToIdent;
|
||||||
|
Temp2 := PChar(AnUpperKey);
|
||||||
|
k := byte(Temp2^);
|
||||||
|
while k <> 0 do begin
|
||||||
|
Result := (byte(Temp^) and $DF) = byte(Temp2^);
|
||||||
|
if not Result then break;
|
||||||
|
inc(Temp);
|
||||||
|
inc(Temp2);
|
||||||
|
k := byte(Temp2^);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
function TSynPasSyn.KeyCompEx(AText1, AText2: pchar; ALen: Integer): Boolean;
|
function TSynPasSyn.KeyCompEx(AText1, AText2: pchar; ALen: Integer): Boolean;
|
||||||
begin
|
begin
|
||||||
Result := False;
|
Result := False;
|
||||||
@ -1886,27 +1924,16 @@ end;
|
|||||||
|
|
||||||
function TSynPasSyn.Func25: TtkTokenKind;
|
function TSynPasSyn.Func25: TtkTokenKind;
|
||||||
begin
|
begin
|
||||||
if (PasCodeFoldRange.BracketNestLevel = 0) and
|
if IsCallingConventionModifier('FAR') then
|
||||||
(fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader] = [rsWasInProcHeader]) and
|
Result := DoCallingConventionModifier
|
||||||
(TopPascalCodeFoldBlockType in ProcModifierAllowed) and
|
else
|
||||||
KeyComp('Far')
|
Result := tkIdentifier;
|
||||||
then begin
|
|
||||||
Result := tkModifier;
|
|
||||||
FRange := FRange + [rsInProcHeader];
|
|
||||||
end
|
|
||||||
else Result := tkIdentifier;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSynPasSyn.Func27: TtkTokenKind;
|
function TSynPasSyn.Func27: TtkTokenKind;
|
||||||
begin
|
begin
|
||||||
if KeyComp('Cdecl') and
|
if IsCallingConventionModifier('CDECL') then
|
||||||
(PasCodeFoldRange.BracketNestLevel in [0, 1]) and
|
Result := DoCallingConventionModifier
|
||||||
(fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader] = [rsWasInProcHeader]) and
|
|
||||||
(TopPascalCodeFoldBlockType in ProcModifierAllowed)
|
|
||||||
then begin
|
|
||||||
Result := tkModifier;
|
|
||||||
FRange := FRange + [rsInProcHeader];
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Result := tkIdentifier;
|
Result := tkIdentifier;
|
||||||
end;
|
end;
|
||||||
@ -1925,14 +1952,8 @@ begin
|
|||||||
DoAfterOperator;
|
DoAfterOperator;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if (fRange * [rsProperty, rsAtPropertyOrReadWrite, rsAfterEqualOrColon] = [rsProperty]) and
|
if IsPropertyDefinitionKey('READ') then begin
|
||||||
(PasCodeFoldRange.BracketNestLevel = 0) and
|
Result := DoPropertyDefinitionKey;
|
||||||
KeyComp('Read')
|
|
||||||
then begin
|
|
||||||
Result := tkKey;
|
|
||||||
fRange := fRange + [rsAtPropertyOrReadWrite] - [rsVarTypeInSpecification];
|
|
||||||
if FTokenState = tsAfterProperty then
|
|
||||||
FTokenState := tsNone;
|
|
||||||
end
|
end
|
||||||
else if KeyComp('Case') then begin
|
else if KeyComp('Case') then begin
|
||||||
if TopPascalCodeFoldBlockType in PascalStatementBlocks + [cfbtUnitSection] then begin
|
if TopPascalCodeFoldBlockType in PascalStatementBlocks + [cfbtUnitSection] then begin
|
||||||
@ -2083,15 +2104,10 @@ end;
|
|||||||
|
|
||||||
function TSynPasSyn.Func38: TtkTokenKind;
|
function TSynPasSyn.Func38: TtkTokenKind;
|
||||||
begin
|
begin
|
||||||
if (PasCodeFoldRange.BracketNestLevel = 0) and
|
if IsCallingConventionModifier('NEAR') then
|
||||||
(fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader] = [rsWasInProcHeader]) and
|
Result := DoCallingConventionModifier
|
||||||
(TopPascalCodeFoldBlockType in ProcModifierAllowed) and
|
else
|
||||||
KeyComp('Near')
|
Result := tkIdentifier;
|
||||||
then begin
|
|
||||||
Result := tkModifier;
|
|
||||||
FRange := FRange + [rsInProcHeader];
|
|
||||||
end
|
|
||||||
else Result := tkIdentifier;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSynPasSyn.Func39: TtkTokenKind;
|
function TSynPasSyn.Func39: TtkTokenKind;
|
||||||
@ -2182,14 +2198,8 @@ begin
|
|||||||
FRange := FRange + [rsInProcHeader];
|
FRange := FRange + [rsInProcHeader];
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if KeyComp('Final') and
|
if IsVirtualityModifier('FINAL') then
|
||||||
(fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader, rsAfterClassMembers] = [rsWasInProcHeader, rsAfterClassMembers]) and
|
Result := DoVirtualityModifier
|
||||||
(tfb in [cfbtClass, cfbtClassSection]) and
|
|
||||||
(PasCodeFoldRange.BracketNestLevel = 0)
|
|
||||||
then begin
|
|
||||||
Result := tkModifier;
|
|
||||||
FRange := FRange + [rsInProcHeader];
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Result := tkIdentifier;
|
Result := tkIdentifier;
|
||||||
end;
|
end;
|
||||||
@ -2275,14 +2285,8 @@ end;
|
|||||||
|
|
||||||
function TSynPasSyn.Func52: TtkTokenKind;
|
function TSynPasSyn.Func52: TtkTokenKind;
|
||||||
begin
|
begin
|
||||||
if KeyComp('Pascal') and
|
if IsCallingConventionModifier('PASCAL') then
|
||||||
(PasCodeFoldRange.BracketNestLevel in [0,1]) and
|
Result := DoCallingConventionModifier
|
||||||
(fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader] = [rsWasInProcHeader]) and
|
|
||||||
(TopPascalCodeFoldBlockType in ProcModifierAllowed)
|
|
||||||
then begin
|
|
||||||
Result := tkModifier;
|
|
||||||
FRange := FRange + [rsInProcHeader];
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
if KeyComp('Raise') then begin
|
if KeyComp('Raise') then begin
|
||||||
Result := tkKey;
|
Result := tkKey;
|
||||||
@ -2327,21 +2331,13 @@ end;
|
|||||||
|
|
||||||
function TSynPasSyn.Func56: TtkTokenKind;
|
function TSynPasSyn.Func56: TtkTokenKind;
|
||||||
begin
|
begin
|
||||||
if KeyComp('Index') then
|
if IsPropertyDefinitionKey('INDEX') then
|
||||||
begin
|
Result := DoPropertyDefinitionKey
|
||||||
if (fRange * [rsProperty, rsAtPropertyOrReadWrite, rsAfterEqualOrColon] = [rsProperty]) and
|
else
|
||||||
(PasCodeFoldRange.BracketNestLevel = 0)
|
if KeyCompU('OUT') then
|
||||||
then begin
|
Result := tkKey
|
||||||
Result := tkKey;
|
|
||||||
fRange := fRange + [rsAtPropertyOrReadWrite] - [rsVarTypeInSpecification];
|
|
||||||
if FTokenState = tsAfterProperty then
|
|
||||||
FTokenState := tsNone;
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Result := tkIdentifier;
|
Result := tkIdentifier;
|
||||||
end
|
|
||||||
else
|
|
||||||
if KeyComp('Out') then Result := tkKey else Result := tkIdentifier;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSynPasSyn.Func57: TtkTokenKind;
|
function TSynPasSyn.Func57: TtkTokenKind;
|
||||||
@ -2373,14 +2369,10 @@ end;
|
|||||||
|
|
||||||
function TSynPasSyn.Func59: TtkTokenKind;
|
function TSynPasSyn.Func59: TtkTokenKind;
|
||||||
begin
|
begin
|
||||||
if (KeyComp('Safecall') or KeyComp('cppdecl')) and
|
if IsCallingConventionModifier(TopPascalCodeFoldBlockType) and
|
||||||
(PasCodeFoldRange.BracketNestLevel in [0, 1]) and
|
( KeyCompU('SAFECALL') or KeyCompU('CPPDECL') )
|
||||||
(fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader] = [rsWasInProcHeader]) and
|
then
|
||||||
(TopPascalCodeFoldBlockType in ProcModifierAllowed)
|
Result := DoCallingConventionModifier
|
||||||
then begin
|
|
||||||
Result := tkModifier;
|
|
||||||
FRange := FRange + [rsInProcHeader];
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Result := tkIdentifier;
|
Result := tkIdentifier;
|
||||||
end;
|
end;
|
||||||
@ -2426,20 +2418,10 @@ function TSynPasSyn.Func63: TtkTokenKind;
|
|||||||
var
|
var
|
||||||
tfb: TPascalCodeFoldBlockType;
|
tfb: TPascalCodeFoldBlockType;
|
||||||
begin
|
begin
|
||||||
if KeyComp('Public') then begin
|
if KeyCompU('PUBLIC') then begin
|
||||||
tfb := TopPascalCodeFoldBlockType;
|
tfb := TopPascalCodeFoldBlockType;
|
||||||
if (tfb in [cfbtClass, cfbtClassSection, cfbtRecord, cfbtClassConstBlock, cfbtClassTypeBlock]) and
|
if IsClassSection then begin
|
||||||
(PasCodeFoldRange.BracketNestLevel = 0) and
|
Result := DoClassSection;
|
||||||
(fRange * [rsInProcHeader, rsAfterEqualOrColon] = []) and
|
|
||||||
( (FTokenState in [tsAtBeginOfStatement, tsAfterVarConstType, tsAfterClass, tsAfterTypedConst]) or (fRange * [rsInClassHeader, rsInObjcProtocol, rsAfterIdentifierOrValue] <> []) )
|
|
||||||
then begin
|
|
||||||
Result := tkKey;
|
|
||||||
FNextTokenState := tsAtBeginOfStatement;
|
|
||||||
fRange := fRange - [rsAfterClassMembers, rsVarTypeInSpecification];
|
|
||||||
tfb := CloseFolds(tfb, [cfbtClassConstBlock, cfbtClassTypeBlock]);
|
|
||||||
if (tfb=cfbtClassSection) then
|
|
||||||
EndPascalCodeFoldBlockLastLine;
|
|
||||||
StartPascalCodeFoldBlock(cfbtClassSection);
|
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
// outside class: procedure foo; public name 'abc';
|
// outside class: procedure foo; public name 'abc';
|
||||||
@ -2597,10 +2579,7 @@ begin
|
|||||||
)
|
)
|
||||||
then begin
|
then begin
|
||||||
if rsProperty in fRange then begin
|
if rsProperty in fRange then begin
|
||||||
fRange := fRange + [rsAtPropertyOrReadWrite] - [rsVarTypeInSpecification];
|
Result := DoPropertyDefinitionKey;
|
||||||
if FTokenState = tsAfterProperty then
|
|
||||||
FTokenState := tsNone;
|
|
||||||
Result := tkKey
|
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
Result := tkModifier;
|
Result := tkModifier;
|
||||||
@ -2608,15 +2587,11 @@ begin
|
|||||||
else
|
else
|
||||||
Result := tkIdentifier;
|
Result := tkIdentifier;
|
||||||
end else
|
end else
|
||||||
if (PasCodeFoldRange.BracketNestLevel = 0) and
|
if IsVirtualityModifier('DYNAMIC') then begin
|
||||||
(fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader, rsAfterClassMembers] = [rsWasInProcHeader, rsAfterClassMembers]) and
|
Result := DoVirtualityModifier;
|
||||||
(TopPascalCodeFoldBlockType in [cfbtClass, cfbtClassSection]) and
|
|
||||||
KeyComp('Dynamic')
|
|
||||||
then begin
|
|
||||||
Result := tkModifier;
|
|
||||||
FRange := FRange + [rsInProcHeader];
|
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
|
// currently same check as IsVirtualityModifier
|
||||||
if KeyComp('Message') and
|
if KeyComp('Message') and
|
||||||
(fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader, rsAfterClassMembers] = [rsWasInProcHeader, rsAfterClassMembers]) and
|
(fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader, rsAfterClassMembers] = [rsWasInProcHeader, rsAfterClassMembers]) and
|
||||||
(TopPascalCodeFoldBlockType in [cfbtClass, cfbtClassSection]) and
|
(TopPascalCodeFoldBlockType in [cfbtClass, cfbtClassSection]) and
|
||||||
@ -2633,17 +2608,11 @@ function TSynPasSyn.Func71: TtkTokenKind;
|
|||||||
var
|
var
|
||||||
tfb: TPascalCodeFoldBlockType;
|
tfb: TPascalCodeFoldBlockType;
|
||||||
begin
|
begin
|
||||||
if KeyComp('Stdcall') and
|
tfb := TopPascalCodeFoldBlockType;
|
||||||
(PasCodeFoldRange.BracketNestLevel in [0, 1]) and
|
if IsCallingConventionModifier('STDCALL', tfb) then
|
||||||
(fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader] = [rsWasInProcHeader]) and
|
Result := DoCallingConventionModifier
|
||||||
(TopPascalCodeFoldBlockType in ProcModifierAllowed)
|
|
||||||
then begin
|
|
||||||
Result := tkModifier;
|
|
||||||
FRange := FRange + [rsInProcHeader];
|
|
||||||
end
|
|
||||||
else if KeyComp('Const') then begin
|
else if KeyComp('Const') then begin
|
||||||
if (PasCodeFoldRange.BracketNestLevel = 0) then begin
|
if (PasCodeFoldRange.BracketNestLevel = 0) then begin
|
||||||
tfb := TopPascalCodeFoldBlockType;
|
|
||||||
// If already in cfbtClassTypeBlock, then keep block going / save the close, open
|
// If already in cfbtClassTypeBlock, then keep block going / save the close, open
|
||||||
if tfb in cfbtVarConstTypeLabelExt - [cfbtClassConstBlock] then begin
|
if tfb in cfbtVarConstTypeLabelExt - [cfbtClassConstBlock] then begin
|
||||||
EndPascalCodeFoldBlockLastLine;
|
EndPascalCodeFoldBlockLastLine;
|
||||||
@ -2697,15 +2666,8 @@ end;
|
|||||||
|
|
||||||
function TSynPasSyn.Func75: TtkTokenKind;
|
function TSynPasSyn.Func75: TtkTokenKind;
|
||||||
begin
|
begin
|
||||||
if (fRange * [rsProperty, rsAtPropertyOrReadWrite, rsAfterEqualOrColon] = [rsProperty]) and
|
if IsPropertyDefinitionKey('WRITE') then
|
||||||
(PasCodeFoldRange.BracketNestLevel = 0) and
|
Result := DoPropertyDefinitionKey
|
||||||
KeyComp('Write') then
|
|
||||||
begin
|
|
||||||
Result := tkKey;
|
|
||||||
fRange := fRange + [rsAtPropertyOrReadWrite] - [rsVarTypeInSpecification];
|
|
||||||
if FTokenState = tsAfterProperty then
|
|
||||||
FTokenState := tsNone;
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Result := tkIdentifier;
|
Result := tkIdentifier;
|
||||||
end;
|
end;
|
||||||
@ -2736,17 +2698,9 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
function TSynPasSyn.Func81: TtkTokenKind;
|
function TSynPasSyn.Func81: TtkTokenKind;
|
||||||
var
|
|
||||||
tfb: TPascalCodeFoldBlockType;
|
|
||||||
begin
|
begin
|
||||||
if (fRange * [rsProperty, rsAtPropertyOrReadWrite, rsAfterEqualOrColon] = [rsProperty]) and
|
if IsPropertyDefinitionKey('STORED') then begin
|
||||||
(PasCodeFoldRange.BracketNestLevel = 0) and
|
Result := DoPropertyDefinitionKey;
|
||||||
KeyComp('Stored')
|
|
||||||
then begin
|
|
||||||
Result := tkKey;
|
|
||||||
fRange := fRange + [rsAtPropertyOrReadWrite] - [rsVarTypeInSpecification];
|
|
||||||
if FTokenState = tsAfterProperty then
|
|
||||||
FTokenState := tsNone;
|
|
||||||
end
|
end
|
||||||
else if KeyComp('Interface') then begin
|
else if KeyComp('Interface') then begin
|
||||||
if (rsAfterEqual in fRange) and (PasCodeFoldRange.BracketNestLevel = 0)
|
if (rsAfterEqual in fRange) and (PasCodeFoldRange.BracketNestLevel = 0)
|
||||||
@ -2771,33 +2725,8 @@ begin
|
|||||||
end;
|
end;
|
||||||
Result := tkKey
|
Result := tkKey
|
||||||
end
|
end
|
||||||
else if KeyComp('Deprecated') then begin
|
else if IsHintModifier('DEPRECATED') then
|
||||||
tfb := TopPascalCodeFoldBlockType;
|
Result := DoHintModifier
|
||||||
if ( ( (tfb in cfbtVarConstType) and
|
|
||||||
(FTokenState <> tsAfterAbsolute) and
|
|
||||||
(fRange * [rsVarTypeInSpecification, rsAfterEqualOrColon] = [rsVarTypeInSpecification]) ) or
|
|
||||||
( (tfb in [cfbtClass, cfbtClassSection, cfbtRecord, cfbtRecordCase, cfbtRecordCaseSection, cfbtClassConstBlock, cfbtClassTypeBlock]) and
|
|
||||||
( (fRange * [rsAfterClassMembers, rsInProcHeader] = [rsAfterClassMembers]) or
|
|
||||||
(fRange * [rsAfterClassMembers, rsAfterEqualOrColon, rsVarTypeInSpecification] = [rsVarTypeInSpecification])
|
|
||||||
) ) or
|
|
||||||
( (tfb in [cfbtUnitSection, cfbtProgram, cfbtProcedure]) and
|
|
||||||
(fRange * [rsInProcHeader] = []) ) or
|
|
||||||
( (tfb in [cfbtUnit, cfbtNone]) and
|
|
||||||
(fRange * [rsInProcHeader] = []) and (FTokenState = tsAfterProcName) )
|
|
||||||
) and
|
|
||||||
( fRange *[rsAfterEqualOrColon, rsProperty] = [] ) and
|
|
||||||
(PasCodeFoldRange.BracketNestLevel = 0)
|
|
||||||
then begin
|
|
||||||
Result := tkModifier;
|
|
||||||
if (fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader, rsAfterClassMembers] = [rsWasInProcHeader, rsAfterClassMembers]) and
|
|
||||||
(TopPascalCodeFoldBlockType in [cfbtClass, cfbtClassSection]) and
|
|
||||||
(CompilerMode = pcmDelphi)
|
|
||||||
then
|
|
||||||
FRange := FRange + [rsInProcHeader]; // virtual reintroduce overload can be after virtual
|
|
||||||
end
|
|
||||||
else
|
|
||||||
Result := tkIdentifier;
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Result := tkIdentifier;
|
Result := tkIdentifier;
|
||||||
end;
|
end;
|
||||||
@ -2806,7 +2735,7 @@ function TSynPasSyn.Func84: TtkTokenKind;
|
|||||||
begin
|
begin
|
||||||
if (PasCodeFoldRange.BracketNestLevel = 0) and
|
if (PasCodeFoldRange.BracketNestLevel = 0) and
|
||||||
(TopPascalCodeFoldBlockType in [cfbtClass, cfbtClassSection]) and
|
(TopPascalCodeFoldBlockType in [cfbtClass, cfbtClassSection]) and
|
||||||
KeyComp('Abstract')
|
KeyCompu('ABSTRACT')
|
||||||
then begin
|
then begin
|
||||||
Result := tkModifier;
|
Result := tkModifier;
|
||||||
// type foo = class abstract
|
// type foo = class abstract
|
||||||
@ -2816,8 +2745,8 @@ begin
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
// procedure foo; virtual; abstract;
|
// procedure foo; virtual; abstract;
|
||||||
if (fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader, rsAfterClassMembers] = [rsWasInProcHeader, rsAfterClassMembers]) then
|
if IsVirtualityModifier('ABSTRACT') then
|
||||||
FRange := FRange + [rsInProcHeader]
|
Result := DoVirtualityModifier
|
||||||
else
|
else
|
||||||
Result := tkIdentifier;
|
Result := tkIdentifier;
|
||||||
end
|
end
|
||||||
@ -2833,14 +2762,9 @@ begin
|
|||||||
StartPascalCodeFoldBlock(cfbtClass);
|
StartPascalCodeFoldBlock(cfbtClass);
|
||||||
end;
|
end;
|
||||||
end
|
end
|
||||||
else if KeyComp('oldfpccall') and
|
else
|
||||||
(PasCodeFoldRange.BracketNestLevel in [0, 1]) and
|
if IsCallingConventionModifier('OLDFPCCALL') then
|
||||||
(fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader] = [rsWasInProcHeader]) and
|
Result := DoCallingConventionModifier
|
||||||
(TopPascalCodeFoldBlockType in ProcModifierAllowed)
|
|
||||||
then begin
|
|
||||||
Result := tkModifier;
|
|
||||||
FRange := FRange + [rsInProcHeader];
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Result := tkIdentifier;
|
Result := tkIdentifier;
|
||||||
end;
|
end;
|
||||||
@ -2870,15 +2794,10 @@ end;
|
|||||||
|
|
||||||
function TSynPasSyn.Func86: TtkTokenKind;
|
function TSynPasSyn.Func86: TtkTokenKind;
|
||||||
begin
|
begin
|
||||||
if (PasCodeFoldRange.BracketNestLevel in [0, 1]) and
|
if IsCallingConventionModifier('VARARGS') then
|
||||||
(fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader] = [rsWasInProcHeader]) and
|
Result := DoCallingConventionModifier
|
||||||
(TopPascalCodeFoldBlockType in ProcModifierAllowed) and
|
else
|
||||||
KeyComp('VarArgs')
|
Result := tkIdentifier;
|
||||||
then begin
|
|
||||||
Result := tkKey;
|
|
||||||
FRange := FRange + [rsInProcHeader];
|
|
||||||
end
|
|
||||||
else Result := tkIdentifier;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSynPasSyn.Func87: TtkTokenKind;
|
function TSynPasSyn.Func87: TtkTokenKind;
|
||||||
@ -2899,14 +2818,9 @@ begin
|
|||||||
StartPascalCodeFoldBlock(cfbtProgram);
|
StartPascalCodeFoldBlock(cfbtProgram);
|
||||||
Result := tkKey;
|
Result := tkKey;
|
||||||
end
|
end
|
||||||
else if KeyComp('Mwpascal') and
|
else
|
||||||
(PasCodeFoldRange.BracketNestLevel in [0, 1]) and
|
if IsCallingConventionModifier('MWPASCAL') then
|
||||||
(fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader] = [rsWasInProcHeader]) and
|
Result := DoCallingConventionModifier
|
||||||
(TopPascalCodeFoldBlockType in ProcModifierAllowed)
|
|
||||||
then begin
|
|
||||||
Result := tkModifier;
|
|
||||||
FRange := FRange + [rsInProcHeader];
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Result := tkIdentifier;
|
Result := tkIdentifier;
|
||||||
end;
|
end;
|
||||||
@ -2937,11 +2851,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if KeyComp('strict') and
|
if IsClassSection('STRICT') and
|
||||||
(TopPascalCodeFoldBlockType in [cfbtClass, cfbtClassSection, cfbtRecord, cfbtClassConstBlock, cfbtClassTypeBlock]) and
|
|
||||||
(PasCodeFoldRange.BracketNestLevel = 0) and
|
|
||||||
(fRange * [rsInProcHeader, rsAfterEqualOrColon] = []) and
|
|
||||||
( (FTokenState in [tsAtBeginOfStatement, tsAfterVarConstType, tsAfterClass, tsAfterTypedConst]) or (fRange * [rsInClassHeader, rsInObjcProtocol, rsAfterIdentifierOrValue] <> []) ) and
|
|
||||||
ScanForClassSection
|
ScanForClassSection
|
||||||
then begin
|
then begin
|
||||||
CloseFolds(TopPascalCodeFoldBlockType, [cfbtClassConstBlock, cfbtClassTypeBlock]);
|
CloseFolds(TopPascalCodeFoldBlockType, [cfbtClassConstBlock, cfbtClassTypeBlock]);
|
||||||
@ -2953,26 +2863,12 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
function TSynPasSyn.Func91: TtkTokenKind;
|
function TSynPasSyn.Func91: TtkTokenKind;
|
||||||
var
|
|
||||||
tfb: TPascalCodeFoldBlockType;
|
|
||||||
begin
|
begin
|
||||||
if KeyComp('Downto') then
|
if KeyComp('Downto') then
|
||||||
Result := tkKey
|
Result := tkKey
|
||||||
else
|
else
|
||||||
if KeyComp('Private') and
|
if IsClassSection('PRIVATE') then
|
||||||
(TopPascalCodeFoldBlockType in [cfbtClass, cfbtClassSection, cfbtRecord, cfbtClassConstBlock, cfbtClassTypeBlock]) and
|
Result := DoClassSection
|
||||||
(PasCodeFoldRange.BracketNestLevel = 0) and
|
|
||||||
(fRange * [rsInProcHeader, rsAfterEqualOrColon] = []) and
|
|
||||||
( (FTokenState in [tsAtBeginOfStatement, tsAfterVarConstType, tsAfterClass, tsAfterTypedConst]) or (fRange * [rsInClassHeader, rsInObjcProtocol, rsAfterIdentifierOrValue] <> []) )
|
|
||||||
then begin
|
|
||||||
Result := tkKey;
|
|
||||||
FNextTokenState := tsAtBeginOfStatement;
|
|
||||||
fRange := fRange - [rsAfterClassMembers, rsVarTypeInSpecification];
|
|
||||||
tfb := CloseFolds(TopPascalCodeFoldBlockType(), [cfbtClassConstBlock, cfbtClassTypeBlock]);
|
|
||||||
if (tfb=cfbtClassSection) then
|
|
||||||
EndPascalCodeFoldBlockLastLine;
|
|
||||||
StartPascalCodeFoldBlock(cfbtClassSection);
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Result := tkIdentifier;
|
Result := tkIdentifier;
|
||||||
end;
|
end;
|
||||||
@ -3008,11 +2904,8 @@ begin
|
|||||||
FRange := FRange + [rsInProcHeader];
|
FRange := FRange + [rsInProcHeader];
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if KeyComp('Readonly') then
|
if IsPropertyDefinitionKey('READONLY') then
|
||||||
begin
|
begin
|
||||||
if (fRange * [rsProperty, rsAtPropertyOrReadWrite, rsAfterEqualOrColon] = [rsProperty]) and
|
|
||||||
(PasCodeFoldRange.BracketNestLevel = 0)
|
|
||||||
then begin
|
|
||||||
Result := tkKey;
|
Result := tkKey;
|
||||||
FOldRange := FOldRange - [rsAtPropertyOrReadWrite];
|
FOldRange := FOldRange - [rsAtPropertyOrReadWrite];
|
||||||
if FTokenState = tsAfterProperty then
|
if FTokenState = tsAfterProperty then
|
||||||
@ -3020,7 +2913,6 @@ begin
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
Result := tkIdentifier;
|
Result := tkIdentifier;
|
||||||
end else Result := tkIdentifier;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSynPasSyn.Func95: TtkTokenKind;
|
function TSynPasSyn.Func95: TtkTokenKind;
|
||||||
@ -3044,32 +2936,13 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
function TSynPasSyn.Func96: TtkTokenKind;
|
function TSynPasSyn.Func96: TtkTokenKind;
|
||||||
var
|
|
||||||
tfb: TPascalCodeFoldBlockType;
|
|
||||||
begin
|
begin
|
||||||
if KeyComp('Published') and
|
if IsClassSection('PUBLISHED') then begin
|
||||||
(TopPascalCodeFoldBlockType in [cfbtClass, cfbtClassSection, cfbtRecord, cfbtClassConstBlock, cfbtClassTypeBlock]) and
|
Result := DoClassSection;
|
||||||
(PasCodeFoldRange.BracketNestLevel = 0) and
|
|
||||||
(fRange * [rsInProcHeader, rsAfterEqualOrColon] = []) and
|
|
||||||
( (FTokenState in [tsAtBeginOfStatement, tsAfterVarConstType, tsAfterClass, tsAfterTypedConst]) or (fRange * [rsInClassHeader, rsInObjcProtocol, rsAfterIdentifierOrValue] <> []) )
|
|
||||||
then begin
|
|
||||||
Result := tkKey;
|
|
||||||
FNextTokenState := tsAtBeginOfStatement;
|
|
||||||
fRange := fRange - [rsAfterClassMembers, rsVarTypeInSpecification];
|
|
||||||
tfb := CloseFolds(TopPascalCodeFoldBlockType(), [cfbtClassConstBlock, cfbtClassTypeBlock]);
|
|
||||||
if (tfb=cfbtClassSection) then
|
|
||||||
EndPascalCodeFoldBlockLastLine;
|
|
||||||
StartPascalCodeFoldBlock(cfbtClassSection);
|
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if (PasCodeFoldRange.BracketNestLevel = 0) and
|
if IsVirtualityModifier('OVERRIDE') then
|
||||||
(fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader, rsAfterClassMembers] = [rsWasInProcHeader, rsAfterClassMembers]) and
|
Result := DoVirtualityModifier
|
||||||
(TopPascalCodeFoldBlockType in [cfbtClass, cfbtClassSection]) and
|
|
||||||
KeyComp('Override')
|
|
||||||
then begin
|
|
||||||
Result := tkModifier;
|
|
||||||
FRange := FRange + [rsInProcHeader];
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Result := tkIdentifier;
|
Result := tkIdentifier;
|
||||||
end;
|
end;
|
||||||
@ -3157,14 +3030,13 @@ end;
|
|||||||
|
|
||||||
function TSynPasSyn.Func100: TtkTokenKind;
|
function TSynPasSyn.Func100: TtkTokenKind;
|
||||||
begin
|
begin
|
||||||
if KeyComp('Automated') and // in old times: class section
|
(* TODO: The delpi compiler has an "Automated" class section. But FPC does not have it.
|
||||||
(TopPascalCodeFoldBlockType in [cfbtClass, cfbtClassSection, cfbtRecord]) and
|
So even in "$mode delphi" this is not available.
|
||||||
(PasCodeFoldRange.BracketNestLevel = 0) and
|
If this is needed, then we need a "property compiler"
|
||||||
(fRange * [rsInProcHeader, rsAfterEqualOrColon] = []) and
|
*)
|
||||||
( (FTokenState in [tsAtBeginOfStatement, tsAfterTypedConst, tsAfterClass]) or (fRange * [rsInClassHeader, rsAfterIdentifierOrValue] <> []) )
|
//if (CompilerMode = pcmDelphi) and IsClassSection('AUTOMATED') then
|
||||||
then
|
// Result := DoClassSection
|
||||||
Result := tkKey
|
//else
|
||||||
else
|
|
||||||
if (rsInProcHeader in fRange) and KeyComp('constref') and
|
if (rsInProcHeader in fRange) and KeyComp('constref') and
|
||||||
(PasCodeFoldRange.BracketNestLevel = 1)
|
(PasCodeFoldRange.BracketNestLevel = 1)
|
||||||
then
|
then
|
||||||
@ -3174,48 +3046,17 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
function TSynPasSyn.Func101: TtkTokenKind;
|
function TSynPasSyn.Func101: TtkTokenKind;
|
||||||
var
|
|
||||||
tfb: TPascalCodeFoldBlockType;
|
|
||||||
begin
|
begin
|
||||||
tfb := TopPascalCodeFoldBlockType;
|
if IsCallingConventionModifier('REGISTER') then begin
|
||||||
if KeyComp('Register') and
|
Result := DoCallingConventionModifier;
|
||||||
(PasCodeFoldRange.BracketNestLevel in [0, 1]) and
|
|
||||||
(fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader] = [rsWasInProcHeader]) and
|
|
||||||
(tfb in ProcModifierAllowed)
|
|
||||||
then begin
|
|
||||||
Result := tkModifier;
|
|
||||||
FRange := FRange + [rsInProcHeader];
|
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if KeyComp('Platform') then begin
|
if IsHintModifier('PLATFORM') then begin
|
||||||
if ( ( (tfb in cfbtVarConstType) and
|
Result := DoHintModifier;
|
||||||
(FTokenState <> tsAfterAbsolute) and
|
|
||||||
(fRange * [rsVarTypeInSpecification, rsAfterEqualOrColon] = [rsVarTypeInSpecification]) ) or
|
|
||||||
( (tfb in [cfbtClass, cfbtClassSection, cfbtRecord, cfbtRecordCase, cfbtRecordCaseSection, cfbtClassConstBlock, cfbtClassTypeBlock]) and
|
|
||||||
( (fRange * [rsAfterClassMembers, rsInProcHeader] = [rsAfterClassMembers]) or
|
|
||||||
(fRange * [rsAfterClassMembers, rsAfterEqualOrColon, rsVarTypeInSpecification] = [rsVarTypeInSpecification])
|
|
||||||
) ) or
|
|
||||||
( (tfb in [cfbtUnitSection, cfbtProgram, cfbtProcedure]) and
|
|
||||||
(fRange * [rsInProcHeader] = []) ) or
|
|
||||||
( (tfb in [cfbtUnit, cfbtNone]) and
|
|
||||||
(fRange * [rsInProcHeader] = []) and (FTokenState = tsAfterProcName) )
|
|
||||||
) and
|
|
||||||
( fRange *[rsAfterEqualOrColon, rsProperty] = [] ) and
|
|
||||||
(PasCodeFoldRange.BracketNestLevel = 0)
|
|
||||||
then begin
|
|
||||||
Result := tkModifier;
|
|
||||||
if (fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader, rsAfterClassMembers] = [rsWasInProcHeader, rsAfterClassMembers]) and
|
|
||||||
(tfb in [cfbtClass, cfbtClassSection]) and
|
|
||||||
(CompilerMode = pcmDelphi)
|
|
||||||
then
|
|
||||||
FRange := FRange + [rsInProcHeader]; // virtual reintroduce overload can be after virtual
|
|
||||||
end
|
|
||||||
else
|
|
||||||
Result := tkIdentifier;
|
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if FExtendedKeywordsMode and KeyComp('Continue') and
|
if FExtendedKeywordsMode and KeyComp('Continue') and
|
||||||
(tfb in PascalStatementBlocks) and (fRange * [rsAfterEqualOrColon] = []) and
|
(TopPascalCodeFoldBlockType in PascalStatementBlocks) and (fRange * [rsAfterEqualOrColon] = []) and
|
||||||
(PasCodeFoldRange.BracketNestLevel = 0)
|
(PasCodeFoldRange.BracketNestLevel = 0)
|
||||||
then
|
then
|
||||||
Result := tkKey
|
Result := tkKey
|
||||||
@ -3271,15 +3112,10 @@ end;
|
|||||||
|
|
||||||
function TSynPasSyn.Func103: TtkTokenKind;
|
function TSynPasSyn.Func103: TtkTokenKind;
|
||||||
begin
|
begin
|
||||||
if (PasCodeFoldRange.BracketNestLevel = 0) and
|
if IsVirtualityModifier('VIRTUAL') then
|
||||||
(fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader, rsAfterClassMembers] = [rsWasInProcHeader, rsAfterClassMembers]) and
|
Result := DoVirtualityModifier
|
||||||
(TopPascalCodeFoldBlockType in [cfbtClass, cfbtClassSection]) and
|
else
|
||||||
KeyComp('Virtual')
|
Result := tkIdentifier;
|
||||||
then begin
|
|
||||||
Result := tkModifier;
|
|
||||||
FRange := FRange + [rsInProcHeader];
|
|
||||||
end
|
|
||||||
else Result := tkIdentifier;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSynPasSyn.Func105: TtkTokenKind;
|
function TSynPasSyn.Func105: TtkTokenKind;
|
||||||
@ -3330,24 +3166,11 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
function TSynPasSyn.Func106: TtkTokenKind;
|
function TSynPasSyn.Func106: TtkTokenKind;
|
||||||
var
|
|
||||||
tfb: TPascalCodeFoldBlockType;
|
|
||||||
begin
|
begin
|
||||||
if KeyComp('Protected') and
|
if IsClassSection('PROTECTED') then
|
||||||
(TopPascalCodeFoldBlockType in [cfbtClass, cfbtClassSection, cfbtRecord, cfbtClassConstBlock, cfbtClassTypeBlock]) and
|
Result := DoClassSection
|
||||||
(PasCodeFoldRange.BracketNestLevel = 0) and
|
else
|
||||||
(fRange * [rsInProcHeader, rsAfterEqualOrColon] = []) and
|
Result := tkIdentifier;
|
||||||
( (FTokenState in [tsAtBeginOfStatement, tsAfterVarConstType, tsAfterClass, tsAfterTypedConst]) or (fRange * [rsInClassHeader, rsInObjcProtocol, rsAfterIdentifierOrValue] <> []) )
|
|
||||||
then begin
|
|
||||||
Result := tkKey;
|
|
||||||
FNextTokenState := tsAtBeginOfStatement;
|
|
||||||
fRange := fRange - [rsAfterClassMembers, rsVarTypeInSpecification];
|
|
||||||
tfb := CloseFolds(TopPascalCodeFoldBlockType(), [cfbtClassConstBlock, cfbtClassTypeBlock]);
|
|
||||||
if (tfb=cfbtClassSection) then
|
|
||||||
EndPascalCodeFoldBlockLastLine;
|
|
||||||
StartPascalCodeFoldBlock(cfbtClassSection);
|
|
||||||
end
|
|
||||||
else Result := tkIdentifier;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSynPasSyn.Func108: TtkTokenKind;
|
function TSynPasSyn.Func108: TtkTokenKind;
|
||||||
@ -3429,23 +3252,10 @@ end;
|
|||||||
|
|
||||||
function TSynPasSyn.Func125: TtkTokenKind;
|
function TSynPasSyn.Func125: TtkTokenKind;
|
||||||
begin
|
begin
|
||||||
if KeyComp('NoReturn') and
|
if IsCallingConventionModifier(TopPascalCodeFoldBlockType) and
|
||||||
(PasCodeFoldRange.BracketNestLevel = 0) and
|
( KeyCompU('NORETURN') or KeyCompU('MS_ABI_CDECL') )
|
||||||
(fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader] = [rsWasInProcHeader]) and
|
then
|
||||||
(TopPascalCodeFoldBlockType in ProcModifierAllowed)
|
Result := DoCallingConventionModifier
|
||||||
then begin
|
|
||||||
Result := tkModifier;
|
|
||||||
FRange := FRange + [rsInProcHeader];
|
|
||||||
end
|
|
||||||
else
|
|
||||||
if KeyComp('Ms_abi_cdecl') and
|
|
||||||
(PasCodeFoldRange.BracketNestLevel in [0, 1]) and
|
|
||||||
(fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader] = [rsWasInProcHeader]) and
|
|
||||||
(TopPascalCodeFoldBlockType in ProcModifierAllowed)
|
|
||||||
then begin
|
|
||||||
Result := tkModifier;
|
|
||||||
FRange := FRange + [rsInProcHeader];
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Result := tkIdentifier;
|
Result := tkIdentifier;
|
||||||
end;
|
end;
|
||||||
@ -3457,14 +3267,8 @@ begin
|
|||||||
if rsProperty in fRange then Result := tkKey else Result := tkIdentifier;
|
if rsProperty in fRange then Result := tkKey else Result := tkIdentifier;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if (PasCodeFoldRange.BracketNestLevel in [0, 1]) and
|
if IsCallingConventionModifier('NOSTACKFRAME') then
|
||||||
(fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader] = [rsWasInProcHeader]) and
|
Result := DoCallingConventionModifier
|
||||||
(TopPascalCodeFoldBlockType in ProcModifierAllowed) and
|
|
||||||
KeyComp('NoStackFrame')
|
|
||||||
then begin
|
|
||||||
Result := tkModifier;
|
|
||||||
FRange := FRange + [rsInProcHeader];
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Result := tkIdentifier;
|
Result := tkIdentifier;
|
||||||
end;
|
end;
|
||||||
@ -3520,14 +3324,9 @@ end;
|
|||||||
function TSynPasSyn.Func132: TtkTokenKind;
|
function TSynPasSyn.Func132: TtkTokenKind;
|
||||||
begin
|
begin
|
||||||
if D4syntax and
|
if D4syntax and
|
||||||
(PasCodeFoldRange.BracketNestLevel = 0) and
|
IsVirtualityModifier('REINTRODUCE')
|
||||||
(fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader, rsAfterClassMembers] = [rsWasInProcHeader, rsAfterClassMembers]) and
|
then
|
||||||
(TopPascalCodeFoldBlockType in [cfbtClass, cfbtClassSection]) and
|
Result := DoVirtualityModifier
|
||||||
KeyComp('Reintroduce')
|
|
||||||
then begin
|
|
||||||
Result := tkModifier;
|
|
||||||
FRange := FRange + [rsInProcHeader];
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Result := tkIdentifier;
|
Result := tkIdentifier;
|
||||||
end;
|
end;
|
||||||
@ -3589,36 +3388,9 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
function TSynPasSyn.Func142: TtkTokenKind;
|
function TSynPasSyn.Func142: TtkTokenKind;
|
||||||
var
|
|
||||||
tfb: TPascalCodeFoldBlockType;
|
|
||||||
begin
|
begin
|
||||||
if KeyComp('Experimental') then begin
|
if IsHintModifier('EXPERIMENTAL') then
|
||||||
tfb := TopPascalCodeFoldBlockType;
|
Result := DoHintModifier
|
||||||
if ( ( (tfb in cfbtVarConstType) and
|
|
||||||
(FTokenState <> tsAfterAbsolute) and
|
|
||||||
(fRange * [rsVarTypeInSpecification, rsAfterEqualOrColon] = [rsVarTypeInSpecification]) ) or
|
|
||||||
( (tfb in [cfbtClass, cfbtClassSection, cfbtRecord, cfbtRecordCase, cfbtRecordCaseSection, cfbtClassConstBlock, cfbtClassTypeBlock]) and
|
|
||||||
( (fRange * [rsAfterClassMembers, rsInProcHeader] = [rsAfterClassMembers]) or
|
|
||||||
(fRange * [rsAfterClassMembers, rsAfterEqualOrColon, rsVarTypeInSpecification] = [rsVarTypeInSpecification])
|
|
||||||
) ) or
|
|
||||||
( (tfb in [cfbtUnitSection, cfbtProgram, cfbtProcedure]) and
|
|
||||||
(fRange * [rsInProcHeader] = []) ) or
|
|
||||||
( (tfb in [cfbtUnit, cfbtNone]) and
|
|
||||||
(fRange * [rsInProcHeader] = []) and (FTokenState = tsAfterProcName) )
|
|
||||||
) and
|
|
||||||
( fRange *[rsAfterEqualOrColon, rsProperty] = [] ) and
|
|
||||||
(PasCodeFoldRange.BracketNestLevel = 0)
|
|
||||||
then begin
|
|
||||||
Result := tkModifier;
|
|
||||||
if (fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader, rsAfterClassMembers] = [rsWasInProcHeader, rsAfterClassMembers]) and
|
|
||||||
(TopPascalCodeFoldBlockType in [cfbtClass, cfbtClassSection]) and
|
|
||||||
(CompilerMode = pcmDelphi)
|
|
||||||
then
|
|
||||||
FRange := FRange + [rsInProcHeader]; // virtual reintroduce overload can be after virtual
|
|
||||||
end
|
|
||||||
else
|
|
||||||
Result := tkIdentifier;
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Result := tkIdentifier;
|
Result := tkIdentifier;
|
||||||
end;
|
end;
|
||||||
@ -3680,36 +3452,9 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
function TSynPasSyn.Func151: TtkTokenKind;
|
function TSynPasSyn.Func151: TtkTokenKind;
|
||||||
var
|
|
||||||
tfb: TPascalCodeFoldBlockType;
|
|
||||||
begin
|
begin
|
||||||
tfb := TopPascalCodeFoldBlockType;
|
if IsHintModifier('UNIMPLEMENTED') then
|
||||||
if KeyComp('Unimplemented') then begin
|
Result := DoHintModifier
|
||||||
if ( ( (tfb in cfbtVarConstType) and
|
|
||||||
(FTokenState <> tsAfterAbsolute) and
|
|
||||||
(fRange * [rsVarTypeInSpecification, rsAfterEqualOrColon] = [rsVarTypeInSpecification]) ) or
|
|
||||||
( (tfb in [cfbtClass, cfbtClassSection, cfbtRecord, cfbtRecordCase, cfbtRecordCaseSection, cfbtClassConstBlock, cfbtClassTypeBlock]) and
|
|
||||||
( (fRange * [rsAfterClassMembers, rsInProcHeader] = [rsAfterClassMembers]) or
|
|
||||||
(fRange * [rsAfterClassMembers, rsAfterEqualOrColon, rsVarTypeInSpecification] = [rsVarTypeInSpecification])
|
|
||||||
) ) or
|
|
||||||
( (tfb in [cfbtUnitSection, cfbtProgram, cfbtProcedure]) and
|
|
||||||
(fRange * [rsInProcHeader] = []) ) or
|
|
||||||
( (tfb in [cfbtUnit, cfbtNone]) and
|
|
||||||
(fRange * [rsInProcHeader] = []) and (FTokenState = tsAfterProcName) )
|
|
||||||
) and
|
|
||||||
( fRange *[rsAfterEqualOrColon, rsProperty] = [] ) and
|
|
||||||
(PasCodeFoldRange.BracketNestLevel = 0)
|
|
||||||
then begin
|
|
||||||
Result := tkModifier;
|
|
||||||
if (fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader, rsAfterClassMembers] = [rsWasInProcHeader, rsAfterClassMembers]) and
|
|
||||||
(TopPascalCodeFoldBlockType in [cfbtClass, cfbtClassSection]) and
|
|
||||||
(CompilerMode = pcmDelphi)
|
|
||||||
then
|
|
||||||
FRange := FRange + [rsInProcHeader]; // virtual reintroduce overload can be after virtual
|
|
||||||
end
|
|
||||||
else
|
|
||||||
Result := tkIdentifier;
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Result := tkIdentifier;
|
Result := tkIdentifier;
|
||||||
end;
|
end;
|
||||||
@ -3770,14 +3515,8 @@ begin
|
|||||||
FTokenIsValueOrTypeName := True;
|
FTokenIsValueOrTypeName := True;
|
||||||
end
|
end
|
||||||
else
|
else
|
||||||
if KeyComp('Ms_abi_default') and
|
if IsCallingConventionModifier('MS_ABI_DEFAULT') then
|
||||||
(PasCodeFoldRange.BracketNestLevel in [0, 1]) and
|
Result := DoCallingConventionModifier
|
||||||
(fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader] = [rsWasInProcHeader]) and
|
|
||||||
(TopPascalCodeFoldBlockType in ProcModifierAllowed)
|
|
||||||
then begin
|
|
||||||
Result := tkModifier;
|
|
||||||
FRange := FRange + [rsInProcHeader];
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Result := tkIdentifier;
|
Result := tkIdentifier;
|
||||||
end;
|
end;
|
||||||
@ -3831,46 +3570,167 @@ end;
|
|||||||
|
|
||||||
function TSynPasSyn.Func111: TtkTokenKind;
|
function TSynPasSyn.Func111: TtkTokenKind;
|
||||||
begin
|
begin
|
||||||
if KeyComp('vectorcall') and
|
if IsCallingConventionModifier('VECTORCALL') then
|
||||||
(PasCodeFoldRange.BracketNestLevel = 0) and
|
Result := DoCallingConventionModifier
|
||||||
(fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader] = [rsWasInProcHeader]) and
|
|
||||||
(TopPascalCodeFoldBlockType in ProcModifierAllowed)
|
|
||||||
then begin
|
|
||||||
Result := tkModifier;
|
|
||||||
FRange := FRange + [rsInProcHeader];
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Result := tkIdentifier;
|
Result := tkIdentifier;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSynPasSyn.Func178: TtkTokenKind;
|
function TSynPasSyn.Func178: TtkTokenKind;
|
||||||
begin
|
begin
|
||||||
if KeyComp('Sysv_abi_cdecl') and
|
if IsCallingConventionModifier('SYSV_ABI_CDECL') then
|
||||||
(PasCodeFoldRange.BracketNestLevel in [0, 1]) and
|
Result := DoCallingConventionModifier
|
||||||
(fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader] = [rsWasInProcHeader]) and
|
|
||||||
(TopPascalCodeFoldBlockType in ProcModifierAllowed)
|
|
||||||
then begin
|
|
||||||
Result := tkModifier;
|
|
||||||
FRange := FRange + [rsInProcHeader];
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Result := tkIdentifier;
|
Result := tkIdentifier;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSynPasSyn.Func220: TtkTokenKind;
|
function TSynPasSyn.Func220: TtkTokenKind;
|
||||||
begin
|
begin
|
||||||
if KeyComp('Sysv_abi_default') and
|
if IsCallingConventionModifier('SYSV_ABI_DEFAULT') then
|
||||||
(PasCodeFoldRange.BracketNestLevel in [0, 1]) and
|
Result := DoCallingConventionModifier
|
||||||
(fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader] = [rsWasInProcHeader]) and
|
|
||||||
(TopPascalCodeFoldBlockType in ProcModifierAllowed)
|
|
||||||
then begin
|
|
||||||
Result := tkModifier;
|
|
||||||
FRange := FRange + [rsInProcHeader];
|
|
||||||
end
|
|
||||||
else
|
else
|
||||||
Result := tkIdentifier;
|
Result := tkIdentifier;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
function TSynPasSyn.IsCallingConventionModifier(tfb: TPascalCodeFoldBlockType): Boolean;
|
||||||
|
begin
|
||||||
|
if (fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader] = [rsWasInProcHeader]) and
|
||||||
|
(PasCodeFoldRange.RoundBracketNestLevel = 0) and
|
||||||
|
(PasCodeFoldRange.BracketNestLevel <= 1) and // can be: [cdecl]
|
||||||
|
(tfb in ProcModifierAllowed)
|
||||||
|
then
|
||||||
|
Result := True
|
||||||
|
else
|
||||||
|
Result := False;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynPasSyn.IsCallingConventionModifier(const AnUpperKey: string): Boolean;
|
||||||
|
begin
|
||||||
|
Result := IsCallingConventionModifier(TopPascalCodeFoldBlockType) and KeyCompU(AnUpperKey);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynPasSyn.IsCallingConventionModifier(const AnUpperKey: string;
|
||||||
|
tfb: TPascalCodeFoldBlockType): Boolean;
|
||||||
|
begin
|
||||||
|
Result := IsCallingConventionModifier(tfb) and KeyCompU(AnUpperKey);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynPasSyn.DoCallingConventionModifier: TtkTokenKind;
|
||||||
|
begin
|
||||||
|
FRange := FRange + [rsInProcHeader] - [rsWasInProcHeader];
|
||||||
|
Result := tkModifier;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynPasSyn.IsHintModifier(tfb: TPascalCodeFoldBlockType): Boolean;
|
||||||
|
begin
|
||||||
|
tfb := TopPascalCodeFoldBlockType;
|
||||||
|
if (fRange *[rsAfterEqualOrColon, rsProperty] = []) and
|
||||||
|
(PasCodeFoldRange.BracketNestLevel = 0) and
|
||||||
|
( ( (tfb in cfbtVarConstType) and
|
||||||
|
(FTokenState <> tsAfterAbsolute) and
|
||||||
|
(fRange * [rsVarTypeInSpecification, rsAfterEqualOrColon] = [rsVarTypeInSpecification]) ) or
|
||||||
|
( (tfb in [cfbtClass, cfbtClassSection, cfbtRecord, cfbtRecordCase, cfbtRecordCaseSection, cfbtClassConstBlock, cfbtClassTypeBlock]) and
|
||||||
|
( (fRange * [rsAfterClassMembers, rsInProcHeader] = [rsAfterClassMembers]) or
|
||||||
|
(fRange * [rsAfterClassMembers, rsAfterEqualOrColon, rsVarTypeInSpecification] = [rsVarTypeInSpecification])
|
||||||
|
) ) or
|
||||||
|
( (tfb in [cfbtUnitSection, cfbtProgram, cfbtProcedure]) and
|
||||||
|
(fRange * [rsInProcHeader] = []) ) or
|
||||||
|
( (tfb in [cfbtUnit, cfbtNone]) and
|
||||||
|
(fRange * [rsInProcHeader] = []) and (FTokenState = tsAfterProcName) )
|
||||||
|
)
|
||||||
|
then
|
||||||
|
Result := True
|
||||||
|
else
|
||||||
|
Result := False;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynPasSyn.IsHintModifier(const AnUpperKey: string): Boolean;
|
||||||
|
begin
|
||||||
|
Result := IsHintModifier(TopPascalCodeFoldBlockType) and KeyCompU(AnUpperKey);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynPasSyn.IsHintModifier(const AnUpperKey: string; tfb: TPascalCodeFoldBlockType
|
||||||
|
): Boolean;
|
||||||
|
begin
|
||||||
|
Result := IsHintModifier(tfb) and KeyCompU(AnUpperKey);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynPasSyn.DoHintModifier: TtkTokenKind;
|
||||||
|
begin
|
||||||
|
Result := tkModifier;
|
||||||
|
if (fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader, rsAfterClassMembers] = [rsWasInProcHeader, rsAfterClassMembers]) and
|
||||||
|
(TopPascalCodeFoldBlockType in [cfbtClass, cfbtClassSection]) and
|
||||||
|
(CompilerMode = pcmDelphi)
|
||||||
|
then
|
||||||
|
FRange := FRange + [rsInProcHeader]; // virtual reintroduce overload can be after virtual
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynPasSyn.IsClassSection: Boolean;
|
||||||
|
begin
|
||||||
|
Result :=
|
||||||
|
(fRange * [rsInProcHeader, rsAfterEqualOrColon] = []) and
|
||||||
|
( (FTokenState in [tsAtBeginOfStatement, tsAfterVarConstType, tsAfterClass, tsAfterTypedConst]) or (fRange * [rsInClassHeader, rsInObjcProtocol, rsAfterIdentifierOrValue] <> []) ) and
|
||||||
|
(PasCodeFoldRange.BracketNestLevel = 0) and
|
||||||
|
(TopPascalCodeFoldBlockType in [cfbtClass, cfbtClassSection, cfbtRecord, cfbtClassConstBlock, cfbtClassTypeBlock]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynPasSyn.IsClassSection(const AnUpperKey: string): Boolean;
|
||||||
|
begin
|
||||||
|
Result := IsClassSection() and KeyCompU(AnUpperKey);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynPasSyn.DoClassSection: TtkTokenKind;
|
||||||
|
var
|
||||||
|
tfb: TPascalCodeFoldBlockType;
|
||||||
|
begin
|
||||||
|
Result := tkKey;
|
||||||
|
FNextTokenState := tsAtBeginOfStatement;
|
||||||
|
fRange := fRange - [rsAfterClassMembers, rsVarTypeInSpecification];
|
||||||
|
tfb := CloseFolds(TopPascalCodeFoldBlockType(), [cfbtClassConstBlock, cfbtClassTypeBlock]);
|
||||||
|
if (tfb=cfbtClassSection) then
|
||||||
|
EndPascalCodeFoldBlockLastLine;
|
||||||
|
StartPascalCodeFoldBlock(cfbtClassSection);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynPasSyn.IsVirtualityModifier: Boolean;
|
||||||
|
begin
|
||||||
|
Result :=
|
||||||
|
(fRange * [rsInProcHeader, rsProperty, rsAfterEqualOrColon, rsWasInProcHeader, rsAfterClassMembers] = [rsWasInProcHeader, rsAfterClassMembers]) and
|
||||||
|
(PasCodeFoldRange.BracketNestLevel = 0) and
|
||||||
|
(TopPascalCodeFoldBlockType in [cfbtClass, cfbtClassSection]);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynPasSyn.IsVirtualityModifier(const AnUpperKey: string): Boolean;
|
||||||
|
begin
|
||||||
|
Result := IsVirtualityModifier() and KeyCompU(AnUpperKey);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynPasSyn.DoVirtualityModifier: TtkTokenKind;
|
||||||
|
begin
|
||||||
|
Result := tkModifier;
|
||||||
|
FRange := FRange + [rsInProcHeader];
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynPasSyn.IsPropertyDefinitionKey: Boolean;
|
||||||
|
begin
|
||||||
|
Result :=
|
||||||
|
(fRange * [rsProperty, rsAtPropertyOrReadWrite, rsAfterEqualOrColon] = [rsProperty]) and
|
||||||
|
(PasCodeFoldRange.BracketNestLevel = 0);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynPasSyn.IsPropertyDefinitionKey(const AnUpperKey: string): Boolean;
|
||||||
|
begin
|
||||||
|
Result := IsPropertyDefinitionKey() and KeyCompU(AnUpperKey);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynPasSyn.DoPropertyDefinitionKey: TtkTokenKind;
|
||||||
|
begin
|
||||||
|
Result := tkKey;
|
||||||
|
fRange := fRange + [rsAtPropertyOrReadWrite] - [rsVarTypeInSpecification];
|
||||||
|
if FTokenState = tsAfterProperty then
|
||||||
|
FTokenState := tsNone;
|
||||||
|
end;
|
||||||
|
|
||||||
function TSynPasSyn.AltFunc: TtkTokenKind;
|
function TSynPasSyn.AltFunc: TtkTokenKind;
|
||||||
begin
|
begin
|
||||||
Result := tkIdentifier;
|
Result := tkIdentifier;
|
||||||
|
Loading…
Reference in New Issue
Block a user