From 176b070c779ef8aa4515c8ff062b17ca9114fd3f Mon Sep 17 00:00:00 2001 From: Laurenz Date: Fri, 24 Jan 2025 13:31:03 +0100 Subject: [PATCH] Fix space collapsing for explicit paragraphs (#5749) --- crates/typst-realize/src/lib.rs | 4 +-- tests/ref/par-contains-block.png | Bin 426 -> 423 bytes tests/ref/par-contains-parbreak.png | Bin 426 -> 423 bytes tests/ref/par-explicit-trim-space.png | Bin 0 -> 215 bytes tests/ref/par-show-children.png | Bin 0 -> 920 bytes tests/ref/par-show-styles.png | Bin 0 -> 471 bytes tests/ref/par-show.png | Bin 932 -> 0 bytes tests/suite/model/par.typ | 37 +++++++++++++++++++++----- 8 files changed, 32 insertions(+), 9 deletions(-) create mode 100644 tests/ref/par-explicit-trim-space.png create mode 100644 tests/ref/par-show-children.png create mode 100644 tests/ref/par-show-styles.png delete mode 100644 tests/ref/par-show.png diff --git a/crates/typst-realize/src/lib.rs b/crates/typst-realize/src/lib.rs index 754e89aac..50685a962 100644 --- a/crates/typst-realize/src/lib.rs +++ b/crates/typst-realize/src/lib.rs @@ -729,8 +729,8 @@ fn finish(s: &mut State) -> SourceResult<()> { } })?; - // In math, spaces are top-level. - if let RealizationKind::Math = s.kind { + // In paragraph and math realization, spaces are top-level. + if matches!(s.kind, RealizationKind::LayoutPar | RealizationKind::Math) { collapse_spaces(&mut s.sink, 0); } diff --git a/tests/ref/par-contains-block.png b/tests/ref/par-contains-block.png index f4bd071f62fe2e7ee6eee07dff9f8d71301dbbc1..27ca0cf6b0cb79a4f2fc573d20054596bd009117 100644 GIT binary patch delta 397 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 N002ovPDHLkV1lSL(j@=@ literal 0 HcmV?d00001 diff --git a/tests/ref/par-show.png b/tests/ref/par-show.png deleted file mode 100644 index 1ceb26f71142ca0b0edd35a4da93a41fb252e271..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 932 zcmV;V16%xwP)Bb(Si*|f=W>9Q=hWGlQ@2_q?IkRcgr*pehq95_)yp&#O8 z!X-}Bew`Ny6;v84#T4~KoW!ODq z>=TEFrvsl_Y~rwO6L7+kCJmQOUf?EPVzIpKlZ8W(PyzxIkzhhU356BDV>se$Pes>v z_Lgxmc#U_9k2BVOAZcyz&h$vZ+rCIb_e%o+D;-#SrQogWW?zA~ZotJKWhbTJOpX?l zf*q8vmV!5C`Abvq$3Npvmx5`2!cF&-DqwK-@|IGE6#Vb--e#`$dw@W{=PF3SuC2QQ zTA2zftgynj1^?6dd4!1{E&{}>cCTCJ7lQK!&y2jwoQ(=V_R`}Mi zeOaZg-VE4y6n2^cGZk0d6!@{a7sDo<*q1N`eiHsXhdf-LR=s0xObbL|g%wu#Zij=3 zR5D`mcvK8-IK1Qv#A*T8^xVoB2`TuKjv%l-1E9c3&x91b>-jQ+U)wSOR@8Rbk%IH% zMRlV!V>jUHmc3$d&HSXr|WT$>*O8vx7- zLE@AUyt(EXH%p7Q0G@Qo9WUfWAu#s>3_Jyata(yb{j#e9c)c5Vt`!az3&H#~#S^gB ztpV`8W81gtCn30f(0-6)2mpwLK?okGwMVov6;@c`+nnp3yU8IFH8&&x0000 { - if bibliography.title == revoke { return it } - set bibliography(title: revoke) - let p = counter("p") - par[#p.step() §#context p.display() #it.body] + if it.body.at("children", default: ()).at(0, default: none) == step { + return it + } + par(step + [§#nr ] + it.body) } = A @@ -235,6 +237,27 @@ C #parbreak() D #block[F #parbreak() G] +--- par-show-styles --- +// Variant 2: Prevent recursion by observing a style. +#let revoke = metadata("revoke") +#show par: it => { + if bibliography.title == revoke { return it } + set bibliography(title: revoke) + let p = counter("p") + par[#p.step()§#context p.display() #it.body] +} + += A + +B + +C + +--- par-explicit-trim-space --- +A + +#par[ B ] + --- issue-4278-par-trim-before-equation --- #set par(justify: true) #lorem(6) aa $a = c + b$