Commit | Line | Data |
---|---|---|
50a964ce DM |
1 | " printer module |
2 | ||
3 | function PrStr(ast, readable) | |
4 | let obj = a:ast | |
5 | let r = a:readable | |
6 | if ListQ(obj) | |
7 | let ret = [] | |
82641edb | 8 | for e in obj.val |
50a964ce DM |
9 | call add(ret, PrStr(e, r)) |
10 | endfor | |
11 | return "(" . join(ret, " ") . ")" | |
12 | elseif VectorQ(obj) | |
13 | let ret = [] | |
82641edb | 14 | for e in obj.val |
50a964ce DM |
15 | call add(ret, PrStr(e, r)) |
16 | endfor | |
17 | return "[" . join(ret, " ") . "]" | |
18 | elseif HashQ(obj) | |
19 | let ret = [] | |
82641edb | 20 | for [k, v] in items(obj.val) |
50a964ce DM |
21 | let keyobj = HashParseKey(k) |
22 | call add(ret, PrStr(keyobj, r)) | |
23 | call add(ret, PrStr(v, r)) | |
24 | endfor | |
25 | return "{" . join(ret, " ") . "}" | |
26 | elseif MacroQ(obj) | |
82641edb | 27 | let numargs = ListCount(obj.val.params) |
50a964ce DM |
28 | return "<Macro:" . numargs . "-arguments>" |
29 | elseif FunctionQ(obj) | |
82641edb | 30 | let numargs = ListCount(obj.val.params) |
50a964ce DM |
31 | return "<Function:" . numargs . "-arguments>" |
32 | elseif NativeFunctionQ(obj) | |
82641edb | 33 | let funcname = obj.val.name |
50a964ce DM |
34 | return "<NativeFunction:" . funcname . ">" |
35 | elseif AtomQ(obj) | |
82641edb | 36 | return "(atom " . PrStr(obj.val, 1) . ")" |
50a964ce | 37 | elseif KeywordQ(obj) |
82641edb | 38 | return ':' . obj.val |
50a964ce DM |
39 | elseif StringQ(obj) |
40 | if r | |
82641edb | 41 | let str = obj.val |
50a964ce DM |
42 | let str = substitute(str, '\\', '\\\\', "g") |
43 | let str = substitute(str, '"', '\\"', "g") | |
44 | let str = substitute(str, "\n", '\\n', "g") | |
45 | return '"' . str . '"' | |
46 | else | |
82641edb | 47 | return obj.val |
50a964ce DM |
48 | endif |
49 | elseif NilQ(obj) | |
50 | return "nil" | |
51 | elseif TrueQ(obj) | |
52 | return "true" | |
53 | elseif FalseQ(obj) | |
54 | return "false" | |
55 | elseif IntegerQ(obj) || FloatQ(obj) | |
82641edb | 56 | return string(obj.val) |
50a964ce | 57 | else |
82641edb | 58 | return obj.val |
50a964ce DM |
59 | end |
60 | endfunction |