From e89e3066a4946e7223d521caba02a9d6dc0e5e11 Mon Sep 17 00:00:00 2001 From: PgBiel <9021226+PgBiel@users.noreply.github.com> Date: Wed, 21 May 2025 01:06:08 -0300 Subject: [PATCH] repeated method fixes --- crates/typst-layout/src/grid/layouter.rs | 2 +- crates/typst-layout/src/grid/repeated.rs | 34 +++++++++++------------- 2 files changed, 17 insertions(+), 19 deletions(-) diff --git a/crates/typst-layout/src/grid/layouter.rs b/crates/typst-layout/src/grid/layouter.rs index 2c7f957f2..5d37584ec 100644 --- a/crates/typst-layout/src/grid/layouter.rs +++ b/crates/typst-layout/src/grid/layouter.rs @@ -1768,7 +1768,7 @@ impl<'a> GridLayouter<'a> { // TODO(subfooters): let's not... let footers = self.repeating_footers.clone(); self.prepare_repeating_footers( - footers.iter().map(|f| *f), + footers.iter().copied(), true, engine, disambiguator, diff --git a/crates/typst-layout/src/grid/repeated.rs b/crates/typst-layout/src/grid/repeated.rs index 89e785efc..512593a5b 100644 --- a/crates/typst-layout/src/grid/repeated.rs +++ b/crates/typst-layout/src/grid/repeated.rs @@ -245,6 +245,7 @@ impl<'a> GridLayouter<'a> { // changed. let (footer_height, footer_heights) = self.simulate_footer_heights( self.repeating_footers.iter().map(|x| *x), + &self.regions, engine, disambiguator, )?; @@ -519,7 +520,7 @@ impl<'a> GridLayouter<'a> { .first() .is_none_or(|f| f.level >= footer.level) { - self.prepare_next_repeating_footers(false, engine); + self.prepare_next_repeating_footers(false, engine)?; return Ok(()); } @@ -564,7 +565,7 @@ impl<'a> GridLayouter<'a> { first_footers, engine, 0, - ); + )?; Ok(()) } @@ -578,8 +579,13 @@ impl<'a> GridLayouter<'a> { engine: &mut Engine, disambiguator: usize, ) -> SourceResult<()> { - let (mut expected_footer_height, mut expected_footer_heights) = - self.simulate_footer_heights(footers.clone(), engine, disambiguator)?; + let (mut expected_footer_height, mut expected_footer_heights) = self + .simulate_footer_heights( + footers.clone(), + &self.regions, + engine, + disambiguator, + )?; // Skip to fitting region where all of them fit at once. // @@ -612,8 +618,8 @@ impl<'a> GridLayouter<'a> { if skipped_region { // Simulate the footer again; the region's 'full' might have // changed, and the vector of heights was cleared. - (expected_footer_height, expected_footer_heights) = - self.simulate_footer_heights(footers, engine, disambiguator)?; + (expected_footer_height, expected_footer_heights) = self + .simulate_footer_heights(footers, &self.regions, engine, disambiguator)?; } self.current.footer_height += expected_footer_height; @@ -622,18 +628,18 @@ impl<'a> GridLayouter<'a> { Ok(()) } - fn simulate_footer_heights( + pub fn simulate_footer_heights( &self, footers: impl Iterator + ExactSizeIterator, + regions: &Regions<'_>, engine: &mut Engine, disambiguator: usize, ) -> SourceResult<(Abs, Vec)> { let mut total_footer_height = Abs::zero(); let mut footer_heights = Vec::with_capacity(footers.len()); for footer in footers { - let footer_height = self - .simulate_footer(footer, &self.regions, engine, disambiguator)? - .height; + let footer_height = + self.simulate_footer(footer, regions, engine, disambiguator)?.height; total_footer_height += footer_height; footer_heights.push(footer_height); @@ -701,11 +707,3 @@ pub fn total_header_row_count<'h>( ) -> usize { headers.into_iter().map(|h| h.range.end - h.range.start).sum() } - -/// The total amount of rows in the given list of headers. -#[inline] -pub fn total_footer_row_count<'f>( - footers: impl IntoIterator, -) -> usize { - footers.into_iter().map(|f| f.end - f.start).sum() -}