summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--crates/typst/src/model/figure.rs10
-rw-r--r--tests/typ/bugs/3586-figure-caption-separator.typ7
2 files changed, 16 insertions, 1 deletions
diff --git a/crates/typst/src/model/figure.rs b/crates/typst/src/model/figure.rs
index b5698fac..1f8c5759 100644
--- a/crates/typst/src/model/figure.rs
+++ b/crates/typst/src/model/figure.rs
@@ -437,7 +437,7 @@ impl Outlinable for Packed<FigureElem> {
/// caption: [A rectangle],
/// )
/// ```
-#[elem(name = "caption", Show)]
+#[elem(name = "caption", Synthesize, Show)]
pub struct FigureCaption {
/// The caption's position in the figure. Either `{top}` or `{bottom}`.
///
@@ -546,6 +546,14 @@ impl FigureCaption {
}
}
+impl Synthesize for Packed<FigureCaption> {
+ fn synthesize(&mut self, _: &mut Engine, styles: StyleChain) -> SourceResult<()> {
+ let elem = self.as_mut();
+ elem.push_separator(Smart::Custom(elem.get_separator(styles)));
+ Ok(())
+ }
+}
+
impl Show for Packed<FigureCaption> {
#[typst_macros::time(name = "figure.caption", span = self.span())]
fn show(&self, engine: &mut Engine, styles: StyleChain) -> SourceResult<Content> {
diff --git a/tests/typ/bugs/3586-figure-caption-separator.typ b/tests/typ/bugs/3586-figure-caption-separator.typ
new file mode 100644
index 00000000..ee992c50
--- /dev/null
+++ b/tests/typ/bugs/3586-figure-caption-separator.typ
@@ -0,0 +1,7 @@
+// Test that figure caption separator is synthesized correctly.
+// https://github.com/typst/typst/issues/3586
+// Ref: false
+
+---
+#show figure.caption: c => test(c.separator, [#": "])
+#figure(table[], caption: [This is a test caption])