add editor command to comment the current identifier

This commit is contained in:
Basile Burg 2016-05-29 20:22:06 +02:00
parent 6158dd26a2
commit f1f2ad6b7e
3 changed files with 69 additions and 1 deletions

View File

@ -98,9 +98,13 @@ inherited CEEditorWidget: TCEEditorWidget
Caption = '-' Caption = '-'
end end
object mnuedComm: TMenuItem object mnuedComm: TMenuItem
Caption = 'Comment' Caption = 'Comment selected lines'
OnClick = mnuedCommClick OnClick = mnuedCommClick
end end
object MenuItem6: TMenuItem
Caption = 'Comment identifier'
OnClick = MenuItem6Click
end
object mnuedInvAllNone: TMenuItem object mnuedInvAllNone: TMenuItem
Caption = 'Invert version all none' Caption = 'Invert version all none'
OnClick = mnuedInvAllNoneClick OnClick = mnuedInvAllNoneClick

View File

@ -35,11 +35,14 @@ type
destructor Destroy; override; destructor Destroy; override;
end; end;
{ TCEEditorWidget }
TCEEditorWidget = class(TCEWidget, ICEMultiDocObserver, ICEMultiDocHandler, ICEProjectObserver) TCEEditorWidget = class(TCEWidget, ICEMultiDocObserver, ICEMultiDocHandler, ICEProjectObserver)
MenuItem1: TMenuItem; MenuItem1: TMenuItem;
MenuItem2: TMenuItem; MenuItem2: TMenuItem;
MenuItem3: TMenuItem; MenuItem3: TMenuItem;
MenuItem5: TMenuItem; MenuItem5: TMenuItem;
MenuItem6: TMenuItem;
mnuedRename: TMenuItem; mnuedRename: TMenuItem;
mnuedInvAllNone: TMenuItem; mnuedInvAllNone: TMenuItem;
mnuedComm: TMenuItem; mnuedComm: TMenuItem;
@ -59,6 +62,7 @@ type
editorStatus: TStatusBar; editorStatus: TStatusBar;
mnuEditor: TPopupMenu; mnuEditor: TPopupMenu;
procedure MenuItem5Click(Sender: TObject); procedure MenuItem5Click(Sender: TObject);
procedure MenuItem6Click(Sender: TObject);
procedure mnuedRenameClick(Sender: TObject); procedure mnuedRenameClick(Sender: TObject);
procedure mnuedInvAllNoneClick(Sender: TObject); procedure mnuedInvAllNoneClick(Sender: TObject);
procedure mnuedCommClick(Sender: TObject); procedure mnuedCommClick(Sender: TObject);
@ -722,6 +726,12 @@ begin
end; end;
end; end;
procedure TCEEditorWidget.MenuItem6Click(Sender: TObject);
begin
if fDoc.isNotNil then
fDoc.CommandProcessor(ecCommentIdentifier, '', nil);
end;
procedure TCEEditorWidget.mnuedRenameClick(Sender: TObject); procedure TCEEditorWidget.mnuedRenameClick(Sender: TObject);
begin begin
if fDoc.isNotNil then if fDoc.isNotNil then

View File

