summaryrefslogtreecommitdiff
path: root/src/prim.sml
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adamc@hcoop.net>2009-12-03 11:20:13 -0500
committerGravatar Adam Chlipala <adamc@hcoop.net>2009-12-03 11:20:13 -0500
commitb9e79524309c6584f6690262bba65c30b6ad146e (patch)
treea926eddc786dbf468be0d7a96f3d6824291f2156 /src/prim.sml
parente711704484b43a543a3b5fadd160613d5e869367 (diff)
Escaping UTF-8 in MonoOpt
Diffstat (limited to 'src/prim.sml')
-rw-r--r--src/prim.sml15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/prim.sml b/src/prim.sml
index c84c557e..c4b7e839 100644
--- a/src/prim.sml
+++ b/src/prim.sml
@@ -68,12 +68,23 @@ fun toString t =
| String s => s
| Char ch => str ch
+fun pad (n, ch, s) =
+ if size s >= n then
+ s
+ else
+ str ch ^ pad (n-1, ch, s)
+
+val gccify = String.translate (fn ch => if Char.isPrint ch then
+ str ch
+ else
+ "\\" ^ pad (3, #"0", Int.fmt StringCvt.OCT (ord ch)))
+
fun p_t_GCC t =
case t of
Int n => string (int2s n)
| Float n => string (float2s n)
- | String s => box [string "\"", string (String.toString s), string "\""]
- | Char ch => box [string "'", string (String.toString (str ch)), string "'"]
+ | String s => box [string "\"", string (gccify s), string "\""]
+ | Char ch => box [string "'", string (gccify (str ch)), string "'"]
fun equal x =
case x of