Fix panic in link linebreaking (#4579)

This commit is contained in:
Laurenz 2024-07-18 10:49:08 +02:00 committed by GitHub
parent 0ea4b1b217
commit 4275447788
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 13 additions and 7 deletions

View File

@ -655,9 +655,9 @@ fn breakpoints(p: &Preparation, mut f: impl FnMut(usize, Breakpoint)) {
let (head, tail) = text.split_at(last);
if head.ends_with("://") || tail.starts_with("www.") {
let (link, _) = link_prefix(tail);
let end = last + link.len();
linebreak_link(link, |i| f(last + i, Breakpoint::Normal));
while iter.peek().is_some_and(|&p| p < end) {
last += link.len();
while iter.peek().is_some_and(|&p| p < last) {
iter.next();
}
}
@ -687,19 +687,17 @@ fn breakpoints(p: &Preparation, mut f: impl FnMut(usize, Breakpoint)) {
};
// Hyphenate between the last and current breakpoint.
if hyphenate {
let mut offset = last;
if hyphenate && last < point {
for segment in text[last..point].split_word_bounds() {
if !segment.is_empty() && segment.chars().all(char::is_alphabetic) {
hyphenations(p, &lb, offset, segment, &mut f);
hyphenations(p, &lb, last, segment, &mut f);
}
offset += segment.len();
last += segment.len();
}
}
// Call `f` for the UAX #14 break opportunity.
f(point, breakpoint);
last = point;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -107,3 +107,11 @@ For info see #link("https://myhost.tld").
#set page(width: 50pt, height: auto)
#h(99%) 🏳️‍🌈
🏳️‍🌈
--- issue-hyphenate-in-link ---
#set par(justify: true)
// The `linebreak()` function accidentally generated out-of-order breakpoints
// for links because it now splits on word boundaries. We avoid the link markup
// syntax because it's show rule interferes.
#"http://creativecommons.org/licenses/by-nc-sa/4.0/"