summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--library/src/text/shaping.rs15
-rw-r--r--tests/ref/layout/par-justify-cjk.pngbin69448 -> 70197 bytes
-rw-r--r--tests/typ/layout/par-justify-cjk.typ2
3 files changed, 11 insertions, 6 deletions
diff --git a/library/src/text/shaping.rs b/library/src/text/shaping.rs
index 9f514e9a..3610e0c0 100644
--- a/library/src/text/shaping.rs
+++ b/library/src/text/shaping.rs
@@ -98,7 +98,7 @@ impl ShapedGlyph {
matches!(self.c.script(), Hiragana | Katakana | Han) || self.c == '\u{30FC}'
}
- pub fn is_cjk_adjustable(&self) -> bool {
+ pub fn is_cjk_punctuation(&self) -> bool {
self.is_cjk_left_aligned_punctuation(true)
|| self.is_cjk_right_aligned_punctuation()
|| self.is_cjk_center_aligned_punctuation(true)
@@ -353,7 +353,7 @@ impl<'a> ShapedText<'a> {
pub fn cjk_justifiable_at_last(&self) -> bool {
self.glyphs
.last()
- .map(|g| g.is_cjk_script() || g.is_cjk_adjustable())
+ .map(|g| g.is_cjk_script() || g.is_cjk_punctuation())
.unwrap_or(false)
}
@@ -763,12 +763,14 @@ pub fn is_gb_style(lang: Lang, region: Option<Region>) -> bool {
fn calculate_adjustability(ctx: &mut ShapingContext, lang: Lang, region: Option<Region>) {
let gb_style = is_gb_style(lang, region);
- let mut glyphs = ctx.glyphs.iter_mut().peekable();
- while let Some(glyph) = glyphs.next() {
+ for glyph in &mut ctx.glyphs {
glyph.adjustability = glyph.base_adjustability(gb_style);
+ }
+ let mut glyphs = ctx.glyphs.iter_mut().peekable();
+ while let Some(glyph) = glyphs.next() {
// Only GB style needs further adjustment.
- if glyph.is_cjk_adjustable() && !gb_style {
+ if glyph.is_cjk_punctuation() && !gb_style {
continue;
}
@@ -778,7 +780,8 @@ fn calculate_adjustability(ctx: &mut ShapingContext, lang: Lang, region: Option<
let Some(next) = glyphs.peek_mut() else { continue };
let width = glyph.x_advance;
let delta = width / 2.0;
- if next.is_cjk_adjustable()
+ if glyph.is_cjk_punctuation()
+ && next.is_cjk_punctuation()
&& (glyph.shrinkability().1 + next.shrinkability().0) >= delta
{
let left_delta = glyph.shrinkability().1.min(delta);
diff --git a/tests/ref/layout/par-justify-cjk.png b/tests/ref/layout/par-justify-cjk.png
index 89a9af7d..5a147ca4 100644
--- a/tests/ref/layout/par-justify-cjk.png
+++ b/tests/ref/layout/par-justify-cjk.png
Binary files differ
diff --git a/tests/typ/layout/par-justify-cjk.typ b/tests/typ/layout/par-justify-cjk.typ
index 2791769b..cd25fca1 100644
--- a/tests/typ/layout/par-justify-cjk.typ
+++ b/tests/typ/layout/par-justify-cjk.typ
@@ -35,6 +35,8 @@
《书名》《测试》。
]
+「『引号』」。“‘引号’”。
+
---
// Test Variants of Mainland China, Hong Kong, and Japan.