diff options
| author | Martin Haug <mhaug@live.de> | 2021-06-08 11:05:09 +0200 |
|---|---|---|
| committer | Laurenz <laurmaedje@gmail.com> | 2021-06-09 22:44:40 +0200 |
| commit | 29cfef0a6dfef5820bda339d327638e285aaf4d3 (patch) | |
| tree | 7a2e16b4c97d4259da1eb63deaa716b620feb4df /src/eval | |
| parent | 73fa2eda2c23bd3baeb9e22b99eb0bfb183fc638 (diff) | |
Add a grid layouter
Diffstat (limited to 'src/eval')
| -rw-r--r-- | src/eval/mod.rs | 2 | ||||
| -rw-r--r-- | src/eval/value.rs | 21 |
2 files changed, 22 insertions, 1 deletions
diff --git a/src/eval/mod.rs b/src/eval/mod.rs index 5bc2f101..80be2e82 100644 --- a/src/eval/mod.rs +++ b/src/eval/mod.rs @@ -18,6 +18,7 @@ use std::rc::Rc; use crate::cache::Cache; use crate::color::Color; use crate::diag::{Diag, DiagSet, Pass}; +use crate::geom::TrackSizing; use crate::geom::{Angle, Fractional, Length, Relative}; use crate::loading::{FileHash, Loader}; use crate::parse::parse; @@ -251,6 +252,7 @@ impl Eval for Expr { Self::Angle(_, v, unit) => Value::Angle(Angle::with_unit(v, unit)), Self::Percent(_, v) => Value::Relative(Relative::new(v / 100.0)), Self::Fractional(_, v) => Value::Fractional(Fractional::new(v)), + Self::Auto(_) => Value::TrackSizing(TrackSizing::Auto), Self::Color(_, v) => Value::Color(Color::Rgba(v)), Self::Str(_, ref v) => Value::Str(v.clone()), Self::Ident(ref v) => match ctx.scopes.get(&v) { 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 } |
