summaryrefslogtreecommitdiff
path: root/src/library/align.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2022-01-05 14:49:14 +0100
committerLaurenz <laurmaedje@gmail.com>2022-01-05 15:06:42 +0100
commitf7e8624b4cf31744d600167dd7f3a9d9d1626014 (patch)
tree0941c8db497befc47a666d3d1384db4ab9fc5133 /src/library/align.rs
parent4c81a5d43eabd959dbb500a8076f99f21bd037bd (diff)
Refactor
Diffstat (limited to 'src/library/align.rs')
-rw-r--r--src/library/align.rs56
1 files changed, 28 insertions, 28 deletions
diff --git a/src/library/align.rs b/src/library/align.rs
index 32735244..e8dfabb1 100644
--- a/src/library/align.rs
+++ b/src/library/align.rs
@@ -7,33 +7,7 @@ use super::ParNode;
pub fn align(_: &mut EvalContext, args: &mut Args) -> TypResult<Value> {
let aligns: Spec<_> = args.find().unwrap_or_default();
let body: PackedNode = args.expect("body")?;
-
- let mut styles = StyleMap::new();
- if let Some(align) = aligns.x {
- styles.set(ParNode::ALIGN, align);
- }
-
- Ok(Value::block(body.styled(styles).aligned(aligns)))
-}
-
-dynamic! {
- Align: "alignment",
-}
-
-dynamic! {
- Spec<Align>: "2d alignment",
-}
-
-castable! {
- Spec<Option<Align>>,
- Expected: "1d or 2d alignment",
- @align: Align => {
- let mut aligns = Spec::default();
- aligns.set(align.axis(), Some(*align));
- aligns
- },
- @aligns: Spec<Align> => aligns.map(Some),
-
+ Ok(Value::block(body.aligned(aligns)))
}
/// A node that aligns its child.
@@ -56,8 +30,14 @@ impl Layout for AlignNode {
let mut pod = regions.clone();
pod.expand &= self.aligns.map_is_none();
+ // Align paragraphs inside the child.
+ let mut passed = StyleMap::new();
+ if let Some(align) = self.aligns.x {
+ passed.set(ParNode::ALIGN, align);
+ }
+
// Layout the child.
- let mut frames = self.child.layout(ctx, &pod, styles);
+ let mut frames = self.child.layout(ctx, &pod, passed.chain(&styles));
for ((current, base), Constrained { item: frame, cts }) in
regions.iter().zip(&mut frames)
@@ -78,3 +58,23 @@ impl Layout for AlignNode {
frames
}
}
+
+dynamic! {
+ Align: "alignment",
+}
+
+dynamic! {
+ Spec<Align>: "2d alignment",
+}
+
+castable! {
+ Spec<Option<Align>>,
+ Expected: "1d or 2d alignment",
+ @align: Align => {
+ let mut aligns = Spec::default();
+ aligns.set(align.axis(), Some(*align));
+ aligns
+ },
+ @aligns: Spec<Align> => aligns.map(Some),
+
+}