mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-08-14 08:19:27 +02:00
IDE: started auto indent
git-svn-id: trunk@20597 -
This commit is contained in:
parent
8f48f1eb62
commit
dfe698865a
@ -44,7 +44,7 @@ unit CodeBeautifier;
|
|||||||
interface
|
interface
|
||||||
|
|
||||||
{ $DEFINE ShowCodeBeautifier}
|
{ $DEFINE ShowCodeBeautifier}
|
||||||
{$DEFINE ShowCodeBeautifierParser}
|
{ $DEFINE ShowCodeBeautifierParser}
|
||||||
|
|
||||||
uses
|
uses
|
||||||
Classes, SysUtils, AVL_Tree, FileProcs, KeywordFuncLists, CodeCache,
|
Classes, SysUtils, AVL_Tree, FileProcs, KeywordFuncLists, CodeCache,
|
||||||
|
34
ide/main.pp
34
ide/main.pp
@ -77,8 +77,8 @@ uses
|
|||||||
LResources, StdCtrls, Forms, Buttons, Menus, FileUtil, Controls, GraphType,
|
LResources, StdCtrls, Forms, Buttons, Menus, FileUtil, Controls, GraphType,
|
||||||
HelpIntfs, Graphics, ExtCtrls, Dialogs, InterfaceBase, LDockCtrl, UTF8Process,
|
HelpIntfs, Graphics, ExtCtrls, Dialogs, InterfaceBase, LDockCtrl, UTF8Process,
|
||||||
// codetools
|
// codetools
|
||||||
FindDeclarationTool, LinkScanner, BasicCodeTools, AVL_Tree, Laz_XMLCfg,
|
CodeBeautifier, FindDeclarationTool, LinkScanner, BasicCodeTools, AVL_Tree,
|
||||||
CodeToolsStructs, CodeToolManager, CodeCache, DefineTemplates,
|
Laz_XMLCfg, CodeToolsStructs, CodeToolManager, CodeCache, DefineTemplates,
|
||||||
// synedit
|
// synedit
|
||||||
SynEditKeyCmds,
|
SynEditKeyCmds,
|
||||||
// IDE interface
|
// IDE interface
|
||||||
@ -362,8 +362,8 @@ type
|
|||||||
Button: TMouseButton; Shift: TShiftstate; X, Y: Integer);
|
Button: TMouseButton; Shift: TShiftstate; X, Y: Integer);
|
||||||
procedure OnSrcNoteBookMouseLink(
|
procedure OnSrcNoteBookMouseLink(
|
||||||
Sender: TObject; X, Y: Integer; var AllowMouseLink: Boolean);
|
Sender: TObject; X, Y: Integer; var AllowMouseLink: Boolean);
|
||||||
procedure OnSrcNoteBookGetDesiredIndent(Sender: TObject; SrcEditor: TSourceEditor;
|
procedure OnSrcNoteBookGetIndent(Sender: TObject; SrcEditor: TSourceEditor;
|
||||||
LogCaret: TPoint; Line: Integer; var Indent, BasedLine: Integer;
|
LogCaret: TPoint; var Indent, BasedLine: Integer;
|
||||||
var ReplaceIndent: Boolean);
|
var ReplaceIndent: Boolean);
|
||||||
procedure OnSrcNotebookDeleteLastJumPoint(Sender: TObject);
|
procedure OnSrcNotebookDeleteLastJumPoint(Sender: TObject);
|
||||||
procedure OnSrcNotebookEditorVisibleChanged(Sender: TObject);
|
procedure OnSrcNotebookEditorVisibleChanged(Sender: TObject);
|
||||||
@ -1823,7 +1823,7 @@ begin
|
|||||||
SourceNotebook.OnCloseClicked := @OnSrcNotebookFileClose;
|
SourceNotebook.OnCloseClicked := @OnSrcNotebookFileClose;
|
||||||
SourceNotebook.OnClickLink := @OnSrcNoteBookClickLink;
|
SourceNotebook.OnClickLink := @OnSrcNoteBookClickLink;
|
||||||
SourceNotebook.OnMouseLink := @OnSrcNoteBookMouseLink;
|
SourceNotebook.OnMouseLink := @OnSrcNoteBookMouseLink;
|
||||||
SourceNotebook.OnGetDesiredIndent := @OnSrcNoteBookGetDesiredIndent;
|
SourceNotebook.OnGetIndent := @OnSrcNoteBookGetIndent;
|
||||||
SourceNotebook.OnCurrentCodeBufferChanged:=@OnSrcNotebookCurCodeBufferChanged;
|
SourceNotebook.OnCurrentCodeBufferChanged:=@OnSrcNotebookCurCodeBufferChanged;
|
||||||
SourceNotebook.OnDeleteLastJumpPoint := @OnSrcNotebookDeleteLastJumPoint;
|
SourceNotebook.OnDeleteLastJumpPoint := @OnSrcNotebookDeleteLastJumPoint;
|
||||||
SourceNotebook.OnEditorVisibleChanged := @OnSrcNotebookEditorVisibleChanged;
|
SourceNotebook.OnEditorVisibleChanged := @OnSrcNotebookEditorVisibleChanged;
|
||||||
@ -12390,6 +12390,8 @@ begin
|
|||||||
DoSwitchToFormSrc(ADesigner,ActiveSrcEdit,ActiveUnitInfo)
|
DoSwitchToFormSrc(ADesigner,ActiveSrcEdit,ActiveUnitInfo)
|
||||||
else if ADesigner<>nil then
|
else if ADesigner<>nil then
|
||||||
GetDesignerUnit(ADesigner,ActiveSrcEdit,ActiveUnitInfo)
|
GetDesignerUnit(ADesigner,ActiveSrcEdit,ActiveUnitInfo)
|
||||||
|
else if ActiveSrcEdit<>nil then
|
||||||
|
ActiveUnitInfo:=Project1.UnitWithEditorIndex(ActiveSrcEdit.PageIndex)
|
||||||
else
|
else
|
||||||
GetCurrentUnit(ActiveSrcEdit,ActiveUnitInfo);
|
GetCurrentUnit(ActiveSrcEdit,ActiveUnitInfo);
|
||||||
if (not (ctfSourceEditorNotNeeded in Flags))
|
if (not (ctfSourceEditorNotNeeded in Flags))
|
||||||
@ -13989,11 +13991,27 @@ begin
|
|||||||
ActiveUnitInfo.Source,X,Y,NewSource,NewX,NewY,NewTopLine);
|
ActiveUnitInfo.Source,X,Y,NewSource,NewX,NewY,NewTopLine);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.OnSrcNoteBookGetDesiredIndent(Sender: TObject;
|
procedure TMainIDE.OnSrcNoteBookGetIndent(Sender: TObject;
|
||||||
SrcEditor: TSourceEditor; LogCaret: TPoint; Line: Integer; var Indent,
|
SrcEditor: TSourceEditor; LogCaret: TPoint; var Indent,
|
||||||
BasedLine: Integer; var ReplaceIndent: Boolean);
|
BasedLine: Integer; var ReplaceIndent: Boolean);
|
||||||
|
var
|
||||||
|
CodeBuf: TCodeBuffer;
|
||||||
|
p: integer;
|
||||||
|
NestedComments: Boolean;
|
||||||
|
NewIndent: TFABIndentationPolicy;
|
||||||
begin
|
begin
|
||||||
// ToDo
|
{$IFNDEF EnableIndent}
|
||||||
|
exit;
|
||||||
|
{$ENDIF}
|
||||||
|
CodeBuf:=SrcEditor.CodeBuffer;
|
||||||
|
CodeBuf.LineColToPosition(LogCaret.Y,LogCaret.X,p);
|
||||||
|
debugln(['TMainIDE.OnSrcNoteBookGetIndent AAA1 ',dbgs(LogCaret),' p=',p,' ',CodeBuf.Filename,' ',CodeBuf.SourceLength]);
|
||||||
|
if p<1 then exit;
|
||||||
|
NestedComments:=CodeToolBoss.GetNestedCommentsFlagForFile(CodeBuf.Filename);
|
||||||
|
if not CodeToolBoss.Indenter.GetIndent(CodeBuf.Source,p,NestedComments,NewIndent)
|
||||||
|
then exit;
|
||||||
|
debugln(['TMainIDE.OnSrcNoteBookGetIndent AAA2 ',NewIndent.IndentValid,' ',NewIndent.Indent]);
|
||||||
|
if not NewIndent.IndentValid then exit;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TMainIDE.OnSrcNotebookMovingPage(Sender: TObject; OldPageIndex,
|
procedure TMainIDE.OnSrcNotebookMovingPage(Sender: TObject; OldPageIndex,
|
||||||
|
@ -107,10 +107,6 @@ type
|
|||||||
|
|
||||||
TSourceEditor = class;
|
TSourceEditor = class;
|
||||||
|
|
||||||
TOnGetIndentEvent = procedure(Sender: TObject; SrcEditor: TSourceEditor;
|
|
||||||
LogCaret: TPoint; Line: Integer;
|
|
||||||
var Indent, BasedLine: Integer; var ReplaceIndent: Boolean) of object;
|
|
||||||
|
|
||||||
{ TSourceEditor }
|
{ TSourceEditor }
|
||||||
|
|
||||||
TSourceEditor = class(TSourceEditorInterface)
|
TSourceEditor = class(TSourceEditorInterface)
|
||||||
@ -123,7 +119,6 @@ type
|
|||||||
FCodeTemplates: TSynEditAutoComplete;
|
FCodeTemplates: TSynEditAutoComplete;
|
||||||
FHasExecutionMarks: Boolean;
|
FHasExecutionMarks: Boolean;
|
||||||
FMarksRequested: Boolean;
|
FMarksRequested: Boolean;
|
||||||
FOnGetDesiredIndent: TOnGetIndentEvent;
|
|
||||||
FPageName: string;
|
FPageName: string;
|
||||||
|
|
||||||
FCodeBuffer: TCodeBuffer;
|
FCodeBuffer: TCodeBuffer;
|
||||||
@ -166,8 +161,6 @@ type
|
|||||||
procedure EditorMouseWheel(Sender: TObject; Shift: TShiftState;
|
procedure EditorMouseWheel(Sender: TObject; Shift: TShiftState;
|
||||||
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
|
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
|
||||||
procedure EditorKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
procedure EditorKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||||
procedure EditorGetIndent(Sender: TObject; LogCaret: TPoint; Line: Integer;
|
|
||||||
var Indent, BasedLine: Integer; var ReplaceIndent: Boolean);
|
|
||||||
procedure EditorStatusChanged(Sender: TObject; Changes: TSynStatusChanges);
|
procedure EditorStatusChanged(Sender: TObject; Changes: TSynStatusChanges);
|
||||||
procedure SetCodeBuffer(NewCodeBuffer: TCodeBuffer);
|
procedure SetCodeBuffer(NewCodeBuffer: TCodeBuffer);
|
||||||
function GetSource: TStrings;
|
function GetSource: TStrings;
|
||||||
@ -392,8 +385,6 @@ type
|
|||||||
property OnMouseLink: TSynMouseLinkEvent read FOnMouseLink write FOnMouseLink;
|
property OnMouseLink: TSynMouseLinkEvent read FOnMouseLink write FOnMouseLink;
|
||||||
property OnMouseWheel: TMouseWheelEvent read FOnMouseWheel write FOnMouseWheel;
|
property OnMouseWheel: TMouseWheelEvent read FOnMouseWheel write FOnMouseWheel;
|
||||||
property OnKeyDown: TKeyEvent read FOnKeyDown write FOnKeyDown;
|
property OnKeyDown: TKeyEvent read FOnKeyDown write FOnKeyDown;
|
||||||
property OnGetDesiredIndent: TOnGetIndentEvent
|
|
||||||
read FOnGetDesiredIndent write FOnGetDesiredIndent;
|
|
||||||
property Owner: TComponent read FAOwner;
|
property Owner: TComponent read FAOwner;
|
||||||
property PageName: string read FPageName write SetPageName;
|
property PageName: string read FPageName write SetPageName;
|
||||||
property PopupMenu: TPopupMenu read FPopUpMenu write SetPopUpMenu;
|
property PopupMenu: TPopupMenu read FPopUpMenu write SetPopUpMenu;
|
||||||
@ -426,6 +417,10 @@ type
|
|||||||
) of object;
|
) of object;
|
||||||
TOnShowCodeContext = procedure(JumpToError: boolean;
|
TOnShowCodeContext = procedure(JumpToError: boolean;
|
||||||
out Abort: boolean) of object;
|
out Abort: boolean) of object;
|
||||||
|
TOnGetIndentEvent = procedure(Sender: TObject; SrcEditor: TSourceEditor;
|
||||||
|
LogCaret: TPoint;
|
||||||
|
var Indent, BasedLine: Integer; var ReplaceIndent: Boolean) of object;
|
||||||
|
|
||||||
|
|
||||||
TSourceNotebookState = (
|
TSourceNotebookState = (
|
||||||
snIncrementalFind,
|
snIncrementalFind,
|
||||||
@ -544,7 +539,7 @@ type
|
|||||||
FActiveEditKeyBGColor: TColor;
|
FActiveEditKeyBGColor: TColor;
|
||||||
FActiveEditSymbolFGColor: TColor;
|
FActiveEditSymbolFGColor: TColor;
|
||||||
FActiveEditSymbolBGColor: TColor;
|
FActiveEditSymbolBGColor: TColor;
|
||||||
FOnGetDesiredIndent: TOnGetIndentEvent;
|
FOnGetIndent: TOnGetIndentEvent;
|
||||||
|
|
||||||
// PopupMenu
|
// PopupMenu
|
||||||
procedure BuildPopupMenu;
|
procedure BuildPopupMenu;
|
||||||
@ -608,9 +603,8 @@ type
|
|||||||
Shift: TShiftstate; X,Y: Integer);
|
Shift: TShiftstate; X,Y: Integer);
|
||||||
procedure EditorMouseLink(
|
procedure EditorMouseLink(
|
||||||
Sender: TObject; X,Y: Integer; var AllowMouseLink: Boolean);
|
Sender: TObject; X,Y: Integer; var AllowMouseLink: Boolean);
|
||||||
procedure EditorGetIndent(Sender: TObject; SrcEditor: TSourceEditor;
|
procedure EditorGetIndent(Sender: TObject; LogCaret: TPoint; Line: Integer;
|
||||||
LogCaret: TPoint; Line: Integer;
|
var Indent, BasedLine: Integer; var ReplaceIndent: Boolean);
|
||||||
var Indent, BasedLine: Integer; var ReplaceIndent: Boolean);
|
|
||||||
procedure EditorKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
procedure EditorKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||||
procedure EditorMouseWheel(Sender: TObject; Shift: TShiftState;
|
procedure EditorMouseWheel(Sender: TObject; Shift: TShiftState;
|
||||||
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
|
WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
|
||||||
@ -796,8 +790,8 @@ type
|
|||||||
read FOnCloseClicked write FOnCloseClicked;
|
read FOnCloseClicked write FOnCloseClicked;
|
||||||
property OnClickLink: TMouseEvent read FOnClickLink write FOnClickLink;
|
property OnClickLink: TMouseEvent read FOnClickLink write FOnClickLink;
|
||||||
property OnMouseLink: TSynMouseLinkEvent read FOnMouseLink write FOnMouseLink;
|
property OnMouseLink: TSynMouseLinkEvent read FOnMouseLink write FOnMouseLink;
|
||||||
property OnGetDesiredIndent: TOnGetIndentEvent
|
property OnGetIndent: TOnGetIndentEvent
|
||||||
read FOnGetDesiredIndent write FOnGetDesiredIndent;
|
read FOnGetIndent write FOnGetIndent;
|
||||||
property OnDeleteLastJumpPoint: TNotifyEvent
|
property OnDeleteLastJumpPoint: TNotifyEvent
|
||||||
read FOnDeleteLastJumpPoint write FOnDeleteLastJumpPoint;
|
read FOnDeleteLastJumpPoint write FOnDeleteLastJumpPoint;
|
||||||
property OnEditorVisibleChanged: TNotifyEvent
|
property OnEditorVisibleChanged: TNotifyEvent
|
||||||
@ -2544,7 +2538,6 @@ Begin
|
|||||||
OnClickLink := @EditorClickLink;
|
OnClickLink := @EditorClickLink;
|
||||||
OnMouseLink := @EditorMouseLink;
|
OnMouseLink := @EditorMouseLink;
|
||||||
OnKeyDown := @EditorKeyDown;
|
OnKeyDown := @EditorKeyDown;
|
||||||
Beautifier.OnGetDesiredIndent := @EditorGetIndent;
|
|
||||||
// IMPORTANT: when you change above, don't forget updating UnbindEditor
|
// IMPORTANT: when you change above, don't forget updating UnbindEditor
|
||||||
|
|
||||||
end;
|
end;
|
||||||
@ -3011,13 +3004,6 @@ begin
|
|||||||
OnKeyDown(Sender, Key, Shift);
|
OnKeyDown(Sender, Key, Shift);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSourceEditor.EditorGetIndent(Sender: TObject; LogCaret: TPoint;
|
|
||||||
Line: Integer; var Indent, BasedLine: Integer; var ReplaceIndent: Boolean);
|
|
||||||
begin
|
|
||||||
if Assigned(OnGetDesiredIndent) then
|
|
||||||
OnGetDesiredIndent(Sender, Self, LogCaret, Line, Indent, BasedLine, ReplaceIndent);
|
|
||||||
end;
|
|
||||||
|
|
||||||
Function TSourceEditor.GetCaretPosFromCursorPos(const CursorPos: TPoint): TPoint;
|
Function TSourceEditor.GetCaretPosFromCursorPos(const CursorPos: TPoint): TPoint;
|
||||||
var
|
var
|
||||||
NewTopLine: Integer;
|
NewTopLine: Integer;
|
||||||
@ -3353,7 +3339,6 @@ begin
|
|||||||
OnClickLink := nil;
|
OnClickLink := nil;
|
||||||
OnMouseLink := nil;
|
OnMouseLink := nil;
|
||||||
OnKeyDown := nil;
|
OnKeyDown := nil;
|
||||||
Beautifier.OnGetDesiredIndent := nil;
|
|
||||||
end;
|
end;
|
||||||
if FEditPlugin<>nil then begin
|
if FEditPlugin<>nil then begin
|
||||||
FEditPlugin.OnLinesInserted := nil;
|
FEditPlugin.OnLinesInserted := nil;
|
||||||
@ -4819,7 +4804,7 @@ begin
|
|||||||
Result.OnClickLink := @EditorClickLink;
|
Result.OnClickLink := @EditorClickLink;
|
||||||
Result.OnMouseLink := @EditorMouseLink;
|
Result.OnMouseLink := @EditorMouseLink;
|
||||||
Result.OnKeyDown := @EditorKeyDown;
|
Result.OnKeyDown := @EditorKeyDown;
|
||||||
Result.OnGetDesiredIndent := @EditorGetIndent;
|
Result.EditorComponent.Beautifier.OnGetDesiredIndent := @EditorGetIndent;
|
||||||
|
|
||||||
Result.EditorComponent.EndUpdate;
|
Result.EditorComponent.EndUpdate;
|
||||||
{$IFDEF IDE_DEBUG}
|
{$IFDEF IDE_DEBUG}
|
||||||
@ -6699,12 +6684,11 @@ begin
|
|||||||
OnMouseLink(Sender, X, Y, AllowMouseLink);
|
OnMouseLink(Sender, X, Y, AllowMouseLink);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TSourceNotebook.EditorGetIndent(Sender: TObject;
|
procedure TSourceNotebook.EditorGetIndent(Sender: TObject; LogCaret: TPoint;
|
||||||
SrcEditor: TSourceEditor; LogCaret: TPoint; Line: Integer; var Indent,
|
Line: Integer; var Indent, BasedLine: Integer; var ReplaceIndent: Boolean);
|
||||||
BasedLine: Integer; var ReplaceIndent: Boolean);
|
|
||||||
begin
|
begin
|
||||||
if Assigned(OnGetDesiredIndent) then
|
if Assigned(OnGetIndent) then
|
||||||
OnGetDesiredIndent(Sender, SrcEditor, LogCaret, Line, Indent, BasedLine, ReplaceIndent);
|
OnGetIndent(Sender, GetActiveSE, LogCaret, Indent, BasedLine, ReplaceIndent);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Procedure TSourceNotebook.HintTimer(sender: TObject);
|
Procedure TSourceNotebook.HintTimer(sender: TObject);
|
||||||
|
Loading…
Reference in New Issue
Block a user