Compare commits
3 Commits
fa42052a6a
...
c3b444c36c
| Author | SHA1 | Date | |
|---|---|---|---|
| c3b444c36c | |||
| 071a15ca51 | |||
| f811a519b5 |
@@ -180,8 +180,8 @@
|
||||
parser, return a map with the following keys
|
||||
• :top-level-nodes The nodes that /should/ be at the top-level.
|
||||
• :first-section-nodes The nodes that should be wrapped in a new
|
||||
section node
|
||||
• :rest Everything else!"
|
||||
section node.
|
||||
• :rest Everything else."
|
||||
[nodes]
|
||||
(let [[of-top-level remaining-nodes]
|
||||
(->> nodes (split-with #(of-type? % "property-drawer" "keyword")))
|
||||
|
||||
@@ -72,6 +72,12 @@
|
||||
[:article
|
||||
rendered]]])))
|
||||
|
||||
(defn to-html
|
||||
"Read `f` with `slurp` as an Org document and return a string of
|
||||
rendered HTML."
|
||||
[f]
|
||||
(str (hiccup/html {} (-> f slurp element/read-string org-document))))
|
||||
|
||||
|
||||
;;; Further dispatching on `org-element`
|
||||
|
||||
@@ -161,7 +167,10 @@
|
||||
(format "height:%.4fem;vertical-align:%.4fem;display:inline-block"
|
||||
height (- depth)))))))
|
||||
|
||||
(defn- render-tex-snippets [doc]
|
||||
(defn render-tex-snippets
|
||||
"Traverse doc, adorning each LaTeX node with a promise resolving to,
|
||||
optimistically, Hiccup-rendered SVG or MathML code."
|
||||
[doc]
|
||||
(let [promises (atom [])
|
||||
r (->> doc (sp/transform
|
||||
[element/postorder-walker
|
||||
@@ -190,13 +199,20 @@
|
||||
(deliver promise))))
|
||||
(deliver promise (hiccup/raw temml))))
|
||||
(catch Exception e
|
||||
(prn e)
|
||||
(flush)
|
||||
(lr/error e)
|
||||
(throw e))))
|
||||
(when (fs/exists? "/tmp/doerg-svgs")
|
||||
(fs/delete-tree "/tmp/doerg-svgs"))
|
||||
(fs/copy-tree svg-dir "/tmp/doerg-svgs"))))]
|
||||
(future-call (bound-fn* f))
|
||||
(fs/copy-tree svg-dir "/tmp/doerg-svgs"))))
|
||||
fut (future-call (bound-fn* f))]
|
||||
;; Time out after eight seconds. With all the LaTeX and IPC, there
|
||||
;; are so many opportunities for things to go wrong </3.
|
||||
(let [fut-res (deref fut (* 10 1000) ::timed-out)]
|
||||
(if (= fut-res ::timed-out)
|
||||
(do (future-cancel fut)
|
||||
(doseq [{:keys [promise]} @promises]
|
||||
(deliver promise ::timed-out)))
|
||||
fut-res))
|
||||
r))
|
||||
|
||||
(comment
|
||||
@@ -346,11 +362,11 @@
|
||||
|
||||
(defmethod org-element "latex-fragment" [{:keys [contents value] :as e}]
|
||||
[:span.latex-fragment
|
||||
(-> e ::rendered (deref #_#_ 2000 "«timed out»"))])
|
||||
(-> e ::rendered deref)])
|
||||
|
||||
(defmethod org-element "latex-environment" [{:keys [value] :as e}]
|
||||
[:span.latex-fragment
|
||||
(-> e ::rendered (deref #_#_ 2000 "«timed out»"))])
|
||||
(-> e ::rendered deref)])
|
||||
|
||||
(defmethod org-element "example-block" [{:keys [value]}]
|
||||
[:pre value])
|
||||
|
||||
@@ -37,8 +37,7 @@
|
||||
(force-create-sym-link (fs/file dest "Temml-Plex.css")
|
||||
(io/resource "net/deertopia/doerg/Temml-Plex.css"))
|
||||
(fs/delete-if-exists (fs/file dest "index.html"))
|
||||
(->> (h/html (-> src slurp element/read-string render/org-document))
|
||||
str (spit (fs/file dest "index.html"))))
|
||||
(->> src render/to-html str (spit (fs/file dest "index.html"))))
|
||||
|
||||
(defn render-edn [& {:keys [src dest]
|
||||
:or {src some-org-file
|
||||
|
||||
13
doerg/test/net/deertopia/doerg/render_test.clj
Normal file
13
doerg/test/net/deertopia/doerg/render_test.clj
Normal file
@@ -0,0 +1,13 @@
|
||||
(ns net.deertopia.doerg.render-test
|
||||
(:require [net.deertopia.doerg.render :as sut]
|
||||
[net.deertopia.doerg.element :as element]
|
||||
[net.deertopia.doerg.tex.temml :as temml]
|
||||
[com.rpl.specter :as sp]
|
||||
[clojure.test :as t]))
|
||||
|
||||
(t/deftest fallbacks
|
||||
(t/testing "expected fallback behaviour"
|
||||
(let [doc (temml/binding-worker
|
||||
(-> "net/deertopia/doerg/render_test/fallbacks.org"
|
||||
io/resource slurp element/read-string
|
||||
sut/render-tex-snippets))])))
|
||||
@@ -1,5 +1,4 @@
|
||||
#+title: aghhh
|
||||
#+latex_header: \usepackage{ifxetex}
|
||||
|
||||
- blah blah prose prose prose \(c = \sqrt{x^2 + y^2}\), alal.
|
||||
- this thing is \(x\)
|
||||
Reference in New Issue
Block a user