summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMALO <57839069+MDLC01@users.noreply.github.com>2023-10-22 13:43:24 +0200
committerGitHub <noreply@github.com>2023-10-22 13:43:24 +0200
commitcf9ca6cb594e27237637bf15b00f9df8c5e11999 (patch)
tree21d2f4d0f77f6f3d121f9a65f5fc8c5f969a0509
parent3ed6462ee0a63eb3946ba48dc82b525f7c5c1079 (diff)
Fix compiler panic for float with no vertical alignment (#2437)
-rw-r--r--crates/typst-library/src/layout/place.rs5
-rw-r--r--tests/typ/layout/place-float-auto.typ12
2 files changed, 16 insertions, 1 deletions
diff --git a/crates/typst-library/src/layout/place.rs b/crates/typst-library/src/layout/place.rs
index 39a38b16..64cbd9a8 100644
--- a/crates/typst-library/src/layout/place.rs
+++ b/crates/typst-library/src/layout/place.rs
@@ -95,7 +95,10 @@ impl Layout for PlaceElem {
let float = self.float(styles);
let alignment = self.alignment(styles);
- if float && alignment.map_or(false, |align| align.y() == Some(VAlign::Horizon)) {
+ if float
+ && alignment
+ .map_or(false, |align| matches!(align.y(), None | Some(VAlign::Horizon)))
+ {
bail!(self.span(), "floating placement must be `auto`, `top`, or `bottom`");
} else if !float && alignment.is_auto() {
return Err("automatic positioning is only available for floating placement")
diff --git a/tests/typ/layout/place-float-auto.typ b/tests/typ/layout/place-float-auto.typ
index 799c9fc7..2ca3dc3a 100644
--- a/tests/typ/layout/place-float-auto.typ
+++ b/tests/typ/layout/place-float-auto.typ
@@ -17,3 +17,15 @@
---
// Error: 2-45 floating placement must be `auto`, `top`, or `bottom`
#place(center + horizon, float: true)[Hello]
+
+---
+// Error: 2-36 floating placement must be `auto`, `top`, or `bottom`
+#place(horizon, float: true)[Hello]
+
+---
+// Error: 2-27 floating placement must be `auto`, `top`, or `bottom`
+#place(float: true)[Hello]
+
+---
+// Error: 2-34 floating placement must be `auto`, `top`, or `bottom`
+#place(right, float: true)[Hello]