📄 synhighlighterunixshellscript.pas
字号:
procedure TSynUNIXShellScriptSyn.PasStyleProc;
begin
fTokenID := tkComment;
case FLine[Run] of
#0:
begin
NullProc;
exit;
end;
#10:
begin
LFProc;
exit;
end;
#13:
begin
CRProc;
exit;
end;
end;
while FLine[Run] <> #0 do
case FLine[Run] of
'}':
begin
fRange := rsUnKnown;
inc(Run);
break;
end;
#10: break;
#13: break;
else inc(Run);
end;
end;
procedure TSynUNIXShellScriptSyn.CStyleProc;
begin
case fLine[Run] of
#0: NullProc;
#10: LFProc;
#13: CRProc;
else
fTokenID := tkComment;
repeat
if (fLine[Run] = '*') and (fLine[Run + 1] = '/') then
begin
fRange := rsUnKnown;
Inc(Run, 2);
break;
end;
Inc(Run);
until fLine[Run] in [#0, #10, #13];
end;
end;
procedure TSynUNIXShellScriptSyn.DollarProc;
const
IdentChars = ['0'..'9', 'A'..'Z', 'a'..'z', '_'];
var
cc: Char;
begin
inc(Run);
fTokenID := tkVariable;
if FLine[Run] = #0 then Exit;
cc := FLine[Run];
inc(Run);
if (cc = '{') then begin
// ${var}
while FLine[Run] in IdentChars do begin
case FLine[Run] of
#0, #10, #13: Break;
end;
inc(Run);
end;
if FLine[Run] = '}' then Inc(Run);
end else
// $var
while FLine[Run] in IdentChars do
inc(Run);
end;
procedure TSynUNIXShellScriptSyn.DotProc;
function TestDot: boolean;
var
i: integer;
begin
result := false;
i := run;
inc(i);
while (FLine[i] in ['a'..'z', 'A'..'Z']) do
inc(i);
if i > (run + 1) then
result := true;
if result then
run := i;
end;
begin
// Don't highlight filenames like filename.zip
if TestDot then
fTokenID := tkIdentifier
else begin
inc(Run);
fTokenID := tkSymbol;
end;
end;
procedure TSynUNIXShellScriptSyn.BraceOpenProc;
begin
inc(Run);
fTokenID := tkSymbol;
end;
procedure TSynUNIXShellScriptSyn.PointCommaProc;
begin
inc(Run);
fTokenID := tkSymbol;
end;
procedure TSynUNIXShellScriptSyn.CRProc;
begin
fTokenID := tkSpace;
case FLine[Run + 1] of
#10: inc(Run, 2);
else inc(Run);
end;
end;
procedure TSynUNIXShellScriptSyn.IdentProc;
begin
while Identifiers[fLine[Run]] do inc(Run);
if IsKeyWord(GetToken) then begin
fTokenId := tkKey;
Exit;
end
else fTokenId := tkIdentifier;
if IsSecondKeyWord(GetToken)
then fTokenId := tkSecondKey
else fTokenId := tkIdentifier;
end;
procedure TSynUNIXShellScriptSyn.LFProc;
begin
fTokenID := tkSpace;
inc(Run);
end;
procedure TSynUNIXShellScriptSyn.NullProc;
begin
fTokenID := tkNull;
end;
procedure TSynUNIXShellScriptSyn.NumberProc;
begin
inc(Run);
fTokenID := tkNumber;
while FLine[Run] in ['0'..'9', '.', 'e', 'E'] do
begin
case FLine[Run] of
'.':
if FLine[Run + 1] = '.' then break;
end;
inc(Run);
end;
end;
procedure TSynUNIXShellScriptSyn.RoundOpenProc;
begin
inc(Run);
fTokenId := tkSymbol;
end;
procedure TSynUNIXShellScriptSyn.SlashProc;
begin
if FLine[Run] = '#' then begin
// Perl Styled Comment
inc(Run);
fTokenID := tkComment;
while FLine[Run] <> #0 do
begin
case FLine[Run] of
#10, #13: break;
end;
inc(Run);
end;
end else begin
// // C Styled Comment
// case FLine[Run + 1] of
// '/':
// begin
// inc(Run, 2);
// fTokenID := tkComment;
// while FLine[Run] <> #0 do
// begin
// case FLine[Run] of
// #10, #13: break;
// end;
// inc(Run);
// end;
// end;
// '*':
// begin
// fTokenID := tkComment;
// fRange := rsCStyle;
// inc(Run);
// while fLine[Run] <> #0 do
// case fLine[Run] of
// '*':
// if fLine[Run + 1] = '/' then begin
// fRange := rsUnKnown;
// inc(Run, 2);
// break;
// end else
// inc(Run);
// #10: break;
// #13: break;
// else
// inc(Run);
// end;
// end;
// else begin
inc(Run);
fTokenID := tkSymbol;
// end;
// end;
end;
end;
procedure TSynUNIXShellScriptSyn.SpaceProc;
begin
inc(Run);
fTokenID := tkSpace;
while FLine[Run] in [#1..#9, #11, #12, #14..#32] do inc(Run);
end;
procedure TSynUNIXShellScriptSyn.StringProc;
var
QuoteChar: Char;
begin
// Single and Double Quotes.
fTokenID := tkString;
QuoteChar := FLine[Run]; // either " or '
if (FLine[Run + 1] = QuoteChar) and (FLine[Run + 2] = QuoteChar)
then inc(Run, 2);
repeat
case FLine[Run] of
#0, #10, #13: break;
end;
inc(Run);
until FLine[Run] = QuoteChar;
if FLine[Run] <> #0 then inc(Run);
end;
procedure TSynUNIXShellScriptSyn.UnknownProc;
begin
inc(Run);
fTokenID := tkUnKnown;
end;
procedure TSynUNIXShellScriptSyn.Next;
begin
fTokenPos := Run;
case fRange of
rsAnsi: AnsiProc;
rsPasStyle: PasStyleProc;
rsCStyle: CStyleProc;
else
fProcTable[fLine[Run]];
end;
end;
function TSynUNIXShellScriptSyn.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;
else
Result := nil;
end;
end;
function TSynUNIXShellScriptSyn.GetEol: Boolean;
begin
Result := False;
if fTokenId = tkNull then Result := True;
end;
function TSynUNIXShellScriptSyn.GetRange: Pointer;
begin
Result := Pointer(fRange);
end;
function TSynUNIXShellScriptSyn.GetToken: string;
var
Len: LongInt;
begin
Len := Run - fTokenPos;
SetString(Result, (FLine + fTokenPos), Len);
end;
function TSynUNIXShellScriptSyn.GetTokenID: TtkTokenKind;
begin
Result := fTokenId;
end;
function TSynUNIXShellScriptSyn.GetTokenAttribute: TSynHighlighterAttributes;
begin
case fTokenID of
tkComment: Result := fCommentAttri;
tkIdentifier: Result := fIdentifierAttri;
tkKey: Result := fKeyAttri;
tkSecondKey: Result := fSecondKeyAttri;
tkNumber: Result := fNumberAttri;
tkSpace: Result := fSpaceAttri;
tkString: Result := fStringAttri;
tkSymbol: Result := fSymbolAttri;
tkVariable: Result := fVarAttri;
tkUnknown: Result := fSymbolAttri;
else
Result := nil;
end;
end;
function TSynUNIXShellScriptSyn.GetTokenKind: integer;
begin
Result := Ord(fTokenId);
end;
function TSynUNIXShellScriptSyn.GetTokenPos: Integer;
begin
Result := fTokenPos;
end;
procedure TSynUNIXShellScriptSyn.ResetRange;
begin
fRange := rsUnknown;
end;
procedure TSynUNIXShellScriptSyn.SetRange(Value: Pointer);
begin
fRange := TRangeState(Value);
end;
procedure TSynUNIXShellScriptSyn.SetSecondKeys(const Value: TStrings);
var
i: Integer;
begin
if Value <> nil then
begin
Value.BeginUpdate;
for i := 0 to Value.Count - 1 do
Value[i] := UpperCase(Value[i]);
Value.EndUpdate;
end;
fSecondKeys.Assign(Value);
DefHighLightChange(nil);
end;
class function TSynUNIXShellScriptSyn.GetLanguageName: string;
begin
Result := SYNS_LangNameUNIXShellScript;
end;
initialization
MakeIdentTable;
{$IFNDEF SYN_CPPB_1}
RegisterPlaceableHighlighter(TSynUNIXShellScriptSyn);
{$ENDIF}
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -