summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2021-10-26 14:51:48 +0200
committerLaurenz <laurmaedje@gmail.com>2021-10-26 14:56:10 +0200
commitfb0cd3df6e1e1077c6f19c319726c9aa9678325b (patch)
treebde325cdcb0efa59324781bf2af8c4303e5a25de /src/library
parent1ca4ff69e235ca6dde9ef498a8377d0586f2519c (diff)
Fr in stack and par
Diffstat (limited to 'src/library')
-rw-r--r--src/library/layout.rs21
-rw-r--r--src/library/mod.rs9
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),
+}