src/Pure/Isar/toplevel.scala
author wenzelm
Thu, 19 Aug 2010 11:26:07 +0200
changeset 38480 e5eed57913d0
parent 38429 9951852fae91
permissions -rw-r--r--
Command.status: full XML.Tree, i.e. Markup with potential "arguments";

/*  Title:      Pure/Isar/toplevel.scala
    Author:     Makarius

Isabelle/Isar toplevel transactions.
*/

package isabelle


object Toplevel
{
  sealed abstract class Status
  case class Forked(forks: Int) extends Status
  case object Unprocessed extends Status
  case object Finished extends Status
  case object Failed extends Status

  def command_status(markup: XML.Body): Status =
  {
    val forks = (0 /: markup) {
      case (i, XML.Elem(Markup(Markup.FORKED, _), _)) => i + 1
      case (i, XML.Elem(Markup(Markup.JOINED, _), _)) => i - 1
      case (i, _) => i
    }
    if (forks != 0) Forked(forks)
    else if (markup.exists { case XML.Elem(Markup(Markup.FAILED, _), _) => true case _ => false })
      Failed
    else if (markup.exists { case XML.Elem(Markup(Markup.FINISHED, _), _) => true case _ => false })
      Finished
    else Unprocessed
  }
}