summaryrefslogtreecommitdiff
path: root/src/library/layout.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2020-08-04 13:48:07 +0200
committerLaurenz <laurmaedje@gmail.com>2020-08-04 13:48:07 +0200
commit2467cd6272c13b618ad53c5dadff5b8c8e7885bf (patch)
tree6ad13ec06a04997564efc514b40daa3fb65233e2 /src/library/layout.rs
parented4fdcb0ada909f1cc3d7436334e253f0ec14d55 (diff)
Refactor function parsing ♻
Diffstat (limited to 'src/library/layout.rs')
-rw-r--r--src/library/layout.rs104
1 files changed, 0 insertions, 104 deletions
diff --git a/src/library/layout.rs b/src/library/layout.rs
deleted file mode 100644
index f3ddaadf..00000000
--- a/src/library/layout.rs
+++ /dev/null
@@ -1,104 +0,0 @@
-use crate::length::ScaleLength;
-use super::*;
-
-function! {
- /// `box`: Layouts content into a box.
- #[derive(Debug, Clone, PartialEq)]
- pub struct BoxFunc {
- body: SyntaxTree,
- width: Option<ScaleLength>,
- height: Option<ScaleLength>,
- }
-
- parse(header, body, state, f) {
- Self {
- body: parse_maybe_body(body, state, f).unwrap_or(SyntaxTree::new()),
- width: header.args.key.get::<ScaleLength>("width", f),
- height: header.args.key.get::<ScaleLength>("height", f),
- }
- }
-
- layout(self, ctx, f) {
- ctx.spaces.truncate(1);
- ctx.repeat = false;
-
- self.width.with(|v| {
- let length = v.raw_scaled(ctx.base.x);
- ctx.base.x = length;
- ctx.spaces[0].size.x = length;
- ctx.spaces[0].expansion.horizontal = true;
- });
-
- self.height.with(|v| {
- let length = v.raw_scaled(ctx.base.y);
- ctx.base.y = length;
- ctx.spaces[0].size.y = length;
- ctx.spaces[0].expansion.vertical = true;
- });
-
- let layouted = layout(&self.body, ctx).await;
- let layout = layouted.output.into_iter().next().unwrap();
- f.extend(layouted.feedback);
-
- vec![Add(layout)]
- }
-}
-
-function! {
- /// `align`: Aligns content along the layouting axes.
- #[derive(Debug, Clone, PartialEq)]
- pub struct AlignFunc {
- body: Option<SyntaxTree>,
- aligns: SpanVec<SpecAlign>,
- h: Option<Spanned<SpecAlign>>,
- v: Option<Spanned<SpecAlign>>,
- }
-
- parse(header, body, state, f) {
- Self {
- body: parse_maybe_body(body, state, f),
- aligns: header.args.pos.all::<Spanned<SpecAlign>>().collect(),
- h: header.args.key.get::<Spanned<SpecAlign>>("horizontal", f),
- v: header.args.key.get::<Spanned<SpecAlign>>("vertical", f),
- }
- }
-
- layout(self, ctx, f) {
- ctx.base = ctx.spaces[0].size;
-
- let axes = ctx.axes;
- let all = self.aligns.iter()
- .map(|align| {
- let spec = align.v.axis().unwrap_or(axes.primary.axis());
- (spec, align)
- })
- .chain(self.h.iter().map(|align| (Horizontal, align)))
- .chain(self.v.iter().map(|align| (Vertical, align)));
-
- let mut had = [false; 2];
- for (axis, align) in all {
- if align.v.axis().map(|a| a != axis).unwrap_or(false) {
- error!(
- @f, align.span,
- "invalid alignment {} for {} axis", align.v, axis,
- );
- } else if had[axis as usize] {
- error!(@f, align.span, "duplicate alignment for {} axis", axis);
- } else {
- had[axis as usize] = true;
- let gen_axis = axis.to_generic(ctx.axes);
- let gen_align = align.v.to_generic(ctx.axes);
- *ctx.align.get_mut(gen_axis) = gen_align;
- }
- }
-
- match &self.body {
- Some(body) => {
- let layouted = layout(body, ctx).await;
- f.extend(layouted.feedback);
- vec![AddMultiple(layouted.output)]
- }
- None => vec![SetAlignment(ctx.align)],
- }
- }
-}