summaryrefslogtreecommitdiff
path: root/src/eval/value.rs
diff options
context:
space:
mode:
authorMartin Haug <mhaug@live.de>2021-06-08 11:05:09 +0200
committerLaurenz <laurmaedje@gmail.com>2021-06-09 22:44:40 +0200
commit29cfef0a6dfef5820bda339d327638e285aaf4d3 (patch)
tree7a2e16b4c97d4259da1eb63deaa716b620feb4df /src/eval/value.rs
parent73fa2eda2c23bd3baeb9e22b99eb0bfb183fc638 (diff)
Add a grid layouter
Diffstat (limited to 'src/eval/value.rs')
-rw-r--r--src/eval/value.rs21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/eval/value.rs b/src/eval/value.rs
index 498403e6..fa7993ed 100644
--- a/src/eval/value.rs
+++ b/src/eval/value.rs
@@ -8,7 +8,7 @@ use std::rc::Rc;
use super::EvalContext;
use crate::color::{Color, RgbaColor};
use crate::exec::ExecContext;
-use crate::geom::{Angle, Fractional, Length, Linear, Relative};
+use crate::geom::{Angle, Fractional, Length, Linear, Relative, TrackSizing};
use crate::syntax::{Expr, Span, Spanned, Tree};
/// A computational value.
@@ -32,6 +32,8 @@ pub enum Value {
Fractional(Fractional),
/// A combination of an absolute length and a relative value: `20% + 5cm`.
Linear(Linear),
+ /// One of the units that can appear in a grid definition.
+ TrackSizing(TrackSizing),
/// A color value: `#f79143ff`.
Color(Color),
/// A string: `"string"`.
@@ -79,6 +81,7 @@ impl Value {
Self::Relative(_) => Relative::TYPE_NAME,
Self::Fractional(_) => Fractional::TYPE_NAME,
Self::Linear(_) => Linear::TYPE_NAME,
+ Self::TrackSizing(_) => TrackSizing::TYPE_NAME,
Self::Color(_) => Color::TYPE_NAME,
Self::Str(_) => String::TYPE_NAME,
Self::Array(_) => ArrayValue::TYPE_NAME,
@@ -97,6 +100,14 @@ impl Value {
(&Self::Float(a), &Self::Int(b)) => a == b as f64,
(&Self::Length(a), &Self::Linear(b)) => a == b.abs && b.rel.is_zero(),
(&Self::Relative(a), &Self::Linear(b)) => a == b.rel && b.abs.is_zero(),
+ (&Self::Length(a), &Self::TrackSizing(b)) => TrackSizing::from(a) == b,
+ (&Self::Relative(a), &Self::TrackSizing(b)) => TrackSizing::from(a) == b,
+ (&Self::Linear(a), &Self::TrackSizing(b)) => TrackSizing::from(a) == b,
+ (&Self::Fractional(a), &Self::TrackSizing(b)) => TrackSizing::from(a) == b,
+ (&Self::TrackSizing(a), &Self::Length(b)) => TrackSizing::from(b) == a,
+ (&Self::TrackSizing(a), &Self::Relative(b)) => TrackSizing::from(b) == a,
+ (&Self::TrackSizing(a), &Self::Linear(b)) => TrackSizing::from(b) == a,
+ (&Self::TrackSizing(a), &Self::Fractional(b)) => TrackSizing::from(b) == a,
(&Self::Linear(a), &Self::Length(b)) => a.abs == b && a.rel.is_zero(),
(&Self::Linear(a), &Self::Relative(b)) => a.rel == b && a.abs.is_zero(),
(Self::Array(a), Self::Array(b)) => {
@@ -611,6 +622,14 @@ primitive! {
Value::Length(v) => v.into(),
Value::Relative(v) => v.into(),
}
+primitive! {
+ TrackSizing: "GridUnit",
+ Value::TrackSizing,
+ Value::Length(v) => v.into(),
+ Value::Relative(v) => v.into(),
+ Value::Linear(v) => v.into(),
+ Value::Fractional(v) => v.into(),
+}
primitive! { Color: "color", Value::Color }
primitive! { String: "string", Value::Str }
primitive! { ArrayValue: "array", Value::Array }