fix: fix multibyte handling

This commit is contained in:
Fey Naomi Schrewe 2026-09-12 19:22:58 +02:00
parent f07ebae7c3
commit 1743406317

View File

@ -34,9 +34,9 @@ pub fn layout(text: impl AsRef<str>, width: usize, lang: Lang) -> Vec<String> {
let mut last_break_opportunity = 0; let mut last_break_opportunity = 0;
for (idx, break_opportunity) in linebreaks(s) { for (idx, break_opportunity) in linebreaks(s) {
let trimmed = if idx == s.len() { let trimmed = if idx == s.len() {
&s[last_break_opportunity..idx] &s[last_break_opportunity..]
} else { } else {
&s[last_break_opportunity..idx - 1] s[last_break_opportunity..idx].trim_end()
}; };
let mut last_word_end = 0; let mut last_word_end = 0;
for (start, word) in trimmed.unicode_word_indices() { for (start, word) in trimmed.unicode_word_indices() {
@ -78,13 +78,19 @@ pub fn layout(text: impl AsRef<str>, width: usize, lang: Lang) -> Vec<String> {
data: "", data: "",
}); });
} else { } else {
(s[idx - 1..].chars().next()); let first_ws = s[last_break_opportunity..idx]
items.push(Item::Glue { .char_indices()
width: 1f32, .rev()
stretch: 1f32, .take_while(|(_, c)| c.is_whitespace())
shrink: 0f32, .last();
data: " ", if let Some((first_ws, _)) = first_ws {
}); items.push(Item::Glue {
width: 1f32,
stretch: 1f32,
shrink: 0f32,
data: &s[(last_break_opportunity + first_ws)..idx],
});
}
} }
last_break_opportunity = idx; last_break_opportunity = idx;