src/Pure/Thy/export.ML
author wenzelm
Thu, 04 Apr 2019 14:30:58 +0200
changeset 70051 7a4dc1e60dc8
parent 70016 a8142ac5e4b6
child 70055 36fb663145e5
permissions -rw-r--r--
added command 'compile_generated_files'; tuned signature;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
68090
7c8ed28dd40a tuned signature;
wenzelm
parents:
diff changeset
     1
(*  Title:      Pure/Thy/export.ML
7c8ed28dd40a tuned signature;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
7c8ed28dd40a tuned signature;
wenzelm
parents:
diff changeset
     3
68102
813b5d0904c6 clarified signature;
wenzelm
parents: 68101
diff changeset
     4
Manage theory exports: compressed blobs.
68090
7c8ed28dd40a tuned signature;
wenzelm
parents:
diff changeset
     5
*)
7c8ed28dd40a tuned signature;
wenzelm
parents:
diff changeset
     6
7c8ed28dd40a tuned signature;
wenzelm
parents:
diff changeset
     7
signature EXPORT =
7c8ed28dd40a tuned signature;
wenzelm
parents:
diff changeset
     8
sig
70051
7a4dc1e60dc8 added command 'compile_generated_files';
wenzelm
parents: 70016
diff changeset
     9
  val report_export: theory -> Path.binding -> unit
70015
c8e08d8ffb93 clarified signature: more explicit type Path.binding;
wenzelm
parents: 70013
diff changeset
    10
  type params = {theory: theory, binding: Path.binding, executable: bool, compress: bool}
69788
c175499a7537 added executable flag for exports;
wenzelm
parents: 69784
diff changeset
    11
  val export_params: params -> string list -> unit
70015
c8e08d8ffb93 clarified signature: more explicit type Path.binding;
wenzelm
parents: 70013
diff changeset
    12
  val export: theory -> Path.binding -> string list -> unit
c8e08d8ffb93 clarified signature: more explicit type Path.binding;
wenzelm
parents: 70013
diff changeset
    13
  val export_executable: theory -> Path.binding -> string list -> unit
c8e08d8ffb93 clarified signature: more explicit type Path.binding;
wenzelm
parents: 70013
diff changeset
    14
  val export_file: theory -> Path.binding -> Path.T -> unit
c8e08d8ffb93 clarified signature: more explicit type Path.binding;
wenzelm
parents: 70013
diff changeset
    15
  val export_executable_file: theory -> Path.binding -> Path.T -> unit
70009
435fb018e8ee "export_code ... file_prefix ..." is the preferred way to produce output within the logical file-system within the theory context, as well as session exports;
wenzelm
parents: 69788
diff changeset
    16
  val markup: theory -> Path.T -> Markup.T
435fb018e8ee "export_code ... file_prefix ..." is the preferred way to produce output within the logical file-system within the theory context, as well as session exports;
wenzelm
parents: 69788
diff changeset
    17
  val message: theory -> Path.T -> string
68090
7c8ed28dd40a tuned signature;
wenzelm
parents:
diff changeset
    18
end;
7c8ed28dd40a tuned signature;
wenzelm
parents:
diff changeset
    19
7c8ed28dd40a tuned signature;
wenzelm
parents:
diff changeset
    20
structure Export: EXPORT =
7c8ed28dd40a tuned signature;
wenzelm
parents:
diff changeset
    21
struct
7c8ed28dd40a tuned signature;
wenzelm
parents:
diff changeset
    22
69648
97ddaec3e2ae support hyperlink to theory exports;
wenzelm
parents: 69627
diff changeset
    23
(* export *)
97ddaec3e2ae support hyperlink to theory exports;
wenzelm
parents: 69627
diff changeset
    24
70051
7a4dc1e60dc8 added command 'compile_generated_files';
wenzelm
parents: 70016
diff changeset
    25
fun report_export thy binding =
7a4dc1e60dc8 added command 'compile_generated_files';
wenzelm
parents: 70016
diff changeset
    26
  let
7a4dc1e60dc8 added command 'compile_generated_files';
wenzelm
parents: 70016
diff changeset
    27
    val theory_name = Context.theory_long_name thy;
7a4dc1e60dc8 added command 'compile_generated_files';
wenzelm
parents: 70016
diff changeset
    28
    val (path, pos) = Path.dest_binding binding;
7a4dc1e60dc8 added command 'compile_generated_files';
wenzelm
parents: 70016
diff changeset
    29
    val markup = Markup.export_path (Path.implode (Path.append (Path.basic theory_name) path));
7a4dc1e60dc8 added command 'compile_generated_files';
wenzelm
parents: 70016
diff changeset
    30
  in Context_Position.report_generic (Context.Theory thy) pos markup end;
7a4dc1e60dc8 added command 'compile_generated_files';
wenzelm
parents: 70016
diff changeset
    31
70015
c8e08d8ffb93 clarified signature: more explicit type Path.binding;
wenzelm
parents: 70013
diff changeset
    32
type params = {theory: theory, binding: Path.binding, executable: bool, compress: bool};
68105
577072a0ceed more checks;
wenzelm
parents: 68102
diff changeset
    33
70016
a8142ac5e4b6 more PIDE markup and hyperlinks;
wenzelm
parents: 70015
diff changeset
    34
