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

📄 synhighlighterprogress.pas

📁 SynEditStudio delphi 代码编辑器
💻 PAS
📖 第 1 页 / 共 4 页
字号:
  Run := p - fLine;
end;

procedure TSynProgressSyn.IncludeRangeProc;
var
  p: PChar;
begin
  fTokenID := tkInclude;
  p := PChar(@fLine[Run]);

  if p^ = #0 then
  begin
    NullProc;
    exit;
  end;

  while p^ <> #0 do
  begin
    case p^ of
      '}': begin
             dec(fIncludeLevel);
             if fIncludeLevel = 0 then
             begin
               fRange := rsNone;
               break;
             end
             else
               inc(p);
           end;
    else
      inc(p);
    end;
  end;
  Run := p - fLine;
end;

procedure TSynProgressSyn.PreprocessorRangeProc;
var
  p: PChar;
begin
  fTokenID := tkPreprocessor;
  p := PChar(@fLine[Run]);

  if p^ = #0 then
  begin
    NullProc;
    exit;
  end;

  while (p^ <> #0) and (fRange = rsPreprocessor) do
  begin
    case p^ of
      '{': inc(fPreprocessorLevel);
      '}': begin
             dec(fPreprocessorLevel);
             if fPreprocessorLevel = 0 then
               fRange := rsNone;
           end;
    end;
    inc(p);
  end;
  Run := p - fLine;
end;

procedure TSynProgressSyn.PreprocessorDefinitionRangeProc;
var
  p: PChar;
begin
  fTokenID := tkPreprocessor;
  p := PChar(@fLine[Run]);

  if Run = 0 then
    fRange := rsNone;

  if p^ = #0 then
  begin
    NullProc;
    exit;
  end;

  while p^ <> #0 do
  begin
    case p^ of
      '~': if (p+1)^ = #0 then
             fRange := rsPreprocessorDef;
    end;
    inc(p);
  end;
  Run := p - fLine;
end;

procedure TSynProgressSyn.BraceOpenProc;
var
  p: PChar;

  function LevelCount: Integer;
  begin
    if fTokenID = tkInclude then
      Result := fIncludeLevel
    else
      Result := fPreprocessorLevel;
  end;

begin
  p := PChar(@fLine[Run]);

  inc(p);
  case p^ of
    'A'..'Z', 'a'..'z', '_': fTokenID := tkInclude;
    '&'                    : fTokenID := tkPreprocessor;
  else
    fTokenID := tkUnknown;
  end;

  case fTokenID of
    tkInclude     : fIncludeLevel      := 1;
    tkPreprocessor: fPreprocessorLevel := 1;
  end;

  while LevelCount > 0 do
  begin
    case p^ of
      #0 : begin
             if fTokenID = tkInclude then
               fRange := rsInclude
             else
               fRange := rsPreprocessor;
             break;
           end;
      '}': case fTokenID of
             tkInclude     : dec(fIncludeLevel);
             tkPreprocessor: dec(fPreprocessorLevel);
           end;
      '{': case fTokenID of
             tkInclude     : inc(fIncludeLevel);
             tkPreprocessor: inc(fPreprocessorLevel);
           end;
    end;
    inc(p);
  end;
  Run := p - fLine;
end;

procedure TSynProgressSyn.Next;
begin
  fTokenPos := Run;
  case fRange of
    rsInclude        : IncludeRangeProc;
    rsPreprocessor   : PreprocessorRangeProc;
    rsPreprocessorDef: PreprocessorDefinitionRangeProc;
    rsComment        : CommentRangeProc;
  else
    fProcTable[fLine[Run]];
  end;
end;

function TSynProgressSyn.GetDefaultAttribute(Index: integer): TSynHighlighterAttributes;
begin
  Result := nil;
end;

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

function TSynProgressSyn.GetRange: Pointer;
var
  rng: TRangeInfo;
begin
  rng.Range := Ord(fRange);
  rng.Level := 0;
  case fRange of
    rsComment     : rng.Level := fCommentLevel;
    rsInclude     : rng.Level := fIncludeLevel;
    rsPreProcessor: rng.Level := fPreProcessorLevel;
  end;
  Result := rng.Ptr;
end;

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

function TSynProgressSyn.GetTokenID: TtkTokenKind;
begin
  Result := fTokenId;
end;

function TSynProgressSyn.GetTokenAttribute: TSynHighlighterAttributes;
begin
  case GetTokenID of
    tkComment: Result := fCommentAttri;
    tkEvent: Result := fEventAttri;
    tkIdentifier: Result := fIdentifierAttri;
    tkInclude: Result := fIncludeAttri;
    tkKey: Result := fKeyAttri;
    tkNonReserved: Result := fNonReservedKeyAttri;
    tkNumber: Result := fNumberAttri;
    tkPreprocessor: Result := fPreprocessorAttri;
    tkSpace: Result := fSpaceAttri;
    tkDataType: Result := fDataTypeAttri;
    tkString: Result := fStringAttri;
    tkSymbol: Result := fSymbolAttri;
    tkUnknown: Result := fSymbolAttri;
    else Result := nil;
  end;
end;

function TSynProgressSyn.GetTokenKind: integer;
begin
  Result := Ord(fTokenId);
end;

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

procedure TSynProgressSyn.ResetRange;
begin
  fRange := rsNone;
  fCommentLevel := 0;
  fIncludeLevel := 0;
  fPreprocessorLevel := 0;
end;

procedure TSynProgressSyn.SetRange(Value: Pointer);
var
  rng: TRangeInfo;
begin
  rng := TRangeInfo(Value);
  fRange := TRangeState(rng.Range);
  fCommentLevel := 0;
  fIncludeLevel := 0;
  fPreprocessorLevel := 0;
  case fRange of
    rsComment     : fCommentLevel := rng.Level;
    rsInclude     : fIncludeLevel := rng.Level;
    rsPreProcessor: fPreprocessorLevel := rng.Level;
  end;
end;

function TSynProgressSyn.GetIdentChars: TSynIdentChars;
begin
  Result := fIdentChars;
end;

function TSynProgressSyn.IsFilterStored: Boolean;
begin
  Result := fDefaultFilter <> SYNS_FilterProgress;
end;

class function TSynProgressSyn.GetLanguageName: string;
begin
  Result := SYNS_LangProgress;
end;

function TSynProgressSyn.GetSampleSource: String;
begin
  Result := '&scoped-define FirstChar 65'#13#10+
            '&scoped-define LastChar  90'#13#10+
            #13#10+
            'def var i as int no-undo.'#13#10+
            'def var s as char no-undo.'#13#10+
            #13#10+
            'function GetRandomChar returns char (input SomeValue as int):'#13#10+
            '  return chr(random({&FirstChar}, {&LastChar})).'#13#10+
            'end.'#13#10+
            #13#10+
            'procedure ClearString:'#13#10+
            '  def input-output param str as char no-undo.'#13#10+
            '  str = "".'#13#10+
            'end.'#13#10+
            #13#10+
            'run ClearString(input-output s).'#13#10+
            'do i = 1 to 100:'#13#10+
            '  s = s + GetRandomChar(17).'#13#10+
            'end.'#13#10+
            'display s.';
end;

initialization
  MakeIdentTable;
{$IFNDEF SYN_CPPB_1}
  RegisterPlaceableHighlighter(TSynProgressSyn);
{$ENDIF}
end.

⌨️ 快捷键说明

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