summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/utils/gen_util.rs27
1 files changed, 16 insertions, 11 deletions
diff --git a/src/utils/gen_util.rs b/src/utils/gen_util.rs
index 97c6dbc1..e423b6b2 100644
--- a/src/utils/gen_util.rs
+++ b/src/utils/gen_util.rs
@@ -101,21 +101,26 @@ fn grapheme_width(g: &str) -> usize {
fn truncate_str<U: Into<usize>>(content: &str, width: U) -> String {
let width = width.into();
- if width > 0 {
+ if content.len() <= width {
+ // If the entire string fits in the width, then we just
+ // need to copy the entire string over.
+
+ content.to_owned()
+ } else if width > 0 {
if content.is_ascii() {
- // If the entire string is ASCII, we can use a much simpler approach.
+ // If the entire string is ASCII, we can use a much simpler approach
+ // in regards to what we truncate.
- if content.len() <= width {
- content.to_owned()
- } else {
- let mut text = String::with_capacity(width);
- let (keep, _throw) = content.split_at(width - 1);
- text.push_str(keep);
- text.push('…');
+ let mut text = String::with_capacity(width);
+ let (keep, _throw) = content.split_at(width - 1);
+ text.push_str(keep);
+ text.push('…');
- text
- }
+ text
} else {
+ // Otherwise iterate by grapheme and greedily fit as many graphemes
+ // as width will allow.
+
let mut text = String::with_capacity(width);
let mut curr_width = 0;
let mut early_break = false;