Index: src/natools-s_expressions-printers.adb ================================================================== --- src/natools-s_expressions-printers.adb +++ src/natools-s_expressions-printers.adb @@ -44,28 +44,32 @@ 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; Index: src/natools-s_expressions-printers.ads ================================================================== --- src/natools-s_expressions-printers.ads +++ src/natools-s_expressions-printers.ads @@ -39,11 +39,12 @@ procedure Append_Atom (Output : in out Printer; Data : in Atom) is abstract; procedure Close_List (Output : in out Printer) is abstract; procedure Transfer (Source : in out Descriptor'Class; - Target : in out Printer'Class); + Target : in out Printer'Class; + Check_Level : in Boolean := False); type Canonical (Stream : access Ada.Streams.Root_Stream_Type'Class) is new Printer with null record; overriding procedure Open_List (Output : in out Canonical);