pub(crate) fn is_namechar(ch: &char) -> bool {
if is_namestartchar(ch) {
true
} else {
matches!(ch,
'.'
| '-'
| '0'..='9'
| '\u{B7}'
| '\u{0300}'..='\u{036F}'
| '\u{203F}'..='\u{2040}'
)
}
}
pub(crate) fn is_ncnamechar(ch: &char) -> bool {
if is_ncnamestartchar(ch) {
true
} else {
matches!(ch,
'.'
| '-'
| '0'..='9'
| '\u{B7}'
| '\u{0300}'..='\u{036F}'
| '\u{203F}'..='\u{2040}'
)
}
}
pub(crate) fn is_namestartchar(ch: &char) -> bool {
match ch {
':' => true,
_ => is_ncnamestartchar(ch),
}
}
pub(crate) fn is_ncnamestartchar(ch: &char) -> bool {
let result = matches!(ch,
'\u{0041}'..='\u{005A}' | '\u{005F}' | '\u{0061}'..='\u{007A}' | '\u{00C0}'..='\u{00D6}' | '\u{00D8}'..='\u{00F6}' | '\u{00F8}'..='\u{02FF}' | '\u{0370}'..='\u{037D}' | '\u{037F}'..='\u{1FFF}' | '\u{200C}'..='\u{200D}' | '\u{2070}'..='\u{218F}' | '\u{2C00}'..='\u{2FEF}' | '\u{3001}'..='\u{D7FF}' | '\u{F900}'..='\u{FDCF}' | '\u{FDF0}'..='\u{FFFD}' | '\u{10000}'..='\u{EFFFF}' );
result
}
pub fn is_char10(ch: &char) -> bool {
matches!(ch,
'\u{0009}' | '\u{000A}' | '\u{000D}' | '\u{0020}'..='\u{D7FF}' | '\u{E000}'..='\u{FFFD}' | '\u{10000}'..='\u{10FFFF}' )
}
pub fn is_char11(ch: &char) -> bool {
matches!(ch,
'\u{0001}'..='\u{D7FF}' | '\u{E000}'..='\u{FFFD}' | '\u{10000}'..='\u{10FFFF}' )
}
pub fn is_restricted_char11(ch: &char) -> bool {
matches!(ch,
'\u{0001}'..='\u{0008}' | '\u{000B}'..='\u{000C}' | '\u{000E}'..='\u{001F}' | '\u{007F}'..='\u{0084}' | '\u{0086}'..='\u{009F}' )
}
pub fn is_unrestricted_char11(ch: &char) -> bool {
is_char11(ch) && !is_restricted_char11(ch)
}
pub(crate) fn is_pubid_charwithapos(ch: &char) -> bool {
match ch {
'\'' => true,
_ => is_pubid_char(ch),
}
}
pub(crate) fn is_pubid_char(ch: &char) -> bool {
matches!(ch,
'\u{0020}' | '\u{000A}' | '\u{000D}' | 'a'..='z'
| 'A'..='Z'
| '0'..='9'
| '-'
| '('
| ')'
| '+'
| ','
| '.'
| '/'
| ':'
| '='
| '?'
| ';'
| '!'
| '*'
| '#'
| '@'
| '$'
| '_'
| '%'
)
}