Implement builtin function list-separator()

This commit is contained in:
ConnorSkees 2020-03-20 12:32:33 -04:00
parent dd1c1e5b06
commit 284bc8ea6d
3 changed files with 37 additions and 2 deletions

View File

@ -3,6 +3,7 @@ use std::collections::HashMap;
use num_traits::cast::ToPrimitive;
use super::Builtin;
use crate::common::{ListSeparator, QuoteKind};
use crate::unit::Unit;
use crate::value::{Number, Value};
@ -55,4 +56,18 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
}
}),
);
f.insert(
"list-separator".to_owned(),
Box::new(|args, _| {
max_args!(args, 1);
Ok(Value::Ident(
match arg!(args, 0, "list") {
Value::List(_, sep) => sep.name(),
_ => ListSeparator::Space.name(),
}
.to_owned(),
QuoteKind::None,
))
}),
);
}

View File

@ -382,8 +382,6 @@ impl ListSeparator {
}
}
// Used in currently unimplemented builtin function
#[allow(dead_code)]
pub fn name(self) -> &'static str {
match self {
Self::Space => "space",

View File

@ -33,3 +33,25 @@ test!(
"a {\n color: nth((a, b, c), 3);\n}\n",
"a {\n color: c;\n}\n"
);
test!(
list_separator_space_separated,
"a {\n color: list-separator(a b c);\n}\n",
"a {\n color: space;\n}\n"
);
test!(
list_separator_foo,
"a {\n color: list-separator(foo);\n}\n",
"a {\n color: space;\n}\n"
);
test!(
list_separator_comma_separated,
"a {\n color: list-separator((a, b, c));\n}\n",
"a {\n color: comma;\n}\n"
);
// blocked on better parsing of comma separated lists with
// space separated lists inside
// test!(
// list_separator_comma_separated_with_space,
// "a {\n color: list-separator(((a b, c d)));\n}\n",
// "a {\n color: comma;\n}\n"
// );