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

📄 psvsql.pas

📁 PIC 单片机 PAS SOURCE CODE SAMPLES
💻 PAS
📖 第 1 页 / 共 3 页
字号:
  fLineNumber := LineNumber;
  Next;
end;{ SetLine }

procedure TpsvSQLRTF.AndSymbolProc;
begin
  inc(Run);
  fTokenID := tkSymbol;
end;

procedure TpsvSQLRTF.BackslashProc;
begin
  fTokenID := tkSymbol;                {reference}
  inc(Run);
end;

procedure TpsvSQLRTF.CRProc;
begin
  fTokenID := tkSymbol;
  Case FLine[Run + 1] of
    #10: inc(Run, 2);
  else inc(Run);
  end;
end;

procedure TpsvSQLRTF.ColonProc;
begin
  inc(Run);
  fTokenID := tkSymbol;
end;

procedure TpsvSQLRTF.CommaProc;
begin
  inc(Run);
  fTokenID := tkSymbol;                {comma}
end;

procedure TpsvSQLRTF.CommentProc;
begin
  fTokenID := tkComment;
  repeat
    case FLine[Run] of
      #0, #10, #13: break;
    end;
    inc(Run);
  until FLine[Run] = #0;
end;

procedure TpsvSQLRTF.EqualProc;
begin
  inc(Run);
  fTokenID := tkSymbol;
end;

procedure TpsvSQLRTF.GreaterProc;
begin
  inc(Run);
  fTokenID := tkSymbol;
end;

procedure TpsvSQLRTF.IdentProc;
begin
  {regular identifier}
  fTokenID := IdentKind((fLine + Run));
  inc(Run, fStringLen);
  while Identifiers[fLine[Run]] do inc(Run);
end;

procedure TpsvSQLRTF.LFProc;
begin
  fTokenID := tkSymbol;
  inc(Run);
end;

procedure TpsvSQLRTF.LowerProc;
begin
  inc(Run);
  fTokenID := tkSymbol;
end;

procedure TpsvSQLRTF.MinusProc;
begin
  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;
    else
      begin
        inc(Run);
        fTokenID := tkSymbol;
      end;
  end;
end;

procedure TpsvSQLRTF.NullProc;
begin
  fTokenID := tkNull;
end;

procedure TpsvSQLRTF.NumberProc;
begin
{begin}                                                                         //mh 2000-01-07
  inc(Run);
  if not (fLine[Run] in ['0'..'9']) then begin
    fTokenID := tkSymbol;
    exit;
  end;
{end}                                                                           //mh 2000-01-07
  fTokenID := tkNumber;
  while FLine[Run] in
      ['0'..'9', '-', '_', '.', 'A'..'F', 'a'..'f', 'x', 'X'] do
  begin
    case FLine[Run] of
      '.':
        if FLine[Run + 1] = '.' then break;
      '-':                             {check for e notation}
        if not ((FLine[Run + 1] = 'e') or (FLine[Run + 1] = 'E')) then break;
    end;
    inc(Run);
  end;
end;

procedure TpsvSQLRTF.OrSymbolProc;
begin
  inc(Run);
  fTokenID := tkSymbol;
end;

procedure TpsvSQLRTF.PlusProc;
begin
  inc(Run);
  fTokenID := tkSymbol;
end;

procedure TpsvSQLRTF.QuestionProc;
begin
  fTokenID := tkSymbol;                {conditional op}
  inc(Run);
end;

procedure TpsvSQLRTF.RoundCloseProc;
begin
  inc(Run);
  fTokenID := tkSymbol;
end;

procedure TpsvSQLRTF.RoundOpenProc;
begin
  inc(Run);
  FTokenID := tkSymbol;
end;

procedure TpsvSQLRTF.SemiColonProc;
begin
  inc(Run);
  fTokenID := tkSymbol;                {semicolon}
end;

procedure TpsvSQLRTF.SlashProc;
begin
  case FLine[Run + 1] of
    '/':                               {c++ style comments}
      begin
        inc(Run, 2);
        fTokenID := tkComment;
        while FLine[Run] <> #0 do
        begin
          case FLine[Run] of
            #10, #13: break;
          end;
          inc(Run);
        end;
      end;
    '*':                               {c style comments}
      begin
        fTokenID := tkComment;
        fRange := rsAnsiC;
        inc(Run);
        while fLine[Run] <> #0 do
          case fLine[Run] of
            '*':
              if fLine[Run + 1] = '/' then
              begin
                inc(Run, 2);
                fRange := rsUnKnown;
                break;
              end else inc(Run);
            #10: break;
            #13: break;
          else inc(Run);
          end;
      end;
  else                                 {division}
    begin
      inc(Run);
      fTokenID := tkSymbol;
    end;
  end;
