| author | wenzelm | 
| Sat, 08 Jul 2023 19:28:26 +0200 | |
| changeset 78271 | c0dc000d2a40 | 
| parent 78021 | ce6e3bc34343 | 
| child 78279 | dab089b25eb6 | 
| permissions | -rw-r--r-- | 
| 45670 | 1 | /* Title: Pure/PIDE/markup.scala | 
| 27958 | 2 | Author: Makarius | 
| 3 | ||
| 56743 | 4 | Quasi-abstract markup elements. | 
| 27958 | 5 | */ | 
| 6 | ||
| 7 | package isabelle | |
| 8 | ||
| 27970 | 9 | |
| 75393 | 10 | object Markup {
 | 
| 56743 | 11 | /* elements */ | 
| 12 | ||
| 75393 | 13 |   object Elements {
 | 
| 56743 | 14 | def apply(elems: Set[String]): Elements = new Elements(elems) | 
| 15 | def apply(elems: String*): Elements = apply(Set(elems: _*)) | |
| 16 | val empty: Elements = apply() | |
| 17 | val full: Elements = | |
| 75393 | 18 |       new Elements(Set.empty) {
 | 
| 56743 | 19 | override def apply(elem: String): Boolean = true | 
| 20 | override def toString: String = "Elements.full" | |
| 21 | } | |
| 22 | } | |
| 23 | ||
| 75393 | 24 |   sealed class Elements private[Markup](private val rep: Set[String]) {
 | 
| 56743 | 25 | def apply(elem: String): Boolean = rep.contains(elem) | 
| 26 | def + (elem: String): Elements = new Elements(rep + elem) | |
| 27 | def ++ (elems: Elements): Elements = new Elements(rep ++ elems.rep) | |
| 65176 | 28 | def - (elem: String): Elements = new Elements(rep - elem) | 
| 29 | def -- (elems: Elements): Elements = new Elements(rep -- elems.rep) | |
| 56743 | 30 |     override def toString: String = rep.mkString("Elements(", ",", ")")
 | 
| 31 | } | |
| 32 | ||
| 33 | ||
| 45666 | 34 | /* properties */ | 
| 29184 | 35 | |
| 36 | val NAME = "name" | |
| 43780 | 37 | val Name = new Properties.String(NAME) | 
| 42136 | 38 | |
| 68997 | 39 | val XNAME = "xname" | 
| 40 | val XName = new Properties.String(XNAME) | |
| 41 | ||
| 29184 | 42 | val KIND = "kind" | 
| 43780 | 43 | val Kind = new Properties.String(KIND) | 
| 29184 | 44 | |
| 65937 | 45 | val CONTENT = "content" | 
| 46 | val Content = new Properties.String(CONTENT) | |
| 47 | ||
| 60744 | 48 | val SERIAL = "serial" | 
| 49 | val Serial = new Properties.Long(SERIAL) | |
| 50 | ||
| 52854 
92932931bd82
more general Output.result: allow to update arbitrary properties;
 wenzelm parents: 
52800diff
changeset | 51 | val INSTANCE = "instance" | 
| 
92932931bd82
more general Output.result: allow to update arbitrary properties;
 wenzelm parents: 
52800diff
changeset | 52 | val Instance = new Properties.String(INSTANCE) | 
| 
92932931bd82
more general Output.result: allow to update arbitrary properties;
 wenzelm parents: 
52800diff
changeset | 53 | |
| 29184 | 54 | |
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 55 | /* basic markup */ | 
| 29184 | 56 | |
| 71601 | 57 |   val Empty: Markup = Markup("", Nil)
 | 
| 58 |   val Broken: Markup = Markup("broken", Nil)
 | |
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 59 | |
| 75393 | 60 |   class Markup_Elem(val name: String) {
 | 
| 74783 | 61 | def apply(props: Properties.T = Nil): Markup = Markup(name, props) | 
| 62 | def unapply(markup: Markup): Option[Properties.T] = | |
| 63 | if (markup.name == name) Some(markup.properties) else None | |
| 64 | } | |
| 65 | ||
| 75393 | 66 |   class Markup_String(val name: String, prop: String) {
 | 
| 74782 | 67 | val Prop: Properties.String = new Properties.String(prop) | 
| 55551 | 68 | |
| 69 | def apply(s: String): Markup = Markup(name, Prop(s)) | |
| 70 | def unapply(markup: Markup): Option[String] = | |
| 71 | if (markup.name == name) Prop.unapply(markup.properties) else None | |
| 74782 | 72 |     def get(markup: Markup): String = unapply(markup).getOrElse("")
 | 
| 55551 | 73 | } | 
| 74 | ||
| 75393 | 75 |   class Markup_Int(val name: String, prop: String) {
 | 
| 74782 | 76 | val Prop: Properties.Int = new Properties.Int(prop) | 
| 55551 | 77 | |
| 78 | def apply(i: Int): Markup = Markup(name, Prop(i)) | |
| 79 | def unapply(markup: Markup): Option[Int] = | |
| 80 | if (markup.name == name) Prop.unapply(markup.properties) else None | |
| 74782 | 81 | def get(markup: Markup): Int = unapply(markup).getOrElse(0) | 
| 55551 | 82 | } | 
| 83 | ||
| 75393 | 84 |   class Markup_Long(val name: String, prop: String) {
 | 
| 74782 | 85 | val Prop: Properties.Long = new Properties.Long(prop) | 
| 60744 | 86 | |
| 87 | def apply(i: Long): Markup = Markup(name, Prop(i)) | |
| 88 | def unapply(markup: Markup): Option[Long] = | |
| 89 | if (markup.name == name) Prop.unapply(markup.properties) else None | |
| 74782 | 90 | def get(markup: Markup): Long = unapply(markup).getOrElse(0) | 
| 60744 | 91 | } | 
| 92 | ||
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 93 | |
| 69889 
be04e9a053a7
markup and document markers for some meta data from "Dublin Core Metadata Element Set";
 wenzelm parents: 
69788diff
changeset | 94 | /* meta data */ | 
| 
be04e9a053a7
markup and document markers for some meta data from "Dublin Core Metadata Element Set";
 wenzelm parents: 
69788diff
changeset | 95 | |
| 
be04e9a053a7
markup and document markers for some meta data from "Dublin Core Metadata Element Set";
 wenzelm parents: 
69788diff
changeset | 96 | val META_TITLE = "meta_title" | 
| 
be04e9a053a7
markup and document markers for some meta data from "Dublin Core Metadata Element Set";
 wenzelm parents: 
69788diff
changeset | 97 | val META_CREATOR = "meta_creator" | 
| 
be04e9a053a7
markup and document markers for some meta data from "Dublin Core Metadata Element Set";
 wenzelm parents: 
69788diff
changeset | 98 | val META_CONTRIBUTOR = "meta_contributor" | 
| 
be04e9a053a7
markup and document markers for some meta data from "Dublin Core Metadata Element Set";
 wenzelm parents: 
69788diff
changeset | 99 | val META_DATE = "meta_date" | 
| 69962 
82e945d472d5
documentation of document markers and re-interpreted command tags;
 wenzelm parents: 
69916diff
changeset | 100 | val META_LICENSE = "meta_license" | 
| 69889 
be04e9a053a7
markup and document markers for some meta data from "Dublin Core Metadata Element Set";
 wenzelm parents: 
69788diff
changeset | 101 | val META_DESCRIPTION = "meta_description" | 
| 
be04e9a053a7
markup and document markers for some meta data from "Dublin Core Metadata Element Set";
 wenzelm parents: 
69788diff
changeset | 102 | |
| 
be04e9a053a7
markup and document markers for some meta data from "Dublin Core Metadata Element Set";
 wenzelm parents: 
69788diff
changeset | 103 | |
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 104 | /* formal entities */ | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 105 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 106 | val BINDING = "binding" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 107 | val ENTITY = "entity" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 108 | |
| 75393 | 109 |   object Entity {
 | 
| 74782 | 110 | val Def = new Markup_Long(ENTITY, "def") | 
| 111 | val Ref = new Markup_Long(ENTITY, "ref") | |
| 112 | ||
| 75393 | 113 |     object Occ {
 | 
| 72903 | 114 | def unapply(markup: Markup): Option[Long] = | 
| 115 | Def.unapply(markup) orElse Ref.unapply(markup) | |
| 116 | } | |
| 117 | ||
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 118 | def unapply(markup: Markup): Option[(String, String)] = | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 119 |       markup match {
 | 
| 74782 | 120 | case Markup(ENTITY, props) => Some((Kind.get(props), Name.get(props))) | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 121 | case _ => None | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 122 | } | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 123 | } | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 124 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 125 | |
| 55672 
5e25cc741ab9
support for completion within the formal context;
 wenzelm parents: 
55666diff
changeset | 126 | /* completion */ | 
| 
5e25cc741ab9
support for completion within the formal context;
 wenzelm parents: 
55666diff
changeset | 127 | |
| 
5e25cc741ab9
support for completion within the formal context;
 wenzelm parents: 
55666diff
changeset | 128 | val COMPLETION = "completion" | 
| 55914 
c5b752d549e3
clarified init_assignable: make double-sure that initial values are reset;
 wenzelm parents: 
55837diff
changeset | 129 | val NO_COMPLETION = "no_completion" | 
| 55672 
5e25cc741ab9
support for completion within the formal context;
 wenzelm parents: 
55666diff
changeset | 130 | |
| 69557 | 131 | val UPDATE = "update" | 
| 132 | ||
| 55672 
5e25cc741ab9
support for completion within the formal context;
 wenzelm parents: 
55666diff
changeset | 133 | |
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 134 | /* position */ | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 135 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 136 | val LINE = "line" | 
| 58978 
e42da880c61e
more position information, e.g. relevant for errors in generated ML source;
 wenzelm parents: 
58853diff
changeset | 137 | val END_LINE = "line" | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 138 | val OFFSET = "offset" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 139 | val END_OFFSET = "end_offset" | 
| 78021 | 140 | val LABEL = "label" | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 141 | val FILE = "file" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 142 | val ID = "id" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 143 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 144 | val DEF_LINE = "def_line" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 145 | val DEF_OFFSET = "def_offset" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 146 | val DEF_END_OFFSET = "def_end_offset" | 
| 78021 | 147 | val DEF_LABEL = "def_label" | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 148 | val DEF_FILE = "def_file" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 149 | val DEF_ID = "def_id" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 150 | |
| 74182 | 151 | val POSITION = "position" | 
| 152 | ||
| 78021 | 153 | val POSITION_PROPERTIES = Set(LINE, OFFSET, END_OFFSET, LABEL, FILE, ID) | 
| 72708 | 154 | def position_property(entry: Properties.Entry): Boolean = POSITION_PROPERTIES(entry._1) | 
| 155 | ||
| 74182 | 156 | |
| 157 | /* position "def" name */ | |
| 158 | ||
| 159 | private val def_names: Map[String, String] = | |
| 160 | Map(LINE -> DEF_LINE, OFFSET -> DEF_OFFSET, END_OFFSET -> DEF_END_OFFSET, | |
| 78021 | 161 | LABEL -> DEF_LABEL, FILE -> DEF_FILE, ID -> DEF_ID) | 
| 74182 | 162 | |
| 163 | def def_name(a: String): String = def_names.getOrElse(a, a + "def_") | |
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 164 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 165 | |
| 58464 | 166 | /* expression */ | 
| 167 | ||
| 168 | val EXPRESSION = "expression" | |
| 75393 | 169 |   object Expression {
 | 
| 62806 | 170 | def unapply(markup: Markup): Option[String] = | 
| 171 |       markup match {
 | |
| 74782 | 172 | case Markup(EXPRESSION, props) => Some(Kind.get(props)) | 
| 62806 | 173 | case _ => None | 
| 174 | } | |
| 175 | } | |
| 58464 | 176 | |
| 177 | ||
| 58544 
340f130b3d38
bibtex support in ML: document antiquotation @{cite} with markup;
 wenzelm parents: 
58464diff
changeset | 178 | /* citation */ | 
| 
340f130b3d38
bibtex support in ML: document antiquotation @{cite} with markup;
 wenzelm parents: 
58464diff
changeset | 179 | |
| 
340f130b3d38
bibtex support in ML: document antiquotation @{cite} with markup;
 wenzelm parents: 
58464diff
changeset | 180 | val CITATION = "citation" | 
| 58545 
30b75b7958d6
citation tooltip/hyperlink based on open buffers with .bib files;
 wenzelm parents: 
58544diff
changeset | 181 | val Citation = new Markup_String(CITATION, NAME) | 
| 58544 
340f130b3d38
bibtex support in ML: document antiquotation @{cite} with markup;
 wenzelm parents: 
58464diff
changeset | 182 | |
| 
340f130b3d38
bibtex support in ML: document antiquotation @{cite} with markup;
 wenzelm parents: 
58464diff
changeset | 183 | |
| 55550 | 184 | /* embedded languages */ | 
| 185 | ||
| 55666 | 186 |   val Symbols = new Properties.Boolean("symbols")
 | 
| 187 |   val Antiquotes = new Properties.Boolean("antiquotes")
 | |
| 55828 
42ac3cfb89f6
clarified language markup: added "delimited" property;
 wenzelm parents: 
55765diff
changeset | 188 |   val Delimited = new Properties.Boolean("delimited")
 | 
| 55615 
bf4bbe72f740
completion of keywords and symbols based on language context;
 wenzelm parents: 
55553diff
changeset | 189 | |
| 55550 | 190 | val LANGUAGE = "language" | 
| 75393 | 191 |   object Language {
 | 
| 67336 | 192 | val DOCUMENT = "document" | 
| 76976 | 193 | val ANTIQUOTATION = "antiquotation" | 
| 55616 | 194 | val ML = "ML" | 
| 56278 
2576d3a40ed6
separate tokenization and language context for SML: no symbols, no antiquotes;
 wenzelm parents: 
56202diff
changeset | 195 | val SML = "SML" | 
| 56843 
b2bfcd8cda80
support for path completion based on file-system content;
 wenzelm parents: 
56743diff
changeset | 196 | val PATH = "path" | 
| 55616 | 197 | val UNKNOWN = "unknown" | 
| 198 | ||
| 76967 | 199 | def apply(name: String, symbols: Boolean, antiquotes: Boolean, delimited: Boolean): Language = | 
| 200 | new Language(name, symbols, antiquotes, delimited) | |
| 76965 | 201 | |
| 76967 | 202 |     val outer: Language = apply("", true, false, false)
 | 
| 76966 | 203 | |
| 76967 | 204 | def unapply(markup: Markup): Option[Language] = | 
| 55615 
bf4bbe72f740
completion of keywords and symbols based on language context;
 wenzelm parents: 
55553diff
changeset | 205 |       markup match {
 | 
| 
bf4bbe72f740
completion of keywords and symbols based on language context;
 wenzelm parents: 
55553diff
changeset | 206 | case Markup(LANGUAGE, props) => | 
| 55828 
42ac3cfb89f6
clarified language markup: added "delimited" property;
 wenzelm parents: 
55765diff
changeset | 207 |           (props, props, props, props) match {
 | 
| 
42ac3cfb89f6
clarified language markup: added "delimited" property;
 wenzelm parents: 
55765diff
changeset | 208 | case (Name(name), Symbols(symbols), Antiquotes(antiquotes), Delimited(delimited)) => | 
| 76967 | 209 | Some(apply(name, symbols, antiquotes, delimited)) | 
| 55615 
bf4bbe72f740
completion of keywords and symbols based on language context;
 wenzelm parents: 
55553diff
changeset | 210 | case _ => None | 
| 
bf4bbe72f740
completion of keywords and symbols based on language context;
 wenzelm parents: 
55553diff
changeset | 211 | } | 
| 
bf4bbe72f740
completion of keywords and symbols based on language context;
 wenzelm parents: 
55553diff
changeset | 212 | case _ => None | 
| 
bf4bbe72f740
completion of keywords and symbols based on language context;
 wenzelm parents: 
55553diff
changeset | 213 | } | 
| 
bf4bbe72f740
completion of keywords and symbols based on language context;
 wenzelm parents: 
55553diff
changeset | 214 | } | 
| 76967 | 215 | class Language private( | 
| 216 | val name: String, | |
| 217 | val symbols: Boolean, | |
| 218 | val antiquotes: Boolean, | |
| 219 | val delimited: Boolean | |
| 220 |   ) {
 | |
| 221 | override def toString: String = name | |
| 222 | ||
| 76971 | 223 | def is_document: Boolean = name == Language.DOCUMENT | 
| 76976 | 224 | def is_antiquotation: Boolean = name == Language.ANTIQUOTATION | 
| 76971 | 225 | def is_path: Boolean = name == Language.PATH | 
| 226 | ||
| 76967 | 227 |     def description: String = Word.implode(Word.explode('_', name))
 | 
| 228 | } | |
| 55550 | 229 | |
| 230 | ||
| 54702 
3daeba5130f0
added document antiquotation @{url}, which produces formal markup for LaTeX and PIDE;
 wenzelm parents: 
53378diff
changeset | 231 | /* external resources */ | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 232 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 233 | val PATH = "path" | 
| 55551 | 234 | val Path = new Markup_String(PATH, NAME) | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 235 | |
| 70016 | 236 | val EXPORT_PATH = "export_path" | 
| 237 | val Export_Path = new Markup_String(EXPORT_PATH, NAME) | |
| 238 | ||
| 54702 
3daeba5130f0
added document antiquotation @{url}, which produces formal markup for LaTeX and PIDE;
 wenzelm parents: 
53378diff
changeset | 239 | val URL = "url" | 
| 55551 | 240 | val Url = new Markup_String(URL, NAME) | 
| 54702 
3daeba5130f0
added document antiquotation @{url}, which produces formal markup for LaTeX and PIDE;
 wenzelm parents: 
53378diff
changeset | 241 | |
| 61660 
78b371644654
added antiquotation @{doc}, e.g. useful for demonstration purposes;
 wenzelm parents: 
61598diff
changeset | 242 | val DOC = "doc" | 
| 
78b371644654
added antiquotation @{doc}, e.g. useful for demonstration purposes;
 wenzelm parents: 
61598diff
changeset | 243 | val Doc = new Markup_String(DOC, NAME) | 
| 
78b371644654
added antiquotation @{doc}, e.g. useful for demonstration purposes;
 wenzelm parents: 
61598diff
changeset | 244 | |
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 245 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 246 | /* pretty printing */ | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 247 | |
| 61864 | 248 |   val Consistent = new Properties.Boolean("consistent")
 | 
| 61862 
e2a9e46ac0fb
support pretty break indent, like underlying ML systems;
 wenzelm parents: 
61660diff
changeset | 249 |   val Indent = new Properties.Int("indent")
 | 
| 61864 | 250 |   val Width = new Properties.Int("width")
 | 
| 61862 
e2a9e46ac0fb
support pretty break indent, like underlying ML systems;
 wenzelm parents: 
61660diff
changeset | 251 | |
| 75393 | 252 |   object Block {
 | 
| 61864 | 253 | val name = "block" | 
| 254 | def apply(c: Boolean, i: Int): Markup = | |
| 255 | Markup(name, | |
| 256 | (if (c) Consistent(c) else Nil) ::: | |
| 257 | (if (i != 0) Indent(i) else Nil)) | |
| 258 | def unapply(markup: Markup): Option[(Boolean, Int)] = | |
| 259 |       if (markup.name == name) {
 | |
| 74782 | 260 | val c = Consistent.get(markup.properties) | 
| 261 | val i = Indent.get(markup.properties) | |
| 61864 | 262 | Some((c, i)) | 
| 263 | } | |
| 264 | else None | |
| 265 | } | |
| 266 | ||
| 75393 | 267 |   object Break {
 | 
| 61862 
e2a9e46ac0fb
support pretty break indent, like underlying ML systems;
 wenzelm parents: 
61660diff
changeset | 268 | val name = "break" | 
| 61864 | 269 | def apply(w: Int, i: Int): Markup = | 
| 270 | Markup(name, | |
| 271 | (if (w != 0) Width(w) else Nil) ::: | |
| 272 | (if (i != 0) Indent(i) else Nil)) | |
| 61862 
e2a9e46ac0fb
support pretty break indent, like underlying ML systems;
 wenzelm parents: 
61660diff
changeset | 273 | def unapply(markup: Markup): Option[(Int, Int)] = | 
| 
e2a9e46ac0fb
support pretty break indent, like underlying ML systems;
 wenzelm parents: 
61660diff
changeset | 274 |       if (markup.name == name) {
 | 
| 74782 | 275 | val w = Width.get(markup.properties) | 
| 276 | val i = Indent.get(markup.properties) | |
| 61864 | 277 | Some((w, i)) | 
| 61862 
e2a9e46ac0fb
support pretty break indent, like underlying ML systems;
 wenzelm parents: 
61660diff
changeset | 278 | } | 
| 
e2a9e46ac0fb
support pretty break indent, like underlying ML systems;
 wenzelm parents: 
61660diff
changeset | 279 | else None | 
| 
e2a9e46ac0fb
support pretty break indent, like underlying ML systems;
 wenzelm parents: 
61660diff
changeset | 280 | } | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 281 | |
| 51570 
3633828d80fc
basic support for Pretty.item, which is considered as logical markup and interpreted in Isabelle/Scala, but ignored elsewhere (TTY, latex etc.);
 wenzelm parents: 
50975diff
changeset | 282 | val ITEM = "item" | 
| 51574 
2b58d7b139d6
ghost bullet via markup, which is painted as bar under text (normally space);
 wenzelm parents: 
51570diff
changeset | 283 | val BULLET = "bullet" | 
| 51570 
3633828d80fc
basic support for Pretty.item, which is considered as logical markup and interpreted in Isabelle/Scala, but ignored elsewhere (TTY, latex etc.);
 wenzelm parents: 
50975diff
changeset | 284 | |
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 285 | val SEPARATOR = "separator" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 286 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 287 | |
| 56548 | 288 | /* text properties */ | 
| 289 | ||
| 290 | val WORDS = "words" | |
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 291 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 292 | val HIDDEN = "hidden" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 293 | |
| 68298 
2c3ce27cf4a8
markup for deleted fragments of token source (NB: quoted tokens transform "\123" implicitly);
 wenzelm parents: 
68148diff
changeset | 294 | val DELETE = "delete" | 
| 
2c3ce27cf4a8
markup for deleted fragments of token source (NB: quoted tokens transform "\123" implicitly);
 wenzelm parents: 
68148diff
changeset | 295 | |
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 296 | |
| 58048 
aa6296d09e0e
more explicit Method.modifier with reported position;
 wenzelm parents: 
57595diff
changeset | 297 | /* misc entities */ | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 298 | |
| 74112 | 299 | val SESSION = "session" | 
| 300 | ||
| 72781 | 301 | val THEORY = "theory" | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 302 | val CLASS = "class" | 
| 74112 | 303 | val LOCALE = "locale" | 
| 74261 
d28a51dd9da6
export other entities, e.g. relevant for formal document output;
 wenzelm parents: 
74182diff
changeset | 304 | val BUNDLE = "bundle" | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 305 | val TYPE_NAME = "type_name" | 
| 74112 | 306 | val CONSTANT = "constant" | 
| 307 | val AXIOM = "axiom" | |
| 308 | val FACT = "fact" | |
| 309 | val ORACLE = "oracle" | |
| 310 | ||
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 311 | val FIXED = "fixed" | 
| 53378 
07990ba8c0ea
cases: more position information and PIDE markup;
 wenzelm parents: 
53055diff
changeset | 312 | val CASE = "case" | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 313 | val DYNAMIC_FACT = "dynamic_fact" | 
| 74112 | 314 | val LITERAL_FACT = "literal_fact" | 
| 315 | ||
| 316 | val ATTRIBUTE = "attribute" | |
| 317 | val METHOD = "method" | |
| 318 | val METHOD_MODIFIER = "method_modifier" | |
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 319 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 320 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 321 | /* inner syntax */ | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 322 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 323 | val TFREE = "tfree" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 324 | val TVAR = "tvar" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 325 | val FREE = "free" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 326 | val SKOLEM = "skolem" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 327 | val BOUND = "bound" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 328 | val VAR = "var" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 329 | val NUMERAL = "numeral" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 330 | val LITERAL = "literal" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 331 | val DELIMITER = "delimiter" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 332 | val INNER_STRING = "inner_string" | 
| 55033 | 333 | val INNER_CARTOUCHE = "inner_cartouche" | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 334 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 335 | val TOKEN_RANGE = "token_range" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 336 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 337 | val SORTING = "sorting" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 338 | val TYPING = "typing" | 
| 63347 | 339 | val CLASS_PARAMETER = "class_parameter" | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 340 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 341 | |
| 55550 | 342 | /* antiquotations */ | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 343 | |
| 55526 | 344 | val ANTIQUOTED = "antiquoted" | 
| 345 | val ANTIQUOTE = "antiquote" | |
| 346 | ||
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 347 | val ML_ANTIQUOTATION = "ML_antiquotation" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 348 | val DOCUMENT_ANTIQUOTATION = "document_antiquotation" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 349 | val DOCUMENT_ANTIQUOTATION_OPTION = "document_antiquotation_option" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 350 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 351 | |
| 70135 
ad6d4a14adb5
report document tags as seen in the text (not the active tag of Thy_Output.present_thy);
 wenzelm parents: 
70016diff
changeset | 352 | /* document text */ | 
| 69965 
da5e7278286b
more markup for various text kinds, notably for nested formal comments;
 wenzelm parents: 
69962diff
changeset | 353 | |
| 
da5e7278286b
more markup for various text kinds, notably for nested formal comments;
 wenzelm parents: 
69962diff
changeset | 354 | val RAW_TEXT = "raw_text" | 
| 
da5e7278286b
more markup for various text kinds, notably for nested formal comments;
 wenzelm parents: 
69962diff
changeset | 355 | val PLAIN_TEXT = "plain_text" | 
| 
da5e7278286b
more markup for various text kinds, notably for nested formal comments;
 wenzelm parents: 
69962diff
changeset | 356 | |
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 357 | val PARAGRAPH = "paragraph" | 
| 50545 
00bdc48c5f71
explicit text_fold markup, which is used by default in Pretty.chunks/chunks2;
 wenzelm parents: 
50543diff
changeset | 358 | val TEXT_FOLD = "text_fold" | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 359 | |
| 75393 | 360 |   object Document_Tag extends Markup_String("document_tag", NAME) {
 | 
| 70135 
ad6d4a14adb5
report document tags as seen in the text (not the active tag of Thy_Output.present_thy);
 wenzelm parents: 
70016diff
changeset | 361 | val IMPORTANT = "important" | 
| 
ad6d4a14adb5
report document tags as seen in the text (not the active tag of Thy_Output.present_thy);
 wenzelm parents: 
70016diff
changeset | 362 | val UNIMPORTANT = "unimportant" | 
| 
ad6d4a14adb5
report document tags as seen in the text (not the active tag of Thy_Output.present_thy);
 wenzelm parents: 
70016diff
changeset | 363 | } | 
| 
ad6d4a14adb5
report document tags as seen in the text (not the active tag of Thy_Output.present_thy);
 wenzelm parents: 
70016diff
changeset | 364 | |
| 74784 
d2522bb4db1b
symbolic latex_output via XML, interpreted in Isabelle/Scala;
 wenzelm parents: 
74783diff
changeset | 365 | |
| 
d2522bb4db1b
symbolic latex_output via XML, interpreted in Isabelle/Scala;
 wenzelm parents: 
74783diff
changeset | 366 | /* LaTeX */ | 
| 
d2522bb4db1b
symbolic latex_output via XML, interpreted in Isabelle/Scala;
 wenzelm parents: 
74783diff
changeset | 367 | |
| 74783 | 368 |   val Document_Latex = new Markup_Elem("document_latex")
 | 
| 73780 
466fae6bf22e
compose Latex text as XML, output exported YXML in Isabelle/Scala;
 wenzelm parents: 
73556diff
changeset | 369 | |
| 74784 
d2522bb4db1b
symbolic latex_output via XML, interpreted in Isabelle/Scala;
 wenzelm parents: 
74783diff
changeset | 370 |   val Latex_Output = new Markup_Elem("latex_output")
 | 
| 74790 | 371 |   val Latex_Macro0 = new Markup_String("latex_macro0", NAME)
 | 
| 372 |   val Latex_Macro = new Markup_String("latex_macro", NAME)
 | |
| 373 |   val Latex_Environment = new Markup_String("latex_environment", NAME)
 | |
| 74823 | 374 |   val Latex_Heading = new Markup_String("latex_heading", KIND)
 | 
| 375 |   val Latex_Body = new Markup_String("latex_body", KIND)
 | |
| 74826 
0e4d8aa61ad7
more symbolic latex_output via XML (using YXML within text);
 wenzelm parents: 
74823diff
changeset | 376 |   val Latex_Delim = new Markup_String("latex_delim", NAME)
 | 
| 
0e4d8aa61ad7
more symbolic latex_output via XML (using YXML within text);
 wenzelm parents: 
74823diff
changeset | 377 |   val Latex_Tag = new Markup_String("latex_tag", NAME)
 | 
| 
0e4d8aa61ad7
more symbolic latex_output via XML (using YXML within text);
 wenzelm parents: 
74823diff
changeset | 378 | |
| 76955 | 379 |   val Latex_Cite = new Markup_Elem("latex_cite")
 | 
| 76957 
deb7dffb3340
avoid confusion of markup element vs. property names;
 wenzelm parents: 
76956diff
changeset | 380 |   val Citations = new Properties.String("citations")
 | 
| 76955 | 381 | |
| 74786 | 382 |   val Latex_Index_Item = new Markup_Elem("latex_index_item")
 | 
| 383 |   val Latex_Index_Entry = new Markup_String("latex_index_entry", KIND)
 | |
| 74784 
d2522bb4db1b
symbolic latex_output via XML, interpreted in Isabelle/Scala;
 wenzelm parents: 
74783diff
changeset | 384 | |
| 74836 
a97ec0954c50
example: alternative document headings, based on more general document output markup;
 wenzelm parents: 
74829diff
changeset | 385 |   val Optional_Argument = new Properties.String("optional_argument")
 | 
| 
a97ec0954c50
example: alternative document headings, based on more general document output markup;
 wenzelm parents: 
74829diff
changeset | 386 | |
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 387 | |
| 61449 | 388 | /* Markdown document structure */ | 
| 389 | ||
| 390 | val MARKDOWN_PARAGRAPH = "markdown_paragraph" | |
| 67323 
d02208cefbdb
PIDE markup for Markdown items (which may consist of multiple paragraphs or lists);
 wenzelm parents: 
67322diff
changeset | 391 | val MARKDOWN_ITEM = "markdown_item" | 
| 67336 | 392 |   val Markdown_Bullet = new Markup_Int("markdown_bullet", "depth")
 | 
| 61449 | 393 |   val Markdown_List = new Markup_String("markdown_list", "kind")
 | 
| 67336 | 394 | |
| 395 | val ITEMIZE = "itemize" | |
| 396 | val ENUMERATE = "enumerate" | |
| 397 | val DESCRIPTION = "description" | |
| 61449 | 398 | |
| 399 | ||
| 60744 | 400 | /* ML */ | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 401 | |
| 55505 | 402 | val ML_KEYWORD1 = "ML_keyword1" | 
| 403 | val ML_KEYWORD2 = "ML_keyword2" | |
| 404 | val ML_KEYWORD3 = "ML_keyword3" | |
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 405 | val ML_DELIMITER = "ML_delimiter" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 406 | val ML_TVAR = "ML_tvar" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 407 | val ML_NUMERAL = "ML_numeral" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 408 | val ML_CHAR = "ML_char" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 409 | val ML_STRING = "ML_string" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 410 | val ML_COMMENT = "ML_comment" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 411 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 412 | val ML_DEF = "ML_def" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 413 | val ML_OPEN = "ML_open" | 
| 55837 | 414 | val ML_STRUCTURE = "ML_structure" | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 415 | val ML_TYPING = "ML_typing" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 416 | |
| 60744 | 417 | val ML_BREAKPOINT = "ML_breakpoint" | 
| 418 | ||
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 419 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 420 | /* outer syntax */ | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 421 | |
| 74673 | 422 | val COMMAND_SPAN = "command_span" | 
| 423 | val Command_Span = new Markup_String(COMMAND_SPAN, NAME) | |
| 424 | ||
| 55744 
4a4e5686e091
clarified token markup: keyword1/keyword2 is for syntax, and "command" the entity kind;
 wenzelm parents: 
55694diff
changeset | 425 | val COMMAND = "command" | 
| 66044 | 426 | val KEYWORD = "keyword" | 
| 55744 
4a4e5686e091
clarified token markup: keyword1/keyword2 is for syntax, and "command" the entity kind;
 wenzelm parents: 
55694diff
changeset | 427 | val KEYWORD1 = "keyword1" | 
| 
4a4e5686e091
clarified token markup: keyword1/keyword2 is for syntax, and "command" the entity kind;
 wenzelm parents: 
55694diff
changeset | 428 | val KEYWORD2 = "keyword2" | 
| 55765 | 429 | val KEYWORD3 = "keyword3" | 
| 55919 
2eb8c13339a5
more explicit quasi_keyword markup, for Args.$$$ material, which is somewhere in between of outer and inner syntax;
 wenzelm parents: 
55914diff
changeset | 430 | val QUASI_KEYWORD = "quasi_keyword" | 
| 56202 | 431 | val IMPROPER = "improper" | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 432 | val OPERATOR = "operator" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 433 | val STRING = "string" | 
| 59081 | 434 | val ALT_STRING = "alt_string" | 
| 55033 | 435 | val CARTOUCHE = "cartouche" | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 436 | val COMMENT = "comment" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 437 | |
| 72782 | 438 | val LOAD_COMMAND = "load_command" | 
| 439 | ||
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 440 | |
| 69320 | 441 | /* comments */ | 
| 442 | ||
| 443 | val COMMENT1 = "comment1" | |
| 444 | val COMMENT2 = "comment2" | |
| 445 | val COMMENT3 = "comment3" | |
| 446 | ||
| 447 | ||
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 448 | /* timing */ | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 449 | |
| 50781 | 450 |   val Elapsed = new Properties.Double("elapsed")
 | 
| 451 |   val CPU = new Properties.Double("cpu")
 | |
| 452 |   val GC = new Properties.Double("gc")
 | |
| 453 | ||
| 75393 | 454 |   object Timing_Properties {
 | 
| 50781 | 455 | def apply(timing: isabelle.Timing): Properties.T = | 
| 456 | Elapsed(timing.elapsed.seconds) ::: CPU(timing.cpu.seconds) ::: GC(timing.gc.seconds) | |
| 51662 
3391a493f39a
just one timing protocol function, with 3 implementations: TTY/PG, PIDE/document, build;
 wenzelm parents: 
51574diff
changeset | 457 | |
| 50781 | 458 | def unapply(props: Properties.T): Option[isabelle.Timing] = | 
| 459 |       (props, props, props) match {
 | |
| 460 | case (Elapsed(elapsed), CPU(cpu), GC(gc)) => | |
| 461 | Some(new isabelle.Timing(Time.seconds(elapsed), Time.seconds(cpu), Time.seconds(gc))) | |
| 462 | case _ => None | |
| 463 | } | |
| 72013 | 464 | |
| 74782 | 465 | def get(props: Properties.T): isabelle.Timing = | 
| 466 | unapply(props).getOrElse(isabelle.Timing.zero) | |
| 50781 | 467 | } | 
| 468 | ||
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 469 | val TIMING = "timing" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 470 | |
| 75393 | 471 |   object Timing {
 | 
| 50781 | 472 | def apply(timing: isabelle.Timing): Markup = Markup(TIMING, Timing_Properties(timing)) | 
| 51662 
3391a493f39a
just one timing protocol function, with 3 implementations: TTY/PG, PIDE/document, build;
 wenzelm parents: 
51574diff
changeset | 473 | |
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 474 | def unapply(markup: Markup): Option[isabelle.Timing] = | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 475 |       markup match {
 | 
| 50781 | 476 | case Markup(TIMING, Timing_Properties(timing)) => Some(timing) | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 477 | case _ => None | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 478 | } | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 479 | } | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 480 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 481 | |
| 65317 | 482 | /* process result */ | 
| 483 | ||
| 484 |   val Return_Code = new Properties.Int("return_code")
 | |
| 485 | ||
| 75393 | 486 |   object Process_Result {
 | 
| 65317 | 487 | def apply(result: Process_Result): Properties.T = | 
| 488 | Return_Code(result.rc) ::: | |
| 489 | (if (result.timing.is_zero) Nil else Timing_Properties(result.timing)) | |
| 490 | ||
| 491 | def unapply(props: Properties.T): Option[Process_Result] = | |
| 492 |       props match {
 | |
| 493 | case Return_Code(rc) => | |
| 494 | val timing = Timing_Properties.unapply(props).getOrElse(isabelle.Timing.zero) | |
| 495 | Some(isabelle.Process_Result(rc, timing = timing)) | |
| 496 | case _ => None | |
| 497 | } | |
| 498 | } | |
| 499 | ||
| 500 | ||
| 63474 
f66e3c3b0fb1
semantic indentation for unstructured proof scripts;
 wenzelm parents: 
63347diff
changeset | 501 | /* command indentation */ | 
| 
f66e3c3b0fb1
semantic indentation for unstructured proof scripts;
 wenzelm parents: 
63347diff
changeset | 502 | |
| 74782 | 503 |   val Command_Indent = new Markup_Int("command_indent", Indent.name)
 | 
| 63474 
f66e3c3b0fb1
semantic indentation for unstructured proof scripts;
 wenzelm parents: 
63347diff
changeset | 504 | |
| 
f66e3c3b0fb1
semantic indentation for unstructured proof scripts;
 wenzelm parents: 
63347diff
changeset | 505 | |
| 
f66e3c3b0fb1
semantic indentation for unstructured proof scripts;
 wenzelm parents: 
63347diff
changeset | 506 | /* goals */ | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 507 | |
| 50543 | 508 | val GOAL = "goal" | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 509 | val SUBGOAL = "subgoal" | 
| 50215 | 510 | |
| 50450 
358b6020f8b6
generalized notion of active area, where sendback is just one application;
 wenzelm parents: 
50255diff
changeset | 511 | |
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 512 | /* command status */ | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 513 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 514 | val TASK = "task" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 515 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 516 | val ACCEPTED = "accepted" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 517 | val FORKED = "forked" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 518 | val JOINED = "joined" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 519 | val RUNNING = "running" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 520 | val FINISHED = "finished" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 521 | val FAILED = "failed" | 
| 68871 
f5c76072db55
more explicit status for "canceled" command within theory node;
 wenzelm parents: 
68822diff
changeset | 522 | val CANCELED = "canceled" | 
| 68323 | 523 | val INITIALIZED = "initialized" | 
| 68884 
9b97d0b20d95
clarified quasi_consolidated state: ensure that exports are present for ok nodes;
 wenzelm parents: 
68871diff
changeset | 524 | val FINALIZED = "finalized" | 
| 70780 
034742453594
more robust: avoid update/interrupt of long-running print_consolidation;
 wenzelm parents: 
70665diff
changeset | 525 | val CONSOLIDATING = "consolidating" | 
| 66379 
6392766f3c25
maintain "consolidated" status of theory nodes, which means all evals are finished (but not necessarily prints nor imports);
 wenzelm parents: 
66044diff
changeset | 526 | val CONSOLIDATED = "consolidated" | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 527 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 528 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 529 | /* interactive documents */ | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 530 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 531 | val VERSION = "version" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 532 | val ASSIGN = "assign" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 533 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 534 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 535 | /* prover process */ | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 536 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 537 | val PROVER_COMMAND = "prover_command" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 538 | val PROVER_ARG = "prover_arg" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 539 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 540 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 541 | /* messages */ | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 542 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 543 | val INIT = "init" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 544 | val STATUS = "status" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 545 | val REPORT = "report" | 
| 50500 
c94bba7906d2
identify dialogs via official serial and maintain as result message;
 wenzelm parents: 
50499diff
changeset | 546 | val RESULT = "result" | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 547 | val WRITELN = "writeln" | 
| 59184 
830bb7ddb3ab
explicit message channels for "state", "information";
 wenzelm parents: 
59112diff
changeset | 548 | val STATE = "state" | 
| 
830bb7ddb3ab
explicit message channels for "state", "information";
 wenzelm parents: 
59112diff
changeset | 549 | val INFORMATION = "information" | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 550 | val TRACING = "tracing" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 551 | val WARNING = "warning" | 
| 59203 
5f0bd5afc16d
explicit message channel for "legacy", which is nonetheless a variant of "warning";
 wenzelm parents: 
59186diff
changeset | 552 | val LEGACY = "legacy" | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 553 | val ERROR = "error" | 
| 68770 
add44e2b8cb0
optional notification of nodes_status (via progress);
 wenzelm parents: 
68323diff
changeset | 554 | val NODES_STATUS = "nodes_status" | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 555 | val PROTOCOL = "protocol" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 556 | val SYSTEM = "system" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 557 | val STDOUT = "stdout" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 558 | val STDERR = "stderr" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 559 | val EXIT = "exit" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 560 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 561 | val WRITELN_MESSAGE = "writeln_message" | 
| 59184 
830bb7ddb3ab
explicit message channels for "state", "information";
 wenzelm parents: 
59112diff
changeset | 562 | val STATE_MESSAGE = "state_message" | 
| 
830bb7ddb3ab
explicit message channels for "state", "information";
 wenzelm parents: 
59112diff
changeset | 563 | val INFORMATION_MESSAGE = "information_message" | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 564 | val TRACING_MESSAGE = "tracing_message" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 565 | val WARNING_MESSAGE = "warning_message" | 
| 59203 
5f0bd5afc16d
explicit message channel for "legacy", which is nonetheless a variant of "warning";
 wenzelm parents: 
59186diff
changeset | 566 | val LEGACY_MESSAGE = "legacy_message" | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 567 | val ERROR_MESSAGE = "error_message" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 568 | |
| 59184 
830bb7ddb3ab
explicit message channels for "state", "information";
 wenzelm parents: 
59112diff
changeset | 569 | val messages = Map( | 
| 
830bb7ddb3ab
explicit message channels for "state", "information";
 wenzelm parents: 
59112diff
changeset | 570 | WRITELN -> WRITELN_MESSAGE, | 
| 
830bb7ddb3ab
explicit message channels for "state", "information";
 wenzelm parents: 
59112diff
changeset | 571 | STATE -> STATE_MESSAGE, | 
| 
830bb7ddb3ab
explicit message channels for "state", "information";
 wenzelm parents: 
59112diff
changeset | 572 | INFORMATION -> INFORMATION_MESSAGE, | 
| 
830bb7ddb3ab
explicit message channels for "state", "information";
 wenzelm parents: 
59112diff
changeset | 573 | TRACING -> TRACING_MESSAGE, | 
| 
830bb7ddb3ab
explicit message channels for "state", "information";
 wenzelm parents: 
59112diff
changeset | 574 | WARNING -> WARNING_MESSAGE, | 
| 59203 
5f0bd5afc16d
explicit message channel for "legacy", which is nonetheless a variant of "warning";
 wenzelm parents: 
59186diff
changeset | 575 | LEGACY -> LEGACY_MESSAGE, | 
| 59184 
830bb7ddb3ab
explicit message channels for "state", "information";
 wenzelm parents: 
59112diff
changeset | 576 | ERROR -> ERROR_MESSAGE) | 
| 
830bb7ddb3ab
explicit message channels for "state", "information";
 wenzelm parents: 
59112diff
changeset | 577 | |
| 52876 | 578 | val message: String => String = messages.withDefault((s: String) => s) | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 579 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 580 | val NO_REPORT = "no_report" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 581 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 582 | val BAD = "bad" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 583 | |
| 50500 
c94bba7906d2
identify dialogs via official serial and maintain as result message;
 wenzelm parents: 
50499diff
changeset | 584 | val INTENSIFY = "intensify" | 
| 
c94bba7906d2
identify dialogs via official serial and maintain as result message;
 wenzelm parents: 
50499diff
changeset | 585 | |
| 
c94bba7906d2
identify dialogs via official serial and maintain as result message;
 wenzelm parents: 
50499diff
changeset | 586 | |
| 73835 | 587 | /* ML profiling */ | 
| 588 | ||
| 589 | val COUNT = "count" | |
| 590 | val ML_PROFILING_ENTRY = "ML_profiling_entry" | |
| 591 | val ML_PROFILING = "ML_profiling" | |
| 592 | ||
| 75393 | 593 |   object ML_Profiling {
 | 
| 73835 | 594 | def unapply_entry(tree: XML.Tree): Option[isabelle.ML_Profiling.Entry] = | 
| 595 |       tree match {
 | |
| 596 | case XML.Elem(Markup(ML_PROFILING_ENTRY, List((NAME, name), (COUNT, Value.Long(count)))), _) => | |
| 597 | Some(isabelle.ML_Profiling.Entry(name, count)) | |
| 598 | case _ => None | |
| 599 | } | |
| 600 | ||
| 601 | def unapply_report(tree: XML.Tree): Option[isabelle.ML_Profiling.Report] = | |
| 602 |       tree match {
 | |
| 603 | case XML.Elem(Markup(ML_PROFILING, List((KIND, kind))), body) => | |
| 604 | Some(isabelle.ML_Profiling.Report(kind, body.flatMap(unapply_entry))) | |
| 605 | case _ => None | |
| 606 | } | |
| 607 | } | |
| 608 | ||
| 609 | ||
| 50500 
c94bba7906d2
identify dialogs via official serial and maintain as result message;
 wenzelm parents: 
50499diff
changeset | 610 | /* active areas */ | 
| 
c94bba7906d2
identify dialogs via official serial and maintain as result message;
 wenzelm parents: 
50499diff
changeset | 611 | |
| 50715 
8cfd585b9162
prefer old graph browser in Isabelle/jEdit, which still produces better layout;
 wenzelm parents: 
50545diff
changeset | 612 | val BROWSER = "browser" | 
| 50500 
c94bba7906d2
identify dialogs via official serial and maintain as result message;
 wenzelm parents: 
50499diff
changeset | 613 | val GRAPHVIEW = "graphview" | 
| 69650 | 614 | val THEORY_EXPORTS = "theory_exports" | 
| 50500 
c94bba7906d2
identify dialogs via official serial and maintain as result message;
 wenzelm parents: 
50499diff
changeset | 615 | |
| 
c94bba7906d2
identify dialogs via official serial and maintain as result message;
 wenzelm parents: 
50499diff
changeset | 616 | val SENDBACK = "sendback" | 
| 
c94bba7906d2
identify dialogs via official serial and maintain as result message;
 wenzelm parents: 
50499diff
changeset | 617 | val PADDING = "padding" | 
| 52697 
6fb98a20c349
explicit padding on command boundary for "auto" generated sendback -- do not replace the corresponding goal command, but append to it;
 wenzelm parents: 
52643diff
changeset | 618 | val PADDING_LINE = (PADDING, "line") | 
| 
6fb98a20c349
explicit padding on command boundary for "auto" generated sendback -- do not replace the corresponding goal command, but append to it;
 wenzelm parents: 
52643diff
changeset | 619 | val PADDING_COMMAND = (PADDING, "command") | 
| 50500 
c94bba7906d2
identify dialogs via official serial and maintain as result message;
 wenzelm parents: 
50499diff
changeset | 620 | |
| 
c94bba7906d2
identify dialogs via official serial and maintain as result message;
 wenzelm parents: 
50499diff
changeset | 621 | val DIALOG = "dialog" | 
| 50503 
50f141b34bb7
enable Isabelle/ML to produce uninterpreted result messages as well;
 wenzelm parents: 
50501diff
changeset | 622 | val Result = new Properties.String(RESULT) | 
| 50500 
c94bba7906d2
identify dialogs via official serial and maintain as result message;
 wenzelm parents: 
50499diff
changeset | 623 | |
| 63681 | 624 | val JEDIT_ACTION = "jedit_action" | 
| 625 | ||
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 626 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 627 | /* protocol message functions */ | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 628 | |
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 629 | val FUNCTION = "function" | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 630 | |
| 75393 | 631 |   class Function(val name: String) {
 | 
| 76394 | 632 | val THIS: Properties.Entry = (FUNCTION, name) | 
| 71673 | 633 | } | 
| 66942 
91a21a5631ae
proper order of initialization (amending 9953ae603a23);
 wenzelm parents: 
66873diff
changeset | 634 | |
| 75393 | 635 |   class Properties_Function(name: String) extends Function(name) {
 | 
| 71673 | 636 | def unapply(props: Properties.T): Option[Properties.T] = | 
| 52111 
1fd184eaa310
explicit management of Session.Protocol_Handlers, with protocol state and functions;
 wenzelm parents: 
51818diff
changeset | 637 |       props match {
 | 
| 76394 | 638 | case THIS :: args => Some(args) | 
| 52111 
1fd184eaa310
explicit management of Session.Protocol_Handlers, with protocol state and functions;
 wenzelm parents: 
51818diff
changeset | 639 | case _ => None | 
| 
1fd184eaa310
explicit management of Session.Protocol_Handlers, with protocol state and functions;
 wenzelm parents: 
51818diff
changeset | 640 | } | 
| 
1fd184eaa310
explicit management of Session.Protocol_Handlers, with protocol state and functions;
 wenzelm parents: 
51818diff
changeset | 641 | } | 
| 
1fd184eaa310
explicit management of Session.Protocol_Handlers, with protocol state and functions;
 wenzelm parents: 
51818diff
changeset | 642 | |
| 75393 | 643 |   class Name_Function(name: String) extends Function(name) {
 | 
| 72112 
3546dd4ade74
ML statistics via external process: allows monitoring RTS while ML program sleeps;
 wenzelm parents: 
72107diff
changeset | 644 | def unapply(props: Properties.T): Option[String] = | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 645 |       props match {
 | 
| 76394 | 646 | case List(THIS, (NAME, a)) => Some(a) | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 647 | case _ => None | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 648 | } | 
| 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 649 | } | 
| 52111 
1fd184eaa310
explicit management of Session.Protocol_Handlers, with protocol state and functions;
 wenzelm parents: 
51818diff
changeset | 650 | |
| 75393 | 651 |   object ML_Statistics extends Function("ML_statistics") {
 | 
| 72119 
d115d50a19c0
provide POLYSTATSDIR to keep $HOME/.polyml clean (requires Poly/ML 52881757b127, otherwise ignored);
 wenzelm parents: 
72116diff
changeset | 652 | def unapply(props: Properties.T): Option[(Long, String)] = | 
| 72112 
3546dd4ade74
ML statistics via external process: allows monitoring RTS while ML program sleeps;
 wenzelm parents: 
72107diff
changeset | 653 |       props match {
 | 
| 76394 | 654 |         case List(THIS, ("pid", Value.Long(pid)), ("stats_dir", stats_dir)) =>
 | 
| 72119 
d115d50a19c0
provide POLYSTATSDIR to keep $HOME/.polyml clean (requires Poly/ML 52881757b127, otherwise ignored);
 wenzelm parents: 
72116diff
changeset | 655 | Some((pid, stats_dir)) | 
| 72112 
3546dd4ade74
ML statistics via external process: allows monitoring RTS while ML program sleeps;
 wenzelm parents: 
72107diff
changeset | 656 | case _ => None | 
| 
3546dd4ade74
ML statistics via external process: allows monitoring RTS while ML program sleeps;
 wenzelm parents: 
72107diff
changeset | 657 | } | 
| 
3546dd4ade74
ML statistics via external process: allows monitoring RTS while ML program sleeps;
 wenzelm parents: 
72107diff
changeset | 658 | } | 
| 
3546dd4ade74
ML statistics via external process: allows monitoring RTS while ML program sleeps;
 wenzelm parents: 
72107diff
changeset | 659 | |
| 72107 
1b06ed254943
more compact command_timings, as in former batch-build;
 wenzelm parents: 
72013diff
changeset | 660 | val command_timing_properties: Set[String] = Set(FILE, OFFSET, NAME, Elapsed.name) | 
| 72711 | 661 | def command_timing_property(entry: Properties.Entry): Boolean = command_timing_properties(entry._1) | 
| 72107 
1b06ed254943
more compact command_timings, as in former batch-build;
 wenzelm parents: 
72013diff
changeset | 662 | |
| 71673 | 663 |   object Command_Timing extends Properties_Function("command_timing")
 | 
| 664 |   object Theory_Timing extends Properties_Function("theory_timing")
 | |
| 75393 | 665 |   object Session_Timing extends Properties_Function("session_timing") {
 | 
| 72013 | 666 |     val Threads = new Properties.Int("threads")
 | 
| 72008 
7a53fc156c2b
proper session Timing for build_history log file (see 5c4800f6b25a);
 wenzelm parents: 
72002diff
changeset | 667 | } | 
| 71673 | 668 |   object Task_Statistics extends Properties_Function("task_statistics")
 | 
| 669 | ||
| 72692 
22aeec526ffd
support for PIDE markup in batch build (inactive due to pide_reports=false);
 wenzelm parents: 
72332diff
changeset | 670 |   object Loading_Theory extends Properties_Function("loading_theory")
 | 
| 71673 | 671 |   object Build_Session_Finished extends Function("build_session_finished")
 | 
| 672 | ||
| 673 |   object Commands_Accepted extends Function("commands_accepted")
 | |
| 674 |   object Assign_Update extends Function("assign_update")
 | |
| 675 |   object Removed_Versions extends Function("removed_versions")
 | |
| 676 | ||
| 75393 | 677 |   object Invoke_Scala extends Function("invoke_scala") {
 | 
| 73419 
22f3f2117ed7
clarified signature: function_thread is determined in Isabelle/Scala, not Isabelle/ML;
 wenzelm parents: 
73360diff
changeset | 678 | def unapply(props: Properties.T): Option[(String, String)] = | 
| 50201 
c26369c9eda6
Isabelle-specific implementation of quasi-abstract markup elements -- back to module arrangement before d83797ef0d2d;
 wenzelm parents: 
49613diff
changeset | 679 |       props match {
 | 
| 76394 | 680 | case List(THIS, (NAME, name), (ID, id)) => Some((name, id)) | 
| 50255 | 681 | case _ => None | 
| 682 | } | |
| 683 | } | |
| 50975 | 684 | |
| 75393 | 685 |   object Cancel_Scala extends Function("cancel_scala") {
 | 
| 71673 | 686 | def unapply(props: Properties.T): Option[String] = | 
| 50975 | 687 |       props match {
 | 
| 76394 | 688 | case List(THIS, (ID, id)) => Some(id) | 
| 50975 | 689 | case _ => None | 
| 690 | } | |
| 691 | } | |
| 55316 
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
 Lars Hupel <lars.hupel@mytum.de> parents: 
55033diff
changeset | 692 | |
| 69788 | 693 | val PRINT_OPERATIONS = "print_operations" | 
| 694 | ||
| 695 | ||
| 696 | /* export */ | |
| 697 | ||
| 68088 | 698 | val EXPORT = "export" | 
| 71624 | 699 | val THEORY_NAME = "theory_name" | 
| 700 | val EXECUTABLE = "executable" | |
| 701 | val COMPRESS = "compress" | |
| 702 | val STRICT = "strict" | |
| 68088 | 703 | |
| 55553 
99409ccbe04a
more standard names for protocol and markup elements;
 wenzelm parents: 
55551diff
changeset | 704 | |
| 60830 | 705 | /* debugger output */ | 
| 706 | ||
| 60842 | 707 | val DEBUGGER_STATE = "debugger_state" | 
| 75393 | 708 |   object Debugger_State {
 | 
| 60842 | 709 | def unapply(props: Properties.T): Option[String] = | 
| 710 |       props match {
 | |
| 711 | case List((FUNCTION, DEBUGGER_STATE), (NAME, name)) => Some(name) | |
| 712 | case _ => None | |
| 713 | } | |
| 714 | } | |
| 715 | ||
| 60830 | 716 | val DEBUGGER_OUTPUT = "debugger_output" | 
| 75393 | 717 |   object Debugger_Output {
 | 
| 60834 | 718 | def unapply(props: Properties.T): Option[String] = | 
| 60830 | 719 |       props match {
 | 
| 60834 | 720 | case List((FUNCTION, DEBUGGER_OUTPUT), (NAME, name)) => Some(name) | 
| 60830 | 721 | case _ => None | 
| 722 | } | |
| 723 | } | |
| 724 | ||
| 725 | ||
| 55316 
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
 Lars Hupel <lars.hupel@mytum.de> parents: 
55033diff
changeset | 726 | /* simplifier trace */ | 
| 
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
 Lars Hupel <lars.hupel@mytum.de> parents: 
55033diff
changeset | 727 | |
| 57594 
037f3b251df5
regular message to refer to Simplifier Trace panel (unused);
 wenzelm parents: 
56864diff
changeset | 728 | val SIMP_TRACE_PANEL = "simp_trace_panel" | 
| 55316 
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
 Lars Hupel <lars.hupel@mytum.de> parents: 
55033diff
changeset | 729 | |
| 55553 
99409ccbe04a
more standard names for protocol and markup elements;
 wenzelm parents: 
55551diff
changeset | 730 | val SIMP_TRACE_LOG = "simp_trace_log" | 
| 
99409ccbe04a
more standard names for protocol and markup elements;
 wenzelm parents: 
55551diff
changeset | 731 | val SIMP_TRACE_STEP = "simp_trace_step" | 
| 
99409ccbe04a
more standard names for protocol and markup elements;
 wenzelm parents: 
55551diff
changeset | 732 | val SIMP_TRACE_RECURSE = "simp_trace_recurse" | 
| 
99409ccbe04a
more standard names for protocol and markup elements;
 wenzelm parents: 
55551diff
changeset | 733 | val SIMP_TRACE_HINT = "simp_trace_hint" | 
| 
99409ccbe04a
more standard names for protocol and markup elements;
 wenzelm parents: 
55551diff
changeset | 734 | val SIMP_TRACE_IGNORE = "simp_trace_ignore" | 
| 55316 
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
 Lars Hupel <lars.hupel@mytum.de> parents: 
55033diff
changeset | 735 | |
| 55553 
99409ccbe04a
more standard names for protocol and markup elements;
 wenzelm parents: 
55551diff
changeset | 736 | val SIMP_TRACE_CANCEL = "simp_trace_cancel" | 
| 75393 | 737 |   object Simp_Trace_Cancel {
 | 
| 55316 
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
 Lars Hupel <lars.hupel@mytum.de> parents: 
55033diff
changeset | 738 | def unapply(props: Properties.T): Option[Long] = | 
| 
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
 Lars Hupel <lars.hupel@mytum.de> parents: 
55033diff
changeset | 739 |       props match {
 | 
| 55553 
99409ccbe04a
more standard names for protocol and markup elements;
 wenzelm parents: 
55551diff
changeset | 740 | case (FUNCTION, SIMP_TRACE_CANCEL) :: Serial(i) => Some(i) | 
| 55316 
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
 Lars Hupel <lars.hupel@mytum.de> parents: 
55033diff
changeset | 741 | case _ => None | 
| 
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
 Lars Hupel <lars.hupel@mytum.de> parents: 
55033diff
changeset | 742 | } | 
| 
885500f4aa6a
interactive simplifier trace: new panel in Isabelle/jEdit to inspect and modify simplification state
 Lars Hupel <lars.hupel@mytum.de> parents: 
55033diff
changeset | 743 | } | 
| 65335 | 744 | |
| 745 | ||
| 746 | /* XML data representation */ | |
| 747 | ||
| 75394 | 748 |   def encode: XML.Encode.T[Markup] = { (markup: Markup) =>
 | 
| 65335 | 749 | import XML.Encode._ | 
| 750 | pair(string, properties)((markup.name, markup.properties)) | |
| 751 | } | |
| 752 | ||
| 75394 | 753 |   def decode: XML.Decode.T[Markup] = { (body: XML.Body) =>
 | 
| 65335 | 754 | import XML.Decode._ | 
| 755 | val (name, props) = pair(string, properties)(body) | |
| 756 | Markup(name, props) | |
| 757 | } | |
| 45666 | 758 | } | 
| 43721 
fad8634cee62
echo prover input via raw_messages, for improved protocol tracing;
 wenzelm parents: 
