Commit | Line | Data |
---|---|---|
a11a0235 | 1 | import { _list_Q, _keyword_Q, Vector, Atom } from './types' |
4eb71990 JM |
2 | |
3 | export function pr_str(obj, print_readably) { | |
4f8c7db9 JM |
4 | if (typeof print_readably === 'undefined') { print_readably = true } |
5 | var _r = print_readably | |
afa79313 | 6 | if (_list_Q(obj)) { |
a05c086f JM |
7 | return "(" + obj.map(e => pr_str(e,_r)).join(' ') + ")" |
8 | } else if (obj instanceof Vector) { | |
9 | return "[" + obj.map(e => pr_str(e,_r)).join(' ') + "]" | |
10 | } else if (obj instanceof Map) { | |
4f8c7db9 | 11 | var ret = [] |
afa79313 | 12 | for (let [k,v] of obj) { |
4f8c7db9 | 13 | ret.push(pr_str(k,_r), pr_str(v,_r)) |
afa79313 | 14 | } |
4f8c7db9 | 15 | return "{" + ret.join(' ') + "}" |
4eb71990 | 16 | } else if (typeof obj === "string") { |
a11a0235 | 17 | if (_keyword_Q(obj)) { |
4f8c7db9 | 18 | return ':' + obj.slice(1) |
4eb71990 JM |
19 | } else if (_r) { |
20 | return '"' + obj.replace(/\\/g, "\\\\") | |
a05c086f JM |
21 | .replace(/"/g, '\\"') |
22 | .replace(/\n/g, "\\n") + '"' | |
4eb71990 | 23 | } else { |
4f8c7db9 | 24 | return obj |
4eb71990 | 25 | } |
a05c086f | 26 | } else if (typeof obj === 'symbol') { |
4f8c7db9 | 27 | return Symbol.keyFor(obj) |
4eb71990 | 28 | } else if (obj === null) { |
4f8c7db9 | 29 | return "nil" |
e5c4e656 | 30 | } else if (obj instanceof Atom) { |
4f8c7db9 | 31 | return "(atom " + pr_str(obj.val,_r) + ")" |
4eb71990 | 32 | } else { |
4f8c7db9 | 33 | return obj.toString() |
4eb71990 JM |
34 | } |
35 | } |