diff options
| author | Laurenz <laurmaedje@gmail.com> | 2021-10-26 14:51:48 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2021-10-26 14:56:10 +0200 |
| commit | fb0cd3df6e1e1077c6f19c319726c9aa9678325b (patch) | |
| tree | bde325cdcb0efa59324781bf2af8c4303e5a25de /src/library | |
| parent | 1ca4ff69e235ca6dde9ef498a8377d0586f2519c (diff) | |
Fr in stack and par
Diffstat (limited to 'src/library')
| -rw-r--r-- | src/library/layout.rs | 21 | ||||
| -rw-r--r-- | src/library/mod.rs | 9 |
2 files changed, 19 insertions, 11 deletions
diff --git a/src/library/layout.rs b/src/library/layout.rs index 4b416156..4ef0926f 100644 --- a/src/library/layout.rs +++ b/src/library/layout.rs @@ -130,17 +130,15 @@ pub fn align(ctx: &mut EvalContext, args: &mut Args) -> TypResult<Value> { /// `h`: Horizontal spacing. pub fn h(_: &mut EvalContext, args: &mut Args) -> TypResult<Value> { - let spacing = args.expect("spacing")?; let mut template = Template::new(); - template.spacing(GenAxis::Inline, spacing); + template.spacing(GenAxis::Inline, args.expect("spacing")?); Ok(Value::Template(template)) } /// `v`: Vertical spacing. pub fn v(_: &mut EvalContext, args: &mut Args) -> TypResult<Value> { - let spacing = args.expect("spacing")?; let mut template = Template::new(); - template.spacing(GenAxis::Block, spacing); + template.spacing(GenAxis::Block, args.expect("spacing")?); Ok(Value::Template(template)) } @@ -196,20 +194,21 @@ pub fn pad(_: &mut EvalContext, args: &mut Args) -> TypResult<Value> { /// `stack`: Stack children along an axis. pub fn stack(_: &mut EvalContext, args: &mut Args) -> TypResult<Value> { enum Child { - Spacing(Linear), + Spacing(Spacing), Any(Template), } castable! { - Child: "linear or template", - Value::Length(v) => Self::Spacing(v.into()), - Value::Relative(v) => Self::Spacing(v.into()), - Value::Linear(v) => Self::Spacing(v), + Child: "linear, fractional or template", + Value::Length(v) => Self::Spacing(Spacing::Linear(v.into())), + 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), } let dir = args.named("dir")?.unwrap_or(Dir::TTB); - let spacing = args.named::<Linear>("spacing")?; + let spacing = args.named("spacing")?; let list: Vec<Child> = args.all().collect(); Ok(Value::Template(Template::from_block(move |style| { @@ -229,7 +228,7 @@ pub fn stack(_: &mut EvalContext, args: &mut Args) -> TypResult<Value> { } let node = template.to_stack(style).into(); - children.push(StackChild::Any(node, style.aligns.block)); + children.push(StackChild::Node(node, style.aligns.block)); delayed = spacing; } } diff --git a/src/library/mod.rs b/src/library/mod.rs index 919f7532..6f8881c3 100644 --- a/src/library/mod.rs +++ b/src/library/mod.rs @@ -20,6 +20,7 @@ use crate::diag::{At, TypResult}; use crate::eval::{Args, Array, EvalContext, Scope, Str, Template, Value}; use crate::font::{FontFamily, FontStretch, FontStyle, FontWeight, VerticalFontMetric}; use crate::geom::*; +use crate::layout::Spacing; use crate::style::Style; use crate::syntax::{Span, Spanned}; @@ -144,3 +145,11 @@ dynamic! { Value::Relative(v) => Self::Linear(v.into()), Value::Linear(v) => Self::Linear(v), } + +castable! { + Spacing: "linear or fractional", + Value::Length(v) => Self::Linear(v.into()), + Value::Relative(v) => Self::Linear(v.into()), + Value::Linear(v) => Self::Linear(v), + Value::Fractional(v) => Self::Fractional(v), +} |
