extrasyn: Add highlighters for JSON, Verilog, VHDL. Kindly provided by MRisco, issue #18248. Shorten menu in demo program.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8075 8e941d3f-bd1b-0410-a28a-d453659cc2b4
@ -198,6 +198,10 @@ ResourceString
|
|||||||
SYNS_FilterLDraw = 'LEGO LDraw Files (*.ldr)|*.ldr';
|
SYNS_FilterLDraw = 'LEGO LDraw Files (*.ldr)|*.ldr';
|
||||||
SYNS_FilterLua = 'Lua Script File (*.Lua)|*.Lua';
|
SYNS_FilterLua = 'Lua Script File (*.Lua)|*.Lua';
|
||||||
SYNS_FilterProlog = 'Prolog Files (*.pl;*.pro;*.prl)|*.pl;*.pro;*.prl';
|
SYNS_FilterProlog = 'Prolog Files (*.pl;*.pro;*.prl)|*.pl;*.pro;*.prl';
|
||||||
|
SYNS_FilterVHDL = 'VHDL Files (*.vhd;*.vhdl)|*.vhd;*.vhdl';
|
||||||
|
SYNS_FilterVerilog = 'Verilog Files (*.v;*.vl;*.ver)|*.v;*.vl;*.ver';
|
||||||
|
SYNS_FilterJSON = 'JSON Files (*.json)|*.json';
|
||||||
|
|
||||||
//SYNS_FilterX86Assembly = 'x86 Assembly Files (*.asm)|*.asm';
|
//SYNS_FilterX86Assembly = 'x86 Assembly Files (*.asm)|*.asm';
|
||||||
//SYNS_FilterPascal = 'Pascal Files (*.pas;*.pp;*.dpr;*.dpk;*.inc)|*.pas;*.pp;*.dpr;*.dpk;*.inc';
|
//SYNS_FilterPascal = 'Pascal Files (*.pas;*.pp;*.dpr;*.dpk;*.inc)|*.pas;*.pp;*.dpr;*.dpk;*.inc';
|
||||||
//SYNS_FilterHP48 = 'HP48 Files (*.s;*.sou;*.a;*.hp)|*.s;*.sou;*.a;*.hp';
|
//SYNS_FilterHP48 = 'HP48 Files (*.s;*.sou;*.a;*.hp)|*.s;*.sou;*.a;*.hp';
|
||||||
@ -265,6 +269,9 @@ ResourceString
|
|||||||
SYNS_LangLua = 'Lua Script';
|
SYNS_LangLua = 'Lua Script';
|
||||||
SYNS_Lang8051 = '8051 Assembler';
|
SYNS_Lang8051 = '8051 Assembler';
|
||||||
SYNS_LangProlog = 'Prolog';
|
SYNS_LangProlog = 'Prolog';
|
||||||
|
SYNS_LangVHDL = 'VHDL';
|
||||||
|
SYNS_LangVerilog = 'Verilog';
|
||||||
|
SYNS_LangJSON = 'JSON';
|
||||||
//SYNS_LangHP48 = 'HP48';
|
//SYNS_LangHP48 = 'HP48';
|
||||||
//SYNS_LangCAClipper = 'CA-Clipper';
|
//SYNS_LangCAClipper = 'CA-Clipper';
|
||||||
//SYNS_LangCPM = 'COAS Product Manager Report';
|
//SYNS_LangCPM = 'COAS Product Manager Report';
|
||||||
|
694
components/extrasyn/SyneditHighlighters/synhighlighterjson.pas
Normal file
@ -0,0 +1,694 @@
|
|||||||
|
{-------------------------------------------------------------------------------
|
||||||
|
SynHighlighterJSON v1.1
|
||||||
|
|
||||||
|
This unit provides a SBA JSON highlighter for SynEdit.
|
||||||
|
|
||||||
|
(c) Miguel A. Risco-Castillo
|
||||||
|
|
||||||
|
The contents of this file are subject to the Mozilla Public License
|
||||||
|
Version 1.1 (the "License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
http://www.mozilla.org/MPL/
|
||||||
|
Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
|
||||||
|
the specific language governing rights and limitations under the License.
|
||||||
|
|
||||||
|
Some concepts in this unit are based in the Original Code of Zhou Kan and
|
||||||
|
"La Biblia del SynEdit" of Tito Hinostroza.
|
||||||
|
All Rights Reserved.
|
||||||
|
|
||||||
|
v1.1 2019/12/21
|
||||||
|
Adapted to extrasyn package
|
||||||
|
|
||||||
|
v1.0 2016
|
||||||
|
Initial
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------}
|
||||||
|
|
||||||
|
unit SynHighlighterJSON;
|
||||||
|
|
||||||
|
// extrasyn.inc is the synedit.inc from laz 1.2.0 synedit package source,
|
||||||
|
// If it has changed in newer version you might need to copy it again.
|
||||||
|
// Remember to redclare the syn_lazarus define.
|
||||||
|
{$I extrasyn.inc}
|
||||||
|
{$H+}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
SysUtils, Classes, Graphics, SynEditStrConstExtra, SynEditHighlighterFoldBase, SynEditHighlighter, SynEditTypes, SynEditStrConst;
|
||||||
|
|
||||||
|
type
|
||||||
|
// TtkTokenKind = (tkComment, tkIdentifier, tkKey, tkNull,
|
||||||
|
// tkNumber, tkSpace, tkString, tkSymbol, tkAttribute, tkUnknown);
|
||||||
|
|
||||||
|
// TRangeState = (rsUnknown, rsComment);
|
||||||
|
|
||||||
|
TtkTokenKind = (tkKey, tkString, tkReserved, tkNull, tkNumber, tkSpace,
|
||||||
|
tkSymbol, tkUnknown);
|
||||||
|
|
||||||
|
TRangeState = (rsUnknown, rsAttribute, rsObjectValue, rsArrayValue);
|
||||||
|
|
||||||
|
TProcTableProc = procedure of object;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TSynJSONSyn }
|
||||||
|
|
||||||
|
TSynJSONSyn = class(TSynCustomFoldHighlighter)
|
||||||
|
private
|
||||||
|
FHLWordsList: TStringList;
|
||||||
|
fRange: TRangeState;
|
||||||
|
fLine: PChar;
|
||||||
|
fLineNumber: integer;
|
||||||
|
fProcTable: array[#0..#255] of TProcTableProc;
|
||||||
|
Run: longint;
|
||||||
|
fStringLen: integer;
|
||||||
|
fToIdent: PChar;
|
||||||
|
fTokenPos: integer;
|
||||||
|
FTokenID: TtkTokenKind;
|
||||||
|
FValueAttri: TSynHighlighterAttributes;
|
||||||
|
fIdentifierAttri: TSynHighLighterAttributes;
|
||||||
|
fKeyAttri: TSynHighLighterAttributes;
|
||||||
|
fNumberAttri: TSynHighLighterAttributes;
|
||||||
|
fSpaceAttri: TSynHighLighterAttributes;
|
||||||
|
fSymbolAttri: TSynHighLighterAttributes;
|
||||||
|
fAttribAttri: TSynHighLighterAttributes;
|
||||||
|
fDivider:TSynDividerDrawConfigSetting;
|
||||||
|
procedure CloseArrayProc;
|
||||||
|
procedure CloseObjectProc;
|
||||||
|
procedure CommaProc;
|
||||||
|
function KeyComp(const aKey: string): boolean;
|
||||||
|
procedure OpenArrayProc;
|
||||||
|
procedure OpenObjectProc;
|
||||||
|
procedure SetHLWordsList(AValue: TStringList);
|
||||||
|
procedure SymbolsProc;
|
||||||
|
procedure CRProc;
|
||||||
|
procedure ColonProc;
|
||||||
|
procedure EqualProc;
|
||||||
|
procedure EndTokenProc;
|
||||||
|
procedure GreaterProc;
|
||||||
|
procedure IdentProc;
|
||||||
|
procedure LFProc;
|
||||||
|
procedure LowerProc;
|
||||||
|
procedure MinusProc;
|
||||||
|
procedure ModSymbolProc;
|
||||||
|
procedure NotSymbolProc;
|
||||||
|
procedure NullProc;
|
||||||
|
procedure NumberProc;
|
||||||
|
procedure OrSymbolProc;
|
||||||
|
procedure PlusProc;
|
||||||
|
procedure PointProc;
|
||||||
|
procedure RoundCloseProc;
|
||||||
|
procedure RoundOpenProc;
|
||||||
|
procedure SemiColonProc;
|
||||||
|
procedure SlashProc;
|
||||||
|
procedure SpaceProc;
|
||||||
|
procedure StarProc;
|
||||||
|
procedure StringProc;
|
||||||
|
procedure UnknownProc;
|
||||||
|
procedure FoldValidProc;
|
||||||
|
procedure MakeMethodTables;
|
||||||
|
protected
|
||||||
|
function GetIdentChars: TSynIdentChars; override;
|
||||||
|
function GetSampleSource: string; override;
|
||||||
|
public
|
||||||
|
constructor Create(AOwner: TComponent); override;
|
||||||
|
destructor Destroy; override;
|
||||||
|
function GetDefaultAttribute(Index: integer): TSynHighLighterAttributes;
|
||||||
|
override;
|
||||||
|
function GetEOL: boolean; override;
|
||||||
|
function GetTokenID: TtkTokenKind;
|
||||||
|
procedure SetLine(const NewValue: String; LineNumber:Integer); override;
|
||||||
|
function GetToken: string; override;
|
||||||
|
procedure GetTokenEx(out TokenStart: PChar; out TokenLength: integer); override;
|
||||||
|
function GetTokenAttribute: TSynHighLighterAttributes; override;
|
||||||
|
function GetTokenKind: integer; override;
|
||||||
|
function GetTokenPos: integer; override;
|
||||||
|
procedure Next; override;
|
||||||
|
function GetRange: Pointer; override;
|
||||||
|
procedure SetRange(Value: Pointer); override;
|
||||||
|
procedure ReSetRange; override;
|
||||||
|
function GetDrawDivider(Index: integer): TSynDividerDrawConfigSetting; override;
|
||||||
|
property IdentChars;
|
||||||
|
class function GetLanguageName: string; override;
|
||||||
|
published
|
||||||
|
property IdentifierAttri: TSynHighLighterAttributes read fIdentifierAttri write fIdentifierAttri;
|
||||||
|
property KeyAttri: TSynHighLighterAttributes read fKeyAttri write fKeyAttri;
|
||||||
|
property NumberAttri: TSynHighLighterAttributes read fNumberAttri write fNumberAttri;
|
||||||
|
property SpaceAttri: TSynHighLighterAttributes read fSpaceAttri write fSpaceAttri;
|
||||||
|
property SymbolAttri: TSynHighLighterAttributes read fSymbolAttri write fSymbolAttri;
|
||||||
|
property AttribAttri: TSynHighLighterAttributes read fAttribAttri write fAttribAttri;
|
||||||
|
property ValueAttri: TSynHighLighterAttributes read fValueAttri write fValueAttri;
|
||||||
|
property HLWordsList: TStringList read FHLWordsList write SetHLWordsList;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
var
|
||||||
|
Identifiers: array[#0..#255] of bytebool;
|
||||||
|
mHashTable: array[#0..#255] of integer;
|
||||||
|
|
||||||
|
procedure MakeIdentTable;
|
||||||
|
var
|
||||||
|
I, J: char;
|
||||||
|
begin
|
||||||
|
for I := #0 to #255 do
|
||||||
|
begin
|
||||||
|
case I of
|
||||||
|
'_', '0'..'9', 'a'..'z', 'A'..'Z': Identifiers[I] := True;
|
||||||
|
else
|
||||||
|
Identifiers[I] := False;
|
||||||
|
end;
|
||||||
|
J := I; //UpCase(I); In verilog the keywords are in lower case
|
||||||
|
case I in ['_', '0'..'9', 'A'..'Z', 'a'..'z'] of
|
||||||
|
True: mHashTable[I] := Ord(J)
|
||||||
|
else
|
||||||
|
mHashTable[I] := 0;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynJSONSyn.KeyComp(const aKey: string): boolean;
|
||||||
|
var
|
||||||
|
I: integer;
|
||||||
|
Temp: PChar;
|
||||||
|
begin
|
||||||
|
Temp := fToIdent; // Test from the second char +1
|
||||||
|
if Length(aKey) = fStringLen then
|
||||||
|
begin
|
||||||
|
Result := True;
|
||||||
|
for i := 1 to fStringLen do // Test from the second char := 2
|
||||||
|
begin
|
||||||
|
if mHashTable[Temp^] <> mHashTable[aKey[i]] then
|
||||||
|
begin
|
||||||
|
Result := False;
|
||||||
|
break;
|
||||||
|
end;
|
||||||
|
inc(Temp);
|
||||||
|
end;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
Result := False;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.SetHLWordsList(AValue: TStringList);
|
||||||
|
begin
|
||||||
|
if FHLWordsList=AValue then Exit;
|
||||||
|
FHLWordsList:=AValue;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.IdentProc;
|
||||||
|
var i:integer;
|
||||||
|
begin
|
||||||
|
while Identifiers[fLine[Run]] do inc(Run);
|
||||||
|
fStringLen:=Run-fTokenPos;
|
||||||
|
fToIdent:=fLine + fTokenPos;
|
||||||
|
fTokenID := tkUnknown;
|
||||||
|
if FHLWordsList.Count>0 then for i:=0 to FHLWordsList.Count-1 do
|
||||||
|
begin
|
||||||
|
if KeyComp(FHLWordsList[i]) then fTokenID := tkString;
|
||||||
|
end;
|
||||||
|
//sba json
|
||||||
|
case Upcase(fToIdent^) of
|
||||||
|
'A':begin
|
||||||
|
if KeyComp('author')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
end;
|
||||||
|
'D':begin
|
||||||
|
if KeyComp('date') or
|
||||||
|
KeyComp('description')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
end;
|
||||||
|
'E':begin
|
||||||
|
if KeyComp('explibfiles') or
|
||||||
|
KeyComp('expmonolithic') or
|
||||||
|
KeyComp('exportpath')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
end;
|
||||||
|
'F':begin
|
||||||
|
if KeyComp('false')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
end;
|
||||||
|
'I':begin
|
||||||
|
if KeyComp('interface') or
|
||||||
|
KeyComp('ipcores')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
end;
|
||||||
|
'L':begin
|
||||||
|
if KeyComp('location')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
end;
|
||||||
|
'N':begin
|
||||||
|
if KeyComp('name') or
|
||||||
|
KeyComp('null')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
end;
|
||||||
|
'P':begin
|
||||||
|
if KeyComp('portname')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
//if KeyComp('process') or
|
||||||
|
// KeyComp('package') then begin fTokenID := tkKey; StartCodeFoldBlock(nil); end;
|
||||||
|
//if KeyComp('procedure') then begin fTokenID := tkKey; FoldValidProc; end;
|
||||||
|
end;
|
||||||
|
'T':begin
|
||||||
|
if KeyComp('title') or
|
||||||
|
KeyComp('true')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
end;
|
||||||
|
'U':begin
|
||||||
|
if KeyComp('userfiles')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
end;
|
||||||
|
'V':begin
|
||||||
|
if KeyComp('version') then fTokenID := tkKey;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.MakeMethodTables;
|
||||||
|
var
|
||||||
|
I: char;
|
||||||
|
begin
|
||||||
|
for I := #0 to #255 do
|
||||||
|
case I of
|
||||||
|
#0 : fProcTable[I] := @NullProc;
|
||||||
|
'#','$','&','@' : fProcTable[I] := @SymbolsProc;
|
||||||
|
'A'..'Z', 'a'..'z', '_': fProcTable[I] := @IdentProc;
|
||||||
|
'{': fProcTable[I] := @OpenObjectProc;
|
||||||
|
'}': fProcTable[I] := @CloseObjectProc;
|
||||||
|
'[': fProcTable[I] := @OpenArrayProc;
|
||||||
|
']': fProcTable[I] := @CloseArrayProc;
|
||||||
|
',': fProcTable[I] := @CommaProc;
|
||||||
|
':': fProcTable[I] := @ColonProc;
|
||||||
|
'=': fProcTable[I] := @EqualProc;
|
||||||
|
'>': fProcTable[I] := @GreaterProc;
|
||||||
|
#10: fProcTable[I] := @LFProc;
|
||||||
|
#13: fProcTable[I] := @CRProc;
|
||||||
|
'<': fProcTable[I] := @LowerProc;
|
||||||
|
'%': fProcTable[I] := @ModSymbolProc;
|
||||||
|
'!': fProcTable[I] := @NotSymbolProc;
|
||||||
|
'0'..'9','-': fProcTable[I] := @NumberProc;
|
||||||
|
'|': fProcTable[I] := @OrSymbolProc;
|
||||||
|
'+': fProcTable[I] := @PlusProc;
|
||||||
|
'*': fProcTable[I] := @StarProc;
|
||||||
|
'/': fProcTable[I] := @SlashProc;
|
||||||
|
'.': fProcTable[I] := @PointProc;
|
||||||
|
')': fProcTable[I] := @RoundCloseProc;
|
||||||
|
'(': fProcTable[I] := @RoundOpenProc;
|
||||||
|
';': fProcTable[I] := @SemiColonProc;
|
||||||
|
#1..#9, #11, #12, #14..#32: fProcTable[I] := @SpaceProc;
|
||||||
|
'"': fProcTable[I] := @StringProc; //" #34
|
||||||
|
else
|
||||||
|
fProcTable[I] := @UnknownProc;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TSynJSONSyn.Create(AOwner: TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(AOwner);
|
||||||
|
|
||||||
|
fIdentifierAttri := TSynHighLighterAttributes.Create(SYNS_AttrIdentifier);
|
||||||
|
fIdentifierAttri.Foreground := clWindowText;
|
||||||
|
AddAttribute(fIdentifierAttri);
|
||||||
|
|
||||||
|
fKeyAttri := TSynHighLighterAttributes.Create(SYNS_AttrReservedWord);
|
||||||
|
fKeyAttri.Foreground := clBlue;
|
||||||
|
AddAttribute(fKeyAttri);
|
||||||
|
|
||||||
|
fNumberAttri := TSynHighLighterAttributes.Create(SYNS_AttrNumber);
|
||||||
|
fNumberAttri.Foreground := clRed;
|
||||||
|
AddAttribute(fNumberAttri);
|
||||||
|
|
||||||
|
fSpaceAttri := TSynHighLighterAttributes.Create(SYNS_AttrWhitespace);
|
||||||
|
AddAttribute(fSpaceAttri);
|
||||||
|
|
||||||
|
fSymbolAttri := TSynHighLighterAttributes.Create(SYNS_AttrSymbol);
|
||||||
|
fSymbolAttri.Foreground := clTeal;
|
||||||
|
AddAttribute(fSymbolAttri);
|
||||||
|
|
||||||
|
fAttribAttri := TSynHighLighterAttributes.Create(SYNS_AttrAttributeName);
|
||||||
|
fAttribAttri.Foreground := clPurple; // clMaroon;
|
||||||
|
AddAttribute(fAttribAttri);
|
||||||
|
|
||||||
|
FValueAttri := TSynHighlighterAttributes.Create(SYNS_AttrValue);
|
||||||
|
FValueAttri.Foreground := clNavy;
|
||||||
|
AddAttribute(FValueAttri);
|
||||||
|
|
||||||
|
SetAttributesOnChange(@DefHighlightChange);
|
||||||
|
MakeMethodTables;
|
||||||
|
fRange := rsUnknown;
|
||||||
|
fDefaultFilter := SYNS_FilterJSON;
|
||||||
|
|
||||||
|
fDivider.Color:=clNone;
|
||||||
|
FHLWordsList:=TStringList.Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TSynJSONSyn.Destroy;
|
||||||
|
begin
|
||||||
|
FreeAndNil(FHLWordsList);
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.SetLine(const NewValue: String; LineNumber: Integer);
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
fLine := PChar(NewValue);
|
||||||
|
Run := 0;
|
||||||
|
fLineNumber := LineNumber;
|
||||||
|
Next;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.CloseArrayProc;
|
||||||
|
begin
|
||||||
|
SymbolsProc;
|
||||||
|
FRange := rsUnknown;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.CloseObjectProc;
|
||||||
|
begin
|
||||||
|
SymbolsProc;
|
||||||
|
FRange := rsUnknown;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.ColonProc;
|
||||||
|
begin
|
||||||
|
SymbolsProc;
|
||||||
|
FRange := rsObjectValue;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.CommaProc;
|
||||||
|
begin
|
||||||
|
SymbolsProc;
|
||||||
|
if FRange = rsObjectValue then
|
||||||
|
FRange := rsAttribute;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.SymbolsProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenId := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.CRProc;
|
||||||
|
begin
|
||||||
|
fTokenID := tkSpace;
|
||||||
|
Inc(Run);
|
||||||
|
if fLine[Run + 1] = #10 then Inc(Run);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.EqualProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenID := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.GreaterProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenID := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.LFProc;
|
||||||
|
begin
|
||||||
|
fTokenID := tkSpace;
|
||||||
|
inc(Run);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.LowerProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenID := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.MinusProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenID := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.SlashProc;
|
||||||
|
begin
|
||||||
|
fTokenID := tkSymbol;
|
||||||
|
inc(Run);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.ModSymbolProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenId := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.NotSymbolProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenID := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.NullProc;
|
||||||
|
begin
|
||||||
|
fTokenID := tkNull;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.NumberProc;
|
||||||
|
begin
|
||||||
|
fTokenID := tkNumber;
|
||||||
|
while FLine[Run] in ['0'..'9','.','-','+','e','E'] do
|
||||||
|
inc(Run);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.OpenArrayProc;
|
||||||
|
begin
|
||||||
|
SymbolsProc;
|
||||||
|
FRange := rsArrayValue;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.OpenObjectProc;
|
||||||
|
begin
|
||||||
|
SymbolsProc;
|
||||||
|
FRange := rsAttribute;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.OrSymbolProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenId := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.PlusProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenID := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.PointProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenID := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.RoundCloseProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenID := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.RoundOpenProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
FTokenID := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.SemiColonProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenID := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.SpaceProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenID := tkSpace;
|
||||||
|
while FLine[Run] in [#1..#9, #11, #12, #14..#32] do inc(Run);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.StarProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenID := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.StringProc;
|
||||||
|
begin
|
||||||
|
fTokenID := tkString;
|
||||||
|
if (FLine[Run + 1] = #34) and (FLine[Run + 2] = #34) then inc(Run, 2);
|
||||||
|
repeat
|
||||||
|
case FLine[Run] of
|
||||||
|
#0, #10, #13: break;
|
||||||
|
#92:
|
||||||
|
if FLine[Run + 1] = #10 then inc(Run);
|
||||||
|
end;
|
||||||
|
inc(Run);
|
||||||
|
until FLine[Run] = #34;
|
||||||
|
if FLine[Run] <> #0 then inc(Run);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.EndTokenProc;
|
||||||
|
begin
|
||||||
|
fTokenID := tkKey;
|
||||||
|
EndCodeFoldBlock();
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.UnknownProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
while (fLine[Run] in [#128..#191]) OR // continued utf8 subcode
|
||||||
|
((fLine[Run]<>#0) and (fProcTable[fLine[Run]] = @UnknownProc)) do inc(Run);
|
||||||
|
fTokenID := tkUnknown;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.FoldValidProc;
|
||||||
|
var
|
||||||
|
tmp:integer;
|
||||||
|
found:boolean;
|
||||||
|
begin
|
||||||
|
tmp:=run;
|
||||||
|
found:=false;
|
||||||
|
while (not (fLine[tmp] in [#0, #10, #13])) do if fLine[tmp]=';' then
|
||||||
|
begin
|
||||||
|
found:=true;
|
||||||
|
break;
|
||||||
|
end else inc(tmp);
|
||||||
|
if not found then StartCodeFoldBlock(nil);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.Next;
|
||||||
|
begin
|
||||||
|
fTokenPos := Run;
|
||||||
|
// if fRange = rsComment then CommentProc else
|
||||||
|
fProcTable[fLine[Run]];
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynJSONSyn.GetDefaultAttribute(Index: integer): TSynHighLighterAttributes;
|
||||||
|
begin
|
||||||
|
case Index of
|
||||||
|
SYN_ATTR_IDENTIFIER: Result := fIdentifierAttri;
|
||||||
|
SYN_ATTR_KEYWORD: Result := fKeyAttri;
|
||||||
|
SYN_ATTR_STRING: Result := fValueAttri;
|
||||||
|
SYN_ATTR_WHITESPACE: Result := fSpaceAttri;
|
||||||
|
SYN_ATTR_SYMBOL: Result := fSymbolAttri;
|
||||||
|
else
|
||||||
|
Result := nil;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynJSONSyn.GetEOL: boolean;
|
||||||
|
begin
|
||||||
|
Result := fTokenID = tkNull;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynJSONSyn.GetToken: string;
|
||||||
|
var
|
||||||
|
Len: longint;
|
||||||
|
begin
|
||||||
|
Len := Run - fTokenPos;
|
||||||
|
SetString(Result, (FLine + fTokenPos), Len);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.GetTokenEx(out TokenStart: PChar; out TokenLength: integer);
|
||||||
|
begin
|
||||||
|
TokenLength:=Run-fTokenPos;
|
||||||
|
TokenStart := fLine + fTokenPos;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynJSONSyn.GetTokenID: TtkTokenKind;
|
||||||
|
begin
|
||||||
|
Result := fTokenId;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynJSONSyn.GetTokenAttribute: TSynHighLighterAttributes;
|
||||||
|
begin
|
||||||
|
case GetTokenID of
|
||||||
|
tkString:
|
||||||
|
if FRange in [rsObjectValue, rsArrayValue] then
|
||||||
|
Result := FValueAttri
|
||||||
|
else
|
||||||
|
Result := fAttribAttri;
|
||||||
|
tkKey: Result := fKeyAttri;
|
||||||
|
tkNumber: Result := fNumberAttri;
|
||||||
|
tkSpace: Result := fSpaceAttri;
|
||||||
|
tkSymbol: Result := fSymbolAttri;
|
||||||
|
tkUnknown: Result := fIdentifierAttri;
|
||||||
|
else
|
||||||
|
Result := nil;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynJSONSyn.GetTokenKind: integer;
|
||||||
|
begin
|
||||||
|
Result := Ord(fTokenId);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynJSONSyn.GetTokenPos: integer;
|
||||||
|
begin
|
||||||
|
Result := fTokenPos;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynJSONSyn.GetRange: Pointer;
|
||||||
|
begin
|
||||||
|
// Result := Pointer(fRange);
|
||||||
|
CodeFoldRange.RangeType := Pointer(PtrInt(fRange));
|
||||||
|
Result := inherited;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.ReSetRange;
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
fRange := rsUnknown;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynJSONSyn.GetDrawDivider(Index: integer
|
||||||
|
): TSynDividerDrawConfigSetting;
|
||||||
|
begin
|
||||||
|
Result:=fDivider;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynJSONSyn.SetRange(Value: Pointer);
|
||||||
|
begin
|
||||||
|
// fRange := TRangeState(Value);
|
||||||
|
inherited;
|
||||||
|
fRange := TRangeState(PtrUInt(CodeFoldRange.RangeType));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynJSONSyn.GetIdentChars: TSynIdentChars;
|
||||||
|
begin
|
||||||
|
Result := ['_', '0'..'9', 'a'..'z', 'A'..'Z'];
|
||||||
|
end;
|
||||||
|
|
||||||
|
class function TSynJSONSyn.GetLanguageName :string;
|
||||||
|
begin
|
||||||
|
Result := SYNS_LangJSON;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynJSONSyn.GetSampleSource: string;
|
||||||
|
begin
|
||||||
|
Result :=
|
||||||
|
'{"menu": {'+LineEnding+
|
||||||
|
' "id": "file",'+LineEnding+
|
||||||
|
' "value": "File",'+LineEnding+
|
||||||
|
' "popup": {'+LineEnding+
|
||||||
|
' "menuitem": ['+LineEnding+
|
||||||
|
' {"value": "New", "onclick": "CreateNewDoc()"},'+LineEnding+
|
||||||
|
' {"value": "Open", "onclick": "OpenDoc()"},'+LineEnding+
|
||||||
|
' {"value": "Close", "onclick": "CloseDoc()"}'+LineEnding+
|
||||||
|
' ]'+LineEnding+
|
||||||
|
' }'+LineEnding+
|
||||||
|
'}}';
|
||||||
|
end;
|
||||||
|
|
||||||
|
initialization
|
||||||
|
MakeIdentTable;
|
||||||
|
RegisterPlaceableHighlighter(TSynJSONSyn);
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
@ -27,7 +27,7 @@ replace them with the notice and other provisions required by the GPL.
|
|||||||
If you do not delete the provisions above, a recipient may use your version
|
If you do not delete the provisions above, a recipient may use your version
|
||||||
of this file under either the MPL or the GPL.
|
of this file under either the MPL or the GPL.
|
||||||
|
|
||||||
$Id: SynHighlighterTclTk.pas,v 1.19 2005/01/28 16:53:25 maelh Exp $
|
$Id: SynHighlighterTclTk.pas,v 1.20 2019/06/06 16:53:25 maelh Exp $
|
||||||
|
|
||||||
You may retrieve the latest version of this file at the SynEdit home page,
|
You may retrieve the latest version of this file at the SynEdit home page,
|
||||||
located at http://SynEdit.SourceForge.net
|
located at http://SynEdit.SourceForge.net
|
||||||
@ -38,7 +38,7 @@ Known Issues:
|
|||||||
@abstract(Provides a TCL/Tk highlighter for SynEdit)
|
@abstract(Provides a TCL/Tk highlighter for SynEdit)
|
||||||
@author(Igor Shitikov, converted to SynEdit by David Muir <dhm@dmsoftware.co.uk>)
|
@author(Igor Shitikov, converted to SynEdit by David Muir <dhm@dmsoftware.co.uk>)
|
||||||
@created(5 December 1999, converted to SynEdit April 18, 2000)
|
@created(5 December 1999, converted to SynEdit April 18, 2000)
|
||||||
@lastmod(2000-06-23)
|
@lastmod(2019/06/06) MOD by M.A.R.C. for SBACreator
|
||||||
The SynHighlighterTclTk unit provides SynEdit with a TCL/Tk highlighter.
|
The SynHighlighterTclTk unit provides SynEdit with a TCL/Tk highlighter.
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,6 +62,7 @@ uses
|
|||||||
{$ELSE}
|
{$ELSE}
|
||||||
Graphics,
|
Graphics,
|
||||||
SynEditHighlighter,
|
SynEditHighlighter,
|
||||||
|
SynEditHighlighterFoldBase,
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
SysUtils,
|
SysUtils,
|
||||||
Classes;
|
Classes;
|
||||||
@ -70,12 +71,16 @@ type
|
|||||||
TtkTokenKind = (tkComment, tkIdentifier, tkKey, tkNull, tkNumber, tkSecondKey,
|
TtkTokenKind = (tkComment, tkIdentifier, tkKey, tkNull, tkNumber, tkSecondKey,
|
||||||
tkSpace, tkString, tkSymbol, tkUnknown);
|
tkSpace, tkString, tkSymbol, tkUnknown);
|
||||||
|
|
||||||
TRangeState = (rsUnknown, rsAnsi, rsPasStyle, rsCStyle);
|
TRangeState = (rsUnknown);
|
||||||
|
|
||||||
TProcTableProc = procedure of object;
|
TProcTableProc = procedure of object;
|
||||||
|
|
||||||
|
TBlockID = (
|
||||||
|
BodyBlk
|
||||||
|
);
|
||||||
|
|
||||||
type
|
type
|
||||||
TSynTclTkSyn = class(TSynCustomHighlighter)
|
TSynTclTkSyn = class(TSynCustomFoldHighlighter)
|
||||||
private
|
private
|
||||||
fRange: TRangeState;
|
fRange: TRangeState;
|
||||||
fLine: PChar;
|
fLine: PChar;
|
||||||
@ -95,6 +100,7 @@ type
|
|||||||
fKeyWords: TStrings;
|
fKeyWords: TStrings;
|
||||||
fSecondKeys: TStrings;
|
fSecondKeys: TStrings;
|
||||||
procedure BraceOpenProc;
|
procedure BraceOpenProc;
|
||||||
|
procedure BraceCloseProc;
|
||||||
procedure PointCommaProc;
|
procedure PointCommaProc;
|
||||||
procedure CRProc;
|
procedure CRProc;
|
||||||
procedure IdentProc;
|
procedure IdentProc;
|
||||||
@ -102,14 +108,12 @@ type
|
|||||||
procedure NullProc;
|
procedure NullProc;
|
||||||
procedure NumberProc;
|
procedure NumberProc;
|
||||||
procedure RoundOpenProc;
|
procedure RoundOpenProc;
|
||||||
|
procedure HashProc;
|
||||||
procedure SlashProc;
|
procedure SlashProc;
|
||||||
procedure SpaceProc;
|
procedure SpaceProc;
|
||||||
procedure StringProc;
|
procedure StringProc;
|
||||||
procedure UnknownProc;
|
procedure UnknownProc;
|
||||||
procedure MakeMethodTables;
|
procedure MakeMethodTables;
|
||||||
procedure AnsiProc;
|
|
||||||
procedure PasStyleProc;
|
|
||||||
procedure CStyleProc;
|
|
||||||
procedure SetKeyWords(const Value: TStrings);
|
procedure SetKeyWords(const Value: TStrings);
|
||||||
procedure SetSecondKeys(const Value: TStrings);
|
procedure SetSecondKeys(const Value: TStrings);
|
||||||
function IsKeywordListStored: boolean;
|
function IsKeywordListStored: boolean;
|
||||||
@ -209,15 +213,15 @@ begin
|
|||||||
for I := #0 to #255 do
|
for I := #0 to #255 do
|
||||||
begin
|
begin
|
||||||
case I of
|
case I of
|
||||||
'_', '0'..'9', 'a'..'z', 'A'..'Z':
|
'_', '0'..'9', 'a'..'z', 'A'..'Z': Identifiers[I] := True;
|
||||||
Identifiers[I] := True;
|
|
||||||
else
|
else
|
||||||
Identifiers[I] := False;
|
Identifiers[I] := False;
|
||||||
end;
|
end;
|
||||||
J := UpCase(I);
|
J := UpCase(I);
|
||||||
case I in ['_', 'a'..'z', 'A'..'Z'] of
|
case I in ['_', '0'..'9', 'A'..'Z', 'a'..'z'] of
|
||||||
True: mHashTable[I] := Ord(J) - 64
|
True: mHashTable[I] := Ord(J)
|
||||||
else mHashTable[I] := 0;
|
else
|
||||||
|
mHashTable[I] := 0;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -274,18 +278,19 @@ var
|
|||||||
begin
|
begin
|
||||||
for I := #0 to #255 do
|
for I := #0 to #255 do
|
||||||
case I of
|
case I of
|
||||||
'#': fProcTable[I] := {$IFDEF FPC}@{$ENDIF} SlashProc;
|
|
||||||
'{': fProcTable[I] := {$IFDEF FPC}@{$ENDIF} BraceOpenProc;
|
|
||||||
';': fProcTable[I] := {$IFDEF FPC}@{$ENDIF} PointCommaProc;
|
|
||||||
#13: fProcTable[I] := {$IFDEF FPC}@{$ENDIF} CRProc;
|
|
||||||
'A'..'Z', 'a'..'z', '_': fProcTable[I] := {$IFDEF FPC}@{$ENDIF} IdentProc;
|
|
||||||
#10: fProcTable[I] := {$IFDEF FPC}@{$ENDIF} LFProc;
|
|
||||||
#0: fProcTable[I] := {$IFDEF FPC}@{$ENDIF} NullProc;
|
#0: fProcTable[I] := {$IFDEF FPC}@{$ENDIF} NullProc;
|
||||||
'0'..'9': fProcTable[I] := {$IFDEF FPC}@{$ENDIF} NumberProc;
|
'#': fProcTable[I] := {$IFDEF FPC}@{$ENDIF} HashProc;
|
||||||
|
'{': fProcTable[I] := {$IFDEF FPC}@{$ENDIF} BraceOpenProc;
|
||||||
|
'}': fProcTable[I] := {$IFDEF FPC}@{$ENDIF} BraceCloseProc;
|
||||||
|
';': fProcTable[I] := {$IFDEF FPC}@{$ENDIF} PointCommaProc;
|
||||||
'(': fProcTable[I] := {$IFDEF FPC}@{$ENDIF} RoundOpenProc;
|
'(': fProcTable[I] := {$IFDEF FPC}@{$ENDIF} RoundOpenProc;
|
||||||
|
'"': fProcTable[I] := {$IFDEF FPC}@{$ENDIF} StringProc;
|
||||||
'/': fProcTable[I] := {$IFDEF FPC}@{$ENDIF} SlashProc;
|
'/': fProcTable[I] := {$IFDEF FPC}@{$ENDIF} SlashProc;
|
||||||
|
#10: fProcTable[I] := {$IFDEF FPC}@{$ENDIF} LFProc;
|
||||||
|
#13: fProcTable[I] := {$IFDEF FPC}@{$ENDIF} CRProc;
|
||||||
|
'0'..'9': fProcTable[I] := {$IFDEF FPC}@{$ENDIF} NumberProc;
|
||||||
|
'A'..'Z', 'a'..'z', '_': fProcTable[I] := {$IFDEF FPC}@{$ENDIF} IdentProc;
|
||||||
#1..#9, #11, #12, #14..#32: fProcTable[I] := {$IFDEF FPC}@{$ENDIF} SpaceProc;
|
#1..#9, #11, #12, #14..#32: fProcTable[I] := {$IFDEF FPC}@{$ENDIF} SpaceProc;
|
||||||
#34: fProcTable[I] := {$IFDEF FPC}@{$ENDIF} StringProc;
|
|
||||||
else
|
else
|
||||||
fProcTable[I] := {$IFDEF FPC}@{$ENDIF} UnknownProc;
|
fProcTable[I] := {$IFDEF FPC}@{$ENDIF} UnknownProc;
|
||||||
end;
|
end;
|
||||||
@ -348,129 +353,27 @@ end;
|
|||||||
|
|
||||||
procedure TSynTclTkSyn.SetLine(const NewValue: String; LineNumber:Integer);
|
procedure TSynTclTkSyn.SetLine(const NewValue: String; LineNumber:Integer);
|
||||||
begin
|
begin
|
||||||
|
inherited;
|
||||||
fLine := PChar(NewValue);
|
fLine := PChar(NewValue);
|
||||||
Run := 0;
|
Run := 0;
|
||||||
fLineNumber := LineNumber;
|
fLineNumber := LineNumber;
|
||||||
Next;
|
Next;
|
||||||
end; { SetLine }
|
end; { SetLine }
|
||||||
|
|
||||||
procedure TSynTclTkSyn.AnsiProc;
|
|
||||||
begin
|
|
||||||
fTokenID := tkComment;
|
|
||||||
case FLine[Run] of
|
|
||||||
#0:
|
|
||||||
begin
|
|
||||||
NullProc;
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
#10:
|
|
||||||
begin
|
|
||||||
LFProc;
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
|
|
||||||
#13:
|
|
||||||
begin
|
|
||||||
CRProc;
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
while fLine[Run] <> #0 do
|
|
||||||
case fLine[Run] of
|
|
||||||
'*':
|
|
||||||
if fLine[Run + 1] = ')' then
|
|
||||||
begin
|
|
||||||
fRange := rsUnKnown;
|
|
||||||
inc(Run, 2);
|
|
||||||
break;
|
|
||||||
end else inc(Run);
|
|
||||||
#10: break;
|
|
||||||
|
|
||||||
#13: break;
|
|
||||||
else inc(Run);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TSynTclTkSyn.PasStyleProc;
|
|
||||||
begin
|
|
||||||
fTokenID := tkComment;
|
|
||||||
case FLine[Run] of
|
|
||||||
#0:
|
|
||||||
begin
|
|
||||||
NullProc;
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
#10:
|
|
||||||
begin
|
|
||||||
LFProc;
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
|
|
||||||
#13:
|
|
||||||
begin
|
|
||||||
CRProc;
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
while FLine[Run] <> #0 do
|
|
||||||
case FLine[Run] of
|
|
||||||
'}':
|
|
||||||
begin
|
|
||||||
fRange := rsUnKnown;
|
|
||||||
inc(Run);
|
|
||||||
break;
|
|
||||||
end;
|
|
||||||
#10: break;
|
|
||||||
|
|
||||||
#13: break;
|
|
||||||
else inc(Run);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TSynTclTkSyn.CStyleProc;
|
|
||||||
begin
|
|
||||||
fTokenID := tkComment;
|
|
||||||
case FLine[Run] of
|
|
||||||
#0:
|
|
||||||
begin
|
|
||||||
NullProc;
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
#10:
|
|
||||||
begin
|
|
||||||
LFProc;
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
|
|
||||||
#13:
|
|
||||||
begin
|
|
||||||
CRProc;
|
|
||||||
exit;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
while fLine[Run] <> #0 do
|
|
||||||
case fLine[Run] of
|
|
||||||
'*':
|
|
||||||
if fLine[Run + 1] = '/' then
|
|
||||||
begin
|
|
||||||
fRange := rsUnKnown;
|
|
||||||
inc(Run, 2);
|
|
||||||
break;
|
|
||||||
end else inc(Run);
|
|
||||||
#10: break;
|
|
||||||
|
|
||||||
#13: break;
|
|
||||||
else inc(Run);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TSynTclTkSyn.BraceOpenProc;
|
procedure TSynTclTkSyn.BraceOpenProc;
|
||||||
begin
|
begin
|
||||||
inc(Run);
|
inc(Run);
|
||||||
fTokenID := tkSymbol;
|
fTokenID := tkSymbol;
|
||||||
|
StartCodeFoldBlock(Pointer(PtrUInt(BodyBlk)));
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynTclTkSyn.BraceCloseProc;
|
||||||
|
var Blk:TBlockID;
|
||||||
|
begin
|
||||||
|
blk:=TBlockID(PtrUInt(TopCodeFoldBlockType));
|
||||||
|
if blk=BodyBlk then EndCodeFoldBlock();
|
||||||
|
inc(Run);
|
||||||
|
fTokenID := tkSymbol;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynTclTkSyn.PointCommaProc;
|
procedure TSynTclTkSyn.PointCommaProc;
|
||||||
@ -482,10 +385,8 @@ end;
|
|||||||
procedure TSynTclTkSyn.CRProc;
|
procedure TSynTclTkSyn.CRProc;
|
||||||
begin
|
begin
|
||||||
fTokenID := tkSpace;
|
fTokenID := tkSpace;
|
||||||
Case FLine[Run + 1] of
|
Inc(Run);
|
||||||
#10: inc(Run, 2);
|
if fLine[Run + 1] = #10 then Inc(Run);
|
||||||
else inc(Run);
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynTclTkSyn.IdentProc;
|
procedure TSynTclTkSyn.IdentProc;
|
||||||
@ -494,8 +395,7 @@ begin
|
|||||||
if IsKeyWord(GetToken) then begin
|
if IsKeyWord(GetToken) then begin
|
||||||
fTokenId := tkKey;
|
fTokenId := tkKey;
|
||||||
Exit;
|
Exit;
|
||||||
end
|
end else fTokenId := tkIdentifier;
|
||||||
else fTokenId := tkIdentifier;
|
|
||||||
if IsSecondKeyWord(GetToken)
|
if IsSecondKeyWord(GetToken)
|
||||||
then fTokenId := tkSecondKey
|
then fTokenId := tkSecondKey
|
||||||
else fTokenId := tkIdentifier;
|
else fTokenId := tkIdentifier;
|
||||||
@ -516,7 +416,7 @@ procedure TSynTclTkSyn.NumberProc;
|
|||||||
begin
|
begin
|
||||||
inc(Run);
|
inc(Run);
|
||||||
fTokenID := tkNumber;
|
fTokenID := tkNumber;
|
||||||
while FLine[Run] in ['0'..'9', '.', 'e', 'E'] do
|
while FLine[Run] in ['0'..'9', '.', 'a'..'f', 'A'..'F', 'x', 'X'] do
|
||||||
begin
|
begin
|
||||||
case FLine[Run] of
|
case FLine[Run] of
|
||||||
'.':
|
'.':
|
||||||
@ -532,38 +432,22 @@ begin
|
|||||||
fTokenId := tkSymbol;
|
fTokenId := tkSymbol;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TSynTclTkSyn.HashProc;
|
||||||
|
begin
|
||||||
|
fTokenID := tkComment;
|
||||||
|
while FLine[Run] <> #0 do
|
||||||
|
begin
|
||||||
|
case FLine[Run] of
|
||||||
|
#10, #13: break;
|
||||||
|
end;
|
||||||
|
inc(Run);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TSynTclTkSyn.SlashProc;
|
procedure TSynTclTkSyn.SlashProc;
|
||||||
begin
|
begin
|
||||||
case FLine[Run + 1] of
|
inc(Run);
|
||||||
'/':
|
fTokenID := tkSymbol;
|
||||||
begin
|
|
||||||
inc(Run, 2);
|
|
||||||
fTokenID := tkComment;
|
|
||||||
while FLine[Run] <> #0 do
|
|
||||||
begin
|
|
||||||
case FLine[Run] of
|
|
||||||
#10, #13: break;
|
|
||||||
end;
|
|
||||||
inc(Run);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
'*':
|
|
||||||
begin
|
|
||||||
inc(Run);
|
|
||||||
fTokenId := tkSymbol;
|
|
||||||
end;
|
|
||||||
else
|
|
||||||
begin
|
|
||||||
fTokenID := tkComment;
|
|
||||||
while FLine[Run] <> #0 do
|
|
||||||
begin
|
|
||||||
case FLine[Run] of
|
|
||||||
#10, #13: break;
|
|
||||||
end;
|
|
||||||
inc(Run);
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynTclTkSyn.SpaceProc;
|
procedure TSynTclTkSyn.SpaceProc;
|
||||||
@ -594,20 +478,18 @@ begin
|
|||||||
Inc(Run, 2)
|
Inc(Run, 2)
|
||||||
else
|
else
|
||||||
{$ENDIF}
|
{$ENDIF}
|
||||||
|
// inc(Run);
|
||||||
|
// fTokenID := tkUnKnown;
|
||||||
inc(Run);
|
inc(Run);
|
||||||
fTokenID := tkUnKnown;
|
while (fLine[Run] in [#128..#191]) OR // continued utf8 subcode
|
||||||
|
((fLine[Run]<>#0) and (fProcTable[fLine[Run]] = @UnknownProc)) do inc(Run);
|
||||||
|
fTokenID := tkUnknown;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynTclTkSyn.Next;
|
procedure TSynTclTkSyn.Next;
|
||||||
begin
|
begin
|
||||||
fTokenPos := Run;
|
fTokenPos := Run;
|
||||||
case fRange of
|
fProcTable[fLine[Run]];
|
||||||
rsAnsi: AnsiProc;
|
|
||||||
rsPasStyle: PasStyleProc;
|
|
||||||
rsCStyle: CStyleProc;
|
|
||||||
else
|
|
||||||
fProcTable[fLine[Run]];
|
|
||||||
end;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSynTclTkSyn.GetDefaultAttribute(Index: integer): TSynHighlighterAttributes;
|
function TSynTclTkSyn.GetDefaultAttribute(Index: integer): TSynHighlighterAttributes;
|
||||||
@ -626,13 +508,13 @@ end;
|
|||||||
|
|
||||||
function TSynTclTkSyn.GetEol: Boolean;
|
function TSynTclTkSyn.GetEol: Boolean;
|
||||||
begin
|
begin
|
||||||
Result := False;
|
Result := fTokenID = tkNull;
|
||||||
if fTokenId = tkNull then Result := True;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSynTclTkSyn.GetRange: Pointer;
|
function TSynTclTkSyn.GetRange: Pointer;
|
||||||
begin
|
begin
|
||||||
Result := Pointer(PtrInt(fRange));
|
CodeFoldRange.RangeType := Pointer(PtrInt(fRange));
|
||||||
|
Result := inherited;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function TSynTclTkSyn.GetToken: string;
|
function TSynTclTkSyn.GetToken: string;
|
||||||
@ -677,12 +559,15 @@ end;
|
|||||||
|
|
||||||
procedure TSynTclTkSyn.ResetRange;
|
procedure TSynTclTkSyn.ResetRange;
|
||||||
begin
|
begin
|
||||||
|
inherited;
|
||||||
fRange := rsUnknown;
|
fRange := rsUnknown;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynTclTkSyn.SetRange(Value: Pointer);
|
procedure TSynTclTkSyn.SetRange(Value: Pointer);
|
||||||
begin
|
begin
|
||||||
fRange := TRangeState(PtrUInt(Value));
|
// fRange := TRangeState(PtrUInt(Value));
|
||||||
|
inherited;
|
||||||
|
fRange := TRangeState(PtrUInt(CodeFoldRange.RangeType));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSynTclTkSyn.SetKeyWords(const Value: TStrings);
|
procedure TSynTclTkSyn.SetKeyWords(const Value: TStrings);
|
||||||
@ -770,7 +655,8 @@ begin
|
|||||||
iIndex := 0;
|
iIndex := 0;
|
||||||
for cDefKey := Low(TclTkKeys) to High(TclTkKeys) do
|
for cDefKey := Low(TclTkKeys) to High(TclTkKeys) do
|
||||||
begin
|
begin
|
||||||
if not iKeys.Find( TclTkKeys[cDefKey], iIndex ) then
|
iIndex:=iKeys.IndexOf(TclTkKeys[cDefKey]);
|
||||||
|
if iIndex=-1 then
|
||||||
begin
|
begin
|
||||||
Result := True;
|
Result := True;
|
||||||
Exit;
|
Exit;
|
||||||
|
@ -0,0 +1,985 @@
|
|||||||
|
{-------------------------------------------------------------------------------
|
||||||
|
SynHighlighterVerilog v1.2
|
||||||
|
|
||||||
|
This unit provides a Verilog highlighter for SynEdit.
|
||||||
|
|
||||||
|
2015 (c) Miguel A. Risco-Castillo
|
||||||
|
|
||||||
|
The contents of this file are subject to the Mozilla Public License
|
||||||
|
Version 1.1 (the "License"); you may not use this file except in compliance
|
||||||
|
with the License. You may obtain a copy of the License at
|
||||||
|
http://www.mozilla.org/MPL/
|
||||||
|
Software distributed under the License is distributed on an "AS IS" basis,
|
||||||
|
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
|
||||||
|
the specific language governing rights and limitations under the License.
|
||||||
|
|
||||||
|
Some concepts in this unit are based in the Original Code of Zhou Kan and
|
||||||
|
"La Biblia del SynEdit" of Tito Hinostroza.
|
||||||
|
All Rights Reserved.
|
||||||
|
|
||||||
|
v1.2 2019/12/21
|
||||||
|
Adapted to extrasyn package
|
||||||
|
|
||||||
|
v1.1 2015
|
||||||
|
Add special list of highlighted words
|
||||||
|
|
||||||
|
-------------------------------------------------------------------------------}
|
||||||
|
|
||||||
|
unit synhighlighterverilog;
|
||||||
|
|
||||||
|
// extrasyn.inc is the synedit.inc from laz 1.2.0 synedit package source,
|
||||||
|
// If it has changed in newer version you might need to copy it again.
|
||||||
|
// Remember to redclare the syn_lazarus define.
|
||||||
|
{$I extrasyn.inc}
|
||||||
|
{$H+}
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses
|
||||||
|
SysUtils, Classes, Graphics, SynEditStrConstExtra, SynEditHighlighterFoldBase, SynEditHighlighter, SynEditTypes, SynEditStrConst;
|
||||||
|
|
||||||
|
type
|
||||||
|
TtkTokenKind = (tkSBA, tkIeee, tkComment, tkIdentifier, tkKey, tkNull,
|
||||||
|
tkNumber, tkSpace, tkString, tkSymbol, tkAttribute, tkUnknown);
|
||||||
|
|
||||||
|
TRangeState = (rsUnknown, rsComment);
|
||||||
|
|
||||||
|
TProcTableProc = procedure of object;
|
||||||
|
|
||||||
|
type
|
||||||
|
|
||||||
|
{ TSynVerilogSyn }
|
||||||
|
|
||||||
|
TSynVerilogSyn = class(TSynCustomFoldHighlighter)
|
||||||
|
private
|
||||||
|
FHLWordsList: TStringList;
|
||||||
|
fRange: TRangeState;
|
||||||
|
fLine: PChar;
|
||||||
|
fLineNumber: integer;
|
||||||
|
fProcTable: array[#0..#255] of TProcTableProc;
|
||||||
|
Run: longint;
|
||||||
|
fStringLen: integer;
|
||||||
|
fToIdent: PChar;
|
||||||
|
fTokenPos: integer;
|
||||||
|
FTokenID: TtkTokenKind;
|
||||||
|
fCommentAttri: TSynHighLighterAttributes;
|
||||||
|
fIdentifierAttri: TSynHighLighterAttributes;
|
||||||
|
fKeyAttri: TSynHighLighterAttributes;
|
||||||
|
fNumberAttri: TSynHighLighterAttributes;
|
||||||
|
fSpaceAttri: TSynHighLighterAttributes;
|
||||||
|
fStringAttri: TSynHighLighterAttributes;
|
||||||
|
fSymbolAttri: TSynHighLighterAttributes;
|
||||||
|
fAttribAttri: TSynHighLighterAttributes;
|
||||||
|
FIeeeAttri: TSynHighLighterAttributes;
|
||||||
|
fSBAAttri: TSynHighLighterAttributes;
|
||||||
|
fDivider:TSynDividerDrawConfigSetting;
|
||||||
|
procedure CommentProc;
|
||||||
|
function KeyComp(const aKey: string): boolean;
|
||||||
|
procedure SetHLWordsList(AValue: TStringList);
|
||||||
|
procedure SymbolsProc;
|
||||||
|
procedure BraceCloseProc;
|
||||||
|
procedure BraceOpenProc;
|
||||||
|
procedure CRProc;
|
||||||
|
procedure ColonProc;
|
||||||
|
procedure EqualProc;
|
||||||
|
procedure EndTokenProc;
|
||||||
|
procedure GreaterProc;
|
||||||
|
procedure IdentProc;
|
||||||
|
procedure LFProc;
|
||||||
|
procedure LowerProc;
|
||||||
|
procedure MinusProc;
|
||||||
|
procedure ModSymbolProc;
|
||||||
|
procedure NotSymbolProc;
|
||||||
|
procedure NullProc;
|
||||||
|
procedure NumberProc;
|
||||||
|
procedure OrSymbolProc;
|
||||||
|
procedure PlusProc;
|
||||||
|
procedure PointProc;
|
||||||
|
procedure RoundCloseProc;
|
||||||
|
procedure RoundOpenProc;
|
||||||
|
procedure SemiColonProc;
|
||||||
|
procedure SlashProc;
|
||||||
|
procedure SpaceProc;
|
||||||
|
procedure SquareCloseProc;
|
||||||
|
procedure SquareOpenProc;
|
||||||
|
procedure StarProc;
|
||||||
|
procedure StringProc;
|
||||||
|
procedure TildeProc;
|
||||||
|
procedure AttribProc;
|
||||||
|
procedure XOrSymbolProc;
|
||||||
|
procedure UnknownProc;
|
||||||
|
procedure FoldValidProc;
|
||||||
|
procedure MakeMethodTables;
|
||||||
|
protected
|
||||||
|
function GetIdentChars: TSynIdentChars; override;
|
||||||
|
function GetSampleSource: string; override;
|
||||||
|
public
|
||||||
|
constructor Create(AOwner: TComponent); override;
|
||||||
|
destructor Destroy; override;
|
||||||
|
function GetDefaultAttribute(Index: integer): TSynHighLighterAttributes;
|
||||||
|
override;
|
||||||
|
function GetEOL: boolean; override;
|
||||||
|
function GetTokenID: TtkTokenKind;
|
||||||
|
procedure SetLine(const NewValue: String; LineNumber:Integer); override;
|
||||||
|
function GetToken: string; override;
|
||||||
|
procedure GetTokenEx(out TokenStart: PChar; out TokenLength: integer); override;
|
||||||
|
function GetTokenAttribute: TSynHighLighterAttributes; override;
|
||||||
|
function GetTokenKind: integer; override;
|
||||||
|
function GetTokenPos: integer; override;
|
||||||
|
procedure Next; override;
|
||||||
|
function GetRange: Pointer; override;
|
||||||
|
procedure SetRange(Value: Pointer); override;
|
||||||
|
procedure ReSetRange; override;
|
||||||
|
function GetDrawDivider(Index: integer): TSynDividerDrawConfigSetting; override;
|
||||||
|
property IdentChars;
|
||||||
|
class function GetLanguageName: string; override;
|
||||||
|
published
|
||||||
|
property CommentAttri: TSynHighLighterAttributes read fCommentAttri write fCommentAttri;
|
||||||
|
property IdentifierAttri: TSynHighLighterAttributes read fIdentifierAttri write fIdentifierAttri;
|
||||||
|
property KeyAttri: TSynHighLighterAttributes read fKeyAttri write fKeyAttri;
|
||||||
|
property NumberAttri: TSynHighLighterAttributes read fNumberAttri write fNumberAttri;
|
||||||
|
property SpaceAttri: TSynHighLighterAttributes read fSpaceAttri write fSpaceAttri;
|
||||||
|
property StringAttri: TSynHighLighterAttributes read fStringAttri write fStringAttri;
|
||||||
|
property SymbolAttri: TSynHighLighterAttributes read fSymbolAttri write fSymbolAttri;
|
||||||
|
property AttribAttri: TSynHighLighterAttributes read fAttribAttri write fAttribAttri;
|
||||||
|
property IeeeAttri: TSynHighLighterAttributes read fIeeeAttri write fIeeeAttri;
|
||||||
|
property SBAAttri: TSynHighLighterAttributes read fSBAAttri write fSBAAttri;
|
||||||
|
property HLWordsList: TStringList read FHLWordsList write SetHLWordsList;
|
||||||
|
end;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
var
|
||||||
|
Identifiers: array[#0..#255] of bytebool;
|
||||||
|
mHashTable: array[#0..#255] of integer;
|
||||||
|
|
||||||
|
procedure MakeIdentTable;
|
||||||
|
var
|
||||||
|
I, J: char;
|
||||||
|
begin
|
||||||
|
for I := #0 to #255 do
|
||||||
|
begin
|
||||||
|
case I of
|
||||||
|
'_', '0'..'9', 'a'..'z', 'A'..'Z': Identifiers[I] := True;
|
||||||
|
else
|
||||||
|
Identifiers[I] := False;
|
||||||
|
end;
|
||||||
|
J := I; //UpCase(I); In verilog the keywords are in lower case
|
||||||
|
case I in ['_', '0'..'9', 'A'..'Z', 'a'..'z'] of
|
||||||
|
True: mHashTable[I] := Ord(J)
|
||||||
|
else
|
||||||
|
mHashTable[I] := 0;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynVerilogSyn.KeyComp(const aKey: string): boolean;
|
||||||
|
var
|
||||||
|
I: integer;
|
||||||
|
Temp: PChar;
|
||||||
|
begin
|
||||||
|
Temp := fToIdent; // Test from the second char +1
|
||||||
|
if Length(aKey) = fStringLen then
|
||||||
|
begin
|
||||||
|
Result := True;
|
||||||
|
for i := 1 to fStringLen do // Test from the second char := 2
|
||||||
|
begin
|
||||||
|
if mHashTable[Temp^] <> mHashTable[aKey[i]] then
|
||||||
|
begin
|
||||||
|
Result := False;
|
||||||
|
break;
|
||||||
|
end;
|
||||||
|
inc(Temp);
|
||||||
|
end;
|
||||||
|
end
|
||||||
|
else
|
||||||
|
Result := False;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.SetHLWordsList(AValue: TStringList);
|
||||||
|
begin
|
||||||
|
if FHLWordsList=AValue then Exit;
|
||||||
|
FHLWordsList:=AValue;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.IdentProc;
|
||||||
|
var i:integer;
|
||||||
|
begin
|
||||||
|
while Identifiers[fLine[Run]] do inc(Run);
|
||||||
|
fStringLen:=Run-fTokenPos;
|
||||||
|
fToIdent:=fLine + fTokenPos;
|
||||||
|
fTokenID := tkUnknown;
|
||||||
|
if FHLWordsList.Count>0 then for i:=0 to FHLWordsList.Count-1 do
|
||||||
|
begin
|
||||||
|
if KeyComp(FHLWordsList[i]) then fTokenID := tkString;
|
||||||
|
end;
|
||||||
|
case Upcase(fToIdent^) of
|
||||||
|
'A':begin
|
||||||
|
//verilog
|
||||||
|
if KeyComp('always') or
|
||||||
|
KeyComp('and') or
|
||||||
|
KeyComp('assign') or
|
||||||
|
KeyComp('automatic')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
end;
|
||||||
|
'B':begin
|
||||||
|
//verilog
|
||||||
|
if KeyComp('begin') or
|
||||||
|
KeyComp('buf') or
|
||||||
|
KeyComp('bufif0') or
|
||||||
|
KeyComp('bufif1')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
if KeyComp('begin') then begin fTokenID := tkKey; StartCodeFoldBlock(nil); end;
|
||||||
|
end;
|
||||||
|
'C':begin
|
||||||
|
//verilog
|
||||||
|
if KeyComp('cell') or
|
||||||
|
KeyComp('cmos') or
|
||||||
|
KeyComp('config')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
if KeyComp('case') then begin fTokenID := tkKey; StartCodeFoldBlock(nil); end;
|
||||||
|
if KeyComp('casex') then begin fTokenID := tkKey; StartCodeFoldBlock(nil); end;
|
||||||
|
if KeyComp('casez') then begin fTokenID := tkKey; StartCodeFoldBlock(nil); end;
|
||||||
|
end;
|
||||||
|
'D':begin
|
||||||
|
//verilog
|
||||||
|
if KeyComp('deassign') or
|
||||||
|
KeyComp('default') or
|
||||||
|
KeyComp('defparam') or
|
||||||
|
KeyComp('design') or
|
||||||
|
KeyComp('disable') then fTokenID := tkKey;
|
||||||
|
end;
|
||||||
|
'E':begin
|
||||||
|
//verilog
|
||||||
|
if KeyComp('edge') or
|
||||||
|
KeyComp('else') or
|
||||||
|
KeyComp('event')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
if KeyComp('end') then endTokenProc;
|
||||||
|
if KeyComp('endcase') then endTokenProc;
|
||||||
|
if KeyComp('endconfig') then endTokenProc;
|
||||||
|
if KeyComp('endfunction') then endTokenProc;
|
||||||
|
if KeyComp('endgenerate') then endTokenProc;
|
||||||
|
if KeyComp('endmodule') then endTokenProc;
|
||||||
|
if KeyComp('endprimitive') then endTokenProc;
|
||||||
|
if KeyComp('endspecify') then endTokenProc;
|
||||||
|
if KeyComp('endtable') then endTokenProc;
|
||||||
|
if KeyComp('endtask') then endTokenProc;
|
||||||
|
end;
|
||||||
|
'F':begin
|
||||||
|
//verilog
|
||||||
|
if KeyComp('for') or
|
||||||
|
KeyComp('force') or
|
||||||
|
KeyComp('forever') or
|
||||||
|
KeyComp('fork') or
|
||||||
|
KeyComp('function')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
end;
|
||||||
|
'G':begin
|
||||||
|
//verilog
|
||||||
|
if KeyComp('generate') or
|
||||||
|
KeyComp('genvar')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
end;
|
||||||
|
'H':begin
|
||||||
|
//verilog
|
||||||
|
if KeyComp('highz0') or
|
||||||
|
KeyComp('highz1')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
end;
|
||||||
|
'I':begin
|
||||||
|
//verilog
|
||||||
|
if KeyComp('if') or
|
||||||
|
KeyComp('ifnone') or
|
||||||
|
KeyComp('incdir') or
|
||||||
|
KeyComp('include') or
|
||||||
|
KeyComp('initial') or
|
||||||
|
KeyComp('inout') or
|
||||||
|
KeyComp('input') or
|
||||||
|
KeyComp('instance') or
|
||||||
|
KeyComp('integer')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
end;
|
||||||
|
'J':begin
|
||||||
|
if KeyComp('join') then fTokenID := tkKey;
|
||||||
|
end;
|
||||||
|
'K':begin
|
||||||
|
|
||||||
|
end;
|
||||||
|
'L':begin
|
||||||
|
//verilog
|
||||||
|
if KeyComp('large') or
|
||||||
|
KeyComp('liblist') or
|
||||||
|
KeyComp('library') or
|
||||||
|
KeyComp('localparam')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
end;
|
||||||
|
'M':begin
|
||||||
|
//verilog
|
||||||
|
if KeyComp('macromodule') or
|
||||||
|
KeyComp('medium')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
if KeyComp('module') then begin fTokenID := tkKey; StartCodeFoldBlock(nil); end;
|
||||||
|
end;
|
||||||
|
'N':begin
|
||||||
|
//verilog
|
||||||
|
if KeyComp('nand') or
|
||||||
|
KeyComp('negedge') or
|
||||||
|
KeyComp('nmos') or
|
||||||
|
KeyComp('nor') or
|
||||||
|
KeyComp('noshowcancelled') or
|
||||||
|
KeyComp('not') or
|
||||||
|
KeyComp('notif0') or
|
||||||
|
KeyComp('notif1')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
end;
|
||||||
|
'O':begin
|
||||||
|
//verilog
|
||||||
|
if KeyComp('or') or
|
||||||
|
KeyComp('output')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
end;
|
||||||
|
'P':begin
|
||||||
|
//verilog
|
||||||
|
if KeyComp('parameter') or
|
||||||
|
KeyComp('pmos') or
|
||||||
|
KeyComp('posedge') or
|
||||||
|
KeyComp('primitive') or
|
||||||
|
KeyComp('pull0') or
|
||||||
|
KeyComp('pull1') or
|
||||||
|
KeyComp('pulldown') or
|
||||||
|
KeyComp('pullup') or
|
||||||
|
KeyComp('pulsestyle_oneventglitch') or
|
||||||
|
KeyComp('pulsestyle_ondetectglitch')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
//if KeyComp('process') or
|
||||||
|
// KeyComp('package') then begin fTokenID := tkKey; StartCodeFoldBlock(nil); end;
|
||||||
|
//if KeyComp('procedure') then begin fTokenID := tkKey; FoldValidProc; end;
|
||||||
|
end;
|
||||||
|
'Q':begin
|
||||||
|
|
||||||
|
end;
|
||||||
|
'R':begin
|
||||||
|
//verilog
|
||||||
|
if KeyComp('remos') or
|
||||||
|
KeyComp('real') or
|
||||||
|
KeyComp('realtime') or
|
||||||
|
KeyComp('reg') or
|
||||||
|
KeyComp('release') or
|
||||||
|
KeyComp('repeat') or
|
||||||
|
KeyComp('rnmos') or
|
||||||
|
KeyComp('rpmos') or
|
||||||
|
KeyComp('rtran') or
|
||||||
|
KeyComp('rtranif0') or
|
||||||
|
KeyComp('rtranif1')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
end;
|
||||||
|
'S':begin
|
||||||
|
//verilog
|
||||||
|
if KeyComp('scalared') or
|
||||||
|
KeyComp('showcancelled') or
|
||||||
|
KeyComp('signed') or
|
||||||
|
KeyComp('small') or
|
||||||
|
KeyComp('specify') or
|
||||||
|
KeyComp('specparam') or
|
||||||
|
KeyComp('strong0') or
|
||||||
|
KeyComp('strong1') or
|
||||||
|
KeyComp('supply0') or
|
||||||
|
KeyComp('supply1')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
//SBA
|
||||||
|
if KeyComp('sbaread') or
|
||||||
|
KeyComp('sbawrite') or
|
||||||
|
KeyComp('sba_config') or
|
||||||
|
KeyComp('sba_package') or
|
||||||
|
KeyComp('sba_typedef') or
|
||||||
|
KeyComp('sbacall') or
|
||||||
|
KeyComp('sbaret') or
|
||||||
|
KeyComp('sbajmp')
|
||||||
|
then fTokenID := tkSBA;
|
||||||
|
end;
|
||||||
|
'T':begin
|
||||||
|
//verilog
|
||||||
|
if KeyComp('table') or
|
||||||
|
KeyComp('task') or
|
||||||
|
KeyComp('time') or
|
||||||
|
KeyComp('tran') or
|
||||||
|
KeyComp('tranif0') or
|
||||||
|
KeyComp('tranif1') or
|
||||||
|
KeyComp('tri') or
|
||||||
|
KeyComp('tri0') or
|
||||||
|
KeyComp('tri1') or
|
||||||
|
KeyComp('triand') or
|
||||||
|
KeyComp('trior') or
|
||||||
|
KeyComp('trireg')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
end;
|
||||||
|
'U':begin
|
||||||
|
//verilog
|
||||||
|
if KeyComp('unsigned') or
|
||||||
|
KeyComp('use')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
end;
|
||||||
|
'V':begin
|
||||||
|
//verilog
|
||||||
|
if KeyComp('vectored') then fTokenID := tkKey;
|
||||||
|
end;
|
||||||
|
'W':begin
|
||||||
|
//verilog
|
||||||
|
if KeyComp('wait') or
|
||||||
|
KeyComp('wand') or
|
||||||
|
KeyComp('weak0') or
|
||||||
|
KeyComp('weak1') or
|
||||||
|
KeyComp('while') or
|
||||||
|
KeyComp('wire') or
|
||||||
|
KeyComp('wor')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
// if KeyComp('while') then begin fTokenID := tkKey; StartCodeFoldBlock(nil); end;
|
||||||
|
end;
|
||||||
|
'X':begin
|
||||||
|
//verilog
|
||||||
|
if KeyComp('xnor') or
|
||||||
|
KeyComp('xor')
|
||||||
|
then fTokenID := tkKey;
|
||||||
|
end;
|
||||||
|
'Y':begin
|
||||||
|
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.MakeMethodTables;
|
||||||
|
var
|
||||||
|
I: char;
|
||||||
|
begin
|
||||||
|
for I := #0 to #255 do
|
||||||
|
case I of
|
||||||
|
#0 : fProcTable[I] := @NullProc;
|
||||||
|
'#','$','&','@' : fProcTable[I] := @SymbolsProc;
|
||||||
|
'}': fProcTable[I] := @BraceCloseProc;
|
||||||
|
'{': fProcTable[I] := @BraceOpenProc;
|
||||||
|
#13: fProcTable[I] := @CRProc;
|
||||||
|
':': fProcTable[I] := @ColonProc;
|
||||||
|
'=': fProcTable[I] := @EqualProc;
|
||||||
|
'>': fProcTable[I] := @GreaterProc;
|
||||||
|
'A'..'Z', 'a'..'z', '_': fProcTable[I] := @IdentProc;
|
||||||
|
#10: fProcTable[I] := @LFProc;
|
||||||
|
'<': fProcTable[I] := @LowerProc;
|
||||||
|
'-': fProcTable[I] := @MinusProc;
|
||||||
|
'%': fProcTable[I] := @ModSymbolProc;
|
||||||
|
'!': fProcTable[I] := @NotSymbolProc;
|
||||||
|
'0'..'9': fProcTable[I] := @NumberProc;
|
||||||
|
'|': fProcTable[I] := @OrSymbolProc;
|
||||||
|
'+': fProcTable[I] := @PlusProc;
|
||||||
|
'.': fProcTable[I] := @PointProc;
|
||||||
|
')': fProcTable[I] := @RoundCloseProc;
|
||||||
|
'(': fProcTable[I] := @RoundOpenProc;
|
||||||
|
';': fProcTable[I] := @SemiColonProc;
|
||||||
|
'/': fProcTable[I] := @SlashProc;
|
||||||
|
#1..#9, #11, #12, #14..#32: fProcTable[I] := @SpaceProc;
|
||||||
|
']': fProcTable[I] := @SquareCloseProc;
|
||||||
|
'[': fProcTable[I] := @SquareOpenProc;
|
||||||
|
'*': fProcTable[I] := @StarProc;
|
||||||
|
#34: fProcTable[I] := @StringProc; //"
|
||||||
|
'~': fProcTable[I] := @TildeProc;
|
||||||
|
#39: fProcTable[I] := @AttribProc; //'
|
||||||
|
#96: fProcTable[I] := @AttribProc; //`
|
||||||
|
'^': fProcTable[I] := @XOrSymbolProc;
|
||||||
|
else
|
||||||
|
fProcTable[I] := @UnknownProc;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
constructor TSynVerilogSyn.Create(AOwner: TComponent);
|
||||||
|
begin
|
||||||
|
inherited Create(AOwner);
|
||||||
|
|
||||||
|
fCommentAttri := TSynHighLighterAttributes.Create(SYNS_AttrComment);
|
||||||
|
fCommentAttri.Foreground := clGreen;
|
||||||
|
AddAttribute(fCommentAttri);
|
||||||
|
|
||||||
|
fIdentifierAttri := TSynHighLighterAttributes.Create(SYNS_AttrIdentifier);
|
||||||
|
fIdentifierAttri.Foreground := clWindowText;
|
||||||
|
AddAttribute(fIdentifierAttri);
|
||||||
|
|
||||||
|
fKeyAttri := TSynHighLighterAttributes.Create(SYNS_AttrReservedWord);
|
||||||
|
fKeyAttri.Foreground := clBlue;
|
||||||
|
AddAttribute(fKeyAttri);
|
||||||
|
|
||||||
|
fNumberAttri := TSynHighLighterAttributes.Create(SYNS_AttrNumber);
|
||||||
|
fNumberAttri.Foreground := clRed;
|
||||||
|
AddAttribute(fNumberAttri);
|
||||||
|
|
||||||
|
fSpaceAttri := TSynHighLighterAttributes.Create(SYNS_AttrWhitespace);
|
||||||
|
AddAttribute(fSpaceAttri);
|
||||||
|
|
||||||
|
fStringAttri := TSynHighLighterAttributes.Create(SYNS_AttrString);
|
||||||
|
fStringAttri.Foreground := clMaroon;
|
||||||
|
AddAttribute(fStringAttri);
|
||||||
|
|
||||||
|
fSymbolAttri := TSynHighLighterAttributes.Create(SYNS_AttrSymbol);
|
||||||
|
fSymbolAttri.Foreground := clTeal;
|
||||||
|
AddAttribute(fSymbolAttri);
|
||||||
|
|
||||||
|
fAttribAttri := TSynHighLighterAttributes.Create(SYNS_AttrAttributeName);
|
||||||
|
fAttribAttri.Foreground := $000080FF;
|
||||||
|
AddAttribute(fAttribAttri);
|
||||||
|
|
||||||
|
fIeeeAttri := TSynHighLighterAttributes.Create(SYNS_AttrSecondReservedWord);
|
||||||
|
fIeeeAttri.Foreground := $00804000;
|
||||||
|
AddAttribute(fIeeeAttri);
|
||||||
|
|
||||||
|
fSBAAttri := TSynHighLighterAttributes.Create(SYNS_AttrMiscellaneous);
|
||||||
|
fSBAAttri.Foreground := $00C08000;
|
||||||
|
AddAttribute(fSBAAttri);
|
||||||
|
|
||||||
|
SetAttributesOnChange(@DefHighlightChange);
|
||||||
|
MakeMethodTables;
|
||||||
|
fRange := rsUnknown;
|
||||||
|
fDefaultFilter := SYNS_FilterVerilog;
|
||||||
|
|
||||||
|
fDivider.Color:=clNone;
|
||||||
|
FHLWordsList:=TStringList.Create;
|
||||||
|
end;
|
||||||
|
|
||||||
|
destructor TSynVerilogSyn.Destroy;
|
||||||
|
begin
|
||||||
|
FreeAndNil(FHLWordsList);
|
||||||
|
inherited Destroy;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.SetLine(const NewValue: String; LineNumber: Integer);
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
fLine := PChar(NewValue);
|
||||||
|
Run := 0;
|
||||||
|
fLineNumber := LineNumber;
|
||||||
|
Next;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.SymbolsProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenId := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.BraceCloseProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenId := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.BraceOpenProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenId := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.CRProc;
|
||||||
|
begin
|
||||||
|
fTokenID := tkSpace;
|
||||||
|
Inc(Run);
|
||||||
|
if fLine[Run + 1] = #10 then Inc(Run);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.ColonProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenID := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.EqualProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenID := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.GreaterProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenID := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.LFProc;
|
||||||
|
begin
|
||||||
|
fTokenID := tkSpace;
|
||||||
|
inc(Run);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.LowerProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenID := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.MinusProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenID := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.SlashProc;
|
||||||
|
begin
|
||||||
|
fTokenID := tkSymbol;
|
||||||
|
inc(Run);
|
||||||
|
|
||||||
|
if (FLine[Run] = '/') then
|
||||||
|
begin
|
||||||
|
if (FLine[Run+1] = ' ') and (FLine[Run+2] = '/') and
|
||||||
|
(FLine[Run+3] = 'L') and (FLine[Run+4] = ':') then
|
||||||
|
begin
|
||||||
|
fTokenID := tkSBA;
|
||||||
|
end else fTokenID := tkComment;
|
||||||
|
while not (FLine[Run] in [#0, #10, #13]) do inc(Run);
|
||||||
|
end else if (FLine[Run] = '*') then
|
||||||
|
begin
|
||||||
|
fRange := rsComment; //marca inicio de rango comentario
|
||||||
|
CommentProc; //Procesa en modo rango comentario
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.CommentProc;
|
||||||
|
begin
|
||||||
|
fTokenID := tkComment;
|
||||||
|
if (FLine[Run]=#0) then begin NullProc; exit; end; // Si fin de línea
|
||||||
|
while not (FLine[Run] in [#0, #10, #13]) do
|
||||||
|
begin
|
||||||
|
if (FLine[Run]='*') and (FLine[Run+1]='/') then
|
||||||
|
begin
|
||||||
|
fRange:=rsUnknown;
|
||||||
|
inc(Run,2);
|
||||||
|
break;
|
||||||
|
end else inc(Run);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.ModSymbolProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenId := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.NotSymbolProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenID := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.NullProc;
|
||||||
|
begin
|
||||||
|
fTokenID := tkNull;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.NumberProc;
|
||||||
|
begin
|
||||||
|
fTokenID := tkNumber;
|
||||||
|
while FLine[Run] in ['0'..'9', '.', 'u', 'U', 'l', 'L', 'x', 'X', 'e', 'E', 'f', 'F'] do
|
||||||
|
inc(Run);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.OrSymbolProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenId := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.PlusProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenID := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.PointProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenID := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.RoundCloseProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenID := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.RoundOpenProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
FTokenID := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.SemiColonProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenID := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.SpaceProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenID := tkSpace;
|
||||||
|
while FLine[Run] in [#1..#9, #11, #12, #14..#32] do inc(Run);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.SquareCloseProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenID := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.SquareOpenProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenID := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.StarProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenID := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.StringProc;
|
||||||
|
begin
|
||||||
|
fTokenID := tkString;
|
||||||
|
if (FLine[Run + 1] = #34) and (FLine[Run + 2] = #34) then inc(Run, 2);
|
||||||
|
repeat
|
||||||
|
case FLine[Run] of
|
||||||
|
#0, #10, #13: break;
|
||||||
|
#92:
|
||||||
|
if FLine[Run + 1] = #10 then inc(Run);
|
||||||
|
end;
|
||||||
|
inc(Run);
|
||||||
|
until FLine[Run] = #34;
|
||||||
|
if FLine[Run] <> #0 then inc(Run);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.TildeProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenId := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.AttribProc;
|
||||||
|
var
|
||||||
|
tmp:integer;
|
||||||
|
c:char;
|
||||||
|
|
||||||
|
begin
|
||||||
|
fTokenID := tkSymbol;
|
||||||
|
inc(Run);
|
||||||
|
tmp:=Run;
|
||||||
|
c:=lowercase(fLine[Run]);
|
||||||
|
while fLine[tmp] in ['a'..'z','A'..'Z'] do inc(tmp);
|
||||||
|
fStringLen:=tmp-fTokenPos;
|
||||||
|
fToIdent:=fLine + fTokenPos;
|
||||||
|
if (c='b') or
|
||||||
|
(c='d') or
|
||||||
|
(c='h') or
|
||||||
|
keycomp('''include') or
|
||||||
|
keycomp('''ifdef') or
|
||||||
|
keycomp('''ifndef') or
|
||||||
|
keycomp('''define') or
|
||||||
|
keycomp('''endif') or
|
||||||
|
keycomp('''else') or
|
||||||
|
(c='o') then
|
||||||
|
begin
|
||||||
|
fTokenID := tkAttribute;
|
||||||
|
while fLine[Run] in ['a'..'z','A'..'Z'] do inc(Run);
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.XOrSymbolProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
fTokenId := tkSymbol;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.EndTokenProc;
|
||||||
|
//var tmp:integer;
|
||||||
|
begin
|
||||||
|
fTokenID := tkKey;
|
||||||
|
//while fLine[Run]=' ' do inc(Run);
|
||||||
|
//tmp:=Run;
|
||||||
|
//while Identifiers[fLine[Run]] do inc(Run);
|
||||||
|
//fStringLen:=Run-tmp;
|
||||||
|
//fToIdent:=fLine + tmp;
|
||||||
|
//if not (
|
||||||
|
// keycomp('architecture') or
|
||||||
|
// keycomp('if') or
|
||||||
|
// keycomp('case') or
|
||||||
|
// keycomp('component') or
|
||||||
|
// keycomp('function') or
|
||||||
|
// keycomp('loop') or
|
||||||
|
// keycomp('package') or
|
||||||
|
// keycomp('procedure') or
|
||||||
|
// keycomp('process')
|
||||||
|
// ) then Run:=tmp;
|
||||||
|
EndCodeFoldBlock();
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.UnknownProc;
|
||||||
|
begin
|
||||||
|
inc(Run);
|
||||||
|
while (fLine[Run] in [#128..#191]) OR // continued utf8 subcode
|
||||||
|
((fLine[Run]<>#0) and (fProcTable[fLine[Run]] = @UnknownProc)) do inc(Run);
|
||||||
|
fTokenID := tkUnknown;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.FoldValidProc;
|
||||||
|
var
|
||||||
|
tmp:integer;
|
||||||
|
found:boolean;
|
||||||
|
begin
|
||||||
|
tmp:=run;
|
||||||
|
found:=false;
|
||||||
|
while (not (fLine[tmp] in [#0, #10, #13])) do if fLine[tmp]=';' then
|
||||||
|
begin
|
||||||
|
found:=true;
|
||||||
|
break;
|
||||||
|
end else inc(tmp);
|
||||||
|
if not found then StartCodeFoldBlock(nil);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.Next;
|
||||||
|
begin
|
||||||
|
fTokenPos := Run;
|
||||||
|
if fRange = rsComment then CommentProc else fProcTable[fLine[Run]];
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynVerilogSyn.GetDefaultAttribute(Index: integer): TSynHighLighterAttributes;
|
||||||
|
begin
|
||||||
|
case Index of
|
||||||
|
SYN_ATTR_COMMENT: Result := fCommentAttri;
|
||||||
|
SYN_ATTR_IDENTIFIER: Result := fIdentifierAttri;
|
||||||
|
SYN_ATTR_KEYWORD: Result := fKeyAttri;
|
||||||
|
SYN_ATTR_STRING: Result := fStringAttri;
|
||||||
|
SYN_ATTR_WHITESPACE: Result := fSpaceAttri;
|
||||||
|
SYN_ATTR_SYMBOL: Result := fSymbolAttri;
|
||||||
|
else
|
||||||
|
Result := nil;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynVerilogSyn.GetEOL: boolean;
|
||||||
|
begin
|
||||||
|
Result := fTokenID = tkNull;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynVerilogSyn.GetToken: string;
|
||||||
|
var
|
||||||
|
Len: longint;
|
||||||
|
begin
|
||||||
|
Len := Run - fTokenPos;
|
||||||
|
SetString(Result, (FLine + fTokenPos), Len);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.GetTokenEx(out TokenStart: PChar; out TokenLength: integer);
|
||||||
|
begin
|
||||||
|
TokenLength:=Run-fTokenPos;
|
||||||
|
TokenStart := fLine + fTokenPos;
|
||||||
|
|
||||||
|
//if TokenLength>0 then begin
|
||||||
|
// TokenStart:=@fLine[fTokenPos];
|
||||||
|
//end else begin
|
||||||
|
// TokenStart:=nil;
|
||||||
|
//end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynVerilogSyn.GetTokenID: TtkTokenKind;
|
||||||
|
begin
|
||||||
|
Result := fTokenId;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynVerilogSyn.GetTokenAttribute: TSynHighLighterAttributes;
|
||||||
|
begin
|
||||||
|
case GetTokenID of
|
||||||
|
tkComment: Result := fCommentAttri;
|
||||||
|
tkIdentifier: Result := fIdentifierAttri;
|
||||||
|
tkKey: Result := fKeyAttri;
|
||||||
|
tkNumber: Result := fNumberAttri;
|
||||||
|
tkSpace: Result := fSpaceAttri;
|
||||||
|
tkString: Result := fStringAttri;
|
||||||
|
tkSymbol: Result := fSymbolAttri;
|
||||||
|
tkAttribute: Result := fAttribAttri;
|
||||||
|
tkIeee: Result := fIeeeAttri;
|
||||||
|
tkSBA: Result := fSBAAttri;
|
||||||
|
tkUnknown: Result := fIdentifierAttri;
|
||||||
|
else
|
||||||
|
Result := nil;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynVerilogSyn.GetTokenKind: integer;
|
||||||
|
begin
|
||||||
|
Result := Ord(fTokenId);
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynVerilogSyn.GetTokenPos: integer;
|
||||||
|
begin
|
||||||
|
Result := fTokenPos;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynVerilogSyn.GetRange: Pointer;
|
||||||
|
begin
|
||||||
|
// Result := Pointer(fRange);
|
||||||
|
CodeFoldRange.RangeType := Pointer(PtrInt(fRange));
|
||||||
|
Result := inherited;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.ReSetRange;
|
||||||
|
begin
|
||||||
|
inherited;
|
||||||
|
fRange := rsUnknown;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynVerilogSyn.GetDrawDivider(Index: integer
|
||||||
|
): TSynDividerDrawConfigSetting;
|
||||||
|
begin
|
||||||
|
Result:=fDivider;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSynVerilogSyn.SetRange(Value: Pointer);
|
||||||
|
begin
|
||||||
|
// fRange := TRangeState(Value);
|
||||||
|
inherited;
|
||||||
|
fRange := TRangeState(PtrUInt(CodeFoldRange.RangeType));
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynVerilogSyn.GetIdentChars: TSynIdentChars;
|
||||||
|
begin
|
||||||
|
Result := ['_', '0'..'9', 'a'..'z', 'A'..'Z'];
|
||||||
|
end;
|
||||||
|
|
||||||
|
class function TSynVerilogSyn.GetLanguageName :string;
|
||||||
|
begin
|
||||||
|
Result := SYNS_LangVerilog;
|
||||||
|
end;
|
||||||
|
|
||||||
|
function TSynVerilogSyn.GetSampleSource: string;
|
||||||
|
begin
|
||||||
|
Result :=
|
||||||
|
'// ----------------------------------------------------------'+LineEnding+
|
||||||
|
'// Module: verilogtest_2'+LineEnding+
|
||||||
|
'// ----------------------------------------------------------'+LineEnding+
|
||||||
|
''+LineEnding+
|
||||||
|
'`timescale 1ns / 100ps'+LineEnding+
|
||||||
|
''+LineEnding+
|
||||||
|
'module nc_test_2(Y, A, B, sel);'+LineEnding+
|
||||||
|
' output [15:0] Y;'+LineEnding+
|
||||||
|
' input [15:0] A, B;'+LineEnding+
|
||||||
|
' input sel;'+LineEnding+
|
||||||
|
' reg [15:0] Y;'+LineEnding+
|
||||||
|
' always @(A or B or sel)'+LineEnding+
|
||||||
|
' if (sel == 1''b0)'+LineEnding+
|
||||||
|
' Y = A;'+LineEnding+
|
||||||
|
' else'+LineEnding+
|
||||||
|
' Y = B;'+LineEnding+
|
||||||
|
'endmodule ';
|
||||||
|
end;
|
||||||
|
|
||||||
|
initialization
|
||||||
|
MakeIdentTable;
|
||||||
|
RegisterPlaceableHighlighter(TSynVerilogSyn);
|
||||||
|
|
||||||
|
end.
|
||||||
|
|
1120
components/extrasyn/SyneditHighlighters/synhighlightervhdl.pas
Normal file
@ -1,7 +1,7 @@
|
|||||||
object Form1: TForm1
|
object Form1: TForm1
|
||||||
Left = 366
|
Left = 641
|
||||||
Height = 449
|
Height = 449
|
||||||
Top = 155
|
Top = 230
|
||||||
Width = 742
|
Width = 742
|
||||||
Caption = 'Form1'
|
Caption = 'Form1'
|
||||||
ClientHeight = 429
|
ClientHeight = 429
|
||||||
@ -9,7 +9,7 @@ object Form1: TForm1
|
|||||||
Menu = MainMenu1
|
Menu = MainMenu1
|
||||||
OnCreate = FormCreate
|
OnCreate = FormCreate
|
||||||
OnDestroy = FormDestroy
|
OnDestroy = FormDestroy
|
||||||
LCLVersion = '1.9.0.0'
|
LCLVersion = '2.3.0.0'
|
||||||
inline SynEdit1: TSynEdit
|
inline SynEdit1: TSynEdit
|
||||||
Left = 0
|
Left = 0
|
||||||
Height = 429
|
Height = 429
|
||||||
@ -19,7 +19,7 @@ object Form1: TForm1
|
|||||||
Font.Height = -13
|
Font.Height = -13
|
||||||
Font.Name = 'Courier New'
|
Font.Name = 'Courier New'
|
||||||
Font.Pitch = fpFixed
|
Font.Pitch = fpFixed
|
||||||
Font.Quality = fqNonAntialiased
|
Font.Quality = fqCleartype
|
||||||
ParentColor = False
|
ParentColor = False
|
||||||
ParentFont = False
|
ParentFont = False
|
||||||
TabOrder = 0
|
TabOrder = 0
|
||||||
@ -649,8 +649,8 @@ object Form1: TForm1
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
object MainMenu1: TMainMenu
|
object MainMenu1: TMainMenu
|
||||||
left = 152
|
Left = 152
|
||||||
top = 40
|
Top = 40
|
||||||
object MenuItem1: TMenuItem
|
object MenuItem1: TMenuItem
|
||||||
Caption = 'Highlighter'
|
Caption = 'Highlighter'
|
||||||
end
|
end
|
||||||
|
@ -16,7 +16,7 @@ uses
|
|||||||
SynHighlighterAsm, SynHighlighterDOT, SynHighlighterIDL, SynHighlighterKix, {SynHighlighterMsg,}
|
SynHighlighterAsm, SynHighlighterDOT, SynHighlighterIDL, SynHighlighterKix, {SynHighlighterMsg,}
|
||||||
SynHighlighterSDD, SynHighlighterSml, SynHighlighterURI, SynHighlighterM3, SynHighlighterRC,
|
SynHighlighterSDD, SynHighlighterSml, SynHighlighterURI, SynHighlighterM3, SynHighlighterRC,
|
||||||
SynHighlighterST, SynHighlighter8051, SynHighlighterLua, SynHighlighterProlog, SynHighlighterCAC,
|
SynHighlighterST, SynHighlighter8051, SynHighlighterLua, SynHighlighterProlog, SynHighlighterCAC,
|
||||||
SynHighlighterAWK, SynHighlighterGnuplot;
|
SynHighlighterAWK, SynHighlighterGnuplot, SynHighlighterVHDL, SynHighlighterVerilog, SynHighlighterJSON;
|
||||||
|
|
||||||
// SynHighlighterGeneral;
|
// SynHighlighterGeneral;
|
||||||
|
|
||||||
@ -86,9 +86,13 @@ procedure TForm1.FormCreate(Sender: TObject);
|
|||||||
var
|
var
|
||||||
i, c: Integer;
|
i, c: Integer;
|
||||||
item: TMenuItem;
|
item: TMenuItem;
|
||||||
|
submenu: TMenuItem;
|
||||||
hl: TSynCustomHighlighter;
|
hl: TSynCustomHighlighter;
|
||||||
|
hlCap: String; // highlighter caption
|
||||||
|
lastChar: Char;
|
||||||
begin
|
begin
|
||||||
Caption := FORM_CAPTION;
|
Caption := FORM_CAPTION;
|
||||||
|
SynEdit1.Font.Quality := fqClearType;
|
||||||
|
|
||||||
FHighlighters := TFPList.Create;
|
FHighlighters := TFPList.Create;
|
||||||
|
|
||||||
@ -131,6 +135,9 @@ begin
|
|||||||
FHighlighters.Add(TSynCACSyn.Create(Self));
|
FHighlighters.Add(TSynCACSyn.Create(Self));
|
||||||
FHighlighters.Add(TSynSTSyn.Create(self));
|
FHighlighters.Add(TSynSTSyn.Create(self));
|
||||||
FHighlighters.Add(TSynGnuplotSyn.Create(self));
|
FHighlighters.Add(TSynGnuplotSyn.Create(self));
|
||||||
|
FHighlighters.Add(TSynVHDLSyn.Create(Self));
|
||||||
|
FHighlighters.Add(TSynVerilogSyn.Create(Self));
|
||||||
|
FHighlighters.Add(TSynJSONSyn.Create(Self));
|
||||||
|
|
||||||
// FHighlighters.Add(TSynCPMSyn.Create(self));
|
// FHighlighters.Add(TSynCPMSyn.Create(self));
|
||||||
// FHighlighters.Add(TSynGeneralSyn.Create(self));
|
// FHighlighters.Add(TSynGeneralSyn.Create(self));
|
||||||
@ -140,9 +147,18 @@ begin
|
|||||||
|
|
||||||
FHighlighters.Sort(@CompareHighlighters);
|
FHighlighters.Sort(@CompareHighlighters);
|
||||||
|
|
||||||
|
lastChar := #0;
|
||||||
for i:=0 to FHighlighters.Count-1 do begin
|
for i:=0 to FHighlighters.Count-1 do begin
|
||||||
hl := TSynCustomHighlighter(FHighlighters[i]);
|
hl := TSynCustomHighlighter(FHighlighters[i]);
|
||||||
if Assigned(hl) then begin
|
if Assigned(hl) then begin
|
||||||
|
hlCap := GetHighlighterCaption(hl);
|
||||||
|
if hlCap[1] <> lastChar then
|
||||||
|
begin
|
||||||
|
lastChar := hlCap[1];
|
||||||
|
subMenu := TMenuItem.Create(self);
|
||||||
|
subMenu.Caption := hlCap[1] + '...';
|
||||||
|
MenuItem1.Add(subMenu);
|
||||||
|
end;
|
||||||
SetDefaultColors(hl);
|
SetDefaultColors(hl);
|
||||||
item := TMenuItem.Create(self);
|
item := TMenuItem.Create(self);
|
||||||
item.Tag := i+1; //0 = unknown highlighter
|
item.Tag := i+1; //0 = unknown highlighter
|
||||||
@ -154,7 +170,7 @@ begin
|
|||||||
end;
|
end;
|
||||||
// item.Hint := hl.ClassName;
|
// item.Hint := hl.ClassName;
|
||||||
item.OnClick := @MenuClick;
|
item.OnClick := @MenuClick;
|
||||||
MenuItem1.Add(item);
|
subMenu.Add(item);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<CONFIG>
|
<CONFIG>
|
||||||
<Package Version="4">
|
<Package Version="5">
|
||||||
<PathDelim Value="\"/>
|
<PathDelim Value="\"/>
|
||||||
<Name Value="ExtraHighlighters"/>
|
<Name Value="ExtraHighlighters"/>
|
||||||
<Author Value="Various authors, see each highlighter source file for more info."/>
|
<Author Value="Various authors, see each highlighter source file for more info."/>
|
||||||
@ -19,8 +19,8 @@
|
|||||||
</CompilerOptions>
|
</CompilerOptions>
|
||||||
<Description Value="Extra highlighters for synedit"/>
|
<Description Value="Extra highlighters for synedit"/>
|
||||||
<License Value="MPL GPL dual license."/>
|
<License Value="MPL GPL dual license."/>
|
||||||
<Version Major="1"/>
|
<Version Major="1" Minor="2"/>
|
||||||
<Files Count="40">
|
<Files Count="43">
|
||||||
<Item1>
|
<Item1>
|
||||||
<Filename Value="SyneditHighlighters\syneditstrconstextra.pas"/>
|
<Filename Value="SyneditHighlighters\syneditstrconstextra.pas"/>
|
||||||
<UnitName Value="SynEditStrConstExtra"/>
|
<UnitName Value="SynEditStrConstExtra"/>
|
||||||
@ -182,7 +182,20 @@
|
|||||||
<Filename Value="SyneditHighlighters\synhighlightergnuplot.pas"/>
|
<Filename Value="SyneditHighlighters\synhighlightergnuplot.pas"/>
|
||||||
<UnitName Value="synhighlightergnuplot"/>
|
<UnitName Value="synhighlightergnuplot"/>
|
||||||
</Item40>
|
</Item40>
|
||||||
|
<Item41>
|
||||||
|
<Filename Value="SyneditHighlighters\synhighlightervhdl.pas"/>
|
||||||
|
<UnitName Value="SynHighlighterVHDL"/>
|
||||||
|
</Item41>
|
||||||
|
<Item42>
|
||||||
|
<Filename Value="SyneditHighlighters\synhighlighterverilog.pas"/>
|
||||||
|
<UnitName Value="synhighlighterverilog"/>
|
||||||
|
</Item42>
|
||||||
|
<Item43>
|
||||||
|
<Filename Value="SyneditHighlighters\synhighlighterjson.pas"/>
|
||||||
|
<UnitName Value="SynHighlighterJSON"/>
|
||||||
|
</Item43>
|
||||||
</Files>
|
</Files>
|
||||||
|
<CompatibilityMode Value="True"/>
|
||||||
<RequiredPkgs Count="2">
|
<RequiredPkgs Count="2">
|
||||||
<Item1>
|
<Item1>
|
||||||
<PackageName Value="SynEdit"/>
|
<PackageName Value="SynEdit"/>
|
||||||
|
@ -20,7 +20,8 @@ uses
|
|||||||
SynHighlighterRC, SynHighlighterRuby, SynHighlighterSDD, SynHighlighterSml,
|
SynHighlighterRC, SynHighlighterRuby, SynHighlighterSDD, SynHighlighterSml,
|
||||||
SynHighlighterTclTk, SynHighlighterUnreal, SynHighlighterVBScript,
|
SynHighlighterTclTk, SynHighlighterUnreal, SynHighlighterVBScript,
|
||||||
SynHighlighterVrml97, SynHighlighter8051, SynHighlighterURI,
|
SynHighlighterVrml97, SynHighlighter8051, SynHighlighterURI,
|
||||||
SynHighlighterST, SynHighlighterGeneral, synhighlightergnuplot;
|
SynHighlighterST, SynHighlighterGeneral, synhighlightergnuplot,
|
||||||
|
SynHighlighterVHDL, synhighlighterverilog, SynHighlighterJSON;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<CONFIG>
|
<CONFIG>
|
||||||
<Package Version="4">
|
<Package Version="5">
|
||||||
<PathDelim Value="\"/>
|
<PathDelim Value="\"/>
|
||||||
<Name Value="ExtraHighlighters_Dsgn"/>
|
<Name Value="ExtraHighlighters_Dsgn"/>
|
||||||
<Type Value="DesignTime"/>
|
<Type Value="DesignTime"/>
|
||||||
@ -14,7 +14,7 @@
|
|||||||
</CompilerOptions>
|
</CompilerOptions>
|
||||||
<Description Value="Extra highlighters for synedit"/>
|
<Description Value="Extra highlighters for synedit"/>
|
||||||
<License Value="MPL, LGPL DUAL license."/>
|
<License Value="MPL, LGPL DUAL license."/>
|
||||||
<Version Major="1"/>
|
<Version Major="1" Minor="2"/>
|
||||||
<Files Count="1">
|
<Files Count="1">
|
||||||
<Item1>
|
<Item1>
|
||||||
<Filename Value="uhighlighterreg.pas"/>
|
<Filename Value="uhighlighterreg.pas"/>
|
||||||
@ -22,6 +22,7 @@
|
|||||||
<UnitName Value="uHighlighterReg"/>
|
<UnitName Value="uHighlighterReg"/>
|
||||||
</Item1>
|
</Item1>
|
||||||
</Files>
|
</Files>
|
||||||
|
<CompatibilityMode Value="True"/>
|
||||||
<RequiredPkgs Count="2">
|
<RequiredPkgs Count="2">
|
||||||
<Item1>
|
<Item1>
|
||||||
<PackageName Value="ExtraHighlighters"/>
|
<PackageName Value="ExtraHighlighters"/>
|
||||||
|
@ -115,3 +115,13 @@ tsynvbscriptsyn_200.png
|
|||||||
tsynvrml97syn.png
|
tsynvrml97syn.png
|
||||||
tsynvrml97syn_150.png
|
tsynvrml97syn_150.png
|
||||||
tsynvrml97syn_200.png
|
tsynvrml97syn_200.png
|
||||||
|
tsynvhdlsyn.png
|
||||||
|
tsynvhdlsyn_150.png
|
||||||
|
tsynvhdlsyn_200.png
|
||||||
|
tsynverilogsyn.png
|
||||||
|
tsynverilogsyn_150.png
|
||||||
|
tsynverilogsyn_200.png
|
||||||
|
tsynjsonsyn.png
|
||||||
|
tsynjsonsyn_150.png
|
||||||
|
tsynjsonsyn_200.png
|
||||||
|
|
||||||
|
BIN
components/extrasyn/icons/tsynjsonsyn.png
Normal file
After Width: | Height: | Size: 583 B |
BIN
components/extrasyn/icons/tsynjsonsyn_150.png
Normal file
After Width: | Height: | Size: 866 B |
BIN
components/extrasyn/icons/tsynjsonsyn_200.png
Normal file
After Width: | Height: | Size: 1023 B |
BIN
components/extrasyn/icons/tsynverilogsyn.png
Normal file
After Width: | Height: | Size: 527 B |
BIN
components/extrasyn/icons/tsynverilogsyn_150.png
Normal file
After Width: | Height: | Size: 746 B |
BIN
components/extrasyn/icons/tsynverilogsyn_200.png
Normal file
After Width: | Height: | Size: 855 B |
BIN
components/extrasyn/icons/tsynvhdlsyn.png
Normal file
After Width: | Height: | Size: 536 B |
BIN
components/extrasyn/icons/tsynvhdlsyn_150.png
Normal file
After Width: | Height: | Size: 734 B |
BIN
components/extrasyn/icons/tsynvhdlsyn_200.png
Normal file
After Width: | Height: | Size: 879 B |
@ -28,6 +28,7 @@ uses
|
|||||||
SynHighlighterHP48,
|
SynHighlighterHP48,
|
||||||
SynHighlighterIDL,
|
SynHighlighterIDL,
|
||||||
SynHighlighterInno,
|
SynHighlighterInno,
|
||||||
|
SynHighlighterJSON,
|
||||||
SynHighlighterKix,
|
SynHighlighterKix,
|
||||||
SynHighlighterLDraw,
|
SynHighlighterLDraw,
|
||||||
SynHighlighterLua,
|
SynHighlighterLua,
|
||||||
@ -42,6 +43,8 @@ uses
|
|||||||
SynHighlighterTclTk,
|
SynHighlighterTclTk,
|
||||||
SynHighlighterUnreal,
|
SynHighlighterUnreal,
|
||||||
SynHighlighterVBScript,
|
SynHighlighterVBScript,
|
||||||
|
SynHighlighterVerilog,
|
||||||
|
SynHighlighterVHDL,
|
||||||
SynHighlighterVrml97;
|
SynHighlighterVrml97;
|
||||||
|
|
||||||
procedure Register;
|
procedure Register;
|
||||||
@ -78,6 +81,7 @@ begin
|
|||||||
TSynHP48Syn,
|
TSynHP48Syn,
|
||||||
TSynIdlSyn,
|
TSynIdlSyn,
|
||||||
TSynInnoSyn,
|
TSynInnoSyn,
|
||||||
|
TSynJSONSyn,
|
||||||
TSynKixSyn,
|
TSynKixSyn,
|
||||||
TSynLDRSyn,
|
TSynLDRSyn,
|
||||||
TSynLuaSyn,
|
TSynLuaSyn,
|
||||||
@ -92,6 +96,8 @@ begin
|
|||||||
TSynTclTkSyn,
|
TSynTclTkSyn,
|
||||||
TSynUnrealSyn,
|
TSynUnrealSyn,
|
||||||
TSynVBScriptSyn,
|
TSynVBScriptSyn,
|
||||||
|
TSynVerilogSyn,
|
||||||
|
TSynVHDLSyn,
|
||||||
TSynVrml97Syn
|
TSynVrml97Syn
|
||||||
]);
|
]);
|
||||||
end;
|
end;
|
||||||
|