From 049b1d1c7425f2ae1b08e97c8abae58d24715a7f Mon Sep 17 00:00:00 2001 From: rabite Date: Tue, 28 Jan 2020 01:29:58 +0100 Subject: fix sized_string chopping string at wrong boundaries --- src/term.rs | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/term.rs b/src/term.rs index b35dc37..1dd4a7b 100644 --- a/src/term.rs +++ b/src/term.rs @@ -221,24 +221,25 @@ pub fn cell_ratio() -> HResult { } pub fn sized_string(string: &str, xsize: u16) -> &str { - let len = string.char_indices() - .map(|(i, ch)| { + let len = string.chars() + .map(|ch| { if ch.is_ascii() { - (i, 1) + (1, 1) } else { - (i, UnicodeWidthChar::width(ch).unwrap_or(0)) + (UnicodeWidthChar::width(ch).unwrap_or(0), ch.len_utf8()) } }) - .scan(0, |slen, (i, chlen)| { - *slen += chlen; - Some((i, *slen)) + .scan((0,0), |(str_width, str_len), (ch_width, ch_len)| { + *str_width += ch_width; + *str_len += ch_len; + Some((*str_width, *str_len)) }) - .take_while(|(_, slen)| slen < &(xsize as usize)) - .map(|(i,_)| i) + .take_while(|(str_width, _)| *str_width < xsize as usize) + .map(|(_, str_len)| str_len) .last() .unwrap_or(0); - &string[0..len+1] + &string[0..len] } #[derive(Debug)] -- cgit v1.2.3