summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2025-06-26 15:20:22 +0200
committerGitHub <noreply@github.com>2025-06-26 13:20:22 +0000
commit7420ec972ffd6e4893fa24d12992b375da6b11fa (patch)
tree58a9d8e1b26f6199b5227f7c5e219dd9aec8255c
parent5dd5771df03a666fe17930b0b071b06266e5937f (diff)
Fix nested HTML frames (#6509)
-rw-r--r--crates/typst-realize/src/lib.rs18
-rw-r--r--tests/ref/html-frame-in-layout.pngbin0 -> 146 bytes
-rw-r--r--tests/suite/html/frame.typ8
3 files changed, 20 insertions, 6 deletions
diff --git a/crates/typst-realize/src/lib.rs b/crates/typst-realize/src/lib.rs
index 7d2460a8..526f4631 100644
--- a/crates/typst-realize/src/lib.rs
+++ b/crates/typst-realize/src/lib.rs
@@ -18,7 +18,7 @@ use typst_library::foundations::{
SequenceElem, Show, ShowSet, Style, StyleChain, StyledElem, Styles, SymbolElem,
Synthesize, Transformation,
};
-use typst_library::html::{tag, HtmlElem};
+use typst_library::html::{tag, FrameElem, HtmlElem};
use typst_library::introspection::{Locatable, SplitLocator, Tag, TagElem};
use typst_library::layout::{
AlignElem, BoxElem, HElem, InlineElem, PageElem, PagebreakElem, VElem,
@@ -237,9 +237,9 @@ fn visit<'a>(
return Ok(());
}
- // Transformations for math content based on the realization kind. Needs
+ // Transformations for content based on the realization kind. Needs
// to happen before show rules.
- if visit_math_rules(s, content, styles)? {
+ if visit_kind_rules(s, content, styles)? {
return Ok(());
}
@@ -280,9 +280,8 @@ fn visit<'a>(
Ok(())
}
-// Handles special cases for math in normal content and nested equations in
-// math.
-fn visit_math_rules<'a>(
+// Handles transformations based on the realization kind.
+fn visit_kind_rules<'a>(
s: &mut State<'a, '_, '_, '_>,
content: &'a Content,
styles: StyleChain<'a>,
@@ -335,6 +334,13 @@ fn visit_math_rules<'a>(
}
}
+ if !s.kind.is_html() {
+ if let Some(elem) = content.to_packed::<FrameElem>() {
+ visit(s, &elem.body, styles)?;
+ return Ok(true);
+ }
+ }
+
Ok(false)
}
diff --git a/tests/ref/html-frame-in-layout.png b/tests/ref/html-frame-in-layout.png
new file mode 100644
index 00000000..c3382e43
--- /dev/null
+++ b/tests/ref/html-frame-in-layout.png
Binary files differ
diff --git a/tests/suite/html/frame.typ b/tests/suite/html/frame.typ
new file mode 100644
index 00000000..711933d7
--- /dev/null
+++ b/tests/suite/html/frame.typ
@@ -0,0 +1,8 @@
+// No proper HTML tests here yet because we don't want to test SVG export just
+// yet. We'll definitely add tests at some point.
+
+--- html-frame-in-layout ---
+// Ensure that HTML frames are transparent in layout. This is less important for
+// actual paged export than for _nested_ HTML frames, which take the same code
+// path.
+#html.frame[A]