-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutils.hy
63 lines (57 loc) · 2.07 KB
/
utils.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
;; hydiomatic -- The Hy Transformer
;; Copyright (C) 2014, 2015 Gergely Nagy <[email protected]>
;;
;; This library is free software: you can redistribute it and/or
;; modify it under the terms of the GNU Lesser General Public License
;; as published by the Free Software Foundation, either version 3 of
;; the License, or (at your option) any later version.
;;
;; This library is distributed in the hope that it will be useful, but
;; WITHOUT ANY WARRANTY; without even the implied warranty of
;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
;; Lesser General Public License for more details.
;;
;; You should have received a copy of the GNU Lesser General Public
;; License along with this program. If not, see <http://www.gnu.org/licenses/>.
(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)))