mwdmlsyn.pas
来自「本人买的<<VC++项目开发实例>>源代码配套光盘.」· PAS 代码 · 共 1,866 行 · 第 1/4 页
PAS
1,866 行
{+--------------------------------------------------------------------------+
| GEMBASE Syntax Parser v0.51 |
+--------------------------------------------------------------------------+
| Description: GEMBASE syntax parser for use with mwCustomEdit.
| Ross Systems is a leading provider of enterprise business solutions
| for some of the most prestigious process manufacturing, healthcare and
| public sector organizations in the world.
| Their software Renaissance CS, is an integrated enterprise resource
| planning (ERP) and supply chain management (SCM) solution.
| (Just like Baan, JD-Edwards OneWorld, SAP, PeopleSoft)
| Gembase is a 4GL programming language of Renaissance CS.
| For more info please visit: www.rossinc.com
+--------------------------------------------------------------------------+
| Unit: mwDMLSyn
| Created: 1999-10-04
| Last change: 1999-11-14
| Author: Peter Adam (adamp@extra.hu)
| Copyright (c) 1999 All rights reserved
| (Large!) Portions Copyright Martin Waldenburg
| Version: 0.52
| Status: Public Domain
| DISCLAIMER: This is provided as is, expressly without a warranty of any
| kind. You use it at your own risc.
+--------------------------------------------------------------------------+
| Known problems: There are no metadata qualifiers
+--------------------------------------------------------------------------+
| Revision History:
| 0.50: Initial version.
| 0.51: Optimisations, thanks to Michael Hieke
| 0.52: Made compatible with pointer type checking
+--------------------------------------------------------------------------+}
{$I MWEDIT.INC}
unit mwDmlSyn;
interface
uses
SysUtils, Windows, Messages, Classes, Controls, Graphics, Registry,
mwHighlighter, mwLocalStr, mwExport;
type
TtkTokenKind = (
tkBlock,
tkComment,
tkForm,
tkKey,
tkQualifier,
tkFunction,
tkVariable,
tkString,
tkIdentifier,
tkNumber,
tkSpecial,
tkNull,
tkSpace,
tkSymbol,
tkUnknown);
TRangeState = (rsANil, rsAdd, rsFind, rsUnKnown);
TProcTableProc = procedure of object;
PIdentFuncTableFunc = ^TIdentFuncTableFunc;
TIdentFuncTableFunc = function: TtkTokenKind of object;
TmwDmlSyn = class(TmwCustomHighLighter)
private
fRange: TRangeState;
fLine: PChar;
fLineNumber: Integer;
fProcTable: array[#0..#255] of TProcTableProc;
Run: LongInt;
Temp: PChar;
fStringLen: Integer;
fToIdent: PChar;
fIdentFuncTable: array[0..327] of TIdentFuncTableFunc;
fTokenPos: Integer;
FTokenID: TtkTokenKind;
fFormAttri: TmwHighLightAttributes;
fBlockAttri: TmwHighLightAttributes;
fKeyAttri: TmwHighLightAttributes;
fQualiAttri: TmwHighLightAttributes;
fCommentAttri: TmwHighLightAttributes;
fFunctionAttri: TmwHighLightAttributes;
fVariableAttri: TmwHighLightAttributes;
fSpecialAttri: TmwHighLightAttributes;
fStringAttri: TmwHighLightAttributes;
fNumberAttri: TmwHighLightAttributes;
fSymbolAttri: TmwHighLightAttributes;
fIdentifierAttri: TmwHighLightAttributes;
fSpaceAttri: TmwHighLightAttributes;
function KeyHash(ToHash: PChar): Integer;
function KeyComp(const aKey: String): Boolean;
function Func9: TtkTokenKind;
function Func15: TtkTokenKind;
function Func17: TtkTokenKind;
function Func19: TtkTokenKind;
function Func22: TtkTokenKind;
function Func23: TtkTokenKind;
function Func24: TtkTokenKind;
function Func26: TtkTokenKind;
function Func27: TtkTokenKind;
function Func28: TtkTokenKind;
function Func29: TtkTokenKind;
function Func30: TtkTokenKind;
function Func31: TtkTokenKind;
function Func32: TtkTokenKind;
function Func33: TtkTokenKind;
function Func34: TtkTokenKind;
function Func35: TtkTokenKind;
function Func36: TtkTokenKind;
function Func37: TtkTokenKind;
function Func38: TtkTokenKind;
function Func40: TtkTokenKind;
function Func41: TtkTokenKind;
function Func42: TtkTokenKind;
function Func43: TtkTokenKind;
function Func45: TtkTokenKind;
function Func47: TtkTokenKind;
function Func48: TtkTokenKind;
function Func49: TtkTokenKind;
function Func50: TtkTokenKind;
function Func51: TtkTokenKind;
function Func52: TtkTokenKind;
function Func53: TtkTokenKind;
function Func54: TtkTokenKind;
function Func56: TtkTokenKind;
function Func57: TtkTokenKind;
function Func58: TtkTokenKind;
function Func60: TtkTokenKind;
function Func62: TtkTokenKind;
function Func64: TtkTokenKind;
function Func65: TtkTokenKind;
function Func66: TtkTokenKind;
function Func67: TtkTokenKind;
function Func68: TtkTokenKind;
function Func69: TtkTokenKind;
function Func70: TtkTokenKind;
function Func71: TtkTokenKind;
function Func72: TtkTokenKind;
function Func73: TtkTokenKind;
function Func74: TtkTokenKind;
function Func75: TtkTokenKind;
function Func76: TtkTokenKind;
function Func77: TtkTokenKind;
function Func78: TtkTokenKind;
function Func79: TtkTokenKind;
function Func81: TtkTokenKind;
function Func82: TtkTokenKind;
function Func83: TtkTokenKind;
function Func84: TtkTokenKind;
function Func85: TtkTokenKind;
function Func86: TtkTokenKind;
function Func87: TtkTokenKind;
function Func89: TtkTokenKind;
function Func91: TtkTokenKind;
function Func92: TtkTokenKind;
function Func93: TtkTokenKind;
function Func94: TtkTokenKind;
function Func96: TtkTokenKind;
function Func97: TtkTokenKind;
function Func98: TtkTokenKind;
function Func99: TtkTokenKind;
function Func100: TtkTokenKind;
function Func101: TtkTokenKind;
function Func102: TtkTokenKind;
function Func103: TtkTokenKind;
function Func104: TtkTokenKind;
function Func106: TtkTokenKind;
function Func108: TtkTokenKind;
function Func110: TtkTokenKind;
function Func111: TtkTokenKind;
function Func113: TtkTokenKind;
function Func116: TtkTokenKind;
function Func117: TtkTokenKind;
function Func120: TtkTokenKind;
function Func121: TtkTokenKind;
function Func122: TtkTokenKind;
function Func123: TtkTokenKind;
function Func124: TtkTokenKind;
function Func125: TtkTokenKind;
function Func126: TtkTokenKind;
function Func127: TtkTokenKind;
function Func128: TtkTokenKind;
function Func129: TtkTokenKind;
function Func131: TtkTokenKind;
function Func132: TtkTokenKind;
function Func134: TtkTokenKind;
function Func135: TtkTokenKind;
function Func136: TtkTokenKind;
function Func137: TtkTokenKind;
function Func138: TtkTokenKind;
function Func139: TtkTokenKind;
function Func140: TtkTokenKind;
function Func141: TtkTokenKind;
function Func142: TtkTokenKind;
function Func144: TtkTokenKind;
function Func146: TtkTokenKind;
function Func148: TtkTokenKind;
function Func150: TtkTokenKind;
function Func152: TtkTokenKind;
function Func153: TtkTokenKind;
function Func154: TtkTokenKind;
function Func155: TtkTokenKind;
function Func156: TtkTokenKind;
function Func157: TtkTokenKind;
function Func163: TtkTokenKind;
function Func164: TtkTokenKind;
function Func166: TtkTokenKind;
function Func169: TtkTokenKind;
function Func173: TtkTokenKind;
function Func174: TtkTokenKind;
function Func175: TtkTokenKind;
function Func176: TtkTokenKind;
function Func178: TtkTokenKind;
function Func179: TtkTokenKind;
function Func182: TtkTokenKind;
function Func183: TtkTokenKind;
function Func184: TtkTokenKind;
function Func185: TtkTokenKind;
function Func187: TtkTokenKind;
function Func188: TtkTokenKind;
function Func203: TtkTokenKind;
function Func206: TtkTokenKind;
function Func216: TtkTokenKind;
function Func219: TtkTokenKind;
function Func221: TtkTokenKind;
function Func232: TtkTokenKind;
function Func234: TtkTokenKind;
function Func235: TtkTokenKind;
function Func243: TtkTokenKind;
function Func244: TtkTokenKind;
function Func255: TtkTokenKind;
function Func313: TtkTokenKind;
function Func327: TtkTokenKind;
function AltFunc: TtkTokenKind;
procedure InitIdent;
function IdentKind(MayBe: PChar): TtkTokenKind;
procedure MakeMethodTables;
procedure SymbolProc;
procedure AddressOpProc;
procedure AsciiCharProc;
procedure CRProc;
procedure GreaterProc;
procedure IdentProc;
procedure LFProc;
procedure LowerProc;
procedure NullProc;
procedure NumberProc;
procedure PointProc;
procedure SpaceProc;
procedure StringProc;
procedure UnknownProc;
procedure RemProc;
function IsQuali: boolean;
function IsSpecial: Boolean;
protected
function GetIdentChars: TIdentChars; override;
function GetLanguageName: string; override;
function GetCapability: THighlighterCapability; override;
public
constructor Create(AOwner: TComponent); override;
procedure ExportNext;override;
procedure SetLineForExport(NewValue: String);override;
function GetEol: Boolean; override;
function GetRange: Pointer; override;
function GetTokenID: TtkTokenKind;
procedure SetLine(NewValue: String; LineNumber:Integer); override;
function GetToken: String; override;
function GetTokenAttribute: TmwHighLightAttributes; override;
function GetTokenKind: integer; override;
function GetTokenPos: Integer; override;
procedure Next; override;
procedure SetRange(Value: Pointer); override;
procedure ReSetRange; override;
published
property FormAttri: TmwHighLightAttributes read fFormAttri write fFormAttri;
property BlockAttri: TmwHighLightAttributes read fBlockAttri
write fBlockAttri;
property KeyAttri: TmwHighLightAttributes read fKeyAttri write fKeyAttri;
property QualiAttri: TmwHighLightAttributes read fQualiAttri
write fQualiAttri;
property CommentAttri: TmwHighLightAttributes read fCommentAttri
write fCommentAttri;
property FunctionAttri: TmwHighLightAttributes read fFunctionAttri
write fFunctionAttri;
property VariableAttri: TmwHighLightAttributes read fVariableAttri
write fVariableAttri;
property SpecialAttri: TmwHighLightAttributes read fSpecialAttri
write fSpecialAttri;
property IdentifierAttri: TmwHighLightAttributes read fIdentifierAttri
write fIdentifierAttri;
property NumberAttri: TmwHighLightAttributes read fNumberAttri
write fNumberAttri;
property SpaceAttri: TmwHighLightAttributes read fSpaceAttri
write fSpaceAttri;
property StringAttri: TmwHighLightAttributes read fStringAttri
write fStringAttri;
property SymbolAttri: TmwHighLightAttributes read fSymbolAttri
write fSymbolAttri;
end;
procedure Register;
implementation
var
Identifiers: array[#0..#255] of ByteBool;
mHashTable: array[#0..#255] of Integer;
procedure Register;
begin
RegisterComponents(MWS_HighlightersPage, [TmwDmlSyn]);
end;
procedure MakeIdentTable;
var
I, J: Char;
begin
for I := #0 to #255 do
begin
Case I of
'_', '0'..'9', 'a'..'z', 'A'..'Z': Identifiers[I] := True;
else Identifiers[I] := False;
end;
J := UpCase(I);
Case I of
'a'..'z', 'A'..'Z', '_': mHashTable[I] := Ord(J) - 64;
else mHashTable[Char(I)] := 0;
end;
end;
end;
procedure TmwDmlSyn.InitIdent;
var
I: Integer;
pF: PIdentFuncTableFunc;
begin
pF := PIdentFuncTableFunc(@fIdentFuncTable);
for I := Low(fIdentFuncTable) to High(fIdentFuncTable) do begin
pF^ := AltFunc;
Inc(pF);
end;
fIdentFuncTable[9] := Func9;
fIdentFuncTable[15] := Func15;
fIdentFuncTable[17] := Func17;
fIdentFuncTable[19] := Func19;
fIdentFuncTable[22] := Func22;
fIdentFuncTable[23] := Func23;
fIdentFuncTable[24] := Func24;
fIdentFuncTable[26] := Func26;
fIdentFuncTable[27] := Func27;
fIdentFuncTable[28] := Func28;
fIdentFuncTable[29] := Func29;
fIdentFuncTable[30] := Func30;
fIdentFuncTable[31] := Func31;
fIdentFuncTable[32] := Func32;
fIdentFuncTable[33] := Func33;
fIdentFuncTable[34] := Func34;
fIdentFuncTable[35] := Func35;
fIdentFuncTable[36] := Func36;
fIdentFuncTable[37] := Func37;
fIdentFuncTable[38] := Func38;
fIdentFuncTable[40] := Func40;
fIdentFuncTable[41] := Func41;
fIdentFuncTable[42] := Func42;
fIdentFuncTable[43] := Func43;
fIdentFuncTable[45] := Func45;
fIdentFuncTable[47] := Func47;
fIdentFuncTable[48] := Func48;
fIdentFuncTable[49] := Func49;
fIdentFuncTable[50] := Func50;
fIdentFuncTable[51] := Func51;
fIdentFuncTable[52] := Func52;
fIdentFuncTable[53] := Func53;
fIdentFuncTable[54] := Func54;
fIdentFuncTable[56] := Func56;
fIdentFuncTable[57] := Func57;
fIdentFuncTable[58] := Func58;
fIdentFuncTable[60] := Func60;
fIdentFuncTable[62] := Func62;
fIdentFuncTable[64] := Func64;
fIdentFuncTable[65] := Func65;
fIdentFuncTable[66] := Func66;
fIdentFuncTable[67] := Func67;
fIdentFuncTable[68] := Func68;
fIdentFuncTable[69] := Func69;
fIdentFuncTable[70] := Func70;
fIdentFuncTable[71] := Func71;
fIdentFuncTable[72] := Func72;
fIdentFuncTable[73] := Func73;
fIdentFuncTable[74] := Func74;
fIdentFuncTable[75] := Func75;
fIdentFuncTable[76] := Func76;
fIdentFuncTable[77] := Func77;
fIdentFuncTable[78] := Func78;
fIdentFuncTable[79] := Func79;
fIdentFuncTable[81] := Func81;
fIdentFuncTable[82] := Func82;
fIdentFuncTable[83] := Func83;
fIdentFuncTable[84] := Func84;
fIdentFuncTable[85] := Func85;
fIdentFuncTable[86] := Func86;
fIdentFuncTable[87] := Func87;
fIdentFuncTable[89] := Func89;
fIdentFuncTable[91] := Func91;
fIdentFuncTable[92] := Func92;
fIdentFuncTable[93] := Func93;
fIdentFuncTable[94] := Func94;
fIdentFuncTable[96] := Func96;
fIdentFuncTable[97] := Func97;
fIdentFuncTable[98] := Func98;
fIdentFuncTable[99] := Func99;
fIdentFuncTable[100] := Func100;
fIdentFuncTable[101] := Func101;
fIdentFuncTable[102] := Func102;
fIdentFuncTable[103] := Func103;
fIdentFuncTable[104] := Func104;
fIdentFuncTable[106] := Func106;
fIdentFuncTable[108] := Func108;
fIdentFuncTable[110] := Func110;
fIdentFuncTable[111] := Func111;
fIdentFuncTable[113] := Func113;
fIdentFuncTable[116] := Func116;
fIdentFuncTable[117] := Func117;
fIdentFuncTable[120] := Func120;
fIdentFuncTable[121] := Func121;
fIdentFuncTable[122] := Func122;
fIdentFuncTable[123] := Func123;
fIdentFuncTable[124] := Func124;
fIdentFuncTable[125] := Func125;
fIdentFuncTable[126] := Func126;
fIdentFuncTable[127] := Func127;
fIdentFuncTable[128] := Func128;
fIdentFuncTable[129] := Func129;
fIdentFuncTable[131] := Func131;
fIdentFuncTable[132] := Func132;
fIdentFuncTable[134] := Func134;
fIdentFuncTable[135] := Func135;
fIdentFuncTable[136] := Func136;
fIdentFuncTable[137] := Func137;
fIdentFuncTable[138] := Func138;
fIdentFuncTable[139] := Func139;
fIdentFuncTable[140] := Func140;
fIdentFuncTable[141] := Func141;
fIdentFuncTable[142] := Func142;
fIdentFuncTable[144] := Func144;
fIdentFuncTable[146] := Func146;
fIdentFuncTable[148] := Func148;
fIdentFuncTable[150] := Func150;
fIdentFuncTable[152] := Func152;
fIdentFuncTable[153] := Func153;
fIdentFuncTable[154] := Func154;
fIdentFuncTable[155] := Func155;
fIdentFuncTable[156] := Func156;
fIdentFuncTable[157] := Func157;
fIdentFuncTable[163] := Func163;
fIdentFuncTable[164] := Func164;
fIdentFuncTable[166] := Func166;
fIdentFuncTable[169] := Func169;
fIdentFuncTable[173] := Func173;
fIdentFuncTable[174] := Func174;
fIdentFuncTable[175] := Func175;
fIdentFuncTable[176] := Func176;
fIdentFuncTable[178] := Func178;
fIdentFuncTable[179] := Func179;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?