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

📄 synhighlighterpaxpascal.pas

📁 Delphi脚本控件
💻 PAS
📖 第 1 页 / 共 4 页
字号:
  inc(Run);
  fTokenID := tkSpace;
  while FLine[Run] in [#1..#9, #11, #12, #14..#32] do inc(Run);
end;

procedure TSynPaxPascalSyn.StringProc;
begin
  fTokenID := tkString;
  Inc(Run);
  while not (fLine[Run] in [#0, #10, #13]) do begin
    if fLine[Run] = #39 then begin
      Inc(Run);
      if fLine[Run] <> #39 then
        break;
    end;
    Inc(Run);
  end;
end;

procedure TSynPaxPascalSyn.SymbolProc;
begin
  inc(Run);
  fTokenID := tkSymbol;
end;

procedure TSynPaxPascalSyn.UnknownProc;
begin
{$IFDEF SYN_MBCSSUPPORT}
  if FLine[Run] in LeadBytes then
    Inc(Run,2)
  else
{$ENDIF}
  inc(Run);
  fTokenID := tkUnknown;
end;

procedure TSynPaxPascalSyn.Next;
begin
  fAsmStart := False;
  fTokenPos := Run;
  case fRange of
    rsAnsi, rsAnsiAsm:
      AnsiProc;
    rsBor, rsBorAsm:
      BorProc;
  else
    fProcTable[fLine[Run]];
  end;
end;

function TSynPaxPascalSyn.GetDefaultAttribute(Index: integer):
  TSynHighlighterAttributes;
begin
  case Index of
    SYN_ATTR_COMMENT: Result := fCommentAttri;
    SYN_ATTR_IDENTIFIER: Result := fIdentifierAttri;
    SYN_ATTR_KEYWORD: Result := fKeyAttri;
    SYN_ATTR_STRING: Result := fStringAttri;
    SYN_ATTR_WHITESPACE: Result := fSpaceAttri;
    SYN_ATTR_SYMBOL: Result := fSymbolAttri;
  else
    Result := nil;
  end;
end;

function TSynPaxPascalSyn.GetEol: Boolean;
begin
  Result := fTokenID = tkNull;
end;

function TSynPaxPascalSyn.GetToken: string;
var
  Len: LongInt;
begin
  Len := Run - fTokenPos;
  SetString(Result, (FLine + fTokenPos), Len);
end;

function TSynPaxPascalSyn.GetTokenID: TtkTokenKind;
begin
  if not fAsmStart and (fRange = rsAsm)
    and not (fTokenId in [tkNull, tkComment, tkSpace])
  then
    Result := tkAsm
  else
    Result := fTokenId;
end;

function TSynPaxPascalSyn.GetTokenAttribute: TSynHighlighterAttributes;
begin
  case GetTokenID of
    tkAsm: Result := fAsmAttri;
    tkComment: Result := fCommentAttri;
    tkDirec: Result := fDirecAttri;
    tkIdentifier: Result := fIdentifierAttri;
    tkKey: Result := fKeyAttri;
    tkNumber: Result := fNumberAttri;
    tkFloat: Result := fFloatAttri;
    tkHex: Result := fHexAttri;
    tkSpace: Result := fSpaceAttri;
    tkString: Result := fStringAttri;
    tkChar: Result := fCharAttri;
    tkSymbol: Result := fSymbolAttri;
    tkUnknown: Result := fSymbolAttri;
  else
    Result := nil;
  end;
end;

function TSynPaxPascalSyn.GetTokenKind: integer;
begin
  Result := Ord(GetTokenID);
end;

function TSynPaxPascalSyn.GetTokenPos: Integer;
begin
  Result := fTokenPos;
end;

function TSynPaxPascalSyn.GetRange: Pointer;
begin
  Result := Pointer(fRange);
end;

procedure TSynPaxPascalSyn.SetRange(Value: Pointer);
begin
  fRange := TRangeState(Value);
end;

procedure TSynPaxPascalSyn.ResetRange;
begin
  fRange:= rsUnknown;
end;

procedure TSynPaxPascalSyn.EnumUserSettings(settings: TStrings);
begin
  { returns the user settings that exist in the registry }
{$IFNDEF SYN_CLX} //js 07-04-2002 changed to SYN_CLX from SYN_KYLIX
  with TBetterRegistry.Create do
  begin
    try
      RootKey := HKEY_LOCAL_MACHINE;
      if OpenKeyReadOnly('\SOFTWARE\Borland\Delphi') then
      begin
        try
          GetKeyNames(settings);
        finally
          CloseKey;
        end;
      end;
    finally
      Free;
    end;
  end;
{$ENDIF}
end;

function TSynPaxPascalSyn.UseUserSettings(settingIndex: integer): boolean;
// Possible parameter values:
//   index into TStrings returned by EnumUserSettings
// Possible return values:
//   true : settings were read and used
//   false: problem reading settings or invalid version specified - old settings
//          were preserved

{$IFNDEF SYN_CLX} //js 07-04-2002 changed from syn_kylix to SYN_CLX
  function ReadDelphiSettings(settingIndex: integer): boolean;

    function ReadDelphiSetting(settingTag: string; attri: TSynHighlighterAttributes; key: string): boolean;

      function ReadDelphi2Or3(settingTag: string; attri: TSynHighlighterAttributes; name: string): boolean;
      var
        i: integer;
      begin
        for i := 1 to Length(name) do
          if name[i] = ' ' then name[i] := '_';
        Result := attri.LoadFromBorlandRegistry(HKEY_CURRENT_USER,
                '\Software\Borland\Delphi\'+settingTag+'\Highlight',name,true);
      end; { ReadDelphi2Or3 }

      function ReadDelphi4OrMore(settingTag: string; attri: TSynHighlighterAttributes; key: string): boolean;
      begin
        Result := attri.LoadFromBorlandRegistry(HKEY_CURRENT_USER,
               '\Software\Borland\Delphi\'+settingTag+'\Editor\Highlight',key,false);
      end; { ReadDelphi4OrMore }

    begin { ReadDelphiSetting }
      try
        if (settingTag[1] = '2') or (settingTag[1] = '3')
          then Result := ReadDelphi2Or3(settingTag,attri,key)
          else Result := ReadDelphi4OrMore(settingTag,attri,key);
      except Result := false; end;
    end; { ReadDelphiSetting }

  var
    tmpStringAttri    : TSynHighlighterAttributes;
    tmpNumberAttri    : TSynHighlighterAttributes;
    tmpKeyAttri       : TSynHighlighterAttributes;
    tmpSymbolAttri    : TSynHighlighterAttributes;
    tmpAsmAttri       : TSynHighlighterAttributes;
    tmpCommentAttri   : TSynHighlighterAttributes;
    tmpIdentifierAttri: TSynHighlighterAttributes;
    tmpSpaceAttri     : TSynHighlighterAttributes;
    s                 : TStringList;

  begin { ReadDelphiSettings }
    s := TStringList.Create;
    try
      EnumUserSettings(s);
      if (settingIndex < 0) or (settingIndex >= s.Count) then Result := false
      else begin
        tmpStringAttri    := TSynHighlighterAttributes.Create('');
        tmpNumberAttri    := TSynHighlighterAttributes.Create('');
        tmpKeyAttri       := TSynHighlighterAttributes.Create('');
        tmpSymbolAttri    := TSynHighlighterAttributes.Create('');
        tmpAsmAttri       := TSynHighlighterAttributes.Create('');
        tmpIdentifierAttri:= TSynHighlighterAttributes.Create('');
        tmpSpaceAttri     := TSynHighlighterAttributes.Create('');
        tmpCommentAttri   := TSynHighlighterAttributes.Create('');
        tmpStringAttri    .Assign(fStringAttri);
        tmpNumberAttri    .Assign(fNumberAttri);
        tmpKeyAttri       .Assign(fKeyAttri);
        tmpSymbolAttri    .Assign(fSymbolAttri);
        tmpAsmAttri       .Assign(fAsmAttri);
        tmpCommentAttri   .Assign(fCommentAttri);
        tmpIdentifierAttri.Assign(fIdentifierAttri);
        tmpSpaceAttri     .Assign(fSpaceAttri);
        Result := ReadDelphiSetting(s[settingIndex],fAsmAttri,'Assembler')         and
                  ReadDelphiSetting(s[settingIndex],fCommentAttri,'Comment')       and
                  ReadDelphiSetting(s[settingIndex],fIdentifierAttri,'Identifier') and
                  ReadDelphiSetting(s[settingIndex],fKeyAttri,'Reserved word')     and
                  ReadDelphiSetting(s[settingIndex],fNumberAttri,'Number')         and
                  ReadDelphiSetting(s[settingIndex],fSpaceAttri,'Whitespace')      and
                  ReadDelphiSetting(s[settingIndex],fStringAttri,'string')         and
                  ReadDelphiSetting(s[settingIndex],fSymbolAttri,'Symbol');
        if not Result then
        begin
          fStringAttri.Assign(tmpStringAttri);
          fCharAttri.Foreground := tmpStringAttri.Foreground; // Delphi lacks #xx support
          fCharAttri.Background := tmpStringAttri.Background;
          fCharAttri.Style := tmpStringAttri.Style;
          fNumberAttri.Assign(tmpNumberAttri);
          fFloatAttri.Foreground := tmpNumberAttri.Foreground; // Delphi lacks float/hex support
          fFloatAttri.Background := tmpNumberAttri.Background;
          fFloatAttri.Style := tmpNumberAttri.Style;
          fHexAttri.Foreground := tmpNumberAttri.Foreground;
          fHexAttri.Background := tmpNumberAttri.Background;
          fHexAttri.Style := tmpNumberAttri.Style;
          fKeyAttri.Assign(tmpKeyAttri);
          fSymbolAttri.Assign(tmpSymbolAttri);
          fAsmAttri.Assign(tmpAsmAttri);
          fCommentAttri.Assign(tmpCommentAttri);
          fDirecAttri.Foreground := tmpCommentAttri.Foreground; // Delphi lacks directive support
          fDirecAttri.Background := tmpCommentAttri.Background;
          fDirecAttri.Style := tmpCommentAttri.Style;
          fIdentifierAttri.Assign(tmpIdentifierAttri);
          fSpaceAttri.Assign(tmpSpaceAttri);
        end;
        tmpStringAttri    .Free;
        tmpNumberAttri    .Free;
        tmpKeyAttri       .Free;
        tmpSymbolAttri    .Free;
        tmpAsmAttri       .Free;
        tmpCommentAttri   .Free;
        tmpIdentifierAttri.Free;
        tmpSpaceAttri     .Free;
      end;
    finally s.Free; end;
  end; { ReadDelphiSettings }
{$ENDIF}

begin
{$IFNDEF SYN_CLX}//js 07-04-2002 changed from SYN_KYLIX to SYN_CLX
  Result := ReadDelphiSettings(settingIndex);
{$ELSE}
  Result := False;
{$ENDIF}
end; { TSynPaxPascalSyn.UseUserSettings }

function TSynPaxPascalSyn.GetIdentChars: TSynIdentChars;
begin
  Result := TSynValidStringChars;
end;

function TSynPaxPascalSyn.GetSampleSource: string;                                    //pp 2001-08-13
begin
  Result := '{ Syntax highlighting }'#13#10 +
             'procedure TForm1.Button1Click(Sender: TObject);'#13#10 +
             'var'#13#10 +
             '  Number, I, X: Integer;'#13#10 +
             'begin'#13#10 +
             '  Number := 123456;'#13#10 +
             '  Caption := ''The Number is'' + #32 + IntToStr(Number);'#13#10 +
             '  for I := 0 to Number do'#13#10 +
             '  begin'#13#10 +
             '    Inc(X);'#13#10 +
             '    Dec(X);'#13#10 +
             '    X := X + 1.0;'#13#10 +
             '    X := X - $5E;'#13#10 +
             '  end;'#13#10 +
             '  {$R+}'#13#10 +
             '  asm'#13#10 +
             '    mov AX, 1234H'#13#10 +
             '    mov Number, AX'#13#10 +
             '  end;'#13#10 +
             '  {$R-}'#13#10 +
             'end;';
end; { GetSampleSource }


{$IFNDEF SYN_CPPB_1} class {$ENDIF}
function TSynPaxPascalSyn.GetLanguageName: string;
begin
  Result := SYNS_LangPascal;
end;

{$IFNDEF SYN_CPPB_1} class {$ENDIF}
function TSynPaxPascalSyn.GetCapabilities: TSynHighlighterCapabilities;
begin
  Result := inherited GetCapabilities + [hcUserSettings];
end;

{begin}                                                                         //mh 2000-10-08
function TSynPaxPascalSyn.IsFilterStored: boolean;
begin
  Result := fDefaultFilter <> SYNS_FilterPascal;
end;
{end}                                                                           //mh 2000-10-08


procedure TSynPaxPascalSyn.SetD4syntax(const Value: boolean);                         //pp 2001-08-14
begin
  if (csDesigning in ComponentState) and not (csLoading in ComponentState) then
  begin
    ShowMessage('The D4Syntax property has been deprecated from this version on.'#13 +
                'It has been replaced by the more sophisticated implementation via'#13 +
                'the DelphiVersion property. Please note that the D4syntax property'#13 +
                'is automatically synchronized with the DelphiVersion property.');

  end;
end;


procedure TSynPaxPascalSyn.SetDelphiVersion(const Value: TDelphiVersion);             //pp 2001-08-14
begin
  fDelphiVersion := Value;
  fD4Syntax := fDelphiVersion >= dvDelphi4;
  if (fDelphiVersion < dvDelphi3) and fPackageSource then
    fPackageSource := False;
end;


procedure TSynPaxPascalSyn.SetPackageSource(const Value: Boolean);                    //pp 2001-08-14
begin
  fPackageSource := Value;
  if fPackageSource and (fDelphiVersion < dvDelphi3) then
    fDelphiVersion := dvDelphi3;
end;


initialization
  PaxPascalKeywords := TStringList.Create;
  with PaxPascalKeywords do
  begin
    Add('and');
    Add('array');
    Add('begin');
    Add('break');
    Add('case');
    Add('class');
    Add('const');
    Add('constructor');
    Add('continue');
    Add('default');
    Add('delete');
    Add('destructor');
    Add('div');
    Add('do');
    Add('downto');
    Add('dynamic');
    Add('else');
    Add('end');
    Add('enum');
    Add('except');
    Add('exit');
    Add('halt');
    Add('finally');
    Add('for');
    Add('forward');
    Add('function');
    Add('goto');
    Add('if');
    Add('inherited');
    Add('label');
    Add('namespace');
    Add('new');
    Add('nil');
    Add('null');
    Add('not');
    Add('mod');
    Add('on');
    Add('of');
    Add('or');
    Add('overload');
    Add('override');
    Add('procedure');
    Add('program');
    Add('private');
    Add('public');
    Add('property');
    Add('properted');
    Add('raise');
    Add('read');
    Add('record');
    Add('reduced');
    Add('repeat');
    Add('set');
    Add('shl');
    Add('shr');
    Add('string');
    Add('then');
    Add('to');
    Add('try');
    Add('type');
    Add('var');
    Add('until');
    Add('uses');
    Add('virtual');
    Add('while');
    Add('with');
    Add('write');
    Add('xor');

    Add('in');
    Add('unit');
    Add('interface');
    Add('implementation');
    Add('initialization');
    Add('finalization');

    Add('print');
    Add('println');
    Add('virtual');
    Add('override');
  end;

  MakeIdentTable;
{$IFNDEF SYN_CPPB_1}
  RegisterPlaceableHighlighter(TSynPaxPascalSyn);
{$ENDIF}

finalization

  PaxPascalKeywords.Free;

end.

⌨️ 快捷键说明

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