[PATCH] [Breaking] Don't add spurious whitespace in TeX-like rendering
Export this patch
This patch first renames the badly named Render_verbatim to
Render_TeX_like. Then it changes the behavior to (1) not add spurious
whitespace during rendering, and (2) render any #{} or ##{} block as a
TeX group.
This patch pertains to the discussion here: https://lists.sr.ht/~jonsterling/forester-discuss/%3CB051B670-D3A9-4317-AFA1-675405EB171F@jonmsterling.com%3E
---
...{Render_verbatim.ml => Render_TeX_like.ml} | 41 ++++++-------------
...ender_verbatim.mli => Render_TeX_like.mli} | 2 +-
lib/render/Render_dream.ml | 8 ++--
3 files changed, 17 insertions(+), 34 deletions(-)
rename lib/render/{Render_verbatim.ml => Render_TeX_like.ml} (51%)
rename lib/render/{Render_verbatim.mli => Render_TeX_like.mli} (75%)
diff --git a/lib/render/Render_verbatim.ml b/lib/render/Render_TeX_like.ml
similarity index 51%
rename from lib/render/Render_verbatim.ml
rename to lib/render/Render_TeX_like.ml
index e47b9b1..b46c93b 100644
--- a/lib/render/Render_verbatim.ml
+++ b/lib/render/Render_TeX_like.ml
@@ -1,7 +1,6 @@
open Prelude
open Core
-
module Printer =
struct
module P0 =
@@ -24,38 +23,22 @@ let rec render_node ~cfg : Sem.node Range.located -> Printer.t =
match located.value with
| Sem.Text txt | Sem.Verbatim txt ->
Printer.text txt
- | Sem.Math (_, xs) ->
- render ~cfg xs
+ | Sem.Math (mode, xs) ->
+ Printer.seq [
+ Printer.text "{";
+ render ~cfg xs;
+ Printer.text "}"
+ ]
| Sem.Xml_tag (_, _, body) ->
render ~cfg body
| Sem.If_tex (x , y) ->
if cfg.tex then render ~cfg x else render ~cfg y
| Sem.Unresolved name ->
- render_unresolved ~cfg name []
+ Printer.seq
+ [Printer.text "\\";
+ Printer.text name]
| node ->
- Reporter.fatalf ?loc:located.loc Type_error "Render_verbatim: cannot render this kind of object"
-
+ Reporter.fatalf ?loc:located.loc Type_error "Render_TeX_like: cannot render this kind of object"
-and render_unresolved ~cfg name body =
- Printer.seq
- [Printer.text "\\";
- Printer.text name;
- render_arg ~cfg Braces body]
-
-and render ~cfg ?(sep = Printer.space) xs =
- Printer.iter ~sep (render_node ~cfg) xs
-
-and render_arg ~cfg delim (arg : Sem.t) : Printer.t =
- match arg with
- | [] -> Printer.nil
- | _ ->
- let l, r =
- match delim with
- | Braces -> "{", "}"
- | Squares -> "[", "]"
- | Parens -> "(", ")"
- in
- Printer.seq
- [Printer.text l;
- render ~cfg arg;
- Printer.text r]
+and render ~cfg =
+ Printer.iter (render_node ~cfg)
diff --git a/lib/render/Render_verbatim.mli b/lib/render/Render_TeX_like.mli
similarity index 75%
rename from lib/render/Render_verbatim.mli
rename to lib/render/Render_TeX_like.mli
index 44e713e..fd6f3ba 100644
--- a/lib/render/Render_verbatim.mli
+++ b/lib/render/Render_TeX_like.mli
@@ -10,4 +10,4 @@ end
type cfg = {tex : bool}
-val render : cfg:cfg -> ?sep:Printer.t -> Sem.t -> Printer.t
+val render : cfg:cfg -> Sem.t -> Printer.t
diff --git a/lib/render/Render_dream.ml b/lib/render/Render_dream.ml
index cbd57e7..85490c3 100644
--- a/lib/render/Render_dream.ml
+++ b/lib/render/Render_dream.ml
@@ -101,9 +101,9 @@ let rec render_located (located : Sem.node Range.located) =
| Sem.Math (mode, body) ->
let rendered =
- let module TP = Render_verbatim.Printer in
+ let module TP = Render_TeX_like.Printer in
Str.global_replace (Str.regexp "\n") " " @@
- TP.contents @@ Render_verbatim.render ~cfg:{tex = false} body
+ TP.contents @@ Render_TeX_like.render ~cfg:{tex = false} body
in
F.tex [
match mode with
@@ -189,8 +189,8 @@ let rec render_located (located : Sem.node Range.located) =
| Sem.Embed_tex {preamble; source} ->
let as_tex x =
- Render_verbatim.Printer.contents @@
- Render_verbatim.render ~cfg:{tex = true} x
+ Render_TeX_like.Printer.contents @@
+ Render_TeX_like.render ~cfg:{tex = true} x
in
let preamble = as_tex preamble in
let source = as_tex source in
--
2.39.3 (Apple Git-146)