src/Pure/ML/ml_syntax.scala
author wenzelm
Mon, 05 Sep 2016 22:09:52 +0200
changeset 63805 c272680df665
parent 62717 8adf274f5988
child 65431 4a3e6cda3b94
permissions -rw-r--r--
clarified modules;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
62528
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
     1
/*  Title:      Pure/ML/ml_syntax.scala
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
     3
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
     4
Concrete ML syntax for basic values.
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
     5
*/
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
     6
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
     7
package isabelle
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
     8
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
     9
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
    10
object ML_Syntax
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
    11
{
62709
fe3d50448833 more operations;
wenzelm
parents: 62638
diff changeset
    12
  /* int */
fe3d50448833 more operations;
wenzelm
parents: 62638
diff changeset
    13
62717
wenzelm
parents: 62709
diff changeset
    14
  private def signed_int(s: String): String =
wenzelm
parents: 62709
diff changeset
    15
    if (s(0) == '-') "~" + s.substring(1) else s
62709
fe3d50448833 more operations;
wenzelm
parents: 62638
diff changeset
    16
63805
c272680df665 clarified modules;
wenzelm
parents: 62717
diff changeset
    17
  def print_int(i: Int): String = signed_int(Value.Int(i))
c272680df665 clarified modules;
wenzelm
parents: 62717
diff changeset
    18
  def print_long(i: Long): String = signed_int(Value.Long(i))
62709
fe3d50448833 more operations;
wenzelm
parents: 62638
diff changeset
    19
fe3d50448833 more operations;
wenzelm
parents: 62638
diff changeset
    20
fe3d50448833 more operations;
wenzelm
parents: 62638
diff changeset
    21
  /* string */
fe3d50448833 more operations;
wenzelm
parents: 62638
diff changeset
    22
62528
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
    23
  private def print_chr(c: Byte): String =
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
    24
    c match {
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
    25
      case 34 => "\\\""
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
    26
      case 92 => "\\\\"
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
    27
      case 9 => "\\t"
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
    28
      case 10 => "\\n"
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
    29
      case 12 => "\\f"
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
    30
      case 13 => "\\r"
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
    31
      case _ =>
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
    32
        if (c < 0) "\\" + Library.signed_string_of_int(256 + c)
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
    33
        else if (c < 32) new String(Array[Char](92, 94, (c + 64).toChar))
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
    34
        else if (c < 127) Symbol.ascii(c.toChar)
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
    35
        else "\\" + Library.signed_string_of_int(c)
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
    36
    }
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
    37
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
    38
  def print_char(s: Symbol.Symbol): String =
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
    39
    if (s.startsWith("\\<")) s
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
    40
    else UTF8.bytes(s).iterator.map(print_chr(_)).mkString
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
    41
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
    42
  def print_string(str: String): String =
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
    43
    quote(Symbol.iterator(str).map(print_char(_)).mkString)
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
    44
62638
751cf9f3d433 tuned signature;
wenzelm
parents: 62544
diff changeset
    45
  def print_string0(str: String): String =
62528
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
    46
    quote(UTF8.bytes(str).iterator.map(print_chr(_)).mkString)
62544
efa178abe023 manage the underlying ML process in Scala;
wenzelm
parents: 62528
diff changeset
    47
62709
fe3d50448833 more operations;
wenzelm
parents: 62638
diff changeset
    48
fe3d50448833 more operations;
wenzelm
parents: 62638
diff changeset
    49
  /* list */
fe3d50448833 more operations;
wenzelm
parents: 62638
diff changeset
    50
62544
efa178abe023 manage the underlying ML process in Scala;
wenzelm
parents: 62528
diff changeset
    51
  def print_list[A](f: A => String)(list: List[A]): String =
efa178abe023 manage the underlying ML process in Scala;
wenzelm
parents: 62528
diff changeset
    52
    "[" + commas(list.map(f)) + "]"
62528
c8c532b22947 clarified ML syntax for strings concerning UTF8;
wenzelm
parents:
diff changeset
    53
}