src/Tools/jEdit/src/prover/IsabelleSKParser.scala
author wenzelm
Sat, 20 Dec 2008 14:19:12 +0100
changeset 34417 bce2f2ea9819
parent 34408 ad7b6c4813c8
permissions -rw-r--r--
misc tuning and adaption according to original IsabelleParser -- cf. http://isabelle.in.tum.de/repos/isabelle/file/b1c6f4563df7/lib/jedit/plugin/isabelle_parser.scala;

/*
 * SideKick parser for Isabelle proof documents
 *
 * @author Fabian Immler, TU Munich
 * @author Makarius
 *
 * TODO:
 *   - locking of buffer and/or document model (!?)
 *   - check treatment of assets
 *   - completion support
 *   - rename to isabelle.jedit.IsabelleSideKickParser
 */

package isabelle.prover


import javax.swing.tree.DefaultMutableTreeNode

import isabelle.jedit.Plugin

import org.gjt.sp.jedit.{Buffer, EditPane}
import errorlist.DefaultErrorSource
import sidekick.{SideKickParser, SideKickParsedData, SideKickCompletion}


class IsabelleSKParser extends SideKickParser("isabelle") {

  /* parsing */

  private var stopped = false
  override def stop () = { stopped = true }

  def parse(buffer : Buffer, error_source : DefaultErrorSource): SideKickParsedData = {
    stopped = false
    
    val data = new SideKickParsedData(buffer.getName)
    
    Plugin.plugin.prover_setup(buffer) match {
      case None =>
        data.root.add(new DefaultMutableTreeNode("<buffer inactive>"))
      case Some(prover_setup) =>
        val document = prover_setup.prover.document
        val commands = document.commands()
        while (!stopped && commands.hasNext) {
          data.root.add(commands.next.root_node.swing_node)
        }
        if (stopped) data.root.add(new DefaultMutableTreeNode("<parser stopped>"))
      }

    data
  }


  /* completion */

  override def supportsCompletion = true
  override def canCompleteAnywhere = true

  override def complete(pane: EditPane, caret: Int): SideKickCompletion = null
}