src/Tools/jEdit/src/plugin.scala
changeset 48870 4accee106f0f
parent 48791 9e8f30bfbdca
child 48872 6124e0d1120a
equal deleted inserted replaced
48869:4371a8d029f2 48870:4accee106f0f
    35   /* plugin instance */
    35   /* plugin instance */
    36 
    36 
    37   var plugin: Plugin = null
    37   var plugin: Plugin = null
    38   var session: Session = null
    38   var session: Session = null
    39 
    39 
    40   val thy_load = new JEdit_Thy_Load
    40   def thy_load(): JEdit_Thy_Load =
    41   val thy_info = new Thy_Info(thy_load)
    41     session.thy_load.asInstanceOf[JEdit_Thy_Load]
    42 
    42 
    43 
    43 
    44   /* properties */
    44   /* properties */
    45 
    45 
    46   val OPTION_PREFIX = "options.isabelle."
    46   val OPTION_PREFIX = "options.isabelle."
   296     }
   296     }
   297     component.tooltip = "Isabelle logic image"
   297     component.tooltip = "Isabelle logic image"
   298     component
   298     component
   299   }
   299   }
   300 
   300 
   301   def start_session()
   301   def session_args(): List[String] =
   302   {
   302   {
   303     val dirs = Path.split(Isabelle_System.getenv("JEDIT_SESSION_DIRS"))
       
   304     val modes = space_explode(',', Isabelle_System.getenv("JEDIT_PRINT_MODE")).map("-m" + _)
   303     val modes = space_explode(',', Isabelle_System.getenv("JEDIT_PRINT_MODE")).map("-m" + _)
   305     val logic = {
   304     val logic = {
   306       val logic = Property("logic")
   305       val logic = Property("logic")
   307       if (logic != null && logic != "") logic
   306       if (logic != null && logic != "") logic
   308       else Isabelle.default_logic()
   307       else Isabelle.default_logic()
   309     }
   308     }
   310     val name = Path.explode(logic).base.implode  // FIXME more robust session name
   309     modes ::: List(logic)
   311     session.start(dirs, name, modes ::: List(logic))
   310   }
       
   311 
       
   312   def session_content(): Build.Session_Content =
       
   313   {
       
   314     val dirs = Path.split(Isabelle_System.getenv("JEDIT_SESSION_DIRS"))
       
   315     val name = Path.explode(session_args().last).base.implode  // FIXME more robust
       
   316     Build.session_content(dirs, name).check_errors
   312   }
   317   }
   313 
   318 
   314 
   319 
   315   /* convenience actions */
   320   /* convenience actions */
   316 
   321 
   357 
   362 
   358         val thys =
   363         val thys =
   359           for (buffer <- buffers; model <- Isabelle.document_model(buffer))
   364           for (buffer <- buffers; model <- Isabelle.document_model(buffer))
   360             yield model.name
   365             yield model.name
   361 
   366 
       
   367         val thy_info = new Thy_Info(Isabelle.thy_load)
   362         // FIXME avoid I/O in Swing thread!?!
   368         // FIXME avoid I/O in Swing thread!?!
   363         val files = Isabelle.thy_info.dependencies(thys).map(_._1.node).
   369         val files = thy_info.dependencies(thys).map(_._1.node).
   364           filter(file => !loaded_buffer(file) && Isabelle.thy_load.check_file(view, file))
   370           filter(file => !loaded_buffer(file) && Isabelle.thy_load.check_file(view, file))
   365 
   371 
   366         if (!files.isEmpty) {
   372         if (!files.isEmpty) {
   367           val files_list = new ListView(files.sorted)
   373           val files_list = new ListView(files.sorted)
   368           for (i <- 0 until files.length)
   374           for (i <- 0 until files.length)
   420   {
   426   {
   421     Swing_Thread.assert()
   427     Swing_Thread.assert()
   422     message match {
   428     message match {
   423       case msg: EditorStarted =>
   429       case msg: EditorStarted =>
   424         if (Isabelle.Boolean_Property("auto-start"))
   430         if (Isabelle.Boolean_Property("auto-start"))
   425           Isabelle.start_session()
   431           Isabelle.session.start(Isabelle.session_args())
   426 
   432 
   427       case msg: BufferUpdate
   433       case msg: BufferUpdate
   428       if msg.getWhat == BufferUpdate.LOADED || msg.getWhat == BufferUpdate.PROPERTIES_CHANGED =>
   434       if msg.getWhat == BufferUpdate.LOADED || msg.getWhat == BufferUpdate.PROPERTIES_CHANGED =>
   429         if (Isabelle.session.is_ready) {
   435         if (Isabelle.session.is_ready) {
   430           val buffer = msg.getBuffer
   436           val buffer = msg.getBuffer
   457       case _ =>
   463       case _ =>
   458     }
   464     }
   459   }
   465   }
   460 
   466 
   461   override def start()
   467   override def start()
   462   {
   468   { // FIXME more robust error handling
   463     Isabelle.plugin = this
   469     Isabelle.plugin = this
   464     Isabelle.setup_tooltips()
   470     Isabelle.setup_tooltips()
   465     Isabelle_System.init()
   471     Isabelle_System.init()
   466     Isabelle_System.install_fonts()
   472     Isabelle_System.install_fonts()
   467     Isabelle.session = new Session(Isabelle.thy_load)
   473 
       
   474     val content = Isabelle.session_content()
       
   475     val thy_load = new JEdit_Thy_Load(content.loaded_theories, content.syntax)
       
   476     Isabelle.session = new Session(thy_load)
       
   477 
   468     SyntaxUtilities.setStyleExtender(new Token_Markup.Style_Extender)
   478     SyntaxUtilities.setStyleExtender(new Token_Markup.Style_Extender)
   469     if (ModeProvider.instance.isInstanceOf[ModeProvider])
   479     if (ModeProvider.instance.isInstanceOf[ModeProvider])
   470       ModeProvider.instance = new Token_Markup.Mode_Provider(ModeProvider.instance)
   480       ModeProvider.instance = new Token_Markup.Mode_Provider(ModeProvider.instance)
   471     Isabelle.session.phase_changed += session_manager
   481     Isabelle.session.phase_changed += session_manager
   472   }
   482   }