diff --git a/src/builtin/list.rs b/src/builtin/list.rs index 8b13789..58acc76 100644 --- a/src/builtin/list.rs +++ b/src/builtin/list.rs @@ -1 +1,15 @@ +use std::collections::BTreeMap; +use super::Builtin; +use crate::units::Unit; +use crate::value::{Number, Value}; + +pub(crate) fn register(f: &mut BTreeMap) { + decl!(f "length", |args, _| { + let len = match arg!(args, 0, "list").eval() { + Value::List(v, _) => Number::from(v.len()), + _ => Number::from(1) + }; + Some(Value::Dimension(len, Unit::None)) + }); +} diff --git a/src/builtin/mod.rs b/src/builtin/mod.rs index eed9302..3cb388f 100644 --- a/src/builtin/mod.rs +++ b/src/builtin/mod.rs @@ -22,6 +22,7 @@ lazy_static! { pub(crate) static ref GLOBAL_FUNCTIONS: BTreeMap = { let mut m = BTreeMap::new(); color::register(&mut m); + list::register(&mut m); math::register(&mut m); meta::register(&mut m); string::register(&mut m);