summaryrefslogtreecommitdiff
path: root/src/library/page.rs
diff options
context:
space:
mode:
authorMartin Haug <mhaug@live.de>2021-12-18 18:04:26 +0100
committerMartin Haug <mhaug@live.de>2021-12-26 15:59:24 +0100
commitb22ce6f8b84e0a75d162feb6f3699e26f86f2453 (patch)
tree76c564484d2d020d23ffbb75b133fc8bacae9454 /src/library/page.rs
parentf6c7a8292dc1ab0560408fca9d74505e9d7cf13a (diff)
Introduce equal-width columns
Diffstat (limited to 'src/library/page.rs')
-rw-r--r--src/library/page.rs22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/library/page.rs b/src/library/page.rs
index 0e690770..6585edb9 100644
--- a/src/library/page.rs
+++ b/src/library/page.rs
@@ -4,7 +4,7 @@ use std::fmt::{self, Display, Formatter};
use std::str::FromStr;
use super::prelude::*;
-use super::PadNode;
+use super::{ColumnsNode, PadNode};
/// `pagebreak`: Start a new page.
pub fn pagebreak(_: &mut EvalContext, _: &mut Args) -> TypResult<Value> {
@@ -40,6 +40,10 @@ impl PageNode {
pub const BOTTOM: Smart<Linear> = Smart::Auto;
/// The page's background color.
pub const FILL: Option<Paint> = None;
+ /// How many columns the page has.
+ pub const COLUMNS: usize = 1;
+ /// How many columns the page has.
+ pub const COLUMN_GUTTER: Linear = Relative::new(0.04).into();
}
impl Construct for PageNode {
@@ -76,6 +80,8 @@ impl Set for PageNode {
styles.set_opt(Self::RIGHT, args.named("right")?.or(margins));
styles.set_opt(Self::BOTTOM, args.named("bottom")?.or(margins));
styles.set_opt(Self::FILL, args.named("fill")?);
+ styles.set_opt(Self::COLUMNS, args.named("columns")?);
+ styles.set_opt(Self::COLUMN_GUTTER, args.named("column-gutter")?);
Ok(())
}
@@ -112,8 +118,20 @@ impl PageNode {
bottom: ctx.styles.get(Self::BOTTOM).unwrap_or(default.bottom),
};
+ let columns = ctx.styles.get(Self::COLUMNS);
+ let child = if ctx.styles.get(Self::COLUMNS) > 1 {
+ ColumnsNode {
+ child: self.child.clone(),
+ columns,
+ gutter: ctx.styles.get(Self::COLUMN_GUTTER),
+ }
+ .pack()
+ } else {
+ self.child.clone()
+ };
+
// Pad the child.
- let padded = PadNode { child: self.child.clone(), padding }.pack();
+ let padded = PadNode { child, padding }.pack();
// Layout the child.
let expand = size.map(Length::is_finite);