diff options
author | Alan Pearce | 2014-09-21 20:55:31 +0100 |
---|---|---|
committer | Alan Pearce | 2014-09-21 20:55:31 +0100 |
commit | d5b6c2d56e84a93232c2d3c87d93b70102006bee (patch) | |
tree | 7aa6aa8968defe771a651c56ccae8f44a6ce152c | |
parent | 6d5093970156cc85794c9a5f503f93c9989d461b (diff) | |
download | microformats-d5b6c2d56e84a93232c2d3c87d93b70102006bee.tar.lz microformats-d5b6c2d56e84a93232c2d3c87d93b70102006bee.tar.zst microformats-d5b6c2d56e84a93232c2d3c87d93b70102006bee.zip |
Add initial implied property parsing
-rw-r--r-- | src/microformats/parser.clj | 13 | ||||
-rw-r--r-- | test/microformats/parser_expectations.clj | 3 |
2 files changed, 15 insertions, 1 deletions
diff --git a/src/microformats/parser.clj b/src/microformats/parser.clj index 38bca21..b3af5e3 100644 --- a/src/microformats/parser.clj +++ b/src/microformats/parser.clj @@ -152,6 +152,16 @@ (r/filter (mf-names-from-class "h-")) (into []))) +(defn- imply-name + "Imply the name of an entity from the element" + [element] + (or (first (:content element)))) + +(defn parse-implied + "Parse implied properties of a HTML element" + [element] + {:name (imply-name element)}) + (defn parse-h "Parse h-* classes within a HTML element." [element] @@ -160,7 +170,8 @@ (html/attr-starts :class "dt-") (html/attr-starts :class "e-")])]))] (hash-map :type (get-mf-names element) - :properties (apply merge ((juxt parse-p parse-u parse-dt parse-e) el))))) + :properties (merge (parse-implied element) + (apply merge ((juxt parse-p parse-u parse-dt parse-e) el)))))) (defn select-h "Select h-* elements within a HTML document." diff --git a/test/microformats/parser_expectations.clj b/test/microformats/parser_expectations.clj index 8948840..53f9ca5 100644 --- a/test/microformats/parser_expectations.clj +++ b/test/microformats/parser_expectations.clj @@ -115,3 +115,6 @@ (expect {:items [{:properties {:name "Example User"} :type ["h-card"]}] :rels {}} (parse "<div class=\"h-card\"><p class=\"p-name\">Example User</p></div>")) + +(expect {:items [{:type ["h-card"] :properties {:name "Example User"}}] :rels {}} + (parse "<p class=\"h-card\">Example User</p>")) |