support 2 arg special rgb/rgba
This commit is contained in:
parent
2a7f0b6dbc
commit
ebccebfed1
@ -90,7 +90,7 @@ These numbers come from a default run of the Sass specification as shown above.
|
|||||||
|
|
||||||
```
|
```
|
||||||
2021-07-24
|
2021-07-24
|
||||||
PASSING: 4018
|
PASSING: 4177
|
||||||
FAILING: 2238
|
FAILING: 2079
|
||||||
TOTAL: 6256
|
TOTAL: 6256
|
||||||
```
|
```
|
||||||
|
@ -154,20 +154,23 @@ fn inner_rgb(name: &'static str, mut args: CallArgs, parser: &mut Parser) -> Sas
|
|||||||
|
|
||||||
Ok(Value::Color(Box::new(color)))
|
Ok(Value::Color(Box::new(color)))
|
||||||
} else if len == 2 {
|
} else if len == 2 {
|
||||||
let color = match args.get_err(0, "color")? {
|
let color = args.get_err(0, "color")?;
|
||||||
|
let alpha = args.get_err(1, "alpha")?;
|
||||||
|
|
||||||
|
if color.is_special_function() || (alpha.is_special_function() && !color.is_color()) {
|
||||||
|
return Ok(Value::String(
|
||||||
|
format!(
|
||||||
|
"{}({})",
|
||||||
|
name,
|
||||||
|
Value::List(vec![color, alpha], ListSeparator::Comma, Brackets::None)
|
||||||
|
.to_css_string(args.span(), false)?
|
||||||
|
),
|
||||||
|
QuoteKind::None,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
let color = match color {
|
||||||
Value::Color(c) => c,
|
Value::Color(c) => c,
|
||||||
v if v.is_special_function() => {
|
|
||||||
let alpha = args.get_err(1, "alpha")?;
|
|
||||||
return Ok(Value::String(
|
|
||||||
format!(
|
|
||||||
"{}({}, {})",
|
|
||||||
name,
|
|
||||||
v.to_css_string(args.span(), parser.options.is_compressed())?,
|
|
||||||
alpha.to_css_string(args.span(), parser.options.is_compressed())?
|
|
||||||
),
|
|
||||||
QuoteKind::None,
|
|
||||||
));
|
|
||||||
}
|
|
||||||
v => {
|
v => {
|
||||||
return Err((
|
return Err((
|
||||||
format!("$color: {} is not a color.", v.inspect(args.span())?),
|
format!("$color: {} is not a color.", v.inspect(args.span())?),
|
||||||
@ -176,7 +179,22 @@ fn inner_rgb(name: &'static str, mut args: CallArgs, parser: &mut Parser) -> Sas
|
|||||||
.into())
|
.into())
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let alpha = match args.get_err(1, "alpha")? {
|
|
||||||
|
if alpha.is_special_function() {
|
||||||
|
return Ok(Value::String(
|
||||||
|
format!(
|
||||||
|
"{}({}, {}, {}, {})",
|
||||||
|
name,
|
||||||
|
color.red().to_string(false),
|
||||||
|
color.green().to_string(false),
|
||||||
|
color.blue().to_string(false),
|
||||||
|
alpha.to_css_string(args.span(), false)?,
|
||||||
|
),
|
||||||
|
QuoteKind::None,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
let alpha = match alpha {
|
||||||
Value::Dimension(Some(n), Unit::None, _) => n,
|
Value::Dimension(Some(n), Unit::None, _) => n,
|
||||||
Value::Dimension(Some(n), Unit::Percent, _) => n / Number::from(100),
|
Value::Dimension(Some(n), Unit::Percent, _) => n / Number::from(100),
|
||||||
Value::Dimension(None, ..) => todo!(),
|
Value::Dimension(None, ..) => todo!(),
|
||||||
@ -190,19 +208,6 @@ fn inner_rgb(name: &'static str, mut args: CallArgs, parser: &mut Parser) -> Sas
|
|||||||
)
|
)
|
||||||
.into())
|
.into())
|
||||||
}
|
}
|
||||||
v if v.is_special_function() => {
|
|
||||||
return Ok(Value::String(
|
|
||||||
format!(
|
|
||||||
"{}({}, {}, {}, {})",
|
|
||||||
name,
|
|
||||||
color.red().to_string(parser.options.is_compressed()),
|
|
||||||
color.green().to_string(parser.options.is_compressed()),
|
|
||||||
color.blue().to_string(parser.options.is_compressed()),
|
|
||||||
v.to_css_string(args.span(), parser.options.is_compressed())?
|
|
||||||
),
|
|
||||||
QuoteKind::None,
|
|
||||||
));
|
|
||||||
}
|
|
||||||
v => {
|
v => {
|
||||||
return Err((
|
return Err((
|
||||||
format!("$alpha: {} is not a number.", v.inspect(args.span())?),
|
format!("$alpha: {} is not a number.", v.inspect(args.span())?),
|
||||||
|
@ -344,6 +344,10 @@ impl Value {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn is_color(&self) -> bool {
|
||||||
|
matches!(self, Value::Color(..))
|
||||||
|
}
|
||||||
|
|
||||||
pub fn is_special_function(&self) -> bool {
|
pub fn is_special_function(&self) -> bool {
|
||||||
match self {
|
match self {
|
||||||
Value::String(s, QuoteKind::None) => is_special_function(s),
|
Value::String(s, QuoteKind::None) => is_special_function(s),
|
||||||
|
@ -762,6 +762,16 @@ test!(
|
|||||||
"a {\n color: hsla(var(--foo));\n}\n",
|
"a {\n color: hsla(var(--foo));\n}\n",
|
||||||
"a {\n color: hsla(var(--foo));\n}\n"
|
"a {\n color: hsla(var(--foo));\n}\n"
|
||||||
);
|
);
|
||||||
|
test!(
|
||||||
|
rgb_special_fn_2_arg_first_non_color,
|
||||||
|
"a {\n color: rgb(1, var(--foo));\n}\n",
|
||||||
|
"a {\n color: rgb(1, var(--foo));\n}\n"
|
||||||
|
);
|
||||||
|
test!(
|
||||||
|
rgb_special_fn_2_arg_first_is_color,
|
||||||
|
"a {\n color: rgb(rgb(1%, 1, 1), var(--foo));;\n}\n",
|
||||||
|
"a {\n color: rgb(3, 1, 1, var(--foo));\n}\n"
|
||||||
|
);
|
||||||
test!(
|
test!(
|
||||||
#[ignore = "we do not check if interpolation occurred"]
|
#[ignore = "we do not check if interpolation occurred"]
|
||||||
interpolated_named_color_is_not_color,
|
interpolated_named_color_is_not_color,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user