From 98802dde7e3eab456bf4892b586076431e3bb386 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Thu, 10 Jul 2025 12:42:34 +0200 Subject: Complete movement of HTML export code to `typst-html` (#6584) --- crates/typst-layout/src/flow/mod.rs | 2 +- crates/typst-layout/src/pages/mod.rs | 34 ++++++++++++++++++++++++++++++---- 2 files changed, 31 insertions(+), 5 deletions(-) (limited to 'crates/typst-layout') diff --git a/crates/typst-layout/src/flow/mod.rs b/crates/typst-layout/src/flow/mod.rs index f4f1c091..cb029dce 100644 --- a/crates/typst-layout/src/flow/mod.rs +++ b/crates/typst-layout/src/flow/mod.rs @@ -143,7 +143,7 @@ fn layout_fragment_impl( let mut kind = FragmentKind::Block; let arenas = Arenas::default(); let children = (engine.routines.realize)( - RealizationKind::LayoutFragment(&mut kind), + RealizationKind::LayoutFragment { kind: &mut kind }, &mut engine, &mut locator, &arenas, diff --git a/crates/typst-layout/src/pages/mod.rs b/crates/typst-layout/src/pages/mod.rs index 14dc0f3f..ec0dc2c0 100644 --- a/crates/typst-layout/src/pages/mod.rs +++ b/crates/typst-layout/src/pages/mod.rs @@ -4,14 +4,16 @@ mod collect; mod finalize; mod run; +use std::num::NonZeroUsize; + use comemo::{Tracked, TrackedMut}; use typst_library::diag::SourceResult; use typst_library::engine::{Engine, Route, Sink, Traced}; use typst_library::foundations::{Content, StyleChain}; use typst_library::introspection::{ - Introspector, Locator, ManualPageCounter, SplitLocator, TagElem, + Introspector, IntrospectorBuilder, Locator, ManualPageCounter, SplitLocator, TagElem, }; -use typst_library::layout::{FrameItem, Page, PagedDocument, Point}; +use typst_library::layout::{FrameItem, Page, PagedDocument, Point, Transform}; use typst_library::model::DocumentInfo; use typst_library::routines::{Arenas, Pair, RealizationKind, Routines}; use typst_library::World; @@ -75,7 +77,7 @@ fn layout_document_impl( let arenas = Arenas::default(); let mut info = DocumentInfo::default(); let mut children = (engine.routines.realize)( - RealizationKind::LayoutDocument(&mut info), + RealizationKind::LayoutDocument { info: &mut info }, &mut engine, &mut locator, &arenas, @@ -84,7 +86,7 @@ fn layout_document_impl( )?; let pages = layout_pages(&mut engine, &mut children, &mut locator, styles)?; - let introspector = Introspector::paged(&pages); + let introspector = introspect_pages(&pages); Ok(PagedDocument { pages, info, introspector }) } @@ -157,3 +159,27 @@ fn layout_pages<'a>( Ok(pages) } + +/// Introspects pages. +#[typst_macros::time(name = "introspect pages")] +fn introspect_pages(pages: &[Page]) -> Introspector { + let mut builder = IntrospectorBuilder::new(); + builder.pages = pages.len(); + builder.page_numberings.reserve(pages.len()); + builder.page_supplements.reserve(pages.len()); + + // Discover all elements. + let mut elems = Vec::new(); + for (i, page) in pages.iter().enumerate() { + builder.page_numberings.push(page.numbering.clone()); + builder.page_supplements.push(page.supplement.clone()); + builder.discover_in_frame( + &mut elems, + &page.frame, + NonZeroUsize::new(1 + i).unwrap(), + Transform::identity(), + ); + } + + builder.finalize(elems) +} -- cgit v1.2.3