about summary refs log tree commit diff stats
path: root/src/microformats/parser.clj
diff options
context:
space:
mode:
Diffstat (limited to 'src/microformats/parser.clj')
-rw-r--r--src/microformats/parser.clj12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/microformats/parser.clj b/src/microformats/parser.clj
index 36eba82..8bc7c3c 100644
--- a/src/microformats/parser.clj
+++ b/src/microformats/parser.clj
@@ -1,5 +1,6 @@
 (ns microformats.parser
   (:require [net.cgrand.enlive-html :as html]
+            [clojure.zip :as z]
             [clojure.core.reducers :as r]
             [clojure.string :as str]))
 
@@ -250,10 +251,17 @@
   (hash-map :type (get-mf-names element)
             :properties (get-mf-properties element)))
 
+;; Adapted from http://stackoverflow.com/a/7686324
+(defn- parents
+  [pred]
+  (html/zip-pred (fn [loc]
+                   (some pred (take-while identity (iterate z/up (z/up loc)))))))
+
 (defn select-h
-  "Select h-* elements within a HTML document."
+  "Select top-level h-* elements within a HTML element."
   [element]
-  (html/select element [(html/attr-contains :class "h-")]))
+  (html/select element [[(html/attr-contains :class "h-")
+                         (html/but (parents (html/attr? :class)))]]))
 
 (defn parse-rel
   "Parse rel attributes of an HTML link element"