Skip to content

Commit 28889c3

Browse files
authored
Merge pull request #22 from reedho/html-support
html-support (with hickory)
2 parents a852403 + efd9774 commit 28889c3

File tree

3 files changed

+52
-3
lines changed

3 files changed

+52
-3
lines changed

deps.edn

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
com.cognitect/transit-clj {:mvn/version "1.0.324"}
1515
medley/medley {:mvn/version "1.3.0"}
1616
mvxcvi/puget {:mvn/version "1.3.1"}
17-
tolitius/xml-in {:mvn/version "0.1.1"}}
17+
tolitius/xml-in {:mvn/version "0.1.1"}
18+
org.clj-commons/hickory {:mvn/version "0.7.3"}
19+
org.jsoup/jsoup {:mvn/version "1.14.3"}}
1820
:aliases
1921
{:run
2022
{:main-opts ["-m" "cq.main"]}

src/cq/formats.clj

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
(:require [clojure.data.csv :as csv]
33
[clojure.data.json :as json]
44
[clojure.data.xml :as xml]
5+
[hickory.core :as html]
6+
[hickory.render :refer [hickory-to-html]]
57
[clojure.edn :as edn]
68
[clojure.pprint :as ppt]
79
[clojure.java.io :as io]
@@ -167,6 +169,18 @@
167169
(with-open [w (io/writer out)]
168170
(emit x w)))))
169171

172+
(defn ->html-reader
173+
[_]
174+
(fn [in]
175+
(html/as-hickory (html/parse (slurp (io/reader in))))))
176+
177+
(defn ->html-writer
178+
[_]
179+
(fn [x out]
180+
(binding [*out* (io/writer out)]
181+
(print (hickory-to-html x))
182+
(flush))))
183+
170184
(def formats
171185
{"json" {:->reader ->json-reader
172186
:->writer ->json-writer}
@@ -185,7 +199,9 @@
185199
"transit" {:->reader ->transit-reader
186200
:->writer ->transit-writer}
187201
"xml" {:->reader ->xml-reader
188-
:->writer ->xml-writer}})
202+
:->writer ->xml-writer}
203+
"html" {:->reader ->html-reader
204+
:->writer ->html-writer}})
189205

190206
(defn format->reader
191207
[format in opts]

test/cq/formats_test.clj

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22
(:require [cq.formats :as sut]
33
[clojure.test :refer :all]
44
[clojure.java.io :as io]
5-
[clojure.string :as str])
5+
[clojure.string :as str]
6+
[hickory.core :as html])
67
(:import [java.io ByteArrayInputStream BufferedInputStream PrintStream ByteArrayOutputStream]))
78

89
(defn- to-out-stream
@@ -152,3 +153,33 @@
152153
<a:article>Hello</a:article>
153154
</a:html>\n"
154155
(test-writer-str sut/->xml-writer {:pretty true} test-xml-data))))))
156+
157+
(def test-html-str
158+
"<p>hello</p>")
159+
160+
(def test-html-data
161+
{:type :document
162+
:content
163+
[{:type :element
164+
:attrs nil
165+
:tag :html
166+
:content
167+
[{:type :element
168+
:attrs nil
169+
:tag :head :content nil}
170+
{:type :element
171+
:attrs nil
172+
:tag :body :content
173+
[{:type :element
174+
:attrs nil
175+
:tag :p
176+
:content ["hello"]}]}]}]})
177+
178+
(deftest html
179+
(testing "reader"
180+
(is (= test-html-data
181+
(test-reader-str sut/->html-reader nil test-html-str))))
182+
183+
(testing "writer"
184+
(is (= "<html><head></head><body><p>hello</p></body></html>"
185+
(test-writer-str sut/->html-writer nil test-html-data)))))

0 commit comments

Comments
 (0)