pub const fn is_valid_in_tag_name(c: char) -> bool {
c.is_ascii_alphanumeric()
}
pub const fn is_valid_in_attribute_name(c: char) -> bool {
match c {
'\0' | ' ' | '"' | '\'' | '>' | '/' | '=' => false,
c if is_whatwg_control_char(c) => false,
c if is_whatwg_non_char(c) => false,
_ => true,
}
}
pub const fn is_valid_in_attribute_value(c: char) -> bool {
match c {
'&' => false,
'"' => false,
c => is_w3c_text_char(c),
}
}
pub const fn is_valid_in_normal_element_text(c: char) -> bool {
match c {
'&' => false,
'<' => false,
c => is_w3c_text_char(c),
}
}
pub const fn is_w3c_text_char(c: char) -> bool {
match c {
c if is_whatwg_non_char(c) => false,
c if is_whatwg_control_char(c) => c.is_ascii_whitespace(),
_ => true,
}
}
const fn is_whatwg_non_char(c: char) -> bool {
match c {
'\u{fdd0}'..='\u{fdef}' => true,
c if c as u32 & 0xfffe == 0xfffe && c as u32 <= 0x10ffff => true,
_ => false,
}
}
const fn is_whatwg_control_char(c: char) -> bool {
match c {
'\u{00}'..='\u{1f}' => true,
'\u{7f}'..='\u{9f}' => true,
_ => false,
}
}