Fix metadata on functions.
[jackhill/mal.git] / python / printer.py
CommitLineData
ea81a808
JM
1import mal_types as types
2
3def _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):
15 if print_readably:
16 return '"' + obj.encode('unicode_escape').replace('"', '\\"') + '"'
17 else:
18 return obj
19 elif types._nil_Q(obj):
20 return "nil"
21 elif types._true_Q(obj):
22 return "true"
23 elif types._false_Q(obj):
24 return "false"
25 elif types._atom_Q(obj):
26 return "(atom " + _pr_str(obj.val,_r) + ")"
27 else:
28 return obj.__str__()
29