aboutsummaryrefslogtreecommitdiff
path: root/src/emitter.rs
diff options
context:
space:
mode:
authorMartin Fischer <martin@push-f.com>2023-08-17 16:12:51 +0200
committerMartin Fischer <martin@push-f.com>2023-08-19 13:41:55 +0200
commitcb4e9cf7cfc1612c67f16bfabadbdf442cd380fe (patch)
tree5aa2bf7dccafe66d735f3609d446bfad083ab8a3 /src/emitter.rs
parentc15895d44d17984386d3684e2aa85aca386ba3bf (diff)
fix: fix lots of position off-by-ones
Previously the PosTrackingReader always mysteriously subtracted 1 from the current position ... this wasn't sound at all ... the machine just happens to often call `Tokenizer::unread_char` ... but not always. E.g. for proper comments it didn't which resulted in their offset and spans being off-by-one, which is fixed by this commit (see test_spans.rs).
Diffstat (limited to 'src/emitter.rs')
-rw-r--r--src/emitter.rs7
1 files changed, 3 insertions, 4 deletions
diff --git a/src/emitter.rs b/src/emitter.rs
index 1f60f70..90aa4db 100644
--- a/src/emitter.rs
+++ b/src/emitter.rs
@@ -310,7 +310,7 @@ impl<O: Offset> Emitter<O> for DefaultEmitter<O> {
*self_closing = true;
}
Token::EndTag(_) => {
- self.emit_error(Error::EndTagWithTrailingSolidus, offset);
+ self.emit_error(Error::EndTagWithTrailingSolidus, offset - 1);
}
_ => {
debug_assert!(false);
@@ -378,9 +378,8 @@ impl<O: Offset> Emitter<O> for DefaultEmitter<O> {
},
));
}
- fn init_attribute_value(&mut self, offset: O, quoted: bool) {
- self.current_attribute.as_mut().unwrap().1.value_span =
- offset + quoted as usize..offset + quoted as usize;
+ fn init_attribute_value(&mut self, offset: O, _quoted: bool) {
+ self.current_attribute.as_mut().unwrap().1.value_span = offset..offset;
}
fn push_attribute_name(&mut self, s: &str) {