src/Pure/Tools/isabelle_syntax.scala
author wenzelm
Sat, 23 Aug 2008 17:22:52 +0200
changeset 27951 8adddc0b591f
child 27954 4558d93e83b7
permissions -rw-r--r--
Isabelle outer syntax.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
27951
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
     1
/*  Title:      Pure/Tools/isabelle_syntax.scala
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
     2
    ID:         $Id$
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
     3
    Author:     Makarius
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
     4
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
     5
Isabelle outer syntax.
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
     6
*/
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
     7
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
     8
package isabelle
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
     9
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    10
import java.util.{Properties, Enumeration}
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    11
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    12
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    13
object IsabelleSyntax {
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    14
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    15
  /* string token */
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    16
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    17
  def append_string(str: String, result: StringBuilder) = {
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    18
    result.append("\"")
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    19
    for (c <- str) {
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    20
      if (c < 32 || c == '\\' || c == '\"') {
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    21
        if (c < 10) result.append('0')
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    22
        if (c < 100) result.append('0')
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    23
        result.append(c.asInstanceOf[Int].toString)
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    24
      }
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    25
      else result.append(c)
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    26
    }
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    27
    result.append("\"")
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    28
  }
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    29
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    30
  def encode_string(str: String) = {
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    31
    val result = new StringBuilder(str.length + 20)
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
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    37
  /* properties */
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    38
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    39
  def append_properties(props: Properties, result: StringBuilder) = {
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    40
    result.append("(")
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    41
    val names = props.propertyNames.asInstanceOf[Enumeration[String]]
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    42
    while (names.hasMoreElements) {
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    43
      val name = names.nextElement; val value = props.getProperty(name)
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    44
      append_string(name, result); result.append(" = "); append_string(value, result)
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    45
      if (names.hasMoreElements) result.append(", ")
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    46
    }
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    47
    result.append(")")
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    48
  }
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    49
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    50
  def encode_properties(props: Properties) = {
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    51
    val result = new StringBuilder(40)
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    52
    append_properties(props, result)
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    53
    result.toString
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    54
  }
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    55
8adddc0b591f Isabelle outer syntax.
wenzelm
parents:
diff changeset
    56
}