Pretty printing library for Ada
This project provides an ability to generate nice formated Ada sources from your program. Instead of plenty of Put_Line statements you just create desired Ada constructions in form of a tree and then print it in a file.
Run
make all install PREFIX=/path/to/install
It depends on Matreshka library.
Add with "ada_pretty";
in your project file.
Example:
with Ada.Characters.Wide_Wide_Latin_1;
with Ada.Wide_Wide_Text_IO;
with League.Strings;
with Ada_Pretty;
procedure Test is
function "+" (Text : Wide_Wide_String)
return League.Strings.Universal_String
renames League.Strings.To_Universal_String;
procedure Print_API;
procedure Print_Core_Spec_And_Body;
F : aliased Ada_Pretty.Factory;
Convention : constant Ada_Pretty.Node_Access := F.New_Aspect
(F.New_Name (+"Convention"),
F.New_Name (+"C"));
Import : constant Ada_Pretty.Node_Access := F.New_Aspect
(F.New_Name (+"Import"),
F.New_Name (+"True"));
Name : constant Ada_Pretty.Node_Access :=
F.New_Selected_Name (+"Qt_Ada.API.Strings");
Clause : constant Ada_Pretty.Node_Access := F.New_With
(F.New_Selected_Name (+"System.Storage_Elements"));
Preelaborate : constant Ada_Pretty.Node_Access := F.New_Pragma
(F.New_Name (+"Preelaborate"));
QString : constant Ada_Pretty.Node_Access :=
F.New_Name (+"QString");
QString_Type : constant Ada_Pretty.Node_Access := F.New_Type
(Name => QString,
Definition => F.New_Record,
Aspects => Convention);
QString_Access : constant Ada_Pretty.Node_Access := F.New_Type
(Name => F.New_Name (+"QString_Access"),
Definition => F.New_Access (True, QString),
Aspects => Convention);
Link_Name : constant Ada_Pretty.Node_Access := F.New_Aspect
(F.New_Name (+"Link_Name"),
F.New_String_Literal (+"__qtada__QString__storage_size"));
Aspect_List : constant Ada_Pretty.Node_Access :=
F.New_List
(F.New_List (Import, Convention),
Link_Name);
QString_Storage_Size : constant Ada_Pretty.Node_Access :=
F.New_Variable
(Name => F.New_Name (+"QString_Storage_Size"),
Type_Definition => F.New_Selected_Name
(+"System.Storage_Elements.Storage_Offset"),
Is_Constant => True,
Aspects => Aspect_List);
Public : constant Ada_Pretty.Node_Access := F.New_List
((Preelaborate, QString_Type, QString_Access, QString_Storage_Size));
Root : constant Ada_Pretty.Node_Access :=
F.New_Package (Name, Public);
Unit : constant Ada_Pretty.Node_Access :=
F.New_Compilation_Unit (Root, Clause);
LF : constant Wide_Wide_Character := Ada.Characters.Wide_Wide_Latin_1.LF;
begin
Ada.Wide_Wide_Text_IO.Put_Line
(F.To_Text (Unit).Join (LF).To_Wide_Wide_String);
end Test;
Result:
with System.Storage_Elements;
package Qt_Ada.API.Strings is
pragma Preelaborate;
type QString is null record with Convention => C;
type QString_Access is access all QString with Convention => C;
QString_Storage_Size : constant System.Storage_Elements.Storage_Offset
with Import => True,
Convention => C,
Link_Name => "__qtada__QString__storage_size";
end Qt_Ada.API.Strings;
Feel free to dive in! Open an issue or submit PRs.
MIT © Maxim Reznik