diff -r 189ece4b4ff1 -r 719f458cd89e src/Pure/System/session.scala --- a/src/Pure/System/session.scala Tue Aug 07 15:19:08 2012 +0200 +++ b/src/Pure/System/session.scala Tue Aug 07 16:34:15 2012 +0200 @@ -108,7 +108,7 @@ val prev = previous.get_finished val (doc_edits, version) = Timing.timeit("Thy_Syntax.text_edits", timing) { - Thy_Syntax.text_edits(prover_syntax, prev, text_edits) + Thy_Syntax.text_edits(base_syntax, prev, text_edits) } version_result.fulfill(version) sender ! Change(doc_edits, prev, version) @@ -125,11 +125,7 @@ /* global state */ - @volatile private var prover_syntax = - Outer_Syntax.init() + - // FIXME avoid hardwired stuff!? - ("hence", Keyword.PRF_ASM_GOAL, "then have") + - ("thus", Keyword.PRF_ASM_GOAL, "then show") + @volatile private var base_syntax = Outer_Syntax.empty private val syslog = Volatile(Queue.empty[XML.Elem]) def current_syslog(): String = cat_lines(syslog().iterator.map(msg => XML.content(msg).mkString)) @@ -149,7 +145,7 @@ def recent_syntax(): Outer_Syntax = { val version = current_state().recent_finished.version.get_finished - if (version.is_init) prover_syntax + if (version.is_init) base_syntax else version.syntax } @@ -172,7 +168,7 @@ /* actor messages */ - private case class Start(args: List[String]) + private case class Start(logic: String, args: List[String]) private case object Cancel_Execution private case class Edit(edits: List[Document.Edit_Text]) private case class Change( @@ -361,12 +357,6 @@ case Isabelle_Markup.Loaded_Theory(name) if output.is_protocol => thy_load.register_thy(name) - case Isabelle_Markup.Command_Decl(name, kind) if output.is_protocol => - prover_syntax += (name, kind) - - case Isabelle_Markup.Keyword_Decl(name) if output.is_protocol => - prover_syntax += name - case Isabelle_Markup.Return_Code(rc) if output.is_exit => if (rc == 0) phase = Session.Inactive else phase = Session.Failed @@ -387,9 +377,10 @@ receiveWithin(delay_commands_changed.flush_timeout) { case TIMEOUT => delay_commands_changed.flush() - case Start(args) if prover.isEmpty => + case Start(name, args) if prover.isEmpty => if (phase == Session.Inactive || phase == Session.Failed) { phase = Session.Startup + base_syntax = Build.outer_syntax(name) prover = Some(new Isabelle_Process(receiver.invoke _, args) with Protocol) } @@ -444,7 +435,7 @@ /* actions */ - def start(args: List[String]) { session_actor ! Start(args) } + def start(name: String, args: List[String]) { session_actor ! Start(name, args) } def stop() { commands_changed_buffer !? Stop; change_parser !? Stop; session_actor !? Stop }