File tree Expand file tree Collapse file tree 5 files changed +36
-10
lines changed Expand file tree Collapse file tree 5 files changed +36
-10
lines changed Original file line number Diff line number Diff line change 12
12
protocols
13
13
quote
14
14
reader-macro
15
+ regex
15
16
seq
16
17
string
17
18
token
57
58
meta-node
58
59
raw-meta-node]
59
60
61
+ [rewrite-clj.node.regex
62
+ regex-node]
63
+
60
64
[rewrite-clj.node.reader-macro
61
65
deref-node
62
66
eval-node
Original file line number Diff line number Diff line change
1
+ (ns ^:no-doc rewrite-clj.node.regex
2
+ (:require [rewrite-clj.node.protocols :as node]))
3
+
4
+
5
+ ; ; ## Node
6
+
7
+ (defrecord RegexNode [pattern]
8
+ rewrite-clj.node.protocols /Node
9
+ (tag [_] :regex )
10
+ (printable-only? [_] false )
11
+ (sexpr [_] (list 're-pattern pattern))
12
+ (length [_] 1 )
13
+ (string [_] (str " #\" " pattern " \" " )))
14
+
15
+ (node/make-printable! RegexNode)
16
+
17
+ ; ; ## Constructor
18
+
19
+ (defn regex-node
20
+ " Create node representing a regex"
21
+ [pattern-string]
22
+ (->RegexNode pattern-string))
Original file line number Diff line number Diff line change 114
114
nil (reader/throw-reader reader " Unexpected EOF." )
115
115
\{ (node/set-node (parse-delim reader \}))
116
116
\( (node/fn-node (parse-delim reader \)))
117
- \" (parse-regex reader)
117
+ \" (node/regex-node ( parse-regex reader) )
118
118
\^ (node/raw-meta-node (parse-printables reader :meta 2 true ))
119
119
\' (node/var-node (parse-printables reader :var 1 true ))
120
120
\= (node/eval-node (parse-printables reader :eval 1 true ))
Original file line number Diff line number Diff line change 40
40
(defn parse-regex
41
41
[reader]
42
42
(let [h (read-string-data reader)]
43
- (node/token-node ( re-pattern ( string/join " \n " h)) )))
43
+ (string/join " \n " h)))
Original file line number Diff line number Diff line change 112
112
(tabular
113
113
(fact " about parsing regular expressions"
114
114
(let [n (p/parse-string ?s)]
115
- (node/tag n) => :token
116
- (class (node/sexpr n)) => java.util.regex.Pattern
117
- (str (node/sexpr n)) => ?p))
115
+ (node/tag n) => :regex
116
+ (node/sexpr n) => ?p))
118
117
?s ?p
119
- " #\" regex\" " " regex"
120
- " #\" regex\\ .\" " " regex\\ ."
121
- " #\" [reg|k].x\" " " [reg|k].x"
122
- " #\" a\\ nb\" " " a\\ nb"
123
- " #\" a\n b\" " " a\n b" )
118
+
119
+ " #\" regex\" " '(re-pattern " regex" )
120
+ " #\" regex\\ .\" " '(re-pattern " regex\\ ." )
121
+ " #\" [reg|k].x\" " '(re-pattern " [reg|k].x" )
122
+ " #\" a\\ nb\" " '(re-pattern " a\\ nb" )
123
+ " #\" a\n b\" " '(re-pattern " a\n b" ))
124
124
125
125
(tabular
126
126
(fact " about parsing strings"
You can’t perform that action at this time.
0 commit comments