📄 synedithighlighter.pas
字号:
procedure TSynCustomHighlighter.BeginUpdate;
begin
Inc(fUpdateCount);
end;
procedure TSynCustomHighlighter.EndUpdate;
begin
if fUpdateCount > 0 then begin
Dec(fUpdateCount);
if (fUpdateCount = 0) and fUpdateChange then begin
fUpdateChange := FALSE;
DefHighlightChange( nil );
end;
end;
end;
procedure TSynCustomHighlighter.FreeHighlighterAttributes;
var
i: integer;
begin
if fAttributes <> nil then begin
for i := fAttributes.Count - 1 downto 0 do
TSynHighlighterAttributes(fAttributes.Objects[i]).Free;
fAttributes.Clear;
end;
end;
procedure TSynCustomHighlighter.Assign(Source: TPersistent);
var
Src: TSynCustomHighlighter;
i, j: integer;
AttriName: string;
SrcAttri: TSynHighlighterAttributes;
begin
if (Source <> nil) and (Source is TSynCustomHighlighter) then begin
Src := TSynCustomHighlighter(Source);
for i := 0 to AttrCount - 1 do begin
// assign first attribute with the same name
AttriName := Attribute[i].Name;
for j := 0 to Src.AttrCount - 1 do begin
SrcAttri := Src.Attribute[j];
if AttriName = SrcAttri.Name then begin
Attribute[i].Assign(SrcAttri);
break;
end;
end;
end;
// assign the sample source text only if same or descendant class
if Src is ClassType then
SampleSource := Src.SampleSource;
fWordBreakChars := Src.WordBreakChars;
DefaultFilter := Src.DefaultFilter;
Enabled := Src.Enabled;
end else
inherited Assign(Source);
end;
procedure TSynCustomHighlighter.EnumUserSettings(Settings: TStrings);
begin
Settings.Clear;
end;
function TSynCustomHighlighter.UseUserSettings(settingIndex: integer): boolean;
begin
Result := false;
end;
{$IFNDEF SYN_CLX}
function TSynCustomHighlighter.LoadFromRegistry(RootKey: HKEY;
Key: string): boolean;
var
r: TBetterRegistry;
i: integer;
begin
r := TBetterRegistry.Create;
try
r.RootKey := RootKey;
if r.OpenKeyReadOnly(Key) then begin
Result := true;
for i := 0 to AttrCount-1 do
Result := Attribute[i].LoadFromRegistry(r) and Result;
end
else Result := false;
finally r.Free; end;
end;
function TSynCustomHighlighter.SaveToRegistry(RootKey: HKEY;
Key: string): boolean;
var
r: TBetterRegistry;
i: integer;
begin
r := TBetterRegistry.Create;
try
r.RootKey := RootKey;
if r.OpenKey(Key,true) then begin
Result := true;
for i := 0 to AttrCount-1 do
Result := Attribute[i].SaveToRegistry(r) and Result;
end
else Result := false;
finally r.Free; end;
end;
function TSynCustomHighlighter.LoadFromFile(AFileName : String): boolean;
var AIni : TIniFile;
i : Integer;
begin
AIni := TIniFile.Create(AFileName);
try
with AIni do
begin
Result := true;
for i := 0 to AttrCount-1 do
Result := Attribute[i].LoadFromFile(AIni) and Result;
end;
finally
AIni.Free;
end;
end;
function TSynCustomHighlighter.SaveToFile(AFileName : String): boolean;
var AIni : TIniFile;
i: integer;
begin
AIni := TIniFile.Create(AFileName);
try
with AIni do
begin
Result := true;
for i := 0 to AttrCount-1 do
Result := Attribute[i].SaveToFile(AIni) and Result;
end;
finally
AIni.Free;
end;
end;
{$ENDIF}
procedure TSynCustomHighlighter.AddAttribute(AAttrib: TSynHighlighterAttributes);
begin
fAttributes.AddObject(AAttrib.Name, AAttrib);
end;
procedure TSynCustomHighlighter.DefHighlightChange(Sender: TObject);
begin
if fUpdateCount > 0 then
fUpdateChange := TRUE
else if not( csLoading in ComponentState ) then
begin
fAttrChangeHooks.Sender := Sender;
fAttrChangeHooks.Fire;
end;
end;
function TSynCustomHighlighter.GetAttribCount: integer;
begin
Result := fAttributes.Count;
end;
function TSynCustomHighlighter.GetAttribute(idx: integer):
TSynHighlighterAttributes;
begin
Result := nil;
if (idx >= 0) and (idx < fAttributes.Count) then
Result := TSynHighlighterAttributes(fAttributes.Objects[idx]);
end;
class function TSynCustomHighlighter.GetCapabilities: TSynHighlighterCapabilities;
begin
Result := [hcRegistry]; //registry save/load supported by default
end;
function TSynCustomHighlighter.GetCapabilitiesProp: TSynHighlighterCapabilities;
begin
Result := GetCapabilities;
end;
function TSynCustomHighlighter.GetDefaultFilter: string;
begin
Result := fDefaultFilter;
end;
function TSynCustomHighlighter.GetIdentChars: TSynIdentChars;
begin
Result := [#33..#255];
end;
procedure TSynCustomHighlighter.SetWordBreakChars(AChars: TSynIdentChars);
begin
fWordBreakChars := AChars;
end;
class function TSynCustomHighlighter.GetLanguageName: string;
begin
{$IFDEF SYN_DEVELOPMENT_CHECKS}
raise Exception.CreateFmt('%s.GetLanguageName not implemented', [ClassName]);
{$ENDIF}
Result := '<Unknown>';
end;
function TSynCustomHighlighter.GetLanguageNameProp: string;
begin
Result := GetLanguageName;
end;
function TSynCustomHighlighter.GetRange: pointer;
begin
Result := nil;
end;
function TSynCustomHighlighter.GetSampleSource: string;
begin
Result := '';
end;
procedure TSynCustomHighlighter.HookAttrChangeEvent(ANotifyEvent: TNotifyEvent);
begin
fAttrChangeHooks.Add(ANotifyEvent);
end;
function TSynCustomHighlighter.IsFilterStored: boolean;
begin
Result := TRUE;
end;
function TSynCustomHighlighter.IsKeyword(const AKeyword: string): boolean;
begin
Result := FALSE;
end;
procedure TSynCustomHighlighter.NextToEol;
begin
while not GetEol do Next;
end;
procedure TSynCustomHighlighter.ResetRange;
begin
end;
procedure TSynCustomHighlighter.SetAttributesOnChange(AEvent: TNotifyEvent);
var
i: integer;
Attri: TSynHighlighterAttributes;
begin
for i := fAttributes.Count - 1 downto 0 do begin
Attri := TSynHighlighterAttributes(fAttributes.Objects[i]);
if Attri <> nil then begin
Attri.OnChange := AEvent;
Attri.InternalSaveDefaultValues;
end;
end;
end;
procedure TSynCustomHighlighter.SetRange(Value: Pointer);
begin
end;
procedure TSynCustomHighlighter.SetDefaultFilter(Value: string);
begin
fDefaultFilter := Value;
end;
procedure TSynCustomHighlighter.SetSampleSource(Value: string);
begin
end;
procedure TSynCustomHighlighter.UnhookAttrChangeEvent(ANotifyEvent: TNotifyEvent);
begin
fAttrChangeHooks.Remove(ANotifyEvent);
end;
procedure TSynCustomHighlighter.SetEnabled(const Value: boolean);
begin
if fEnabled <> Value then
begin
fEnabled := Value;
DefHighlightChange( nil );
end;
end;
procedure TSynCustomHighlighter.Loaded;
begin
inherited;
DefHighlightChange( nil );
end;
function TSynCustomHighlighter.CanHighlighter(const FileName: string): Boolean;
var
FileExt : string;
Filter : string;
begin
if DefaultFilter <> '' then
begin
Filter := LowerCase(Trim(DefaultFilter));
Delete(Filter, 1, Pos('|', Filter));
FileExt := LowerCase(Trim(ExtractFileExt(filename)));
If ( FileExt <> '' ) and ( Filter <> '' ) then
begin
if Filter[Length(Filter)] <> ';' then
Filter := Filter + ';';
If Pos('*'+FileExt+';', Filter) <> 0 then
begin
Result := true;
Exit;
end;
end;
end;
Result := False;
end;
function TSynCustomHighlighter.SkipCrLf(var Ptr: PChar;
var Line: Integer): Boolean;
begin
Result := False;
repeat
// Win
if ((Ptr^ = #13) and ((Ptr+1)^ = #10)) or ((Ptr^ = #10) and ((Ptr+1)^ = #13)) then
repeat
Inc(Ptr, 2);
Inc(Line);
Result := True;
until not (((Ptr^ = #13) and ((Ptr+1)^ = #10)) or ((Ptr^ = #10) and ((Ptr+1)^ = #13)));
// Unix
if Ptr^ = #13 then
repeat
Inc(Ptr);
Inc(Line);
Result := True;
until Ptr^ <> #13;
// Mac
if Ptr^ = #10 then
repeat
Inc(Ptr);
Inc(Line);
Result := True;
until Ptr^ <> #10;
until (Ptr^ <> #10) and (Ptr^ <> #13);
end;
{$IFNDEF SYN_CPPB_1}
initialization
G_PlaceableHighlighters := TSynHighlighterList.Create;
finalization
G_PlaceableHighlighters.Free;
G_PlaceableHighlighters := nil;
{$ENDIF}
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -