Skip to content

Commit b3f1dad

Browse files
committed
Merge branch 'topic/vadim/odf' into 'master'
Support of images by ODF backend See merge request eng/ide/gnatdoc!176
2 parents 9704a51 + f83ce4b commit b3f1dad

23 files changed

+547
-7
lines changed

documentation/project_file.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ include any project files directly or undirectly used by the root project.
1919
Note, externally build library project files are excluded from the
2020
documentation generation unconditionally.
2121

22+
## Image_Dirs
23+
24+
List of directories (relative to directory of the root project file) to lookup
25+
for images referenced in the documentation.
26+
2227
## Output_Dir
2328

2429
Allows to specify output directory for the generated documentation.

documentation/users_guide/backends.rst

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,17 @@ Layout of the resources directory
4646
style documentation is specified)
4747

4848

49+
ODF
50+
===
51+
52+
The ODF backend can be used to generate documentation in OpenDocument Format
53+
(ODF) format. The generated file can be opened by many office suites
54+
(Microsoft Word, LibreOffice Writer, etc) to apply different styles and print
55+
the documentation.
56+
57+
Output can be customized by providing a custom
58+
*<resources_dir>/template/documentation.fodt* file.
59+
4960

5061
RST
5162
===

documentation/users_guide/configuration.rst

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,3 +69,17 @@ and templates can be specified via the string attribute *Resources_Dir* of the
6969

7070
Each backend has own conventions on the layout of the resources directory: see
7171
the documentation of the particular backend.
72+
73+
74+
Images directories
75+
------------------
76+
77+
78+
List of directories to lookup for image files referenced in the documentation
79+
can be defined with *Image_Dirs* attribute of the root project file::
80+
81+
package Documentation is
82+
for Image_Dirs ("odf") use ("images");
83+
end Documentation;
84+
85+
By default paths are resolved relatively to the project file's root directory.

source/backend/odf/gnatdoc-backend-odf.adb

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ with VSS.XML.XmlAda_Readers;
2020
with VSS.XML.Templates.Processors;
2121
with VSS.XML.Writers.Simple;
2222

23+
with GNATdoc.Backend.ODF_Markup.Image_Utilities;
2324
with GNATdoc.Entities.Proxies;
25+
with GNATdoc.Projects;
2426
with Streams;
2527

2628
package body GNATdoc.Backend.ODF is
@@ -118,6 +120,24 @@ package body GNATdoc.Backend.ODF is
118120
Output.Close;
119121
end Generate;
120122

123+
----------------
124+
-- Initialize --
125+
----------------
126+
127+
overriding procedure Initialize (Self : in out ODF_Backend) is
128+
begin
129+
Abstract_Backend (Self).Initialize;
130+
131+
if Self.Image_Directories.Is_Empty then
132+
GNATdoc.Backend.ODF_Markup.Image_Utilities.Set_Image_Directories
133+
([GNATdoc.Projects.Project_File_Directory]);
134+
135+
else
136+
GNATdoc.Backend.ODF_Markup.Image_Utilities.Set_Image_Directories
137+
(Self.Image_Directories);
138+
end if;
139+
end Initialize;
140+
121141
----------------------------------
122142
-- Process_Command_Line_Options --
123143
----------------------------------

source/backend/odf/gnatdoc-backend-odf.ads

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ private
2525
null;
2626
end record;
2727

28-
-- overriding procedure Initialize (Self : in out RST_Backend_Base);
28+
overriding procedure Initialize (Self : in out ODF_Backend);
2929

3030
overriding procedure Generate (Self : in out ODF_Backend);
3131

source/backend/odf/gnatdoc-backend-odf_markup-image_utilities.adb

Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,13 @@ with GNAT.Strings;
2020

2121
with VSS.Strings.Conversions;
2222
with VSS.Strings.Converters.Decoders;
23+
with VSS.Strings.Formatters.Strings;
24+
with VSS.Strings.Templates;
2325

2426
with GNATCOLL.Coders.Base64;
2527

28+
with GNATdoc.Messages;
29+
2630
package body GNATdoc.Backend.ODF_Markup.Image_Utilities is
2731

2832
type Stream_Element_Array_Access is
@@ -32,6 +36,12 @@ package body GNATdoc.Backend.ODF_Markup.Image_Utilities is
3236
new Ada.Unchecked_Deallocation
3337
(Ada.Streams.Stream_Element_Array, Stream_Element_Array_Access);
3438

