|
26 | 26 | attrs #(merge-nss (element-nss* element) %2))) |
27 | 27 |
|
28 | 28 | ; Represents a parse event. |
29 | | -; type is one of :start-element, :end-element, or :characters |
30 | 29 | (defrecord StartElementEvent [tag attrs nss location-info]) |
31 | | -(defrecord EndElementEvent [tag]) |
32 | 30 | (defrecord CharsEvent [str]) |
33 | 31 | (defrecord CDataEvent [str]) |
34 | 32 | (defrecord CommentEvent [str]) |
35 | 33 |
|
| 34 | +;; EndElementEvent doesn't have any data, so make it a singleton |
| 35 | +(deftype EndElementEvent []) |
| 36 | +(def end-element-event (EndElementEvent.)) |
| 37 | +(defn ->EndElementEvent [] end-element-event) |
| 38 | + |
36 | 39 | ;; Event Generation for stuff to show up in generated xml |
37 | 40 |
|
38 | 41 | (let [second-arg #(do %2) |
|
42 | 45 | attrs #(->StartElementEvent |
43 | 46 | tag %1 (merge-nss (element-nss* element) %2) nil))) |
44 | 47 | :next-events (fn elem-next-events [{:keys [tag content]} next-items] |
45 | | - (list* content (->EndElementEvent tag) next-items))}] |
| 48 | + (list* content end-element-event next-items))}] |
46 | 49 | (extend-protocol-fns |
47 | 50 | EventGeneration |
48 | 51 | (StartElementEvent EndElementEvent CharsEvent CDataEvent CommentEvent) |
|
87 | 90 | :else (throw (ex-info "Illegal argument, not an event object" {:event event})))) |
88 | 91 |
|
89 | 92 | (defn event-exit? [event] |
90 | | - (instance? EndElementEvent event)) |
| 93 | + (identical? end-element-event event)) |
0 commit comments