diff src/mono_opt.sml @ 1059:03a81e26e5fe

Move to simpler HTML escaping
author Adam Chlipala <adamc@hcoop.net>
date Tue, 08 Dec 2009 08:48:29 -0500
parents b06a2a65e670
children 217eb87dde31
line wrap: on
line diff
--- a/src/mono_opt.sml	Sat Dec 05 14:34:44 2009 -0500
+++ b/src/mono_opt.sml	Tue Dec 08 08:48:29 2009 -0500
@@ -45,45 +45,14 @@
     else
         Real.toString n
 
-fun attrifyString s =
-    let
-        fun hs (pos, acc) =
-            if pos >= size s then
-                String.concat (rev acc)
-            else
-                case String.sub (s, pos) of
-                    #"\"" => hs (pos+1, "&quot;" :: acc)
-                  | #"&" => hs (pos+1, "&amp;" :: acc)
-                  | ch =>
-                    let
-                        val n = ord ch
-                        fun isCont k = pos + k < size s
-                                       andalso ord (String.sub (s, pos + k)) div 64 = 2
-                        fun unicode k = hs (pos+k+1, String.substring (s, pos, k+1) :: acc)
-                    in
-                        if Char.isPrint ch orelse Char.isSpace ch then
-                            hs (pos+1, str ch :: acc)
-                        else if n div 32 = 6 andalso isCont 1 then
-                            unicode 1
-                        else if n div 16 = 14 andalso isCont 1 andalso isCont 2 then
-                            unicode 2
-                        else if n div 8 = 30 andalso isCont 1 andalso isCont 2 andalso isCont 3 then
-                            unicode 3
-                        else
-                            hs (pos+1, "&#" ^ Int.toString (ord ch) ^ ";" :: acc)
-                    end
-    in
-        hs (0, [])
-    end
-
 fun attrifyChar ch =
     case ch of
         #"\"" => "&quot;"
       | #"&" => "&amp;"
-      | ch => if Char.isPrint ch then
-                  str ch
-              else
-                  "&#" ^ Int.toString (ord ch) ^ ";"
+      | ch => str ch
+
+val attrifyString = String.translate attrifyChar
+
 
 val urlifyInt = attrifyInt
 val urlifyFloat = attrifyFloat
@@ -91,36 +60,9 @@
 val htmlifyInt = attrifyInt
 val htmlifyFloat = attrifyFloat
 
-fun htmlifyString s =
-    let
-        fun hs (pos, acc) =
-            if pos >= size s then
-                String.concat (rev acc)
-            else
-                case String.sub (s, pos) of
-                    #"<" => hs (pos+1, "&lt;" :: acc)
-                  | #"&" => hs (pos+1, "&amp;" :: acc)
-                  | ch =>
-                    let
-                        val n = ord ch
-                        fun isCont k = pos + k < size s
-                                       andalso ord (String.sub (s, pos + k)) div 64 = 2
-                        fun unicode k = hs (pos+k+1, String.substring (s, pos, k+1) :: acc)
-                    in
-                        if Char.isPrint ch then
-                            hs (pos+1, str ch :: acc)
-                        else if n div 32 = 6 andalso isCont 1 then
-                            unicode 1
-                        else if n div 16 = 14 andalso isCont 1 andalso isCont 2 then
-                            unicode 2
-                        else if n div 8 = 30 andalso isCont 1 andalso isCont 2 andalso isCont 3 then
-                            unicode 3
-                        else
-                            hs (pos+1, "&#" ^ Int.toString (ord ch) ^ ";" :: acc)
-                    end
-    in
-        hs (0, [])
-    end
+val htmlifyString = String.translate (fn #"<" => "&lt;"
+                                       | #"&" => "&amp;"
+                                       | ch => str ch)
 
 fun hexIt ch =
     let