VB.Net, C#: fix cmd line arg handling with --raw
[jackhill/mal.git] / bash / printer.sh
CommitLineData
ea81a808
JM
1#
2# mal (Make a Lisp) printer
3#
4
5if [ -z "${__mal_printer_included__}" ]; then
6__mal_printer_included=true
7
8source $(dirname $0)/types.sh
9
10_pr_str () {
11 local print_readably="${2}"
12 _obj_type "${1}"; local ot="${r}"
13 if [[ -z "${ot}" ]]; then
14 _error "_pr_str failed on '${1}'"
15 r="<${1}>"
16 else
17 eval ${ot}_pr_str "${1}" "${print_readably}"
18 fi
19}
20
21nil_pr_str () { r="nil"; }
22true_pr_str () { r="true"; }
23false_pr_str () { r="false"; }
24
25number_pr_str () { r="${ANON["${1}"]}"; }
26
27symbol_pr_str () {
28 r="${ANON["${1}"]}"
29 r="${r//__STAR__/*}"
30}
31
32string_pr_str () {
33 local print_readably="${2}"
34 if [ "${print_readably}" == "yes" ]; then
35 local s="${ANON["${1}"]}"
36 s="${s//\\/\\\\}"
37 r="\"${s//\"/\\\"}\""
38 else
39 r="${ANON["${1}"]}"
40 fi
41 r="${r//__STAR__/$'*'}"
42}
43
44function_pr_str () { r="${ANON["${1}"]}"; }
45
46hash_map_pr_str () {
47 local print_readably="${2}"
48 local res=""; local val=""
49 local hm="${ANON["${1}"]}"
50 eval local keys="\${!${hm}[@]}"
51 for key in ${keys}; do
52 #res="${res} \"${ANON["${key}"]}\""
53 res="${res} \"${key//__STAR__/$'*'}\""
54 eval val="\${${hm}[\"${key}\"]}"
55 _pr_str "${val}" "${print_readably}"
56 res="${res} ${r}"
57 done
58 r="{${res:1}}"
59}
60
61vector_pr_str () {
62 local print_readably="${2}"
63 local res=""
64 for elem in ${ANON["${1}"]}; do
65 _pr_str "${elem}" "${print_readably}"
66 res="${res} ${r}"
67 done
68 r="[${res:1}]"
69}
70
71list_pr_str () {
72 local print_readably="${2}"
73 local res=""
74 for elem in ${ANON["${1}"]}; do
75 _pr_str "${elem}" "${print_readably}"
76 res="${res} ${r}"
77 done
78 r="(${res:1})"
79}
80
81atom_pr_str () {
82 local print_readably="${2}"
83 _pr_str "${ANON["${1}"]}" "${print_readably}"
84 r="(atom ${r})";
85}
86
87fi