summaryrefslogtreecommitdiff
path: root/src/library/page.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/library/page.rs')
-rw-r--r--src/library/page.rs14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/library/page.rs b/src/library/page.rs
index efb40f10..05709865 100644
--- a/src/library/page.rs
+++ b/src/library/page.rs
@@ -17,6 +17,9 @@ use crate::prelude::*;
/// - `bottom`: The bottom margin (length or relative to height).
/// - `flip`: Flips custom or paper-defined width and height (boolean).
pub fn page(mut args: Args, ctx: &mut EvalContext) -> Value {
+ let snapshot = ctx.state.clone();
+ let body = args.find::<SynTree>();
+
if let Some(paper) = args.find::<Paper>() {
ctx.state.page.class = paper.class;
ctx.state.page.size = paper.size();
@@ -57,8 +60,19 @@ pub fn page(mut args: Args, ctx: &mut EvalContext) -> Value {
std::mem::swap(&mut size.width, &mut size.height);
}
+ let main = args.get::<_, Spanned<Dir>>(ctx, "main");
+ let cross = args.get::<_, Spanned<Dir>>(ctx, "cross");
+ ctx.set_flow(Gen::new(main, cross));
+
args.done(ctx);
+ if let Some(body) = body {
+ ctx.end_page_group();
+ ctx.start_page_group(true);
+ body.eval(ctx);
+ ctx.state = snapshot;
+ }
+
ctx.end_page_group();
ctx.start_page_group(false);