diff options
Diffstat (limited to 'src/library/align.rs')
| -rw-r--r-- | src/library/align.rs | 37 |
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)?)], |
