Woohoo! Transform works.

This commit is contained in:
Simon Brooke 2019-04-30 17:51:36 +01:00
parent c9f7f29f0f
commit 7bc60a0bbb

View file

@ -26,26 +26,35 @@
(if processor (if processor
(apply processor (list element dispatcher)) (apply processor (list element dispatcher))
(map #(process % dispatcher) (:content element)))) (map #(process % dispatcher) (:content element))))
(string? element) element))
(string? element) element
(or (seq? element) (vector? element))
(map #(process % dispatcher) element)))
(defn- transformer-dispatch
[a _]
(class a))
(defmulti transform (defmulti transform
"Transform the `obj` which is my first argument using the `dispatcher` "Transform the `obj` which is my first argument using the `dispatcher`
which is my second argument." which is my second argument."
[class class] :default :default) #'transformer-dispatch
:default :default)
(defmethod transform :default [obj dispatcher] (defmethod transform :default [obj dispatcher]
(process obj dispatcher)) (process obj dispatcher))
(defmethod transform [java.net.URI Object] [uri dispatcher] (defmethod transform java.net.URI [uri dispatcher]
(process (html/html-resource uri) dispatcher)) (process (html/html-resource uri) dispatcher))
(defmethod transform [java.net.URL Object] [url dispatcher] (defmethod transform java.net.URL [url dispatcher]
(transform (.toURI url) dispatcher)) (transform (.toURI url) dispatcher))
(defmethod transform [String Object] [s dispatcher] (defmethod transform String [s dispatcher]
(let [url (try (java.net.URL. s) (catch Exception any))] (let [url (try (java.net.URL. s) (catch Exception any))]
(if url (transform url dispatcher) (if url (transform url dispatcher)
;; otherwise, if s is not a URL, consider it as an HTML fragment, ;; otherwise, if s is not a URL, consider it as an HTML fragment,
;; parse and process it ;; parse and process it
(process (tagsoup/parser (java.io.StringReader s)) dispatcher) (process (tagsoup/parser (java.io.StringReader s)) dispatcher)
))) )))