tuned;
authorwenzelm
Thu, 11 Apr 2019 21:01:59 +0200
changeset 70129 740db500654d
parent 70128 f2f797260010
child 70130 c7866e763e9f
tuned;
src/Pure/Thy/thy_output.ML
--- a/src/Pure/Thy/thy_output.ML	Thu Apr 11 17:16:03 2019 +0100
+++ b/src/Pure/Thy/thy_output.ML	Thu Apr 11 21:01:59 2019 +0200
@@ -240,6 +240,9 @@
 fun open_delim delim e = edge #2 Latex.begin_delim e #> delim #> edge #2 Latex.end_delim e;
 fun close_delim delim e = edge #1 Latex.begin_delim e #> delim #> edge #1 Latex.end_delim e;
 
+fun document_tag ctxt tag =
+  try hd (fold (update (op =)) (Document_Source.get_tags ctxt) (the_list tag));
+
 fun read_tag s =
   (case space_explode "%" s of
     ["", b] => (SOME b, NONE)
@@ -255,27 +258,22 @@
     val document_tags_default = map_filter #1 document_tags;
     val document_tags_command = map_filter #2 document_tags;
   in
-    fn {cmd_name, cmd_tags, tag, active_tag} => fn state => fn state' =>
+    fn cmd_name => fn state => fn state' => fn active_tag =>
       let
-        val tag' = try hd (fold (update (op =)) cmd_tags (the_list tag));
-
         val keyword_tags =
           if cmd_name = "end" andalso Toplevel.is_end_theory state' then ["theory"]
           else Keyword.command_tags keywords cmd_name;
         val command_tags =
           the_list (AList.lookup (op =) document_tags_command cmd_name) @
           keyword_tags @ document_tags_default;
-
         val active_tag' =
-          if is_some tag' then tag'
-          else
-            (case command_tags of
-              default_tag :: _ => SOME default_tag
-            | [] =>
-                if Keyword.is_vacuous keywords cmd_name andalso Toplevel.is_proof state
-                then active_tag
-                else NONE);
-      in {tag' = tag', active_tag' = active_tag'} end
+          (case command_tags of
+            default_tag :: _ => SOME default_tag
+          | [] =>
+              if Keyword.is_vacuous keywords cmd_name andalso Toplevel.is_proof state
+              then active_tag
+              else NONE);
+      in active_tag' end
   end;
 
 fun present_span command_tag span state state'
@@ -288,12 +286,12 @@
       | _ => I);
 
     val Span ((cmd_name, cmd_pos), srcs, span_newline) = span;
-    val cmd_tags = Document_Source.get_tags ctxt';
 
     val (tag, tags) = tag_stack;
-    val {tag', active_tag'} =
-      command_tag {cmd_name = cmd_name, cmd_tags = cmd_tags, tag = tag, active_tag = active_tag}
-        state state';
+    val tag' = document_tag ctxt' tag;
+    val active_tag' =
+      if is_some tag' then tag'
+      else command_tag cmd_name state state' active_tag;
     val edge = (active_tag, active_tag');
 
     val nesting = Toplevel.level state' - Toplevel.level state;