summaryrefslogtreecommitdiff
path: root/library
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2023-05-24 22:02:28 +0200
committerLaurenz <laurmaedje@gmail.com>2023-05-24 22:03:50 +0200
commit3eb1f31e904151f5bee6300ef8d9dba0bbcce4c5 (patch)
treeccced53135f9309face55e8959397113dde72a71 /library
parent017027bf392f7be2e73428fa34a3d1ef0b8d255e (diff)
Fix panic in attachment layout
Diffstat (limited to 'library')
-rw-r--r--library/src/math/attach.rs24
1 files changed, 10 insertions, 14 deletions
diff --git a/library/src/math/attach.rs b/library/src/math/attach.rs
index bb6dca5f..cbf083c0 100644
--- a/library/src/math/attach.rs
+++ b/library/src/math/attach.rs
@@ -57,25 +57,24 @@ impl LayoutMath for AttachElem {
#[tracing::instrument(skip(ctx))]
fn layout_math(&self, ctx: &mut MathContext) -> SourceResult<()> {
type GetAttachment = fn(&AttachElem, styles: StyleChain) -> Option<Content>;
- let getarg = |ctx: &mut MathContext, getter: GetAttachment| {
+ let layout_attachment = |ctx: &mut MathContext, getter: GetAttachment| {
getter(self, ctx.styles())
.map(|elem| ctx.layout_fragment(&elem))
.transpose()
- .unwrap()
};
let base = ctx.layout_fragment(&self.base())?;
ctx.style(ctx.style.for_superscript());
- let arg_tl = getarg(ctx, Self::tl);
- let arg_tr = getarg(ctx, Self::tr);
- let arg_t = getarg(ctx, Self::t);
+ let tl = layout_attachment(ctx, Self::tl)?;
+ let tr = layout_attachment(ctx, Self::tr)?;
+ let t = layout_attachment(ctx, Self::t)?;
ctx.unstyle();
ctx.style(ctx.style.for_subscript());
- let arg_bl = getarg(ctx, Self::bl);
- let arg_br = getarg(ctx, Self::br);
- let arg_b = getarg(ctx, Self::b);
+ let bl = layout_attachment(ctx, Self::bl)?;
+ let br = layout_attachment(ctx, Self::br)?;
+ let b = layout_attachment(ctx, Self::b)?;
ctx.unstyle();
let as_limits = self.base().is::<LimitsElem>()
@@ -88,12 +87,9 @@ impl LayoutMath for AttachElem {
_ => false,
});
- let (t, tr) =
- if as_limits || arg_tr.is_some() { (arg_t, arg_tr) } else { (None, arg_t) };
- let (b, br) =
- if as_limits || arg_br.is_some() { (arg_b, arg_br) } else { (None, arg_b) };
-
- layout_attachments(ctx, base, [arg_tl, t, tr, arg_bl, b, br])
+ let (t, tr) = if as_limits || tr.is_some() { (t, tr) } else { (None, t) };
+ let (b, br) = if as_limits || br.is_some() { (b, br) } else { (None, b) };
+ layout_attachments(ctx, base, [tl, t, tr, bl, b, br])
}
}