src/Pure/System/isabelle_syntax.scala
author wenzelm
Mon, 29 Mar 2010 22:43:56 +0200
changeset 36011 3ff725ac13a4
parent 32448 a89f876731c5
child 43770 88b1b883e8d8
permissions -rw-r--r--
adapted to Scala 2.8.0 Beta1 -- with notable changes to scala.collection;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
32448
a89f876731c5 moved Pure/Tools/isabelle_syntax.scala to Pure/System/isabelle_syntax.scala;
wenzelm
parents: 29571
diff changeset
     1
/*  Title:      Pure/System/isabelle_syntax.scala
27951
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
     3
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
     4
Isabelle outer syntax.
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
     5
*/
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
     6
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
     7
package isabelle
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
     8
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
     9
32448
a89f876731c5 moved Pure/Tools/isabelle_syntax.scala to Pure/System/isabelle_syntax.scala;
wenzelm
parents: 29571
diff changeset
    10
object Isabelle_Syntax
a89f876731c5 moved Pure/Tools/isabelle_syntax.scala to Pure/System/isabelle_syntax.scala;
wenzelm
parents: 29571
diff changeset
    11
{
27951
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    12
  /* string token */
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    13
29552
5b21c79785b0 added append_list, encode_list;
wenzelm
parents: 29140
diff changeset
    14
  def append_string(str: String, result: StringBuilder)
5b21c79785b0 added append_list, encode_list;
wenzelm
parents: 29140
diff changeset
    15
  {
27951
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    16
    result.append("\"")
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    17
    for (c <- str) {
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    18
      if (c < 32 || c == '\\' || c == '\"') {
27954
4558d93e83b7 append_string: proper backslash in character escapes;
wenzelm
parents: 27951
diff changeset
    19
        result.append("\\")
27951
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    20
        if (c < 10) result.append('0')
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    21
        if (c < 100) result.append('0')
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    22
        result.append(c.asInstanceOf[Int].toString)
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    23
      }
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    24
      else result.append(c)
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    25
    }
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    26
    result.append("\"")
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    27
  }
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    28
29552
5b21c79785b0 added append_list, encode_list;
wenzelm
parents: 29140
diff changeset
    29
  def encode_string(str: String) =
5b21c79785b0 added append_list, encode_list;
wenzelm
parents: 29140
diff changeset
    30
  {
29571
ba0cf984e593 replaced java.util.Properties by plain association list;
wenzelm
parents: 29552
diff changeset
    31
    val result = new StringBuilder(str.length + 10)
27951
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    32
    append_string(str, result)
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    33
    result.toString
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    34
  }
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    35
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    36
29552
5b21c79785b0 added append_list, encode_list;
wenzelm
parents: 29140
diff changeset
    37
  /* list */
5b21c79785b0 added append_list, encode_list;
wenzelm
parents: 29140
diff changeset
    38
5b21c79785b0 added append_list, encode_list;
wenzelm
parents: 29140
diff changeset
    39
  def append_list[A](append_elem: (A, StringBuilder) => Unit, body: Iterable[A],
5b21c79785b0 added append_list, encode_list;
wenzelm
parents: 29140
diff changeset
    40
    result: StringBuilder)
5b21c79785b0 added append_list, encode_list;
wenzelm
parents: 29140
diff changeset
    41
  {
5b21c79785b0 added append_list, encode_list;
wenzelm
parents: 29140
diff changeset
    42
    result.append("(")
36011
3ff725ac13a4 adapted to Scala 2.8.0 Beta1 -- with notable changes to scala.collection;
wenzelm
parents: 32448
diff changeset
    43
    val elems = body.iterator
29552
5b21c79785b0 added append_list, encode_list;
wenzelm
parents: 29140
diff changeset
    44
    if (elems.hasNext) append_elem(elems.next, result)
5b21c79785b0 added append_list, encode_list;
wenzelm
parents: 29140
diff changeset
    45
    while (elems.hasNext) {
5b21c79785b0 added append_list, encode_list;
wenzelm
parents: 29140
diff changeset
    46
      result.append(", ")
5b21c79785b0 added append_list, encode_list;
wenzelm
parents: 29140
diff changeset
    47
      append_elem(elems.next, result)
5b21c79785b0 added append_list, encode_list;
wenzelm
parents: 29140
diff changeset
    48
    }
5b21c79785b0 added append_list, encode_list;
wenzelm
parents: 29140
diff changeset
    49
    result.append(")")
5b21c79785b0 added append_list, encode_list;
wenzelm
parents: 29140
diff changeset
    50
  }
5b21c79785b0 added append_list, encode_list;
wenzelm
parents: 29140
diff changeset
    51
5b21c79785b0 added append_list, encode_list;
wenzelm
parents: 29140
diff changeset
    52
  def encode_list[A](append_elem: (A, StringBuilder) => Unit, elems: Iterable[A]) =
5b21c79785b0 added append_list, encode_list;
wenzelm
parents: 29140
diff changeset
    53
  {
29571
ba0cf984e593 replaced java.util.Properties by plain association list;
wenzelm
parents: 29552
diff changeset
    54
    val result = new StringBuilder
29552
5b21c79785b0 added append_list, encode_list;
wenzelm
parents: 29140
diff changeset
    55
    append_list(append_elem, elems, result)
5b21c79785b0 added append_list, encode_list;
wenzelm
parents: 29140
diff changeset
    56
    result.toString
5b21c79785b0 added append_list, encode_list;
wenzelm
parents: 29140
diff changeset
    57
  }
5b21c79785b0 added append_list, encode_list;
wenzelm
parents: 29140
diff changeset
    58
5b21c79785b0 added append_list, encode_list;
wenzelm
parents: 29140
diff changeset
    59
27951
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    60
  /* properties */
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    61
29571
ba0cf984e593 replaced java.util.Properties by plain association list;
wenzelm
parents: 29552
diff changeset
    62
  def append_properties(props: List[(String, String)], result: StringBuilder)
29552
5b21c79785b0 added append_list, encode_list;
wenzelm
parents: 29140
diff changeset
    63
  {
29571
ba0cf984e593 replaced java.util.Properties by plain association list;
wenzelm
parents: 29552
diff changeset
    64
    append_list((p: (String, String), res) =>
ba0cf984e593 replaced java.util.Properties by plain association list;
wenzelm
parents: 29552
diff changeset
    65
      { append_string(p._1, res); res.append(" = "); append_string(p._2, res) }, props, result)
27951
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    66
  }
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    67
29571
ba0cf984e593 replaced java.util.Properties by plain association list;
wenzelm
parents: 29552
diff changeset
    68
  def encode_properties(props: List[(String, String)]) =
ba0cf984e593 replaced java.util.Properties by plain association list;
wenzelm
parents: 29552
diff changeset
    69
  {
ba0cf984e593 replaced java.util.Properties by plain association list;
wenzelm
parents: 29552
diff changeset
    70
    val result = new StringBuilder
27951
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    71
    append_properties(props, result)
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    72
    result.toString
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    73
  }
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    74
}