From dc7754d38f352a16e79947c288782e2bf1dc3885 Mon Sep 17 00:00:00 2001 From: Constantin Berhard Date: Mon, 6 Mar 2017 15:32:03 +0100 Subject: [PATCH] fix #113 --- src/utils/mod.rs | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/utils/mod.rs b/src/utils/mod.rs index c7f4f47..f86752c 100644 --- a/src/utils/mod.rs +++ b/src/utils/mod.rs @@ -50,14 +50,16 @@ pub fn prefix<'a, I>(iter: I, available_width: usize, delimiter: &str) -> Prefix let mut current_width = 0; let sum = iter.take_while(|token| { - let width = token.width(); - if current_width + width > available_width { + let needed_width = if current_width == 0 { + token.width() + } else { + // We also need to insert the delimiter, if not at the beginning. + token.width() + delimiter_width + }; + if current_width + needed_width > available_width { false } else { - if current_width != 0 { - current_width += delimiter_width; - } - current_width += width; + current_width += needed_width; true } }) @@ -66,7 +68,9 @@ pub fn prefix<'a, I>(iter: I, available_width: usize, delimiter: &str) -> Prefix // We counted delimiter once too many times, // but only if the iterator was non empty. - let length = if sum == 0 { sum } else { sum - delimiter_len }; + let length = sum.saturating_sub(delimiter_len); + + debug_assert!(current_width <= available_width); Prefix { length: length,