hkawksyn.pas
来自「本人买的<<VC++项目开发实例>>源代码配套光盘.」· PAS 代码 · 共 654 行 · 第 1/2 页
PAS
654 行
fTokenID := tkComment;
While Not (fLine[Run] In [#0, #10, #13]) Do Begin
Inc(Run);
End;
End;
{ }
Procedure ThkAWKSyn.FieldRefProc;
Begin
Inc(Run);
If (fLine[Run] In ['0'..'9']) And
Not (fLine[Run+1] In ['0'..'9', 'a'..'z', 'A'..'Z']) Then Begin
fTokenID := tkSymbol;
Inc(Run);
End Else Begin
fTokenID := tkIdentifier;
End;
End;
{ }
Procedure ThkAWKSyn.SymbolProc;
Begin
fTokenID := tkSymbol;
Inc(Run);
End;
{ }
Procedure ThkAWKSyn.PlusProc;
Begin
fTokenID := tkSymbol;
Inc(Run);
If (fLine[Run] In ['+', '=']) Then Begin
Inc(Run);
End;
End;
{ }
Procedure ThkAWKSyn.MinusProc;
Begin
fTokenID := tkSymbol;
Inc(Run);
If (fLine[Run] In ['-', '=']) Then Begin
Inc(Run);
End;
End;
{ }
Procedure ThkAWKSyn.OpInputProc;
Begin
fTokenID := tkSymbol;
Inc(Run);
If (fLine[Run] = '=') Then Begin
Inc(Run);
End;
End;
{ }
Procedure ThkAWKSyn.ExclamProc;
Begin
fTokenID := tkSymbol;
Inc(Run);
If (fLine[Run] In ['=', '~']) Then Begin
Inc(Run);
End;
End;
{ }
Procedure ThkAWKSyn.QuestionProc;
Begin
Inc(Run);
If (fLine[Run] = ':') Then Begin
fTokenID := tkSymbol;
Inc(Run);
End Else Begin
fTokenID := tkIdentifier;
End;
End;
{ }
Procedure ThkAWKSyn.OrProc;
Begin
Inc(Run);
If (fLine[Run] = '|') Then Begin
fTokenID := tkSymbol;
Inc(Run);
End Else Begin
fTokenID := tkIdentifier;
End;
End;
{ }
Procedure ThkAWKSyn.AndProc;
Begin
Inc(Run);
If (fLine[Run] = '&') Then Begin
fTokenID := tkSymbol;
Inc(Run);
End Else Begin
fTokenID := tkIdentifier;
End;
End;
{ }
Constructor ThkAWKSyn.Create(AOwner: TComponent);
Begin
fCommentAttri := TmwHighLightAttributes.Create(MWS_AttrComment);
fCommentAttri.Foreground := clBlue;
fIdentifierAttri := TmwHighLightAttributes.Create(MWS_AttrIdentifier);
fInterFuncAttri := TmwHighLightAttributes.Create(MWS_AttrInternalFunction);
fInterFuncAttri.Foreground := $00408080;
fInterFuncAttri.Style := [fsBold];
fKeyAttri := TmwHighLightAttributes.Create(MWS_AttrReservedWord);
fKeyAttri.Foreground := $00FF0080;
fKeyAttri.Style := [fsBold];
fNumberAttri := TmwHighLightAttributes.Create(MWS_AttrNumber);
fSpaceAttri := TmwHighLightAttributes.Create(MWS_AttrSpace);
fStringAttri := TmwHighLightAttributes.Create(MWS_AttrString);
fStringAttri.Foreground := clTeal;
fSymbolAttri := TmwHighLightAttributes.Create(MWS_AttrSymbol);
fSymbolAttri.Style := [fsBold];
fSysVarAttri := TmwHighLightAttributes.Create(MWS_AttrSystemValue);
fSysVarAttri.Foreground := $000080FF;
fSysVarAttri.Style := [fsBold];
Inherited Create(AOwner);
AWKSyntaxList := TStringList.Create;
MakeSyntaxList;
AddAttribute(fCommentAttri);
AddAttribute(fIdentifierAttri);
AddAttribute(fInterFuncAttri);
AddAttribute(fKeyAttri);
AddAttribute(fNumberAttri);
AddAttribute(fSpaceAttri);
AddAttribute(fStringAttri);
AddAttribute(fSymbolAttri);
AddAttribute(fSysVarAttri);
SetAttributesOnChange(DefHighlightChange);
MakeMethodTables;
fRange := rsUnknown;
fDefaultFilter := MWS_FilterAWK;
End;
{ }
Destructor ThkAWKSyn.Destroy;
Begin
AWKSyntaxList.Free;
Inherited Destroy;
End;
{ }
procedure ThkAWKSyn.SetLine(NewValue: String; LineNumber:Integer);
Begin
fLine := PChar(NewValue);
Run := 0;
fLineNumber := LineNumber;
Next;
End;
{ }
Procedure ThkAWKSyn.CRProc;
Begin
fTokenID := tkSpace;
Inc(Run);
if fLine[Run] = #10 then Inc(Run);
End;
{ }
Procedure ThkAWKSyn.LFProc;
Begin
fTokenID := tkSpace;
Inc(Run);
End;
{ }
Procedure ThkAWKSyn.NullProc;
Begin
fTokenID := tkNull;
End;
{ }
Procedure ThkAWKSyn.SpaceProc;
Begin
Inc(Run);
fTokenID := tkSpace;
While (fLine[Run] In [#1..#9, #11, #12, #14..#32]) Do Begin
Inc(Run);
End;
End;
{ }
Function ThkAWKSyn.GetEol: Boolean;
Begin
Result := fTokenID = tkNull;
End;
{ }
Function ThkAWKSyn.GetToken: String;
Var
len: Longint;
Begin
len := (Run - fTokenPos);
SetString(Result, (fLine + fTokenPos), len);
End;
{ }
Function ThkAWKSyn.GetTokenID: TtkTokenKind;
Begin
Result := fTokenId;
End;
function ThkAWKSyn.GetTokenAttribute: TmwHighLightAttributes;
begin
case fTokenID of
tkComment: Result := fCommentAttri;
tkIdentifier: Result := fIdentifierAttri;
tkInterFunc: Result := fInterFuncAttri;
tkKey: Result := fKeyAttri;
tkNumber: Result := fNumberAttri;
tkSpace: Result := fSpaceAttri;
tkString: Result := fStringAttri;
tkSymbol: Result := fSymbolAttri;
tkSysVar: Result := fSysVarAttri;
else Result := nil;
end;
end;
function ThkAWKSyn.GetTokenKind: integer;
begin
Result := Ord(fTokenId);
end;
{ }
Function ThkAWKSyn.GetTokenPos: Integer;
Begin
Result := fTokenPos;
End;
{ }
Function ThkAWKSyn.GetRange: Pointer;
Begin
Result := Pointer(fRange);
End;
{ }
Procedure ThkAWKSyn.SetRange(Value: Pointer);
Begin
fRange := TRangeState(Value);
End;
{ }
Procedure ThkAWKSyn.ReSetRange;
Begin
fRange:= rsUnknown;
End;
{ }
Function ThkAWKSyn.GetIdentChars: TIdentChars;
Begin
Result := ['0'..'9', 'a'..'z', 'A'..'Z'];
End;
{ }
Function ThkAWKSyn.GetLanguageName: String;
Begin
Result := MWS_LangAWK;
End;
{ }
Function ThkAWKSyn.GetCapability: THighlighterCapability;
Begin
Result := Inherited GetCapability + [hcUserSettings, hcExportable];
End;
{ }
Procedure ThkAWKSyn.SetLineForExport(NewValue: String);
Begin
fLine := PChar(NewValue);
Run := 0;
ExportNext;
End;
{ }
Procedure ThkAWKSyn.ExportNext;
Begin
fTokenPos := Run;
fProcTable[fLine[Run]];
If Assigned(Exporter) Then Begin
With TmwCustomExport(Exporter) Do begin
Case GetTokenID Of
tkComment: FormatToken(GetToken, fCommentAttri, False, False);
tkIdentifier: FormatToken(GetToken, fIdentifierAttri, False, False);
tkInterFunc: FormatToken(GetToken, fInterFuncAttri, False, False);
tkKey: FormatToken(GetToken, fKeyAttri, False, False);
tkNull: FormatToken(GetToken, Nil, False, False);
tkNumber: FormatToken(GetToken, fNumberAttri, False, False);
tkSpace: FormatToken(GetToken, fSpaceAttri, False, True);
tkString: FormatToken(GetToken, fStringAttri, False, False);
tkSymbol: FormatToken(GetToken, fSymbolAttri, False, False);
tkSysVar: FormatToken(GetToken, fSysVarAttri, False, False);
End;
End;
End;
End;
{ }
Procedure Register;
Begin
RegisterComponents(MWS_HighlightersPage, [ThkAWKSyn]);
End;
End.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?