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