summaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
Diffstat (limited to 'crates')
-rw-r--r--crates/typst/src/layout/inline/shaping.rs21
1 files changed, 10 insertions, 11 deletions
diff --git a/crates/typst/src/layout/inline/shaping.rs b/crates/typst/src/layout/inline/shaping.rs
index 43dc351a..0b4a17d7 100644
--- a/crates/typst/src/layout/inline/shaping.rs
+++ b/crates/typst/src/layout/inline/shaping.rs
@@ -515,14 +515,14 @@ impl<'a> ShapedText<'a> {
std::mem::swap(&mut start, &mut end);
}
- let left = self.find_safe_to_break(start, Side::Left)?;
- let right = self.find_safe_to_break(end, Side::Right)?;
+ let left = self.find_safe_to_break(start)?;
+ let right = self.find_safe_to_break(end)?;
Some(&self.glyphs[left..right])
}
/// Find the glyph offset matching the text index that is most towards the
- /// given side and safe-to-break.
- fn find_safe_to_break(&self, text_index: usize, towards: Side) -> Option<usize> {
+ /// start of the text and safe-to-break.
+ fn find_safe_to_break(&self, text_index: usize) -> Option<usize> {
let ltr = self.dir.is_positive();
// Handle edge cases.
@@ -542,6 +542,7 @@ impl<'a> ShapedText<'a> {
ordering.reverse()
}
});
+
let mut idx = match found {
Ok(idx) => idx,
Err(idx) => {
@@ -565,13 +566,11 @@ impl<'a> ShapedText<'a> {
}
};
- let next = match towards {
- Side::Left => usize::checked_sub,
- Side::Right => usize::checked_add,
- };
-
- // Search for the outermost glyph with the text index.
- while let Some(next) = next(idx, 1) {
+ // Search for the start-most glyph with the text index. This means
+ // we take empty range glyphs at the start and leave those at the end
+ // for the next line.
+ let dec = if ltr { usize::checked_sub } else { usize::checked_add };
+ while let Some(next) = dec(idx, 1) {
if self.glyphs.get(next).map_or(true, |g| g.range.start != text_index) {
break;
}