■ Delphi SynEdit : コンポーネントを作成しないで強調表示
2022/11/20 f.izawa
-----------------------------------------------------
SynEdit のフォルダ(こちらの環境では・・・)
D:\Users\Documents\Embarcadero\Studio\21.0\CatalogRepository\SynEdit-2021.08-Sydney\SynGen
内の SynGen.dpr を Delphi で開いて SynGen.exe を作成
(SynGen.exe は、直下の Win32\Debug フォルダに作成される)

SynSampleSyn.msg(テキストファイル)を開いて、
|KEYS { all between KEYS and |><| is considered to be a keyword }
の下に強調表示したい文字を1行ごとに追加
Syn+強調表示名+Syn.msg に名前を変えて保存

SynGen.exe を起動
Syn+強調表示名+Syn.msg を開く
すべてを入力して、[Start!] ボタンをクリック
[Find Hash Params] をクリック
Syn+強調表示名+Syn.pas が作成される
-----------------------------------------------------
Delphi を起動
SynEdit を Form に張り付け
uses に Syn+強調表示名+Syn を追加
プロジェクト - プロジェクトに追加 で、Syn+強調表示名+Syn.pas を追加

FormCreate に下記を追加
var
HL: TSynSampleSyn;
begin
HL := TSynSampleSyn.Create(self);
HL.KeyAttri.Foreground := clAqua;// 強調表示の色
SynEdit1.Highlighter:= HL;
end;

コンパイルすると、
| while Identifiers[fLine[Run]] do
| Inc(Run);
がエラーになるので、コメントアウト

|constructor TSynSampleSyn.Create(AOwner: TComponent);

| fKeyAttri.Style := [fsBold];
の次に
fKeyAttri.Foreground := clAqua: // 強調表示の色
を追加して保存
-----------------------------------------------------
詳しくは、SynGen フォルダの Highlighters-HowTo.html を参照のこと!

コメントの記述

||><|

|ENCLOSEDBY

|Comment,LRA1BasicComment,',

||><|

|Comment,LRA1BasicComment,',
のように、コメントの <ending sequence> を省略した場合は、
SynGen.exe で作成される .pas で、下記コメントアウトが必要。

|procedure TSynSampleSyn.LRA1BasicCommentProc;
|begin
| fTokenID := tkComment;
| repeat
|// if then
|// begin
|// Inc(Run, 0);
|// fRange := rsUnKnown;
|// Break;
|// end;
| if not IsLineEnd(Run) then
| Inc(Run);
| until IsLineEnd(Run);
|end;

|procedure TSynSampleSyn.Next;
|begin
| fTokenPos := Run;
|// case fRange of
|// else
| case fLine[Run] of
| #0: NullProc;
| #10: LFProc;
| #13: CRProc;
| '''': LRA1BasicCommentOpenProc;
| '"': StringOpenProc;
| #1..#9, #11, #12, #14..#32: SpaceProc;
| 'A'..'Z', 'a'..'z', '_': IdentProc;
| else
| UnknownProc;
| end;
|// end;
| inherited;
|end;

検索文字列の色は、
\Demos\SearchReplaceDemo フォルダの plgSearchHighlighter.pas を uses 節に追加
FormCreate に下記を追加
var
HLPulgin: TSearchTextHightlighterSynEditPlugin;
begin
HLPulgin := TSearchTextHightlighterSynEditPlugin.Create(SynEdit1);
HLPulgin.Attribute.Background := $000080FF;
end;