on master help sign in
Take out special case for [Char] in `show`
commit1f5c0373a59171029f93ebaa5fe61ecc97aff392 authorEvan Czaplicki <info@elm-lang.org> dateFri 4 Oct 2013, 11:40 (13 years ago) parentcbd136d
1 file changed+15−20
libraries/Native/Show.js+15−20
libraries/Native/Show.js+15−20
@@ -21,8 +21,9 @@ Elm.Native.Show.make = function(elm) {
2121 return v ? "True" : "False";
2222 } else if (type === "number") {
2323 return v+"";
24− } else if (type === "string" && v.length < 2) {
25− return "'" + showChar(v) + "'";
24+ } else if (type === "string") {
25+ var quote = v.length === 1 ? "'" : '"';
26+ return quote + addSlashes(v) + quote;
2627 } else if (type === "object" && '_' in v) {
2728 var output = [];
2829 for (var k in v._) {
@@ -45,18 +46,13 @@ Elm.Native.Show.make = function(elm) {
4546 }
4647 return "(" + output.join(",") + ")";
4748 } else if (v.ctor === "::") {
48− var isStr = typeof v._0 === "string",
49− start = isStr ? '"' : "[",
50− end = isStr ? '"' : "]",
51− sep = isStr ? "" : ",",
52− f = !isStr ? toString : showChar;
53− var output = start + f(v._0);
49+ var output = '[' + toString(v._0);
5450 v = v._1;
5551 while (v.ctor === "::") {
56− output += sep + f(v._0);
52+ output += "," + toString(v._0);
5753 v = v._1;
5854 }
59− return output + end;
55+ return output + ']';
6056 } else if (v.ctor === "[]") {
6157 return "[]";
6258 } else if (v.ctor === "RBNode" || v.ctor === "RBEmpty") {
@@ -83,16 +79,15 @@ Elm.Native.Show.make = function(elm) {
8379 return "<internal structure>";
8480 };
8581
86− function showChar (c) {
87− return c === '\n' ? '\\n' :
88− c === '\t' ? '\\t' :
89− c === '\b' ? '\\b' :
90− c === '\r' ? '\\r' :
91− c === '\v' ? '\\v' :
92− c === '\0' ? '\\0' :
93− c === '\'' ? "\\'" :
94− c === '\"' ? '\\"' :
95− c === '\\' ? '\\\\' : c;
82+ function addSlashes(str) {
83+ return str.replace(/\n/g, '\\n')
84+ .replace(/\t/g, '\\t')
85+ .replace(/\r/g, '\\r')
86+ .replace(/\v/g, '\\v')
87+ .replace(/\0/g, '\\0')
88+ .replace(/\'/g, "\\'")
89+ .replace(/\"/g, '\\"')
90+ .replace(/\\/g, '\\\\')
9691 }
9792
9893 return elm.Native.Show.values = { show:toString };