aboutsummaryrefslogtreecommitdiff
path: root/src/clojure
diff options
context:
space:
mode:
authorTom Faulhaber <git_net@infolace.com>2009-06-05 21:56:50 +0000
committerTom Faulhaber <git_net@infolace.com>2009-06-05 21:56:50 +0000
commit2f7ddf7205bbd47ace5d2240c66a4686de18d7e7 (patch)
treef26dcb383139099a90a16544e003f16e08042f59 /src/clojure
parentd31bf853f7dadf4e9fe19af805d8f7c1e0a32557 (diff)
Expose xml-dispatch so it can be used directly with write and fix up
some bugs
Diffstat (limited to 'src/clojure')
-rw-r--r--src/clojure/contrib/pprint/examples/xml.clj27
1 files changed, 14 insertions, 13 deletions
diff --git a/src/clojure/contrib/pprint/examples/xml.clj b/src/clojure/contrib/pprint/examples/xml.clj
index 4bf92c14..3a2b9ae8 100644
--- a/src/clojure/contrib/pprint/examples/xml.clj
+++ b/src/clojure/contrib/pprint/examples/xml.clj
@@ -56,35 +56,36 @@
((formatter-out "<[!DOCTYPE [~{~a~}]]>") contents))
(defmethod print-xml-tag :default [tag attrs contents]
- (let [tag-name (as-str tag)]
- (if (seq? contents)
+ (let [tag-name (as-str tag)
+ xlated-attrs (map #(vector (as-str (key %)) (as-str (val %))) attrs)]
+ (if (seq contents)
((formatter-out "~<~<<~a~1:i~{ ~:_~{~a=\"~a\"~}~}>~:>~vi~{~_~w~}~0i~_</~a>~:>")
- [[tag-name (map #(vector (as-str (key %)) (as-str (val %))) attrs)] *prxml-indent* contents tag-name])
- ((formatter-out "~<<~a~1:i~{~:_ ~{~a=\"~a\"~}~}/>~:>") [tag-name attrs]))))
+ [[tag-name xlated-attrs] *prxml-indent* contents tag-name])
+ ((formatter-out "~<<~a~1:i~{~:_ ~{~a=\"~a\"~}~}/>~:>") [tag-name xlated-attrs]))))
-(defmulti #^{:private true} print-xml class)
+(defmulti xml-dispatch class)
-(defmethod print-xml clojure.lang.IPersistentVector [x]
+(defmethod xml-dispatch clojure.lang.IPersistentVector [x]
(let [[tag & contents] x
[attrs content] (if (map? (first contents))
[(first contents) (rest contents)]
[{} contents])]
(print-xml-tag tag attrs content)))
-(defmethod print-xml clojure.lang.ISeq [x]
+(defmethod xml-dispatch clojure.lang.ISeq [x]
;; Recurse into sequences, so we can use (map ...) inside prxml.
- (doseq [c x] (print-xml c)))
+ (doseq [c x] (xml-dispatch c)))
-(defmethod print-xml clojure.lang.Keyword [x]
+(defmethod xml-dispatch clojure.lang.Keyword [x]
(print-xml-tag x {} nil))
-(defmethod print-xml String [x]
+(defmethod xml-dispatch String [x]
(print (escape-xml x)))
-(defmethod print-xml nil [x])
+(defmethod xml-dispatch nil [x])
-(defmethod print-xml :default [x]
+(defmethod xml-dispatch :default [x]
(print x))
@@ -112,5 +113,5 @@
(prxml [:decl! {:version \"1.1\"}])
; => <?xml version=\"1.1\" encoding=\"UTF-8\"?>"
[& args]
- (doseq [arg args] (write arg :dispatch print-xml))
+ (doseq [arg args] (write arg :dispatch xml-dispatch))
(when (pos? (count args)) (newline)))