src/Pure/PIDE/prover.scala
author wenzelm
Thu, 03 Apr 2014 13:46:18 +0200
changeset 56385 76acce58aeab
child 56386 fe520afb8041
permissions -rw-r--r--
more general prover operations;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
56385
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
     1
/*  Title:      Pure/PIDE/prover.scala
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
     3
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
     4
General prover operations.
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
     5
*/
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
     6
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
     7
package isabelle
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
     8
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
     9
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    10
object Prover
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    11
{
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    12
  /* messages */
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    13
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    14
  sealed abstract class Message
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    15
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    16
  class Input(name: String, args: List[String]) extends Message
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    17
  {
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    18
    override def toString: String =
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    19
      XML.Elem(Markup(Markup.PROVER_COMMAND, List((Markup.NAME, name))),
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    20
        args.map(s =>
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    21
          List(XML.Text("\n"), XML.elem(Markup.PROVER_ARG, YXML.parse_body(s)))).flatten).toString
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    22
  }
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    23
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    24
  class Output(val message: XML.Elem) extends Message
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    25
  {
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    26
    def kind: String = message.markup.name
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    27
    def properties: Properties.T = message.markup.properties
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    28
    def body: XML.Body = message.body
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    29
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    30
    def is_init = kind == Markup.INIT
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    31
    def is_exit = kind == Markup.EXIT
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    32
    def is_stdout = kind == Markup.STDOUT
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    33
    def is_stderr = kind == Markup.STDERR
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    34
    def is_system = kind == Markup.SYSTEM
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    35
    def is_status = kind == Markup.STATUS
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    36
    def is_report = kind == Markup.REPORT
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    37
    def is_syslog = is_init || is_exit || is_system || is_stderr
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    38
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    39
    override def toString: String =
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    40
    {
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    41
      val res =
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    42
        if (is_status || is_report) message.body.map(_.toString).mkString
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    43
        else Pretty.string_of(message.body)
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    44
      if (properties.isEmpty)
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    45
        kind.toString + " [[" + res + "]]"
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    46
      else
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    47
        kind.toString + " " +
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    48
          (for ((x, y) <- properties) yield x + "=" + y).mkString("{", ",", "}") + " [[" + res + "]]"
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    49
    }
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    50
  }
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    51
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    52
  class Protocol_Output(props: Properties.T, val bytes: Bytes)
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    53
    extends Output(XML.Elem(Markup(Markup.PROTOCOL, props), Nil))
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    54
  {
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    55
    lazy val text: String = bytes.toString
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    56
  }
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    57
}
76acce58aeab more general prover operations;
wenzelm
parents:
diff changeset
    58