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