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

📄 synhighlighterperl.pas

📁 SynEditStudio delphi 代码编辑器
💻 PAS
📖 第 1 页 / 共 5 页
字号:
{-------------------------------------------------------------------------------
The contents of this file are subject to the Mozilla Public License
Version 1.1 (the "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.mozilla.org/MPL/

Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
the specific language governing rights and limitations under the License.

The Original Code is: SynHighlighterPerl.pas, released 2000-04-10.
The Original Code is based on the DcjSynPerl.pas file from the
mwEdit component suite by Martin Waldenburg and other developers, the Initial
Author of this file is Michael Trier.
All Rights Reserved.

Contributors to the SynEdit and mwEdit projects are listed in the
Contributors.txt file.

Alternatively, the contents of this file may be used under the terms of the
GNU General Public License Version 2 or later (the "GPL"), in which case
the provisions of the GPL are applicable instead of those above.
If you wish to allow use of your version of this file only under the terms
of the GPL and not to allow others to use your version of this file
under the MPL, indicate your decision by deleting the provisions above and
replace them with the notice and other provisions required by the GPL.
If you do not delete the provisions above, a recipient may use your version
of this file under either the MPL or the GPL.

$Id: SynHighlighterPerl.pas,v 1.15 2005/01/28 16:53:24 maelh Exp $

You may retrieve the latest version of this file at the SynEdit home page,
located at http://SynEdit.SourceForge.net

Known Issues:
  - Using q, qq, qw, qx, m, s, tr will not properly parse the contained
    information.
  - Not very optimized.
-------------------------------------------------------------------------------}
{
@abstract(Provides a Perl syntax highlighter for SynEdit)
@author(Michael Trier)
@created(1999, converted to SynEdit 2000-04-10 by Michael Hieke)
@lastmod(2000-06-23)
The SynHighlighterPerl unit provides SynEdit with a Perl syntax highlighter.
}

{$IFNDEF QSYNHIGHLIGHTERPERL}
unit SynHighlighterPerl;
{$ENDIF}

{$I SynEdit.inc}

interface

uses
{$IFDEF SYN_CLX}
  QGraphics,
  QSynEditTypes,
  QSynEditHighlighter,
{$ELSE}
  Graphics,
  SynEditTypes,
  SynEditHighlighter,
{$ENDIF}
  SysUtils,
  Classes;

type
  TtkTokenKind = (tkComment, tkIdentifier, tkKey, tkNull, tkNumber, tkOperator,
    tkPragma, tkSpace, tkString, tkSymbol, tkUnknown, tkVariable);

  TProcTableProc = procedure of object;
  TIdentFuncTableFunc = function: TtkTokenKind of object;

  TSynPerlSyn = class(TSynCustomHighlighter)
  private
    fLine: PChar;
    fProcTable: array[#0..#255] of TProcTableProc;
    Run: LongInt;
    fStringLen: Integer;
    fToIdent: PChar;
    fTokenPos: Integer;
    FTokenID: TtkTokenKind;
    fIdentFuncTable: array[0..2167] of TIdentFuncTableFunc;
    fLineNumber: Integer;
    fCommentAttri: TSynHighlighterAttributes;
    fIdentifierAttri: TSynHighlighterAttributes;
    fInvalidAttri: TSynHighlighterAttributes;
    fKeyAttri: TSynHighlighterAttributes;
    fNumberAttri: TSynHighlighterAttributes;
    fOperatorAttri: TSynHighlighterAttributes;
    fPragmaAttri: TSynHighlighterAttributes;
    fSpaceAttri: TSynHighlighterAttributes;
    fStringAttri: TSynHighlighterAttributes;
    fSymbolAttri: TSynHighlighterAttributes;
    fVariableAttri: TSynHighlighterAttributes;
    function KeyHash(ToHash: PChar): Integer;
    function KeyComp(const aKey: String): Boolean;
    function Func109: TtkTokenKind;
    function Func113: TtkTokenKind;
    function Func196: TtkTokenKind;
    function Func201: TtkTokenKind;
    function Func204: TtkTokenKind;
    function Func207: TtkTokenKind;
    function Func209: TtkTokenKind;
    function Func211: TtkTokenKind;
    function Func214: TtkTokenKind;
    function Func216: TtkTokenKind;
    function Func219: TtkTokenKind;
    function Func221: TtkTokenKind;
    function Func224: TtkTokenKind;
    function Func225: TtkTokenKind;
    function Func226: TtkTokenKind;
    function Func230: TtkTokenKind;
    function Func232: TtkTokenKind;
    function Func233: TtkTokenKind;
    function Func248: TtkTokenKind;
    function Func254: TtkTokenKind;
    function Func255: TtkTokenKind;
    function Func257: TtkTokenKind;
    function Func262: TtkTokenKind;
    function Func263: TtkTokenKind;
    function Func269: TtkTokenKind;
    function Func280: TtkTokenKind;
    function Func282: TtkTokenKind;
    function Func306: TtkTokenKind;
    function Func307: TtkTokenKind;
    function Func310: TtkTokenKind;
    function Func314: TtkTokenKind;
    function Func317: TtkTokenKind;
    function Func318: TtkTokenKind;
    function Func320: TtkTokenKind;
    function Func322: TtkTokenKind;
    function Func325: TtkTokenKind;
    function Func326: TtkTokenKind;
    function Func327: TtkTokenKind;
    function Func330: TtkTokenKind;
    function Func331: TtkTokenKind;
    function Func333: TtkTokenKind;
    function Func335: TtkTokenKind;
    function Func337: TtkTokenKind;
    function Func338: TtkTokenKind;
    function Func340: TtkTokenKind;
    function Func345: TtkTokenKind;
    function Func346: TtkTokenKind;
    function Func368: TtkTokenKind;
    function Func401: TtkTokenKind;
    function Func412: TtkTokenKind;
    function Func413: TtkTokenKind;
    function Func415: TtkTokenKind;
    function Func419: TtkTokenKind;
    function Func420: TtkTokenKind;
    function Func421: TtkTokenKind;
    function Func424: TtkTokenKind;
    function Func425: TtkTokenKind;
    function Func426: TtkTokenKind;
    function Func428: TtkTokenKind;
    function Func430: TtkTokenKind;
    function Func431: TtkTokenKind;
    function Func432: TtkTokenKind;
    function Func433: TtkTokenKind;
    function Func434: TtkTokenKind;
    function Func436: TtkTokenKind;
    function Func437: TtkTokenKind;
    function Func438: TtkTokenKind;
    function Func439: TtkTokenKind;
    function Func440: TtkTokenKind;
    function Func441: TtkTokenKind;
    function Func442: TtkTokenKind;
    function Func444: TtkTokenKind;
    function Func445: TtkTokenKind;
    function Func447: TtkTokenKind;
    function Func448: TtkTokenKind;
    function Func456: TtkTokenKind;
    function Func458: TtkTokenKind;
    function Func470: TtkTokenKind;
    function Func477: TtkTokenKind;
    function Func502: TtkTokenKind;
    function Func522: TtkTokenKind;
    function Func523: TtkTokenKind;
    function Func525: TtkTokenKind;
    function Func527: TtkTokenKind;
    function Func530: TtkTokenKind;
    function Func531: TtkTokenKind;
    function Func534: TtkTokenKind;
    function Func535: TtkTokenKind;
    function Func536: TtkTokenKind;
    function Func537: TtkTokenKind;
    function Func539: TtkTokenKind;
    function Func542: TtkTokenKind;
    function Func543: TtkTokenKind;
    function Func545: TtkTokenKind;
    function Func546: TtkTokenKind;
    function Func547: TtkTokenKind;
    function Func548: TtkTokenKind;
    function Func549: TtkTokenKind;
    function Func552: TtkTokenKind;
    function Func555: TtkTokenKind;
    function Func556: TtkTokenKind;
    function Func557: TtkTokenKind;
    function Func562: TtkTokenKind;
    function Func569: TtkTokenKind;
    function Func570: TtkTokenKind;
    function Func622: TtkTokenKind;
    function Func624: TtkTokenKind;
    function Func627: TtkTokenKind;
    function Func630: TtkTokenKind;
    function Func632: TtkTokenKind;
    function Func637: TtkTokenKind;
    function Func640: TtkTokenKind;
    function Func642: TtkTokenKind;
    function Func643: TtkTokenKind;
    function Func645: TtkTokenKind;
    function Func647: TtkTokenKind;
    function Func648: TtkTokenKind;
    function Func649: TtkTokenKind;
    function Func650: TtkTokenKind;
    function Func651: TtkTokenKind;
    function Func652: TtkTokenKind;
    function Func655: TtkTokenKind;
    function Func656: TtkTokenKind;
    function Func657: TtkTokenKind;
    function Func658: TtkTokenKind;
    function Func665: TtkTokenKind;
    function Func666: TtkTokenKind;
    function Func667: TtkTokenKind;
    function Func672: TtkTokenKind;
    function Func675: TtkTokenKind;
    function Func677: TtkTokenKind;
    function Func687: TtkTokenKind;
    function Func688: TtkTokenKind;
    function Func716: TtkTokenKind;
    function Func719: TtkTokenKind;
    function Func727: TtkTokenKind;
    function Func728: TtkTokenKind;
    function Func731: TtkTokenKind;
    function Func734: TtkTokenKind;
    function Func740: TtkTokenKind;
    function Func741: TtkTokenKind;
    function Func743: TtkTokenKind;
    function Func746: TtkTokenKind;
    function Func749: TtkTokenKind;
    function Func750: TtkTokenKind;
    function Func752: TtkTokenKind;
    function Func753: TtkTokenKind;
    function Func754: TtkTokenKind;
    function Func759: TtkTokenKind;
    function Func761: TtkTokenKind;
    function Func762: TtkTokenKind;
    function Func763: TtkTokenKind;
    function Func764: TtkTokenKind;
    function Func765: TtkTokenKind;
    function Func768: TtkTokenKind;
    function Func769: TtkTokenKind;
    function Func773: TtkTokenKind;
    function Func774: TtkTokenKind;
    function Func775: TtkTokenKind;
    function Func815: TtkTokenKind;
    function Func821: TtkTokenKind;
    function Func841: TtkTokenKind;
    function Func842: TtkTokenKind;
    function Func845: TtkTokenKind;
    function Func853: TtkTokenKind;
    function Func855: TtkTokenKind;
    function Func857: TtkTokenKind;
    function Func860: TtkTokenKind;
    function Func864: TtkTokenKind;
    function Func867: TtkTokenKind;
    function Func868: TtkTokenKind;
    function Func869: TtkTokenKind;
    function Func870: TtkTokenKind;
    function Func873: TtkTokenKind;
    function Func874: TtkTokenKind;
    function Func876: TtkTokenKind;
    function Func877: TtkTokenKind;
    function Func878: TtkTokenKind;
    function Func881: TtkTokenKind;
    function Func883: TtkTokenKind;
    function Func890: TtkTokenKind;
    function Func892: TtkTokenKind;
    function Func906: TtkTokenKind;
    function Func933: TtkTokenKind;
    function Func954: TtkTokenKind;
    function Func956: TtkTokenKind;
    function Func965: TtkTokenKind;
    function Func968: TtkTokenKind;
    function Func974: TtkTokenKind;
    function Func978: TtkTokenKind;
    function Func981: TtkTokenKind;
    function Func985: TtkTokenKind;
    function Func986: TtkTokenKind;
    function Func988: TtkTokenKind;
    function Func1056: TtkTokenKind;
    function Func1077: TtkTokenKind;
    function Func1079: TtkTokenKind;
    function Func1084: TtkTokenKind;
    function Func1086: TtkTokenKind;
    function Func1091: TtkTokenKind;
    function Func1093: TtkTokenKind;
    function Func1095: TtkTokenKind;
    function Func1103: TtkTokenKind;
    function Func1105: TtkTokenKind;
    function Func1107: TtkTokenKind;
    function Func1136: TtkTokenKind;
    function Func1158: TtkTokenKind;
    function Func1165: TtkTokenKind;
    function Func1169: TtkTokenKind;
    function Func1172: TtkTokenKind;
    function Func1176: TtkTokenKind;
    function Func1202: TtkTokenKind;
    function Func1211: TtkTokenKind;
    function Func1215: TtkTokenKind;
    function Func1218: TtkTokenKind;
    function Func1223: TtkTokenKind;
    function Func1230: TtkTokenKind;
    function Func1273: TtkTokenKind;
    function Func1277: TtkTokenKind;
    function Func1283: TtkTokenKind;
    function Func1327: TtkTokenKind;
    function Func1343: TtkTokenKind;
    function Func1361: TtkTokenKind;
    function Func1379: TtkTokenKind;
    function Func1396: TtkTokenKind;
    function Func1402: TtkTokenKind;
    function Func1404: TtkTokenKind;
    function Func1409: TtkTokenKind;
    function Func1421: TtkTokenKind;
    function Func1425: TtkTokenKind;
    function Func1440: TtkTokenKind;
    function Func1520: TtkTokenKind;
    function Func1523: TtkTokenKind;
    function Func1673: TtkTokenKind;
    function Func1752: TtkTokenKind;
    function Func1762: TtkTokenKind;
    function Func1768: TtkTokenKind;
    function Func2167: TtkTokenKind;
    procedure AndSymbolProc;
    procedure CRProc;
    procedure ColonProc;
    procedure CommentProc;
    procedure EqualProc;
    procedure GreaterProc;
    procedure IdentProc;
    procedure LFProc;
    procedure LowerProc;
    procedure MinusProc;
    procedure NotSymbolProc;
    procedure NullProc;
    procedure NumberProc;
    procedure OrSymbolProc;
    procedure PlusProc;
    procedure SlashProc;
    procedure SpaceProc;
    procedure StarProc;
    procedure StringInterpProc;
    procedure StringLiteralProc;
    procedure SymbolProc;
    procedure XOrSymbolProc;
    procedure UnknownProc;
    function AltFunc: TtkTokenKind;
    procedure InitIdent;
    function IdentKind(MayBe: PChar): TtkTokenKind;
    procedure MakeMethodTables;
  protected
    function GetIdentChars: TSynIdentChars; override;
    function GetSampleSource: string; override;
    function IsFilterStored: Boolean; override;
  public
    class function GetLanguageName: string; override;
  public
    constructor Create(AOwner: TComponent); override;
    function GetDefaultAttribute(Index: integer): TSynHighlighterAttributes;
      override;
    function GetEol: Boolean; override;
    function GetTokenID: TtkTokenKind;
    procedure SetLine(NewValue: String; LineNumber:Integer); override;
    function GetToken: String; override;
    function GetTokenAttribute: TSynHighlighterAttributes; override;
    function GetTokenKind: integer; override;
    function GetTokenPos: Integer; override;
    procedure Next; override;
  published
    property CommentAttri: TSynHighlighterAttributes read fCommentAttri
      write fCommentAttri;
    property IdentifierAttri: TSynHighlighterAttributes read fIdentifierAttri
      write fIdentifierAttri;
    property InvalidAttri: TSynHighlighterAttributes read fInvalidAttri
      write fInvalidAttri;
    property KeyAttri: TSynHighlighterAttributes read fKeyAttri write fKeyAttri;
    property NumberAttri: TSynHighlighterAttributes read fNumberAttri
      write fNumberAttri;
    property OperatorAttri: TSynHighlighterAttributes read fOperatorAttri
      write fOperatorAttri;
    property PragmaAttri: TSynHighlighterAttributes read fPragmaAttri
      write fPragmaAttri;
    property SpaceAttri: TSynHighlighterAttributes read fSpaceAttri
      write fSpaceAttri;
    property StringAttri: TSynHighlighterAttributes read fStringAttri
      write fStringAttri;
    property SymbolAttri: TSynHighlighterAttributes read fSymbolAttri
      write fSymbolAttri;
    property VariableAttri: TSynHighlighterAttributes read fVariableAttri
      write fVariableAttri;
  end;

implementation

uses
{$IFDEF SYN_CLX}
  QSynEditStrConst;
{$ELSE}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -