From 03fddaf3aea778057aedd74dbcb27bae971ec22f Mon Sep 17 00:00:00 2001 From: Laurenz Date: Fri, 24 Jan 2020 12:44:04 +0100 Subject: =?UTF-8?q?Non-fatal=20argument=20parsing=20=F0=9F=8C=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/library/maps/padding.rs | 95 --------------------------------------------- 1 file changed, 95 deletions(-) delete mode 100644 src/library/maps/padding.rs (limited to 'src/library/maps/padding.rs') diff --git a/src/library/maps/padding.rs b/src/library/maps/padding.rs deleted file mode 100644 index e2d0ea09..00000000 --- a/src/library/maps/padding.rs +++ /dev/null @@ -1,95 +0,0 @@ -use super::*; -use AxisKey::*; -use AlignmentKey::*; -use PaddingKey::*; - - -/// An argument key which identifies a margin or padding target. -/// -/// A is the used axis type. -#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)] -pub enum PaddingKey { - /// All four sides should have the specified padding. - All, - /// Both sides of the given axis should have the specified padding. - Both(A), - /// Only the given side of the given axis should have the specified padding. - Side(A, AlignmentKey), -} - -key!(PaddingKey, "axis or side", - "horizontal" | "h" => Both(Specific(Horizontal)), - "vertical" | "v" => Both(Specific(Vertical)), - "primary" | "p" => Both(Generic(Primary)), - "secondary" | "s" => Both(Generic(Secondary)), - - "left" => Side(Specific(Horizontal), Left), - "right" => Side(Specific(Horizontal), Right), - "top" => Side(Specific(Vertical), Top), - "bottom" => Side(Specific(Vertical), Bottom), - - "primary-origin" => Side(Generic(Primary), Align(Origin)), - "primary-end" => Side(Generic(Primary), Align(End)), - "secondary-origin" => Side(Generic(Secondary), Align(Origin)), - "secondary-end" => Side(Generic(Secondary), Align(End)), - "horizontal-origin" => Side(Specific(Horizontal), Align(Origin)), - "horizontal-end" => Side(Specific(Horizontal), Align(End)), - "vertical-origin" => Side(Specific(Vertical), Align(Origin)), - "vertical-end" => Side(Specific(Vertical), Align(End)), -); - -/// A map for storing padding at sides. -#[derive(Debug, Clone, PartialEq)] -pub struct PaddingMap(ConsistentMap, Option>); - -impl PaddingMap { - /// Parse a padding map from the function args. - pub fn new(args: &mut FuncArgs) -> ParseResult { - let mut map = ConsistentMap::new(); - map.add_opt(PaddingKey::All, - args.get_pos_opt::>()?.map(Into::into))?; - - for arg in args.iter_keys() { - let key = PaddingKey::from_ident(&arg.key)?; - let size = DefaultKey::::from_expr(arg.value)?.into(); - map.add(key, size)?; - } - - Ok(PaddingMap(map)) - } - - /// Apply the specified padding on the size box. - pub fn apply(&self, axes: LayoutAxes, padding: &mut ValueBox>) - -> LayoutResult<()> { - use PaddingKey::*; - - let map = self.0.dedup(|key, &val| { - Ok((match key { - All => All, - Both(axis) => Both(axis.to_specific(axes)), - Side(axis, alignment) => { - let axis = axis.to_specific(axes); - Side(axis, alignment.to_specific(axes, axis)) - } - }, val)) - })?; - - map.with(All, |&val| padding.set_all(val)); - map.with(Both(Horizontal), |&val| padding.set_horizontal(val)); - map.with(Both(Vertical), |&val| padding.set_vertical(val)); - - for (key, &val) in map.iter() { - if let Side(_, alignment) = key { - match alignment { - AlignmentKey::Left => padding.left = val, - AlignmentKey::Right => padding.right = val, - AlignmentKey::Top => padding.top = val, - AlignmentKey::Bottom => padding.bottom = val, - _ => {}, - } - } - } - - Ok(()) - } -} -- cgit v1.2.3