about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/microformats/parser.clj22
1 files changed, 19 insertions, 3 deletions
diff --git a/src/microformats/parser.clj b/src/microformats/parser.clj
index 21fcc26..9137eaa 100644
--- a/src/microformats/parser.clj
+++ b/src/microformats/parser.clj
@@ -387,8 +387,24 @@
   [locs]
   (or (apply merge-with into (map parse-rel (select-rels locs))) {}))
 
+(defprotocol node
+  (to-node [html]))
+
+(extend-protocol node
+  String
+  (to-node [html]
+    (some->> html str/trim html/html-snippet)))
+
+(extend-protocol node
+  clojure.lang.LazySeq
+  (to-node [html]
+    html))
+
 (defn parse
   "Parse a HTML string with microformats"
-  [html]
-  (let [document (some->> html str/trim html/html-snippet with-base-url (map z/xml-zip) first)]
-    {:items (some-> document walk) :rels (parse-rels document)}))
+  ([html]
+     (let [document (some->> html to-node with-base-url)]
+       (parse document (get-base-url document))))
+  ([html base-url]
+     (let [document (some->> html to-node first (with-base-url base-url) z/xml-zip)]
+       {:items (some-> document walk) :rels (parse-rels document)})))