wmsqlsyn.pas

来自「本人买的<<VC++项目开发实例>>源代码配套光盘.」· PAS 代码 · 共 1,397 行 · 第 1/3 页

PAS
1,397
字号
      if KeyComp('JOIN') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func49: TwmTokenKind;
begin
  if KeyComp('SCHEMA') then Result := wmKey else
    if KeyComp('ESCAPE') then Result := wmKey else
      if KeyComp('NOT') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func50: TwmTokenKind;
begin
  if KeyComp('AFTER') then Result := wmKey else
    if KeyComp('WHEN') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func51: TwmTokenKind;
begin
  if KeyComp('DELETE') then Result := wmKey else
    if KeyComp('FULL') then Result := wmKey else
      if KeyComp('BEFORE') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func52: TwmTokenKind;
begin
  if KeyComp('FROM') then Result := wmKey else
    if KeyComp('SOME') then Result := wmKey else
      if KeyComp('CREATE') then Result := wmKey else
        if KeyComp('NAMES') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func53: TwmTokenKind;
begin
  if KeyComp('DROP') then Result := wmKey else
    if KeyComp('WAIT') then Result := wmKey else
      if KeyComp('DATABASE') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func55: TwmTokenKind;
begin
  if KeyComp('SHARED') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func56: TwmTokenKind;
begin
  if KeyComp('DOMAIN') then Result := wmKey else
    if KeyComp('INDEX') then Result := wmKey else
      if KeyComp('LEVEL') then Result := wmKey else
        if KeyComp('ALTER') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func57: TwmTokenKind;
begin
  if KeyComp('WHILE') then Result := wmKey else
    if KeyComp('AUTO') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func58: TwmTokenKind;
begin
  if KeyComp('INTO') then Result := wmKey else
    if KeyComp('EXIT') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func59: TwmTokenKind;
begin
  if KeyComp('VIEW') then Result := wmKey else
    if KeyComp('NULL') then Result := wmKey else
      if KeyComp('WHERE') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func60: TwmTokenKind;
begin
  if KeyComp('ACTIVE') then Result := wmKey else
    if KeyComp('ORDER') then Result := wmKey else
      if KeyComp('BASE_NAME') then Result := wmKey else
        if KeyComp('GRANT') then Result := wmKey else
          if KeyComp('INNER') then Result := wmKey else
            if KeyComp('WITH') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func61: TwmTokenKind;
begin
  if KeyComp('HAVING') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func62: TwmTokenKind;
begin
  if KeyComp('RIGHT') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func63: TwmTokenKind;
begin
  if KeyComp('USER') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func64: TwmTokenKind;
begin
  if KeyComp('SELECT') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func66: TwmTokenKind;
begin
  if KeyComp('ONLY') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func67: TwmTokenKind;
begin
  if KeyComp('RETAIN') then Result := wmKey else
    if KeyComp('UPDATE') then Result := wmKey else
      if KeyComp('WORK') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func69: TwmTokenKind;
begin
  if KeyComp('DEFAULT') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func70: TwmTokenKind;
begin
  if KeyComp('FILTER') then Result := wmKey else
    if KeyComp('SHADOW') then Result := wmKey else
      if KeyComp('USING') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func73: TwmTokenKind;
begin
  if KeyComp('UNION') then Result := wmKey else
    if KeyComp('COUNT') then Result := wmKey else
      if KeyComp('COMMIT') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func74: TwmTokenKind;
begin
  if KeyComp('ROLLBACK') then Result := wmKey else
    if KeyComp('BETWEEN') then Result := wmKey else
      if KeyComp('FOREIGN') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func76: TwmTokenKind;
begin
  if KeyComp('ASCENDING') then Result := wmKey else
    if KeyComp('REVOKE') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func77: TwmTokenKind;
begin
  if KeyComp('GROUP') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func78: TwmTokenKind;
begin
  if KeyComp('COLUMN') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func79: TwmTokenKind;
begin
  if KeyComp('OUTER') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func83: TwmTokenKind;
begin
  if KeyComp('EXECUTE') then Result := wmKey else
    if KeyComp('INACTIVE') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func84: TwmTokenKind;
begin
  if KeyComp('DESCENDING') then Result := wmKey else
    if KeyComp('TRIGGER') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func85: TwmTokenKind;
begin
  if KeyComp('INSERT') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func87: TwmTokenKind;
begin
  if KeyComp('UNIQUE') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func91: TwmTokenKind;
begin
  if KeyComp('EXTRACT') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func94: TwmTokenKind;
begin
  if KeyComp('CURSOR') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func96: TwmTokenKind;
begin
  if KeyComp('EXISTS') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func97: TwmTokenKind;
begin
  if KeyComp('PARAMETER') then Result := wmKey else
    if KeyComp('COMPUTED') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func98: TwmTokenKind;
begin
  if KeyComp('DISTINCT') then Result := wmKey else
    if KeyComp('SUSPEND') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func99: TwmTokenKind;
begin
  if KeyComp('EXTERNAL') then Result := wmKey else
    if KeyComp('CURRENT') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func100: TwmTokenKind;
begin
  if KeyComp('PRIMARY') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func102: TwmTokenKind;
begin
  if KeyComp('FUNCTION') then Result := wmKey else
    if KeyComp('COMMITTED') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func103: TwmTokenKind;
begin
  if KeyComp('GENERATOR') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func105: TwmTokenKind;
begin
  if KeyComp('PROCEDURE') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func106: TwmTokenKind;
begin
  if KeyComp('CONTAINING') then Result := wmKey else
    if KeyComp('PROTECTED') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func111: TwmTokenKind;
