d2 highlighter, add a token kind for errors

This commit is contained in:
Basile Burg 2016-03-11 18:45:04 +01:00
parent f3c15fff00
commit 0d7e34c1f1
1 changed files with 21 additions and 5 deletions

View File

@ -61,7 +61,7 @@ type
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, tkDDocs, tkSpecK); TTokenKind = (tkCommt, tkIdent, tkKeywd, tkStrng, tkBlank, tkSymbl, tkNumbr, tkDDocs, tkSpecK, tkError);
TRangeKind = (rkString1, rkString2, rkTokString, rkBlockCom1, rkBlockCom2, rkBlockDoc1, rkBlockDoc2, rkAsm); TRangeKind = (rkString1, rkString2, rkTokString, rkBlockCom1, rkBlockCom2, rkBlockDoc1, rkBlockDoc2, rkAsm);
@ -111,6 +111,7 @@ type
fDDocsAttrib: TSynHighlighterAttributes; fDDocsAttrib: TSynHighlighterAttributes;
fAsblrAttrib: TSynHighlighterAttributes; fAsblrAttrib: TSynHighlighterAttributes;
fSpeckAttrib: TSynHighlighterAttributes; fSpeckAttrib: TSynHighlighterAttributes;
fErrorAttrib: TSynHighlighterAttributes;
fKeyWords: TD2Dictionary; fKeyWords: TD2Dictionary;
fSpecKw: TD2Dictionary; fSpecKw: TD2Dictionary;
fLineBuf: string; fLineBuf: string;
@ -130,6 +131,7 @@ type
procedure setDDocsAttrib(value: TSynHighlighterAttributes); procedure setDDocsAttrib(value: TSynHighlighterAttributes);
procedure setAsblrAttrib(value: TSynHighlighterAttributes); procedure setAsblrAttrib(value: TSynHighlighterAttributes);
procedure setSpeckAttrib(value: TSynHighlighterAttributes); procedure setSpeckAttrib(value: TSynHighlighterAttributes);
procedure setErrorAttrib(value: TSynHighlighterAttributes);
procedure doAttribChange(sender: TObject); procedure doAttribChange(sender: TObject);
procedure doChanged; procedure doChanged;
protected protected
@ -147,6 +149,7 @@ type
property ddoc: TSynHighlighterAttributes read fDDocsAttrib write setDDocsAttrib; property ddoc: TSynHighlighterAttributes read fDDocsAttrib write setDDocsAttrib;
property inlineAsm: TSynHighlighterAttributes read fAsblrAttrib write setAsblrAttrib; property inlineAsm: TSynHighlighterAttributes read fAsblrAttrib write setAsblrAttrib;
property special: TSynHighlighterAttributes read fSpeckAttrib write setSpeckAttrib; property special: TSynHighlighterAttributes read fSpeckAttrib write setSpeckAttrib;
property errors: TSynHighlighterAttributes read fErrorAttrib write setErrorAttrib;
public public
constructor create(aOwner: TComponent); override; constructor create(aOwner: TComponent); override;
destructor destroy; override; destructor destroy; override;
@ -303,6 +306,7 @@ begin
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'); fSpeckAttrib := TSynHighlighterAttributes.Create('SpecialKeywords','SpecialKeywords');
fErrorAttrib := TSynHighlighterAttributes.Create('Errors','Errors');
fNumbrAttrib.Foreground := $000079F2; fNumbrAttrib.Foreground := $000079F2;
fSymblAttrib.Foreground := clMaroon; fSymblAttrib.Foreground := clMaroon;
@ -320,6 +324,11 @@ begin
fAsblrAttrib.Style := [fsBold]; fAsblrAttrib.Style := [fsBold];
fSpeckAttrib.Style := [fsBold]; fSpeckAttrib.Style := [fsBold];
fErrorAttrib.Foreground:= fIdentAttrib.Foreground;
fErrorAttrib.FrameStyle:= slsWaved;
fErrorAttrib.FrameColor:= clRed;
fErrorAttrib.FrameEdges:= sfeBottom;
AddAttribute(fWhiteAttrib); AddAttribute(fWhiteAttrib);
AddAttribute(fNumbrAttrib); AddAttribute(fNumbrAttrib);
AddAttribute(fSymblAttrib); AddAttribute(fSymblAttrib);
@ -330,6 +339,7 @@ begin
AddAttribute(fDDocsAttrib); AddAttribute(fDDocsAttrib);
AddAttribute(fAsblrAttrib); AddAttribute(fAsblrAttrib);
AddAttribute(fSpeckAttrib); AddAttribute(fSpeckAttrib);
AddAttribute(fErrorAttrib);
fAttribLut[TTokenKind.tkident] := fIdentAttrib; fAttribLut[TTokenKind.tkident] := fIdentAttrib;
fAttribLut[TTokenKind.tkBlank] := fWhiteAttrib; fAttribLut[TTokenKind.tkBlank] := fWhiteAttrib;
@ -340,6 +350,7 @@ begin
fAttribLut[TTokenKind.tksymbl] := fSymblAttrib; fAttribLut[TTokenKind.tksymbl] := fSymblAttrib;
fAttribLut[TTokenKind.tkDDocs] := fDDocsAttrib; fAttribLut[TTokenKind.tkDDocs] := fDDocsAttrib;
fAttribLut[TTokenKind.tkSpecK] := fSpeckAttrib; fAttribLut[TTokenKind.tkSpecK] := fSpeckAttrib;
fAttribLut[TTokenKind.tkError] := fErrorAttrib;
SetAttributesOnChange(@doAttribChange); SetAttributesOnChange(@doAttribChange);
fTokStop := 1; fTokStop := 1;
@ -445,6 +456,11 @@ begin
fSpeckAttrib.Assign(value); fSpeckAttrib.Assign(value);
end; end;
procedure TSynD2Syn.setErrorAttrib(value: TSynHighlighterAttributes);
begin
fErrorAttrib.Assign(value);
end;
procedure TSynD2Syn.setLine(const NewValue: String; LineNumber: Integer); procedure TSynD2Syn.setLine(const NewValue: String; LineNumber: Integer);
begin begin
inherited; inherited;
@ -860,8 +876,8 @@ begin
fTokKind := tkIdent; // invalid op not colorized. fTokKind := tkIdent; // invalid op not colorized.
end; end;
// Keyword - identifiers //Keyword - identifiers
if not isWhite(reader^) then if isFirstIdentifier(reader^) then
begin begin
fTokKind := tkIdent; fTokKind := tkIdent;
while(true) do while(true) do
@ -883,8 +899,8 @@ begin
if fLineBuf[fTokStop] = #10 then exit; if fLineBuf[fTokStop] = #10 then exit;
// Should not happend readUntilAmong(reader, fTokStop, [#9, #10, ' ']);
assert(false); fTokKind := tkError;
end; end;
function TSynD2Syn.GetEol: Boolean; function TSynD2Syn.GetEol: Boolean;