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
|
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
|
-
+
+
+
+
+
|
begin
Output.Stream.Write ((0 => Encodings.List_End));
end Close_List;
procedure Transfer
(Source : in out Descriptor'Class;
Target : in out Printer'Class)
Target : in out Printer'Class;
Check_Level : in Boolean := False)
is
procedure Print_Atom (Data : in Atom);
procedure Print_Atom (Data : in Atom) is
begin
Target.Append_Atom (Data);
end Print_Atom;
Event : Events.Event := Source.Current_Event;
Starting_Level : constant Natural := Source.Current_Level;
begin
loop
case Event is
when Events.Error | Events.End_Of_Input =>
exit;
when Events.Open_List =>
Target.Open_List;
when Events.Close_List =>
exit when Check_Level
and then Source.Current_Level < Starting_Level;
Target.Close_List;
when Events.Add_Atom =>
Source.Query_Atom (Print_Atom'Access);
end case;
Source.Next (Event);
end loop;
end Transfer;
end Natools.S_Expressions.Printers;
|