
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@8075 8e941d3f-bd1b-0410-a28a-d453659cc2b4
210 lines
7.0 KiB
ObjectPascal
210 lines
7.0 KiB
ObjectPascal
unit Unit1;
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, ExtCtrls,
|
|
SynEdit, Menus, StdCtrls, ComCtrls, SynEditHighlighter,
|
|
|
|
SynHighlighterADSP21xx, SynHighlighterFortran, SynHighlighterFoxpro, SynHighlighterGalaxy, SynHighlighterBaan,
|
|
SynHighlighterHaskell, SynHighlighterCache, {SynHighlighterDfm,} SynHighlighterModelica, SynHighlighterCobol,
|
|
{SynHighlighterCPM,} SynHighlighterCS, SynHighlighterDml, SynHighlighterProgress, SynHighlighterEiffel,
|
|
SynHighlighterGWS, {SynHighlighterHC11,} SynHighlighterHP48, SynHighlighterVBScript, SynHighlighterUnreal,
|
|
SynHighlighterVrml97, SynHighlighterTclTk, SynHighlighterLDraw, SynHighlighterRuby, SynHighlighterInno,
|
|
SynHighlighterAsm, SynHighlighterDOT, SynHighlighterIDL, SynHighlighterKix, {SynHighlighterMsg,}
|
|
SynHighlighterSDD, SynHighlighterSml, SynHighlighterURI, SynHighlighterM3, SynHighlighterRC,
|
|
SynHighlighterST, SynHighlighter8051, SynHighlighterLua, SynHighlighterProlog, SynHighlighterCAC,
|
|
SynHighlighterAWK, SynHighlighterGnuplot, SynHighlighterVHDL, SynHighlighterVerilog, SynHighlighterJSON;
|
|
|
|
// SynHighlighterGeneral;
|
|
|
|
type
|
|
|
|
{ TForm1 }
|
|
TForm1 = class(TForm)
|
|
MainMenu1: TMainMenu;
|
|
MenuItem1: TMenuItem;
|
|
SynEdit1: TSynEdit;
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure FormDestroy(Sender: TObject);
|
|
procedure MenuClick(Sender: TObject);
|
|
private
|
|
FHighlighters: TFPList;
|
|
procedure SelectHighlighter(AIndex: Integer);
|
|
public
|
|
|
|
end;
|
|
|
|
var
|
|
Form1: TForm1;
|
|
|
|
implementation
|
|
|
|
uses
|
|
SynUniHighlighter;
|
|
|
|
{$R *.lfm}
|
|
|
|
const
|
|
FORM_CAPTION = 'SyntaxHighlighter Test';
|
|
|
|
function GetHighlighterCaption(hl: TSynCustomHighlighter): String;
|
|
begin
|
|
if (hl is TSynUniSyn) and (TSynUniSyn(hl).Info.General.Name <> '') then
|
|
Result := TSynUniSyn(hl).Info.General.Name
|
|
else
|
|
Result := hl.LanguageName;
|
|
end;
|
|
|
|
function CompareHighlighters(p1, p2: Pointer): Integer;
|
|
var
|
|
s1, s2: String;
|
|
begin
|
|
s1 := GetHighlighterCaption(TSynCustomHighlighter(p1));
|
|
s2 := GetHighlighterCaption(TSynCustomHighlighter(p2));
|
|
Result := AnsiCompareText(s1, s2);
|
|
end;
|
|
|
|
|
|
{ TForm1 }
|
|
|
|
procedure TForm1.FormCreate(Sender: TObject);
|
|
|
|
procedure SetDefaultColors(const vHighLighter:TSynCustomHighlighter);
|
|
begin
|
|
if Assigned(vHighLighter.CommentAttribute) then vHighLighter.CommentAttribute.Foreground := clSilver;
|
|
if Assigned(vHighLighter.IdentifierAttribute) then vHighLighter.IdentifierAttribute.Foreground := clNone;
|
|
if Assigned(vHighLighter.CommentAttribute) then vHighLighter.CommentAttribute.Foreground := $00A2A2A2;
|
|
if Assigned(vHighLighter.KeywordAttribute) then vHighLighter.KeywordAttribute.Foreground := clNavy;
|
|
//vHighLighter.NumberAttri.ForeGround := $004080FF;
|
|
if Assigned(vHighLighter.StringAttribute) then vHighLighter.StringAttribute.ForeGround := $003FB306;
|
|
if Assigned(vHighLighter.SymbolAttribute) then vHighLighter.SymbolAttribute.ForeGround := $00A25151;
|
|
end;
|
|
|
|
var
|
|
i, c: Integer;
|
|
item: TMenuItem;
|
|
submenu: TMenuItem;
|
|
hl: TSynCustomHighlighter;
|
|
hlCap: String; // highlighter caption
|
|
lastChar: Char;
|
|
begin
|
|
Caption := FORM_CAPTION;
|
|
SynEdit1.Font.Quality := fqClearType;
|
|
|
|
FHighlighters := TFPList.Create;
|
|
|
|
// extra highlighters
|
|
FHighlighters.Add(TSynADSP21xxSyn.Create(self));
|
|
FHighlighters.Add(TSynFortranSyn.Create(self));
|
|
FHighlighters.Add(TSynFoxproSyn.Create(self));
|
|
FHighlighters.Add(TSynGalaxySyn.Create(self));
|
|
FHighlighters.Add(TSynBaanSyn.Create(self));
|
|
FHighlighters.Add(TSynAWKSyn.Create(self));
|
|
FHighlighters.Add(TSynHaskellSyn.Create(self));
|
|
FHighlighters.Add(TSynCacheSyn.Create(self));
|
|
FHighlighters.Add(TSynModelicaSyn.Create(self));
|
|
FHighlighters.Add(TSynCobolSyn.Create(self));
|
|
FHighlighters.Add(TSynCSSyn.Create(self));
|
|
FHighlighters.Add(TSynDmlSyn.Create(self));
|
|
FHighlighters.Add(TSynProgressSyn.Create(self));
|
|
FHighlighters.Add(TSynEiffelSyn.Create(self));
|
|
FHighlighters.Add(TSynGWScriptSyn.Create(self));
|
|
FHighlighters.Add(TSynHP48Syn.Create(self));
|
|
FHighlighters.Add(TSynVBScriptSyn.Create(self));
|
|
FHighlighters.Add(TSynUnrealSyn.Create(self));
|
|
FHighlighters.Add(TSynVrml97Syn.Create(self));
|
|
FHighlighters.Add(TSynTclTkSyn.Create(self));
|
|
FHighlighters.Add(TSynLDRSyn.Create(self));
|
|
FHighlighters.Add(TSynRubySyn.Create(self));
|
|
FHighlighters.Add(TSynInnoSyn.Create(self));
|
|
FHighlighters.Add(TSynAsmSyn.Create(self));
|
|
FHighlighters.Add(TSynDOTSyn.Create(self));
|
|
FHighlighters.Add(TSynIdlSyn.Create(self));
|
|
FHighlighters.Add(TSynKixSyn.Create(self));
|
|
FHighlighters.Add(TSynSDDSyn.Create(self));
|
|
FHighlighters.Add(TSynSMLSyn.Create(self));
|
|
FHighlighters.Add(TSynURISyn.Create(self));
|
|
FHighlighters.Add(TSynM3Syn.Create(self));
|
|
FHighlighters.Add(TSynRCSyn.Create(self));
|
|
FHighlighters.Add(TSynPrologSyn.Create(Self));
|
|
FHighlighters.Add(TSynLuaSyn.Create(Self));
|
|
FHighlighters.Add(TSyn8051Syn.Create(Self));
|
|
FHighlighters.Add(TSynCACSyn.Create(Self));
|
|
FHighlighters.Add(TSynSTSyn.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(TSynGeneralSyn.Create(self));
|
|
// FHighlighters.Add(TSynDfmSyn.Create(self));
|
|
// FHighlighters.Add/TSynUniSyn.Create(self));
|
|
// FHighlighters.Add(TSynMsgSyn.Create(self));
|
|
|
|
FHighlighters.Sort(@CompareHighlighters);
|
|
|
|
lastChar := #0;
|
|
for i:=0 to FHighlighters.Count-1 do begin
|
|
hl := TSynCustomHighlighter(FHighlighters[i]);
|
|
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);
|
|
item := TMenuItem.Create(self);
|
|
item.Tag := i+1; //0 = unknown highlighter
|
|
try
|
|
item.Caption := Format('%d - %s', [i, GetHighlighterCaption(hl)]);
|
|
except
|
|
on E : Exception do
|
|
ShowMessage(E.Message+LineEnding+' at index '+inttostr(i));
|
|
end;
|
|
// item.Hint := hl.ClassName;
|
|
item.OnClick := @MenuClick;
|
|
subMenu.Add(item);
|
|
end;
|
|
end;
|
|
|
|
SelectHighlighter(12);
|
|
end;
|
|
|
|
procedure TForm1.FormDestroy(Sender: TObject);
|
|
begin
|
|
FHighlighters.Free;
|
|
end;
|
|
|
|
procedure TForm1.MenuClick(Sender: TObject);
|
|
var
|
|
i, idx, c:Integer;
|
|
begin
|
|
c := ComponentCount-1;
|
|
if (Sender is TMenuItem) and (TMenuItem(Sender).Tag > 0) then begin
|
|
idx := TMenuItem(Sender).Tag - 1;
|
|
SelectHighlighter(idx);
|
|
end;
|
|
end;
|
|
|
|
procedure TForm1.SelectHighlighter(AIndex: Integer);
|
|
begin
|
|
SynEdit1.Highlighter := TSynCustomHighlighter(FHighlighters[AIndex]);
|
|
SynEdit1.Text := SynEdit1.Highlighter.SampleSource;
|
|
Caption := Format('%s - %s [%s]', [
|
|
FORM_CAPTION, SynEdit1.Highlighter.LanguageName, SynEdit1.Highlighter.ClassName
|
|
]);
|
|
end;
|
|
|
|
end.
|
|
|
|
|
|
|
|
|