📄 synunirules.pas
字号:
{
@abstract(TSynUniSyn rules source)
@authors(Fantasist [walking_in_the_sky@yahoo.com], Vit [nevzorov@yahoo.com],
Vitalik [2vitalik@gmail.com], Quadr0 [quadr02005@gmail.com])
@created(2004)
@lastmod(2006-07-23)
}
{$IFNDEF QSynUniRules}
unit SynUniRules;
{$ENDIF}
{$I SynUniHighlighter.inc}
interface
uses
{$IFDEF SYN_CLX}
Qt,
Types,
QGraphics,
QSynEditTypes,
QSynEditHighlighter,
QSynUniClasses,
{$ELSE}
Windows,
Graphics,
{$IFDEF DEBUG}
Dialogs,
{$ENDIF}
SynEditTypes,
SynEditHighlighter,
SynUniClasses,
{$ENDIF}
Classes,
SysUtils;
type
TSynRange = class;
TSynSet = class;
TAbstractParser = class
function GetToken(CurRule: TSynRange; fLine: PChar; var Run: Integer; var ASynToken: TSynToken): Boolean; virtual; abstract;
end;
TParser = class(TAbstractParser)
HeadNode: TTokenNode;
SynSets: TList;
constructor Create(AChar: Char; ASynToken: TSynToken; ABreakType: TBreakType); reintroduce; overload; virtual;
constructor Create(SynSet: TSynSet); reintroduce; overload; virtual;
destructor Destroy(); override;
function FindTokenNode(AString: string): TTokenNode;
function GetToken(CurrRange: TSynRange; fLine: PChar; var Run: Integer; var ASynToken: TSynToken): Boolean; override;
procedure AddSet(SynSet: TSynSet);
procedure AddTokenNode(AString: string; ASynToken: TSynToken; ABreakType: TBreakType);
end;
TDefaultParser = class(TAbstractParser)
SynToken: TSynToken;
constructor Create(ASynToken: TSynToken); reintroduce; virtual;
destructor Destroy(); override;
function GetToken(CurrRange: TSynRange; fLine: PChar; var Run: Integer; var ASynToken: TSynToken): Boolean; override;
end;
TDelimitersParser = class(TAbstractParser)
SynToken: TSynToken;
constructor Create(ASynToken: TSynToken); virtual;
destructor Destroy(); override;
function GetToken(CurrRange: TSynRange; fLine: PChar; var Run: Integer; var ASynToken: TSynToken): Boolean; override;
end;
TSynRule = class(TAbstractRule)
private
fName: string;
protected
fParent: TSynRange;
fValidAttribs: TSynHighlighterAttributes;
function GetValidAttribs(): TSynHighlighterAttributes;
public
Style: string;
Attributes: TSynAttributes;
constructor Create();
destructor Destroy(); override;
procedure LoadFromFile(AFileName: string); virtual; abstract;
procedure LoadFromStream(AStream: TStream); virtual; abstract;
procedure SaveToFile(AFileName: string); virtual; abstract;
procedure SaveToStream(AStream: TStream); virtual; abstract;
property Name: string read fName write fName;
property ValidAttribs: TSynHighlighterAttributes read GetValidAttribs;
property Parent: TSynRange read fParent write fParent; //TODO: Fill Parent not in prepare!
end;
TSynKeyList = class(TSynRule)
public
KeyList: TStringList; //TODO: Need to rename not as a ClassName
constructor Create(st: string = '');
destructor Destroy(); override;
procedure LoadFromFile(AFileName: string); override;
procedure LoadFromStream(AStream: TStream); override;
procedure SaveToFile(AFileName: string); override;
procedure SaveToStream(AStream: TStream); override;
end;
TSynSet = class(TSynRule)
public
BreakType: TBreakType;
StartType: TStartType;
CharSet: TCharSet;
Quantity: Integer;
constructor Create(ACharSet: TCharSet = []);
destructor Destroy(); override;
procedure LoadFromFile(AFileName: string); override;
procedure LoadFromStream(AStream: TStream); override;
procedure SaveToFile(AFileName: string); override;
procedure SaveToStream(AStream: TStream); override;
end;
TSynRange = class(TSynRule)
protected
fPrepared: Boolean;
fOpenToken: TSynMultiToken;
fCloseToken: TSynMultiToken;
fCaseSensitive: Boolean;
fAllowPreviousClose: Boolean;
fCloseOnEol: Boolean;
fCloseOnTerm: Boolean;
fDelimiters: TCharSet;
fSynRanges: TList;
fSynKeyLists: TList;
fSynSets: TList;
fSynTokens: TList;
StringCaseFunct: function (const st: string): string; // 髓犷 蝾驽
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -