diff --git a/doerg/src/net/deertopia/doerg/render.clj b/doerg/src/net/deertopia/doerg/render.clj index c0f5c50..03582be 100644 --- a/doerg/src/net/deertopia/doerg/render.clj +++ b/doerg/src/net/deertopia/doerg/render.clj @@ -40,14 +40,13 @@ (def ^:dynamic ^:private *document-info*) (declare ^:private gather-footnotes render-renderer-error - view-children-as-seq) + view-children-as-seq render-tex-snippets) (defn org-element-recursive "Recursively render an Org-mode element to Hiccup." [e] (tex/binding-tex-worker (->> e - ;; gather-footnotes (sp/transform [element/postorder-walker view-children-as-seq] (fn [node] @@ -59,7 +58,8 @@ (defn org-document "Recursively render an Org-mode document to Hiccup." [doc] - (let [rendered (org-element-recursive (gather-footnotes doc))] + (let [rendered (-> doc gather-footnotes render-tex-snippets + org-element-recursive)] [:html [:head [:title "org document"] @@ -126,6 +126,30 @@ element/footnotes-section?] sp/NONE)))) +(defn- render-tex-snippets [doc] + (let [promises (atom []) + r (->> doc (sp/transform + [element/postorder-walker + #(element/of-type? + % "latex-fragment" "latex-environment")] + (fn [node] + (let [p (promise)] + (swap! promises #(conj % {:promise p :node node})) + (assoc node ::rendered p)))))] + (future + (println "run") + (prn (count @promises)) + (Thread/sleep (* 1000 1)) + (doseq [[ix {:keys [promise node]}] + (map (fn [i x] [i x]) (range) @promises)] + (printf "what %d\n" ix) + (flush) + (deliver promise (str ix)))) + r)) + +(comment + (render-tex-snippets doc)) + (defn- render-pprint @@ -270,12 +294,14 @@ (defmethod org-element "latex-fragment" [{:keys [contents value] :as e}] (let [display? (str/starts-with? value "\\[")] + [:span.latex-fragment (-> e ::rendered (deref 2000 "«timed out»"))] #_ - (render-pprint (assoc e :display? display?)) [:span.latex-fragment (hiccup/raw (tex/render contents :display? display?))])) -(defmethod org-element "latex-environment" [{:keys [value]}] +(defmethod org-element "latex-environment" [{:keys [value] :as e}] + [:span.latex-fragment (-> e ::rendered (deref 2000 "«timed out»"))] + #_ [:span.latex-fragment (hiccup/raw (tex/render value :display? true))]) @@ -319,4 +345,3 @@ [:span.org-link.external [:a {:href raw-link} (or (seq children) raw-link)]]) - diff --git a/doerg/src/net/deertopia/doerg/repl.clj b/doerg/src/net/deertopia/doerg/repl.clj index 56dfe43..8a03a0b 100644 --- a/doerg/src/net/deertopia/doerg/repl.clj +++ b/doerg/src/net/deertopia/doerg/repl.clj @@ -14,7 +14,9 @@ "/home/msyds/org/20250919114912-homepage.org" #_ "/home/msyds/org/20251111182118-path_induction.org" - "/home/msyds/org/20250512144715-natural_transformation_category_theory.org") + #_ + "/home/msyds/org/20250512144715-natural_transformation_category_theory.org" + "/home/msyds/org/20251021155921-path_action.org") (defn- force-create-sym-link [path target] (fs/delete-if-exists path)