Skip to content

Commit 4a249ab

Browse files
fixes #53: properly escape output of Show instance for String
1 parent eb48931 commit 4a249ab

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

src/Prelude.js

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,27 @@ exports.showCharImpl = function (c) {
214214
};
215215

216216
exports.showStringImpl = function (s) {
217-
return JSON.stringify(s);
217+
var l = s.length;
218+
return "\"" + s.replace(
219+
/[\0-\x1F\x7F"\\]/g,
220+
function (c, i) { // jshint ignore:line
221+
switch (c) {
222+
case "\"":
223+
case "\\":
224+
return "\\" + c;
225+
case "\a": return "\\a";
226+
case "\b": return "\\b";
227+
case "\f": return "\\f";
228+
case "\n": return "\\n";
229+
case "\r": return "\\r";
230+
case "\t": return "\\t";
231+
case "\v": return "\\v";
232+
}
233+
var k = i + 1;
234+
var empty = k < l && s[k] >= "0" && s[k] <= "9" ? "\\&" : "";
235+
return "\\" + c.charCodeAt(0).toString(10) + empty;
236+
}
237+
) + "\"";
218238
};
219239

220240
exports.showArrayImpl = function (f) {

0 commit comments

Comments
 (0)