diff options
Diffstat (limited to 'src/library/stack.rs')
| -rw-r--r-- | src/library/stack.rs | 44 |
1 files changed, 20 insertions, 24 deletions
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<Value> { enum Child { Spacing(Spacing), - Any(Template), + Any(Node), } castable! { @@ -17,38 +17,34 @@ pub fn stack(_: &mut EvalContext, args: &mut Args) -> TypResult<Value> { 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<Child> = 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. |
