diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/tracing_emitter.rs | 102 | 
1 files changed, 51 insertions, 51 deletions
| diff --git a/src/tracing_emitter.rs b/src/tracing_emitter.rs index 408d9b0..76b20bf 100644 --- a/src/tracing_emitter.rs +++ b/src/tracing_emitter.rs @@ -4,24 +4,24 @@ use std::collections::VecDeque;  use std::ops::Range;  use crate::let_else::assume; -use crate::offset::NoopOffset; -use crate::offset::Offset; -use crate::token::{AttrValueSyntax, Comment, Doctype, EndTag, StartTag, Token}; +use crate::token::{AttrValueSyntax, Comment, Doctype, EndTag, StartTag};  use crate::Emitter;  use crate::Error; +type Token = crate::token::Token<usize>; +  /// The default implementation of [`Emitter`], used to produce tokens. -pub struct TracingEmitter<O = NoopOffset> { -    current_token: Option<Token<O>>, +pub struct TracingEmitter { +    current_token: Option<Token>,      current_attribute_name: String, -    current_attr_internal: crate::token::AttrInternal<O>, +    current_attr_internal: crate::token::AttrInternal<usize>,      seen_attributes: BTreeSet<String>, -    emitted_tokens: VecDeque<Token<O>>, -    errors: VecDeque<(Error, Range<O>)>, -    attr_in_end_tag_span: Option<Range<O>>, +    emitted_tokens: VecDeque<Token>, +    errors: VecDeque<(Error, Range<usize>)>, +    attr_in_end_tag_span: Option<Range<usize>>,  } -impl<O: Default> Default for TracingEmitter<O> { +impl Default for TracingEmitter {      fn default() -> Self {          TracingEmitter {              current_token: None, @@ -35,23 +35,23 @@ impl<O: Default> Default for TracingEmitter<O> {      }  } -impl<O> TracingEmitter<O> { +impl TracingEmitter {      /// Removes all encountered tokenizer errors and returns them as an iterator. -    pub fn drain_errors(&mut self) -> impl Iterator<Item = (Error, Range<O>)> + '_ { +    pub fn drain_errors(&mut self) -> impl Iterator<Item = (Error, Range<usize>)> + '_ {          self.errors.drain(0..)      }  } -impl<O> Iterator for TracingEmitter<O> { -    type Item = Token<O>; +impl Iterator for TracingEmitter { +    type Item = Token;      fn next(&mut self) -> Option<Self::Item> {          self.emitted_tokens.pop_back()      }  } -impl<O: Offset> Emitter<O> for TracingEmitter<O> { -    fn report_error(&mut self, error: Error, span: Range<O>) { +impl Emitter<usize> for TracingEmitter { +    fn report_error(&mut self, error: Error, span: Range<usize>) {          self.errors.push_back((error, span));      } @@ -63,21 +63,21 @@ impl<O: Offset> Emitter<O> for TracingEmitter<O> {          self.emit_token(Token::EndOfFile);      } -    fn init_start_tag(&mut self, tag_offset: O, name_offset: O) { +    fn init_start_tag(&mut self, tag_offset: usize, name_offset: usize) {          self.current_token = Some(Token::StartTag(StartTag { -            span: tag_offset..O::default(), +            span: tag_offset..0,              self_closing: false,              name: String::new(),              attributes: Default::default(), -            name_span: name_offset..O::default(), +            name_span: name_offset..0,          }));      } -    fn init_end_tag(&mut self, tag_offset: O, name_offset: O) { +    fn init_end_tag(&mut self, tag_offset: usize, name_offset: usize) {          self.current_token = Some(Token::EndTag(EndTag { -            span: tag_offset..O::default(), +            span: tag_offset..0,              name: String::new(), -            name_span: name_offset..O::default(), +            name_span: name_offset..0,          }));          self.seen_attributes.clear();      } @@ -90,7 +90,7 @@ impl<O: Offset> Emitter<O> for TracingEmitter<O> {          name.push_str(s);      } -    fn terminate_tag_name(&mut self, offset: O) { +    fn terminate_tag_name(&mut self, offset: usize) {          assume!(              Some(                  Token::StartTag(StartTag { name_span, .. }) @@ -101,7 +101,7 @@ impl<O: Offset> Emitter<O> for TracingEmitter<O> {          name_span.end = offset;      } -    fn init_attribute_name(&mut self, offset: O) { +    fn init_attribute_name(&mut self, offset: usize) {          self.flush_current_attribute();          self.current_attr_internal.name_span.start = offset;      } @@ -110,11 +110,11 @@ impl<O: Offset> Emitter<O> for TracingEmitter<O> {          self.current_attribute_name.push_str(s);      } -    fn terminate_attribute_name(&mut self, offset: O) { +    fn terminate_attribute_name(&mut self, offset: usize) {          self.current_attr_internal.name_span.end = offset;      } -    fn init_attribute_value(&mut self, syntax: AttrValueSyntax, offset: O) { +    fn init_attribute_value(&mut self, syntax: AttrValueSyntax, offset: usize) {          self.current_attr_internal.value_span.start = offset;          self.current_attr_internal.value_syntax = Some(syntax);      } @@ -123,11 +123,11 @@ impl<O: Offset> Emitter<O> for TracingEmitter<O> {          self.current_attr_internal.value.push_str(s);      } -    fn terminate_attribute_value(&mut self, offset: O) { +    fn terminate_attribute_value(&mut self, offset: usize) {          self.current_attr_internal.value_span.end = offset;      } -    fn set_self_closing(&mut self, slash_span: Range<O>) { +    fn set_self_closing(&mut self, slash_span: Range<usize>) {          let token = self.current_token.as_mut().unwrap();          match token { @@ -141,7 +141,7 @@ impl<O: Offset> Emitter<O> for TracingEmitter<O> {          }      } -    fn emit_current_tag(&mut self, offset: O) { +    fn emit_current_tag(&mut self, offset: usize) {          self.flush_current_attribute();          let mut token = self.current_token.take().unwrap();          match &mut token { @@ -164,10 +164,10 @@ impl<O: Offset> Emitter<O> for TracingEmitter<O> {          self.emit_token(token);      } -    fn init_comment(&mut self, data_start_offset: O) { +    fn init_comment(&mut self, data_start_offset: usize) {          self.current_token = Some(Token::Comment(Comment {              data: String::new(), -            data_span: data_start_offset..O::default(), +            data_span: data_start_offset..0,          }));      } @@ -176,27 +176,27 @@ impl<O: Offset> Emitter<O> for TracingEmitter<O> {          comment.data.push_str(s);      } -    fn emit_current_comment(&mut self, data_end_offset: O) { +    fn emit_current_comment(&mut self, data_end_offset: usize) {          let mut token = self.current_token.take().unwrap();          assume!(Token::Comment(comment), &mut token);          comment.data_span.end = data_end_offset;          self.emit_token(token);      } -    fn init_doctype(&mut self, offset: O) { +    fn init_doctype(&mut self, offset: usize) {          self.current_token = Some(Token::Doctype(Doctype {              name: None,              force_quirks: false,              public_id: None,              system_id: None, -            span: offset..O::default(), -            name_span: O::default()..O::default(), -            public_id_span: O::default()..O::default(), -            system_id_span: O::default()..O::default(), +            span: offset..0, +            name_span: 0..0, +            public_id_span: 0..0, +            system_id_span: 0..0,          }));      } -    fn init_doctype_name(&mut self, offset: O) { +    fn init_doctype_name(&mut self, offset: usize) {          assume!(Some(Token::Doctype(doctype)), &mut self.current_token);          doctype.name = Some("".into());          doctype.name_span.start = offset; @@ -213,12 +213,12 @@ impl<O: Offset> Emitter<O> for TracingEmitter<O> {          name.push_str(s);      } -    fn terminate_doctype_name(&mut self, offset: O) { +    fn terminate_doctype_name(&mut self, offset: usize) {          assume!(Some(Token::Doctype(doctype)), &mut self.current_token);          doctype.name_span.end = offset;      } -    fn init_doctype_public_id(&mut self, offset: O) { +    fn init_doctype_public_id(&mut self, offset: usize) {          assume!(Some(Token::Doctype(doctype)), &mut self.current_token);          doctype.public_id = Some("".to_owned());          doctype.public_id_span.start = offset; @@ -235,12 +235,12 @@ impl<O: Offset> Emitter<O> for TracingEmitter<O> {          public_id.push_str(s);      } -    fn terminate_doctype_public_id(&mut self, offset: O) { +    fn terminate_doctype_public_id(&mut self, offset: usize) {          assume!(Some(Token::Doctype(doctype)), &mut self.current_token);          doctype.public_id_span.end = offset;      } -    fn init_doctype_system_id(&mut self, offset: O) { +    fn init_doctype_system_id(&mut self, offset: usize) {          assume!(Some(Token::Doctype(doctype)), &mut self.current_token);          doctype.system_id = Some("".to_owned());          doctype.system_id_span.start = offset; @@ -257,7 +257,7 @@ impl<O: Offset> Emitter<O> for TracingEmitter<O> {          id.push_str(s);      } -    fn terminate_doctype_system_id(&mut self, offset: O) { +    fn terminate_doctype_system_id(&mut self, offset: usize) {          assume!(Some(Token::Doctype(doctype)), &mut self.current_token);          doctype.system_id_span.end = offset;      } @@ -267,22 +267,19 @@ impl<O: Offset> Emitter<O> for TracingEmitter<O> {          doctype.force_quirks = true;      } -    fn emit_current_doctype(&mut self, offset: O) { +    fn emit_current_doctype(&mut self, offset: usize) {          assume!(Some(Token::Doctype(mut doctype)), self.current_token.take());          doctype.span.end = offset;          self.emit_token(Token::Doctype(doctype));      }  } -impl<O> TracingEmitter<O> { -    fn emit_token(&mut self, token: Token<O>) { +impl TracingEmitter { +    fn emit_token(&mut self, token: Token) {          self.emitted_tokens.push_front(token);      } -    fn flush_current_attribute(&mut self) -    where -        O: Offset, -    { +    fn flush_current_attribute(&mut self) {          if self.current_attribute_name.is_empty() {              return;          } @@ -315,13 +312,16 @@ impl<O> TracingEmitter<O> {  #[cfg(test)]  mod tests {      use super::TracingEmitter; +    use crate::offset::PosTrackingReader;      use crate::token::{AttrValueSyntax, Token};      use crate::{Event, Tokenizer};      #[test]      fn test_attribute_value_syntax() {          let mut tokenizer = Tokenizer::new( -            "<div empty unquoted=foo single-quoted='foo' double-quoted=\"foo\">", +            PosTrackingReader::new( +                "<div empty unquoted=foo single-quoted='foo' double-quoted=\"foo\">", +            ),              TracingEmitter::default(),          )          .flatten(); | 
