mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-11-04 06:39:31 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			148 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			148 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
unit pfidesource;
 | 
						|
 | 
						|
{$mode objfpc}{$H+}
 | 
						|
 | 
						|
interface
 | 
						|
 | 
						|
uses
 | 
						|
  Classes, SysUtils,LCLtype;
 | 
						|
 | 
						|
Procedure PrettyPrintSelection(Sender : TObject);
 | 
						|
Procedure PrettyPrintFile(Sender : TObject);
 | 
						|
 | 
						|
Procedure Register;
 | 
						|
 | 
						|
implementation
 | 
						|
 | 
						|
uses menuintf, idecommands, srceditorintf, ptopu;
 | 
						|
 | 
						|
Const
 | 
						|
  SCmdPFSelection = 'PrettyFormatSelection';
 | 
						|
  SCmdPFFile      = 'PrettyFormatFile';
 | 
						|
  SCatFormatting  = 'Formatting';
 | 
						|
 | 
						|
Resourcestring
 | 
						|
  SDescrPFSelection = 'Pretty-Format Selection';
 | 
						|
  SDescrPFFile      = 'Pretty-Format File';
 | 
						|
  SDescrFormatting  = 'Formatting commands';
 | 
						|
 | 
						|
Var
 | 
						|
  CmdFormatSelection : TIDECommand;
 | 
						|
  CmdFormatFile      : TIDECommand;
 | 
						|
 | 
						|
Procedure Register;
 | 
						|
 | 
						|
Var
 | 
						|
  Key : TIDEShortCut;
 | 
						|
  Cat : TIDECommandCategory;
 | 
						|
  
 | 
						|
begin
 | 
						|
  Key:=IDEShortCut(VK_P,[SSctrl,ssShift],VK_UNKNOWN,[]);
 | 
						|
{$ifndef USECustomCategory}
 | 
						|
  Cat:=IDECommandList.CreateCategory(Nil,
 | 
						|
                                    SCatFormatting,
 | 
						|
                                    SDescrFormatting,
 | 
						|
                                    IDECmdScopeSrcEditOnly);
 | 
						|
{$else}
 | 
						|
  cat:=nil,
 | 
						|
{$endif}
 | 
						|
  CmdFormatSelection:=RegisterIDECommand(Cat,
 | 
						|
                                         SCmdPFSelection,
 | 
						|
                                         SDescrPFSelection,
 | 
						|
                                         Key,nil,@PrettyPrintSelection);
 | 
						|
  Key:=IDEShortCut(VK_P,[SSctrl,ssAlt],VK_UNKNOWN,[]);
 | 
						|
  CmdFormatFile:=RegisterIDECommand(Cat,
 | 
						|
                                    SCmdPFFile,
 | 
						|
                                    SDescrPFFile,
 | 
						|
                                    Key,nil,@PrettyPrintFile);
 | 
						|
  RegisterIDEMenuCommand(SrcEditSubMenuRefactor,
 | 
						|
                         SCmdPFSelection,
 | 
						|
                         SDescrPFSelection,
 | 
						|
                         Nil,nil,CmdFormatSelection);
 | 
						|
  RegisterIDEMenuCommand(SrcEditSubMenuRefactor,
 | 
						|
                         SCmdPFFile,
 | 
						|
                         SDescrPFFile,
 | 
						|
                         Nil,nil,CmdFormatFile);
 | 
						|
  RegisterIDEMenuCommand(itmEditBlockIndentation,
 | 
						|
                         SCmdPFSelection,
 | 
						|
                         SDescrPFSelection,
 | 
						|
                         Nil,nil,CmdFormatSelection);
 | 
						|
  RegisterIDEMenuCommand(itmEditBlockIndentation,
 | 
						|
                         SCmdPFFile,
 | 
						|
                         SDescrPFFile,
 | 
						|
                         Nil,nil,CmdFormatFile);
 | 
						|
end;
 | 
						|
 | 
						|
Procedure PrettyPrintStream(SIn,SOut : TStream);
 | 
						|
 | 
						|
Var
 | 
						|
  PP : TPrettyPrinter;
 | 
						|
 | 
						|
begin
 | 
						|
  PP:=TPrettyPrinter.Create;
 | 
						|
  Try
 | 
						|
    PP.Source:=Sin;
 | 
						|
    PP.Dest:=Sout;
 | 
						|
    PP.PrettyPrint;
 | 
						|
  Finally
 | 
						|
    PP.Free;
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
Procedure PrettyPrintSelection(Sender : TObject);
 | 
						|
 | 
						|
Var
 | 
						|
  S1,S2 : TSTringStream;
 | 
						|
  E : TSourceEditorInterface;
 | 
						|
 | 
						|
begin
 | 
						|
  if Sender=nil then ;
 | 
						|
  E:=SourceEditorWindow.ActiveEditor;
 | 
						|
  If (E=Nil) or (Not E.SelectionAvailable) then
 | 
						|
    Exit;
 | 
						|
  S1:=TStringStream.Create(E.Selection);
 | 
						|
  Try
 | 
						|
    S2:=TStringStream.Create('');
 | 
						|
    Try
 | 
						|
      S1.Position:=0;
 | 
						|
      PrettyPrintStream(S1,S2);
 | 
						|
      E.Selection:=S2.DataString;
 | 
						|
    Finally
 | 
						|
      S2.Free;
 | 
						|
    end;
 | 
						|
  Finally
 | 
						|
    S1.Free;
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
Procedure PrettyPrintFile(Sender : TObject);
 | 
						|
 | 
						|
Var
 | 
						|
  S1,S2 : TMemoryStream;
 | 
						|
  E  : TSourceEditorInterface;
 | 
						|
 | 
						|
begin
 | 
						|
  if Sender=nil then ;
 | 
						|
  E:=SourceEditorWindow.ActiveEditor;
 | 
						|
  If (E=Nil) then
 | 
						|
    Exit;
 | 
						|
  S1:=TMemoryStream.Create;
 | 
						|
  Try
 | 
						|
    E.Lines.SaveToStream(S1);
 | 
						|
    S1.Position:=0;
 | 
						|
    S2:=TMemoryStream.Create;
 | 
						|
    Try
 | 
						|
      PrettyPrintStream(S1,S2);
 | 
						|
      S2.Position:=0;
 | 
						|
      E.Lines.LoadFromStream(S2);
 | 
						|
    Finally
 | 
						|
      S2.Free;
 | 
						|
    end;
 | 
						|
  Finally
 | 
						|
    S1.Free;
 | 
						|
  end;
 | 
						|
end;
 | 
						|
 | 
						|
end.
 | 
						|
 |