diff options
| author | Laurenz <laurmaedje@gmail.com> | 2020-08-17 23:45:03 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2020-08-17 23:45:03 +0200 |
| commit | 6d7e7d945b315469b80bca3466a96534b2a17639 (patch) | |
| tree | 1b6c5e0ae7fb683ff7f3b6b1d961151a8e467a80 /src/library/align.rs | |
| parent | 3cbca56a7195bb2a7996530d584300d697c11dc8 (diff) | |
Tidy up library functions 🧺
Diffstat (limited to 'src/library/align.rs')
| -rw-r--r-- | src/library/align.rs | 40 |
1 files changed, 23 insertions, 17 deletions
diff --git a/src/library/align.rs b/src/library/align.rs index c716faef..14692eca 100644 --- a/src/library/align.rs +++ b/src/library/align.rs @@ -10,28 +10,30 @@ use super::*; /// - `vertical`: Any of `top`, `bottom` or `center`. /// /// There may not be two alignment specifications for the same axis. -pub async fn align(mut args: TableValue, mut ctx: LayoutContext<'_>) -> Pass<Value> { +pub async fn align(_: Span, mut args: TableValue, mut ctx: LayoutContext<'_>) -> Pass<Value> { let mut f = Feedback::new(); let content = args.take::<SyntaxTree>(); - let aligns: Vec<_> = args.take_all_num_vals::<Spanned<SpecAlign>>().collect(); - let h = args.take_with_key::<_, Spanned<SpecAlign>>("horizontal", &mut f); - let v = args.take_with_key::<_, Spanned<SpecAlign>>("vertical", &mut f); - args.unexpected(&mut f); - - ctx.base = ctx.spaces[0].size; - let axes = ctx.axes; - let all = aligns.iter() - .map(|align| { - let spec = align.v.axis().unwrap_or(axes.primary.axis()); - (spec, align) - }) - .chain(h.iter().map(|align| (Horizontal, align))) - .chain(v.iter().map(|align| (Vertical, align))); + let h = args.take_key::<Spanned<SpecAlign>>("horizontal", &mut f); + let v = args.take_key::<Spanned<SpecAlign>>("vertical", &mut f); + let all = args + .take_all_num_vals::<Spanned<SpecAlign>>() + .map(|align| (align.v.axis(), align)) + .chain(h.into_iter().map(|align| (Some(Horizontal), align))) + .chain(v.into_iter().map(|align| (Some(Vertical), align))); let mut had = [false; 2]; for (axis, align) in all { + let axis = axis.unwrap_or_else(|| align.v.axis().unwrap_or_else(|| { + let primary = ctx.axes.primary.axis(); + if !had[primary as usize] { + primary + } else { + ctx.axes.secondary.axis() + } + })); + if align.v.axis().map(|a| a != axis).unwrap_or(false) { error!( @f, align.span, @@ -47,12 +49,16 @@ pub async fn align(mut args: TableValue, mut ctx: LayoutContext<'_>) -> Pass<Val } } - Pass::commands(match content { + let commands = match content { Some(tree) => { + ctx.base = ctx.spaces[0].size; let layouted = layout(&tree, ctx).await; f.extend(layouted.feedback); vec![AddMultiple(layouted.output)] } None => vec![SetAlignment(ctx.align)], - }, f) + }; + + args.unexpected(&mut f); + Pass::commands(commands, f) } |
