src/Pure/General/pretty.scala
author wenzelm
Thu, 06 May 2010 16:27:47 +0200
changeset 36683 41a1210519fd
child 36687 58020b59baf7
permissions -rw-r--r--
basic support for symbolic pretty printing; tuned;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
36683
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
     1
/*  Title:      Pure/General/pretty.scala
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
     3
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
     4
Symbolic pretty printing.
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
     5
*/
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
     6
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
     7
package isabelle
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
     8
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
     9
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    10
object Pretty
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    11
{
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    12
  object Block
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    13
  {
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    14
    def apply(indent: Int, body: List[XML.Tree]): XML.Tree =
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    15
      XML.Elem(Markup.BLOCK, List((Markup.INDENT, indent.toString)), body)
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    16
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    17
    def unapply(tree: XML.Tree): Option[(Int, List[XML.Tree])] =
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    18
      tree match {
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    19
        case XML.Elem(Markup.BLOCK, List((Markup.INDENT, indent)), body) =>
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    20
          Markup.parse_int(indent) match {
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    21
            case Some(i) => Some((i, body))
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    22
            case None => None
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    23
          }
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    24
        case _ => None
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    25
      }
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    26
  }
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    27
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    28
  object Break
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    29
  {
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    30
    def apply(width: Int): XML.Tree =
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    31
      XML.Elem(Markup.BREAK, List((Markup.WIDTH, width.toString)), List(XML.Text(" " * width)))
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    32
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    33
    def unapply(tree: XML.Tree): Option[Int] =
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    34
      tree match {
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    35
        case XML.Elem(Markup.BREAK, List((Markup.WIDTH, width)), _) => Markup.parse_int(width)
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    36
        case _ => None
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    37
      }
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    38
  }
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    39
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    40
  object FBreak
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    41
  {
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    42
    def apply(): XML.Tree = XML.Elem(Markup.FBREAK, Nil, List(XML.Text(" ")))
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    43
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    44
    def unapply(tree: XML.Tree): Boolean =
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    45
      tree match {
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    46
        case XML.Elem(Markup.FBREAK, Nil, _) => true
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    47
        case _ => false
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    48
      }
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    49
  }
41a1210519fd basic support for symbolic pretty printing;
wenzelm
parents:
diff changeset
    50
}