📄 synhighlightersql.pas
字号:
AddAttribute(fNumberAttri);
fPLSQLAttri := TSynHighlighterAttributes.Create(SYNS_AttrPLSQL);
fPLSQLAttri.Style := [fsBold];
AddAttribute(fPLSQLAttri);
fSpaceAttri := TSynHighlighterAttributes.Create(SYNS_AttrSpace);
AddAttribute(fSpaceAttri);
fSQLPlusAttri:=TSynHighlighterAttributes.Create(SYNS_AttrSQLPlus);
fSQLPlusAttri.Style := [fsBold];
AddAttribute(fSQLPlusAttri);
fStringAttri := TSynHighlighterAttributes.Create(SYNS_Attrstring);
AddAttribute(fStringAttri);
fSymbolAttri := TSynHighlighterAttributes.Create(SYNS_AttrSymbol);
AddAttribute(fSymbolAttri);
fTableNameAttri := TSynHighlighterAttributes.Create(SYNS_AttrTableName);
AddAttribute(fTableNameAttri);
fVariableAttri := TSynHighlighterAttributes.Create(SYNS_AttrVariable);
AddAttribute(fVariableAttri);
SetAttributesOnChange(DefHighlightChange);
MakeMethodTables;
fDefaultFilter := SYNS_FilterSQL;
fRange := rsUnknown;
fDialect := sqlStandard;
InitializeKeywordLists;
end;
destructor TSynSQLSyn.Destroy;
begin
fKeywords.Free;
fTableNames.Free;
inherited Destroy;
end;
procedure TSynSQLSyn.Assign(Source: TPersistent);
begin
inherited Assign(Source);
if (Source is TSynSQLSyn) then
SQLDialect := TSynSQLSyn(Source).SQLDialect;
end;
procedure TSynSQLSyn.SetLine(NewValue: string; LineNumber: Integer);
begin
fLine := PChar(NewValue);
Run := 0;
fLineNumber := LineNumber;
Next;
end;
procedure TSynSQLSyn.AndSymbolProc;
begin
fTokenID := tkSymbol;
Inc(Run);
if fLine[Run] in ['=', '&'] then Inc(Run);
end;
procedure TSynSQLSyn.AsciiCharProc;
begin
// Oracle SQL allows strings to go over multiple lines
if fLine[Run] = #0 then
NullProc
else begin
fTokenID := tkString;
// else it's end of multiline string
if SQLDialect <> sqlMySql then begin
if (Run > 0) or (fRange <> rsString) or (fLine[Run] <> #39) then begin
fRange := rsString;
repeat
Inc(Run);
until fLine[Run] in [#0, #10, #13, #39];
end;
if fLine[Run] = #39 then begin
Inc(Run);
fRange := rsUnknown;
end;
end
else begin
if (Run > 0) or (fRange <> rsString) or ((fLine[Run] <> #39) and (fLine[Run-1] <> '\')) then begin
fRange := rsString;
repeat
if (fLine[Run] <> '\') and (fLine[Run+1] = #39) then begin
Inc(Run);
break;
end;
Inc(Run);
until fLine[Run] in [#0, #10, #13];
end;
if (fLine[Run] = #39) and not(fLine[Run-1] = '\') then begin
Inc(Run);
fRange := rsUnknown;
end;
end;
end;
end;
procedure TSynSQLSyn.CRProc;
begin
fTokenID := tkSpace;
Inc(Run);
if fLine[Run] = #10 then Inc(Run);
end;
procedure TSynSQLSyn.EqualProc;
begin
fTokenID := tkSymbol;
Inc(Run);
if fLine[Run] in ['=', '>'] then Inc(Run);
end;
procedure TSynSQLSyn.GreaterProc;
begin
fTokenID := tkSymbol;
Inc(Run);
if fLine[Run] in ['=', '>'] then Inc(Run);
end;
procedure TSynSQLSyn.IdentProc;
begin
fTokenID := IdentKind((fLine + Run));
inc(Run, fStringLen);
if fTokenID = tkComment then begin
while not (fLine[Run] in [#0, #10, #13]) do
Inc(Run);
end else
while fIdentifiersPtr[fLine[Run]] do inc(Run);
end;
procedure TSynSQLSyn.LFProc;
begin
fTokenID := tkSpace;
inc(Run);
end;
procedure TSynSQLSyn.LowerProc;
begin
fTokenID := tkSymbol;
Inc(Run);
case fLine[Run] of
'=': Inc(Run);
'<': begin
Inc(Run);
if fLine[Run] = '=' then Inc(Run);
end;
end;
end;
procedure TSynSQLSyn.MinusProc;
begin
Inc(Run);
if fLine[Run] = '-' then begin
fTokenID := tkComment;
repeat
Inc(Run);
until fLine[Run] in [#0, #10, #13];
end else
fTokenID := tkSymbol;
end;
procedure TSynSQLSyn.HashProc;
begin
if SQLDialect = sqlMySql then
begin
fTokenID := tkComment;
repeat
Inc(Run);
until fLine[Run] in [#0, #10, #13];
end
else
begin
Inc(Run);
fTokenID := tkUnknown;
end;
end;
procedure TSynSQLSyn.NullProc;
begin
fTokenID := tkNull;
end;
procedure TSynSQLSyn.NumberProc;
begin
inc(Run);
fTokenID := tkNumber;
while FLine[Run] in ['0'..'9', '.', '-'] do begin
case FLine[Run] of
'.':
if FLine[Run + 1] = '.' then break;
end;
inc(Run);
end;
end;
procedure TSynSQLSyn.OrSymbolProc;
begin
fTokenID := tkSymbol;
Inc(Run);
if fLine[Run] in ['=', '|'] then Inc(Run);
end;
procedure TSynSQLSyn.PlusProc;
begin
fTokenID := tkSymbol;
Inc(Run);
if fLine[Run] in ['=', '+'] then Inc(Run);
end;
procedure TSynSQLSyn.SlashProc;
begin
Inc(Run);
case fLine[Run] of
'*':
begin
if (SQLDialect = sqlMySql) and (fLine[Run + 1] = '!') then
begin
fRange := rsConditionalComment;
fTokenID := tkConditionalComment;
end
else
begin
fRange := rsComment;
fTokenID := tkComment;
end;
repeat
Inc(Run);
if (fLine[Run] = '*') and (fLine[Run + 1] = '/') then begin
fRange := rsUnknown;
Inc(Run, 2);
break;
end;
until fLine[Run] in [#0, #10, #13];
end;
'=':
begin
Inc(Run);
fTokenID := tkSymbol;
end;
else
fTokenID := tkSymbol;
end;
end;
procedure TSynSQLSyn.SpaceProc;
begin
fTokenID := tkSpace;
repeat
Inc(Run);
until (fLine[Run] > #32) or (fLine[Run] in [#0, #10, #13]);
end;
procedure TSynSQLSyn.QuoteProc;
begin
fTokenID := tkDelimitedIdentifier;
Inc(Run);
while not (fLine[Run] in [#0, #10, #13]) do
begin
if fLine[Run] = #34 then
begin
Inc(Run);
if fLine[Run] <> #34 then
Break;
end;
Inc(Run);
end;
end;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -