SynEdit (plugins: syncro,templ,complete) remove dynamic allocation of commands. Fix issue #0026329

git-svn-id: trunk@47522 -
This commit is contained in:
martin 2015-01-26 00:02:52 +00:00
parent f38736684f
commit 7832ffec7f
5 changed files with 106 additions and 126 deletions

View File

@ -435,16 +435,15 @@ type
procedure PrettyTextOut(c: TCanvas; x, y: integer; s: string); procedure PrettyTextOut(c: TCanvas; x, y: integer; s: string);
const const
ecSynCompletionExecute = ecPluginFirst + 0; ecSynCompletionExecute = ecPluginFirstCompletion + 0;
ecSynAutoCompletionExecute = ecPluginFirst + 1; ecSynAutoCompletionExecute = ecPluginFirstCompletion + 1;
// If extending the list, reserve space in SynEditKeyCmds
ecSynCompletionCount = 2; ecSynCompletionCount = 2;
implementation implementation
var
KeyOffset: integer;
function IsIdentifierChar(p: PChar): boolean; inline; function IsIdentifierChar(p: PChar): boolean; inline;
{$IF FPC_FULLVERSION >= 20701} {$IF FPC_FULLVERSION >= 20701}
var var
@ -1795,7 +1794,7 @@ begin
Form.OnPaint:=@OnFormPaint; Form.OnPaint:=@OnFormPaint;
FEndOfTokenChr := '()[].'; FEndOfTokenChr := '()[].';
fShortCut := Menus.ShortCut(Ord(' '), [ssCtrl]); fShortCut := Menus.ShortCut(Ord(' '), [ssCtrl]);
FExecCommandID := KeyOffset + ecSynCompletionExecute; FExecCommandID := ecSynCompletionExecute;
end; end;
procedure TSynCompletion.SetShortCut(Value: TShortCut); procedure TSynCompletion.SetShortCut(Value: TShortCut);
@ -1923,7 +1922,7 @@ begin
FEndOfTokenChr := '()[].'; FEndOfTokenChr := '()[].';
fAutoCompleteList := TStringList.Create; fAutoCompleteList := TStringList.Create;
fShortCut := Menus.ShortCut(Ord(' '), [ssShift]); fShortCut := Menus.ShortCut(Ord(' '), [ssShift]);
FExecCommandID := KeyOffset + ecSynAutoCompletionExecute; FExecCommandID := ecSynAutoCompletionExecute;
end; end;
procedure TSynAutoComplete.SetShortCut(Value: TShortCut); procedure TSynAutoComplete.SetShortCut(Value: TShortCut);
@ -2166,14 +2165,13 @@ const
function IdentToSynCompletionCommand(const Ident: string; var Cmd: longint): boolean; function IdentToSynCompletionCommand(const Ident: string; var Cmd: longint): boolean;
begin begin
Result := IdentToInt(Ident, Cmd, SynComplutionCommandStrs); Result := IdentToInt(Ident, Cmd, SynComplutionCommandStrs);
if Result then inc(Cmd, KeyOffset);
end; end;
function SynCompletionCommandToIdent(Cmd: longint; var Ident: string): boolean; function SynCompletionCommandToIdent(Cmd: longint; var Ident: string): boolean;
begin begin
Result := (Cmd - ecPluginFirst >= KeyOffset) and (Cmd - ecPluginFirst < KeyOffset + ecSynCompletionCount); Result := (Cmd >= ecPluginFirstCompletion) and (Cmd - ecPluginFirstCompletion < ecSynCompletionCount);
if not Result then exit; if not Result then exit;
Result := IntToIdent(Cmd - KeyOffset, Ident, SynComplutionCommandStrs); Result := IntToIdent(Cmd, Ident, SynComplutionCommandStrs);
end; end;
procedure GetEditorCommandValues(Proc: TGetStrProc); procedure GetEditorCommandValues(Proc: TGetStrProc);
@ -2186,8 +2184,6 @@ end;
initialization initialization
KeyOffset := AllocatePluginKeyRange(ecSynCompletionCount, True);
RegisterKeyCmdIdentProcs(@IdentToSynCompletionCommand, RegisterKeyCmdIdentProcs(@IdentToSynCompletionCommand,
@SynCompletionCommandToIdent); @SynCompletionCommandToIdent);
RegisterExtraGetEditorCommandValues(@GetEditorCommandValues); RegisterExtraGetEditorCommandValues(@GetEditorCommandValues);

