From 26bdc1f0f6fe8113d7fcfb4d5aca46aa5238ccd8 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Sun, 5 Dec 2021 12:54:03 +0100 Subject: Set Rules Episode I: The Phantom Style --- src/library/stack.rs | 44 ++++++++++++++++++++------------------------ 1 file changed, 20 insertions(+), 24 deletions(-) (limited to 'src/library/stack.rs') diff --git a/src/library/stack.rs b/src/library/stack.rs index 2b1371ab..606632af 100644 --- a/src/library/stack.rs +++ b/src/library/stack.rs @@ -7,7 +7,7 @@ use super::{AlignNode, Spacing}; pub fn stack(_: &mut EvalContext, args: &mut Args) -> TypResult { enum Child { Spacing(Spacing), - Any(Template), + Any(Node), } castable! { @@ -17,38 +17,34 @@ pub fn stack(_: &mut EvalContext, args: &mut Args) -> TypResult { Value::Relative(v) => Self::Spacing(Spacing::Linear(v.into())), Value::Linear(v) => Self::Spacing(Spacing::Linear(v)), Value::Fractional(v) => Self::Spacing(Spacing::Fractional(v)), - Value::Template(v) => Self::Any(v), + Value::Node(v) => Self::Any(v), } let dir = args.named("dir")?.unwrap_or(Dir::TTB); let spacing = args.named("spacing")?; - let list: Vec = args.all().collect(); - - Ok(Value::Template(Template::from_block(move |style| { - let mut children = vec![]; - let mut delayed = None; - - // Build the list of stack children. - for child in &list { - match child { - Child::Spacing(v) => { - children.push(StackChild::Spacing(*v)); - delayed = None; - } - Child::Any(child) => { - if let Some(v) = delayed { - children.push(StackChild::Spacing(v)); - } - let node = child.pack(style); - children.push(StackChild::Node(node)); - delayed = spacing; + let mut children = vec![]; + let mut delayed = None; + + // Build the list of stack children. + for child in args.all() { + match child { + Child::Spacing(v) => { + children.push(StackChild::Spacing(v)); + delayed = None; + } + Child::Any(child) => { + if let Some(v) = delayed { + children.push(StackChild::Spacing(v)); } + + children.push(StackChild::Node(child.into_block())); + delayed = spacing; } } + } - StackNode { dir, children } - }))) + Ok(Value::block(StackNode { dir, children })) } /// A node that stacks its children. -- cgit v1.2.3