Natools

Diff
Login

Differences From Artifact [a821173aae]:

To Artifact [52aa58b1a0]:


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
   begin
      Output.Stream.Write ((0 => Encodings.List_End));
   end Close_List;


   procedure Transfer
     (Source : in out Descriptor'Class;
      Target : in out Printer'Class)

   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;

   begin
      loop
         case Event is
            when Events.Error | Events.End_Of_Input =>
               exit;
            when Events.Open_List =>
               Target.Open_List;
            when Events.Close_List =>


               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;







|
>









>








>
>










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;
      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;