mirror of
https://github.com/HeidiSQL/HeidiSQL.git
synced 2025-08-06 18:24:26 +08:00
204 lines
7.4 KiB
ObjectPascal
204 lines
7.4 KiB
ObjectPascal
unit lazaruscompat;
|
|
|
|
{$mode Delphi}
|
|
|
|
interface
|
|
|
|
uses
|
|
Classes, SysUtils, SynEdit, SynEditKeyCmds, SynEditHighlighter;
|
|
|
|
type
|
|
|
|
TSynEditHelper = class helper for TSynEdit
|
|
public
|
|
function GetTextLen: Integer;
|
|
function ConvertCodeStringToCommand(AString: string): TSynEditorCommand;
|
|
function IndexToEditorCommand(const AIndex: Integer): Integer;
|
|
end;
|
|
TSynHighlighterAttributesHelper = class helper for TSynHighlighterAttributes
|
|
public
|
|
procedure AssignColorAndStyle(Source: TSynHighlighterAttributes);
|
|
end;
|
|
|
|
const
|
|
{$IFDEF SYN_CodeFolding}
|
|
EditorCommandStrs: array[0..109] of TIdentMapEntry = (
|
|
{$ELSE}
|
|
EditorCommandStrs: array[0..97] of TIdentMapEntry = (
|
|
{$ENDIF}
|
|
(Value: ecNone; Name: 'ecNone'),
|
|
(Value: ecLeft; Name: 'ecLeft'),
|
|
(Value: ecRight; Name: 'ecRight'),
|
|
(Value: ecUp; Name: 'ecUp'),
|
|
(Value: ecDown; Name: 'ecDown'),
|
|
(Value: ecWordLeft; Name: 'ecWordLeft'),
|
|
(Value: ecWordRight; Name: 'ecWordRight'),
|
|
(Value: ecLineStart; Name: 'ecLineStart'),
|
|
(Value: ecLineEnd; Name: 'ecLineEnd'),
|
|
(Value: ecPageUp; Name: 'ecPageUp'),
|
|
(Value: ecPageDown; Name: 'ecPageDown'),
|
|
(Value: ecPageLeft; Name: 'ecPageLeft'),
|
|
(Value: ecPageRight; Name: 'ecPageRight'),
|
|
(Value: ecPageTop; Name: 'ecPageTop'),
|
|
(Value: ecPageBottom; Name: 'ecPageBottom'),
|
|
(Value: ecEditorTop; Name: 'ecEditorTop'),
|
|
(Value: ecEditorBottom; Name: 'ecEditorBottom'),
|
|
(Value: ecGotoXY; Name: 'ecGotoXY'),
|
|
(Value: ecSelLeft; Name: 'ecSelLeft'),
|
|
(Value: ecSelRight; Name: 'ecSelRight'),
|
|
(Value: ecSelUp; Name: 'ecSelUp'),
|
|
(Value: ecSelDown; Name: 'ecSelDown'),
|
|
(Value: ecSelWordLeft; Name: 'ecSelWordLeft'),
|
|
(Value: ecSelWordRight; Name: 'ecSelWordRight'),
|
|
(Value: ecSelLineStart; Name: 'ecSelLineStart'),
|
|
(Value: ecSelLineEnd; Name: 'ecSelLineEnd'),
|
|
(Value: ecSelPageUp; Name: 'ecSelPageUp'),
|
|
(Value: ecSelPageDown; Name: 'ecSelPageDown'),
|
|
(Value: ecSelPageLeft; Name: 'ecSelPageLeft'),
|
|
(Value: ecSelPageRight; Name: 'ecSelPageRight'),
|
|
(Value: ecSelPageTop; Name: 'ecSelPageTop'),
|
|
(Value: ecSelPageBottom; Name: 'ecSelPageBottom'),
|
|
(Value: ecSelEditorTop; Name: 'ecSelEditorTop'),
|
|
(Value: ecSelEditorBottom; Name: 'ecSelEditorBottom'),
|
|
(Value: ecSelGotoXY; Name: 'ecSelGotoXY'),
|
|
//(Value: ecSelWord; Name: 'ecSelWord'),
|
|
(Value: ecSelectAll; Name: 'ecSelectAll'),
|
|
(Value: ecDeleteLastChar; Name: 'ecDeleteLastChar'),
|
|
(Value: ecDeleteChar; Name: 'ecDeleteChar'),
|
|
(Value: ecDeleteWord; Name: 'ecDeleteWord'),
|
|
(Value: ecDeleteLastWord; Name: 'ecDeleteLastWord'),
|
|
(Value: ecDeleteBOL; Name: 'ecDeleteBOL'),
|
|
(Value: ecDeleteEOL; Name: 'ecDeleteEOL'),
|
|
(Value: ecDeleteLine; Name: 'ecDeleteLine'),
|
|
(Value: ecClearAll; Name: 'ecClearAll'),
|
|
(Value: ecLineBreak; Name: 'ecLineBreak'),
|
|
(Value: ecInsertLine; Name: 'ecInsertLine'),
|
|
(Value: ecChar; Name: 'ecChar'),
|
|
(Value: ecImeStr; Name: 'ecImeStr'),
|
|
(Value: ecUndo; Name: 'ecUndo'),
|
|
(Value: ecRedo; Name: 'ecRedo'),
|
|
(Value: ecCut; Name: 'ecCut'),
|
|
(Value: ecCopy; Name: 'ecCopy'),
|
|
(Value: ecPaste; Name: 'ecPaste'),
|
|
(Value: ecScrollUp; Name: 'ecScrollUp'),
|
|
(Value: ecScrollDown; Name: 'ecScrollDown'),
|
|
(Value: ecScrollLeft; Name: 'ecScrollLeft'),
|
|
(Value: ecScrollRight; Name: 'ecScrollRight'),
|
|
(Value: ecInsertMode; Name: 'ecInsertMode'),
|
|
(Value: ecOverwriteMode; Name: 'ecOverwriteMode'),
|
|
(Value: ecToggleMode; Name: 'ecToggleMode'),
|
|
(Value: ecBlockIndent; Name: 'ecBlockIndent'),
|
|
(Value: ecBlockUnindent; Name: 'ecBlockUnindent'),
|
|
(Value: ecTab; Name: 'ecTab'),
|
|
(Value: ecShiftTab; Name: 'ecShiftTab'),
|
|
(Value: ecMatchBracket; Name: 'ecMatchBracket'),
|
|
///(Value: ecCommentBlock; Name: 'ecCommentBlock'),
|
|
(Value: ecNormalSelect; Name: 'ecNormalSelect'),
|
|
(Value: ecColumnSelect; Name: 'ecColumnSelect'),
|
|
(Value: ecLineSelect; Name: 'ecLineSelect'),
|
|
(Value: ecAutoCompletion; Name: 'ecAutoCompletion'),
|
|
(Value: ecUserFirst; Name: 'ecUserFirst'),
|
|
//(Value: ecContextHelp; Name: 'ecContextHelp'),
|
|
(Value: ecGotoMarker0; Name: 'ecGotoMarker0'),
|
|
(Value: ecGotoMarker1; Name: 'ecGotoMarker1'),
|
|
(Value: ecGotoMarker2; Name: 'ecGotoMarker2'),
|
|
(Value: ecGotoMarker3; Name: 'ecGotoMarker3'),
|
|
(Value: ecGotoMarker4; Name: 'ecGotoMarker4'),
|
|
(Value: ecGotoMarker5; Name: 'ecGotoMarker5'),
|
|
(Value: ecGotoMarker6; Name: 'ecGotoMarker6'),
|
|
(Value: ecGotoMarker7; Name: 'ecGotoMarker7'),
|
|
(Value: ecGotoMarker8; Name: 'ecGotoMarker8'),
|
|
(Value: ecGotoMarker9; Name: 'ecGotoMarker9'),
|
|
(Value: ecSetMarker0; Name: 'ecSetMarker0'),
|
|
(Value: ecSetMarker1; Name: 'ecSetMarker1'),
|
|
(Value: ecSetMarker2; Name: 'ecSetMarker2'),
|
|
(Value: ecSetMarker3; Name: 'ecSetMarker3'),
|
|
(Value: ecSetMarker4; Name: 'ecSetMarker4'),
|
|
(Value: ecSetMarker5; Name: 'ecSetMarker5'),
|
|
(Value: ecSetMarker6; Name: 'ecSetMarker6'),
|
|
(Value: ecSetMarker7; Name: 'ecSetMarker7'),
|
|
(Value: ecSetMarker8; Name: 'ecSetMarker8'),
|
|
(Value: ecSetMarker9; Name: 'ecSetMarker9'),
|
|
(Value: ecUpperCase; Name: 'ecUpperCase'),
|
|
(Value: ecLowerCase; Name: 'ecLowerCase'),
|
|
(Value: ecToggleCase; Name: 'ecToggleCase'),
|
|
(Value: ecTitleCase; Name: 'ecTitleCase'),
|
|
(Value: ecUpperCaseBlock; Name: 'ecUpperCaseBlock'),
|
|
(Value: ecLowerCaseBlock; Name: 'ecLowerCaseBlock'),
|
|
(Value: ecToggleCaseBlock; Name: 'ecToggleCaseBlock'),
|
|
//(Value: ecTitleCaseBlock; Name: 'ecTitleCaseBlock'),
|
|
{$IFDEF SYN_CodeFolding}
|
|
(Value: ecString; Name:'ecString'),
|
|
(Value: ecFoldAll; Name:'ecFoldAll'),
|
|
(Value: ecUnfoldAll; Name:'ecUnfoldAll'),
|
|
(Value: ecFoldNearest; Name:'ecFoldNearest'),
|
|
(Value: ecUnfoldNearest; Name:'ecUnfoldNearest'),
|
|
(Value: ecFoldLevel1; Name:'ecFoldLevel1'),
|
|
(Value: ecFoldLevel2; Name:'ecFoldLevel2'),
|
|
(Value: ecFoldLevel3; Name:'ecFoldLevel3'),
|
|
(Value: ecUnfoldLevel1; Name:'ecUnfoldLevel1'),
|
|
(Value: ecUnfoldLevel2; Name:'ecUnfoldLevel2'),
|
|
(Value: ecUnfoldLevel3; Name:'ecUnfoldLevel3'),
|
|
(Value: ecFoldRegions; Name:'ecFoldRanges'),
|
|
(Value: ecUnfoldRegions; Name:'ecUnfoldRanges'));
|
|
{$ELSE}
|
|
(Value: ecString; Name:'ecString'));
|
|
{$ENDIF}
|
|
|
|
|
|
implementation
|
|
|
|
|
|
function TSynEditHelper.GetTextLen: Integer;
|
|
begin
|
|
Result := Self.Text.Length;
|
|
end;
|
|
|
|
function TSynEditHelper.ConvertCodeStringToCommand(AString: string): TSynEditorCommand;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
Result := ecNone;
|
|
|
|
AString := Uppercase(AString);
|
|
for i := Low(EditorCommandStrs) to High(EditorCommandStrs) do
|
|
if Uppercase(EditorCommandStrs[i].Name) = AString then
|
|
begin
|
|
Result := EditorCommandStrs[i].Value;
|
|
Break;
|
|
end;
|
|
end;
|
|
|
|
|
|
function TSynEditHelper.IndexToEditorCommand(const AIndex: Integer): Integer;
|
|
begin
|
|
Result := EditorCommandStrs[AIndex].Value;
|
|
end;
|
|
|
|
|
|
procedure TSynHighlighterAttributesHelper.AssignColorAndStyle(Source: TSynHighlighterAttributes);
|
|
var
|
|
bChanged: Boolean;
|
|
begin
|
|
bChanged := False;
|
|
if Background <> Source.Background then
|
|
begin
|
|
Background := Source.Background;
|
|
bChanged := True;
|
|
end;
|
|
if Foreground <> Source.Foreground then
|
|
begin
|
|
Foreground := Source.Foreground;
|
|
bChanged := True;
|
|
end;
|
|
if Style <> Source.Style then
|
|
begin
|
|
Style := Source.Style;
|
|
bChanged := True;
|
|
end;
|
|
if bChanged then
|
|
Changed;
|
|
end;
|
|
end.
|
|
|