diff options
Diffstat (limited to 'src/emitter.rs')
-rw-r--r-- | src/emitter.rs | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/src/emitter.rs b/src/emitter.rs index b3fdb99..caf7b55 100644 --- a/src/emitter.rs +++ b/src/emitter.rs @@ -270,8 +270,11 @@ impl<O: Offset, R: Position<O>> Emitter<R> for DefaultEmitter<R, O> { self.seen_attributes.clear(); } - fn init_comment(&mut self, _reader: &R) { - self.current_token = Some(Token::Comment(String::new())); + fn init_comment(&mut self, reader: &R) { + self.current_token = Some(Token::Comment(Comment { + data: String::new(), + data_offset: reader.position(), + })); } fn emit_current_tag(&mut self) { self.flush_current_attribute(); @@ -348,7 +351,7 @@ impl<O: Offset, R: Position<O>> Emitter<R> for DefaultEmitter<R, O> { fn push_comment(&mut self, s: &str) { match self.current_token { - Some(Token::Comment(ref mut data)) => data.push_str(s), + Some(Token::Comment(Comment { ref mut data, .. })) => data.push_str(s), _ => debug_assert!(false), } } @@ -483,6 +486,22 @@ pub struct EndTag<O> { pub name_span: Range<O>, } +/// An HTML comment. +#[derive(PartialEq, Eq, Debug)] +pub struct Comment<O> { + /// The text within the comment. + pub data: String, + /// The source offset of the comment data. + pub data_offset: O, +} + +impl<O: Offset> Comment<O> { + /// Calculates the span for the comment data and returns it. + pub fn data_span(&self) -> Range<O> { + self.data_offset..self.data_offset + self.data.len() + } +} + /// A doctype. Some examples: /// /// * `<!DOCTYPE {name}>` @@ -515,7 +534,7 @@ pub enum Token<O> { /// A literal string. String(String), /// A HTML comment. - Comment(String), + Comment(Comment<O>), /// A HTML doctype declaration. Doctype(Doctype), /// A HTML parsing error. |