| author | huffman | 
| Thu, 14 Oct 2010 09:28:05 -0700 | |
| changeset 40012 | f13341a45407 | 
| parent 39627 | 108901b49210 | 
| child 40479 | cc06f5528bb1 | 
| permissions | -rw-r--r-- | 
| 38483 | 1 | /* Title: Pure/PIDE/isar_document.scala | 
| 38412 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 2 | Author: Makarius | 
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 3 | |
| 38567 
b670faa807c9
concentrate protocol message formats in Isar_Document;
 wenzelm parents: 
38483diff
changeset | 4 | Protocol message formats for interactive Isar documents. | 
| 38412 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 5 | */ | 
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 6 | |
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 7 | package isabelle | 
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 8 | |
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 9 | |
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 10 | object Isar_Document | 
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 11 | {
 | 
| 38567 
b670faa807c9
concentrate protocol message formats in Isar_Document;
 wenzelm parents: 
38483diff
changeset | 12 | /* document editing */ | 
| 38412 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 13 | |
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 14 |   object Assign {
 | 
| 38414 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38412diff
changeset | 15 | def unapply(msg: XML.Tree) | 
| 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38412diff
changeset | 16 | : Option[(Document.Version_ID, List[(Document.Command_ID, Document.Exec_ID)])] = | 
| 38412 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 17 |       msg match {
 | 
| 38414 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38412diff
changeset | 18 | case XML.Elem(Markup(Markup.ASSIGN, List((Markup.VERSION, Document.ID(id)))), edits) => | 
| 38412 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 19 | val id_edits = edits.map(Edit.unapply) | 
| 38414 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38412diff
changeset | 20 | if (id_edits.forall(_.isDefined)) Some((id, id_edits.map(_.get))) | 
| 38412 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 21 | else None | 
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 22 | case _ => None | 
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 23 | } | 
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 24 | } | 
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 25 | |
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 26 |   object Edit {
 | 
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 27 | def unapply(msg: XML.Tree): Option[(Document.Command_ID, Document.Exec_ID)] = | 
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 28 |       msg match {
 | 
| 38414 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38412diff
changeset | 29 | case XML.Elem( | 
| 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38412diff
changeset | 30 | Markup(Markup.EDIT, | 
| 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38412diff
changeset | 31 | List((Markup.ID, Document.ID(i)), (Markup.EXEC, Document.ID(j)))), Nil) => Some((i, j)) | 
| 38412 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 32 | case _ => None | 
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 33 | } | 
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 34 | } | 
| 38567 
b670faa807c9
concentrate protocol message formats in Isar_Document;
 wenzelm parents: 
38483diff
changeset | 35 | |
| 
b670faa807c9
concentrate protocol message formats in Isar_Document;
 wenzelm parents: 
38483diff
changeset | 36 | |
| 
b670faa807c9
concentrate protocol message formats in Isar_Document;
 wenzelm parents: 
38483diff
changeset | 37 | /* toplevel transactions */ | 
| 
b670faa807c9
concentrate protocol message formats in Isar_Document;
 wenzelm parents: 
38483diff
changeset | 38 | |
| 
b670faa807c9
concentrate protocol message formats in Isar_Document;
 wenzelm parents: 
38483diff
changeset | 39 | sealed abstract class Status | 
| 
b670faa807c9
concentrate protocol message formats in Isar_Document;
 wenzelm parents: 
38483diff
changeset | 40 | case class Forked(forks: Int) extends Status | 
| 
b670faa807c9
concentrate protocol message formats in Isar_Document;
 wenzelm parents: 
38483diff
changeset | 41 | case object Unprocessed extends Status | 
| 
b670faa807c9
concentrate protocol message formats in Isar_Document;
 wenzelm parents: 
38483diff
changeset | 42 | case object Finished extends Status | 
| 
b670faa807c9
concentrate protocol message formats in Isar_Document;
 wenzelm parents: 
38483diff
changeset | 43 | case object Failed extends Status | 
| 
b670faa807c9
concentrate protocol message formats in Isar_Document;
 wenzelm parents: 
38483diff
changeset | 44 | |
| 38581 
d503a0912e14
simplified Command.status again, reverting most of e5eed57913d0 (note that more complex information can be represented with full markup reports);
 wenzelm parents: 
38567diff
changeset | 45 | def command_status(markup: List[Markup]): Status = | 
| 38567 
b670faa807c9
concentrate protocol message formats in Isar_Document;
 wenzelm parents: 
38483diff
changeset | 46 |   {
 | 
| 
b670faa807c9
concentrate protocol message formats in Isar_Document;
 wenzelm parents: 
38483diff
changeset | 47 |     val forks = (0 /: markup) {
 | 
| 38581 
d503a0912e14
simplified Command.status again, reverting most of e5eed57913d0 (note that more complex information can be represented with full markup reports);
 wenzelm parents: 
38567diff
changeset | 48 | case (i, Markup(Markup.FORKED, _)) => i + 1 | 
| 
d503a0912e14
simplified Command.status again, reverting most of e5eed57913d0 (note that more complex information can be represented with full markup reports);
 wenzelm parents: 
38567diff
changeset | 49 | case (i, Markup(Markup.JOINED, _)) => i - 1 | 
| 38567 
b670faa807c9
concentrate protocol message formats in Isar_Document;
 wenzelm parents: 
38483diff
changeset | 50 | case (i, _) => i | 
| 
b670faa807c9
concentrate protocol message formats in Isar_Document;
 wenzelm parents: 
38483diff
changeset | 51 | } | 
| 
b670faa807c9
concentrate protocol message formats in Isar_Document;
 wenzelm parents: 
38483diff
changeset | 52 | if (forks != 0) Forked(forks) | 
| 38581 
d503a0912e14
simplified Command.status again, reverting most of e5eed57913d0 (note that more complex information can be represented with full markup reports);
 wenzelm parents: 
38567diff
changeset | 53 | else if (markup.exists(_.name == Markup.FAILED)) Failed | 
| 
d503a0912e14
simplified Command.status again, reverting most of e5eed57913d0 (note that more complex information can be represented with full markup reports);
 wenzelm parents: 
38567diff
changeset | 54 | else if (markup.exists(_.name == Markup.FINISHED)) Finished | 
| 38567 
b670faa807c9
concentrate protocol message formats in Isar_Document;
 wenzelm parents: 
38483diff
changeset | 55 | else Unprocessed | 
| 
b670faa807c9
concentrate protocol message formats in Isar_Document;
 wenzelm parents: 
38483diff
changeset | 56 | } | 
| 38887 
1261481ef5e5
Command.State: add reported positions to markup tree, according main message position or Markup.binding/entity/report occurrences in body;
 wenzelm parents: 
38581diff
changeset | 57 | |
| 
1261481ef5e5
Command.State: add reported positions to markup tree, according main message position or Markup.binding/entity/report occurrences in body;
 wenzelm parents: 
38581diff
changeset | 58 | |
| 39441 
4110cc1b8f9f
allow embedded reports in regular prover messages, to avoid side-effects for errors for example;
 wenzelm parents: 
39439diff
changeset | 59 | /* result messages */ | 
| 39439 
1c294d150ded
eliminated markup "location" in favour of more explicit "no_report", which is actually deleted from messages;
 wenzelm parents: 
39181diff
changeset | 60 | |
| 
1c294d150ded
eliminated markup "location" in favour of more explicit "no_report", which is actually deleted from messages;
 wenzelm parents: 
39181diff
changeset | 61 | def clean_message(body: XML.Body): XML.Body = | 
| 
1c294d150ded
eliminated markup "location" in favour of more explicit "no_report", which is actually deleted from messages;
 wenzelm parents: 
39181diff
changeset | 62 |     body filter { case XML.Elem(Markup(Markup.NO_REPORT, _), _) => false case _ => true } map
 | 
| 
1c294d150ded
eliminated markup "location" in favour of more explicit "no_report", which is actually deleted from messages;
 wenzelm parents: 
39181diff
changeset | 63 |       { case XML.Elem(markup, ts) => XML.Elem(markup, clean_message(ts)) case t => t }
 | 
| 
1c294d150ded
eliminated markup "location" in favour of more explicit "no_report", which is actually deleted from messages;
 wenzelm parents: 
39181diff
changeset | 64 | |
| 39441 
4110cc1b8f9f
allow embedded reports in regular prover messages, to avoid side-effects for errors for example;
 wenzelm parents: 
39439diff
changeset | 65 | def message_reports(msg: XML.Tree): List[XML.Elem] = | 
| 
4110cc1b8f9f
allow embedded reports in regular prover messages, to avoid side-effects for errors for example;
 wenzelm parents: 
39439diff
changeset | 66 |     msg match {
 | 
| 
4110cc1b8f9f
allow embedded reports in regular prover messages, to avoid side-effects for errors for example;
 wenzelm parents: 
39439diff
changeset | 67 | case elem @ XML.Elem(Markup(Markup.REPORT, _), _) => List(elem) | 
| 
4110cc1b8f9f
allow embedded reports in regular prover messages, to avoid side-effects for errors for example;
 wenzelm parents: 
39439diff
changeset | 68 | case XML.Elem(_, body) => body.flatMap(message_reports) | 
| 
4110cc1b8f9f
allow embedded reports in regular prover messages, to avoid side-effects for errors for example;
 wenzelm parents: 
39439diff
changeset | 69 | case XML.Text(_) => Nil | 
| 
4110cc1b8f9f
allow embedded reports in regular prover messages, to avoid side-effects for errors for example;
 wenzelm parents: 
39439diff
changeset | 70 | } | 
| 
4110cc1b8f9f
allow embedded reports in regular prover messages, to avoid side-effects for errors for example;
 wenzelm parents: 
39439diff
changeset | 71 | |
| 39439 
1c294d150ded
eliminated markup "location" in favour of more explicit "no_report", which is actually deleted from messages;
 wenzelm parents: 
39181diff
changeset | 72 | |
| 39511 | 73 | /* specific messages */ | 
| 74 | ||
| 39625 | 75 | def is_ready(msg: XML.Tree): Boolean = | 
| 76 |     msg match {
 | |
| 77 | case XML.Elem(Markup(Markup.STATUS, _), | |
| 78 | List(XML.Elem(Markup(Markup.READY, _), _))) => true | |
| 79 | case _ => false | |
| 80 | } | |
| 81 | ||
| 82 | def is_tracing(msg: XML.Tree): Boolean = | |
| 39622 
53365ba766ac
Command.accumulate: refrain from adding tracing messages to markup tree -- potential scalability problem;
 wenzelm parents: 
39511diff
changeset | 83 |     msg match {
 | 
| 
53365ba766ac
Command.accumulate: refrain from adding tracing messages to markup tree -- potential scalability problem;
 wenzelm parents: 
39511diff
changeset | 84 | case XML.Elem(Markup(Markup.TRACING, _), _) => true | 
| 
53365ba766ac
Command.accumulate: refrain from adding tracing messages to markup tree -- potential scalability problem;
 wenzelm parents: 
39511diff
changeset | 85 | case _ => false | 
| 
53365ba766ac
Command.accumulate: refrain from adding tracing messages to markup tree -- potential scalability problem;
 wenzelm parents: 
39511diff
changeset | 86 | } | 
| 
53365ba766ac
Command.accumulate: refrain from adding tracing messages to markup tree -- potential scalability problem;
 wenzelm parents: 
39511diff
changeset | 87 | |
| 39511 | 88 | def is_warning(msg: XML.Tree): Boolean = | 
| 89 |     msg match {
 | |
| 90 | case XML.Elem(Markup(Markup.WARNING, _), _) => true | |
| 91 | case _ => false | |
| 92 | } | |
| 93 | ||
| 94 | def is_error(msg: XML.Tree): Boolean = | |
| 95 |     msg match {
 | |
| 96 | case XML.Elem(Markup(Markup.ERROR, _), _) => true | |
| 97 | case _ => false | |
| 98 | } | |
| 38887 
1261481ef5e5
Command.State: add reported positions to markup tree, according main message position or Markup.binding/entity/report occurrences in body;
 wenzelm parents: 
38581diff
changeset | 99 | |
| 39441 
4110cc1b8f9f
allow embedded reports in regular prover messages, to avoid side-effects for errors for example;
 wenzelm parents: 
39439diff
changeset | 100 | def is_state(msg: XML.Tree): Boolean = | 
| 39170 
04ad0fed81f5
Isar_Document.reported_positions: exclude proof state output;
 wenzelm parents: 
39042diff
changeset | 101 |     msg match {
 | 
| 39627 | 102 | case XML.Elem(Markup(Markup.WRITELN, _), | 
| 103 | List(XML.Elem(Markup(Markup.STATE, _), _))) => true | |
| 39170 
04ad0fed81f5
Isar_Document.reported_positions: exclude proof state output;
 wenzelm parents: 
39042diff
changeset | 104 | case _ => false | 
| 
04ad0fed81f5
Isar_Document.reported_positions: exclude proof state output;
 wenzelm parents: 
39042diff
changeset | 105 | } | 
| 
04ad0fed81f5
Isar_Document.reported_positions: exclude proof state output;
 wenzelm parents: 
39042diff
changeset | 106 | |
| 39511 | 107 | |
| 108 | /* reported positions */ | |
| 109 | ||
| 39627 | 110 | private val include_pos = | 
| 111 | Set(Markup.BINDING, Markup.ENTITY, Markup.REPORT, Markup.POSITION) | |
| 39441 
4110cc1b8f9f
allow embedded reports in regular prover messages, to avoid side-effects for errors for example;
 wenzelm parents: 
39439diff
changeset | 112 | |
| 
4110cc1b8f9f
allow embedded reports in regular prover messages, to avoid side-effects for errors for example;
 wenzelm parents: 
39439diff
changeset | 113 | def message_positions(command: Command, message: XML.Elem): Set[Text.Range] = | 
| 38887 
1261481ef5e5
Command.State: add reported positions to markup tree, according main message position or Markup.binding/entity/report occurrences in body;
 wenzelm parents: 
38581diff
changeset | 114 |   {
 | 
| 39441 
4110cc1b8f9f
allow embedded reports in regular prover messages, to avoid side-effects for errors for example;
 wenzelm parents: 
39439diff
changeset | 115 | def positions(set: Set[Text.Range], tree: XML.Tree): Set[Text.Range] = | 
| 38887 
1261481ef5e5
Command.State: add reported positions to markup tree, according main message position or Markup.binding/entity/report occurrences in body;
 wenzelm parents: 
38581diff
changeset | 116 |       tree match {
 | 
| 39172 
31b95e0da7b7
Isar_Document.reported_positions: slightly more robust treatment of positions outside the command range, notably parsing beyond EOF;
 wenzelm parents: 
39170diff
changeset | 117 | case XML.Elem(Markup(name, Position.Id_Range(id, raw_range)), body) | 
| 
31b95e0da7b7
Isar_Document.reported_positions: slightly more robust treatment of positions outside the command range, notably parsing beyond EOF;
 wenzelm parents: 
39170diff
changeset | 118 | if include_pos(name) && id == command.id => | 
| 
31b95e0da7b7
Isar_Document.reported_positions: slightly more robust treatment of positions outside the command range, notably parsing beyond EOF;
 wenzelm parents: 
39170diff
changeset | 119 | val range = command.decode(raw_range).restrict(command.range) | 
| 39441 
4110cc1b8f9f
allow embedded reports in regular prover messages, to avoid side-effects for errors for example;
 wenzelm parents: 
39439diff
changeset | 120 | body.foldLeft(if (range.is_singularity) set else set + range)(positions) | 
| 
4110cc1b8f9f
allow embedded reports in regular prover messages, to avoid side-effects for errors for example;
 wenzelm parents: 
39439diff
changeset | 121 | case XML.Elem(Markup(name, _), body) => body.foldLeft(set)(positions) | 
| 39042 
470fd769ae53
Isar_Document.reported_positions: more precise include/exclude, include root as last resort only;
 wenzelm parents: 
38887diff
changeset | 122 | case _ => set | 
| 38887 
1261481ef5e5
Command.State: add reported positions to markup tree, according main message position or Markup.binding/entity/report occurrences in body;
 wenzelm parents: 
38581diff
changeset | 123 | } | 
| 39441 
4110cc1b8f9f
allow embedded reports in regular prover messages, to avoid side-effects for errors for example;
 wenzelm parents: 
39439diff
changeset | 124 | val set = positions(Set.empty, message) | 
| 39170 
04ad0fed81f5
Isar_Document.reported_positions: exclude proof state output;
 wenzelm parents: 
39042diff
changeset | 125 | if (set.isEmpty && !is_state(message)) | 
| 39172 
31b95e0da7b7
Isar_Document.reported_positions: slightly more robust treatment of positions outside the command range, notably parsing beyond EOF;
 wenzelm parents: 
39170diff
changeset | 126 | set ++ Position.Range.unapply(message.markup.properties).map(command.decode(_)) | 
| 39042 
470fd769ae53
Isar_Document.reported_positions: more precise include/exclude, include root as last resort only;
 wenzelm parents: 
38887diff
changeset | 127 | else set | 
| 38887 
1261481ef5e5
Command.State: add reported positions to markup tree, according main message position or Markup.binding/entity/report occurrences in body;
 wenzelm parents: 
38581diff
changeset | 128 | } | 
| 38412 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 129 | } | 
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 130 | |
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 131 | |
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 132 | trait Isar_Document extends Isabelle_Process | 
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 133 | {
 | 
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 134 | /* commands */ | 
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 135 | |
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 136 | def define_command(id: Document.Command_ID, text: String): Unit = | 
| 38414 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38412diff
changeset | 137 |     input("Isar_Document.define_command", Document.ID(id), text)
 | 
| 38412 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 138 | |
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 139 | |
| 38417 | 140 | /* document versions */ | 
| 38412 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 141 | |
| 38417 | 142 | def edit_version(old_id: Document.Version_ID, new_id: Document.Version_ID, | 
| 38412 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 143 | edits: List[Document.Edit[Document.Command_ID]]) | 
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 144 |   {
 | 
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 145 | val arg = | 
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 146 | XML_Data.make_list( | 
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 147 | XML_Data.make_pair(XML_Data.make_string)( | 
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 148 | XML_Data.make_option(XML_Data.make_list( | 
| 38448 
62d16c415019
added functor Linear_Set, based on former adhoc structures in document.ML;
 wenzelm parents: 
38418diff
changeset | 149 | XML_Data.make_pair( | 
| 
62d16c415019
added functor Linear_Set, based on former adhoc structures in document.ML;
 wenzelm parents: 
38418diff
changeset | 150 | XML_Data.make_option(XML_Data.make_long))( | 
| 
62d16c415019
added functor Linear_Set, based on former adhoc structures in document.ML;
 wenzelm parents: 
38418diff
changeset | 151 | XML_Data.make_option(XML_Data.make_long))))))(edits) | 
| 38412 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 152 | |
| 38417 | 153 |     input("Isar_Document.edit_version",
 | 
| 38414 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38412diff
changeset | 154 | Document.ID(old_id), Document.ID(new_id), YXML.string_of_body(arg)) | 
| 38412 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 155 | } | 
| 
c23f3abbf42d
moved isar_document.ML/scala to Pure/System/ -- side-by-side with isar.ML;
 wenzelm parents: diff
changeset | 156 | } |