39+
Image_Directories : GNATdoc.Virtual_File_Vectors.Vector;
40+
41+
Not_Found_Template : constant
42+
VSS.Strings.Templates.Virtual_String_Template :=
43+
"image file '{}' is not found";
44+
3545
-----------------
3646
-- Load_Encode --
3747
-----------------
@@ -42,18 +52,30 @@ package body GNATdoc.Backend.ODF_Markup.Image_Utilities is
4252
is
4353
use type Ada.Streams.Stream_Element_Offset;
4454

55+
Name : constant GNATCOLL.VFS.Filesystem_String :=
56+
GNATCOLL.VFS.Filesystem_String
57+
(VSS.Strings.Conversions.To_UTF_8_String (Destination));
4558
File : GNATCOLL.VFS.Virtual_File;
4659
Binary : GNAT.Strings.String_Access;
4760
Encoded : Stream_Element_Array_Access;
4861
Coder : GNATCOLL.Coders.Base64.Encoder_Type;
4962

5063
begin
51-
File :=
52-
GNATCOLL.VFS.Create_From_UTF8
53-
(VSS.Strings.Conversions.To_UTF_8_String (Destination));
64+
for Directory of Image_Directories loop
65+
File :=
66+
GNATCOLL.VFS.Create_From_Base
67+
(Base_Name => Name,
68+
Base_Dir => Directory.Full_Name.all);
69+
70+
exit when File.Is_Regular_File;
71+
end loop;
5472

5573
if not File.Is_Regular_File then
56-
raise Program_Error;
74+
GNATdoc.Messages.Report_Warning
75+
(Not_Found_Template.Format
76+
(VSS.Strings.Formatters.Strings.Image (Destination)));
77+
78+
return;
5779
end if;
5880

5981
Binary := File.Read_File;
@@ -86,4 +108,14 @@ package body GNATdoc.Backend.ODF_Markup.Image_Utilities is
86108
GNAT.Strings.Free (Binary);
87109
end Load_Encode;
88110

111+
---------------------------
112+
-- Set_Image_Directories --
113+
---------------------------
114+
115+
procedure Set_Image_Directories
116+
(To : GNATdoc.Virtual_File_Vectors.Vector) is
117+
begin
118+
Image_Directories := To;
119+
end Set_Image_Directories;
120+
89121
end GNATdoc.Backend.ODF_Markup.Image_Utilities;

source/backend/odf/gnatdoc-backend-odf_markup-image_utilities.ads

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,7 @@ package GNATdoc.Backend.ODF_Markup.Image_Utilities is
2323
-- Loads given file, converts its content into Base64 encoded form and
2424
-- transforms to `Virtual_String`.
2525

26+
procedure Set_Image_Directories (To : GNATdoc.Virtual_File_Vectors.Vector);
27+
-- Set list of directories to lookup for image files.
28+
2629
end GNATdoc.Backend.ODF_Markup.Image_Utilities;

source/gnatdoc-messages.adb

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,4 +151,18 @@ package body GNATdoc.Messages is
151151
Success);
152152
end Report_Warning;
153153

154+
--------------------
155+
-- Report_Warning --
156+
--------------------
157+
158+
procedure Report_Warning (Text : VSS.Strings.Virtual_String) is
159+
Template : constant Virtual_String_Template := "warning: {}";
160+
Success : Boolean := True;
161+
Stream : VSS.Text_Streams.Output_Text_Stream'Class :=
162+
VSS.Text_Streams.Standards.Standard_Error;
163+
164+
begin
165+
Stream.Put_Line (Template.Format (Image (Text)), Success);
166+
end Report_Warning;
167+
154168
end GNATdoc.Messages;

source/gnatdoc-messages.ads

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ package GNATdoc.Messages is
4040
procedure Report_Warning (Message : GNATdoc.Messages.Message);
4141
-- Output warning to standard error stream.
4242

43+
procedure Report_Warning (Text : VSS.Strings.Virtual_String);
44+
-- Output warning to standard error stream.
45+
4346
procedure Report_Error
4447
(Location : GNATdoc.Source_Location;
4548
Message : VSS.Strings.Virtual_String);

source/gnatdoc/gnatdoc-projects.adb

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,6 +520,15 @@ package body GNATdoc.Projects is
520520
end loop;
521521
end Process_Compilation_Units;
522522

523+
----------------------------
524+
-- Project_File_Directory --
525+
----------------------------
526+
527+
function Project_File_Directory return GNATCOLL.VFS.Virtual_File is
528+
begin
529+
return Project_Tree.Root_Project.Dir_Name.Virtual_File;
530+
end Project_File_Directory;
531+
523532
-------------------------
524533
-- Register_Attributes --
525534
-------------------------

0 commit comments

Comments
 (0)