src/Pure/Isar/isar_document.scala
author wenzelm
Sat, 24 Jul 2010 21:22:21 +0200
changeset 37950 bc285d91041e
parent 36682 3f989067f87d
child 38150 67fc24df3721
permissions -rw-r--r--
moved basic thy file name operations from Thy_Load to Thy_Header;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
29553
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
     1
/*  Title:      Pure/Isar/isar_document.scala
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
     3
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
     4
Interactive Isar documents.
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
     5
*/
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
     6
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
     7
package isabelle
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
     8
32450
375db037f4d2 misc tuning;
wenzelm
parents: 32448
diff changeset
     9
32467
4dab52ca1402 modernized Isar_Document;
wenzelm
parents: 32450
diff changeset
    10
object Isar_Document
32450
375db037f4d2 misc tuning;
wenzelm
parents: 32448
diff changeset
    11
{
29553
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    12
  /* unique identifiers */
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    13
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    14
  type State_ID = String
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    15
  type Command_ID = String
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    16
  type Document_ID = String
36682
3f989067f87d extractors for document updates;
wenzelm
parents: 32467
diff changeset
    17
3f989067f87d extractors for document updates;
wenzelm
parents: 32467
diff changeset
    18
3f989067f87d extractors for document updates;
wenzelm
parents: 32467
diff changeset
    19
  /* reports */
3f989067f87d extractors for document updates;
wenzelm
parents: 32467
diff changeset
    20
3f989067f87d extractors for document updates;
wenzelm
parents: 32467
diff changeset
    21
  object Assign {
3f989067f87d extractors for document updates;
wenzelm
parents: 32467
diff changeset
    22
    def unapply(msg: XML.Tree): Option[List[XML.Tree]] =
3f989067f87d extractors for document updates;
wenzelm
parents: 32467
diff changeset
    23
      msg match {
3f989067f87d extractors for document updates;
wenzelm
parents: 32467
diff changeset
    24
        case XML.Elem(Markup.ASSIGN, Nil, edits) => Some(edits)
3f989067f87d extractors for document updates;
wenzelm
parents: 32467
diff changeset
    25
        case _ => None
3f989067f87d extractors for document updates;
wenzelm
parents: 32467
diff changeset
    26
      }
3f989067f87d extractors for document updates;
wenzelm
parents: 32467
diff changeset
    27
  }
3f989067f87d extractors for document updates;
wenzelm
parents: 32467
diff changeset
    28
3f989067f87d extractors for document updates;
wenzelm
parents: 32467
diff changeset
    29
  object Edit {
3f989067f87d extractors for document updates;
wenzelm
parents: 32467
diff changeset
    30
    def unapply(msg: XML.Tree): Option[(Command_ID, State_ID)] =
3f989067f87d extractors for document updates;
wenzelm
parents: 32467
diff changeset
    31
      msg match {
3f989067f87d extractors for document updates;
wenzelm
parents: 32467
diff changeset
    32
        case XML.Elem(Markup.EDIT, List((Markup.ID, cmd_id), (Markup.STATE, state_id)), Nil) =>
3f989067f87d extractors for document updates;
wenzelm
parents: 32467
diff changeset
    33
          Some(cmd_id, state_id)
3f989067f87d extractors for document updates;
wenzelm
parents: 32467
diff changeset
    34
        case _ => None
3f989067f87d extractors for document updates;
wenzelm
parents: 32467
diff changeset
    35
      }
3f989067f87d extractors for document updates;
wenzelm
parents: 32467
diff changeset
    36
  }
29645
bbc8de8d1c8c plain non-dependent types;
wenzelm
parents: 29644
diff changeset
    37
}
bbc8de8d1c8c plain non-dependent types;
wenzelm
parents: 29644
diff changeset
    38
32450
375db037f4d2 misc tuning;
wenzelm
parents: 32448
diff changeset
    39
32467
4dab52ca1402 modernized Isar_Document;
wenzelm
parents: 32450
diff changeset
    40
