diff --git a/crates/typst-html/src/encode.rs b/crates/typst-html/src/encode.rs index eb25ab1ec..2bfa78a72 100644 --- a/crates/typst-html/src/encode.rs +++ b/crates/typst-html/src/encode.rs @@ -89,6 +89,9 @@ fn write_element(w: &mut Writer, element: &HtmlElement) -> SourceResult<()> { w.buf.push('>'); if tag::is_void(element.tag) { + if !element.children.is_empty() { + bail!(element.span, "HTML void elements must not have children"); + } return Ok(()); } diff --git a/crates/typst-html/src/lib.rs b/crates/typst-html/src/lib.rs index 7d78a5da4..703948f66 100644 --- a/crates/typst-html/src/lib.rs +++ b/crates/typst-html/src/lib.rs @@ -180,9 +180,6 @@ fn handle( if let Some(body) = elem.body(styles) { children = html_fragment(engine, body, locator.next(&elem.span()), styles)?; } - if tag::is_void(elem.tag) && !children.is_empty() { - bail!(elem.span(), "HTML void elements may not have children"); - } let element = HtmlElement { tag: elem.tag, attrs: elem.attrs(styles).clone(), diff --git a/tests/suite/html/syntax.typ b/tests/suite/html/syntax.typ index af671ef58..c95fa06ed 100644 --- a/tests/suite/html/syntax.typ +++ b/tests/suite/html/syntax.typ @@ -1,3 +1,7 @@ --- html-non-char html --- // Error: 1-9 the character `"\u{fdd0}"` cannot be encoded in HTML \u{fdd0} + +--- html-void-element-with-children html --- +// Error: 2-27 HTML void elements must not have children +#html.elem("img", [Hello])