Introduce MultiBuffer::clip_offset_utf16

This commit is contained in:
Antonio Scandurra 2022-07-25 15:06:04 +02:00
parent c46be992e0
commit 47e8bd5f4f
2 changed files with 23 additions and 0 deletions

View file

@ -1692,6 +1692,25 @@ impl MultiBufferSnapshot {
*cursor.start() + overshoot
}
pub fn clip_offset_utf16(&self, offset: OffsetUtf16, bias: Bias) -> OffsetUtf16 {
if let Some((_, _, buffer)) = self.as_singleton() {
return buffer.clip_offset_utf16(offset, bias);
}
let mut cursor = self.excerpts.cursor::<OffsetUtf16>();
cursor.seek(&offset, Bias::Right, &());
let overshoot = if let Some(excerpt) = cursor.item() {
let excerpt_start = excerpt.range.context.start.to_offset_utf16(&excerpt.buffer);
let buffer_offset = excerpt
.buffer
.clip_offset_utf16(excerpt_start + (offset - cursor.start()), bias);
OffsetUtf16(buffer_offset.0.saturating_sub(excerpt_start.0))
} else {
OffsetUtf16(0)
};
*cursor.start() + overshoot
}
pub fn clip_point_utf16(&self, point: PointUtf16, bias: Bias) -> PointUtf16 {
if let Some((_, _, buffer)) = self.as_singleton() {
return buffer.clip_point_utf16(point, bias);

View file

@ -1901,6 +1901,10 @@ impl BufferSnapshot {
self.visible_text.clip_point(point, bias)
}
pub fn clip_offset_utf16(&self, offset: OffsetUtf16, bias: Bias) -> OffsetUtf16 {
self.visible_text.clip_offset_utf16(offset, bias)
}
pub fn clip_point_utf16(&self, point: PointUtf16, bias: Bias) -> PointUtf16 {
self.visible_text.clip_point_utf16(point, bias)
}