tuned print_state interfaces;
authorwenzelm
Sat, 08 Dec 2001 14:43:48 +0100
changeset 12423 7fd447422dee
parent 12422 7389066a4df9
child 12424 3c70d99b7586
tuned print_state interfaces;
src/Pure/Isar/proof.ML
src/Pure/Isar/toplevel.ML
--- a/src/Pure/Isar/proof.ML	Sat Dec 08 14:43:16 2001 +0100
+++ b/src/Pure/Isar/proof.ML	Sat Dec 08 14:43:48 2001 +0100
@@ -38,7 +38,7 @@
   val assert_no_chain: state -> state
   val enter_forward: state -> state
   val verbose: bool ref
-  val print_state: int -> state -> unit
+  val pretty_state: int -> state -> Pretty.T list
   val pretty_goals: bool -> state -> Pretty.T list
   val level: state -> int
   type method
@@ -323,7 +323,7 @@
 
 
 
-(** print_state **)
+(** pretty_state **)
 
 val verbose = ProofContext.verbose;
 
@@ -334,7 +334,7 @@
   | pretty_facts s ctxt (Some ths) =
       [Pretty.big_list (s ^ "this:") (map (ProofContext.pretty_thm ctxt) ths), Pretty.str ""];
 
-fun print_state nr (state as State (Node {context = ctxt, facts, mode, goal = _}, nodes)) =
+fun pretty_state nr (state as State (Node {context = ctxt, facts, mode, goal = _}, nodes)) =
   let
     val ref (_, _, begin_goal) = Display.current_goals_markers;
 
@@ -372,7 +372,7 @@
        (pretty_facts "" ctxt facts @ prt_goal (find_goal state))
       else if mode = ForwardChain then pretty_facts "picking " ctxt facts
       else prt_goal (find_goal state))
-  in Pretty.writeln (Pretty.chunks prts) end;
+  in prts end;
 
 fun pretty_goals main state =
   let val (ctxt, (_, ((_, (_, thm)), _))) = find_goal state
--- a/src/Pure/Isar/toplevel.ML	Sat Dec 08 14:43:16 2001 +0100
+++ b/src/Pure/Isar/toplevel.ML	Sat Dec 08 14:43:48 2001 +0100
@@ -18,6 +18,7 @@
   val print_state_default: bool -> state -> unit
   val print_state_fn: (bool -> state -> unit) ref
   val print_state: bool -> state -> unit
+  val pretty_state: bool -> state -> Pretty.T list
   exception UNDEF
   val node_history_of: state -> node History.T
   val node_of: state -> node
@@ -85,17 +86,17 @@
 fun str_of_node (Theory _) = "in theory mode"
   | str_of_node (Proof _) = "in proof mode";
 
-fun print_ctxt thy = Pretty.writeln (Pretty.block
+fun pretty_context thy = [Pretty.block
   [Pretty.str "theory", Pretty.brk 1, Pretty.str (PureThy.get_name thy),
-    Pretty.str " =", Pretty.brk 1, Display.pretty_theory thy]);
+    Pretty.str " =", Pretty.brk 1, Display.pretty_theory thy]];
 
-fun print_prf prf = Proof.print_state (ProofHistory.position prf) (ProofHistory.current prf);
+fun pretty_prf prf = Proof.pretty_state (ProofHistory.position prf) (ProofHistory.current prf);
 
-fun print_node_ctxt (Theory thy) = print_ctxt thy
-  | print_node_ctxt (Proof prf) = print_ctxt (Proof.theory_of (ProofHistory.current prf));
+fun pretty_node_context (Theory thy) = pretty_context thy
+  | pretty_node_context (Proof prf) = pretty_context (Proof.theory_of (ProofHistory.current prf));
 
-fun print_node prf_only (Theory thy) = if prf_only then () else print_ctxt thy
-  | print_node _ (Proof prf) = print_prf prf;
+fun pretty_node prf_only (Theory thy) = if prf_only then [] else pretty_context thy
+  | pretty_node _ (Proof prf) = pretty_prf prf;
 
 
 (* datatype state *)
@@ -121,18 +122,21 @@
 
 (* print state *)
 
-fun print_current_node _ (State None) = ()
-  | print_current_node prt (State (Some (node, _))) = prt (History.current node);
+fun pretty_current_node _ (State None) = []
+  | pretty_current_node prt (State (Some (node, _))) = prt (History.current node);
 
-val print_state_context = print_current_node print_node_ctxt;
+val print_state_context =
+  Pretty.writeln o Pretty.chunks o pretty_current_node pretty_node_context;
 
-fun print_state_default prf_only state =
+fun pretty_state prf_only state =
   let val ref (begin_state, end_state, _) = Display.current_goals_markers in
-    if begin_state = "" then () else writeln begin_state;
-    print_current_node (print_node prf_only) state;
-    if end_state = "" then () else writeln end_state
+    (case pretty_current_node (pretty_node prf_only) state of [] => []
+    | prts =>
+        (if begin_state = "" then [] else [Pretty.str begin_state]) @ prts @
+        (if end_state = "" then [] else [Pretty.str end_state]))
   end;
 
+fun print_state_default prf_only state = Pretty.writelns (pretty_state prf_only state);
 val print_state_fn = ref print_state_default;
 fun print_state state = ! print_state_fn state;