diff --git a/doerg/src/net/deertopia/doerg/tex.clj b/doerg/src/net/deertopia/doerg/tex.clj index bb67715..749ff2d 100644 --- a/doerg/src/net/deertopia/doerg/tex.clj +++ b/doerg/src/net/deertopia/doerg/tex.clj @@ -45,27 +45,34 @@ (-> r (assoc ::out out)))) +(defn- parse-tightpage [xelatex-out] + (->> (re-find tightpage-regexp xelatex-out) + (drop 1) + (map parse-long))) + +(defn- snippet-dimensions [[tp1 tp2 tp3 tp4] [d1 d2 d3]] + (let [depth (/ (- d2 tp2) scale-divisor font-size)] + {:depth depth + :height (+ depth + (/ (+ d1 tp4) + scale-divisor + font-size)) + :width (/ (+ d3 tp3 (- tp2)) + scale-divisor + font-size)})) + (defn- parse-xelatex-output [out] - (let [[tp1 tp2 tp3 tp4] (->> (re-find tightpage-regexp out) - (drop 1) - (map parse-long)) + (let [tightpage-info (parse-tightpage out) m-start (re-matcher preview-start-regexp out) m-end (re-matcher preview-end-regexp out)] (loop [acc []] (if-some [[_ snippet-ix] (re-find m-start)] (let [r (re-find m-end) [_ snippet-ix* _ _ _] r - [d1 d2 d3] (->> r (drop 2) (map parse-long)) - depth (/ (- d2 tp2) scale-divisor font-size)] + dimensional-info (->> r (drop 2) (map parse-long))] (assert (= snippet-ix snippet-ix*)) - (recur (conj acc {:depth depth - :height (+ depth - (/ (+ d1 tp4) - scale-divisor - font-size)) - :width (/ (+ d3 tp3 (- tp2)) - scale-divisor - font-size)}))) + (recur (conj acc (merge (snippet-dimensions + tightpage-info dimensional-info))))) acc)))) (defn- invoke-xelatex [& {:keys [file output-dir]}]