use super::entity::DecodedEntity;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(u8)]
pub enum QuoteType {
NoValue = 0,
Unquoted = 1,
Single = 2,
Double = 3,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq, Hash)]
#[repr(u8)]
pub enum Namespace {
#[default]
Html = 0,
Svg = 1,
MathMl = 2,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub enum LexMode {
#[default]
Normal,
Verbatim,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum LexErrorCode {
AbruptClosingOfEmptyComment,
EndTagWithAttributes,
EndTagWithTrailingSolidus,
EofBeforeTagName,
EofInCdata,
EofInComment,
EofInTag,
IncorrectlyClosedComment,
IncorrectlyOpenedComment,
InvalidFirstCharacterOfTagName,
MissingAttributeValue,
MissingDynamicDirectiveArgumentEnd,
MissingEndTagName,
MissingInterpolationEnd,
MissingWhitespaceBetweenAttributes,
NestedComment,
UnexpectedCharacterInAttributeName,
UnexpectedCharacterInUnquotedAttributeValue,
UnexpectedEqualsSignBeforeAttributeName,
UnexpectedQuestionMarkInsteadOfTagName,
UnexpectedSolidusInTag,
}
pub trait Sink {
fn on_text(&mut self, start: usize, end: usize);
fn on_text_entity(&mut self, ch: char, start: usize, end: usize);
fn on_text_entity_value(&mut self, value: DecodedEntity, start: usize, end: usize) {
value.for_each(|ch| self.on_text_entity(ch, start, end));
}
fn on_interpolation(&mut self, start: usize, end: usize);
fn on_raw_interpolation(&mut self, start: usize, end: usize) {
self.on_interpolation(start, end);
}
fn on_open_tag_name(&mut self, start: usize, end: usize);
fn on_open_tag_end(&mut self, end: usize);
fn on_self_closing_tag(&mut self, end: usize);
fn on_close_tag(&mut self, start: usize, end: usize);
fn on_attrib_data(&mut self, start: usize, end: usize);
fn on_attrib_entity(&mut self, ch: char, start: usize, end: usize);
fn on_attrib_entity_value(&mut self, value: DecodedEntity, start: usize, end: usize) {
value.for_each(|ch| self.on_attrib_entity(ch, start, end));
}
fn on_attrib_end(&mut self, quote: QuoteType, end: usize);
fn on_attrib_name(&mut self, start: usize, end: usize);
fn on_attrib_name_end(&mut self, end: usize);
fn on_dir_name(&mut self, start: usize, end: usize);
fn on_dir_arg(&mut self, start: usize, end: usize);
fn on_dir_modifier(&mut self, start: usize, end: usize);
fn on_comment(&mut self, start: usize, end: usize);
fn on_in_tag_comment(&mut self, _start: usize, _end: usize) {}
fn on_cdata(&mut self, start: usize, end: usize);
fn on_processing_instruction(&mut self, start: usize, end: usize);
fn on_end(&mut self);
fn on_error(&mut self, code: LexErrorCode, index: usize);
fn mode(&self) -> LexMode {
LexMode::Normal
}
}