src/Pure/Thy/present.ML
author wenzelm
Sun, 15 Nov 2020 17:34:19 +0100
changeset 72613 d01ea9e3bd2d
parent 72612 878c73cdfa0d
child 72616 217e6cf61453
permissions -rw-r--r--
clarified bibtex_entries: refer to overall session structure;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6203
328b4377755c Theory presentation (fake implementation);
wenzelm
parents:
diff changeset
     1
(*  Title:      Pure/Thy/present.ML
9416
9144976964e7 removed all_sessions.graph;
wenzelm
parents: 9136
diff changeset
     2
    Author:     Markus Wenzel and Stefan Berghofer, TU Muenchen
6203
328b4377755c Theory presentation (fake implementation);
wenzelm
parents:
diff changeset
     3
59448
149d2bc5ddb6 prefer plain session_graph.pdf over GraphBrowser applet;
wenzelm
parents: 59446
diff changeset
     4
Theory presentation: HTML and PDF-LaTeX documents.
6203
328b4377755c Theory presentation (fake implementation);
wenzelm
parents:
diff changeset
     5
*)
328b4377755c Theory presentation (fake implementation);
wenzelm
parents:
diff changeset
     6
328b4377755c Theory presentation (fake implementation);
wenzelm
parents:
diff changeset
     7
signature PRESENT =
328b4377755c Theory presentation (fake implementation);
wenzelm
parents:
diff changeset
     8
sig
66037
58d2e41afbfe more official session qualifier;
wenzelm
parents: 65505
diff changeset
     9
  val theory_qualifier: theory -> string
72574
d892f6d66402 build documents in Isabelle/Scala, based on generated tex files as session exports;
wenzelm
parents: 72511
diff changeset
    10
  val init: HTML.symbols -> bool -> Path.T -> string list -> string * string -> bool -> unit
59445
2c27c3d1fd3b provide session_graph.pdf via Isabelle/Scala;
wenzelm
parents: 59244
diff changeset
    11
  val finish: unit -> unit
72613
d01ea9e3bd2d clarified bibtex_entries: refer to overall session structure;
wenzelm
parents: 72612
diff changeset
    12
  val begin_theory: int -> (unit -> HTML.text) -> theory -> theory
6203
328b4377755c Theory presentation (fake implementation);
wenzelm
parents:
diff changeset
    13
end;
328b4377755c Theory presentation (fake implementation);
wenzelm
parents:
diff changeset
    14
7685
3edd32d588a6 improved theory_source presentation (hook);
wenzelm
parents: 6325
diff changeset
    15
structure Present: PRESENT =
3edd32d588a6 improved theory_source presentation (hook);
wenzelm
parents: 6325
diff changeset
    16
struct
3edd32d588a6 improved theory_source presentation (hook);
wenzelm
parents: 6325
diff changeset
    17
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    18
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    19
(** paths **)
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    20
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    21
val html_ext = Path.ext "html";
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    22
val html_path = html_ext o Path.basic;
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    23
val index_path = Path.basic "index.html";
11856
a35af478aee4 graceful interpretation of -i/-d/-D options;
wenzelm
parents: 11580
diff changeset
    24
val readme_html_path = Path.basic "README.html";
59448
149d2bc5ddb6 prefer plain session_graph.pdf over GraphBrowser applet;
wenzelm
parents: 59446
diff changeset
    25
val session_graph_path = Path.basic "session_graph.pdf";
72310
a756e464e9e3 tuned signature;
wenzelm
parents: 72309
diff changeset
    26
val document_path = Path.ext "pdf" o Path.basic;
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    27
62550
f1baa15a6a0c tuned -- more standard operations;
wenzelm
parents: 62549
diff changeset
    28
fun show_path path = Path.implode (Path.expand (File.full_path Path.current path));
11856
a35af478aee4 graceful interpretation of -i/-d/-D options;
wenzelm
parents: 11580
diff changeset
    29
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    30
14922
88c1e108d0bf added Present.drafts;
wenzelm
parents: 14898
diff changeset
    31
72047
b9e9ff3a1e1c more thorough extend/merge (for Theory.join_theory);
wenzelm
parents: 71611
diff changeset
    32
