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 = [] | |
8 | for e in ObjValue(obj) | |
9 | call add(ret, PrStr(e, r)) | |
10 | endfor | |
11 | return "(" . join(ret, " ") . ")" | |
12 | elseif VectorQ(obj) | |
13 | let ret = [] | |
14 | for e in ObjValue(obj) | |
15 | call add(ret, PrStr(e, r)) | |
16 | endfor | |
17 | return "[" . join(ret, " ") . "]" | |
18 | elseif HashQ(obj) | |
19 | let ret = [] | |
20 | for [k, v] in items(ObjValue(obj)) | |
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) | |
27 | let numargs = ListCount(ObjValue(obj).params) | |
28 | return "<Macro:" . numargs . "-arguments>" | |
29 | elseif FunctionQ(obj) | |
30 | let numargs = ListCount(ObjValue(obj).params) | |
31 | return "<Function:" . numargs . "-arguments>" | |
32 | elseif NativeFunctionQ(obj) | |
33 | let funcname = ObjValue(obj).name | |
34 | return "<NativeFunction:" . funcname . ">" | |
35 | elseif AtomQ(obj) | |
36 | return "(atom " . PrStr(ObjValue(obj), 1) . ")" | |
37 | elseif KeywordQ(obj) | |
38 | return ':' . ObjValue(obj) | |
39 | elseif StringQ(obj) | |
40 | if r | |
41 | let str = ObjValue(obj) | |
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 | |
47 | return ObjValue(obj) | |
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) | |
56 | return string(ObjValue(obj)) | |
57 | else | |
58 | return ObjValue(obj) | |
59 | end | |
60 | endfunction |