| author | blanchet | 
| Mon, 06 Sep 2010 16:50:29 +0200 | |
| changeset 39220 | 8420a873f534 | 
| parent 38887 | 1261481ef5e5 | 
| child 39168 | e3ac771235f7 | 
| 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 | {
 | |
| 38722 
ba31936497c2
organized markup properties via apply/unapply patterns;
 wenzelm parents: 
38721diff
changeset | 12 | /* plain values */ | 
| 38414 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38355diff
changeset | 13 | |
| 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38355diff
changeset | 14 |   object Int {
 | 
| 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38355diff
changeset | 15 | def apply(i: scala.Int): String = i.toString | 
| 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38355diff
changeset | 16 | def unapply(s: String): Option[scala.Int] = | 
| 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38355diff
changeset | 17 |       try { Some(Integer.parseInt(s)) }
 | 
| 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38355diff
changeset | 18 |       catch { case _: NumberFormatException => None }
 | 
| 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38355diff
changeset | 19 | } | 
| 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38355diff
changeset | 20 | |
| 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38355diff
changeset | 21 |   object Long {
 | 
| 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38355diff
changeset | 22 | def apply(i: scala.Long): String = i.toString | 
| 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38355diff
changeset | 23 | def unapply(s: String): Option[scala.Long] = | 
| 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38355diff
changeset | 24 |       try { Some(java.lang.Long.parseLong(s)) }
 | 
| 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38355diff
changeset | 25 |       catch { case _: NumberFormatException => None }
 | 
| 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38355diff
changeset | 26 | } | 
| 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38355diff
changeset | 27 | |
| 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38355diff
changeset | 28 | |
| 38722 
ba31936497c2
organized markup properties via apply/unapply patterns;
 wenzelm parents: 
38721diff
changeset | 29 | /* named properties */ | 
| 36683 | 30 | |
| 38722 
ba31936497c2
organized markup properties via apply/unapply patterns;
 wenzelm parents: 
38721diff
changeset | 31 | class Property(val name: String) | 
| 38355 
8cb265fb12fe
represent document ids by (long) int, to benefit from the somewhat faster Inttab in ML (LinearSet in Scala is invariably indexed by native object ids);
 wenzelm parents: 
38259diff
changeset | 32 |   {
 | 
| 38722 
ba31936497c2
organized markup properties via apply/unapply patterns;
 wenzelm parents: 
38721diff
changeset | 33 | def apply(value: String): List[(String, String)] = List((name, value)) | 
| 
ba31936497c2
organized markup properties via apply/unapply patterns;
 wenzelm parents: 
38721diff
changeset | 34 | def unapply(props: List[(String, String)]): Option[String] = | 
| 
ba31936497c2
organized markup properties via apply/unapply patterns;
 wenzelm parents: 
38721diff
changeset | 35 | props.find(_._1 == name).map(_._2) | 
| 38355 
8cb265fb12fe
represent document ids by (long) int, to benefit from the somewhat faster Inttab in ML (LinearSet in Scala is invariably indexed by native object ids);
 wenzelm parents: 
38259diff
changeset | 36 | } | 
| 
8cb265fb12fe
represent document ids by (long) int, to benefit from the somewhat faster Inttab in ML (LinearSet in Scala is invariably indexed by native object ids);
 wenzelm parents: 
38259diff
changeset | 37 | |
| 38722 
ba31936497c2
organized markup properties via apply/unapply patterns;
 wenzelm parents: 
38721diff
changeset | 38 | class Int_Property(name: String) | 
| 36683 | 39 |   {
 | 
| 38722 
ba31936497c2
organized markup properties via apply/unapply patterns;
 wenzelm parents: 
38721diff
changeset | 40 | def apply(value: scala.Int): List[(String, String)] = List((name, Int(value))) | 
| 
ba31936497c2
organized markup properties via apply/unapply patterns;
 wenzelm parents: 
38721diff
changeset | 41 | def unapply(props: List[(String, String)]): Option[Int] = | 
| 
ba31936497c2
organized markup properties via apply/unapply patterns;
 wenzelm parents: 
38721diff
changeset | 42 |       props.find(_._1 == name) match {
 | 
| 
ba31936497c2
organized markup properties via apply/unapply patterns;
 wenzelm parents: 
38721diff
changeset | 43 | case None => None | 
| 
ba31936497c2
organized markup properties via apply/unapply patterns;
 wenzelm parents: 
38721diff
changeset | 44 | case Some((_, value)) => Int.unapply(value) | 
| 
ba31936497c2
organized markup properties via apply/unapply patterns;
 wenzelm parents: 
38721diff
changeset | 45 | } | 
| 
ba31936497c2
organized markup properties via apply/unapply patterns;
 wenzelm parents: 
38721diff
changeset | 46 | } | 
| 
ba31936497c2
organized markup properties via apply/unapply patterns;
 wenzelm parents: 
38721diff
changeset | 47 | |
| 
ba31936497c2
organized markup properties via apply/unapply patterns;
 wenzelm parents: 
38721diff
changeset | 48 | class Long_Property(name: String) | 
| 
ba31936497c2
organized markup properties via apply/unapply patterns;
 wenzelm parents: 
38721diff
changeset | 49 |   {
 | 
| 
ba31936497c2
organized markup properties via apply/unapply patterns;
 wenzelm parents: 
38721diff
changeset | 50 | def apply(value: scala.Long): List[(String, String)] = List((name, Long(value))) | 
| 
ba31936497c2
organized markup properties via apply/unapply patterns;
 wenzelm parents: 
38721diff
changeset | 51 | def unapply(props: List[(String, String)]): Option[Long] = | 
| 
ba31936497c2
organized markup properties via apply/unapply patterns;
 wenzelm parents: 
38721diff
changeset | 52 |       props.find(_._1 == name) match {
 | 
| 
ba31936497c2
organized markup properties via apply/unapply patterns;
 wenzelm parents: 
38721diff
changeset | 53 | case None => None | 
| 
ba31936497c2
organized markup properties via apply/unapply patterns;
 wenzelm parents: 
38721diff
changeset | 54 | case Some((_, value)) => Long.unapply(value) | 
| 
ba31936497c2
organized markup properties via apply/unapply patterns;
 wenzelm parents: 
38721diff
changeset | 55 | } | 
| 36683 | 56 | } | 
| 57 | ||
| 58 | ||
| 38474 
e498dc2eb576
uniform Markup.empty/Markup.Empty in ML and Scala;
 wenzelm parents: 
38429diff
changeset | 59 | /* empty */ | 
| 
e498dc2eb576
uniform Markup.empty/Markup.Empty in ML and Scala;
 wenzelm parents: 
38429diff
changeset | 60 | |
| 
e498dc2eb576
uniform Markup.empty/Markup.Empty in ML and Scala;
 wenzelm parents: 
38429diff
changeset | 61 |   val Empty = Markup("", Nil)
 | 
| 
e498dc2eb576
uniform Markup.empty/Markup.Empty in ML and Scala;
 wenzelm parents: 
38429diff
changeset | 62 | |
| 
e498dc2eb576
uniform Markup.empty/Markup.Empty in ML and Scala;
 wenzelm parents: 
38429diff
changeset | 63 | |
| 38721 
ca8b14fa0d0d
added some proof state markup, notably number of subgoals (e.g. for indentation);
 wenzelm parents: 
38474diff
changeset | 64 | /* misc properties */ | 
| 29184 | 65 | |
| 66 | val NAME = "name" | |
| 67 | val KIND = "kind" | |
| 68 | ||
| 69 | ||
| 33088 
757d7787b10c
markup for formal entities, with "def" or "ref" occurrences;
 wenzelm parents: 
32450diff
changeset | 70 | /* formal entities */ | 
| 
757d7787b10c
markup for formal entities, with "def" or "ref" occurrences;
 wenzelm parents: 
32450diff
changeset | 71 | |
| 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 | 72 | val BINDING = "binding" | 
| 33088 
757d7787b10c
markup for formal entities, with "def" or "ref" occurrences;
 wenzelm parents: 
32450diff
changeset | 73 | val ENTITY = "entity" | 
| 
757d7787b10c
markup for formal entities, with "def" or "ref" occurrences;
 wenzelm parents: 
32450diff
changeset | 74 | val DEF = "def" | 
| 
757d7787b10c
markup for formal entities, with "def" or "ref" occurrences;
 wenzelm parents: 
32450diff
changeset | 75 | val REF = "ref" | 
| 
757d7787b10c
markup for formal entities, with "def" or "ref" occurrences;
 wenzelm parents: 
32450diff
changeset | 76 | |
| 
757d7787b10c
markup for formal entities, with "def" or "ref" occurrences;
 wenzelm parents: 
32450diff
changeset | 77 | |
| 27970 | 78 | /* position */ | 
| 79 | ||
| 80 | val LINE = "line" | |
| 81 | val COLUMN = "column" | |
| 82 | val OFFSET = "offset" | |
| 83 | val END_LINE = "end_line" | |
| 84 | val END_COLUMN = "end_column" | |
| 85 | val END_OFFSET = "end_offset" | |
| 86 | val FILE = "file" | |
| 87 | val ID = "id" | |
| 88 | ||
| 32450 | 89 | val POSITION_PROPERTIES = | 
| 90 | Set(LINE, COLUMN, OFFSET, END_LINE, END_COLUMN, END_OFFSET, FILE, ID) | |
| 29205 | 91 | |
| 29184 | 92 | val POSITION = "position" | 
| 93 | val LOCATION = "location" | |
| 94 | ||
| 95 | ||
| 36683 | 96 | /* pretty printing */ | 
| 97 | ||
| 38724 | 98 |   val Indent = new Int_Property("indent")
 | 
| 36683 | 99 | val BLOCK = "block" | 
| 38724 | 100 |   val Width = new Int_Property("width")
 | 
| 36683 | 101 | val BREAK = "break" | 
| 102 | ||
| 103 | ||
| 33985 | 104 | /* hidden text */ | 
| 105 | ||
| 106 | val HIDDEN = "hidden" | |
| 107 | ||
| 108 | ||
| 29184 | 109 | /* logical entities */ | 
| 110 | ||
| 111 | val TCLASS = "tclass" | |
| 112 | val TYCON = "tycon" | |
| 113 | val FIXED_DECL = "fixed_decl" | |
| 114 | val FIXED = "fixed" | |
| 115 | val CONST_DECL = "const_decl" | |
| 116 | val CONST = "const" | |
| 117 | val FACT_DECL = "fact_decl" | |
| 118 | val FACT = "fact" | |
| 119 | val DYNAMIC_FACT = "dynamic_fact" | |
| 120 | val LOCAL_FACT_DECL = "local_fact_decl" | |
| 121 | val LOCAL_FACT = "local_fact" | |
| 122 | ||
| 123 | ||
| 124 | /* inner syntax */ | |
| 125 | ||
| 126 | val TFREE = "tfree" | |
| 127 | val TVAR = "tvar" | |
| 128 | val FREE = "free" | |
| 129 | val SKOLEM = "skolem" | |
| 130 | val BOUND = "bound" | |
| 131 | val VAR = "var" | |
| 132 | val NUM = "num" | |
| 133 | val FLOAT = "float" | |
| 134 | val XNUM = "xnum" | |
| 135 | val XSTR = "xstr" | |
| 136 | val LITERAL = "literal" | |
| 137 | val INNER_COMMENT = "inner_comment" | |
| 138 | ||
| 139 | val SORT = "sort" | |
| 140 | val TYP = "typ" | |
| 141 | val TERM = "term" | |
| 142 | val PROP = "prop" | |
| 143 | ||
| 144 | val ATTRIBUTE = "attribute" | |
| 145 | val METHOD = "method" | |
| 146 | ||
| 147 | ||
| 148 | /* embedded source text */ | |
| 149 | ||
| 150 | val ML_SOURCE = "ML_source" | |
| 151 | val DOC_SOURCE = "doc_source" | |
| 152 | ||
| 153 | val ANTIQ = "antiq" | |
| 154 | val ML_ANTIQ = "ML_antiq" | |
| 155 | val DOC_ANTIQ = "doc_antiq" | |
| 156 | ||
| 157 | ||
| 30615 | 158 | /* ML syntax */ | 
| 159 | ||
| 160 | val ML_KEYWORD = "ML_keyword" | |
| 37195 | 161 | val ML_DELIMITER = "ML_delimiter" | 
| 30615 | 162 | val ML_IDENT = "ML_ident" | 
| 163 | val ML_TVAR = "ML_tvar" | |
| 164 | val ML_NUMERAL = "ML_numeral" | |
| 165 | val ML_CHAR = "ML_char" | |
| 166 | val ML_STRING = "ML_string" | |
| 167 | val ML_COMMENT = "ML_comment" | |
| 168 | val ML_MALFORMED = "ML_malformed" | |
| 169 | ||
| 30702 | 170 | val ML_DEF = "ML_def" | 
| 31472 | 171 | val ML_OPEN = "ML_open" | 
| 172 | val ML_STRUCT = "ML_struct" | |
| 30702 | 173 | val ML_REF = "ML_ref" | 
| 174 | val ML_TYPING = "ML_typing" | |
| 175 | ||
| 30615 | 176 | |
| 29184 | 177 | /* outer syntax */ | 
| 178 | ||
| 179 | val KEYWORD_DECL = "keyword_decl" | |
| 180 | val COMMAND_DECL = "command_decl" | |
| 181 | ||
| 182 | val KEYWORD = "keyword" | |
| 37194 | 183 | val OPERATOR = "operator" | 
| 29184 | 184 | val COMMAND = "command" | 
| 185 | val IDENT = "ident" | |
| 186 | val STRING = "string" | |
| 187 | val ALTSTRING = "altstring" | |
| 188 | val VERBATIM = "verbatim" | |
| 189 | val COMMENT = "comment" | |
| 190 | val CONTROL = "control" | |
| 191 | val MALFORMED = "malformed" | |
| 192 | ||
| 29185 | 193 | val COMMAND_SPAN = "command_span" | 
| 194 | val IGNORED_SPAN = "ignored_span" | |
| 195 | val MALFORMED_SPAN = "malformed_span" | |
| 196 | ||
| 29184 | 197 | |
| 198 | /* toplevel */ | |
| 199 | ||
| 38721 
ca8b14fa0d0d
added some proof state markup, notably number of subgoals (e.g. for indentation);
 wenzelm parents: 
38474diff
changeset | 200 | val SUBGOALS = "subgoals" | 
| 
ca8b14fa0d0d
added some proof state markup, notably number of subgoals (e.g. for indentation);
 wenzelm parents: 
38474diff
changeset | 201 | val PROOF_STATE = "proof_state" | 
| 
ca8b14fa0d0d
added some proof state markup, notably number of subgoals (e.g. for indentation);
 wenzelm parents: 
38474diff
changeset | 202 | |
| 29184 | 203 | val STATE = "state" | 
| 204 | val SUBGOAL = "subgoal" | |
| 205 | val SENDBACK = "sendback" | |
| 206 | val HILITE = "hilite" | |
| 207 | ||
| 208 | ||
| 209 | /* command status */ | |
| 210 | ||
| 29417 | 211 | val TASK = "task" | 
| 212 | ||
| 37186 
349e9223c685
explicit markup for forked goals, as indicated by Goal.fork;
 wenzelm parents: 
37121diff
changeset | 213 | val FORKED = "forked" | 
| 
349e9223c685
explicit markup for forked goals, as indicated by Goal.fork;
 wenzelm parents: 
37121diff
changeset | 214 | val JOINED = "joined" | 
| 29184 | 215 | val FAILED = "failed" | 
| 216 | val FINISHED = "finished" | |
| 29488 | 217 | |
| 218 | ||
| 219 | /* interactive documents */ | |
| 220 | ||
| 38414 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38355diff
changeset | 221 | val VERSION = "version" | 
| 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38355diff
changeset | 222 | val EXEC = "exec" | 
| 
49f1f657adc2
more basic Markup.parse_int/print_int (using signed_string_of_int) (ML);
 wenzelm parents: 
38355diff
changeset | 223 | val ASSIGN = "assign" | 
| 29488 | 224 | val EDIT = "edit" | 
| 29184 | 225 | |
| 27970 | 226 | |
| 227 | /* messages */ | |
| 228 | ||
| 229 | val PID = "pid" | |
| 38872 | 230 |   val Serial = new Long_Property("serial")
 | 
| 27970 | 231 | |
| 29195 | 232 | val MESSAGE = "message" | 
| 29522 
793766d4c1b5
moved message markup into Scala layer -- reduced redundancy;
 wenzelm parents: 
29488diff
changeset | 233 | val CLASS = "class" | 
| 
793766d4c1b5
moved message markup into Scala layer -- reduced redundancy;
 wenzelm parents: 
29488diff
changeset | 234 | |
| 
793766d4c1b5
moved message markup into Scala layer -- reduced redundancy;
 wenzelm parents: 
29488diff
changeset | 235 | val INIT = "init" | 
| 
793766d4c1b5
moved message markup into Scala layer -- reduced redundancy;
 wenzelm parents: 
29488diff
changeset | 236 | val STATUS = "status" | 
| 38236 
d8c7be27e01d
explicitly distinguish Output.status (essential feedback) vs. Output.report (useful markup);
 wenzelm parents: 
38231diff
changeset | 237 | val REPORT = "report" | 
| 29522 
793766d4c1b5
moved message markup into Scala layer -- reduced redundancy;
 wenzelm parents: 
29488diff
changeset | 238 | val WRITELN = "writeln" | 
| 
793766d4c1b5
moved message markup into Scala layer -- reduced redundancy;
 wenzelm parents: 
29488diff
changeset | 239 | val TRACING = "tracing" | 
| 
793766d4c1b5
moved message markup into Scala layer -- reduced redundancy;
 wenzelm parents: 
29488diff
changeset | 240 | val WARNING = "warning" | 
| 
793766d4c1b5
moved message markup into Scala layer -- reduced redundancy;
 wenzelm parents: 
29488diff
changeset | 241 | val ERROR = "error" | 
| 
793766d4c1b5
moved message markup into Scala layer -- reduced redundancy;
 wenzelm parents: 
29488diff
changeset | 242 | val DEBUG = "debug" | 
| 
793766d4c1b5
moved message markup into Scala layer -- reduced redundancy;
 wenzelm parents: 
29488diff
changeset | 243 | val SYSTEM = "system" | 
| 38259 
2b61c5e27399
distinguish proper Isabelle_Process INPUT vs. raw STDIN, tuned corresponding method names;
 wenzelm parents: 
38236diff
changeset | 244 | val INPUT = "input" | 
| 29522 
793766d4c1b5
moved message markup into Scala layer -- reduced redundancy;
 wenzelm parents: 
29488diff
changeset | 245 | val STDIN = "stdin" | 
| 
793766d4c1b5
moved message markup into Scala layer -- reduced redundancy;
 wenzelm parents: 
29488diff
changeset | 246 | val STDOUT = "stdout" | 
| 
793766d4c1b5
moved message markup into Scala layer -- reduced redundancy;
 wenzelm parents: 
29488diff
changeset | 247 | val SIGNAL = "signal" | 
| 
793766d4c1b5
moved message markup into Scala layer -- reduced redundancy;
 wenzelm parents: 
29488diff
changeset | 248 | val EXIT = "exit" | 
| 29195 | 249 | |
| 38231 | 250 |   val Ready = Markup("ready", Nil)
 | 
| 31384 
ce169bd37fc0
IsabelleProcess: emit status "ready" after initialization and reports;
 wenzelm parents: 
30702diff
changeset | 251 | |
| 27970 | 252 | |
| 34119 | 253 | /* system data */ | 
| 27970 | 254 | |
| 38231 | 255 |   val Data = Markup("data", Nil)
 | 
| 27958 | 256 | } | 
| 38230 
ed147003de4b
simplified type XML.Tree: embed Markup directly, avoid slightly odd triple;
 wenzelm parents: 
37195diff
changeset | 257 | |
| 
ed147003de4b
simplified type XML.Tree: embed Markup directly, avoid slightly odd triple;
 wenzelm parents: 
37195diff
changeset | 258 | sealed case class Markup(name: String, properties: List[(String, String)]) |