(** theory data **)
b9e9ff3a1e1c more thorough extend/merge (for Theory.join_theory);
wenzelm
parents: 71611
diff changeset
    33
72613
d01ea9e3bd2d clarified bibtex_entries: refer to overall session structure;
wenzelm
parents: 72612
diff changeset
    34
type browser_info = {chapter: string, name: string};
d01ea9e3bd2d clarified bibtex_entries: refer to overall session structure;
wenzelm
parents: 72612
diff changeset
    35
val empty_browser_info: browser_info = {chapter = "Unsorted", name = "Unknown"};
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    36
42008
7423e833a880 Present.init/finish/no_document are not thread-safe -- eliminated futile CRITICAL sections;
wenzelm
parents: 42007
diff changeset
    37
structure Browser_Info = Theory_Data
22846
fb79144af9a3 simplified DataFun interfaces;
wenzelm
parents: 22580
diff changeset
    38
(
72047
b9e9ff3a1e1c more thorough extend/merge (for Theory.join_theory);
wenzelm
parents: 71611
diff changeset
    39
  type T = browser_info
b9e9ff3a1e1c more thorough extend/merge (for Theory.join_theory);
wenzelm
parents: 71611
diff changeset
    40
  val empty = empty_browser_info;
b9e9ff3a1e1c more thorough extend/merge (for Theory.join_theory);
wenzelm
parents: 71611
diff changeset
    41
  val extend = I;
b9e9ff3a1e1c more thorough extend/merge (for Theory.join_theory);
wenzelm
parents: 71611
diff changeset
    42
  val merge = #1;
22846
fb79144af9a3 simplified DataFun interfaces;
wenzelm
parents: 22580
diff changeset
    43
);
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    44
72047
b9e9ff3a1e1c more thorough extend/merge (for Theory.join_theory);
wenzelm
parents: 71611
diff changeset
    45
fun reset_browser_info thy =
b9e9ff3a1e1c more thorough extend/merge (for Theory.join_theory);
wenzelm
parents: 71611
diff changeset
    46
  if Browser_Info.get thy = empty_browser_info then NONE
b9e9ff3a1e1c more thorough extend/merge (for Theory.join_theory);
wenzelm
parents: 71611
diff changeset
    47
  else SOME (Browser_Info.put empty_browser_info thy);
b9e9ff3a1e1c more thorough extend/merge (for Theory.join_theory);
wenzelm
parents: 71611
diff changeset
    48
b9e9ff3a1e1c more thorough extend/merge (for Theory.join_theory);
wenzelm
parents: 71611
diff changeset
    49
val _ =
b9e9ff3a1e1c more thorough extend/merge (for Theory.join_theory);
wenzelm
parents: 71611
diff changeset
    50
  Theory.setup
b9e9ff3a1e1c more thorough extend/merge (for Theory.join_theory);
wenzelm
parents: 71611
diff changeset
    51
   (Theory.at_begin reset_browser_info #>
72613
d01ea9e3bd2d clarified bibtex_entries: refer to overall session structure;
wenzelm
parents: 72612
diff changeset
    52
    Browser_Info.put {chapter = Context.PureN, name = Context.PureN});
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    53
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    54
72047
b9e9ff3a1e1c more thorough extend/merge (for Theory.join_theory);
wenzelm
parents: 71611
diff changeset
    55
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    56
(** global browser info state **)
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    57
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    58
(* type browser_info *)
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    59
54455
1d977436c1bf removed remains of HTML presentation of auxiliary files -- inactive since Isabelle2013;
wenzelm
parents: 53171
diff changeset
    60
type browser_info =
72574
d892f6d66402 build documents in Isabelle/Scala, based on generated tex files as session exports;
wenzelm
parents: 72511
diff changeset
    61
 {html_theories: string Symtab.table,
59448
149d2bc5ddb6 prefer plain session_graph.pdf over GraphBrowser applet;
wenzelm
parents: 59446
diff changeset
    62
  html_index: (int * string) list};
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    63
72574
d892f6d66402 build documents in Isabelle/Scala, based on generated tex files as session exports;
wenzelm
parents: 72511
diff changeset
    64