View File

@ -274,6 +274,10 @@ const
ecUserFirst = 1001; // Start of user-defined commands ecUserFirst = 1001; // Start of user-defined commands
ecPluginFirstCompletion = 19000;
ecPluginFirstSyncro = 19010;
ecPluginFirstTemplEdit = 19030;
ecPluginFirst = 20000; ecPluginFirst = 20000;
// Plugins don't know of other plugins, so they need to map the codes // Plugins don't know of other plugins, so they need to map the codes

View File

@ -276,6 +276,7 @@ const
emcMax = 29; emcMax = 29;
emcPluginFirstSyncro = 19000;
emcPluginFirst = 20000; emcPluginFirst = 20000;
// Options // Options

View File

@ -249,9 +249,6 @@ type
constructor Create(AOwner: TComponent); override; constructor Create(AOwner: TComponent); override;
destructor Destroy; override; destructor Destroy; override;
class function ConvertCommandToBase(Command: TSynEditorCommand): TSynEditorCommand;
class function ConvertBaseToCommand(Command: TSynEditorCommand): TSynEditorCommand;
published published
property CaseSensitive: boolean read FCaseSensitive write SetCaseSensitive default false; property CaseSensitive: boolean read FCaseSensitive write SetCaseSensitive default false;
property GutterGlyph: TBitmap read FGutterGlyph write SetGutterGlyph; property GutterGlyph: TBitmap read FGutterGlyph write SetGutterGlyph;
@ -277,32 +274,31 @@ type
end; end;
const const
emcSynPSyncroEdGutterGlyph = emcPluginFirst + 0; emcSynPSyncroEdGutterGlyph = emcPluginFirstSyncro + 0;
emcSynPSyncroEdCount = 1; emcSynPSyncroEdCount = 1;
ecSynPSyncroEdStart = ecPluginFirst + 0; ecSynPSyncroEdStart = ecPluginFirstSyncro + 0;
ecSynPSyncroEdNextCell = ecPluginFirst + 1; ecSynPSyncroEdNextCell = ecPluginFirstSyncro + 1;
ecSynPSyncroEdNextCellSel = ecPluginFirst + 2; ecSynPSyncroEdNextCellSel = ecPluginFirstSyncro + 2;
ecSynPSyncroEdPrevCell = ecPluginFirst + 3; ecSynPSyncroEdPrevCell = ecPluginFirstSyncro + 3;
ecSynPSyncroEdPrevCellSel = ecPluginFirst + 4; ecSynPSyncroEdPrevCellSel = ecPluginFirstSyncro + 4;
ecSynPSyncroEdCellHome = ecPluginFirst + 5; ecSynPSyncroEdCellHome = ecPluginFirstSyncro + 5;
ecSynPSyncroEdCellEnd = ecPluginFirst + 6; ecSynPSyncroEdCellEnd = ecPluginFirstSyncro + 6;
ecSynPSyncroEdCellSelect = ecPluginFirst + 7; ecSynPSyncroEdCellSelect = ecPluginFirstSyncro + 7;
ecSynPSyncroEdEscape = ecPluginFirst + 8; ecSynPSyncroEdEscape = ecPluginFirstSyncro + 8;
ecSynPSyncroEdNextFirstCell = ecPluginFirst + 9; ecSynPSyncroEdNextFirstCell = ecPluginFirstSyncro + 9;
ecSynPSyncroEdNextFirstCellSel = ecPluginFirst + 10; ecSynPSyncroEdNextFirstCellSel = ecPluginFirstSyncro + 10;
ecSynPSyncroEdPrevFirstCell = ecPluginFirst + 11; ecSynPSyncroEdPrevFirstCell = ecPluginFirstSyncro + 11;
ecSynPSyncroEdPrevFirstCellSel = ecPluginFirst + 12; ecSynPSyncroEdPrevFirstCellSel = ecPluginFirstSyncro + 12;
// If extending the list, reserve space in SynEditKeyCmds
ecSynPSyncroEdCount = 13; ecSynPSyncroEdCount = 13;
implementation implementation
var
MouseOffset, KeyOffset: integer;
const const
MAX_CACHE = 50; // Amount of lower-cased lines cached MAX_CACHE = 50; // Amount of lower-cased lines cached
MAX_SYNC_ED_WORDS = 50;// 250; MAX_SYNC_ED_WORDS = 50;// 250;
@ -1304,7 +1300,7 @@ function TSynPluginSyncroEdit.DoHandleMouseAction(AnAction: TSynEditMouseAction;
begin begin
Result := False; Result := False;
if AnAction.Command = MouseOffset + emcSynPSyncroEdGutterGlyph then begin if AnAction.Command = emcSynPSyncroEdGutterGlyph then begin
if Mode = spseSelecting then if Mode = spseSelecting then
StartSyncroMode StartSyncroMode
else else
@ -1374,14 +1370,9 @@ begin
end; end;
if keys = nil then exit; if keys = nil then exit;
try if not FinishComboOnly then
keys.UsePluginOffset := True; keys.ResetKeyCombo;
if not FinishComboOnly then Command := keys.FindKeycodeEx(Code, SState, Data, IsStartOfCombo, FinishComboOnly, ComboKeyStrokes);
keys.ResetKeyCombo;
Command := keys.FindKeycodeEx(Code, SState, Data, IsStartOfCombo, FinishComboOnly, ComboKeyStrokes);
finally
keys.UsePluginOffset := False;
end;
Handled := (Command <> ecNone) or IsStartOfCombo; Handled := (Command <> ecNone) or IsStartOfCombo;
if IsStartOfCombo then if IsStartOfCombo then
@ -1391,16 +1382,13 @@ end;
procedure TSynPluginSyncroEdit.ProcessSynCommand(Sender: TObject; AfterProcessing: boolean; procedure TSynPluginSyncroEdit.ProcessSynCommand(Sender: TObject; AfterProcessing: boolean;
var Handled: boolean; var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer; var Handled: boolean; var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer;
HandlerData: pointer); HandlerData: pointer);
var
Cmd: TSynEditorCommand;
begin begin
if Handled or AfterProcessing or not (Active or PreActive) then exit; if Handled or AfterProcessing or not (Active or PreActive) then exit;
if Mode = spseSelecting then begin if Mode = spseSelecting then begin
// todo: finish word-hash calculations / check if any cells exist // todo: finish word-hash calculations / check if any cells exist
Cmd := ConvertCommandToBase(Command);
Handled := True; Handled := True;
case Cmd of case Command of
ecSynPSyncroEdStart: StartSyncroMode; ecSynPSyncroEdStart: StartSyncroMode;
else else
Handled := False; Handled := False;
@ -1408,10 +1396,8 @@ begin
end; end;
if Mode = spseEditing then begin if Mode = spseEditing then begin
Cmd := ConvertCommandToBase(Command);
Handled := True; Handled := True;
case Cmd of case Command of
ecSynPSyncroEdNextCell: NextCell(False, True); ecSynPSyncroEdNextCell: NextCell(False, True);
ecSynPSyncroEdNextCellSel: NextCell(True, True); ecSynPSyncroEdNextCellSel: NextCell(True, True);
ecSynPSyncroEdPrevCell: PreviousCell(False, True); ecSynPSyncroEdPrevCell: PreviousCell(False, True);
@ -1444,15 +1430,12 @@ begin
FKeystrokes := TSynEditSyncroEditKeyStrokes.Create(Self); FKeystrokes := TSynEditSyncroEditKeyStrokes.Create(Self);
FKeystrokes.ResetDefaults; FKeystrokes.ResetDefaults;
FKeystrokes.PluginOffset := KeyOffset;
FKeyStrokesOffCell := TSynEditSyncroEditKeyStrokesOffCell.Create(self); FKeyStrokesOffCell := TSynEditSyncroEditKeyStrokesOffCell.Create(self);
FKeyStrokesOffCell.ResetDefaults; FKeyStrokesOffCell.ResetDefaults;
FKeyStrokesOffCell.PluginOffset := KeyOffset;
FKeystrokesSelecting := TSynEditSyncroEditKeyStrokesSelecting.Create(Self); FKeystrokesSelecting := TSynEditSyncroEditKeyStrokesSelecting.Create(Self);
FKeystrokesSelecting.ResetDefaults; FKeystrokesSelecting.ResetDefaults;
FKeystrokesSelecting.PluginOffset := KeyOffset;
FGutterGlyph := TBitMap.Create; FGutterGlyph := TBitMap.Create;
FGutterGlyph.OnChange := @DoImageChanged; FGutterGlyph.OnChange := @DoImageChanged;
@ -1478,27 +1461,12 @@ begin
FreeAndNil(FKeystrokesSelecting); FreeAndNil(FKeystrokesSelecting);
end; end;
class function TSynPluginSyncroEdit.ConvertCommandToBase(Command: TSynEditorCommand): TSynEditorCommand;
begin
if (Command >= ecPluginFirst + KeyOffset) and
(Command <= ecPluginFirst + KeyOffset + ecSynPSyncroEdCount)
then Result := Command - KeyOffset
else Result := ecNone;
end;
class function TSynPluginSyncroEdit.ConvertBaseToCommand(Command: TSynEditorCommand): TSynEditorCommand;
begin
if (Command >= ecPluginFirst) and (Command <= ecPluginFirst + ecSynPSyncroEdCount)
then Result := Command + KeyOffset
else Result := ecNone;
end;
{ TSynPluginSyncroEditMouseActions } { TSynPluginSyncroEditMouseActions }
procedure TSynPluginSyncroEditMouseActions.ResetDefaults; procedure TSynPluginSyncroEditMouseActions.ResetDefaults;
begin begin
Clear; Clear;
AddCommand(MouseOffset + emcSynPSyncroEdGutterGlyph, False, mbXLeft, ccAny, cdDown, [], []); AddCommand(emcSynPSyncroEdGutterGlyph, False, mbXLeft, ccAny, cdDown, [], []);
end; end;
{ TSynEditSyncroEditKeyStrokesSelecting } { TSynEditSyncroEditKeyStrokesSelecting }
@ -1588,14 +1556,13 @@ const
function IdentToSyncroCommand(const Ident: string; var Cmd: longint): boolean; function IdentToSyncroCommand(const Ident: string; var Cmd: longint): boolean;
begin begin
Result := IdentToInt(Ident, Cmd, EditorSyncroCommandStrs); Result := IdentToInt(Ident, Cmd, EditorSyncroCommandStrs);
if Result then inc(Cmd, KeyOffset);
end; end;
function SyncroCommandToIdent(Cmd: longint; var Ident: string): boolean; function SyncroCommandToIdent(Cmd: longint; var Ident: string): boolean;
begin begin
Result := (Cmd - ecPluginFirst >= KeyOffset) and (Cmd - ecPluginFirst < KeyOffset + ecSynPSyncroEdCount); Result := (Cmd >= ecPluginFirstSyncro) and (Cmd - ecPluginFirstSyncro < ecSynPSyncroEdCount);
if not Result then exit; if not Result then exit;
Result := IntToIdent(Cmd - KeyOffset, Ident, EditorSyncroCommandStrs); Result := IntToIdent(Cmd, Ident, EditorSyncroCommandStrs);
end; end;
procedure GetEditorCommandValues(Proc: TGetStrProc); procedure GetEditorCommandValues(Proc: TGetStrProc);
@ -1608,9 +1575,6 @@ end;
initialization initialization
MouseOffset := AllocatePluginMouseRange(emcSynPSyncroEdCount, True);
KeyOffset := AllocatePluginKeyRange(ecSynPSyncroEdCount, True);
RegisterKeyCmdIdentProcs(@IdentToSyncroCommand, RegisterKeyCmdIdentProcs(@IdentToSyncroCommand,
@SyncroCommandToIdent); @SyncroCommandToIdent);
RegisterExtraGetEditorCommandValues(@GetEditorCommandValues); RegisterExtraGetEditorCommandValues(@GetEditorCommandValues);

View File

@ -71,8 +71,6 @@ type
public public
constructor Create(AOwner: TComponent); override; constructor Create(AOwner: TComponent); override;
destructor Destroy; override; destructor Destroy; override;
class function ConvertCommandToBase(Command: TSynEditorCommand): TSynEditorCommand;
class function ConvertBaseToCommand(Command: TSynEditorCommand): TSynEditorCommand;
procedure SetTemplate(aTmpl: String; aLogCaretPos: TPoint); // Replaces current selection procedure SetTemplate(aTmpl: String; aLogCaretPos: TPoint); // Replaces current selection
// Coords relativ to the template. base (1, 1) // Coords relativ to the template. base (1, 1)
@ -86,41 +84,38 @@ type
end; end;
const const
ecSynPTmplEdNextCell = ecPluginFirst + 0; ecSynPTmplEdNextCell = ecPluginFirstTemplEdit + 0;
ecSynPTmplEdNextCellSel = ecPluginFirst + 1; ecSynPTmplEdNextCellSel = ecPluginFirstTemplEdit + 1;
ecSynPTmplEdNextCellRotate = ecPluginFirst + 2; ecSynPTmplEdNextCellRotate = ecPluginFirstTemplEdit + 2;
ecSynPTmplEdNextCellSelRotate = ecPluginFirst + 3; ecSynPTmplEdNextCellSelRotate = ecPluginFirstTemplEdit + 3;
ecSynPTmplEdPrevCell = ecPluginFirst + 4; ecSynPTmplEdPrevCell = ecPluginFirstTemplEdit + 4;
ecSynPTmplEdPrevCellSel = ecPluginFirst + 5; ecSynPTmplEdPrevCellSel = ecPluginFirstTemplEdit + 5;
ecSynPTmplEdCellHome = ecPluginFirst + 6; ecSynPTmplEdCellHome = ecPluginFirstTemplEdit + 6;
ecSynPTmplEdCellEnd = ecPluginFirst + 7; ecSynPTmplEdCellEnd = ecPluginFirstTemplEdit + 7;
ecSynPTmplEdCellSelect = ecPluginFirst + 8; ecSynPTmplEdCellSelect = ecPluginFirstTemplEdit + 8;
ecSynPTmplEdFinish = ecPluginFirst + 9; ecSynPTmplEdFinish = ecPluginFirstTemplEdit + 9;
ecSynPTmplEdEscape = ecPluginFirst + 10; ecSynPTmplEdEscape = ecPluginFirstTemplEdit + 10;
ecSynPTmplEdNextFirstCell = ecPluginFirst + 11; ecSynPTmplEdNextFirstCell = ecPluginFirstTemplEdit + 11;
ecSynPTmplEdNextFirstCellSel = ecPluginFirst + 12; ecSynPTmplEdNextFirstCellSel = ecPluginFirstTemplEdit + 12;
ecSynPTmplEdNextFirstCellRotate = ecPluginFirst + 13; ecSynPTmplEdNextFirstCellRotate = ecPluginFirstTemplEdit + 13;
ecSynPTmplEdNextFirstCellSelRotate = ecPluginFirst + 14; ecSynPTmplEdNextFirstCellSelRotate = ecPluginFirstTemplEdit + 14;
ecSynPTmplEdPrevFirstCell = ecPluginFirst + 15; ecSynPTmplEdPrevFirstCell = ecPluginFirstTemplEdit + 15;
ecSynPTmplEdPrevFirstCellSel = ecPluginFirst + 16; ecSynPTmplEdPrevFirstCellSel = ecPluginFirstTemplEdit + 16;
// If extending the list, reserve space in SynEditKeyCmds
ecSynPTmplEdCount = 17; ecSynPTmplEdCount = 17;
implementation implementation
var
KeyOffset: integer;
{ TSynPluginTemplateEdit } { TSynPluginTemplateEdit }
constructor TSynPluginTemplateEdit.Create(AOwner: TComponent); constructor TSynPluginTemplateEdit.Create(AOwner: TComponent);
begin begin
FKeystrokes := TSynEditTemplateEditKeyStrokes.Create(Self); FKeystrokes := TSynEditTemplateEditKeyStrokes.Create(Self);
FKeystrokes.ResetDefaults; FKeystrokes.ResetDefaults;
FKeystrokes.PluginOffset := KeyOffset;
FKeyStrokesOffCell := TSynEditTemplateEditKeyStrokesOffCell.Create(self); FKeyStrokesOffCell := TSynEditTemplateEditKeyStrokesOffCell.Create(self);
FKeyStrokesOffCell.ResetDefaults; FKeyStrokesOffCell.ResetDefaults;
FKeyStrokesOffCell.PluginOffset := KeyOffset;
inherited Create(AOwner); inherited Create(AOwner);
CellParserEnabled := True; CellParserEnabled := True;
end; end;
@ -132,22 +127,6 @@ begin
FreeAndNil(FKeyStrokesOffCell); FreeAndNil(FKeyStrokesOffCell);
end; end;
class function TSynPluginTemplateEdit.ConvertCommandToBase
(Command: TSynEditorCommand): TSynEditorCommand;
begin
if (Command >= ecPluginFirst + KeyOffset) and
(Command <= ecPluginFirst + KeyOffset + ecSynPTmplEdCount)
then Result := Command - KeyOffset
else Result := ecNone;
end;
class function TSynPluginTemplateEdit.ConvertBaseToCommand(Command: TSynEditorCommand): TSynEditorCommand;
begin
if (Command >= ecPluginFirst) and (Command <= ecPluginFirst + ecSynPTmplEdCount)
then Result := Command + KeyOffset
else Result := ecNone;
end;
procedure TSynPluginTemplateEdit.DoEditorRemoving(AValue: TCustomSynEdit); procedure TSynPluginTemplateEdit.DoEditorRemoving(AValue: TCustomSynEdit);
begin begin
if Editor <> nil then begin if Editor <> nil then begin
@ -197,14 +176,9 @@ begin
else else
keys := FKeyStrokes; keys := FKeyStrokes;
try if not FinishComboOnly then
keys.UsePluginOffset := True; keys.ResetKeyCombo;
if not FinishComboOnly then Command := keys.FindKeycodeEx(Code, SState, Data, IsStartOfCombo, FinishComboOnly, ComboKeyStrokes);
keys.ResetKeyCombo;
Command := keys.FindKeycodeEx(Code, SState, Data, IsStartOfCombo, FinishComboOnly, ComboKeyStrokes);
finally
keys.UsePluginOffset := False;
end;
Handled := (Command <> ecNone) or IsStartOfCombo; Handled := (Command <> ecNone) or IsStartOfCombo;
if IsStartOfCombo then if IsStartOfCombo then
@ -214,14 +188,11 @@ end;
procedure TSynPluginTemplateEdit.ProcessSynCommand(Sender: TObject; AfterProcessing: boolean; procedure TSynPluginTemplateEdit.ProcessSynCommand(Sender: TObject; AfterProcessing: boolean;
var Handled: boolean; var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer; var Handled: boolean; var Command: TSynEditorCommand; var AChar: TUTF8Char; Data: pointer;
HandlerData: pointer); HandlerData: pointer);
var
Cmd: TSynEditorCommand;
begin begin
if Handled or AfterProcessing or not Active then exit; if Handled or AfterProcessing or not Active then exit;
Cmd := ConvertCommandToBase(Command);
Handled := True; Handled := True;
case Cmd of case Command of
ecSynPTmplEdNextCell: NextCellOrFinal(False); ecSynPTmplEdNextCell: NextCellOrFinal(False);
ecSynPTmplEdNextCellSel: NextCellOrFinal(True); ecSynPTmplEdNextCellSel: NextCellOrFinal(True);
ecSynPTmplEdNextCellRotate: NextCell(False); ecSynPTmplEdNextCellRotate: NextCell(False);
@ -498,8 +469,52 @@ begin
AddKey(ecSynPTmplEdEscape, VK_ESCAPE, []); AddKey(ecSynPTmplEdEscape, VK_ESCAPE, []);
end; end;
const
EditorTmplEditCommandStrs: array[0..16] of TIdentMapEntry = (
(Value: ecSynPTmplEdNextCell; Name: 'ecSynPTmplEdNextCell'),
(Value: ecSynPTmplEdNextCellSel; Name: 'ecSynPTmplEdNextCellSel'),
(Value: ecSynPTmplEdNextCellRotate; Name: 'ecSynPTmplEdNextCellRotate'),
(Value: ecSynPTmplEdNextCellSelRotate; Name: 'ecSynPTmplEdNextCellSelRotate'),
(Value: ecSynPTmplEdPrevCell; Name: 'ecSynPTmplEdPrevCell'),
(Value: ecSynPTmplEdPrevCellSel; Name: 'ecSynPTmplEdPrevCellSel'),
(Value: ecSynPTmplEdCellHome; Name: 'ecSynPTmplEdCellHome'),
(Value: ecSynPTmplEdCellEnd; Name: 'ecSynPTmplEdCellEnd'),
(Value: ecSynPTmplEdCellSelect; Name: 'ecSynPTmplEdCellSelect'),
(Value: ecSynPTmplEdFinish; Name: 'ecSynPTmplEdFinish'),
(Value: ecSynPTmplEdEscape; Name: 'ecSynPTmplEdEscape'),
(Value: ecSynPTmplEdNextFirstCell; Name: 'ecSynPTmplEdNextFirstCell'),
(Value: ecSynPTmplEdNextFirstCellSel; Name: 'ecSynPTmplEdNextFirstCellSel'),
(Value: ecSynPTmplEdNextFirstCellRotate; Name: 'ecSynPTmplEdNextFirstCellRotate'),
(Value: ecSynPTmplEdNextFirstCellSelRotate; Name: 'ecSynPTmplEdNextFirstCellSelRotate'),
(Value: ecSynPTmplEdPrevFirstCell; Name: 'ecSynPTmplEdPrevFirstCell'),
(Value: ecSynPTmplEdPrevFirstCellSel; Name: 'ecSynPTmplEdPrevFirstCellSel')
);
function IdentToTmplEditCommand(const Ident: string; var Cmd: longint): boolean;
begin
Result := IdentToInt(Ident, Cmd, EditorTmplEditCommandStrs);
end;
function TmplEditCommandToIdent(Cmd: longint; var Ident: string): boolean;
begin
Result := (Cmd >= ecPluginFirstTemplEdit) and (Cmd - ecPluginFirstTemplEdit < ecSynPTmplEdCount);
if not Result then exit;
Result := IntToIdent(Cmd, Ident, EditorTmplEditCommandStrs);
end;
procedure GetEditorCommandValues(Proc: TGetStrProc);
var
i: integer;
begin
for i := Low(EditorTmplEditCommandStrs) to High(EditorTmplEditCommandStrs) do
Proc(EditorTmplEditCommandStrs[I].Name);
end;
initialization initialization
KeyOffset := AllocatePluginKeyRange(ecSynPTmplEdCount + 1, True); RegisterKeyCmdIdentProcs(@IdentToTmplEditCommand,
@TmplEditCommandToIdent);
RegisterExtraGetEditorCommandValues(@GetEditorCommandValues);
end. end.