mirror of https://gitlab.com/basile.b/dexed.git
add commands to jump by prot attribs, close #98
This commit is contained in:
parent
4ad0b6bdfe
commit
bf2d2c64d1
|
@ -111,6 +111,17 @@ inherited CEEditorWidget: TCEEditorWidget
|
||||||
object MenuItem9: TMenuItem
|
object MenuItem9: TMenuItem
|
||||||
Caption = '-'
|
Caption = '-'
|
||||||
end
|
end
|
||||||
|
object mnuedPrevProtGrp: TMenuItem
|
||||||
|
Caption = 'Previous protection attribute'
|
||||||
|
OnClick = mnuedPrevProtGrpClick
|
||||||
|
end
|
||||||
|
object mnuedNextProtGrp: TMenuItem
|
||||||
|
Caption = 'Next protection attribute'
|
||||||
|
OnClick = mnuedNextProtGrpClick
|
||||||
|
end
|
||||||
|
object MenuItem2: TMenuItem
|
||||||
|
Caption = '-'
|
||||||
|
end
|
||||||
object mnuedUpcase: TMenuItem
|
object mnuedUpcase: TMenuItem
|
||||||
Caption = 'Upper case'
|
Caption = 'Upper case'
|
||||||
OnClick = mnuedUpcaseClick
|
OnClick = mnuedUpcaseClick
|
||||||
|
|
|
@ -58,6 +58,9 @@ type
|
||||||
MenuItem10: TMenuItem;
|
MenuItem10: TMenuItem;
|
||||||
MenuItem11: TMenuItem;
|
MenuItem11: TMenuItem;
|
||||||
MenuItem12: TMenuItem;
|
MenuItem12: TMenuItem;
|
||||||
|
mnuedPrevProtGrp: TMenuItem;
|
||||||
|
mnuedNextProtGrp: TMenuItem;
|
||||||
|
MenuItem2: TMenuItem;
|
||||||
mnuedSortLines: TMenuItem;
|
mnuedSortLines: TMenuItem;
|
||||||
mnuedNextCarea: TMenuItem;
|
mnuedNextCarea: TMenuItem;
|
||||||
mnuedPrevCarea: TMenuItem;
|
mnuedPrevCarea: TMenuItem;
|
||||||
|
@ -86,6 +89,8 @@ type
|
||||||
macRecorder: TSynMacroRecorder;
|
macRecorder: TSynMacroRecorder;
|
||||||
editorStatus: TStatusBar;
|
editorStatus: TStatusBar;
|
||||||
mnuEditor: TPopupMenu;
|
mnuEditor: TPopupMenu;
|
||||||
|
procedure mnuedPrevProtGrpClick(Sender: TObject);
|
||||||
|
procedure mnuedNextProtGrpClick(Sender: TObject);
|
||||||
procedure mnuedNextCareaClick(Sender: TObject);
|
procedure mnuedNextCareaClick(Sender: TObject);
|
||||||
procedure mnuedPrevCareaClick(Sender: TObject);
|
procedure mnuedPrevCareaClick(Sender: TObject);
|
||||||
procedure mnuedLowcaseClick(Sender: TObject);
|
procedure mnuedLowcaseClick(Sender: TObject);
|
||||||
|
@ -325,6 +330,8 @@ begin
|
||||||
AssignPng(mnuedNextCarea.Bitmap, 'GO_NEXT');
|
AssignPng(mnuedNextCarea.Bitmap, 'GO_NEXT');
|
||||||
AssignPng(mnuedPrevCarea.Bitmap, 'GO_PREVIOUS');
|
AssignPng(mnuedPrevCarea.Bitmap, 'GO_PREVIOUS');
|
||||||
AssignPng(mnuedSortLines.Bitmap, 'SORT_AZ');
|
AssignPng(mnuedSortLines.Bitmap, 'SORT_AZ');
|
||||||
|
AssignPng(mnuedNextProtGrp.Bitmap, 'GO_NEXT');
|
||||||
|
AssignPng(mnuedPrevProtGrp.Bitmap, 'GO_PREVIOUS');
|
||||||
//
|
//
|
||||||
EntitiesConnector.addObserver(self);
|
EntitiesConnector.addObserver(self);
|
||||||
EntitiesConnector.addSingleService(self);
|
EntitiesConnector.addSingleService(self);
|
||||||
|
@ -882,6 +889,18 @@ begin
|
||||||
fDoc.nextChangedArea;
|
fDoc.nextChangedArea;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCEEditorWidget.mnuedPrevProtGrpClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if fDoc.isNotNil then
|
||||||
|
fDoc.previousProtectionGroup;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCEEditorWidget.mnuedNextProtGrpClick(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if fDoc.isNotNil then
|
||||||
|
fDoc.nextProtectionGroup;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TCEEditorWidget.mnuedPrevCareaClick(Sender: TObject);
|
procedure TCEEditorWidget.mnuedPrevCareaClick(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
if fDoc.isNotNil then
|
if fDoc.isNotNil then
|
||||||
|
|
|
@ -199,6 +199,7 @@ type
|
||||||
function lexCanCloseBrace: boolean;
|
function lexCanCloseBrace: boolean;
|
||||||
procedure handleStatusChanged(Sender: TObject; Changes: TSynStatusChanges);
|
procedure handleStatusChanged(Sender: TObject; Changes: TSynStatusChanges);
|
||||||
procedure gotoToChangedArea(next: boolean);
|
procedure gotoToChangedArea(next: boolean);
|
||||||
|
procedure gotoToProtectionGroup(next: boolean);
|
||||||
procedure autoClosePair(value: TAutoClosedPair);
|
procedure autoClosePair(value: TAutoClosedPair);
|
||||||
procedure setSelectionOrWordCase(upper: boolean);
|
procedure setSelectionOrWordCase(upper: boolean);
|
||||||
procedure sortSelectedLines(descending, caseSensitive: boolean);
|
procedure sortSelectedLines(descending, caseSensitive: boolean);
|
||||||
|
@ -255,8 +256,10 @@ type
|
||||||
procedure showDDocs;
|
procedure showDDocs;
|
||||||
procedure hideDDocs;
|
procedure hideDDocs;
|
||||||
procedure ShowPhobosDoc;
|
procedure ShowPhobosDoc;
|
||||||
procedure nextChangedArea;
|
|
||||||
procedure previousChangedArea;
|
procedure previousChangedArea;
|
||||||
|
procedure nextChangedArea;
|
||||||
|
procedure previousProtectionGroup;
|
||||||
|
procedure nextProtectionGroup;
|
||||||
procedure sortLines;
|
procedure sortLines;
|
||||||
function implementMain: THasMain;
|
function implementMain: THasMain;
|
||||||
//
|
//
|
||||||
|
@ -326,6 +329,8 @@ const
|
||||||
ecUpperCaseWordOrSel = ecUserFirst + 17;
|
ecUpperCaseWordOrSel = ecUserFirst + 17;
|
||||||
ecLowerCaseWordOrSel = ecUserFirst + 18;
|
ecLowerCaseWordOrSel = ecUserFirst + 18;
|
||||||
ecSortLines = ecUserFirst + 19;
|
ecSortLines = ecUserFirst + 19;
|
||||||
|
ecPrevProtGrp = ecUserFirst + 20;
|
||||||
|
ecNextProtGrp = ecUserFirst + 21;
|
||||||
|
|
||||||
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.
|
||||||
|
@ -947,9 +952,11 @@ begin
|
||||||
AddKey(ecShowPhobosDoc, VK_F1, [], 0, []);
|
AddKey(ecShowPhobosDoc, VK_F1, [], 0, []);
|
||||||
AddKey(ecPreviousChangedArea, VK_UP, [ssAlt], 0, []);
|
AddKey(ecPreviousChangedArea, VK_UP, [ssAlt], 0, []);
|
||||||
AddKey(ecNextChangedArea, VK_DOWN, [ssAlt], 0, []);
|
AddKey(ecNextChangedArea, VK_DOWN, [ssAlt], 0, []);
|
||||||
addKey(ecLowerCaseWordOrSel, 0, [], 0, []);
|
AddKey(ecLowerCaseWordOrSel, 0, [], 0, []);
|
||||||
addKey(ecUpperCaseWordOrSel, 0, [], 0, []);
|
AddKey(ecUpperCaseWordOrSel, 0, [], 0, []);
|
||||||
addKey(ecSortLines, 0, [], 0, []);
|
AddKey(ecSortLines, 0, [], 0, []);
|
||||||
|
AddKey(ecPrevProtGrp, 0, [], 0, []);
|
||||||
|
AddKey(ecNextProtGrp, 0, [], 0, []);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -975,6 +982,8 @@ begin
|
||||||
'ecUpperCaseWordOrSel': begin Int := ecUpperCaseWordOrSel; exit(true); end;
|
'ecUpperCaseWordOrSel': begin Int := ecUpperCaseWordOrSel; exit(true); end;
|
||||||
'ecLowerCaseWordOrSel': begin Int := ecLowerCaseWordOrSel; exit(true); end;
|
'ecLowerCaseWordOrSel': begin Int := ecLowerCaseWordOrSel; exit(true); end;
|
||||||
'ecSortLines': begin Int := ecSortLines; exit(true); end;
|
'ecSortLines': begin Int := ecSortLines; exit(true); end;
|
||||||
|
'ecNextProtGrp': begin Int := ecNextProtGrp; exit(true); end;
|
||||||
|
'ecPrevProtGrp': begin Int := ecPrevProtGrp; exit(true); end;
|
||||||
else exit(false);
|
else exit(false);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
@ -1001,6 +1010,8 @@ begin
|
||||||
ecUpperCaseWordOrSel: begin Ident := 'ecUpperCaseWordOrSel'; exit(true); end;
|
ecUpperCaseWordOrSel: begin Ident := 'ecUpperCaseWordOrSel'; exit(true); end;
|
||||||
ecLowerCaseWordOrSel: begin Ident := 'ecLowerCaseWordOrSel'; exit(true); end;
|
ecLowerCaseWordOrSel: begin Ident := 'ecLowerCaseWordOrSel'; exit(true); end;
|
||||||
ecSortLines: begin Ident := 'ecSortLines'; exit(true); end;
|
ecSortLines: begin Ident := 'ecSortLines'; exit(true); end;
|
||||||
|
ecNextProtGrp: begin Ident := 'ecNextProtGrp'; exit(true); end;
|
||||||
|
ecPrevProtGrp: begin Ident := 'ecPrevProtGrp'; exit(true); end;
|
||||||
else exit(false);
|
else exit(false);
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
@ -1060,6 +1071,10 @@ begin
|
||||||
setSelectionOrWordCase(false);
|
setSelectionOrWordCase(false);
|
||||||
ecSortLines:
|
ecSortLines:
|
||||||
sortLines;
|
sortLines;
|
||||||
|
ecPrevProtGrp:
|
||||||
|
previousProtectionGroup;
|
||||||
|
ecNextProtGrp:
|
||||||
|
nextProtectionGroup;
|
||||||
end;
|
end;
|
||||||
if fOverrideColMode and not SelAvail then
|
if fOverrideColMode and not SelAvail then
|
||||||
begin
|
begin
|
||||||
|
@ -1526,6 +1541,50 @@ begin
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TCESynMemo.gotoToProtectionGroup(next: boolean);
|
||||||
|
var
|
||||||
|
i: integer;
|
||||||
|
tk0, tk1: PLexToken;
|
||||||
|
tk: PLexToken = nil;
|
||||||
|
begin
|
||||||
|
fLexToks.Clear;
|
||||||
|
lex(Lines.Text, fLexToks, nil, [lxoNoComments, lxoNoWhites]);
|
||||||
|
for i:=0 to fLexToks.Count-2 do
|
||||||
|
begin
|
||||||
|
tk0 := fLexToks[i];
|
||||||
|
tk1 := fLexToks[i+1];
|
||||||
|
if not next then
|
||||||
|
begin
|
||||||
|
if tk0^.position.Y >= caretY then
|
||||||
|
break;
|
||||||
|
end
|
||||||
|
else if tk0^.position.Y <= caretY then
|
||||||
|
continue;
|
||||||
|
if tk0^.kind = ltkKeyword then
|
||||||
|
case tk0^.Data of
|
||||||
|
'public','private','protected','package','export':
|
||||||
|
if (tk1^.kind = ltkSymbol) and (tk1^.Data[1] in ['{',':']) then
|
||||||
|
begin
|
||||||
|
tk := tk0;
|
||||||
|
if next then
|
||||||
|
break;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
if assigned(tk) then
|
||||||
|
ExecuteCommand(ecGotoXY, #0, @tk^.position);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCESynMemo.previousProtectionGroup;
|
||||||
|
begin
|
||||||
|
gotoToProtectionGroup(false);
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCESynMemo.nextProtectionGroup;
|
||||||
|
begin
|
||||||
|
gotoToProtectionGroup(true);
|
||||||
|
end;
|
||||||
|
|
||||||
function TCESynMemo.implementMain: THasMain;
|
function TCESynMemo.implementMain: THasMain;
|
||||||
var
|
var
|
||||||
res: char = '0';
|
res: char = '0';
|
||||||
|
@ -1562,6 +1621,7 @@ var
|
||||||
tk0, tk1: PLexToken;
|
tk0, tk1: PLexToken;
|
||||||
str: string;
|
str: string;
|
||||||
begin
|
begin
|
||||||
|
fLexToks.Clear;
|
||||||
if value in [autoCloseBackTick, autoCloseDoubleQuote] then
|
if value in [autoCloseBackTick, autoCloseDoubleQuote] then
|
||||||
begin
|
begin
|
||||||
p := selStart;
|
p := selStart;
|
||||||
|
@ -1962,10 +2022,10 @@ begin
|
||||||
fHasModuleDeclaration := false;
|
fHasModuleDeclaration := false;
|
||||||
if checkModule and isDSource then
|
if checkModule and isDSource then
|
||||||
begin
|
begin
|
||||||
|
fLexToks.Clear;
|
||||||
lex(Lines.Text, fLexToks, @tokFoundForCaption, [lxoNoComments]);
|
lex(Lines.Text, fLexToks, @tokFoundForCaption, [lxoNoComments]);
|
||||||
if fHasModuleDeclaration then
|
if fHasModuleDeclaration then
|
||||||
result := getModuleName(fLexToks);
|
result := getModuleName(fLexToks);
|
||||||
fLexToks.Clear;
|
|
||||||
end;
|
end;
|
||||||
if result.length = 0 then
|
if result.length = 0 then
|
||||||
begin
|
begin
|
||||||
|
|
Loading…
Reference in New Issue