From 651fda1467ffb60e79954e7ba14b969c07c176df Mon Sep 17 00:00:00 2001 From: Manos Pitsidianakis Date: Thu, 12 Dec 2019 11:01:13 +0200 Subject: [PATCH] text_processing: use grapheme length in Truncate --- text_processing/src/lib.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/text_processing/src/lib.rs b/text_processing/src/lib.rs index 0e9002880..799fa85b0 100644 --- a/text_processing/src/lib.rs +++ b/text_processing/src/lib.rs @@ -14,10 +14,18 @@ pub trait Truncate { impl Truncate for &mut String { fn truncate_at_boundary(self, mut new_len: usize) { - while new_len > 0 && !self.is_char_boundary(new_len) { - new_len -= 1; + if new_len >= self.len() { + return; + } + + extern crate unicode_segmentation; + use unicode_segmentation::UnicodeSegmentation; + if let Some((last, _)) = UnicodeSegmentation::grapheme_indices(self.as_str(), true) + .take(new_len) + .last() + { + String::truncate(self, last); } - String::truncate(self, new_len); } }