From 2492ba42ed260afa67381ffb1a2c599d17b357a1 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Thu, 23 Jan 2025 17:54:08 +0100 Subject: [PATCH] Quote body is not a paragraph --- crates/typst-library/src/model/quote.rs | 19 +++++++++++++------ tests/ref/html/quote-attribution-link.html | 2 +- tests/ref/html/quote-plato.html | 4 ++-- tests/ref/quote-par.png | Bin 0 -> 2792 bytes tests/suite/model/quote.typ | 11 +++++++++++ 5 files changed, 27 insertions(+), 9 deletions(-) create mode 100644 tests/ref/quote-par.png diff --git a/crates/typst-library/src/model/quote.rs b/crates/typst-library/src/model/quote.rs index 79e9b4e36..919ab12c7 100644 --- a/crates/typst-library/src/model/quote.rs +++ b/crates/typst-library/src/model/quote.rs @@ -212,17 +212,24 @@ impl Show for Packed { .pack() .spanned(self.span()), }; - let attribution = - [TextElem::packed('—'), SpaceElem::shared().clone(), attribution]; + let attribution = Content::sequence([ + TextElem::packed('—'), + SpaceElem::shared().clone(), + attribution, + ]); - if !html { - // Use v(0.9em, weak: true) to bring the attribution closer - // to the quote. + if html { + realized += attribution; + } else { + // Bring the attribution a bit closer to the quote. let gap = Spacing::Rel(Em::new(0.9).into()); let v = VElem::new(gap).with_weak(true).pack(); realized += v; + realized += BlockElem::new() + .with_body(Some(BlockBody::Content(attribution))) + .pack() + .aligned(Alignment::END); } - realized += Content::sequence(attribution).aligned(Alignment::END); } if !html { diff --git a/tests/ref/html/quote-attribution-link.html b/tests/ref/html/quote-attribution-link.html index 753807db2..c12d2ae2d 100644 --- a/tests/ref/html/quote-attribution-link.html +++ b/tests/ref/html/quote-attribution-link.html @@ -5,7 +5,7 @@ -
Compose papers faster
+
Compose papers faster

typst.com

diff --git a/tests/ref/html/quote-plato.html b/tests/ref/html/quote-plato.html index f516adc29..039835082 100644 --- a/tests/ref/html/quote-plato.html +++ b/tests/ref/html/quote-plato.html @@ -5,9 +5,9 @@ -
… ἔοικα γοῦν τούτου γε σμικρῷ τινι αὐτῷ τούτῳ σοφώτερος εἶναι, ὅτι ἃ μὴ οἶδα οὐδὲ οἴομαι εἰδέναι.
+
… ἔοικα γοῦν τούτου γε σμικρῷ τινι αὐτῷ τούτῳ σοφώτερος εἶναι, ὅτι ἃ μὴ οἶδα οὐδὲ οἴομαι εἰδέναι.

— Plato

-
… I seem, then, in just this little thing to be wiser than this man at any rate, that what I do not know I do not think I know either.
+
… I seem, then, in just this little thing to be wiser than this man at any rate, that what I do not know I do not think I know either.

— from the Henry Cary literal translation of 1897

diff --git a/tests/ref/quote-par.png b/tests/ref/quote-par.png new file mode 100644 index 0000000000000000000000000000000000000000..89d15ddf9af284c95b5fd5dfd8d922f03166ede3 GIT binary patch literal 2792 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 uG6l2(S^=$00j+>mrhryJE1;GAFZ&xQWdS