From eb22eed31b08874fbbbee68d2ae59f0d02f9e95d Mon Sep 17 00:00:00 2001 From: Laurenz Date: Thu, 7 Apr 2022 12:51:03 +0200 Subject: [PATCH] Make chinese justification less bad --- src/library/text/par.rs | 28 ++++++++++++++++------------ src/library/text/shaping.rs | 19 ++++++++++++------- tests/ref/text/justify.png | Bin 11714 -> 29155 bytes tests/typ/text/justify.typ | 6 ++++++ 4 files changed, 34 insertions(+), 19 deletions(-) diff --git a/src/library/text/par.rs b/src/library/text/par.rs index 673571350..1695e010b 100644 --- a/src/library/text/par.rs +++ b/src/library/text/par.rs @@ -310,15 +310,15 @@ impl<'a> Line<'a> { self.items().nth(index) } - // How many spaces the line contains. - fn spaces(&self) -> usize { - let mut spaces = 0; + // How many justifiable glyphs the line contains. + fn justifiables(&self) -> usize { + let mut count = 0; for item in self.items() { if let ParItem::Text(shaped) = item { - spaces += shaped.spaces(); + count += shaped.justifiables(); } } - spaces + count } /// How much of the line is stretchable spaces. @@ -509,11 +509,11 @@ fn linebreak_optimized<'a>( // Cost parameters. const HYPH_COST: Cost = 0.5; const CONSECUTIVE_DASH_COST: Cost = 30.0; - const MAX_COST: Cost = 10_000.0; + const MAX_COST: Cost = 1_000_000.0; const MIN_COST: Cost = -MAX_COST; const MIN_RATIO: f64 = -0.15; - // Density parameters. + let em = styles.get(TextNode::SIZE); let justify = styles.get(ParNode::JUSTIFY); // Dynamic programming table. @@ -537,11 +537,15 @@ fn linebreak_optimized<'a>( // Determine how much the line's spaces would need to be stretched // to make it the desired width. - let mut ratio = (width - attempt.size.x) / attempt.stretch(); + let delta = width - attempt.size.x; + let mut ratio = delta / attempt.stretch(); if ratio.is_infinite() { - ratio = ratio.signum() * MAX_COST; + ratio = delta / (em / 2.0); } + // At some point, it doesn't matter any more. + ratio = ratio.min(10.0); + // Determine the cost of the line. let mut cost = if ratio < if justify { MIN_RATIO } else { 0.0 } { // The line is overfull. This is the case if @@ -863,9 +867,9 @@ fn commit( && line.range.end < line.bidi.text.len() && line.fr.is_zero()) { - let spaces = line.spaces(); - if spaces > 0 { - justification = remaining / spaces as f64; + let justifiables = line.justifiables(); + if justifiables > 0 { + justification = remaining / justifiables as f64; remaining = Length::zero(); } } diff --git a/src/library/text/shaping.rs b/src/library/text/shaping.rs index 66936792a..d398e56de 100644 --- a/src/library/text/shaping.rs +++ b/src/library/text/shaping.rs @@ -50,10 +50,15 @@ pub struct ShapedGlyph { } impl ShapedGlyph { - /// Whether the glyph is a justifiable space. + /// Whether the glyph is a space. pub fn is_space(&self) -> bool { self.c == ' ' } + + /// Whether the glyph is justifiable. + pub fn is_justifiable(&self) -> bool { + matches!(self.c, ' ' | ',' | ' ' | '。' | '、') + } } /// A side you can go toward. @@ -68,7 +73,7 @@ impl<'a> ShapedText<'a> { /// Build the shaped text's frame. /// /// The `justification` defines how much extra advance width each - /// [space glyph](ShapedGlyph::is_space) will get. + /// [justifiable glyph](ShapedGlyph::is_justifiable) will get. pub fn build(&self, fonts: &FontStore, justification: Length) -> Frame { let mut offset = Length::zero(); let mut frame = Frame::new(self.size); @@ -84,7 +89,7 @@ impl<'a> ShapedText<'a> { .map(|glyph| Glyph { id: glyph.glyph_id, x_advance: glyph.x_advance - + if glyph.is_space() { + + if glyph.is_justifiable() { frame.size.x += justification; Em::from_length(justification, size) } else { @@ -115,16 +120,16 @@ impl<'a> ShapedText<'a> { frame } - /// How many spaces the text contains. - pub fn spaces(&self) -> usize { - self.glyphs.iter().filter(|g| g.is_space()).count() + /// How many justifiable glyphs the text contains. + pub fn justifiables(&self) -> usize { + self.glyphs.iter().filter(|g| g.is_justifiable()).count() } /// The width of the spaces in the text. pub fn stretch(&self) -> Length { self.glyphs .iter() - .filter(|g| g.is_space()) + .filter(|g| g.is_justifiable()) .map(|g| g.x_advance) .sum::() .resolve(self.styles.get(TextNode::SIZE)) diff --git a/tests/ref/text/justify.png b/tests/ref/text/justify.png index 90f84bb6e442e954ccbd62e0f3db9ff0d310f1d7..aa01016f829dd400a215e1dfe7bd733aadb3233f 100644 GIT binary patch literal 29155 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�r1cS)Ny_Tj3j8p_>)AznD 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 E3unHim;e9( literal 11714 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 diff --git a/tests/typ/text/justify.typ b/tests/typ/text/justify.typ index eb8feb61b..d19249ead 100644 --- a/tests/typ/text/justify.typ +++ b/tests/typ/text/justify.typ @@ -19,3 +19,9 @@ First line indents and hyphenation play nicely with justified text. #set par(justify: true) A B C \ D + +--- +// Test that justificating chinese text is at least a bit sensible. +#set page(width: 200pt) +#set par(justify: true) +中文维基百科使用汉字书写,汉字是汉族或华人的共同文字,是中国大陆、新加坡、马来西亚、台湾、香港、澳门的唯一官方文字或官方文字之一。25.9%,而美国和荷兰则分別占13.7%及8.2%。近年來,中国大陆地区的维基百科编辑者正在迅速增加;