begin
  if KeyComp('EXCEPTION') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func112: TwmTokenKind;
begin
  if KeyComp('SNAPSHOT') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func114: TwmTokenKind;
begin
  if KeyComp('ISOLATION') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func115: TwmTokenKind;
begin
  if KeyComp('PASSWORD') then Result := wmKey else
    if KeyComp('RETURNS') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func116: TwmTokenKind;
begin
  if KeyComp('CONDITIONAL') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func117: TwmTokenKind;
begin
  if KeyComp('POSITION') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func122: TwmTokenKind;
begin
  if KeyComp('PRIVILEGES') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func133: TwmTokenKind;
begin
  if KeyComp('CONSTRAINT') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func134: TwmTokenKind;
begin
  if KeyComp('TRANSACTION') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func137: TwmTokenKind;
begin
  if KeyComp('UNCOMMITTED') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.Func156: TwmTokenKind;
begin
  if KeyComp('ENTRY_POINT') then Result := wmKey else Result := wmIdentifier;
end;

function TwmSQLSyn.AltFunc: TwmTokenKind;
begin
  Result := wmIdentifier;
end;

function TwmSQLSyn.IdentKind(MayBe: PChar): TwmTokenKind;
var
  HashKey: Integer;
begin
  fToIdent := MayBe;
  HashKey := KeyHash(MayBe);
  if HashKey < 157 then Result := fIdentFuncTable[HashKey] else Result := wmIdentifier;
end;

procedure TwmSQLSyn.MakeMethodTables;
var
  I: Char;
begin
  for I := #0 to #255 do
    case I of
      '&': fProcTable[I] := AndSymbolProc;
      '\': fProcTable[I] := BackslashProc;
      #13: fProcTable[I] := CRProc;
      ':': fProcTable[I] := ColonProc;
      ',': fProcTable[I] := CommaProc;
      '#': fProcTable[I] := CommentProc;
      '=': fProcTable[I] := EqualProc;
      '>': fProcTable[I] := GreaterProc;
      'A'..'Z', 'a'..'z', '_': fProcTable[I] := IdentProc;
      #10: fProcTable[I] := LFProc;
      '<': fProcTable[I] := LowerProc;
      '-': fProcTable[I] := MinusProc;
      #0: fProcTable[I] := NullProc;
      '0'..'9', '.': fProcTable[I] := NumberProc;
      '|': fProcTable[I] := OrSymbolProc;
      '+': fProcTable[I] := PlusProc;
      '?': fProcTable[I] := QuestionProc;
      ')': fProcTable[I] := RoundCloseProc;
      '(': fProcTable[I] := RoundOpenProc;
      ';': fProcTable[I] := SemiColonProc;
      '/': fProcTable[I] := SlashProc;
      #1..#9, #11, #12, #14..#32: fProcTable[I] := SpaceProc;
      ']': fProcTable[I] := SquareCloseProc;
      '[': fProcTable[I] := SquareOpenProc;
      '*': fProcTable[I] := StarProc;
      #34: fProcTable[I] := StringInterpProc;
      #39: fProcTable[I] := StringLiteralProc;
      '^': fProcTable[I] := XOrSymbolProc;
    else fProcTable[I] := UnknownProc;
    end;
end;

function TwmSQLSyn.GetCapability: THighlighterCapability;
begin
  Result := inherited GetCapability + [hcUserSettings,hcExportable];
end;

constructor TwmSQLSyn.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  InitIdent;
  MakeMethodTables;
  fDefaultFilter := MWS_FilterSQL;
  fCommentAttri := TmwHighLightAttributes.Create(MWS_AttrComment);
  fCommentAttri.Style := [fsItalic];
  fIdentifierAttri := TmwHighLightAttributes.Create(MWS_AttrIdentifier);
  fKeyAttri := TmwHighLightAttributes.Create(MWS_AttrReservedWord);
  fKeyAttri.Style := [fsBold];
  fNumberAttri := TmwHighLightAttributes.Create(MWS_AttrNumber);
  fStringAttri := TmwHighLightAttributes.Create(MWS_AttrString);
  fSymbolAttri := TmwHighLightAttributes.Create(MWS_AttrSymbol);

  AddAttribute(fCommentAttri);
  AddAttribute(fIdentifierAttri);
  AddAttribute(fKeyAttri);
  AddAttribute(fNumberAttri);
  AddAttribute(fStringAttri);
  AddAttribute(fSymbolAttri);
  SetAttributesOnChange(DefHighlightChange);

  UseUserSettings(0);
end; { Create }

procedure TwmSQLSyn.SetLine(NewValue : string; LineNumber : Integer);
begin
  fLine := PChar(NewValue);
  Run := 0;
  fEol := False;
  fLineNumber := LineNumber;
  Next;
end;{ SetLine }

procedure TwmSQLSyn.AndSymbolProc;
begin
  inc(Run);
  fTokenID := wmSymbol;
end;

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

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

procedure TwmSQLSyn.ColonProc;
begin
  inc(Run);
  fTokenID := wmSymbol;
end;

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

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

procedure TwmSQLSyn.EqualProc;
begin
  inc(Run);
  fTokenID := wmSymbol;
end;

procedure TwmSQLSyn.GreaterProc;
begin
  inc(Run);
  fTokenID := wmSymbol;
end;

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

procedure TwmSQLSyn.LFProc;
begin
  fTokenID := wmSymbol;
  inc(Run);
end;

procedure TwmSQLSyn.LowerProc;
begin
  inc(Run);
  fTokenID := wmSymbol;
end;

procedure TwmSQLSyn.MinusProc;

⌨️ 快捷键说明

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