~jonsterling/forester-devel

[Breaking] Don't add spurious whitespace in TeX-like rendering v1 SUPERSEDED

Jon Sterling: 1
 [Breaking] Don't add spurious whitespace in TeX-like rendering

 3 files changed, 17 insertions(+), 34 deletions(-)
Export patchset (mbox)
How do I use this?

Copy & paste the following snippet into your terminal to import this patchset into git:

curl -s https://lists.sr.ht/~jonsterling/forester-devel/patches/53232/mbox | git am -3
Learn more about email & git

[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)