fun make_browser_info (html_theories, html_index) : browser_info =
d892f6d66402 build documents in Isabelle/Scala, based on generated tex files as session exports;
wenzelm
parents: 72511
diff changeset
    65
  {html_theories = html_theories, html_index = html_index};
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    66
72574
d892f6d66402 build documents in Isabelle/Scala, based on generated tex files as session exports;
wenzelm
parents: 72511
diff changeset
    67
val empty_browser_info = make_browser_info (Symtab.empty, []);
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    68
72574
d892f6d66402 build documents in Isabelle/Scala, based on generated tex files as session exports;
wenzelm
parents: 72511
diff changeset
    69
fun map_browser_info f {html_theories, html_index} =
d892f6d66402 build documents in Isabelle/Scala, based on generated tex files as session exports;
wenzelm
parents: 72511
diff changeset
    70
  make_browser_info (f (html_theories, html_index));
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    71
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    72
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    73
(* state *)
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    74
59173
cdcbda56b05b proper Synchronized.var;
wenzelm
parents: 59058
diff changeset
    75
val browser_info = Synchronized.var "browser_info" empty_browser_info;
cdcbda56b05b proper Synchronized.var;
wenzelm
parents: 59058
diff changeset
    76
fun change_browser_info f = Synchronized.change browser_info (map_browser_info f);
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    77
72574
d892f6d66402 build documents in Isabelle/Scala, based on generated tex files as session exports;
wenzelm
parents: 72511
diff changeset
    78
fun update_html name html = change_browser_info (apfst (Symtab.update (name, html)));
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    79
72574
d892f6d66402 build documents in Isabelle/Scala, based on generated tex files as session exports;
wenzelm
parents: 72511
diff changeset
    80
fun add_html_index txt = change_browser_info (apsnd (cons txt));
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    81
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    82
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    83
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    84
(** global session state **)
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    85
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    86
(* session_info *)
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    87
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    88
type session_info =
61381
ddca85598c65 more explicit HTML.symbols;
wenzelm
parents: 61372
diff changeset
    89
  {symbols: HTML.symbols, name: string, chapter: string, info_path: Path.T, info: bool,
72574
d892f6d66402 build documents in Isabelle/Scala, based on generated tex files as session exports;
wenzelm
parents: 72511
diff changeset
    90
    verbose: bool, readme: Path.T option};
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    91
9416
9144976964e7 removed all_sessions.graph;
wenzelm
parents: 9136
diff changeset
    92
fun make_session_info
72574
d892f6d66402 build documents in Isabelle/Scala, based on generated tex files as session exports;
wenzelm
parents: 72511
diff changeset
    93
  (symbols, name, chapter, info_path, info, verbose, readme) =
61381
ddca85598c65 more explicit HTML.symbols;
wenzelm
parents: 61372
diff changeset
    94
  {symbols = symbols, name = name, chapter = chapter, info_path = info_path, info = info,
72574
d892f6d66402 build documents in Isabelle/Scala, based on generated tex files as session exports;
wenzelm
parents: 72511
diff changeset
    95
    verbose = verbose, readme = readme}: session_info;
7685
3edd32d588a6 improved theory_source presentation (hook);
wenzelm
parents: 6325
diff changeset
    96
3edd32d588a6 improved theory_source presentation (hook);
wenzelm
parents: 6325
diff changeset
    97
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    98
(* state *)
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
    99
32738
15bb09ca0378 explicit indication of Unsynchronized.ref;
wenzelm
parents: 31819
diff changeset
   100
val session_info = Unsynchronized.ref (NONE: session_info option);
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
   101
51399
6ac3c29a300e discontinued "isabelle usedir" option -r (reset session path);
wenzelm
parents: 51398
diff changeset
   102
fun with_session_info x f = (case ! session_info of NONE => x | SOME info => f info);
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
   103
66037
58d2e41afbfe more official session qualifier;
wenzelm
parents: 65505
diff changeset
   104
val theory_qualifier = Resources.theory_qualifier o Context.theory_long_name;
58d2e41afbfe more official session qualifier;
wenzelm
parents: 65505
diff changeset
   105
65505
741fad555d82 exclude theories from other sessions;
wenzelm
parents: 65492
diff changeset
   106
