aboutsummaryrefslogtreecommitdiff
path: root/src/emitter.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/emitter.rs')
-rw-r--r--src/emitter.rs27
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.