From 81e80ecfba80f5bffab45719c1f2aba4f9b91b4f Mon Sep 17 00:00:00 2001 From: Laurenz Date: Thu, 17 Dec 2020 00:20:27 +0100 Subject: =?UTF-8?q?Test=20[page]=20function=20=F0=9F=93=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Make page break behaviour more consistent - Allow skipping reference image testing for single tests with `// compare-ref: false` (useful for tests which only check error messages) --- src/library/layout.rs | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'src/library') diff --git a/src/library/layout.rs b/src/library/layout.rs index 4a787f1e..36a20821 100644 --- a/src/library/layout.rs +++ b/src/library/layout.rs @@ -1,7 +1,8 @@ use std::fmt::{self, Display, Formatter}; +use crate::eval::Softness; use crate::geom::{Length, Linear}; -use crate::layout::{Expansion, Fixed, Softness, Spacing, Stack}; +use crate::layout::{Expansion, Fixed, Spacing, Stack}; use crate::paper::{Paper, PaperClass}; use crate::prelude::*; @@ -184,8 +185,8 @@ pub fn boxed(mut args: Args, ctx: &mut EvalContext) -> Value { let body = args.find::().unwrap_or_default(); let width = args.get::<_, Linear>(ctx, "width"); let height = args.get::<_, Linear>(ctx, "height"); - let main = args.get::<_, Spanned>(ctx, "main"); - let cross = args.get::<_, Spanned>(ctx, "cross"); + let main = args.get::<_, Spanned>(ctx, "main-dir"); + let cross = args.get::<_, Spanned>(ctx, "cross-dir"); ctx.set_flow(Gen::new(main, cross)); args.done(ctx); @@ -269,7 +270,7 @@ pub fn page(mut args: Args, ctx: &mut EvalContext) -> Value { let snapshot = ctx.state.clone(); let body = args.find::(); - if let Some(paper) = args.find::() { + if let Some(paper) = args.get::<_, Paper>(ctx, 0) { ctx.state.page.class = paper.class; ctx.state.page.size = paper.size(); } @@ -309,21 +310,24 @@ pub fn page(mut args: Args, ctx: &mut EvalContext) -> Value { std::mem::swap(&mut size.width, &mut size.height); } - let main = args.get::<_, Spanned>(ctx, "main"); - let cross = args.get::<_, Spanned>(ctx, "cross"); + let main = args.get::<_, Spanned>(ctx, "main-dir"); + let cross = args.get::<_, Spanned>(ctx, "cross-dir"); ctx.set_flow(Gen::new(main, cross)); args.done(ctx); + let mut softness = ctx.end_page_group(|_| false); + if let Some(body) = body { - ctx.end_page_group(false); - ctx.start_page_group(true); + // TODO: Restrict body to a single page? + ctx.start_page_group(Softness::Hard); body.eval(ctx); + ctx.end_page_group(|s| s == Softness::Hard); ctx.state = snapshot; + softness = Softness::Soft; } - ctx.end_page_group(false); - ctx.start_page_group(false); + ctx.start_page_group(softness); Value::None } @@ -331,7 +335,7 @@ pub fn page(mut args: Args, ctx: &mut EvalContext) -> Value { /// `pagebreak`: Start a new page. pub fn pagebreak(args: Args, ctx: &mut EvalContext) -> Value { args.done(ctx); - ctx.end_page_group(false); - ctx.start_page_group(true); + ctx.end_page_group(|_| true); + ctx.start_page_group(Softness::Hard); Value::None } -- cgit v1.2.3