|
33 | 33 | ; Represents a parse event. |
34 | 34 | (defrecord StartElementEvent [tag attrs nss location-info]) |
35 | 35 | (defrecord EmptyElementEvent [tag attrs nss location-info]) |
| 36 | +(defrecord EndElementEvent [tag nss location-info]) |
36 | 37 | (defrecord CharsEvent [str]) |
37 | 38 | (defrecord CDataEvent [str]) |
38 | 39 | (defrecord CommentEvent [str]) |
39 | 40 | (defrecord QNameEvent [qn]) |
40 | 41 |
|
41 | | -;; EndElementEvent doesn't have any data, so make it a singleton |
42 | | -(deftype EndElementEvent []) |
43 | | -(def end-element-event (EndElementEvent.)) |
44 | | -(defn ->EndElementEvent [] end-element-event) |
45 | | - |
46 | 42 | ;; Event Generation for stuff to show up in generated xml |
47 | 43 |
|
48 | 44 | (let [second-arg #(do %2) |
|
52 | 48 | attrs #((if (seq content) |
53 | 49 | ->StartElementEvent ->EmptyElementEvent) |
54 | 50 | tag %1 (pu/merge-prefix-map (element-nss* element) %2) nil))) |
55 | | - :next-events (fn elem-next-events [{:keys [tag content]} next-items] |
| 51 | + :next-events (fn elem-next-events [{:keys [tag content] :as element} next-items] |
56 | 52 | (if (seq content) |
57 | | - (list* content end-element-event next-items) |
| 53 | + (list* content |
| 54 | + (->EndElementEvent tag (element-nss* element) nil) |
| 55 | + next-items) |
58 | 56 | next-items))} |
59 | 57 | string-event-generation {:gen-event (comp ->CharsEvent #'xml-str) |
60 | 58 | :next-events second-arg} |
|
110 | 108 | :else (throw (ex-info "Illegal argument, not an event object" {:event event})))) |
111 | 109 |
|
112 | 110 | (defn event-exit? [event] |
113 | | - (identical? end-element-event event)) |
| 111 | + (instance? EndElementEvent event)) |
0 commit comments