fun export_params ({theory = thy, binding, executable, compress}: params) blob =
70051
7a4dc1e60dc8 added command 'compile_generated_files';
wenzelm
parents: 70016
diff changeset
    35
 (report_export thy binding;
7a4dc1e60dc8 added command 'compile_generated_files';
wenzelm
parents: 70016
diff changeset
    36
  (Output.try_protocol_message o Markup.export)
7a4dc1e60dc8 added command 'compile_generated_files';
wenzelm
parents: 70016
diff changeset
    37
   {id = Position.get_id (Position.thread_data ()),
7a4dc1e60dc8 added command 'compile_generated_files';
wenzelm
parents: 70016
diff changeset
    38
    serial = serial (),
7a4dc1e60dc8 added command 'compile_generated_files';
wenzelm
parents: 70016
diff changeset
    39
    theory_name = Context.theory_long_name thy,
7a4dc1e60dc8 added command 'compile_generated_files';
wenzelm
parents: 70016
diff changeset
    40
    name = Path.implode_binding binding,
7a4dc1e60dc8 added command 'compile_generated_files';
wenzelm
parents: 70016
diff changeset
    41
    executable = executable,
7a4dc1e60dc8 added command 'compile_generated_files';
wenzelm
parents: 70016
diff changeset
    42
    compress = compress} blob);
68090
7c8ed28dd40a tuned signature;
wenzelm
parents:
diff changeset
    43
70015
c8e08d8ffb93 clarified signature: more explicit type Path.binding;
wenzelm
parents: 70013
diff changeset
    44
fun export thy binding blob =
c8e08d8ffb93 clarified signature: more explicit type Path.binding;
wenzelm
parents: 70013
diff changeset
    45
  export_params {theory = thy, binding = binding, executable = false, compress = true} blob;
69788
c175499a7537 added executable flag for exports;
wenzelm
parents: 69784
diff changeset
    46
70015
c8e08d8ffb93 clarified signature: more explicit type Path.binding;
wenzelm
parents: 70013
diff changeset
    47
fun export_executable thy binding blob =
c8e08d8ffb93 clarified signature: more explicit type Path.binding;
wenzelm
parents: 70013
diff changeset
    48
  export_params {theory = thy, binding = binding, executable = true, compress = true} blob;
70013
6de8b7a5cd44 tuned signature -- more operations;
wenzelm
parents: 70011
diff changeset
    49
70015
c8e08d8ffb93 clarified signature: more explicit type Path.binding;
wenzelm
parents: 70013
diff changeset
    50
fun export_file thy binding file = export thy binding [File.read file];
c8e08d8ffb93 clarified signature: more explicit type Path.binding;
wenzelm
parents: 70013
diff changeset
    51
fun export_executable_file thy binding file = export_executable thy binding [File.read file];
68090
7c8ed28dd40a tuned signature;
wenzelm
parents:
diff changeset
    52
69648
97ddaec3e2ae support hyperlink to theory exports;
wenzelm
parents: 69627
diff changeset
    53
97ddaec3e2ae support hyperlink to theory exports;
wenzelm
parents: 69627
diff changeset
    54
(* information message *)
97ddaec3e2ae support hyperlink to theory exports;
wenzelm
parents: 69627
diff changeset
    55
70009
435fb018e8ee "export_code ... file_prefix ..." is the preferred way to produce output within the logical file-system within the theory context, as well as session exports;
wenzelm
parents: 69788
diff changeset
    56
fun markup thy path =
435fb018e8ee "export_code ... file_prefix ..." is the preferred way to produce output within the logical file-system within the theory context, as well as session exports;
wenzelm
parents: 69788
diff changeset
    57
  let
435fb018e8ee "export_code ... file_prefix ..." is the preferred way to produce output within the logical file-system within the theory context, as well as session exports;
wenzelm
parents: 69788
diff changeset
    58
    val thy_path = Path.append (Path.basic (Context.theory_long_name thy)) path;
435fb018e8ee "export_code ... file_prefix ..." is the preferred way to produce output within the logical file-system within the theory context, as well as session exports;
wenzelm
parents: 69788
diff changeset
    59
    val name = (Markup.nameN, Path.implode thy_path);
69650
c95edf19133b clarified message;
wenzelm
parents: 69648
diff changeset
    60
  in Active.make_markup Markup.theory_exportsN {implicit = false, properties = [name]} end;
69648
97ddaec3e2ae support hyperlink to theory exports;
wenzelm
parents: 69627
diff changeset
    61
70009
435fb018e8ee "export_code ... file_prefix ..." is the preferred way to produce output within the logical file-system within the theory context, as well as session exports;
wenzelm
parents: 69788
diff changeset
    62
fun message thy path =
435fb018e8ee "export_code ... file_prefix ..." is the preferred way to produce output within the logical file-system within the theory context, as well as session exports;
wenzelm
parents: 69788
diff changeset
    63
  "See " ^ Markup.markup (markup thy path) "theory exports";
69648
97ddaec3e2ae support hyperlink to theory exports;
wenzelm
parents: 69627
diff changeset
    64
68090
7c8ed28dd40a tuned signature;
wenzelm
parents:
diff changeset
    65
end;