summaryrefslogtreecommitdiff
path: root/src/library/align.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/library/align.rs')
-rw-r--r--src/library/align.rs37
1 files changed, 16 insertions, 21 deletions
diff --git a/src/library/align.rs b/src/library/align.rs
index 417d8f07..eea25dfa 100644
--- a/src/library/align.rs
+++ b/src/library/align.rs
@@ -1,29 +1,25 @@
use crate::func::prelude::*;
+use super::keys::*;
function! {
/// `align`: Aligns content along the layouting axes.
#[derive(Debug, PartialEq)]
pub struct Align {
body: Option<SyntaxTree>,
- map: ArgMap<Key, AlignmentKey>,
+ map: ConsistentMap<Key, AlignmentKey>,
}
parse(args, body, ctx) {
- let mut map = ArgMap::new();
- map.put(Key::First, args.get_pos_opt::<ArgIdent>()?)?;
- map.put(Key::Second, args.get_pos_opt::<ArgIdent>()?)?;
+ let mut map = ConsistentMap::new();
+
+ map.add_opt_span(Key::First, args.get_pos_opt::<AlignmentKey>()?)?;
+ map.add_opt_span(Key::Second, args.get_pos_opt::<AlignmentKey>()?)?;
for arg in args.keys() {
- let key = match arg.val.0.val {
- "horizontal" => Key::Axis(AxisKey::Horizontal),
- "vertical" => Key::Axis(AxisKey::Vertical),
- "primary" => Key::Axis(AxisKey::Primary),
- "secondary" => Key::Axis(AxisKey::Secondary),
- _ => error!(unexpected_argument),
- };
+ let axis = AxisKey::from_ident(&arg.v.key)?;
+ let value = AlignmentKey::from_expr(arg.v.value)?;
- let value = AlignmentKey::parse(arg.val.1.val)?;
- map.add(key, value);
+ map.add(Key::Axis(axis), value)?;
}
Align {
@@ -34,24 +30,23 @@ function! {
layout(self, mut ctx) {
let axes = ctx.axes;
- let basic = axes.primary.is_horizontal();
- let map = self.map.dedup(|key, val| {
+ let map = self.map.dedup(|key, alignment| {
let axis = match key {
- Key::First => val.axis(axes, GenericAxisKind::Primary),
- Key::Second => val.axis(axes, GenericAxisKind::Secondary),
+ Key::First => alignment.axis(axes, GenericAxisKind::Primary),
+ Key::Second => alignment.axis(axes, GenericAxisKind::Secondary),
Key::Axis(AxisKey::Primary) => GenericAxisKind::Primary,
Key::Axis(AxisKey::Secondary) => GenericAxisKind::Secondary,
Key::Axis(AxisKey::Horizontal) => axes.horizontal(),
Key::Axis(AxisKey::Vertical) => axes.vertical(),
};
- let alignment = val.generic(axes, axis)?;
- Ok((key, alignment))
+ let alignment = alignment.generic(axes, axis)?;
+ Ok((axis, alignment))
})?;
- map.with(GenericAxisKind::Primary, |val| ctx.alignment.primary = val);
- map.with(GenericAxisKind::Secondary, |val| ctx.alignment.secondary = val);
+ map.with(GenericAxisKind::Primary, |&val| ctx.alignment.primary = val);
+ map.with(GenericAxisKind::Secondary, |&val| ctx.alignment.secondary = val);
match &self.body {
Some(body) => vec![AddMultiple(layout_tree(&body, ctx)?)],