fix: fix multibyte handling
This commit is contained in:
parent
f07ebae7c3
commit
1743406317
24
src/lib.rs
24
src/lib.rs
@ -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;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user