Support a few MathML tags.

This commit is contained in:
Michael Färber 2025-01-20 10:24:05 +01:00
parent 265df6c29f
commit 7088ae4107
3 changed files with 41 additions and 3 deletions

View File

@ -80,9 +80,13 @@ fn write_element(w: &mut Writer, element: &HtmlElement) -> SourceResult<()> {
w.buf.push('"');
}
if tag::is_self_closing_foreign(element.tag) {
w.buf.push_str(" /");
}
w.buf.push('>');
if tag::is_void(element.tag) {
if tag::is_void(element.tag) || tag::is_self_closing_foreign(element.tag) {
return Ok(());
}

View File

@ -472,6 +472,26 @@ pub mod tag {
wbr
}
pub mod math {
use super::HtmlTag;
tags! {
math
mfrac
mi
mmultiscripts
mprescripts
mrow
msub
msup
munderover
}
pub fn is_self_closing(tag: HtmlTag) -> bool {
matches!(tag, self::mprescripts)
}
}
/// Whether nodes with the tag have the CSS property `display: block` by
/// default.
///
@ -569,8 +589,9 @@ pub mod tag {
)
}
/// Whether this is a void tag whose associated element may not have a
/// children.
/// Whether this is a void tag whose elements may not have children.
///
/// Source: <https://html.spec.whatwg.org/#void-elements>
pub fn is_void(tag: HtmlTag) -> bool {
matches!(
tag,
@ -591,6 +612,18 @@ pub mod tag {
)
}
/// Whether this is a self-closing foreign tag.
///
/// A foreign tag is a tag from the MathML or the SVG namespace
/// <https://html.spec.whatwg.org/#foreign-elements>.
///
/// We use this to determine whether a tag needs to be
/// terminated with `/ >` (foreign elements) instead of just `>`.
/// See <https://html.spec.whatwg.org/#start-tags>.
pub fn is_self_closing_foreign(tag: HtmlTag) -> bool {
math::is_self_closing(tag)
}
/// Whether this is a tag containing raw text.
pub fn is_raw(tag: HtmlTag) -> bool {
matches!(tag, self::script | self::style)

View File

@ -219,6 +219,7 @@ mod exceptions {
"h5",
"h6",
"historical-ligatures",
"mmultiscripts",
"number-clearance",
"number-margin",
"numbering-scope",