simplify declaration of list functions
This commit is contained in:
parent
3645a93382
commit
f2322dda4d
@ -3,15 +3,16 @@ use std::collections::HashMap;
|
||||
use num_traits::{One, Signed, ToPrimitive, Zero};
|
||||
|
||||
use super::Builtin;
|
||||
use crate::args::CallArgs;
|
||||
use crate::common::{Brackets, ListSeparator, QuoteKind};
|
||||
use crate::error::SassResult;
|
||||
use crate::scope::Scope;
|
||||
use crate::selector::Selector;
|
||||
use crate::unit::Unit;
|
||||
use crate::value::{Number, Value};
|
||||
|
||||
pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
|
||||
f.insert(
|
||||
"length".to_owned(),
|
||||
Builtin::new(|mut args, scope, super_selector| {
|
||||
fn length(mut args: CallArgs, scope: &Scope, super_selector: &Selector) -> SassResult<Value> {
|
||||
args.max_args(1)?;
|
||||
let len = match arg!(args, scope, super_selector, 0, "list") {
|
||||
Value::List(v, ..) => Number::from(v.len()),
|
||||
@ -19,11 +20,9 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
|
||||
_ => Number::one(),
|
||||
};
|
||||
Ok(Value::Dimension(len, Unit::None))
|
||||
}),
|
||||
);
|
||||
f.insert(
|
||||
"nth".to_owned(),
|
||||
Builtin::new(|mut args, scope, super_selector| {
|
||||
}
|
||||
|
||||
fn nth(mut args: CallArgs, scope: &Scope, super_selector: &Selector) -> SassResult<Value> {
|
||||
args.max_args(2)?;
|
||||
let list = match arg!(args, scope, super_selector, 0, "list") {
|
||||
Value::List(v, ..) => v,
|
||||
@ -66,11 +65,13 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
|
||||
} else {
|
||||
Ok(list[list.len() - n.abs().to_integer().to_usize().unwrap()].clone())
|
||||
}
|
||||
}),
|
||||
);
|
||||
f.insert(
|
||||
"list-separator".to_owned(),
|
||||
Builtin::new(|mut args, scope, super_selector| {
|
||||
}
|
||||
|
||||
fn list_separator(
|
||||
mut args: CallArgs,
|
||||
scope: &Scope,
|
||||
super_selector: &Selector,
|
||||
) -> SassResult<Value> {
|
||||
args.max_args(1)?;
|
||||
Ok(Value::Ident(
|
||||
match arg!(args, scope, super_selector, 0, "list") {
|
||||
@ -80,11 +81,9 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
|
||||
.to_owned(),
|
||||
QuoteKind::None,
|
||||
))
|
||||
}),
|
||||
);
|
||||
f.insert(
|
||||
"set-nth".to_owned(),
|
||||
Builtin::new(|mut args, scope, super_selector| {
|
||||
}
|
||||
|
||||
fn set_nth(mut args: CallArgs, scope: &Scope, super_selector: &Selector) -> SassResult<Value> {
|
||||
args.max_args(3)?;
|
||||
let (mut list, sep, brackets) = match arg!(args, scope, super_selector, 0, "list") {
|
||||
Value::List(v, sep, b) => (v, sep, b),
|
||||
@ -129,11 +128,9 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
|
||||
}
|
||||
|
||||
Ok(Value::List(list, sep, brackets))
|
||||
}),
|
||||
);
|
||||
f.insert(
|
||||
"append".to_owned(),
|
||||
Builtin::new(|mut args, scope, super_selector| {
|
||||
}
|
||||
|
||||
fn append(mut args: CallArgs, scope: &Scope, super_selector: &Selector) -> SassResult<Value> {
|
||||
args.max_args(3)?;
|
||||
let (mut list, sep, brackets) = match arg!(args, scope, super_selector, 0, "list") {
|
||||
Value::List(v, sep, b) => (v, sep, b),
|
||||
@ -174,11 +171,9 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
|
||||
list.push(val);
|
||||
|
||||
Ok(Value::List(list, sep, brackets))
|
||||
}),
|
||||
);
|
||||
f.insert(
|
||||
"join".to_owned(),
|
||||
Builtin::new(|mut args, scope, super_selector| {
|
||||
}
|
||||
|
||||
fn join(mut args: CallArgs, scope: &Scope, super_selector: &Selector) -> SassResult<Value> {
|
||||
args.max_args(4)?;
|
||||
let (mut list1, sep1, brackets) = match arg!(args, scope, super_selector, 0, "list1") {
|
||||
Value::List(v, sep, brackets) => (v, sep, brackets),
|
||||
@ -250,11 +245,13 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
|
||||
list1.extend(list2);
|
||||
|
||||
Ok(Value::List(list1, sep, brackets))
|
||||
}),
|
||||
);
|
||||
f.insert(
|
||||
"is-bracketed".to_owned(),
|
||||
Builtin::new(|mut args, scope, super_selector| {
|
||||
}
|
||||
|
||||
fn is_bracketed(
|
||||
mut args: CallArgs,
|
||||
scope: &Scope,
|
||||
super_selector: &Selector,
|
||||
) -> SassResult<Value> {
|
||||
args.max_args(1)?;
|
||||
Ok(Value::bool(
|
||||
match arg!(args, scope, super_selector, 0, "list") {
|
||||
@ -265,11 +262,9 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
|
||||
_ => false,
|
||||
},
|
||||
))
|
||||
}),
|
||||
);
|
||||
f.insert(
|
||||
"index".to_owned(),
|
||||
Builtin::new(|mut args, scope, super_selector| {
|
||||
}
|
||||
|
||||
fn index(mut args: CallArgs, scope: &Scope, super_selector: &Selector) -> SassResult<Value> {
|
||||
args.max_args(2)?;
|
||||
let list = match arg!(args, scope, super_selector, 0, "list") {
|
||||
Value::List(v, ..) => v,
|
||||
@ -290,11 +285,9 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
|
||||
None => return Ok(Value::Null),
|
||||
};
|
||||
Ok(Value::Dimension(index, Unit::None))
|
||||
}),
|
||||
);
|
||||
f.insert(
|
||||
"zip".to_owned(),
|
||||
Builtin::new(|args, scope, super_selector| {
|
||||
}
|
||||
|
||||
fn zip(args: CallArgs, scope: &Scope, super_selector: &Selector) -> SassResult<Value> {
|
||||
let span = args.span();
|
||||
let lists = args
|
||||
.get_variadic(scope, super_selector)?
|
||||
@ -326,6 +319,15 @@ pub(crate) fn register(f: &mut HashMap<String, Builtin>) {
|
||||
.collect();
|
||||
|
||||
Ok(Value::List(result, ListSeparator::Comma, Brackets::None))
|
||||
}),
|
||||
);
|
||||
}
|
||||
|
||||
f.insert("length".to_owned(), Builtin::new(length));
|
||||
f.insert("nth".to_owned(), Builtin::new(nth));
|
||||
f.insert("list-separator".to_owned(), Builtin::new(list_separator));
|
||||
f.insert("set-nth".to_owned(), Builtin::new(set_nth));
|
||||
f.insert("append".to_owned(), Builtin::new(append));
|
||||
f.insert("join".to_owned(), Builtin::new(join));
|
||||
f.insert("is-bracketed".to_owned(), Builtin::new(is_bracketed));
|
||||
f.insert("index".to_owned(), Builtin::new(index));
|
||||
f.insert("zip".to_owned(), Builtin::new(zip));
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user