43710diff
changeset | 759 | |
| 
fad8634cee62
echo prover input via raw_messages, for improved protocol tracing;
 wenzelm parents: 
43710diff
changeset | 760 | |
| 75393 | 761 | sealed case class Markup(name: String, properties: Properties.T) {
 | 
| 73556 
192bcee4f8b8
more robust treatment of empty markup: it allows to produce formal chunks;
 wenzelm parents: 
73419diff
changeset | 762 | def is_empty: Boolean = name.isEmpty | 
| 
192bcee4f8b8
more robust treatment of empty markup: it allows to produce formal chunks;
 wenzelm parents: 
73419diff
changeset | 763 | |
| 74829 
f31229171b3b
source positions for document markup commands, e.g. to retrieve PIDE markup in presentation;
 wenzelm parents: 
74826diff
changeset | 764 | def position_properties: Position.T = properties.filter(Markup.position_property) | 
| 
f31229171b3b
source positions for document markup commands, e.g. to retrieve PIDE markup in presentation;
 wenzelm parents: 
74826diff
changeset | 765 | |
| 59707 | 766 | def markup(s: String): String = | 
| 767 | YXML.string_of_tree(XML.Elem(this, List(XML.Text(s)))) | |
| 64358 | 768 | |
| 769 | def update_properties(more_props: Properties.T): Markup = | |
| 770 | if (more_props.isEmpty) this | |
| 73360 | 771 |     else Markup(name, more_props.foldRight(properties) { case (p, ps) => Properties.put(ps, p) })
 | 
| 65753 | 772 | |
| 773 | def + (entry: Properties.Entry): Markup = | |
| 774 | Markup(name, Properties.put(properties, entry)) | |
| 59707 | 775 | } |