diff --git a/doerg/src/net/deertopia/doerg/tex.clj b/doerg/src/net/deertopia/doerg/tex.clj index c34b163..bb67715 100644 --- a/doerg/src/net/deertopia/doerg/tex.clj +++ b/doerg/src/net/deertopia/doerg/tex.clj @@ -18,7 +18,7 @@ #"Preview: Tightpage (-?\d+) *(-?\d+) *(-?\d+) *(-?\d+)") (def ^:private preview-start-regexp - #"^! Preview: Snippet (\d+) started.") + #"! Preview: Snippet (\d+) started.") (def ^:private preview-end-regexp #"(?:^Preview: Tightpage.*$)?\n! Preview: Snippet (\d+) ended.\((\d+)\+(\d+)x(\d+)\)") @@ -45,29 +45,34 @@ (-> r (assoc ::out out)))) -(defn- snippetwise [xelatex-out]) +(defn- parse-xelatex-output [out] + (let [[tp1 tp2 tp3 tp4] (->> (re-find tightpage-regexp out) + (drop 1) + (map parse-long)) + 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)] + (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)}))) + acc)))) (defn- invoke-xelatex [& {:keys [file output-dir]}] - (let [{out ::out} (invoke - {:dir output-dir} - "xelatex" "-no-pdf" "-interaction" "nonstopmode" - "-output-directory" output-dir file) - [tp1 tp2 tp3 tp4] (->> (re-find tightpage-regexp out) - (drop 1) - (map parse-long))] - (->> (re-seq preview-end-regexp out) - (map #(let [[d1 d2 d3] (map parse-long (drop 2 %)) - 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)}))))) + (invoke + {:dir output-dir} + "xelatex" "-no-pdf" "-interaction" "nonstopmode" + "-output-directory" output-dir file)) ;; dvisvgm --page=1- --optimize --clipjoin --relative --no-fonts -v3 --message='processing page {?pageno}: output written to {?svgpath}' --bbox=preview -o %B-%%9p.svg %f