src/Pure/System/java.ML
author wenzelm
Thu, 25 Aug 2022 11:24:13 +0200
changeset 75964 fd9734380709
parent 75684 49444d7f8337
permissions -rw-r--r--
more readable string literals;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
75682
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
     1
(*  Title:      Pure/System/java.ML
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
     2
    Author:     Makarius
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
     3
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
     4
Support for Java language.
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
     5
*)
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
     6
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
     7
signature JAVA =
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
     8
sig
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
     9
  val print_string: string -> string
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    10
end;
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    11
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    12
structure Java: JAVA =
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    13
struct
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    14
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    15
(* string literals *)
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    16
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    17
local
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    18
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    19
val print_str =
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    20
  fn "\b" => "\\b"
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    21
   | "\t" => "\\t"
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    22
   | "\n" => "\\n"
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    23
   | "\f" => "\\f"
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    24
   | "\r" => "\\r"
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    25
   | "\"" => "\\\""
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    26
   | "\\" => "\\\\"
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    27
   | s =>
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    28
      let val c = ord s in
75964
fd9734380709 more readable string literals;
wenzelm
parents: 75684
diff changeset
    29
        if 32 < c andalso c < 127 andalso c <> 34 andalso c <> 92 then s
fd9734380709 more readable string literals;
wenzelm
parents: 75684
diff changeset
    30
        else if c < 16 then "\\u000" ^ Int.fmt StringCvt.HEX c
75682
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    31
        else if c < 128 then "\\u00" ^ Int.fmt StringCvt.HEX c
75684
49444d7f8337 tuned messages;
wenzelm
parents: 75682
diff changeset
    32
        else error ("Cannot print non-ASCII Java/Scala string literal: " ^ quote s)
75682
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    33
      end;
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    34
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    35
in
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    36
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    37
fun print_string str =
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    38
  quote (translate_string print_str str)
75684
49444d7f8337 tuned messages;
wenzelm
parents: 75682
diff changeset
    39
    handle Fail _ => error ("Cannot print non-ASCII Java/Scala string literal: " ^ quote str);
75682
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    40
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    41
end;
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    42
b6f3db86f9c7 support for Java language;
wenzelm
parents:
diff changeset
    43
end;