diff options
| author | Laurenz <laurmaedje@gmail.com> | 2021-12-22 19:04:35 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2021-12-22 19:19:32 +0100 |
| commit | 438255519e88bb790480306b9a9b452aaf054519 (patch) | |
| tree | badd3076f6146cec34c55764600df5124c408521 /src/library | |
| parent | 11565a40b315212474f52eb576a9fd92b11f1132 (diff) | |
Review One: A Set Rules Story
Diffstat (limited to 'src/library')
| -rw-r--r-- | src/library/heading.rs | 2 | ||||
| -rw-r--r-- | src/library/list.rs | 2 | ||||
| -rw-r--r-- | src/library/page.rs | 15 | ||||
| -rw-r--r-- | src/library/par.rs | 2 | ||||
| -rw-r--r-- | src/library/spacing.rs | 4 | ||||
| -rw-r--r-- | src/library/stack.rs | 8 | ||||
| -rw-r--r-- | src/library/text.rs | 2 |
7 files changed, 22 insertions, 13 deletions
diff --git a/src/library/heading.rs b/src/library/heading.rs index c9777577..96ff2688 100644 --- a/src/library/heading.rs +++ b/src/library/heading.rs @@ -30,7 +30,7 @@ impl Construct for HeadingNode { } impl Set for HeadingNode { - fn set(styles: &mut Styles, args: &mut Args) -> TypResult<()> { + fn set(args: &mut Args, styles: &mut Styles) -> TypResult<()> { styles.set_opt(Self::FAMILY, args.named("family")?); styles.set_opt(Self::FILL, args.named("fill")?); Ok(()) diff --git a/src/library/list.rs b/src/library/list.rs index 74f0abe8..25eb3600 100644 --- a/src/library/list.rs +++ b/src/library/list.rs @@ -35,7 +35,7 @@ impl<L: Labelling> Construct for ListNode<L> { } impl<L: Labelling> Set for ListNode<L> { - fn set(styles: &mut Styles, args: &mut Args) -> TypResult<()> { + fn set(args: &mut Args, styles: &mut Styles) -> TypResult<()> { styles.set_opt(Self::LABEL_INDENT, args.named("label-indent")?); styles.set_opt(Self::BODY_INDENT, args.named("body-indent")?); Ok(()) diff --git a/src/library/page.rs b/src/library/page.rs index 7fbcd058..0e690770 100644 --- a/src/library/page.rs +++ b/src/library/page.rs @@ -12,7 +12,7 @@ pub fn pagebreak(_: &mut EvalContext, _: &mut Args) -> TypResult<Value> { } /// Layouts its child onto one or multiple pages. -#[derive(Hash)] +#[derive(Clone, PartialEq, Hash)] pub struct PageNode { /// The node producing the content. pub child: PackedNode, @@ -44,12 +44,15 @@ impl PageNode { impl Construct for PageNode { fn construct(_: &mut EvalContext, args: &mut Args) -> TypResult<Node> { - Ok(Node::Page(args.expect::<Node>("body")?.into_block())) + Ok(Node::Page(Self { + child: args.expect::<Node>("body")?.into_block(), + styles: Styles::new(), + })) } } impl Set for PageNode { - fn set(styles: &mut Styles, args: &mut Args) -> TypResult<()> { + fn set(args: &mut Args, styles: &mut Styles) -> TypResult<()> { if let Some(paper) = args.named::<Paper>("paper")?.or_else(|| args.find()) { styles.set(Self::CLASS, paper.class()); styles.set(Self::WIDTH, Smart::Custom(paper.width())); @@ -79,6 +82,12 @@ impl Set for PageNode { } impl PageNode { + /// Style the node with styles from a style map. + pub fn styled(mut self, styles: Styles) -> Self { + self.styles.apply(&styles); + self + } + /// Layout the page run into a sequence of frames, one per page. pub fn layout(&self, ctx: &mut LayoutContext) -> Vec<Rc<Frame>> { let prev = ctx.styles.clone(); diff --git a/src/library/par.rs b/src/library/par.rs index 5dffd1c0..26280d8e 100644 --- a/src/library/par.rs +++ b/src/library/par.rs @@ -43,7 +43,7 @@ impl Construct for ParNode { } impl Set for ParNode { - fn set(styles: &mut Styles, args: &mut Args) -> TypResult<()> { + fn set(args: &mut Args, styles: &mut Styles) -> TypResult<()> { let spacing = args.named("spacing")?; let leading = args.named("leading")?; diff --git a/src/library/spacing.rs b/src/library/spacing.rs index 4c6c2017..b5ecce69 100644 --- a/src/library/spacing.rs +++ b/src/library/spacing.rs @@ -16,12 +16,12 @@ pub fn v(_: &mut EvalContext, args: &mut Args) -> TypResult<Value> { ))) } -/// A single run of text with the same style. +/// Explicit spacing in a flow or paragraph. #[derive(Hash)] pub struct SpacingNode { /// The kind of spacing. pub kind: SpacingKind, - /// The rspacing's styles. + /// The spacing's styles. pub styles: Styles, } diff --git a/src/library/stack.rs b/src/library/stack.rs index 285ab9d5..8a1f0fd5 100644 --- a/src/library/stack.rs +++ b/src/library/stack.rs @@ -9,17 +9,17 @@ pub fn stack(_: &mut EvalContext, args: &mut Args) -> TypResult<Value> { let spacing = args.named("spacing")?; let mut children = vec![]; - let mut delayed = None; + let mut deferred = None; // Build the list of stack children. for child in args.all() { match child { - StackChild::Spacing(_) => delayed = None, + StackChild::Spacing(_) => deferred = None, StackChild::Node(_) => { - if let Some(v) = delayed { + if let Some(v) = deferred { children.push(StackChild::spacing(v)); } - delayed = spacing; + deferred = spacing; } } children.push(child); diff --git a/src/library/text.rs b/src/library/text.rs index 4ff9b5cd..99c68f79 100644 --- a/src/library/text.rs +++ b/src/library/text.rs @@ -133,7 +133,7 @@ impl Construct for TextNode { } impl Set for TextNode { - fn set(styles: &mut Styles, args: &mut Args) -> TypResult<()> { + fn set(args: &mut Args, styles: &mut Styles) -> TypResult<()> { let list = args.named("family")?.or_else(|| { let families: Vec<_> = args.all().collect(); (!families.is_empty()).then(|| families) |
