Correctly store current chunk offset in fold_map::HighlightedChunks

This commit is contained in:
Antonio Scandurra
2021-05-24 16:52:01 +02:00
parent c50f978eff
commit d063ebdf9b
+9 -5
View File
@@ -741,7 +741,7 @@ impl<'a> Iterator for Chunks<'a> {
pub struct HighlightedChunks<'a> {
transform_cursor: Cursor<'a, Transform, DisplayOffset, TransformSummary>,
buffer_chunks: buffer::HighlightedChunks<'a>,
buffer_chunk: Option<(&'a str, Option<usize>)>,
buffer_chunk: Option<(usize, &'a str, Option<usize>)>,
buffer_offset: usize,
}
@@ -771,14 +771,18 @@ impl<'a> Iterator for HighlightedChunks<'a> {
return Some((display_text, None));
}
// Retrieve a chunk from the current buffer cursor's location.
// Retrieve a chunk from the current location in the buffer.
if self.buffer_chunk.is_none() {
self.buffer_chunk = self.buffer_chunks.next();
let chunk_offset = self.buffer_chunks.offset();
self.buffer_chunk = self
.buffer_chunks
.next()
.map(|(chunk, capture_ix)| (chunk_offset, chunk, capture_ix));
}
// Otherwise, take a chunk from the buffer's text.
if let Some((mut chunk, capture_ix)) = self.buffer_chunk {
let offset_in_chunk = self.buffer_offset - self.buffer_chunks.offset();
if let Some((chunk_offset, mut chunk, capture_ix)) = self.buffer_chunk {
let offset_in_chunk = self.buffer_offset - chunk_offset;
chunk = &chunk[offset_in_chunk..];
// Truncate the chunk so that it ends at the next fold.