📄 synhighlighterpaxpascal.pas
字号:
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 + -