Commit | Line | Data |
---|---|---|
ea81a808 JM |
1 | // Node vs browser behavior |
2 | var printer = {}; | |
3 | if (typeof module !== 'undefined') { | |
4 | var types = require('./types'); | |
5 | // map output/print to console.log | |
31b44161 JM |
6 | printer.println = exports.println = function () { |
7 | console.log.apply(console, arguments); | |
8 | }; | |
ea81a808 JM |
9 | } |
10 | ||
11 | function _pr_str(obj, print_readably) { | |
12 | if (typeof print_readably === 'undefined') { print_readably = true; } | |
13 | var _r = print_readably; | |
14 | var ot = types._obj_type(obj); | |
15 | switch (ot) { | |
16 | case 'list': | |
17 | var ret = obj.map(function(e) { return _pr_str(e,_r); }); | |
18 | return "(" + ret.join(' ') + ")"; | |
19 | case 'vector': | |
20 | var ret = obj.map(function(e) { return _pr_str(e,_r); }); | |
21 | return "[" + ret.join(' ') + "]"; | |
22 | case 'hash-map': | |
23 | var ret = []; | |
24 | for (var k in obj) { | |
25 | ret.push(_pr_str(k,_r), _pr_str(obj[k],_r)); | |
26 | } | |
27 | return "{" + ret.join(' ') + "}"; | |
28 | case 'string': | |
b8ee29b2 JM |
29 | if (obj[0] === '\u029e') { |
30 | return ':' + obj.slice(1); | |
31 | } else if (_r) { | |
32 | return '"' + obj.replace(/\\/g, "\\\\") | |
31b44161 JM |
33 | .replace(/"/g, '\\"') |
34 | .replace(/\n/g, "\\n") + '"'; // string | |
ea81a808 JM |
35 | } else { |
36 | return obj; | |
37 | } | |
b8ee29b2 JM |
38 | case 'keyword': |
39 | return ':' + obj.slice(1); | |
ea81a808 JM |
40 | case 'nil': |
41 | return "nil"; | |
42 | case 'atom': | |
43 | return "(atom " + _pr_str(obj.val,_r) + ")"; | |
44 | default: | |
45 | return obj.toString(); | |
46 | } | |
47 | } | |
48 | ||
49 | exports._pr_str = printer._pr_str = _pr_str; | |
50 |