我有SynMultiSyn荧光笔(synHTMLcomplex)
由HTML(synHTML)和JavaScript(synJScript)组成
如下所示:
synHTML : TSynHTMLSyn;
synJScript : TSynJScriptSyn;
synHTMLcomplex: TSynMultiSyn;
// HTML complex
with SynHTMLcomplex do begin
DefaultLanguageName:= 'HTML complex';
DefaultFilter := 'HTML complex (*.html; *.htm)|*.html; *.htm';
DefaultHighlighter := synHTML;
with Schemes do begin
Add.Index:= 0;
with Items[0] do begin
Highlighter:= synJScript;
SchemeName := 'JavaScript';
StartExpr := '<script';
EndExpr := '</script>';
with MarkerAttri do
Background:= clNone;
end;
end;
end;
一旦安装了SynEdit,是否有任何方法(属性或方法)可以知道光标(CaretY)属于哪个Highlighter(synHTML或synJScript)?
有人可以帮忙吗?
最佳答案
这是可能的,但不是很容易实现。
下面的函数是Jan Fiala(PSPad editor的作者)使用的函数的改编。
对我来说,一切正常。非常感谢Jan!
function TfrmEditor.GetCurrentHighLighter: TSynCustomHighlighter;
var
i : integer;
seEditor: TSynEdit;
begin
if (sActiveEditor = 'synEditor') then seEditor:= synEditor
else seEditor:= synEditor2;
with seEditor do
if Highlighter is TSynMultiSyn then
begin
i:= (Integer(TSynEditStringList(Lines).Ranges[CaretY - 1]) and $F) - 1;
if (i < 0) then
result:= TSynMultiSyn(Highlighter).DefaultHighLighter
else
result:= TSynMultiSyn(Highlighter).Schemes[i].Highlighter
end
else
result:= Highlighter;
end;
下面是Jan的原始功能,下面将对其进行解释。
“-这是我的功能,用于返回当前的荧光笔:
function TPSSynEdit.GetCurrentHighLighter: TSynCustomHighlighter;
var
i: Integer;
begin
if Highlighter is TSynMultiSyn then
begin
i := (Integer(TSynEditStringList(Lines).Ranges[CaretY - 1]) and $F) - 2;
if (i > TSynMultiSyn(HighLighter).Schemes.Count - 1) or (i < 0) then
Result := TSynMultiSyn(Highlighter).DefaultHighLighter
else
Result := TSynMultiSyn(Highlighter).Schemes[i].Highlighter
end
else
Result := Highlighter;
end;
我在TSynedit的后代中具有此功能。您需要替换荧光笔,例如使用Editor.Highlighter和Lines与Editor.Lines或将编辑器作为函数参数发送,并在开始后添加,例如:
用编辑器做
开始
...”
扬·菲亚拉(Jan Fiala)
关于delphi - SynMultiSyn荧光笔插入位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18884724/