More wip
This commit is contained in:
parent
1bdde8b2e4
commit
596f3c9dc9
2 changed files with 38 additions and 9 deletions
|
@ -137,15 +137,29 @@ impl<'a> Iterator for CustomHighlightsChunks<'a> {
|
||||||
*chunk = self.buffer_chunks.next().unwrap();
|
*chunk = self.buffer_chunks.next().unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
let (prefix, suffix) = chunk
|
let split_idx = chunk.text.len().min(next_highlight_endpoint - self.offset);
|
||||||
.text
|
let (prefix, suffix) = chunk.text.split_at(split_idx);
|
||||||
.split_at(chunk.text.len().min(next_highlight_endpoint - self.offset));
|
|
||||||
|
let (chars, tabs) = if split_idx == 128 {
|
||||||
|
let output = (chunk.chars, chunk.tabs);
|
||||||
|
chunk.chars = 0;
|
||||||
|
chunk.tabs = 0;
|
||||||
|
output
|
||||||
|
} else {
|
||||||
|
let mask = (1 << split_idx) - 1;
|
||||||
|
let output = (chunk.chars & mask, chunk.tabs & mask);
|
||||||
|
chunk.chars = chunk.chars >> split_idx;
|
||||||
|
chunk.tabs = chunk.tabs >> split_idx;
|
||||||
|
output
|
||||||
|
};
|
||||||
|
|
||||||
chunk.text = suffix;
|
chunk.text = suffix;
|
||||||
self.offset += prefix.len();
|
self.offset += prefix.len();
|
||||||
// FIXME: chunk cloning is wrong because the bitmaps might be off
|
// FIXME: chunk cloning is wrong because the bitmaps might be off
|
||||||
let mut prefix = Chunk {
|
let mut prefix = Chunk {
|
||||||
text: prefix,
|
text: prefix,
|
||||||
|
chars,
|
||||||
|
tabs,
|
||||||
..chunk.clone()
|
..chunk.clone()
|
||||||
};
|
};
|
||||||
if !self.active_highlights.is_empty() {
|
if !self.active_highlights.is_empty() {
|
||||||
|
|
|
@ -288,18 +288,33 @@ impl<'a> Iterator for InlayChunks<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
// todo! create a tabs/chars bitmask here and pass it in chunk
|
// todo! create a tabs/chars bitmask here and pass it in chunk
|
||||||
let (prefix, suffix) = chunk.text.split_at(
|
let split_idx = chunk
|
||||||
chunk
|
.text
|
||||||
.text
|
.len()
|
||||||
.len()
|
.min(self.transforms.end(&()).0.0 - self.output_offset.0);
|
||||||
.min(self.transforms.end(&()).0.0 - self.output_offset.0),
|
|
||||||
);
|
let (prefix, suffix) = chunk.text.split_at(split_idx);
|
||||||
|
|
||||||
|
let (chars, tabs) = if split_idx == 128 {
|
||||||
|
let output = (chunk.chars, chunk.tabs);
|
||||||
|
chunk.chars = 0;
|
||||||
|
chunk.tabs = 0;
|
||||||
|
output
|
||||||
|
} else {
|
||||||
|
let mask = (1 << split_idx) - 1;
|
||||||
|
let output = (chunk.chars & mask, chunk.tabs & mask);
|
||||||
|
chunk.chars = chunk.chars >> split_idx;
|
||||||
|
chunk.tabs = chunk.tabs >> split_idx;
|
||||||
|
output
|
||||||
|
};
|
||||||
|
|
||||||
chunk.text = suffix;
|
chunk.text = suffix;
|
||||||
self.output_offset.0 += prefix.len();
|
self.output_offset.0 += prefix.len();
|
||||||
// FIXME: chunk cloning is wrong because the bitmaps might be off
|
// FIXME: chunk cloning is wrong because the bitmaps might be off
|
||||||
Chunk {
|
Chunk {
|
||||||
text: prefix,
|
text: prefix,
|
||||||
|
chars,
|
||||||
|
tabs,
|
||||||
..chunk.clone()
|
..chunk.clone()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue