diff options
| author | Laurenz <laurmaedje@gmail.com> | 2019-10-13 12:08:07 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2019-10-13 12:08:07 +0200 |
| commit | 463e4ebd8234da5e28700e9b22b6ef5f0dfef56f (patch) | |
| tree | 01f3961d6996de3ee8f9819c2792f6ee8c2a3c3d /src/lib.rs | |
| parent | 6f22e4f13c42f06b686a01fbdd28a0163e88ae77 (diff) | |
Refactor layout types 🚧
Diffstat (limited to 'src/lib.rs')
| -rw-r--r-- | src/lib.rs | 42 |
1 files changed, 22 insertions, 20 deletions
@@ -17,17 +17,15 @@ pub extern crate toddle; use std::cell::RefCell; use toddle::query::{FontLoader, SharedFontLoader, FontProvider}; -use crate::doc::Document; use crate::func::Scope; use crate::parsing::{parse, ParseContext, ParseResult, ParseError}; -use crate::layout::{layout, LayoutContext, Alignment, LayoutSpace, LayoutError, LayoutResult}; -use crate::layout::boxed::BoxLayout; +use crate::layout::{layout_tree, LayoutContext, MultiLayout}; +use crate::layout::{LayoutSpace, Alignment, LayoutError, LayoutResult}; use crate::style::{PageStyle, TextStyle}; use crate::syntax::SyntaxTree; #[macro_use] mod macros; -pub mod doc; pub mod export; pub mod func; pub mod layout; @@ -79,6 +77,12 @@ impl<'p> Typesetter<'p> { self.loader.get_mut().add_provider(provider); } + /// A reference to the backing font loader. + #[inline] + pub fn loader(&self) -> &SharedFontLoader<'p> { + &self.loader + } + /// Parse source code into a syntax tree. pub fn parse(&self, src: &str) -> ParseResult<SyntaxTree> { let scope = Scope::with_std(); @@ -86,31 +90,29 @@ impl<'p> Typesetter<'p> { } /// Layout a syntax tree and return the layout and the referenced font list. - pub fn layout(&self, tree: &SyntaxTree) -> LayoutResult<BoxLayout> { - let pages = layout(&tree, LayoutContext { + pub fn layout(&self, tree: &SyntaxTree) -> LayoutResult<MultiLayout> { + let space = LayoutSpace { + dimensions: self.page_style.dimensions, + padding: self.page_style.margins, + alignment: Alignment::Left, + shrink_to_fit: false, + }; + + let pages = layout_tree(&tree, LayoutContext { loader: &self.loader, style: &self.text_style, - space: LayoutSpace { - dimensions: self.page_style.dimensions, - padding: self.page_style.margins, - alignment: Alignment::Left, - shrink_to_fit: false, - }, + space, + extra_space: Some(space), })?; + Ok(pages) } /// Typeset a portable document from source code. - pub fn typeset(&self, src: &str) -> Result<Document, TypesetError> { + pub fn typeset(&self, src: &str) -> Result<MultiLayout, TypesetError> { let tree = self.parse(src)?; let layout = self.layout(&tree)?; - let document = layout.into_doc(); - Ok(document) - } - - /// A reference to the backing font loader. - pub fn loader(&self) -> &SharedFontLoader<'p> { - &self.loader + Ok(layout) } } |