@ -247,6 +247,7 @@ const
ecCommentSelection = ecUserFirst + 10; ecCommentSelection = ecUserFirst + 10;
ecSwapVersionAllNone = ecUserFirst + 11; ecSwapVersionAllNone = ecUserFirst + 11;
ecRenameIdentifier = ecUserFirst + 12; ecRenameIdentifier = ecUserFirst + 12;
ecCommentIdentifier = ecUserFirst + 13;
var var
D2Syn: TSynD2Syn; // used as model to set the options when no editor exists. D2Syn: TSynD2Syn; // used as model to set the options when no editor exists.
@ -735,6 +736,7 @@ begin
AddKey(ecCommentSelection, ord('/'), [ssCtrl], 0, []); AddKey(ecCommentSelection, ord('/'), [ssCtrl], 0, []);
AddKey(ecSwapVersionAllNone, 0, [], 0, []); AddKey(ecSwapVersionAllNone, 0, [], 0, []);
AddKey(ecRenameIdentifier, VK_F2, [ssCtrl], 0, []); AddKey(ecRenameIdentifier, VK_F2, [ssCtrl], 0, []);
AddKey(ecCommentIdentifier, 0, [], 0, []);
end; end;
end; end;
@ -753,6 +755,7 @@ begin
'ecCommentSelection': begin Int := ecCommentSelection; exit(true); end; 'ecCommentSelection': begin Int := ecCommentSelection; exit(true); end;
'ecSwapVersionAllNone': begin Int := ecSwapVersionAllNone; exit(true); end; 'ecSwapVersionAllNone': begin Int := ecSwapVersionAllNone; exit(true); end;
'ecRenameIdentifier': begin Int := ecRenameIdentifier; exit(true); end; 'ecRenameIdentifier': begin Int := ecRenameIdentifier; exit(true); end;
'ecCommentIdentifier': begin Int := ecCommentIdentifier; exit(true); end;
else exit(false); else exit(false);
end; end;
end; end;
@ -772,6 +775,7 @@ begin
ecCommentSelection: begin Ident := 'ecCommentSelection'; exit(true); end; ecCommentSelection: begin Ident := 'ecCommentSelection'; exit(true); end;
ecSwapVersionAllNone: begin Ident := 'ecSwapVersionAllNone'; exit(true); end; ecSwapVersionAllNone: begin Ident := 'ecSwapVersionAllNone'; exit(true); end;
ecRenameIdentifier: begin Ident := 'ecRenameIdentifier'; exit(true); end; ecRenameIdentifier: begin Ident := 'ecRenameIdentifier'; exit(true); end;
ecCommentIdentifier: begin Ident := 'ecCommentIdentifier'; exit(true); end;
else exit(false); else exit(false);
end; end;
end; end;
@ -908,6 +912,54 @@ begin
end; end;
end; end;
procedure commentIdentifier(editor: TSynEdit);
var
str: string;
comment: boolean = true;
tkType, st: Integer;
attrib: TSynHighlighterAttributes;
begin
if not editor.GetHighlighterAttriAtRowColEx(editor.CaretXY, str, tkType, st, attrib) then
exit;
if str.isEmpty then
exit;
if (str.length > 1) and ((str[1..2] = '/*') or
(str[str.length-1..str.length] = '*/')) then
comment := false;
if comment then
begin
editor.BeginUndoBlock;
editor.ExecuteCommand(ecWordLeft, '', nil);
editor.ExecuteCommand(ecChar, '/', nil);
editor.ExecuteCommand(ecChar, '*', nil);
editor.ExecuteCommand(ecWordEndRight, '', nil);
editor.ExecuteCommand(ecChar, '*', nil);
editor.ExecuteCommand(ecChar, '/', nil);
editor.EndUndoBlock;
end else
//TODO-ceditor: handle spaces between ident and comment beg end.
begin
editor.BeginUndoBlock;
if str[1..2] = '/*' then
begin
editor.ExecuteCommand(ecWordLeft, '', nil);
editor.ExecuteCommand(ecLeft, '', nil);
editor.ExecuteCommand(ecLeft, '', nil);
editor.ExecuteCommand(ecDeleteChar, '', nil);
editor.ExecuteCommand(ecDeleteChar, '', nil);
end;
if str[str.length-1..str.length] = '*/' then
begin
editor.ExecuteCommand(ecWordEndRight, '', nil);
editor.ExecuteCommand(ecDeleteChar, '', nil);
editor.ExecuteCommand(ecDeleteChar, '', nil);
end;
editor.EndUndoBlock;
end;
end;
procedure TCESynMemo.DoOnProcessCommand(var Command: TSynEditorCommand; procedure TCESynMemo.DoOnProcessCommand(var Command: TSynEditorCommand;
var AChar: TUTF8Char; Data: pointer); var AChar: TUTF8Char; Data: pointer);
begin begin
@ -943,6 +995,8 @@ begin
invertVersionAllNone; invertVersionAllNone;
ecRenameIdentifier: ecRenameIdentifier:
renameIdentifier; renameIdentifier;
ecCommentIdentifier:
commentIdentifier(self);
end; end;
if fOverrideColMode and not SelAvail then if fOverrideColMode and not SelAvail then
begin begin