Commit | Line | Data |
---|---|---|
ea81a808 JM |
1 | import mal_types as types |
2 | ||
3 | def _pr_str(obj, print_readably=True): | |
4 | _r = print_readably | |
5 | if types._list_Q(obj): | |
6 | return "(" + " ".join(map(lambda e: _pr_str(e,_r), obj)) + ")" | |
7 | elif types._vector_Q(obj): | |
8 | return "[" + " ".join(map(lambda e: _pr_str(e,_r), obj)) + "]" | |
9 | elif types._hash_map_Q(obj): | |
10 | ret = [] | |
11 | for k in obj.keys(): | |
12 | ret.extend((_pr_str(k), _pr_str(obj[k],_r))) | |
13 | return "{" + " ".join(ret) + "}" | |
14 | elif types._string_Q(obj): | |
d706ed50 | 15 | if len(obj) > 0 and obj[0] == types.u('\u029e'): |
b8ee29b2 JM |
16 | return ':' + obj[1:] |
17 | elif print_readably: | |
a05f7822 | 18 | return '"' + obj.encode('unicode_escape').decode('latin1').replace('"', '\\"') + '"' |
ea81a808 JM |
19 | else: |
20 | return obj | |
21 | elif types._nil_Q(obj): | |
22 | return "nil" | |
23 | elif types._true_Q(obj): | |
24 | return "true" | |
25 | elif types._false_Q(obj): | |
26 | return "false" | |
27 | elif types._atom_Q(obj): | |
28 | return "(atom " + _pr_str(obj.val,_r) + ")" | |
29 | else: | |
30 | return obj.__str__() | |
31 |