fun is_session_theory thy =
741fad555d82 exclude theories from other sessions;
wenzelm
parents: 65492
diff changeset
   107
  (case ! session_info of
741fad555d82 exclude theories from other sessions;
wenzelm
parents: 65492
diff changeset
   108
    NONE => false
66037
58d2e41afbfe more official session qualifier;
wenzelm
parents: 65505
diff changeset
   109
  | SOME {name, ...} => name = theory_qualifier thy);
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
   110
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
   111
14922
88c1e108d0bf added Present.drafts;
wenzelm
parents: 14898
diff changeset
   112
(** document preparation **)
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
   113
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
   114
(* init session *)
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
   115
72574
d892f6d66402 build documents in Isabelle/Scala, based on generated tex files as session exports;
wenzelm
parents: 72511
diff changeset
   116
fun init symbols info info_path documents (chapter, name) verbose =
71611
fb6953e77000 eliminated pointless flag (see also 6533ceee4cd7);
wenzelm
parents: 68511
diff changeset
   117
  let
fb6953e77000 eliminated pointless flag (see also 6533ceee4cd7);
wenzelm
parents: 68511
diff changeset
   118
    val readme = if File.exists readme_html_path then SOME readme_html_path else NONE;
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
   119
71611
fb6953e77000 eliminated pointless flag (see also 6533ceee4cd7);
wenzelm
parents: 68511
diff changeset
   120
    val docs =
fb6953e77000 eliminated pointless flag (see also 6533ceee4cd7);
wenzelm
parents: 68511
diff changeset
   121
      (case readme of NONE => [] | SOME p => [(Url.File p, "README")]) @
72574
d892f6d66402 build documents in Isabelle/Scala, based on generated tex files as session exports;
wenzelm
parents: 72511
diff changeset
   122
        map (fn name => (Url.File (document_path name), name)) documents;
71611
fb6953e77000 eliminated pointless flag (see also 6533ceee4cd7);
wenzelm
parents: 68511
diff changeset
   123
  in
fb6953e77000 eliminated pointless flag (see also 6533ceee4cd7);
wenzelm
parents: 68511
diff changeset
   124
    session_info :=
72574
d892f6d66402 build documents in Isabelle/Scala, based on generated tex files as session exports;
wenzelm
parents: 72511
diff changeset
   125
      SOME (make_session_info (symbols, name, chapter, info_path, info, verbose, readme));
71611
fb6953e77000 eliminated pointless flag (see also 6533ceee4cd7);
wenzelm
parents: 68511
diff changeset
   126
    Synchronized.change browser_info (K empty_browser_info);
fb6953e77000 eliminated pointless flag (see also 6533ceee4cd7);
wenzelm
parents: 68511
diff changeset
   127
    add_html_index (0, HTML.begin_session_index symbols name (Url.File session_graph_path) docs)
fb6953e77000 eliminated pointless flag (see also 6533ceee4cd7);
wenzelm
parents: 68511
diff changeset
   128
  end;
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
   129
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
   130
11856
a35af478aee4 graceful interpretation of -i/-d/-D options;
wenzelm
parents: 11580
diff changeset
   131
(* finish session -- output all generated text *)
a35af478aee4 graceful interpretation of -i/-d/-D options;
wenzelm
parents: 11580
diff changeset
   132
59058
a78612c67ec0 renamed "pairself" to "apply2", in accordance to @{apply 2};
wenzelm
parents: 58870
diff changeset
   133
fun sorted_index index = map snd (sort (int_ord o apply2 fst) (rev index));
24150
ed724867099a sort indexes according to symbolic update_time (multithreading-safe);
wenzelm
parents: 24102
diff changeset
   134
fun index_buffer index = Buffer.add (implode (sorted_index index)) Buffer.empty;
ed724867099a sort indexes according to symbolic update_time (multithreading-safe);
wenzelm
parents: 24102
diff changeset
   135
72574
d892f6d66402 build documents in Isabelle/Scala, based on generated tex files as session exports;
wenzelm
parents: 72511
diff changeset
   136
