Skip to content

Commit 08d09d5

Browse files
RAMartpuredanger
authored andcommitted
DXML-75 EndElementEvent enriched with common information
1 parent 24a875b commit 08d09d5

File tree

2 files changed

+17
-14
lines changed

2 files changed

+17
-14
lines changed

src/main/clojure/clojure/data/xml/event.clj

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,12 @@
3333
; Represents a parse event.
3434
(defrecord StartElementEvent [tag attrs nss location-info])
3535
(defrecord EmptyElementEvent [tag attrs nss location-info])
36+
(defrecord EndElementEvent [tag nss location-info])
3637
(defrecord CharsEvent [str])
3738
(defrecord CDataEvent [str])
3839
(defrecord CommentEvent [str])
3940
(defrecord QNameEvent [qn])
4041

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-
4642
;; Event Generation for stuff to show up in generated xml
4743

4844
(let [second-arg #(do %2)
@@ -52,9 +48,11 @@
5248
attrs #((if (seq content)
5349
->StartElementEvent ->EmptyElementEvent)
5450
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]
5652
(if (seq content)
57-
(list* content end-element-event next-items)
53+
(list* content
54+
(->EndElementEvent tag (element-nss* element) nil)
55+
next-items)
5856
next-items))}
5957
string-event-generation {:gen-event (comp ->CharsEvent #'xml-str)
6058
:next-events second-arg}
@@ -110,4 +108,4 @@
110108
:else (throw (ex-info "Illegal argument, not an event object" {:event event}))))
111109

112110
(defn event-exit? [event]
113-
(identical? end-element-event event))
111+
(instance? EndElementEvent event))

src/main/clojure/clojure/data/xml/jvm/parse.clj

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -89,12 +89,17 @@
8989
(cons (->StartElementEvent tag attrs ns-env location)
9090
next-events))
9191
(recur))
92-
XMLStreamConstants/END_ELEMENT
93-
(if (include-node? :element)
94-
(do (assert (seq ns-envs) "Balanced end")
95-
(cons (->EndElementEvent)
96-
(pull-seq sreader opts (rest ns-envs))))
97-
(recur))
92+
XMLStreamConstants/END_ELEMENT
93+
(if (include-node? :element)
94+
(do (assert (seq ns-envs) "Balanced end")
95+
(let [ns-env (nss-hash sreader (or (first ns-envs) pu/EMPTY))
96+
tag (qname (when namespace-aware (.getNamespaceURI sreader))
97+
(.getLocalName sreader)
98+
(.getPrefix sreader))
99+
next-events (pull-seq sreader opts (rest ns-envs))]
100+
(cons (->EndElementEvent tag ns-env location)
101+
next-events)))
102+
(recur))
98103
XMLStreamConstants/CHARACTERS
99104
(if-let [text (and (include-node? :characters)
100105
(not (and skip-whitespace

0 commit comments

Comments
 (0)