end;

procedure TpsvSQLRTF.SpaceProc;
begin
  inc(Run);
  fTokenID := tkSymbol;
  while FLine[Run] in [#1..#9, #11, #12, #14..#32] do inc(Run);
end;

procedure TpsvSQLRTF.SquareCloseProc;
begin
  inc(Run);
  fTokenID := tkSymbol;
end;

procedure TpsvSQLRTF.SquareOpenProc;
begin
  inc(Run);
  fTokenID := tkSymbol;
end;

procedure TpsvSQLRTF.StarProc;
begin
  inc(Run);
  fTokenID := tkSymbol;
end;

procedure TpsvSQLRTF.StringInterpProc;
begin
  fTokenID := tkString;
  if (FLine[Run + 1] = #34) and (FLine[Run + 2] = #34) then inc(Run, 2);
  repeat
    case FLine[Run] of
      #0, #10, #13: break;
      #92:
        { backslash quote not the ending one }
        if FLine[Run + 1] = #34 then inc(Run);
    end;
    inc(Run);
  until FLine[Run] = #34;
  if FLine[Run] <> #0 then inc(Run);
end;

procedure TpsvSQLRTF.StringLiteralProc;
begin
  fTokenID := tkString;
  repeat
    case FLine[Run] of
      #0, #10, #13: break;
    end;
    inc(Run);
  until FLine[Run] = #39;
  if FLine[Run] <> #0 then inc(Run);
end;

procedure TpsvSQLRTF.XOrSymbolProc;
begin
  inc(Run);
  fTokenID := tkSymbol;
end;

procedure TpsvSQLRTF.UnknownProc;
begin
  inc(Run);
end;

procedure TpsvSQLRTF.AnsiCProc;
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
      '*':
        if fLine[Run + 1] = '/' then
        begin
          inc(Run, 2);
          fRange := rsUnKnown;
          break;
        end
        else inc(Run);
      #10: break;
      #13: break;
    else inc(Run);
    end;
end;

procedure TpsvSQLRTF.Next;
begin
  fTokenPos := Run;
  Case fRange of
    rsAnsiC: AnsiCProc;
    else
      fRange := rsUnknown;
      fProcTable[fLine[Run]];
  end;
end;

{begin}                                                                         //mh 2000-01-17
function TpsvSQLRTF.GetEol: Boolean;
begin
  Result := fTokenId = tkNull;
end;

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

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

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

function TpsvSQLRTF.GetTokenAttribute: integer;
begin
  case fTokenID of
    tkComment: Result := 1;
    tkIdentifier: Result := 2;
    tkKey: Result := 3;
    tkNumber: Result := 4;
    tkSymbol: Result := 5;
    tkString: Result := 6;
    tkUnknown: Result := 7;
    else Result := 8;
  end;
end;

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

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

procedure TpsvSQLRTF.ReSetRange;
begin
  fRange:= rsUnknown;
end;

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

procedure TpsvSQLRTF.PrepareToken(var AToken : string);
var St : string;
begin
  St := AToken;
  St := StringReplace(St,'\','\\',[rfReplaceAll]);
  St := StringReplace(St,'{','\{',[rfReplaceAll]);
  St := StringReplace(St,'}','\}',[rfReplaceAll]);
  AToken := St;
end;

function TpsvSQLRTF.PrepareOutput(Attr: integer; AToken : string): string;
begin
  case Attr of 
    1 : Result  := '\cf1 \i '+ AToken +'\i0 ';
    3 : Result  := '\cf3 \b '+ AToken + '\b0 ';
  else
   Result := Format('\cf%d %s',[Attr,AToken]);
  end;
end;

procedure TpsvSQLRTF.SetupDefaultColors;
begin
  CreateColorTable([clNavy, clBlack, clBlack, clBlack, clBlack, clBlue, clBlack]);
end;

initialization
  MakeIdentTable;
end.

⌨️ 快捷键说明

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