mirror of
https://github.com/typst/typst
synced 2025-06-28 16:22:53 +08:00
parent
18cb3becb3
commit
ea987ef4a3
@ -101,7 +101,7 @@ pub(crate) fn breakpoints<'a>(
|
|||||||
let (link, _) = link_prefix(tail);
|
let (link, _) = link_prefix(tail);
|
||||||
let end = last + link.len();
|
let end = last + link.len();
|
||||||
linebreak_link(link, |i| f(last + i, Breakpoint::Normal));
|
linebreak_link(link, |i| f(last + i, Breakpoint::Normal));
|
||||||
while iter.peek().map_or(false, |&p| p <= end) {
|
while iter.peek().map_or(false, |&p| p < end) {
|
||||||
iter.next();
|
iter.next();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -206,7 +206,20 @@ fn linebreak_link(link: &str, mut f: impl FnMut(usize)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let mut offset = 0;
|
let mut offset = 0;
|
||||||
let mut emit = |end: usize| {
|
let mut prev = Class::Other;
|
||||||
|
|
||||||
|
for (end, c) in link.char_indices() {
|
||||||
|
let class = Class::of(c);
|
||||||
|
|
||||||
|
// Emit opportunities when going from
|
||||||
|
// - other -> other
|
||||||
|
// - alphabetic -> numeric
|
||||||
|
// - numeric -> alphabetic
|
||||||
|
// Never before after opening delimiters.
|
||||||
|
if end > 0
|
||||||
|
&& prev != Class::Open
|
||||||
|
&& if class == Class::Other { prev == Class::Other } else { class != prev }
|
||||||
|
{
|
||||||
let piece = &link[offset..end];
|
let piece = &link[offset..end];
|
||||||
if piece.len() < 16 {
|
if piece.len() < 16 {
|
||||||
// For bearably long segments, emit them as one.
|
// For bearably long segments, emit them as one.
|
||||||
@ -220,28 +233,10 @@ fn linebreak_link(link: &str, mut f: impl FnMut(usize)) {
|
|||||||
f(offset);
|
f(offset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
|
||||||
|
|
||||||
let mut prev = Class::Other;
|
|
||||||
for (end, c) in link.char_indices() {
|
|
||||||
let class = Class::of(c);
|
|
||||||
|
|
||||||
// Emit opportunities when going from
|
|
||||||
// - other -> other
|
|
||||||
// - alphabetic -> numeric
|
|
||||||
// - numeric -> alphabetic
|
|
||||||
// Never before after opening delimiters.
|
|
||||||
if end > 0
|
|
||||||
&& prev != Class::Open
|
|
||||||
&& if class == Class::Other { prev == Class::Other } else { class != prev }
|
|
||||||
{
|
|
||||||
emit(end);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
prev = class;
|
prev = class;
|
||||||
}
|
}
|
||||||
|
|
||||||
emit(link.len());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Whether hyphenation is enabled at the given offset.
|
/// Whether hyphenation is enabled at the given offset.
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 64 KiB |
@ -14,3 +14,10 @@
|
|||||||
Here's a link https://url.com/data/extern12840%data_urlenc and then there are more
|
Here's a link https://url.com/data/extern12840%data_urlenc and then there are more
|
||||||
links #link("www.url.com/data/extern12840%data_urlenc") in my text of links
|
links #link("www.url.com/data/extern12840%data_urlenc") in my text of links
|
||||||
http://mydataurl/hash/12098541029831025981024980124124214/incremental/progress%linkdata_information_setup_my_link_just_never_stops_going/on?query=false
|
http://mydataurl/hash/12098541029831025981024980124124214/incremental/progress%linkdata_information_setup_my_link_just_never_stops_going/on?query=false
|
||||||
|
|
||||||
|
---
|
||||||
|
// Ensure that there's no unconditional break at the end of a link.
|
||||||
|
#set page(width: 180pt, height: auto, margin: auto)
|
||||||
|
#set text(11pt)
|
||||||
|
|
||||||
|
For info see #link("https://myhost.tld").
|
||||||
|
Loading…
x
Reference in New Issue
Block a user