⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 synunirules.pas

📁 SynEditStudio delphi 代码编辑器
💻 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 + -