src/Pure/Tools/print_operation.scala
author wenzelm
Fri, 08 Jan 2021 22:30:32 +0100
changeset 73110 c87ca43ebd3b
parent 72215 8f9cffa78112
child 75393 87ebf5a50283
permissions -rw-r--r--
avoid rescaled fonts, e.g. dockable buttons on Windows L&F after opening a new view;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
59720
f893472fff31 proper headers;
wenzelm
parents: 59366
diff changeset
     1
/*  Title:      Pure/Tools/print_operation.scala
56864
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
     3
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
     4
Print operations as asynchronous query.
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
     5
*/
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
     6
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
     7
package isabelle
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
     8
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
     9
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
    10
object Print_Operation
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
    11
{
72215
8f9cffa78112 clarified signature;
wenzelm
parents: 72212
diff changeset
    12
  def get(session: Session): List[(String, String)] =
8f9cffa78112 clarified signature;
wenzelm
parents: 72212
diff changeset
    13
    session.get_protocol_handler(classOf[Handler]) match {
8f9cffa78112 clarified signature;
wenzelm
parents: 72212
diff changeset
    14
      case Some(h) => h.get
56864
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
    15
      case _ => Nil
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
    16
    }
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
    17
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
    18
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
    19
  /* protocol handler */
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
    20
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
    21
  class Handler extends Session.Protocol_Handler
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
    22
  {
61590
wenzelm
parents: 59720
diff changeset
    23
    private val print_operations = Synchronized[List[(String, String)]](Nil)
56864
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
    24
72215
8f9cffa78112 clarified signature;
wenzelm
parents: 72212
diff changeset
    25
    def get: List[(String, String)] = print_operations.value
8f9cffa78112 clarified signature;
wenzelm
parents: 72212
diff changeset
    26
65220
wenzelm
parents: 65219
diff changeset
    27
    override def init(session: Session): Unit =
wenzelm
parents: 65219
diff changeset
    28
      session.protocol_command(Markup.PRINT_OPERATIONS)
wenzelm
parents: 65219
diff changeset
    29
65219
ed4b47b8c7dc misc tuning and simplification;
wenzelm
parents: 65213
diff changeset
    30
    private def put(msg: Prover.Protocol_Output): Boolean =
56864
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
    31
    {
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
    32
      val ops =
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
    33
      {
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
    34
        import XML.Decode._
65344
b99283eed13c clarified YXML vs. symbol encoding: operate on whole message;
wenzelm
parents: 65220
diff changeset
    35
        list(pair(string, string))(Symbol.decode_yxml(msg.text))
56864
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
    36
      }
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
    37
      print_operations.change(_ => ops)
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
    38
      true
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
    39
    }
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
    40
72212
53e8858b839f clarified signature;
wenzelm
parents: 72155
diff changeset
    41
    override val functions = List(Markup.PRINT_OPERATIONS -> put)
56864
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
    42
  }
0446c7ac2e32 support print operations as asynchronous query;
wenzelm
parents:
diff changeset
    43
}