All: don't ignore */mal. Fixes #99
[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):
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