src/Pure/Tools/isabelle_syntax.scala
changeset 29552 5b21c79785b0
parent 29140 e7ac5bb20aed
child 29571 ba0cf984e593
equal deleted inserted replaced
29551:95e469919c3e 29552:5b21c79785b0
    11 
    11 
    12 object IsabelleSyntax {
    12 object IsabelleSyntax {
    13 
    13 
    14   /* string token */
    14   /* string token */
    15 
    15 
    16   def append_string(str: String, result: StringBuilder) = {
    16   def append_string(str: String, result: StringBuilder)
       
    17   {
    17     result.append("\"")
    18     result.append("\"")
    18     for (c <- str) {
    19     for (c <- str) {
    19       if (c < 32 || c == '\\' || c == '\"') {
    20       if (c < 32 || c == '\\' || c == '\"') {
    20         result.append("\\")
    21         result.append("\\")
    21         if (c < 10) result.append('0')
    22         if (c < 10) result.append('0')
    25       else result.append(c)
    26       else result.append(c)
    26     }
    27     }
    27     result.append("\"")
    28     result.append("\"")
    28   }
    29   }
    29 
    30 
    30   def encode_string(str: String) = {
    31   def encode_string(str: String) =
       
    32   {
    31     val result = new StringBuilder(str.length + 20)
    33     val result = new StringBuilder(str.length + 20)
    32     append_string(str, result)
    34     append_string(str, result)
    33     result.toString
    35     result.toString
    34   }
    36   }
    35 
    37 
    36 
    38 
       
    39   /* list */
       
    40 
       
    41   def append_list[A](append_elem: (A, StringBuilder) => Unit, body: Iterable[A],
       
    42     result: StringBuilder)
       
    43   {
       
    44     result.append("(")
       
    45     val elems = body.elements
       
    46     if (elems.hasNext) append_elem(elems.next, result)
       
    47     while (elems.hasNext) {
       
    48       result.append(", ")
       
    49       append_elem(elems.next, result)
       
    50     }
       
    51     result.append(")")
       
    52   }
       
    53 
       
    54   def encode_list[A](append_elem: (A, StringBuilder) => Unit, elems: Iterable[A]) =
       
    55   {
       
    56     val result = new StringBuilder(20)
       
    57     append_list(append_elem, elems, result)
       
    58     result.toString
       
    59   }
       
    60 
       
    61 
    37   /* properties */
    62   /* properties */
    38 
    63 
    39   def append_properties(props: Properties, result: StringBuilder) = {
    64   def append_properties(props: Properties, result: StringBuilder)
       
    65   {
    40     result.append("(")
    66     result.append("(")
    41     val names = props.propertyNames.asInstanceOf[Enumeration[String]]
    67     val names = props.propertyNames.asInstanceOf[Enumeration[String]]
    42     while (names.hasMoreElements) {
    68     while (names.hasMoreElements) {
    43       val name = names.nextElement; val value = props.getProperty(name)
    69       val name = names.nextElement; val value = props.getProperty(name)
    44       append_string(name, result); result.append(" = "); append_string(value, result)
    70       append_string(name, result); result.append(" = "); append_string(value, result)