src/Pure/ML/ml_syntax.scala
changeset 62528 c8c532b22947
child 62544 efa178abe023
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/Pure/ML/ml_syntax.scala	Sun Mar 06 13:19:19 2016 +0100
@@ -0,0 +1,36 @@
+/*  Title:      Pure/ML/ml_syntax.scala
+    Author:     Makarius
+
+Concrete ML syntax for basic values.
+*/
+
+package isabelle
+
+
+object ML_Syntax
+{
+  private def print_chr(c: Byte): String =
+    c match {
+      case 34 => "\\\""
+      case 92 => "\\\\"
+      case 9 => "\\t"
+      case 10 => "\\n"
+      case 12 => "\\f"
+      case 13 => "\\r"
+      case _ =>
+        if (c < 0) "\\" + Library.signed_string_of_int(256 + c)
+        else if (c < 32) new String(Array[Char](92, 94, (c + 64).toChar))
+        else if (c < 127) Symbol.ascii(c.toChar)
+        else "\\" + Library.signed_string_of_int(c)
+    }
+
+  def print_char(s: Symbol.Symbol): String =
+    if (s.startsWith("\\<")) s
+    else UTF8.bytes(s).iterator.map(print_chr(_)).mkString
+
+  def print_string(str: String): String =
+    quote(Symbol.iterator(str).map(print_char(_)).mkString)
+
+  def print_string_raw(str: String): String =
+    quote(UTF8.bytes(str).iterator.map(print_chr(_)).mkString)
+}