trait Isar_Document extends Isabelle_Process
29645
bbc8de8d1c8c plain non-dependent types;
wenzelm
parents: 29644
diff changeset
    41
{
32467
4dab52ca1402 modernized Isar_Document;
wenzelm
parents: 32450
diff changeset
    42
  import Isar_Document._
29553
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    43
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    44
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    45
  /* commands */
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    46
29644
fbbd0197155c turned IsarDocument into trait for IsabelleProcess;
wenzelm
parents: 29553
diff changeset
    47
  def define_command(id: Command_ID, text: String) {
32448
a89f876731c5 moved Pure/Tools/isabelle_syntax.scala to Pure/System/isabelle_syntax.scala;
wenzelm
parents: 31797
diff changeset
    48
    output_sync("Isar.define_command " + Isabelle_Syntax.encode_string(id) + " " +
a89f876731c5 moved Pure/Tools/isabelle_syntax.scala to Pure/System/isabelle_syntax.scala;
wenzelm
parents: 31797
diff changeset
    49
      Isabelle_Syntax.encode_string(text))
29553
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    50
  }
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    51
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    52
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    53
  /* documents */
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    54
29644
fbbd0197155c turned IsarDocument into trait for IsabelleProcess;
wenzelm
parents: 29553
diff changeset
    55
  def begin_document(id: Document_ID, path: String) {
32448
a89f876731c5 moved Pure/Tools/isabelle_syntax.scala to Pure/System/isabelle_syntax.scala;
wenzelm
parents: 31797
diff changeset
    56
    output_sync("Isar.begin_document " + Isabelle_Syntax.encode_string(id) + " " +
a89f876731c5 moved Pure/Tools/isabelle_syntax.scala to Pure/System/isabelle_syntax.scala;
wenzelm
parents: 31797
diff changeset
    57
      Isabelle_Syntax.encode_string(path))
29553
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    58
  }
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    59
29644
fbbd0197155c turned IsarDocument into trait for IsabelleProcess;
wenzelm
parents: 29553
diff changeset
    60
  def end_document(id: Document_ID) {
32448
a89f876731c5 moved Pure/Tools/isabelle_syntax.scala to Pure/System/isabelle_syntax.scala;
wenzelm
parents: 31797
diff changeset
    61
    output_sync("Isar.end_document " + Isabelle_Syntax.encode_string(id))
29553
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    62
  }
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    63
29644
fbbd0197155c turned IsarDocument into trait for IsabelleProcess;
wenzelm
parents: 29553
diff changeset
    64
  def edit_document(old_id: Document_ID, new_id: Document_ID,
29553
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    65
      edits: List[(Command_ID, Option[Command_ID])])
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    66
  {
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    67
    def append_edit(edit: (Command_ID, Option[Command_ID]), result: StringBuilder)
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    68
    {
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    69
      edit match {
32448
a89f876731c5 moved Pure/Tools/isabelle_syntax.scala to Pure/System/isabelle_syntax.scala;
wenzelm
parents: 31797
diff changeset
    70
        case (id, None) => Isabelle_Syntax.append_string(id, result)
29553
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    71
        case (id, Some(id2)) =>
32448
a89f876731c5 moved Pure/Tools/isabelle_syntax.scala to Pure/System/isabelle_syntax.scala;
wenzelm
parents: 31797
diff changeset
    72
          Isabelle_Syntax.append_string(id, result)
29553
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    73
          result.append(" ")
32448
a89f876731c5 moved Pure/Tools/isabelle_syntax.scala to Pure/System/isabelle_syntax.scala;
wenzelm
parents: 31797
diff changeset
    74
          Isabelle_Syntax.append_string(id2, result)
29553
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    75
      }
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    76
    }
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    77
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    78
    val buf = new StringBuilder(40)
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    79
    buf.append("Isar.edit_document ")
32448
a89f876731c5 moved Pure/Tools/isabelle_syntax.scala to Pure/System/isabelle_syntax.scala;
wenzelm
parents: 31797
diff changeset
    80
    Isabelle_Syntax.append_string(old_id, buf)
29553
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    81
    buf.append(" ")
32448
a89f876731c5 moved Pure/Tools/isabelle_syntax.scala to Pure/System/isabelle_syntax.scala;
wenzelm
parents: 31797
diff changeset
    82
    Isabelle_Syntax.append_string(new_id, buf)
29553
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    83
    buf.append(" ")
32448
a89f876731c5 moved Pure/Tools/isabelle_syntax.scala to Pure/System/isabelle_syntax.scala;
wenzelm
parents: 31797
diff changeset
    84
    Isabelle_Syntax.append_list(append_edit, edits, buf)
29644
fbbd0197155c turned IsarDocument into trait for IsabelleProcess;
wenzelm
parents: 29553
diff changeset
    85
    output_sync(buf.toString)
29553
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    86
  }
c3b937e8597b Scala wrapper for interactive Isar documents;
wenzelm
parents:
diff changeset
    87
}