aboutsummaryrefslogtreecommitdiff
path: root/src/util/formatting/truncate.rs
diff options
context:
space:
mode:
authorMax Audron <audron@cocaine.farm>2025-05-06 16:33:31 +0200
committerMax Audron <audron@cocaine.farm>2025-05-06 16:33:31 +0200
commitdaf361ea763de47d61860df75a1b8c9a88aa17eb (patch)
treeabc25d7dea8a4ac34906088e392572ce906ba940 /src/util/formatting/truncate.rs
parentupdate dependencies (diff)
fix truncate on unicode
fuck unicode all my homies stan ascii
Diffstat (limited to '')
-rw-r--r--src/util/formatting/truncate.rs21
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 °…")
+ }
}
6update d3fus phone wg pubkeyMarcin Maselko-1/+1 2024-02-26added d3fus nass to wg configMarcin Maselko-0/+9 2024-02-21set minecraft memoryMax Audron-0/+1 2024-02-21add minecraft server and move palworld to games moduleMax Audron-3/+56 2024-02-21set network manually for ns serversMax Audron-0/+51 2024-02-20update nixpkgs-unstableMax Audron-3/+3 2024-02-19update d3fus fritzbox wg portMarcin Maselko-1/+1 2024-02-19add xonotic serverMax Audron-1/+10