diff options
Diffstat (limited to 'src/library/mod.rs')
| -rw-r--r-- | src/library/mod.rs | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/src/library/mod.rs b/src/library/mod.rs index 1e5e406c..c5a5a796 100644 --- a/src/library/mod.rs +++ b/src/library/mod.rs @@ -3,7 +3,7 @@ use toddle::query::FontClass; use crate::func::prelude::*; -use crate::style::parse_paper_name; +use crate::style::{Paper, PaperClass}; use self::maps::{ExtentMap, PaddingMap, AxisKey}; pub mod maps; @@ -73,31 +73,37 @@ function! { /// `page.size`: Set the size of pages. #[derive(Debug, PartialEq)] pub enum PageSize { - Map(ExtentMap<PSize>), - Size(Size2D), + Paper(Paper), + Custom(ExtentMap<PSize>), } parse(args, body) { parse!(forbidden: body); if let Some(name) = args.get_pos_opt::<Ident>()? { - PageSize::Size(parse_paper_name(name.0.as_str())?) + PageSize::Paper(Paper::from_name(name.as_str())?) } else { - PageSize::Map(ExtentMap::new(&mut args, true)?) + PageSize::Custom(ExtentMap::new(&mut args, true)?) } } layout(self, ctx) { let mut style = ctx.style.page; - let dims = &mut style.dimensions; match self { - PageSize::Map(map) => { + PageSize::Paper(paper) => { + style.class = paper.class; + style.dimensions = paper.dimensions; + } + + PageSize::Custom(map) => { + style.class = PaperClass::Custom; + let map = map.dedup(ctx.axes)?; - map.with(Horizontal, |&psize| dims.x = psize.concretize(dims.x)); - map.with(Vertical, |&psize| dims.y = psize.concretize(dims.y)); + let dims = &mut style.dimensions; + map.with(Horizontal, |&psize| dims.x = psize.scaled(dims.x)); + map.with(Vertical, |&psize| dims.y = psize.scaled(dims.y)); } - PageSize::Size(size) => *dims = *size, } vec![SetPageStyle(style)] @@ -156,7 +162,7 @@ function! { layout(self, ctx) { let axis = self.axis.to_generic(ctx.axes); - let spacing = self.spacing.concretize(ctx.style.text.font_size()); + let spacing = self.spacing.scaled(ctx.style.text.font_size()); vec![AddSpacing(spacing, SpacingKind::Hard, axis)] } } |