fun finish () = with_session_info () (fn {name, chapter, info, info_path, verbose, readme, ...} =>
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
   137
  let
72574
d892f6d66402 build documents in Isabelle/Scala, based on generated tex files as session exports;
wenzelm
parents: 72511
diff changeset
   138
    val {html_theories, html_index} = Synchronized.value browser_info;
51399
6ac3c29a300e discontinued "isabelle usedir" option -r (reset session path);
wenzelm
parents: 51398
diff changeset
   139
72511
460d743010bc clarified signature: overloaded "+" for Path.append;
wenzelm
parents: 72375
diff changeset
   140
    val session_prefix = info_path + Path.basic chapter + Path.basic name;
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
   141
72574
d892f6d66402 build documents in Isabelle/Scala, based on generated tex files as session exports;
wenzelm
parents: 72511
diff changeset
   142
    fun finish_html (a, html) = File.write (session_prefix + html_path a) html;
11856
a35af478aee4 graceful interpretation of -i/-d/-D options;
wenzelm
parents: 11580
diff changeset
   143
42007
2142883ec29f eliminated redundant doc_prefix1;
wenzelm
parents: 42006
diff changeset
   144
    val _ =
2142883ec29f eliminated redundant doc_prefix1;
wenzelm
parents: 42006
diff changeset
   145
      if info then
72375
e48d93811ed7 clarified signature;
wenzelm
parents: 72321
diff changeset
   146
       (Isabelle_System.make_directory session_prefix;
72511
460d743010bc clarified signature: overloaded "+" for Path.append;
wenzelm
parents: 72375
diff changeset
   147
        File.write_buffer (session_prefix + index_path)
51399
6ac3c29a300e discontinued "isabelle usedir" option -r (reset session path);
wenzelm
parents: 51398
diff changeset
   148
          (index_buffer html_index |> Buffer.add HTML.end_document);
56533
cd8b6d849b6a explicit 'document_files' in session ROOT specifications;
wenzelm
parents: 56531
diff changeset
   149
        (case readme of NONE => () | SOME path => Isabelle_System.copy_file path session_prefix);
72574
d892f6d66402 build documents in Isabelle/Scala, based on generated tex files as session exports;
wenzelm
parents: 72511
diff changeset
   150
        Symtab.fold (K o finish_html) html_theories ();
54455
1d977436c1bf removed remains of HTML presentation of auxiliary files -- inactive since Isabelle2013;
wenzelm
parents: 53171
diff changeset
   151
        if verbose
1d977436c1bf removed remains of HTML presentation of auxiliary files -- inactive since Isabelle2013;
wenzelm
parents: 53171
diff changeset
   152
        then Output.physical_stderr ("Browser info at " ^ show_path session_prefix ^ "\n")
42007
2142883ec29f eliminated redundant doc_prefix1;
wenzelm
parents: 42006
diff changeset
   153
        else ())
2142883ec29f eliminated redundant doc_prefix1;
wenzelm
parents: 42006
diff changeset
   154
      else ();
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
   155
  in
59173
cdcbda56b05b proper Synchronized.var;
wenzelm
parents: 59058
diff changeset
   156
    Synchronized.change browser_info (K empty_browser_info);
15531
08c8dad8e399 Deleted Library.option type.
skalberg
parents: 15159
diff changeset
   157
    session_info := NONE
42008
7423e833a880 Present.init/finish/no_document are not thread-safe -- eliminated futile CRITICAL sections;
wenzelm
parents: 42007
diff changeset
   158
  end);
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
   159
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
   160
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
   161
(* theory elements *)
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
   162
59448
149d2bc5ddb6 prefer plain session_graph.pdf over GraphBrowser applet;
wenzelm
parents: 59446
diff changeset
   163
fun theory_link (curr_chapter, curr_session) thy =
149d2bc5ddb6 prefer plain session_graph.pdf over GraphBrowser applet;
wenzelm
parents: 59446
diff changeset
   164
  let
67297
86a099f896fc formal check of @{cite} bibtex entries -- only in batch-mode session builds;
wenzelm
parents: 67285
diff changeset
   165
    val {chapter, name = session, ...} = Browser_Info.get thy;
59448
149d2bc5ddb6 prefer plain session_graph.pdf over GraphBrowser applet;
wenzelm
parents: 59446
diff changeset
   166
    val link = html_path (Context.theory_name thy);
149d2bc5ddb6 prefer plain session_graph.pdf over GraphBrowser applet;
wenzelm
parents: 59446
diff changeset
   167
  in
