This commit is contained in:
2026-02-25 09:48:33 -07:00
parent fd8354f398
commit dc31f02b30

View File

@@ -18,7 +18,7 @@
#"Preview: Tightpage (-?\d+) *(-?\d+) *(-?\d+) *(-?\d+)") #"Preview: Tightpage (-?\d+) *(-?\d+) *(-?\d+) *(-?\d+)")
(def ^:private preview-start-regexp (def ^:private preview-start-regexp
#"^! Preview: Snippet (\d+) started.") #"! Preview: Snippet (\d+) started.")
(def ^:private preview-end-regexp (def ^:private preview-end-regexp
#"(?:^Preview: Tightpage.*$)?\n! Preview: Snippet (\d+) ended.\((\d+)\+(\d+)x(\d+)\)") #"(?:^Preview: Tightpage.*$)?\n! Preview: Snippet (\d+) ended.\((\d+)\+(\d+)x(\d+)\)")
@@ -45,29 +45,34 @@
(-> r (-> r
(assoc ::out out)))) (assoc ::out out))))
(defn- snippetwise [xelatex-out]) (defn- parse-xelatex-output [out]
(let [[tp1 tp2 tp3 tp4] (->> (re-find tightpage-regexp out)
(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) (drop 1)
(map parse-long))] (map parse-long))
(->> (re-seq preview-end-regexp out) m-start (re-matcher preview-start-regexp out)
(map #(let [[d1 d2 d3] (map parse-long (drop 2 %)) m-end (re-matcher preview-end-regexp out)]
depth (/ (- d2 tp2) (loop [acc []]
scale-divisor (if-some [[_ snippet-ix] (re-find m-start)]
font-size)] (let [r (re-find m-end)
{:depth depth [_ 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 :height (+ depth
(/ (+ d1 tp4) (/ (+ d1 tp4)
scale-divisor scale-divisor
font-size)) font-size))
:width (/ (+ d3 tp3 (- tp2)) :width (/ (+ d3 tp3 (- tp2))
scale-divisor scale-divisor
font-size)}))))) font-size)})))
acc))))
(defn- invoke-xelatex [& {:keys [file output-dir]}]
(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 ;; dvisvgm --page=1- --optimize --clipjoin --relative --no-fonts -v3 --message='processing page {?pageno}: output written to {?svgpath}' --bbox=preview -o %B-%%9p.svg %f