mirror of https://gitlab.com/basile.b/dexed.git
highlighter, special keywords have their own style
in options: SpeckAttrib
This commit is contained in:
parent
f897fdf802
commit
1cb1615a12
|
@ -11,7 +11,7 @@ uses
|
||||||
|
|
||||||
const
|
const
|
||||||
|
|
||||||
D2Kw: array[0..111] of string =
|
D2Kw: array[0..106] of string =
|
||||||
( 'abstract', 'alias', 'align', 'asm', 'assert', 'auto',
|
( 'abstract', 'alias', 'align', 'asm', 'assert', 'auto',
|
||||||
'body', 'bool', 'break', 'byte',
|
'body', 'bool', 'break', 'byte',
|
||||||
'case', 'cast', 'catch', 'cdouble', 'cent', 'cfloat', 'char', 'class',
|
'case', 'cast', 'catch', 'cdouble', 'cent', 'cfloat', 'char', 'class',
|
||||||
|
@ -34,8 +34,13 @@ const
|
||||||
'template', 'this', 'throw', 'true', 'try', 'typedef', 'typeid', 'typeof',
|
'template', 'this', 'throw', 'true', 'try', 'typedef', 'typeid', 'typeof',
|
||||||
'ubyte', 'ucent', 'uint', 'ulong', 'union', 'unittest', 'ushort',
|
'ubyte', 'ucent', 'uint', 'ulong', 'union', 'unittest', 'ushort',
|
||||||
'version', 'void', 'volatile',
|
'version', 'void', 'volatile',
|
||||||
'wchar', 'while', 'with', 'wstring',
|
'wchar', 'while', 'with', 'wstring'
|
||||||
'__FILE__', '__MODULE__', '__LINE__', '__FUNCTION__', '__PRETTY_FUNCTION__'
|
);
|
||||||
|
|
||||||
|
D2SpecKw: array[0..10] of string =
|
||||||
|
(
|
||||||
|
'__FILE__', '__MODULE__', '__LINE__', '__FUNCTION__', '__PRETTY_FUNCTION__',
|
||||||
|
'__DATE__', '__EOF__', '__TIME__', '__TIMESTAMP__', '__VENDOR__', '__VERSION__'
|
||||||
);
|
);
|
||||||
|
|
||||||
type
|
type
|
||||||
|
@ -52,11 +57,11 @@ type
|
||||||
function toHash(const aValue: string): Byte; {$IFNDEF DEBUG}inline;{$ENDIF}
|
function toHash(const aValue: string): Byte; {$IFNDEF DEBUG}inline;{$ENDIF}
|
||||||
procedure addEntry(const aValue: string);
|
procedure addEntry(const aValue: string);
|
||||||
public
|
public
|
||||||
constructor create;
|
constructor create(from: array of string);
|
||||||
function find(const aValue: string): boolean; {$IFNDEF DEBUG}inline;{$ENDIF}
|
function find(const aValue: string): boolean; {$IFNDEF DEBUG}inline;{$ENDIF}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
TTokenKind = (tkCommt, tkIdent, tkKeywd, tkStrng, tkBlank, tkSymbl, tkNumbr, tkCurrI, tkDDocs);
|
TTokenKind = (tkCommt, tkIdent, tkKeywd, tkStrng, tkBlank, tkSymbl, tkNumbr, tkCurrI, tkDDocs, tkSpecK);
|
||||||
|
|
||||||
TRangeKind = (rkString1, rkString2, rkTokString, rkBlockCom1, rkBlockCom2, rkBlockDoc1, rkBlockDoc2, rkAsm);
|
TRangeKind = (rkString1, rkString2, rkTokString, rkBlockCom1, rkBlockCom2, rkBlockDoc1, rkBlockDoc2, rkAsm);
|
||||||
|
|
||||||
|
@ -104,7 +109,9 @@ type
|
||||||
fCurrIAttrib: TSynHighlighterAttributes;
|
fCurrIAttrib: TSynHighlighterAttributes;
|
||||||
fDDocsAttrib: TSynHighlighterAttributes;
|
fDDocsAttrib: TSynHighlighterAttributes;
|
||||||
fAsblrAttrib: TSynHighlighterAttributes;
|
fAsblrAttrib: TSynHighlighterAttributes;
|
||||||
|
fSpeckAttrib: TSynHighlighterAttributes;
|
||||||
fKeyWords: TD2Dictionary;
|
fKeyWords: TD2Dictionary;
|
||||||
|
fSpecKw: TD2Dictionary;
|
||||||
fCurrIdent: string;
|
fCurrIdent: string;
|
||||||
fLineBuf: string;
|
fLineBuf: string;
|
||||||
fTokStart, fTokStop: Integer;
|
fTokStart, fTokStop: Integer;
|
||||||
|
@ -123,6 +130,7 @@ type
|
||||||
procedure setCurrIAttrib(aValue: TSynHighlighterAttributes);
|
procedure setCurrIAttrib(aValue: TSynHighlighterAttributes);
|
||||||
procedure setDDocsAttrib(aValue: TSynHighlighterAttributes);
|
procedure setDDocsAttrib(aValue: TSynHighlighterAttributes);
|
||||||
procedure setAsblrAttrib(aValue: TSynHighlighterAttributes);
|
procedure setAsblrAttrib(aValue: TSynHighlighterAttributes);
|
||||||
|
procedure setSpeckAttrib(aValue: TSynHighlighterAttributes);
|
||||||
procedure doAttribChange(sender: TObject);
|
procedure doAttribChange(sender: TObject);
|
||||||
procedure setCurrIdent(const aValue: string);
|
procedure setCurrIdent(const aValue: string);
|
||||||
procedure doChanged;
|
procedure doChanged;
|
||||||
|
@ -140,6 +148,7 @@ type
|
||||||
property CurrIAttrib: TSynHighlighterAttributes read fCurrIAttrib write setCurrIAttrib;
|
property CurrIAttrib: TSynHighlighterAttributes read fCurrIAttrib write setCurrIAttrib;
|
||||||
property DDocsAttrib: TSynHighlighterAttributes read fDDocsAttrib write setDDocsAttrib;
|
property DDocsAttrib: TSynHighlighterAttributes read fDDocsAttrib write setDDocsAttrib;
|
||||||
property AsblrAttrib: TSynHighlighterAttributes read fAsblrAttrib write setAsblrAttrib;
|
property AsblrAttrib: TSynHighlighterAttributes read fAsblrAttrib write setAsblrAttrib;
|
||||||
|
property SpeckAttrib: TSynHighlighterAttributes read fSpeckAttrib write setSpeckAttrib;
|
||||||
public
|
public
|
||||||
constructor create(aOwner: TComponent); override;
|
constructor create(aOwner: TComponent); override;
|
||||||
destructor destroy; override;
|
destructor destroy; override;
|
||||||
|
@ -161,11 +170,11 @@ type
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
constructor TD2Dictionary.create;
|
constructor TD2Dictionary.create(from: array of string);
|
||||||
var
|
var
|
||||||
value: string;
|
value: string;
|
||||||
begin
|
begin
|
||||||
for value in D2Kw do
|
for value in from do
|
||||||
addEntry(value);
|
addEntry(value);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -278,7 +287,8 @@ begin
|
||||||
|
|
||||||
DefaultFilter:= 'D source|*.d|D interface|*.di';
|
DefaultFilter:= 'D source|*.d|D interface|*.di';
|
||||||
|
|
||||||
fKeyWords.create;
|
fKeyWords.create(D2Kw);
|
||||||
|
fSpecKw.create(D2SpecKw);
|
||||||
|
|
||||||
fFoldKinds := [fkBrackets];
|
fFoldKinds := [fkBrackets];
|
||||||
|
|
||||||
|
@ -294,6 +304,7 @@ begin
|
||||||
fCurrIAttrib := TSynHighlighterAttributes.Create('CurrentIdentifier','CurrentIdentifier');
|
fCurrIAttrib := TSynHighlighterAttributes.Create('CurrentIdentifier','CurrentIdentifier');
|
||||||
fDDocsAttrib := TSynHighlighterAttributes.Create('DDoc','DDoc');
|
fDDocsAttrib := TSynHighlighterAttributes.Create('DDoc','DDoc');
|
||||||
fAsblrAttrib := TSynHighlighterAttributes.Create('Asm','Asm');
|
fAsblrAttrib := TSynHighlighterAttributes.Create('Asm','Asm');
|
||||||
|
fSpeckAttrib := TSynHighlighterAttributes.Create('SpecialKeywords','SpecialKeywords');
|
||||||
|
|
||||||
fNumbrAttrib.Foreground := $000079F2;
|
fNumbrAttrib.Foreground := $000079F2;
|
||||||
fSymblAttrib.Foreground := clMaroon;
|
fSymblAttrib.Foreground := clMaroon;
|
||||||
|
@ -302,6 +313,7 @@ begin
|
||||||
fStrngAttrib.Foreground := clBlue;
|
fStrngAttrib.Foreground := clBlue;
|
||||||
fKeywdAttrib.Foreground := clNavy;
|
fKeywdAttrib.Foreground := clNavy;
|
||||||
fAsblrAttrib.Foreground := clGray;
|
fAsblrAttrib.Foreground := clGray;
|
||||||
|
fSpeckAttrib.Foreground := clNavy;
|
||||||
|
|
||||||
fCurrIAttrib.Foreground := clBlack;
|
fCurrIAttrib.Foreground := clBlack;
|
||||||
fCurrIAttrib.FrameEdges := sfeAround;
|
fCurrIAttrib.FrameEdges := sfeAround;
|
||||||
|
@ -313,6 +325,7 @@ begin
|
||||||
fCommtAttrib.Style := [fsItalic];
|
fCommtAttrib.Style := [fsItalic];
|
||||||
fKeywdAttrib.Style := [fsBold];
|
fKeywdAttrib.Style := [fsBold];
|
||||||
fAsblrAttrib.Style := [fsBold];
|
fAsblrAttrib.Style := [fsBold];
|
||||||
|
fSpeckAttrib.Style := [fsBold];
|
||||||
|
|
||||||
AddAttribute(fWhiteAttrib);
|
AddAttribute(fWhiteAttrib);
|
||||||
AddAttribute(fNumbrAttrib);
|
AddAttribute(fNumbrAttrib);
|
||||||
|
@ -324,6 +337,7 @@ begin
|
||||||
AddAttribute(fCurrIAttrib);
|
AddAttribute(fCurrIAttrib);
|
||||||
AddAttribute(fDDocsAttrib);
|
AddAttribute(fDDocsAttrib);
|
||||||
AddAttribute(fAsblrAttrib);
|
AddAttribute(fAsblrAttrib);
|
||||||
|
AddAttribute(fSpeckAttrib);
|
||||||
|
|
||||||
fAttribLut[TTokenKind.tkident] := fIdentAttrib;
|
fAttribLut[TTokenKind.tkident] := fIdentAttrib;
|
||||||
fAttribLut[TTokenKind.tkBlank] := fWhiteAttrib;
|
fAttribLut[TTokenKind.tkBlank] := fWhiteAttrib;
|
||||||
|
@ -334,6 +348,7 @@ begin
|
||||||
fAttribLut[TTokenKind.tksymbl] := fSymblAttrib;
|
fAttribLut[TTokenKind.tksymbl] := fSymblAttrib;
|
||||||
fAttribLut[TTokenKind.tkCurrI] := fCurrIAttrib;
|
fAttribLut[TTokenKind.tkCurrI] := fCurrIAttrib;
|
||||||
fAttribLut[TTokenKind.tkDDocs] := fDDocsAttrib;
|
fAttribLut[TTokenKind.tkDDocs] := fDDocsAttrib;
|
||||||
|
fAttribLut[TTokenKind.tkSpecK] := fSpeckAttrib;
|
||||||
|
|
||||||
SetAttributesOnChange(@doAttribChange);
|
SetAttributesOnChange(@doAttribChange);
|
||||||
fTokStop := 1;
|
fTokStop := 1;
|
||||||
|
@ -434,6 +449,11 @@ begin
|
||||||
fAsblrAttrib.Assign(aValue);
|
fAsblrAttrib.Assign(aValue);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TSynD2Syn.setSpeckAttrib(aValue: TSynHighlighterAttributes);
|
||||||
|
begin
|
||||||
|
fSpeckAttrib.Assign(aValue);
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TSynD2Syn.setCurrIdent(const aValue: string);
|
procedure TSynD2Syn.setCurrIdent(const aValue: string);
|
||||||
begin
|
begin
|
||||||
if fCurrIdent = aValue then Exit;
|
if fCurrIdent = aValue then Exit;
|
||||||
|
@ -821,9 +841,10 @@ begin
|
||||||
end;
|
end;
|
||||||
if fKeyWords.find(fLineBuf[FTokStart..fTokStop-1]) then
|
if fKeyWords.find(fLineBuf[FTokStart..fTokStop-1]) then
|
||||||
fTokKind := tkKeywd
|
fTokKind := tkKeywd
|
||||||
else
|
else if fSpecKw.find(fLineBuf[FTokStart..fTokStop-1]) then
|
||||||
if fLineBuf[FTokStart..fTokStop-1] = fCurrIdent then
|
fTokKind := tkSpecK
|
||||||
fTokKind := tkCurrI;
|
else if fLineBuf[FTokStart..fTokStop-1] = fCurrIdent then
|
||||||
|
fTokKind := tkCurrI;
|
||||||
//check asm range
|
//check asm range
|
||||||
if fTokKind = tkKeywd then
|
if fTokKind = tkKeywd then
|
||||||
if fLineBuf[FTokStart..fTokStop-1] = 'asm' then
|
if fLineBuf[FTokStart..fTokStop-1] = 'asm' then
|
||||||
|
|
Loading…
Reference in New Issue