From 08e0444ee4b15d8c24c9f44a8a70b6e436992616 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Thu, 18 Nov 2021 11:01:12 +0100 Subject: [PATCH] Use char count instead of byte count to determine longest row --- crates/editor/src/display_map/block_map.rs | 8 +++----- crates/editor/src/display_map/wrap_map.rs | 7 +++++++ 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/crates/editor/src/display_map/block_map.rs b/crates/editor/src/display_map/block_map.rs index 26aa2e193b..e41afffe3c 100644 --- a/crates/editor/src/display_map/block_map.rs +++ b/crates/editor/src/display_map/block_map.rs @@ -528,16 +528,14 @@ impl BlockSnapshot { pub fn longest_row(&self) -> u32 { let input_row = self.wrap_snapshot.longest_row(); - let input_row_len = self.wrap_snapshot.line_len(input_row); + let input_row_chars = self.wrap_snapshot.line_char_count(input_row); let TransformSummary { longest_row_in_block: block_row, - longest_row_in_block_chars: block_row_len, + longest_row_in_block_chars: block_row_chars, .. } = &self.transforms.summary(); - dbg!(block_row, block_row_len, input_row, input_row_len); - - if *block_row_len > input_row_len { + if *block_row_chars > input_row_chars { *block_row } else { self.to_block_point(WrapPoint::new(input_row, 0)).row diff --git a/crates/editor/src/display_map/wrap_map.rs b/crates/editor/src/display_map/wrap_map.rs index 6e14df4dbb..a30101a003 100644 --- a/crates/editor/src/display_map/wrap_map.rs +++ b/crates/editor/src/display_map/wrap_map.rs @@ -674,6 +674,13 @@ impl Snapshot { len as u32 } + pub fn line_char_count(&self, row: u32) -> u32 { + self.text_chunks(row) + .flat_map(|c| c.chars()) + .take_while(|c| *c != '\n') + .count() as u32 + } + pub fn soft_wrap_indent(&self, row: u32) -> Option { let mut cursor = self.transforms.cursor::(); cursor.seek(&WrapPoint::new(row + 1, 0), Bias::Right, &());