diff -r 2c94c065564e -r c26369c9eda6 src/Pure/PIDE/markup.scala --- 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 + } + } }