diff options
| author | Max Audron <audron@cocaine.farm> | 2025-05-06 16:33:31 +0200 |
|---|---|---|
| committer | Max Audron <audron@cocaine.farm> | 2025-05-06 16:33:31 +0200 |
| commit | daf361ea763de47d61860df75a1b8c9a88aa17eb (patch) | |
| tree | abc25d7dea8a4ac34906088e392572ce906ba940 /src | |
| parent | update dependencies (diff) | |
fix truncate on unicode
fuck unicode all my homies stan ascii
Diffstat (limited to 'src')
| -rw-r--r-- | src/util/formatting/truncate.rs | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/util/formatting/truncate.rs b/src/util/formatting/truncate.rs index 80caa23..9528492 100644 --- a/src/util/formatting/truncate.rs +++ b/src/util/formatting/truncate.rs @@ -1,3 +1,5 @@ +use unicode_segmentation::UnicodeSegmentation; + /// Truncates a string after a certain number of characters. /// /// Function always tries to truncate on a word boundary. @@ -6,15 +8,7 @@ pub fn truncate(text: &str, len: usize) -> String { if text.len() <= len { return text.to_string(); } - format!( - "{}…", - text[..len] - .rsplitn(2, " ") - .collect::<Vec<&str>>() - .last() - .copied() - .expect("This can never happen >inb4 it happens") - ) + format!("{}…", text.graphemes(true).take(len).collect::<String>()) } #[cfg(test)] @@ -39,7 +33,7 @@ mod tests { fn test_truncate_with_input_of_greater_length_than_limit() { let input = "some longer text"; let result = truncate(input, input.len() - 1); - assert_eq!("some longer…", result) + assert_eq!("some longer tex…", result) } #[test] @@ -48,4 +42,11 @@ mod tests { let result = truncate(input, input.len() - 1); assert_eq!("somelongertex…", result) } + + #[test] + fn test_truncate_with_unicode() { + let input = "short ° text"; + let result = truncate(input, 7); + assert_eq!(result, "short °…") + } } |
