diff options
| author | Laurenz <laurmaedje@gmail.com> | 2019-12-15 15:09:09 +0100 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2019-12-15 15:09:09 +0100 |
| commit | f3e461b27c70d34e12f3bcb11cc340a88fc7f102 (patch) | |
| tree | 5d8e21f21aa918bd5ca2c2c8654564f25ab4cd6d /src/library | |
| parent | 3677e4a97dd08252e2e1172ac60a5ab958f8ee16 (diff) | |
Paper styles and scalable+default margins 📜
Diffstat (limited to 'src/library')
| -rw-r--r-- | src/library/boxed.rs | 2 | ||||
| -rw-r--r-- | src/library/maps/axis.rs | 2 | ||||
| -rw-r--r-- | src/library/maps/mod.rs | 2 | ||||
| -rw-r--r-- | src/library/maps/padding.rs | 9 | ||||
| -rw-r--r-- | src/library/mod.rs | 28 |
5 files changed, 25 insertions, 18 deletions
diff --git a/src/library/boxed.rs b/src/library/boxed.rs index 3e9a4c7a..ece8b20f 100644 --- a/src/library/boxed.rs +++ b/src/library/boxed.rs @@ -34,7 +34,7 @@ function! { for &axis in &[Horizontal, Vertical] { if let Some(psize) = map.get(axis) { - let size = psize.concretize(ctx.base.get(axis)); + let size = psize.scaled(ctx.base.get(axis)); *ctx.base.get_mut(axis) = size; *space.dimensions.get_mut(axis) = size; *space.expansion.get_mut(axis) = true; diff --git a/src/library/maps/axis.rs b/src/library/maps/axis.rs index a177a324..ca306eab 100644 --- a/src/library/maps/axis.rs +++ b/src/library/maps/axis.rs @@ -46,7 +46,7 @@ impl<E: ExpressionKind + Copy> ExtentMap<E> { let mut map = ConsistentMap::new(); for arg in args.keys() { - let key = match arg.v.key.v.0.as_str() { + let key = match arg.v.key.v.as_str() { "width" | "w" => AxisKey::Specific(Horizontal), "height" | "h" => AxisKey::Specific(Vertical), "primary-size" | "ps" => AxisKey::Generic(Primary), diff --git a/src/library/maps/mod.rs b/src/library/maps/mod.rs index 284c7181..5b027824 100644 --- a/src/library/maps/mod.rs +++ b/src/library/maps/mod.rs @@ -10,7 +10,7 @@ macro_rules! key { impl $type { /// Parse this key from an identifier. pub fn from_ident(ident: &Spanned<Ident>) -> ParseResult<Self> { - Ok(match ident.v.0.as_str() { + Ok(match ident.v.as_str() { $($patterns)* _ => error!("expected {}", <Self as ExpressionKind>::NAME), }) diff --git a/src/library/maps/padding.rs b/src/library/maps/padding.rs index 37f2ba4a..3da469a7 100644 --- a/src/library/maps/padding.rs +++ b/src/library/maps/padding.rs @@ -39,17 +39,17 @@ key!(PaddingKey<AxisKey>, "axis or side", /// A map for storing padding at sides. #[derive(Debug, Clone, PartialEq)] -pub struct PaddingMap(ConsistentMap<PaddingKey<AxisKey>, Size>); +pub struct PaddingMap(ConsistentMap<PaddingKey<AxisKey>, Option<PSize>>); impl PaddingMap { /// Parse a padding map from the function args. pub fn new(args: &mut FuncArgs) -> ParseResult<PaddingMap> { let mut map = ConsistentMap::new(); - map.add_opt(PaddingKey::All, args.get_pos_opt::<Size>()?)?; + map.add_opt(PaddingKey::All, args.get_pos_opt::<Option<PSize>>()?)?; for arg in args.keys() { let key = PaddingKey::from_ident(&arg.v.key)?; - let size = Size::from_expr(arg.v.value)?; + let size = Option::<PSize>::from_expr(arg.v.value)?; map.add(key, size)?; } @@ -57,7 +57,8 @@ impl PaddingMap { } /// Apply the specified padding on the size box. - pub fn apply(&self, axes: LayoutAxes, padding: &mut SizeBox) -> LayoutResult<()> { + pub fn apply(&self, axes: LayoutAxes, padding: &mut ValueBox<Option<PSize>>) + -> LayoutResult<()> { use PaddingKey::*; let map = self.0.dedup(|key, &val| { 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)] } } |
