From e20dcf591d5540075b82e68821646ae84acf2551 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Madeleine=20Sydney=20=C5=9Alaga?= Date: Tue, 10 Mar 2026 13:59:00 -0600 Subject: [PATCH] --- doerg/src/net/deertopia/doerg/element.clj | 43 ++++++++++++++++------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/doerg/src/net/deertopia/doerg/element.clj b/doerg/src/net/deertopia/doerg/element.clj index 00494b5..82e6dd8 100644 --- a/doerg/src/net/deertopia/doerg/element.clj +++ b/doerg/src/net/deertopia/doerg/element.clj @@ -231,15 +231,25 @@ (recur next-loc-read next-loc-write)))) wa-loc)) -(defn separated-by-explicit-paragraph-break? [e₁ e₂] - (= (-> e₁ :position :end :line inc) - (-> e₂ :position :start :line inc))) +(defn separated-by-explicit-paragraph-break? + "Returh truthy if each successive pair of elements is separated by + at least one explicit paragraph break; i.e. a blank line." + [& elements] + (match elements + [e₁ e₂ & es] + (and (< (-> e₁ :position :end :line) + (-> e₂ :position :start :line)) + (recur es)) + :else true)) -(defn swallow [predator prey] - (assert (greater-element? predator)) - (-> predator - (update :children #(conj % prey)) - (assoc-in [:position :end] (-> prey :position :end)))) +(defn swallow + ([predator prey] + (assert (greater-element? predator)) + (-> predator + (update :children #(conj % prey)) + (assoc-in [:position :end] (-> prey :position :end)))) + ([predator prey & more-prey] + (reduce swallow predator (cons prey more-prey)))) (comment (-> [1 2 3 4] @@ -255,13 +265,20 @@ (loop [acc [] cs (vec children)] (match cs - [(para :guard #(of-type? % "paragraph")) - (tex :guard #(of-type? % "latex-environment")) - & rest] + ([(para₁ :guard #(of-type? % "paragraph")) + (tex :guard #(of-type? % "latex-environment")) + (para₂ :guard #(of-type? % "paragraph")) + & rest] + :guard #(apply separated-by-explicit-paragraph-break? %)) + (recur (conj acc (swallow para₁ tex para₂)) rest) + ([(para :guard #(of-type? % "paragraph")) + (tex :guard #(of-type? % "latex-environment")) + & rest] + :guard #(apply separated-by-explicit-paragraph-break? %)) (recur (conj acc (swallow para tex)) rest) - [] acc [c & rest] - (recur (conj acc c) rest)))) + (recur (conj acc c) rest) + [] acc))) doc)] @r))