summaryrefslogtreecommitdiff
path: root/src/library
diff options
context:
space:
mode:
Diffstat (limited to 'src/library')
-rw-r--r--src/library/boxed.rs2
-rw-r--r--src/library/maps/axis.rs2
-rw-r--r--src/library/maps/mod.rs2
-rw-r--r--src/library/maps/padding.rs9
-rw-r--r--src/library/mod.rs28
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)]
}
}