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 + -
显示快捷键?