mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-06-16 15:48:21 +02:00
83 lines
1.9 KiB
ObjectPascal
83 lines
1.9 KiB
ObjectPascal
unit ContextHL;
|
|
(*
|
|
This is an example how to implement your own highlighter.
|
|
|
|
This example extends the Simple HL:
|
|
- The token -- and ++ (must be surrounded by space or line-begin/end to be
|
|
a token of their own) will toggle words that start with a,e,i,o,u
|
|
|
|
Multply ++ and -- can be nested. Then for each -- a ++ must be given,
|
|
before the words highlicht again
|
|
|
|
See comments below and http://wiki.lazarus.freepascal.org/SynEdit_Highlighter
|
|
|
|
|
|
*)
|
|
|
|
{$mode objfpc}{$H+}
|
|
|
|
interface
|
|
|
|
uses
|
|
SynEditHighlighter, SimpleHl;
|
|
|
|
type
|
|
|
|
{ TSynDemoHlContext }
|
|
|
|
TSynDemoHlContext = class(TSynDemoHl)
|
|
protected
|
|
FCurRange: Integer;
|
|
public
|
|
procedure Next; override;
|
|
function GetTokenAttribute: TSynHighlighterAttributes; override;
|
|
public
|
|
procedure SetRange(Value: Pointer); override;
|
|
procedure ResetRange; override;
|
|
function GetRange: Pointer; override;
|
|
end;
|
|
|
|
|
|
implementation
|
|
|
|
{ TSynDemoHlContext }
|
|
|
|
procedure TSynDemoHlContext.Next;
|
|
begin
|
|
inherited Next;
|
|
if (copy(FLineText, FTokenPos, FTokenEnd - FTokenPos) = '--') then
|
|
inc(FCurRange);
|
|
if (copy(FLineText, FTokenPos, FTokenEnd - FTokenPos) = '++') and (FCurRange > 0) then
|
|
dec(FCurRange);
|
|
end;
|
|
|
|
function TSynDemoHlContext.GetTokenAttribute: TSynHighlighterAttributes;
|
|
begin
|
|
Result := inherited GetTokenAttribute;
|
|
if (Result = SpecialAttri) and (FCurRange > 0) then
|
|
Result := IdentifierAttribute;
|
|
end;
|
|
|
|
procedure TSynDemoHlContext.SetRange(Value: Pointer);
|
|
begin
|
|
// Set the current range (for current line)
|
|
// The value is provided from an internal storage, where it was kept since the last scan
|
|
// This is the and value of the previous line, which is used as start for the new line
|
|
FCurRange := PtrInt(Value);
|
|
end;
|
|
|
|
procedure TSynDemoHlContext.ResetRange;
|
|
begin
|
|
FCurRange := 0;
|
|
end;
|
|
|
|
function TSynDemoHlContext.GetRange: Pointer;
|
|
begin
|
|
// Get a storable copy of the cuurent (working) range
|
|
Result := Pointer(PtrInt(FCurRange));
|
|
end;
|
|
|
|
end.
|
|
|
|
|