From c216a4fc26c72938ddad60bc5fe4fa9e45263b30 Mon Sep 17 00:00:00 2001 From: Laurenz Date: Sat, 10 Oct 2020 22:41:56 +0200 Subject: =?UTF-8?q?Flatten=20ast=20module=20back=20into=20syntax=20module?= =?UTF-8?q?=20=F0=9F=8C=AA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/syntax/lit.rs | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 src/syntax/lit.rs (limited to 'src/syntax/lit.rs') diff --git a/src/syntax/lit.rs b/src/syntax/lit.rs new file mode 100644 index 00000000..40b360da --- /dev/null +++ b/src/syntax/lit.rs @@ -0,0 +1,56 @@ +//! Literals. + +use super::*; +use crate::color::RgbaColor; +use crate::eval::DictKey; +use crate::geom::Unit; + +/// A literal. +#[derive(Debug, Clone, PartialEq)] +pub enum Lit { + /// A identifier literal: `left`. + Ident(Ident), + /// A boolean literal: `true`, `false`. + Bool(bool), + /// An integer literal: `120`. + Int(i64), + /// A floating-point literal: `1.2`, `10e-4`. + Float(f64), + /// A length literal: `12pt`, `3cm`. + Length(f64, Unit), + /// A percent literal: `50%`. + /// + /// _Note_: `50%` is stored as `50.0` here, but as `0.5` in the + /// corresponding [value]. + /// + /// [value]: ../../geom/struct.Relative.html + Percent(f64), + /// A color literal: `#ffccee`. + Color(RgbaColor), + /// A string literal: `"hello!"`. + Str(String), + /// A dictionary literal: `(false, 12cm, greeting = "hi")`. + Dict(LitDict), + /// A content literal: `{*Hello* there!}`. + Content(SynTree), +} + +/// A dictionary literal: `(false, 12cm, greeting = "hi")`. +#[derive(Debug, Default, Clone, PartialEq)] +pub struct LitDict(pub Vec); + +/// An entry in a dictionary literal: `false` or `greeting = "hi"`. +#[derive(Debug, Clone, PartialEq)] +pub struct LitDictEntry { + /// The key of the entry if there was one: `greeting`. + pub key: Option>, + /// The value of the entry: `"hi"`. + pub expr: Spanned, +} + +impl LitDict { + /// Create an empty dict literal. + pub fn new() -> Self { + Self::default() + } +} -- cgit v1.2.3