ADDED src/natools-s_expressions-file_writers.adb Index: src/natools-s_expressions-file_writers.adb ================================================================== --- src/natools-s_expressions-file_writers.adb +++ src/natools-s_expressions-file_writers.adb @@ -0,0 +1,77 @@ +------------------------------------------------------------------------------ +-- Copyright (c) 2014, Natacha Porté -- +-- -- +-- Permission to use, copy, modify, and distribute this software for any -- +-- purpose with or without fee is hereby granted, provided that the above -- +-- copyright notice and this permission notice appear in all copies. -- +-- -- +-- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -- +-- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -- +-- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -- +-- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -- +-- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -- +-- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -- +-- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -- +------------------------------------------------------------------------------ + +package body Natools.S_Expressions.File_Writers is + + package Stream_IO renames Ada.Streams.Stream_IO; + + + overriding procedure Finalize (Object : in out Autoclose) is + begin + if Stream_IO.Is_Open (Object.File) then + Stream_IO.Close (Object.File); + end if; + end Finalize; + + + ------------------------- + -- S-Expression Writer -- + ------------------------- + + overriding procedure Write_Raw + (Output : in out Writer; + Data : in Ada.Streams.Stream_Element_Array) is + begin + Stream_IO.Write (Output.Holder.File, Data); + end Write_Raw; + + + function Create (Name : String; Form : String := "") return Writer is + begin + return Result : Writer do + Create (Result, Name, Form); + end return; + end Create; + + + function Open (Name : String; Form : String := "") return Writer is + begin + return Result : Writer do + Open (Result, Name, Form); + end return; + end Open; + + + procedure Create + (Self : in out Writer; + Name : in String; + Form : in String := "") is + begin + Finalize (Self.Holder); + Stream_IO.Create (Self.Holder.File, Stream_IO.Append_File, Name, Form); + end Create; + + + procedure Open + (Self : in out Writer; + Name : in String; + Form : in String := "") is + begin + Finalize (Self.Holder); + Stream_IO.Open (Self.Holder.File, Stream_IO.Append_File, Name, Form); + end Open; + +end Natools.S_Expressions.File_Writers; ADDED src/natools-s_expressions-file_writers.ads Index: src/natools-s_expressions-file_writers.ads ================================================================== --- src/natools-s_expressions-file_writers.ads +++ src/natools-s_expressions-file_writers.ads @@ -0,0 +1,64 @@ +------------------------------------------------------------------------------ +-- Copyright (c) 2014, Natacha Porté -- +-- -- +-- Permission to use, copy, modify, and distribute this software for any -- +-- purpose with or without fee is hereby granted, provided that the above -- +-- copyright notice and this permission notice appear in all copies. -- +-- -- +-- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -- +-- WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -- +-- MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -- +-- ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -- +-- WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -- +-- ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -- +-- OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -- +------------------------------------------------------------------------------ + +------------------------------------------------------------------------------ +-- Natools.S_Expressions.File_Writers provides a pretty printer -- +-- implementation using Stream_IO as backend. -- +------------------------------------------------------------------------------ + +with Natools.S_Expressions.Printers.Pretty; + +private with Ada.Finalization; +private with Ada.Streams.Stream_IO; + +package Natools.S_Expressions.File_Writers is + + type Writer is limited new Printers.Pretty.Printer with private; + + function Create (Name : String; Form : String := "") return Writer; + function Open (Name : String; Form : String := "") return Writer; + -- Constructors using respectively Stream_IO.Create and Stream_IO.Open + + procedure Create + (Self : in out Writer; + Name : in String; + Form : in String := ""); + procedure Open + (Self : in out Writer; + Name : in String; + Form : in String := ""); + -- Reinitialize Self using Stream_IO.Create or Stream_IO.Open + +private + + type Autoclose is new Ada.Finalization.Limited_Controlled with record + File : Ada.Streams.Stream_IO.File_Type; + end record; + + overriding procedure Finalize (Object : in out Autoclose); + -- Close the underlying file if it was opened + + + type Writer is limited new Printers.Pretty.Printer with record + Holder : Autoclose; + end record; + + overriding procedure Write_Raw + (Output : in out Writer; + Data : in Ada.Streams.Stream_Element_Array); + -- Write data into the underlying stream + +end Natools.S_Expressions.File_Writers;