git.iko.soy/rowtype-yoga/purescript-native
on golang help sign in
support escapes for characters outside of BMP (code points > 0xFFFF)
cf1d81dMichael Ficarra
examples/passing/StringEscapes.purs+3โˆ’1
@@ -4,10 +4,12 @@ import Prelude ((==), bind)
4import Test.Assert (assert)
4import Test.Assert (assert)
5
5
6singleCharacter = "\0\b\t\n\v\f\r\"\\" == "\x0\x8\x9\xA\xB\xC\xD\x22\x5C"
6singleCharacter = "\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"
8decimal = "\119558\9731\966\224\0" == "๐Œ†โ˜ƒฯ†ร \0"
8decimal = "\119558\9731\966\224\0" == "๐Œ†โ˜ƒฯ†ร \0"
9+surrogatePair = "\xD834\xDF06" == "\x1D306"
9
10
10main = do
11main = do
11 assert singleCharacter
12 assert singleCharacter
12 assert hex
13 assert hex
13 assert decimal
14 assert decimal
15+ assert surrogatePair
src/Language/PureScript/Pretty/JS.hs+5
@@ -164,6 +164,11 @@ string s = '"' : concatMap encodeChar s ++ "\""
164 encodeChar '\r' = "\\r"
164 encodeChar '\r' = "\\r"
165 encodeChar '"' = "\\\""
165 encodeChar '"' = "\\\""
166 encodeChar '\\' = "\\\\"
166 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
167 encodeChar c | fromEnum c > 0xFFF = "\\u" ++ showHex (fromEnum c) ""
172 encodeChar c | fromEnum c > 0xFFF = "\\u" ++ showHex (fromEnum c) ""
168 encodeChar c | fromEnum c > 0xFF = "\\u0" ++ showHex (fromEnum c) ""
173 encodeChar c | fromEnum c > 0xFF = "\\u0" ++ showHex (fromEnum c) ""
169 encodeChar c | fromEnum c < 0x10 = "\\x0" ++ showHex (fromEnum c) ""
174 encodeChar c | fromEnum c < 0x10 = "\\x0" ++ showHex (fromEnum c) ""