summaryrefslogtreecommitdiff
path: root/src/library/align.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2020-08-17 23:45:03 +0200
committerLaurenz <laurmaedje@gmail.com>2020-08-17 23:45:03 +0200
commit6d7e7d945b315469b80bca3466a96534b2a17639 (patch)
tree1b6c5e0ae7fb683ff7f3b6b1d961151a8e467a80 /src/library/align.rs
parent3cbca56a7195bb2a7996530d584300d697c11dc8 (diff)
Tidy up library functions 🧺
Diffstat (limited to 'src/library/align.rs')
-rw-r--r--src/library/align.rs40
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)
}