git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
support escapes for characters outside of BMP (code points > 0xFFFF)
commitcf1d81deeb9e076bdf1ce99d0ca078b6c5f77780 authorMichael Ficarra <mficarra@shapesecurity.com> dateTue 10 Nov 2015, 19:58 (11 years ago) parent2a6ef78
2 files changed+8−1
examples/passing/StringEscapes.purs+3−1 src/Language/PureScript/Pretty/JS.hs+5
examples/passing/StringEscapes.purs+3−1
@@ -4,10 +4,12 @@ import Prelude ((==), bind)
44import Test.Assert (assert)
55
66singleCharacter = "\0\b\t\n\v\f\r\"\\" == "\x0\x8\x9\xA\xB\xC\xD\x22\x5C"
7−hex = "\x1d306\x2603\x3C6\xE0\x0" == "𝌆☃φà\0"
7+hex = "\x1D306\x2603\x3C6\xE0\x0" == "𝌆☃φà\0"
88decimal = "\119558\9731\966\224\0" == "𝌆☃φà\0"
9+surrogatePair = "\xD834\xDF06" == "\x1D306"
910
1011main = do
1112 assert singleCharacter
1213 assert hex
1314 assert decimal
15+ assert surrogatePair
src/Language/PureScript/Pretty/JS.hs+5
@@ -164,6 +164,11 @@ string s = '"' : concatMap encodeChar s ++ "\""
164164 encodeChar '\r' = "\\r"
165165 encodeChar '"' = "\\\""
166166 encodeChar '\\' = "\\\\"
167+ encodeChar c | fromEnum c > 0xFFFF = "\\u" ++ showHex highSurrogate "" ++ "\\u" ++ showHex lowSurrogate ""
168+ where
169+ (h, l) = divMod (fromEnum c - 0x10000) 0x400
170+ highSurrogate = h + 0xD800
171+ lowSurrogate = l + 0xDC00
167172 encodeChar c | fromEnum c > 0xFFF = "\\u" ++ showHex (fromEnum c) ""
168173 encodeChar c | fromEnum c > 0xFF = "\\u0" ++ showHex (fromEnum c) ""
169174 encodeChar c | fromEnum c < 0x10 = "\\x0" ++ showHex (fromEnum c) ""