| author | blanchet | 
| Sun, 06 Nov 2011 13:57:17 +0100 | |
| changeset 45370 | bab52dafa63a | 
| parent 44706 | fe319b45315c | 
| child 45445 | 41e641a870de | 
| permissions | -rw-r--r-- | 
| 27958 | 1 | /* Title: Pure/General/markup.scala | 
| 2 | Author: Makarius | |
| 3 | ||
| 4 | Common markup elements. | |
| 5 | */ | |
| 6 | ||
| 7 | package isabelle | |
| 8 | ||
| 27970 | 9 | |
| 32450 | 10 | object Markup | 
| 11 | {
 | |
| 38474 
e498dc2eb576
uniform Markup.empty/Markup.Empty in ML and Scala;
 wenzelm parents: 
38429diff
changeset | 12 | /* empty */ | 
| 
e498dc2eb576
uniform Markup.empty/Markup.Empty in ML and Scala;
 wenzelm parents: 
38429diff
changeset | 13 | |
| 
e498dc2eb576
uniform Markup.empty/Markup.Empty in ML and Scala;
 wenzelm parents: 
38429diff
changeset | 14 |   val Empty = Markup("", Nil)
 | 
| 
e498dc2eb576
uniform Markup.empty/Markup.Empty in ML and Scala;
 wenzelm parents: 
38429diff
changeset | 15 | |
| 
e498dc2eb576
uniform Markup.empty/Markup.Empty in ML and Scala;
 wenzelm parents: 
38429diff
changeset | 16 | |
| 38721 
ca8b14fa0d0d
added some proof state markup, notably number of subgoals (e.g. for indentation);
 wenzelm parents: 
38474diff
changeset | 17 | /* misc properties */ | 
| 29184 | 18 | |
| 19 | val NAME = "name" | |
| 43780 | 20 | val Name = new Properties.String(NAME) | 
| 42136 | 21 | |
| 29184 | 22 | val KIND = "kind" | 
| 43780 | 23 | val Kind = new Properties.String(KIND) | 
| 29184 | 24 | |
| 25 | ||
| 33088 
757d7787b10c
markup for formal entities, with "def" or "ref" occurrences;
 wenzelm parents: 
32450diff
changeset | 26 | /* formal entities */ | 
| 
757d7787b10c
markup for formal entities, with "def" or "ref" occurrences;
 wenzelm parents: 
32450diff
changeset | 27 | |
| 38887 
1261481ef5e5
Command.State: add reported positions to markup tree, according main message position or Markup.binding/entity/report occurrences in body;
 wenzelm parents: 
38872diff
changeset | 28 | val BINDING = "binding" | 
| 33088 
757d7787b10c
markup for formal entities, with "def" or "ref" occurrences;
 wenzelm parents: 
32450diff
changeset | 29 | val ENTITY = "entity" | 
| 
757d7787b10c
markup for formal entities, with "def" or "ref" occurrences;
 wenzelm parents: 
32450diff
changeset | 30 | val DEF = "def" | 
| 
757d7787b10c
markup for formal entities, with "def" or "ref" occurrences;
 wenzelm parents: 
32450diff
changeset | 31 | val REF = "ref" | 
| 
757d7787b10c
markup for formal entities, with "def" or "ref" occurrences;
 wenzelm parents: 
32450diff
changeset | 32 | |
| 42202 | 33 | object Entity | 
| 34 |   {
 | |
| 35 | def unapply(markup: Markup): Option[(String, String)] = | |
| 36 |       markup match {
 | |
| 37 | case Markup(ENTITY, props @ Kind(kind)) => | |
| 38 |           props match {
 | |
| 39 | case Name(name) => Some(kind, name) | |
| 40 | case _ => None | |
| 41 | } | |
| 42 | case _ => None | |
| 43 | } | |
| 44 | } | |
| 45 | ||
| 33088 
757d7787b10c
markup for formal entities, with "def" or "ref" occurrences;
 wenzelm parents: 
32450diff
changeset | 46 | |
| 27970 | 47 | /* position */ | 
| 48 | ||
| 49 | val LINE = "line" | |
| 50 | val OFFSET = "offset" | |
| 51 | val END_OFFSET = "end_offset" | |
| 52 | val FILE = "file" | |
| 53 | val ID = "id" | |
| 54 | ||
| 42327 
7c7cc7590eb3
Name_Space.entry_markup: keep def position as separate properties;
 wenzelm parents: 
42202diff
changeset | 55 | val DEF_LINE = "def_line" | 
| 
7c7cc7590eb3
Name_Space.entry_markup: keep def position as separate properties;
 wenzelm parents: 
42202diff
changeset | 56 | val DEF_OFFSET = "def_offset" | 
| 
7c7cc7590eb3
Name_Space.entry_markup: keep def position as separate properties;
 wenzelm parents: 
42202diff
changeset | 57 | val DEF_END_OFFSET = "def_end_offset" | 
| 
7c7cc7590eb3
Name_Space.entry_markup: keep def position as separate properties;
 wenzelm parents: 
42202diff
changeset | 58 | val DEF_FILE = "def_file" | 
| 
7c7cc7590eb3
Name_Space.entry_markup: keep def position as separate properties;
 wenzelm parents: 
42202diff
changeset | 59 | val DEF_ID = "def_id" | 
| 
7c7cc7590eb3
Name_Space.entry_markup: keep def position as separate properties;
 wenzelm parents: 
42202diff
changeset | 60 | |
| 43710 
7270ae921cf2
discontinued odd Position.column -- left-over from attempts at PGIP implementation;
 wenzelm parents: 
43673diff
changeset | 61 | val POSITION_PROPERTIES = Set(LINE, OFFSET, END_OFFSET, FILE, ID) | 
| 43593 | 62 | val POSITION = "position" | 
| 29205 | 63 | |
| 43593 | 64 | |
| 65 | /* path */ | |
| 66 | ||
| 67 | val PATH = "path" | |
| 68 | ||
| 69 | object Path | |
| 70 |   {
 | |
| 71 | def unapply(markup: Markup): Option[String] = | |
| 72 |       markup match {
 | |
| 73 | case Markup(PATH, Name(name)) => Some(name) | |
| 74 | case _ => None | |
| 75 | } | |
| 76 | } | |
| 29184 | 77 | |
| 78 | ||
| 36683 | 79 | /* pretty printing */ | 
| 80 | ||
| 43780 | 81 |   val Indent = new Properties.Int("indent")
 | 
| 36683 | 82 | val BLOCK = "block" | 
| 43780 | 83 |   val Width = new Properties.Int("width")
 | 
| 36683 | 84 | val BREAK = "break" | 
| 85 | ||
| 86 | ||
| 33985 | 87 | /* hidden text */ | 
| 88 | ||
| 89 | val HIDDEN = "hidden" | |
| 90 | ||
| 91 | ||
| 29184 | 92 | /* logical entities */ | 
| 93 | ||
| 43551 | 94 | val CLASS = "class" | 
| 43552 | 95 | val TYPE = "type" | 
| 29184 | 96 | val FIXED = "fixed" | 
| 43552 | 97 | val CONSTANT = "constant" | 
| 98 | ||
| 29184 | 99 | val DYNAMIC_FACT = "dynamic_fact" | 
| 100 | ||
| 101 | ||
| 102 | /* inner syntax */ | |
| 103 | ||
| 104 | val TFREE = "tfree" | |
| 105 | val TVAR = "tvar" | |
| 106 | val FREE = "free" | |
| 107 | val SKOLEM = "skolem" | |
| 108 | val BOUND = "bound" | |
| 109 | val VAR = "var" | |
| 110 | val NUM = "num" | |
| 111 | val FLOAT = "float" | |
| 112 | val XNUM = "xnum" | |
| 113 | val XSTR = "xstr" | |
| 114 | val LITERAL = "literal" | |
| 43432 
224006e5ac46
inner literal/delimiter corresponds to outer keyword/operator;
 wenzelm parents: 
43386diff
changeset | 115 | val DELIMITER = "delimiter" | 
| 43386 
4e78dd88c64f
more foreground markup, using actual CSS color names;
 wenzelm parents: 
42492diff
changeset | 116 | val INNER_STRING = "inner_string" | 
| 29184 | 117 | val INNER_COMMENT = "inner_comment" | 
| 118 | ||
| 39168 
e3ac771235f7
report token range after inner parse error -- often provides important clues about misunderstanding concerning lexical phase;
 wenzelm parents: 
38887diff
changeset | 119 | val TOKEN_RANGE = "token_range" | 
| 
e3ac771235f7
report token range after inner parse error -- often provides important clues about misunderstanding concerning lexical phase;
 wenzelm parents: 
38887diff
changeset | 120 | |
| 29184 | 121 | val SORT = "sort" | 
| 122 | val TYP = "typ" | |
| 123 | val TERM = "term" | |
| 124 | val PROP = "prop" | |
| 125 | ||
| 126 | val ATTRIBUTE = "attribute" | |
| 127 | val METHOD = "method" | |
| 128 | ||
| 129 | ||
| 130 | /* embedded source text */ | |
| 131 | ||
| 132 | val ML_SOURCE = "ML_source" | |
| 133 | val DOC_SOURCE = "doc_source" | |
| 134 | ||
| 135 | val ANTIQ = "antiq" | |
| 43560 
d1650e3720fd
ML antiquotations are managed as theory data, with proper name space and entity markup;
 wenzelm parents: 
43552diff
changeset | 136 | val ML_ANTIQUOTATION = "ML antiquotation" | 
| 43564 
9864182c6bad
document antiquotations are managed as theory data, with proper name space and entity markup;
 wenzelm parents: 
43560diff
changeset | 137 | val DOCUMENT_ANTIQUOTATION = "document antiquotation" | 
| 
9864182c6bad
document antiquotations are managed as theory data, with proper name space and entity markup;
 wenzelm parents: 
43560diff
changeset | 138 | val DOCUMENT_ANTIQUOTATION_OPTION = "document antiquotation option" | 
| 29184 | 139 | |
| 140 | ||
| 30615 | 141 | /* ML syntax */ | 
| 142 | ||
| 143 | val ML_KEYWORD = "ML_keyword" | |
| 37195 | 144 | val ML_DELIMITER = "ML_delimiter" | 
| 30615 | 145 | val ML_TVAR = "ML_tvar" | 
| 146 | val ML_NUMERAL = "ML_numeral" | |
| 147 | val ML_CHAR = "ML_char" | |
| 148 | val ML_STRING = "ML_string" | |
| 149 | val ML_COMMENT = "ML_comment" | |
| 150 | val ML_MALFORMED = "ML_malformed" | |
| 151 | ||
| 30702 | 152 | val ML_DEF = "ML_def" | 
| 31472 | 153 | val ML_OPEN = "ML_open" | 
| 154 | val ML_STRUCT = "ML_struct" | |
| 30702 | 155 | val ML_TYPING = "ML_typing" | 
| 156 | ||
| 30615 | 157 | |
| 29184 | 158 | /* outer syntax */ | 
| 159 | ||
| 160 | val KEYWORD_DECL = "keyword_decl" | |
| 161 | val COMMAND_DECL = "command_decl" | |
| 162 | ||
| 163 | val KEYWORD = "keyword" | |
| 37194 | 164 | val OPERATOR = "operator" | 
| 29184 | 165 | val COMMAND = "command" | 
| 166 | val STRING = "string" | |
| 167 | val ALTSTRING = "altstring" | |
| 168 | val VERBATIM = "verbatim" | |
| 169 | val COMMENT = "comment" | |
| 170 | val CONTROL = "control" | |
| 171 | val MALFORMED = "malformed" | |
| 172 | ||
| 29185 | 173 | val COMMAND_SPAN = "command_span" | 
| 174 | val IGNORED_SPAN = "ignored_span" | |
| 175 | val MALFORMED_SPAN = "malformed_span" | |
| 176 | ||
| 29184 | 177 | |
| 43673 
29eb1cd29961
Thy_Info.dependencies: ignore already loaded theories, according to initial prover session status;
 wenzelm parents: 
43593diff
changeset | 178 | /* theory loader */ | 
| 
29eb1cd29961
Thy_Info.dependencies: ignore already loaded theories, according to initial prover session status;
 wenzelm parents: 
43593diff
changeset | 179 | |
| 
29eb1cd29961
Thy_Info.dependencies: ignore already loaded theories, according to initial prover session status;
 wenzelm parents: 
43593diff
changeset | 180 | val LOADED_THEORY = "loaded_theory" | 
| 
29eb1cd29961
Thy_Info.dependencies: ignore already loaded theories, according to initial prover session status;
 wenzelm parents: 
43593diff
changeset | 181 | |
| 
29eb1cd29961
Thy_Info.dependencies: ignore already loaded theories, according to initial prover session status;
 wenzelm parents: 
43593diff
changeset | 182 | |
| 40394 
6dcb6cbf0719
somewhat more uniform timing markup in ML vs. Scala;
 wenzelm parents: 
40392diff
changeset | 183 | /* timing */ | 
| 
6dcb6cbf0719
somewhat more uniform timing markup in ML vs. Scala;
 wenzelm parents: 
40392diff
changeset | 184 | |
| 
6dcb6cbf0719
somewhat more uniform timing markup in ML vs. Scala;
 wenzelm parents: 
40392diff
changeset | 185 | val TIMING = "timing" | 
| 
6dcb6cbf0719
somewhat more uniform timing markup in ML vs. Scala;
 wenzelm parents: 
40392diff
changeset | 186 | val ELAPSED = "elapsed" | 
| 
6dcb6cbf0719
somewhat more uniform timing markup in ML vs. Scala;
 wenzelm parents: 
40392diff
changeset | 187 | val CPU = "cpu" | 
| 
6dcb6cbf0719
somewhat more uniform timing markup in ML vs. Scala;
 wenzelm parents: 
40392diff
changeset | 188 | val GC = "gc" | 
| 
6dcb6cbf0719
somewhat more uniform timing markup in ML vs. Scala;
 wenzelm parents: 
40392diff
changeset | 189 | |
| 
6dcb6cbf0719
somewhat more uniform timing markup in ML vs. Scala;
 wenzelm parents: 
40392diff
changeset | 190 | object Timing | 
| 
6dcb6cbf0719
somewhat more uniform timing markup in ML vs. Scala;
 wenzelm parents: 
40392diff
changeset | 191 |   {
 | 
| 
6dcb6cbf0719
somewhat more uniform timing markup in ML vs. Scala;
 wenzelm parents: 
40392diff
changeset | 192 | def apply(timing: isabelle.Timing): Markup = | 
| 
6dcb6cbf0719
somewhat more uniform timing markup in ML vs. Scala;
 wenzelm parents: 
40392diff
changeset | 193 | Markup(TIMING, List( | 
| 43780 | 194 | (ELAPSED, Properties.Value.Double(timing.elapsed.seconds)), | 
| 195 | (CPU, Properties.Value.Double(timing.cpu.seconds)), | |
| 196 | (GC, Properties.Value.Double(timing.gc.seconds)))) | |
| 40394 
6dcb6cbf0719
somewhat more uniform timing markup in ML vs. Scala;
 wenzelm parents: 
40392diff
changeset | 197 | def unapply(markup: Markup): Option[isabelle.Timing] = | 
| 
6dcb6cbf0719
somewhat more uniform timing markup in ML vs. Scala;
 wenzelm parents: 
40392diff
changeset | 198 |       markup match {
 | 
| 
6dcb6cbf0719
somewhat more uniform timing markup in ML vs. Scala;
 wenzelm parents: 
40392diff
changeset | 199 | case Markup(TIMING, List( | 
| 43780 | 200 | (ELAPSED, Properties.Value.Double(elapsed)), | 
| 201 | (CPU, Properties.Value.Double(cpu)), | |
| 202 | (GC, Properties.Value.Double(gc)))) => | |
| 40848 
8662b9b1f123
more abstract/uniform handling of time, preferring seconds as Double;
 wenzelm parents: 
40394diff
changeset | 203 | Some(new isabelle.Timing(Time.seconds(elapsed), Time.seconds(cpu), Time.seconds(gc))) | 
| 40394 
6dcb6cbf0719
somewhat more uniform timing markup in ML vs. Scala;
 wenzelm parents: 
40392diff
changeset | 204 | case _ => None | 
| 
6dcb6cbf0719
somewhat more uniform timing markup in ML vs. Scala;
 wenzelm parents: 
40392diff
changeset | 205 | } | 
| 
6dcb6cbf0719
somewhat more uniform timing markup in ML vs. Scala;
 wenzelm parents: 
40392diff
changeset | 206 | } | 
| 
6dcb6cbf0719
somewhat more uniform timing markup in ML vs. Scala;
 wenzelm parents: 
40392diff
changeset | 207 | |
| 
6dcb6cbf0719
somewhat more uniform timing markup in ML vs. Scala;
 wenzelm parents: 
40392diff
changeset | 208 | |
| 29184 | 209 | /* toplevel */ | 
| 210 | ||
| 38721 
ca8b14fa0d0d
added some proof state markup, notably number of subgoals (e.g. for indentation);
 wenzelm parents: 
38474diff
changeset | 211 | val SUBGOALS = "subgoals" | 
| 
ca8b14fa0d0d
added some proof state markup, notably number of subgoals (e.g. for indentation);
 wenzelm parents: 
38474diff
changeset | 212 | val PROOF_STATE = "proof_state" | 
| 
ca8b14fa0d0d
added some proof state markup, notably number of subgoals (e.g. for indentation);
 wenzelm parents: 
38474diff
changeset | 213 | |
| 29184 | 214 | val STATE = "state" | 
| 215 | val SUBGOAL = "subgoal" | |
| 216 | val SENDBACK = "sendback" | |
| 217 | val HILITE = "hilite" | |
| 218 | ||
| 219 | ||
| 220 | /* command status */ | |
| 221 | ||
| 29417 | 222 | val TASK = "task" | 
| 223 | ||
| 37186 
349e9223c685
explicit markup for forked goals, as indicated by Goal.fork;
 wenzelm parents: 
37121diff
changeset | 224 | val FORKED = "forked" | 
| 
349e9223c685
explicit markup for forked goals, as indicated by Goal.fork;
 wenzelm parents: 
37121diff
changeset | 225 | val JOINED = "joined" | 
| 29184 | 226 | val FAILED = "failed" | 
| 227 | val FINISHED = "finished" | |
| 29488 | 228 | |
| 229 | ||
| 230 | /* interactive documents */ | |
| 231 | ||
| 38414 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38355diff
changeset | 232 | val VERSION = "version" | 
| 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38355diff
changeset | 233 | val ASSIGN = "assign" | 
| 29184 | 234 | |
| 27970 | 235 | |
| 43721 
fad8634cee62
echo prover input via raw_messages, for improved protocol tracing;
 wenzelm parents: 
43710diff
changeset | 236 | /* prover process */ | 
| 
fad8634cee62
echo prover input via raw_messages, for improved protocol tracing;
 wenzelm parents: 
43710diff
changeset | 237 | |
| 
fad8634cee62
echo prover input via raw_messages, for improved protocol tracing;
 wenzelm parents: 
43710diff
changeset | 238 | val PROVER_COMMAND = "prover_command" | 
| 
fad8634cee62
echo prover input via raw_messages, for improved protocol tracing;
 wenzelm parents: 
43710diff
changeset | 239 | val PROVER_ARG = "prover_arg" | 
| 
fad8634cee62
echo prover input via raw_messages, for improved protocol tracing;
 wenzelm parents: 
43710diff
changeset | 240 | |
| 
fad8634cee62
echo prover input via raw_messages, for improved protocol tracing;
 wenzelm parents: 
43710diff
changeset | 241 | |
| 27970 | 242 | /* messages */ | 
| 243 | ||
| 43780 | 244 |   val Serial = new Properties.Long("serial")
 | 
| 27970 | 245 | |
| 29195 | 246 | val MESSAGE = "message" | 
| 29522 
793766d4c1b5
moved message markup into Scala layer -- reduced redundancy;
 wenzelm parents: 
29488diff
changeset | 247 | |
| 
793766d4c1b5
moved message markup into Scala layer -- reduced redundancy;
 wenzelm parents: 
29488diff
changeset | 248 | val INIT = "init" | 
| 
793766d4c1b5
moved message markup into Scala layer -- reduced redundancy;
 wenzelm parents: 
29488diff
changeset | 249 | val STATUS = "status" | 
| 39525 | 250 | val REPORT = "report" | 
| 29522 
793766d4c1b5
moved message markup into Scala layer -- reduced redundancy;
 wenzelm parents: 
29488diff
changeset | 251 | val WRITELN = "writeln" | 
| 
793766d4c1b5
moved message markup into Scala layer -- reduced redundancy;
 wenzelm parents: 
29488diff
changeset | 252 | val TRACING = "tracing" | 
| 
793766d4c1b5
moved message markup into Scala layer -- reduced redundancy;
 wenzelm parents: 
29488diff
changeset | 253 | val WARNING = "warning" | 
| 
793766d4c1b5
moved message markup into Scala layer -- reduced redundancy;
 wenzelm parents: 
29488diff
changeset | 254 | val ERROR = "error" | 
| 43746 
a41f618c641d
some support for raw messages, which bypass standard Symbol/YXML decoding;
 wenzelm parents: 
43721diff
changeset | 255 | val RAW = "raw" | 
| 29522 
793766d4c1b5
moved message markup into Scala layer -- reduced redundancy;
 wenzelm parents: 
29488diff
changeset | 256 | val SYSTEM = "system" | 
| 
793766d4c1b5
moved message markup into Scala layer -- reduced redundancy;
 wenzelm parents: 
29488diff
changeset | 257 | val STDOUT = "stdout" | 
| 
793766d4c1b5
moved message markup into Scala layer -- reduced redundancy;
 wenzelm parents: 
29488diff
changeset | 258 | val EXIT = "exit" | 
| 29195 | 259 | |
| 44549 | 260 | val LEGACY = "legacy" | 
| 261 | ||
| 39439 
1c294d150ded
eliminated markup "location" in favour of more explicit "no_report", which is actually deleted from messages;
 wenzelm parents: 
39171diff
changeset | 262 | val NO_REPORT = "no_report" | 
| 
1c294d150ded
eliminated markup "location" in favour of more explicit "no_report", which is actually deleted from messages;
 wenzelm parents: 
39171diff
changeset | 263 | |
| 39171 
525a13b9ac74
highlight bad range of nested error (here from inner parsing);
 wenzelm parents: 
39168diff
changeset | 264 | val BAD = "bad" | 
| 
525a13b9ac74
highlight bad range of nested error (here from inner parsing);
 wenzelm parents: 
39168diff
changeset | 265 | |
| 39591 | 266 | val READY = "ready" | 
| 31384 
ce169bd37fc0
IsabelleProcess: emit status "ready" after initialization and reports;
 wenzelm parents: 
30702diff
changeset | 267 | |
| 27970 | 268 | |
| 43748 | 269 | /* raw message functions */ | 
| 270 | ||
| 271 | val FUNCTION = "function" | |
| 43780 | 272 | val Function = new Properties.String(FUNCTION) | 
| 43748 | 273 | |
| 44661 
383c9d758a56
raw message function "assign_execs" avoids full overhead of decoding and caching message body;
 wenzelm parents: 
44549diff
changeset | 274 | val Assign_Execs: Properties.T = List((FUNCTION, "assign_execs")) | 
| 44676 | 275 | val Removed_Versions: Properties.T = List((FUNCTION, "removed_versions")) | 
| 44661 
383c9d758a56
raw message function "assign_execs" avoids full overhead of decoding and caching message body;
 wenzelm parents: 
44549diff
changeset | 276 | |
| 43748 | 277 | val INVOKE_SCALA = "invoke_scala" | 
| 278 | object Invoke_Scala | |
| 279 |   {
 | |
| 43780 | 280 | def unapply(props: Properties.T): Option[(String, String)] = | 
| 43748 | 281 |       props match {
 | 
| 282 | case List((FUNCTION, INVOKE_SCALA), (NAME, name), (ID, id)) => Some((name, id)) | |
| 283 | case _ => None | |
| 284 | } | |
| 285 | } | |
| 286 | ||
| 44298 
b8f8488704e2
Future.promise: explicit abort operation (like uninterruptible future job);
 wenzelm parents: 
43780diff
changeset | 287 | val CANCEL_SCALA = "cancel_scala" | 
| 
b8f8488704e2
Future.promise: explicit abort operation (like uninterruptible future job);
 wenzelm parents: 
43780diff
changeset | 288 | object Cancel_Scala | 
| 
b8f8488704e2
Future.promise: explicit abort operation (like uninterruptible future job);
 wenzelm parents: 
43780diff
changeset | 289 |   {
 | 
| 
b8f8488704e2
Future.promise: explicit abort operation (like uninterruptible future job);
 wenzelm parents: 
43780diff
changeset | 290 | def unapply(props: Properties.T): Option[String] = | 
| 
b8f8488704e2
Future.promise: explicit abort operation (like uninterruptible future job);
 wenzelm parents: 
43780diff
changeset | 291 |       props match {
 | 
| 
b8f8488704e2
Future.promise: explicit abort operation (like uninterruptible future job);
 wenzelm parents: 
43780diff
changeset | 292 | case List((FUNCTION, CANCEL_SCALA), (ID, id)) => Some(id) | 
| 
b8f8488704e2
Future.promise: explicit abort operation (like uninterruptible future job);
 wenzelm parents: 
43780diff
changeset | 293 | case _ => None | 
| 
b8f8488704e2
Future.promise: explicit abort operation (like uninterruptible future job);
 wenzelm parents: 
43780diff
changeset | 294 | } | 
| 
b8f8488704e2
Future.promise: explicit abort operation (like uninterruptible future job);
 wenzelm parents: 
43780diff
changeset | 295 | } | 
| 
b8f8488704e2
Future.promise: explicit abort operation (like uninterruptible future job);
 wenzelm parents: 
43780diff
changeset | 296 | |
| 43748 | 297 | |
| 34119 | 298 | /* system data */ | 
| 27970 | 299 | |
| 38231 | 300 |   val Data = Markup("data", Nil)
 | 
| 27958 | 301 | } | 
| 38230 
ed147003de4b
simplified type XML.Tree: embed Markup directly, avoid slightly odd triple;
 wenzelm parents: 
37195diff
changeset | 302 | |
| 43780 | 303 | sealed case class Markup(name: String, properties: Properties.T) |