src/Pure/PIDE/markup.scala
changeset 50201 c26369c9eda6
parent 49613 2f6986e2ef06
child 50215 97959912840a
--- a/src/Pure/PIDE/markup.scala	Sun Nov 25 18:50:13 2012 +0100
+++ b/src/Pure/PIDE/markup.scala	Sun Nov 25 19:49:24 2012 +0100
@@ -2,7 +2,7 @@
     Module:     PIDE
     Author:     Makarius
 
-Generic markup elements.
+Isabelle-specific implementation of quasi-abstract markup elements.
 */
 
 package isabelle
@@ -19,10 +19,290 @@
   val Kind = new Properties.String(KIND)
 
 
-  /* elements */
+  /* basic markup */
 
   val Empty = Markup("", Nil)
   val Broken = Markup("broken", Nil)
+
+
+  /* formal entities */
+
+  val BINDING = "binding"
+  val ENTITY = "entity"
+  val DEF = "def"
+  val REF = "ref"
+
+  object Entity
+  {
+    def unapply(markup: Markup): Option[(String, String)] =
+      markup match {
+        case Markup(ENTITY, props @ Kind(kind)) =>
+          props match {
+            case Name(name) => Some(kind, name)
+            case _ => None
+          }
+        case _ => None
+      }
+  }
+
+
+  /* position */
+
+  val LINE = "line"
+  val OFFSET = "offset"
+  val END_OFFSET = "end_offset"
+  val FILE = "file"
+  val ID = "id"
+
+  val DEF_LINE = "def_line"
+  val DEF_OFFSET = "def_offset"
+  val DEF_END_OFFSET = "def_end_offset"
+  val DEF_FILE = "def_file"
+  val DEF_ID = "def_id"
+
+  val POSITION_PROPERTIES = Set(LINE, OFFSET, END_OFFSET, FILE, ID)
+  val POSITION = "position"
+
+
+  /* path */
+
+  val PATH = "path"
+
+  object Path
+  {
+    def unapply(markup: Markup): Option[String] =
+      markup match {
+        case Markup(PATH, Name(name)) => Some(name)
+        case _ => None
+      }
+  }
+
+
+  /* pretty printing */
+
+  val Indent = new Properties.Int("indent")
+  val BLOCK = "block"
+  val Width = new Properties.Int("width")
+  val BREAK = "break"
+
+  val SEPARATOR = "separator"
+
+
+  /* hidden text */
+
+  val HIDDEN = "hidden"
+
+
+  /* logical entities */
+
+  val CLASS = "class"
+  val TYPE_NAME = "type_name"
+  val FIXED = "fixed"
+  val CONSTANT = "constant"
+
+  val DYNAMIC_FACT = "dynamic_fact"
+
+
+  /* inner syntax */
+
+  val TFREE = "tfree"
+  val TVAR = "tvar"
+  val FREE = "free"
+  val SKOLEM = "skolem"
+  val BOUND = "bound"
+  val VAR = "var"
+  val NUMERAL = "numeral"
+  val LITERAL = "literal"
+  val DELIMITER = "delimiter"
+  val INNER_STRING = "inner_string"
+  val INNER_COMMENT = "inner_comment"
+
+  val TOKEN_RANGE = "token_range"
+
+  val SORT = "sort"
+  val TYP = "typ"
+  val TERM = "term"
+  val PROP = "prop"
+
+  val SORTING = "sorting"
+  val TYPING = "typing"
+
+  val ATTRIBUTE = "attribute"
+  val METHOD = "method"
+
+
+  /* embedded source text */
+
+  val ML_SOURCE = "ML_source"
+  val DOCUMENT_SOURCE = "document_source"
+
+  val ANTIQ = "antiq"
+  val ML_ANTIQUOTATION = "ML_antiquotation"
+  val DOCUMENT_ANTIQUOTATION = "document_antiquotation"
+  val DOCUMENT_ANTIQUOTATION_OPTION = "document_antiquotation_option"
+
+
+  /* text structure */
+
+  val PARAGRAPH = "paragraph"
+
+
+  /* ML syntax */
+
+  val ML_KEYWORD = "ML_keyword"
+  val ML_DELIMITER = "ML_delimiter"
+  val ML_TVAR = "ML_tvar"
+  val ML_NUMERAL = "ML_numeral"
+  val ML_CHAR = "ML_char"
+  val ML_STRING = "ML_string"
+  val ML_COMMENT = "ML_comment"
+
+  val ML_DEF = "ML_def"
+  val ML_OPEN = "ML_open"
+  val ML_STRUCT = "ML_struct"
+  val ML_TYPING = "ML_typing"
+
+
+  /* outer syntax */
+
+  val KEYWORD = "keyword"
+  val OPERATOR = "operator"
+  val COMMAND = "command"
+  val STRING = "string"
+  val ALTSTRING = "altstring"
+  val VERBATIM = "verbatim"
+  val COMMENT = "comment"
+  val CONTROL = "control"
+
+  val KEYWORD1 = "keyword1"
+  val KEYWORD2 = "keyword2"
+
+
+  /* timing */
+
+  val TIMING = "timing"
+  val ELAPSED = "elapsed"
+  val CPU = "cpu"
+  val GC = "gc"
+
+  object Timing
+  {
+    def apply(timing: isabelle.Timing): Markup =
+      Markup(TIMING, List(
+        (ELAPSED, Properties.Value.Double(timing.elapsed.seconds)),
+        (CPU, Properties.Value.Double(timing.cpu.seconds)),
+        (GC, Properties.Value.Double(timing.gc.seconds))))
+    def unapply(markup: Markup): Option[isabelle.Timing] =
+      markup match {
+        case Markup(TIMING, List(
+          (ELAPSED, Properties.Value.Double(elapsed)),
+          (CPU, Properties.Value.Double(cpu)),
+          (GC, Properties.Value.Double(gc)))) =>
+            Some(new isabelle.Timing(Time.seconds(elapsed), Time.seconds(cpu), Time.seconds(gc)))
+        case _ => None
+      }
+  }
+
+
+  /* toplevel */
+
+  val SUBGOALS = "subgoals"
+  val PROOF_STATE = "proof_state"
+
+  val STATE = "state"
+  val SUBGOAL = "subgoal"
+  val SENDBACK = "sendback"
+  val INTENSIFY = "intensify"
+
+
+  /* command status */
+
+  val TASK = "task"
+
+  val ACCEPTED = "accepted"
+  val FORKED = "forked"
+  val JOINED = "joined"
+  val RUNNING = "running"
+  val FINISHED = "finished"
+  val FAILED = "failed"
+
+
+  /* interactive documents */
+
+  val VERSION = "version"
+  val ASSIGN = "assign"
+
+
+  /* prover process */
+
+  val PROVER_COMMAND = "prover_command"
+  val PROVER_ARG = "prover_arg"
+
+
+  /* messages */
+
+  val Serial = new Properties.Long("serial")
+
+  val MESSAGE = "message"
+
+  val INIT = "init"
+  val STATUS = "status"
+  val REPORT = "report"
+  val WRITELN = "writeln"
+  val TRACING = "tracing"
+  val WARNING = "warning"
+  val ERROR = "error"
+  val PROTOCOL = "protocol"
+  val SYSTEM = "system"
+  val STDOUT = "stdout"
+  val STDERR = "stderr"
+  val EXIT = "exit"
+
+  val WRITELN_MESSAGE = "writeln_message"
+  val TRACING_MESSAGE = "tracing_message"
+  val WARNING_MESSAGE = "warning_message"
+  val ERROR_MESSAGE = "error_message"
+
+  val message: String => String =
+    Map(WRITELN -> WRITELN_MESSAGE, TRACING -> TRACING_MESSAGE,
+        WARNING -> WARNING_MESSAGE, ERROR -> ERROR_MESSAGE)
+      .withDefault((name: String) => name + "_message")
+
+  val Return_Code = new Properties.Int("return_code")
+
+  val LEGACY = "legacy"
+
+  val NO_REPORT = "no_report"
+
+  val BAD = "bad"
+
+  val GRAPHVIEW = "graphview"
+
+
+  /* protocol message functions */
+
+  val FUNCTION = "function"
+  val Function = new Properties.String(FUNCTION)
+
+  val Assign_Execs: Properties.T = List((FUNCTION, "assign_execs"))
+  val Removed_Versions: Properties.T = List((FUNCTION, "removed_versions"))
+
+  object Invoke_Scala
+  {
+    def unapply(props: Properties.T): Option[(String, String)] =
+      props match {
+        case List((FUNCTION, "invoke_scala"), (NAME, name), (ID, id)) => Some((name, id))
+        case _ => None
+      }
+  }
+  object Cancel_Scala
+  {
+    def unapply(props: Properties.T): Option[String] =
+      props match {
+        case List((FUNCTION, "cancel_scala"), (ID, id)) => Some(id)
+        case _ => None
+      }
+  }
 }