summaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
authorMax <me@mkor.je>2024-11-27 11:16:25 +0000
committerGitHub <noreply@github.com>2024-11-27 11:16:25 +0000
commit578ba640f3666b5dc309ec0a03d6f6d5f2ae14a2 (patch)
tree24a4c698c741e53b3d9f33fbbc0d849af94bab1a /crates
parentc29c96562ddb9caec04088f78f48dcd9cca2c61a (diff)
Fix weak spacing being ignored unconditionally in `math.lr` (#5477)
Diffstat (limited to 'crates')
-rw-r--r--crates/typst-layout/src/math/lr.rs14
1 files changed, 11 insertions, 3 deletions
diff --git a/crates/typst-layout/src/math/lr.rs b/crates/typst-layout/src/math/lr.rs
index d195e67d..01a7f4cc 100644
--- a/crates/typst-layout/src/math/lr.rs
+++ b/crates/typst-layout/src/math/lr.rs
@@ -62,7 +62,7 @@ pub fn layout_lr(
}
// Handle MathFragment::Variant fragments that should be scaled up.
- for fragment in inner_fragments {
+ for fragment in inner_fragments.iter_mut() {
if let MathFragment::Variant(ref mut variant) = fragment {
if variant.mid_stretched == Some(false) {
variant.mid_stretched = Some(true);
@@ -74,10 +74,18 @@ pub fn layout_lr(
// Remove weak SpacingFragment immediately after the opening or immediately
// before the closing.
let mut index = 0;
+ let opening_exists = inner_fragments
+ .first()
+ .is_some_and(|f| f.class() == MathClass::Opening);
+ let closing_exists = inner_fragments
+ .last()
+ .is_some_and(|f| f.class() == MathClass::Closing);
fragments.retain(|fragment| {
+ let discard = (index == start_idx + 1 && opening_exists
+ || index + 2 == end_idx && closing_exists)
+ && matches!(fragment, MathFragment::Spacing(_, true));
index += 1;
- (index != start_idx + 2 && index + 1 != end_idx)
- || !matches!(fragment, MathFragment::Spacing(_, true))
+ !discard
});
ctx.extend(fragments);