diff --git a/crates/typst-html/src/convert.rs b/crates/typst-html/src/convert.rs
index def5b0431..e50d104e7 100644
--- a/crates/typst-html/src/convert.rs
+++ b/crates/typst-html/src/convert.rs
@@ -101,7 +101,7 @@ fn handle(
styles.chain(&style),
Region::new(Size::splat(Abs::inf()), Axes::splat(false)),
)?;
- output.push(HtmlNode::Frame(HtmlFrame::new(frame, styles)));
+ output.push(HtmlNode::Frame(HtmlFrame::new(frame, styles, elem.span())));
} else {
engine.sink.warn(warning!(
child.span(),
diff --git a/crates/typst-html/src/dom.rs b/crates/typst-html/src/dom.rs
index 5f40473a0..44b4f9156 100644
--- a/crates/typst-html/src/dom.rs
+++ b/crates/typst-html/src/dom.rs
@@ -338,16 +338,19 @@ pub struct HtmlFrame {
pub id: Option,
/// IDs to assign to destination jump points within the SVG.
pub link_points: EcoVec<(Point, EcoString)>,
+ /// The span from which the frame originated.
+ pub span: Span,
}
impl HtmlFrame {
/// Wraps a laid-out frame.
- pub fn new(inner: Frame, styles: StyleChain) -> Self {
+ pub fn new(inner: Frame, styles: StyleChain, span: Span) -> Self {
Self {
inner,
text_size: styles.resolve(TextElem::size),
id: None,
link_points: EcoVec::new(),
+ span,
}
}
}
diff --git a/crates/typst-html/src/encode.rs b/crates/typst-html/src/encode.rs
index 2d21109c1..35301c107 100644
--- a/crates/typst-html/src/encode.rs
+++ b/crates/typst-html/src/encode.rs
@@ -215,12 +215,9 @@ fn collect_raw_text(element: &HtmlElement) -> SourceResult {
match c {
HtmlNode::Tag(_) => continue,
HtmlNode::Text(text, _) => output.push_str(text),
- HtmlNode::Element(_) | HtmlNode::Frame(_) => {
- let span = match c {
- HtmlNode::Element(child) => child.span,
- _ => element.span,
- };
- bail!(span, "HTML raw text element cannot have non-text children")
+ HtmlNode::Element(HtmlElement { span, .. })
+ | HtmlNode::Frame(HtmlFrame { span, .. }) => {
+ bail!(*span, "HTML raw text element cannot have non-text children")
}
};
}
diff --git a/tests/suite/html/syntax.typ b/tests/suite/html/syntax.typ
index 4bda0c686..85be266e1 100644
--- a/tests/suite/html/syntax.typ
+++ b/tests/suite/html/syntax.typ
@@ -53,8 +53,8 @@
#html.script(html.strong[Hello])
--- html-raw-text-contains-frame html ---
-// Error: 2-29 HTML raw text element cannot have non-text children
-#html.script(html.frame[Ok])
+// Error: 14-31 HTML raw text element cannot have non-text children
+#html.script(html.frame[Hello])
--- html-raw-text-contains-closing-tag html ---
// Error: 2-32 HTML raw text element cannot contain its own closing tag