From 3fae0a962115a2080b0e58b3618e5cd8f55ccb33 Mon Sep 17 00:00:00 2001 From: Connor Skees Date: Sun, 26 Jul 2020 00:58:09 -0400 Subject: [PATCH] alias `sass:color` builtin functions --- src/builtin/functions/color/hsl.rs | 18 ++++++------- src/builtin/functions/color/mod.rs | 8 +++--- src/builtin/functions/color/opacity.rs | 6 +++-- src/builtin/functions/color/other.rs | 10 +++---- src/builtin/functions/color/rgb.rs | 12 ++++----- src/builtin/mod.rs | 4 ++- src/builtin/modules/color.rs | 37 ++++++++++++++++++++++++-- 7 files changed, 66 insertions(+), 29 deletions(-) diff --git a/src/builtin/functions/color/hsl.rs b/src/builtin/functions/color/hsl.rs index 64c07a6..72821bb 100644 --- a/src/builtin/functions/color/hsl.rs +++ b/src/builtin/functions/color/hsl.rs @@ -205,15 +205,15 @@ fn inner_hsl(name: &'static str, mut args: CallArgs, parser: &mut Parser<'_>) -> } } -fn hsl(args: CallArgs, parser: &mut Parser<'_>) -> SassResult { +pub(crate) fn hsl(args: CallArgs, parser: &mut Parser<'_>) -> SassResult { inner_hsl("hsl", args, parser) } -fn hsla(args: CallArgs, parser: &mut Parser<'_>) -> SassResult { +pub(crate) fn hsla(args: CallArgs, parser: &mut Parser<'_>) -> SassResult { inner_hsl("hsla", args, parser) } -fn hue(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { +pub(crate) fn hue(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { args.max_args(1)?; match args.get_err(0, "color")? { Value::Color(c) => Ok(Value::Dimension(c.hue(), Unit::Deg, true)), @@ -225,7 +225,7 @@ fn hue(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { } } -fn saturation(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { +pub(crate) fn saturation(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { args.max_args(1)?; match args.get_err(0, "color")? { Value::Color(c) => Ok(Value::Dimension(c.saturation(), Unit::Percent, true)), @@ -237,7 +237,7 @@ fn saturation(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult } } -fn lightness(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { +pub(crate) fn lightness(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { args.max_args(1)?; match args.get_err(0, "color")? { Value::Color(c) => Ok(Value::Dimension(c.lightness(), Unit::Percent, true)), @@ -249,7 +249,7 @@ fn lightness(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { } } -fn adjust_hue(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { +pub(crate) fn adjust_hue(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { args.max_args(2)?; let color = match args.get_err(0, "color")? { Value::Color(c) => c, @@ -405,7 +405,7 @@ fn desaturate(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult Ok(Value::Color(Box::new(color.desaturate(amount)))) } -fn grayscale(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { +pub(crate) fn grayscale(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { args.max_args(1)?; let color = match args.get_err(0, "color")? { Value::Color(c) => c, @@ -426,7 +426,7 @@ fn grayscale(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { Ok(Value::Color(Box::new(color.desaturate(Number::one())))) } -fn complement(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { +pub(crate) fn complement(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { args.max_args(1)?; let color = match args.get_err(0, "color")? { Value::Color(c) => c, @@ -441,7 +441,7 @@ fn complement(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult Ok(Value::Color(Box::new(color.complement()))) } -fn invert(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { +pub(crate) fn invert(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { args.max_args(2)?; let weight = match args.default_arg( 1, diff --git a/src/builtin/functions/color/mod.rs b/src/builtin/functions/color/mod.rs index 42bb71d..55c6425 100644 --- a/src/builtin/functions/color/mod.rs +++ b/src/builtin/functions/color/mod.rs @@ -1,9 +1,9 @@ use super::{Builtin, GlobalFunctionMap}; -mod hsl; -mod opacity; -mod other; -mod rgb; +pub mod hsl; +pub mod opacity; +pub mod other; +pub mod rgb; pub(crate) fn declare(f: &mut GlobalFunctionMap) { hsl::declare(f); diff --git a/src/builtin/functions/color/opacity.rs b/src/builtin/functions/color/opacity.rs index f73b52b..553740e 100644 --- a/src/builtin/functions/color/opacity.rs +++ b/src/builtin/functions/color/opacity.rs @@ -5,7 +5,7 @@ use crate::{ value::Value, }; -fn alpha(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { +pub(crate) fn alpha(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { args.max_args(1)?; match args.get_err(0, "color")? { Value::Color(c) => Ok(Value::Dimension(c.alpha(), Unit::None, true)), @@ -17,7 +17,7 @@ fn alpha(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { } } -fn opacity(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { +pub(crate) fn opacity(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { args.max_args(1)?; match args.get_err(0, "color")? { Value::Color(c) => Ok(Value::Dimension(c.alpha(), Unit::None, true)), @@ -33,6 +33,7 @@ fn opacity(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { } } +// todo: unify `opacify` and `fade_in` fn opacify(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { args.max_args(2)?; let color = match args.get_err(0, "color")? { @@ -83,6 +84,7 @@ fn fade_in(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { Ok(Value::Color(Box::new(color.fade_in(amount)))) } +// todo: unify with `fade_out` fn transparentize(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { args.max_args(2)?; let color = match args.get_err(0, "color")? { diff --git a/src/builtin/functions/color/other.rs b/src/builtin/functions/color/other.rs index af1367d..dc4d8ae 100644 --- a/src/builtin/functions/color/other.rs +++ b/src/builtin/functions/color/other.rs @@ -46,7 +46,7 @@ macro_rules! opt_hsl { }; } -fn change_color(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { +pub(crate) fn change_color(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { if args.positional_arg(1).is_some() { return Err(( "Only one positional argument is allowed. All other arguments must be passed by name.", @@ -113,7 +113,7 @@ fn change_color(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult) -> SassResult { +pub(crate) fn adjust_color(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { let color = match args.get_err(0, "color")? { Value::Color(c) => c, v => { @@ -175,8 +175,8 @@ fn adjust_color(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult) -> SassResult { - fn scale(val: Number, by: Number, max: Number) -> Number { +pub(crate) fn scale_color(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { + pub(crate) fn scale(val: Number, by: Number, max: Number) -> Number { if by.is_zero() { return val; } @@ -288,7 +288,7 @@ fn scale_color(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult })) } -fn ie_hex_str(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { +pub(crate) fn ie_hex_str(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { args.max_args(1)?; let color = match args.get_err(0, "color")? { Value::Color(c) => c, diff --git a/src/builtin/functions/color/rgb.rs b/src/builtin/functions/color/rgb.rs index 3249f44..a744c14 100644 --- a/src/builtin/functions/color/rgb.rs +++ b/src/builtin/functions/color/rgb.rs @@ -336,15 +336,15 @@ fn inner_rgb(name: &'static str, mut args: CallArgs, parser: &mut Parser<'_>) -> } } -fn rgb(args: CallArgs, parser: &mut Parser<'_>) -> SassResult { +pub(crate) fn rgb(args: CallArgs, parser: &mut Parser<'_>) -> SassResult { inner_rgb("rgb", args, parser) } -fn rgba(args: CallArgs, parser: &mut Parser<'_>) -> SassResult { +pub(crate) fn rgba(args: CallArgs, parser: &mut Parser<'_>) -> SassResult { inner_rgb("rgba", args, parser) } -fn red(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { +pub(crate) fn red(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { args.max_args(1)?; match args.get_err(0, "color")? { Value::Color(c) => Ok(Value::Dimension(c.red(), Unit::None, true)), @@ -356,7 +356,7 @@ fn red(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { } } -fn green(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { +pub(crate) fn green(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { args.max_args(1)?; match args.get_err(0, "color")? { Value::Color(c) => Ok(Value::Dimension(c.green(), Unit::None, true)), @@ -368,7 +368,7 @@ fn green(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { } } -fn blue(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { +pub(crate) fn blue(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { args.max_args(1)?; match args.get_err(0, "color")? { Value::Color(c) => Ok(Value::Dimension(c.blue(), Unit::None, true)), @@ -380,7 +380,7 @@ fn blue(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { } } -fn mix(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { +pub(crate) fn mix(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { args.max_args(3)?; let color1 = match args.get_err(0, "color1")? { Value::Color(c) => c, diff --git a/src/builtin/mod.rs b/src/builtin/mod.rs index e31fb8c..7dd9b7d 100644 --- a/src/builtin/mod.rs +++ b/src/builtin/mod.rs @@ -1,4 +1,6 @@ mod functions; pub(crate) mod modules; -pub(crate) use functions::{list, map, math, meta, selector, string, Builtin, GLOBAL_FUNCTIONS}; +pub(crate) use functions::{ + color, list, map, math, meta, selector, string, Builtin, GLOBAL_FUNCTIONS, +}; diff --git a/src/builtin/modules/color.rs b/src/builtin/modules/color.rs index 47d58dc..e27a985 100644 --- a/src/builtin/modules/color.rs +++ b/src/builtin/modules/color.rs @@ -1,5 +1,38 @@ use crate::{ - args::CallArgs, builtin::modules::Module, error::SassResult, parse::Parser, value::Value, + args::CallArgs, + builtin::{ + color::{ + hsl::{complement, grayscale, hue, invert, lightness, saturation}, + opacity::alpha, + other::{adjust_color, change_color, ie_hex_str, scale_color}, + rgb::{blue, green, mix, red}, + }, + modules::Module, + }, + error::SassResult, + parse::Parser, + value::Value, }; -pub(crate) fn declare(_f: &mut Module) {} +fn adjust_hue(mut args: CallArgs, parser: &mut Parser<'_>) -> SassResult { + args.max_args(2)?; + todo!() +} + +pub(crate) fn declare(f: &mut Module) { + f.insert_builtin("adjust", adjust_color); + f.insert_builtin("alpha", alpha); + f.insert_builtin("blue", blue); + f.insert_builtin("change", change_color); + f.insert_builtin("complement", complement); + f.insert_builtin("grayscale", grayscale); + f.insert_builtin("green", green); + f.insert_builtin("hue", hue); + f.insert_builtin("ie-hex-str", ie_hex_str); + f.insert_builtin("invert", invert); + f.insert_builtin("lightness", lightness); + f.insert_builtin("mix", mix); + f.insert_builtin("red", red); + f.insert_builtin("saturation", saturation); + f.insert_builtin("scale", scale_color); +}