-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconvert.hy
63 lines (52 loc) · 1.65 KB
/
convert.hy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
(import autopep8)
;; (import [utils [hypprint :as pp]])
(import sys io)
(import [hy [HyExpression HySymbol HyInteger HyString HyDict
HyKeyword HyCons]]
[sys])
(defn -hystringify [value]
(let [sv (string value)]
(if (.startswith sv "is_")
(+ (cut sv 3) "?")
(if (= sv "None")
"nil"
sv))))
(defn -pprint [form]
(cond
[(instance? HyExpression form)
(+ "(" (.join " " (map -pprint form)) ")")]
[(instance? HySymbol form)
(-hystringify form)]
[(or (instance? HyInteger form) (integer? form))
(string form)]
[(instance? HyKeyword form)
(-hystringify (rest (rest form)))]
[(or (instance? HyString form) (string? form))
(string (+ "\"" (string form) "\""))]
[(or (instance? HyDict form) (instance? dict form))
(+ "{" (.join " " (map -pprint form)) "}")]
[(instance? list form)
(+ "[" (.join " " (map -pprint form)) "]")]
[(coll? form)
(-pprint (list form))]
[(cons? form)
(+ "(" (-pprint (first form)) " . " (-pprint (rest form)) ")")]
[true
nil]))
(defn hypprint [form &optional [outermost false]]
(if outermost
(list (map hypprint form))
(print (-pprint form))))
(defn hypformat [form &optional [outermost false]]
(if outermost
(list (map hypformat form))
(+ (-pprint form) "\n")))
(defmacro pretty/simplify [expr &rest args]
`(hypprint (simplify '~expr ~@args)))
(defn h2p [c]
(.fix_code autopep8
(disassemble c true)))
(def buffer (io.StringIO (nth sys.argv 1)))
;; (print "codes: " (nth sys.argv 1))
;; (print "python: " (h2p (apply read [] {"from_file" buffer})))
(print (h2p (apply read [] {"from_file" buffer})))