Content models

Co-Authored-By: Martin Haug <3874949+reknih@users.noreply.github.com>
This commit is contained in:
Laurenz 2025-01-23 22:56:15 +01:00
parent 2d33393df9
commit 74bf29365a

View File

@ -600,6 +600,314 @@ pub mod tag {
pub fn is_escapable_raw(tag: HtmlTag) -> bool {
matches!(tag, self::textarea | self::title)
}
// Content models
/// Whether an element is considered metadata.
pub fn is_metadata(tag: HtmlTag) -> bool {
matches!(
tag,
self::base
| self::link
| self::meta
| self::noscript
| self::script
| self::style
| self::template
| self::title
)
}
/// Wether an element is considered flow content.
pub fn is_flow_content(tag: HtmlTag) -> bool {
matches!(
tag,
self::a
| self::abbr
| self::address
| self::area
| self::article
| self::aside
| self::audio
| self::b
| self::bdi
| self::bdo
| self::blockquote
| self::br
| self::button
| self::canvas
| self::cite
| self::code
| self::data
| self::datalist
| self::del
| self::details
| self::dfn
| self::dialog
| self::div
| self::dl
| self::em
| self::embed
| self::fieldset
| self::figure
| self::footer
| self::form
| self::h1
| self::h2
| self::h3
| self::h4
| self::h5
| self::h6
| self::header
| self::hgroup
| self::hr
| self::i
| self::iframe
| self::img
| self::input
| self::ins
| self::kbd
| self::label
| self::link
| self::main
| self::map
| self::mark
| self::menu
| self::meta
| self::meter
| self::nav
| self::noscript
| self::object
| self::ol
| self::output
| self::p
| self::picture
| self::pre
| self::progress
| self::q
| self::ruby
| self::s
| self::samp
| self::script
| self::search
| self::section
| self::select
| self::slot
| self::small
| self::span
| self::strong
| self::sub
| self::sup
| self::table
| self::template
| self::textarea
| self::time
| self::u
| self::ul
| self::var
| self::video
| self::wbr
)
}
/// Whether an element is considered sectioning content.
pub fn is_sectioning_content(tag: HtmlTag) -> bool {
matches!(tag, self::article | self::aside | self::nav | self::section)
}
/// Whether an element is considered heading content.
pub fn is_heading_content(tag: HtmlTag) -> bool {
matches!(
tag,
self::h1
| self::h2
| self::h3
| self::h4
| self::h5
| self::h6
| self::hgroup
)
}
/// Whether an element is considered phrasing content.
pub fn is_phrasing_content(tag: HtmlTag) -> bool {
matches!(
tag,
self::a
| self::abbr
| self::area
| self::audio
| self::b
| self::bdi
| self::bdo
| self::br
| self::button
| self::canvas
| self::cite
| self::code
| self::data
| self::datalist
| self::del
| self::dfn
| self::em
| self::embed
| self::i
| self::iframe
| self::img
| self::input
| self::ins
| self::kbd
| self::label
| self::link
| self::map
| self::mark
| self::meta
| self::meter
| self::noscript
| self::object
| self::output
| self::picture
| self::progress
| self::q
| self::ruby
| self::s
| self::samp
| self::script
| self::select
| self::slot
| self::small
| self::span
| self::strong
| self::sub
| self::sup
| self::template
| self::textarea
| self::time
| self::u
| self::var
| self::video
| self::wbr
)
}
/// Whether an element is considered embedded content.
pub fn is_embedded_content(tag: HtmlTag) -> bool {
matches!(
tag,
self::audio
| self::canvas
| self::embed
| self::iframe
| self::img
| self::object
| self::picture
| self::video
)
}
/// Whether an element is considered interactive content.
pub fn is_interactive_content(tag: HtmlTag) -> bool {
matches!(
tag,
self::a
| self::audio
| self::button
| self::details
| self::embed
| self::iframe
| self::img
| self::input
| self::label
| self::select
| self::textarea
| self::video
)
}
/// Whether an element is considered palpable content.
pub fn is_palpable_content(tag: HtmlTag) -> bool {
matches!(
tag,
self::a
| self::abbr
| self::address
| self::article
| self::aside
| self::audio
| self::b
| self::bdi
| self::bdo
| self::blockquote
| self::button
| self::canvas
| self::cite
| self::code
| self::data
| self::del
| self::details
| self::dfn
| self::div
| self::dl
| self::em
| self::embed
| self::fieldset
| self::figure
| self::footer
| self::form
| self::h1
| self::h2
| self::h3
| self::h4
| self::h5
| self::h6
| self::header
| self::hgroup
| self::i
| self::iframe
| self::img
| self::input
| self::ins
| self::kbd
| self::label
| self::main
| self::map
| self::mark
| self::menu
| self::meter
| self::nav
| self::object
| self::ol
| self::output
| self::p
| self::picture
| self::pre
| self::progress
| self::q
| self::ruby
| self::s
| self::samp
| self::search
| self::section
| self::select
| self::small
| self::span
| self::strong
| self::sub
| self::sup
| self::table
| self::textarea
| self::time
| self::u
| self::ul
| self::var
| self::video
)
}
/// Whether an element is considered a script-supporting element.
pub fn is_script_supporting_content(tag: HtmlTag) -> bool {
matches!(tag, self::script | self::template)
}
}
/// Predefined constants for HTML attributes.