summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2021-12-22 19:04:35 +0100
committerLaurenz <laurmaedje@gmail.com>2021-12-22 19:19:32 +0100
commit438255519e88bb790480306b9a9b452aaf054519 (patch)
treebadd3076f6146cec34c55764600df5124c408521 /src/library
parent11565a40b315212474f52eb576a9fd92b11f1132 (diff)
Review One: A Set Rules Story
Diffstat (limited to 'src/library')
-rw-r--r--src/library/heading.rs2
-rw-r--r--src/library/list.rs2
-rw-r--r--src/library/page.rs15
-rw-r--r--src/library/par.rs2
-rw-r--r--src/library/spacing.rs4
-rw-r--r--src/library/stack.rs8
-rw-r--r--src/library/text.rs2
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)