149d2bc5ddb6 prefer plain session_graph.pdf over GraphBrowser applet;
wenzelm
parents: 59446
diff changeset
   168
    if curr_session = session then SOME link
149d2bc5ddb6 prefer plain session_graph.pdf over GraphBrowser applet;
wenzelm
parents: 59446
diff changeset
   169
    else if curr_chapter = chapter then
72511
460d743010bc clarified signature: overloaded "+" for Path.append;
wenzelm
parents: 72375
diff changeset
   170
      SOME (Path.parent + Path.basic session + link)
59448
149d2bc5ddb6 prefer plain session_graph.pdf over GraphBrowser applet;
wenzelm
parents: 59446
diff changeset
   171
    else if chapter = Context.PureN then NONE
72511
460d743010bc clarified signature: overloaded "+" for Path.append;
wenzelm
parents: 72375
diff changeset
   172
    else SOME (Path.parent + Path.parent + Path.basic chapter + Path.basic session + link)
59448
149d2bc5ddb6 prefer plain session_graph.pdf over GraphBrowser applet;
wenzelm
parents: 59446
diff changeset
   173
  end;
149d2bc5ddb6 prefer plain session_graph.pdf over GraphBrowser applet;
wenzelm
parents: 59446
diff changeset
   174
72613
d01ea9e3bd2d clarified bibtex_entries: refer to overall session structure;
wenzelm
parents: 72612
diff changeset
   175
fun begin_theory update_time mk_text thy =
61381
ddca85598c65 more explicit HTML.symbols;
wenzelm
parents: 61372
diff changeset
   176
  with_session_info thy (fn {symbols, name = session_name, chapter, ...} =>
54456
f4b1440d9880 simplified HTML theory presentation;
wenzelm
parents: 54455
diff changeset
   177
    let
f4b1440d9880 simplified HTML theory presentation;
wenzelm
parents: 54455
diff changeset
   178
      val name = Context.theory_name thy;
f4b1440d9880 simplified HTML theory presentation;
wenzelm
parents: 54455
diff changeset
   179
65505
741fad555d82 exclude theories from other sessions;
wenzelm
parents: 65492
diff changeset
   180
      val parent_specs =
741fad555d82 exclude theories from other sessions;
wenzelm
parents: 65492
diff changeset
   181
        Theory.parents_of thy |> map (fn parent =>
741fad555d82 exclude theories from other sessions;
wenzelm
parents: 65492
diff changeset
   182
          (Option.map Url.File (theory_link (chapter, session_name) parent),
741fad555d82 exclude theories from other sessions;
wenzelm
parents: 65492
diff changeset
   183
            (Context.theory_name parent)));
72574
d892f6d66402 build documents in Isabelle/Scala, based on generated tex files as session exports;
wenzelm
parents: 72511
diff changeset
   184
d892f6d66402 build documents in Isabelle/Scala, based on generated tex files as session exports;
wenzelm
parents: 72511
diff changeset
   185
      val _ = update_html name (HTML.theory symbols name parent_specs (mk_text ()));
65505
741fad555d82 exclude theories from other sessions;
wenzelm
parents: 65492
diff changeset
   186
72613
d01ea9e3bd2d clarified bibtex_entries: refer to overall session structure;
wenzelm
parents: 72612
diff changeset
   187
      val _ =
65505
741fad555d82 exclude theories from other sessions;
wenzelm
parents: 65492
diff changeset
   188
        if is_session_theory thy then
72613
d01ea9e3bd2d clarified bibtex_entries: refer to overall session structure;
wenzelm
parents: 72612
diff changeset
   189
          add_html_index (update_time, HTML.theory_entry symbols (Url.File (html_path name), name))
d01ea9e3bd2d clarified bibtex_entries: refer to overall session structure;
wenzelm
parents: 72612
diff changeset
   190
        else ();
d01ea9e3bd2d clarified bibtex_entries: refer to overall session structure;
wenzelm
parents: 72612
diff changeset
   191
    in thy |> Browser_Info.put {chapter = chapter, name = session_name} end);
7727
b52c7d773121 include browser_info stuff;
wenzelm
parents: 7685
diff changeset
   192
7685
3edd32d588a6 improved theory_source presentation (hook);
wenzelm
parents: 6325
diff changeset
   193
end;