summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorbluebear94 <uruwi@protonmail.com>2023-10-03 09:02:27 -0400
committerGitHub <noreply@github.com>2023-10-03 15:02:27 +0200
commitce658db2f39f8472c3525a18ed1cfead23781fbb (patch)
treefc49d6bbc94421ac8be0baaca754c6c5ba626316
parentcf9bde3245817e068c8253070e7a94dcc05369fb (diff)
ShapedText::push_hyphen: Use self.base for default hyphen range (#2299)
In the unlikely chance that we hyphenate after an empty line, we set the glyph range to self.base..self.base so that subtracting Fixes #2283.
-rw-r--r--crates/typst-library/src/text/shaping.rs7
-rw-r--r--tests/ref/text/shaping.pngbin3902 -> 3992 bytes
-rw-r--r--tests/typ/text/shaping.typ6
3 files changed, 12 insertions, 1 deletions
diff --git a/crates/typst-library/src/text/shaping.rs b/crates/typst-library/src/text/shaping.rs
index 2d9dae33..57501c52 100644
--- a/crates/typst-library/src/text/shaping.rs
+++ b/crates/typst-library/src/text/shaping.rs
@@ -446,7 +446,12 @@ impl<'a> ShapedText<'a> {
.glyphs
.last()
.map(|g| g.range.end..g.range.end)
- .unwrap_or_default();
+ // In the unlikely chance that we hyphenate after an
+ // empty line, ensure that the glyph range still falls
+ // after self.base so that subtracting either of the
+ // endpoints by self.base doesn’t underflow.
+ // See <https://github.com/typst/typst/issues/2283>.
+ .unwrap_or_else(|| self.base..self.base);
self.width += x_advance.at(self.size);
self.glyphs.to_mut().push(ShapedGlyph {
font,
diff --git a/tests/ref/text/shaping.png b/tests/ref/text/shaping.png
index a77dda3a..a3ee750e 100644
--- a/tests/ref/text/shaping.png
+++ b/tests/ref/text/shaping.png
Binary files differ
diff --git a/tests/typ/text/shaping.typ b/tests/typ/text/shaping.typ
index 3a8d5411..c794a105 100644
--- a/tests/typ/text/shaping.typ
+++ b/tests/typ/text/shaping.typ
@@ -26,3 +26,9 @@ ABCअपार्टमेंट
// doesn't exist in shaping output.
#set text(dir: rtl, font: "Noto Serif Hebrew")
\ ט
+
+---
+// Test that #2283 is fixed.
+#set text(font: "test", lang: "de", hyphenate: true, fallback: false)
+#set par(linebreaks: "simple")
+- ensure