1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105 | -----------------------------------------------------------------------
-- wiki-streams-text_io -- Text_IO input output streams
-- Copyright (C) 2016, 2020, 2022 Stephane Carrez
-- Written by Stephane Carrez (Stephane.Carrez@gmail.com)
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
-----------------------------------------------------------------------
with Ada.Wide_Wide_Text_IO;
with Ada.Finalization;
-- === Text_IO Input and Output streams ===
-- The `Wiki.Streams.Text_IO` package defines the `File_Input_Stream` and
-- the `File_Output_Stream` types which use the `Ada.Wide_Wide_Text_IO` package
-- to read or write the output streams.
--
-- By default the `File_Input_Stream` is configured to read the standard input.
-- The `Open` procedure can be used to read from a file knowing its name.
--
-- The `File_Output_Stream` is configured to write on the standard output.
-- The `Open` and `Create` procedure can be used to write on a file.
--
package Wiki.Streams.Text_IO is
type File_Input_Stream is limited new Ada.Finalization.Limited_Controlled
and Wiki.Streams.Input_Stream with private;
type File_Input_Stream_Access is access all File_Input_Stream'Class;
-- Open the file and prepare to read the input stream.
procedure Open (Stream : in out File_Input_Stream;
Path : in String;
Form : in String := "");
-- Read the input stream and fill the `Into` buffer until either it is full or
-- we reach the end of line. Returns in `Last` the last valid position in the
-- `Into` buffer. When there is no character to read, return True in
-- the `Eof` indicator.
overriding
procedure Read (Input : in out File_Input_Stream;
Into : in out Wiki.Strings.WString;
Last : out Natural;
Eof : out Boolean);
-- Close the file.
procedure Close (Stream : in out File_Input_Stream);
-- Close the stream.
overriding
procedure Finalize (Stream : in out File_Input_Stream);
type File_Output_Stream is limited new Ada.Finalization.Limited_Controlled
and Wiki.Streams.Output_Stream with private;
type File_Output_Stream_Access is access all File_Output_Stream'Class;
-- Open the file and prepare to write the output stream.
procedure Open (Stream : in out File_Output_Stream;
Path : in String;
Form : in String := "");
-- Create the file and prepare to write the output stream.
procedure Create (Stream : in out File_Output_Stream;
Path : in String;
Form : in String := "");
-- Close the file.
procedure Close (Stream : in out File_Output_Stream);
-- Write the string to the output stream.
overriding
procedure Write (Stream : in out File_Output_Stream;
Content : in Wiki.Strings.WString);
-- Write a single character to the output stream.
overriding
procedure Write (Stream : in out File_Output_Stream;
Char : in Wiki.Strings.WChar);
-- Close the stream.
overriding
procedure Finalize (Stream : in out File_Output_Stream);
private
type File_Input_Stream is limited new Ada.Finalization.Limited_Controlled
and Wiki.Streams.Input_Stream with record
File : Ada.Wide_Wide_Text_IO.File_Type;
Stdin : Boolean := True;
end record;
type File_Output_Stream is limited new Ada.Finalization.Limited_Controlled
and Wiki.Streams.Output_Stream with record
File : Ada.Wide_Wide_Text_IO.File_Type;
Stdout : Boolean := True;
end record;
end Wiki.Streams.Text_IO;
|