@@ -245,9 +245,35 @@ namespace Sass {
245
245
}
246
246
}
247
247
248
+ inline bool special_number (String_Constant_Ptr s) {
249
+ if (s) {
250
+ std::string calc (" calc" );
251
+ std::string var (" var" );
252
+ std::string ss (s->value ());
253
+ return std::equal (calc.begin (), calc.end (), ss.begin ()) ||
254
+ std::equal (var.begin (), var.end (), ss.begin ());
255
+ }
256
+ return false ;
257
+ }
258
+
248
259
Signature rgb_sig = " rgb($red, $green, $blue)" ;
249
260
BUILT_IN (rgb)
250
261
{
262
+ if (
263
+ special_number (Cast<String_Constant>(env[" $red" ])) ||
264
+ special_number (Cast<String_Constant>(env[" $green" ])) ||
265
+ special_number (Cast<String_Constant>(env[" $blue" ]))
266
+ ) {
267
+ return SASS_MEMORY_NEW (String_Constant, pstate, " rgb("
268
+ + env[" $red" ]->to_string ()
269
+ + " , "
270
+ + env[" $green" ]->to_string ()
271
+ + " , "
272
+ + env[" $blue" ]->to_string ()
273
+ + " )"
274
+ );
275
+ }
276
+
251
277
return SASS_MEMORY_NEW (Color,
252
278
pstate,
253
279
color_num (ARG (" $red" , Number)),
@@ -258,6 +284,24 @@ namespace Sass {
258
284
Signature rgba_4_sig = " rgba($red, $green, $blue, $alpha)" ;
259
285
BUILT_IN (rgba_4)
260
286
{
287
+ if (
288
+ special_number (Cast<String_Constant>(env[" $red" ])) ||
289
+ special_number (Cast<String_Constant>(env[" $green" ])) ||
290
+ special_number (Cast<String_Constant>(env[" $blue" ])) ||
291
+ special_number (Cast<String_Constant>(env[" $alpha" ]))
292
+ ) {
293
+ return SASS_MEMORY_NEW (String_Constant, pstate, " rgba("
294
+ + env[" $red" ]->to_string ()
295
+ + " , "
296
+ + env[" $green" ]->to_string ()
297
+ + " , "
298
+ + env[" $blue" ]->to_string ()
299
+ + " , "
300
+ + env[" $alpha" ]->to_string ()
301
+ + " )"
302
+ );
303
+ }
304
+
261
305
return SASS_MEMORY_NEW (Color,
262
306
pstate,
263
307
color_num (ARG (" $red" , Number)),
@@ -270,6 +314,22 @@ namespace Sass {
270
314
BUILT_IN (rgba_2)
271
315
{
272
316
Color_Ptr c_arg = ARG (" $color" , Color);
317
+
318
+ if (
319
+ special_number (Cast<String_Constant>(env[" $alpha" ]))
320
+ ) {
321
+ return SASS_MEMORY_NEW (String_Constant, pstate, " rgba("
322
+ + std::to_string ((int )c_arg->r ())
323
+ + " , "
324
+ + std::to_string ((int )c_arg->g ())
325
+ + " , "
326
+ + std::to_string ((int )c_arg->b ())
327
+ + " , "
328
+ + env[" $alpha" ]->to_string ()
329
+ + " )"
330
+ );
331
+ }
332
+
273
333
Color_Ptr new_c = SASS_MEMORY_COPY (c_arg);
274
334
new_c->a (alpha_num (ARG (" $alpha" , Number)));
275
335
new_c->disp (" " );
@@ -399,6 +459,21 @@ namespace Sass {
399
459
Signature hsl_sig = " hsl($hue, $saturation, $lightness)" ;
400
460
BUILT_IN (hsl)
401
461
{
462
+ if (
463
+ special_number (Cast<String_Constant>(env[" $hue" ])) ||
464
+ special_number (Cast<String_Constant>(env[" $saturation" ])) ||
465
+ special_number (Cast<String_Constant>(env[" $lightness" ]))
466
+ ) {
467
+ return SASS_MEMORY_NEW (String_Constant, pstate, " hsl("
468
+ + env[" $hue" ]->to_string ()
469
+ + " , "
470
+ + env[" $saturation" ]->to_string ()
471
+ + " , "
472
+ + env[" $lightness" ]->to_string ()
473
+ + " )"
474
+ );
475
+ }
476
+
402
477
return hsla_impl (ARG (" $hue" , Number)->value (),
403
478
ARG (" $saturation" , Number)->value (),
404
479
ARG (" $lightness" , Number)->value (),
@@ -410,6 +485,24 @@ namespace Sass {
410
485
Signature hsla_sig = " hsla($hue, $saturation, $lightness, $alpha)" ;
411
486
BUILT_IN (hsla)
412
487
{
488
+ if (
489
+ special_number (Cast<String_Constant>(env[" $hue" ])) ||
490
+ special_number (Cast<String_Constant>(env[" $saturation" ])) ||
491
+ special_number (Cast<String_Constant>(env[" $lightness" ])) ||
492
+ special_number (Cast<String_Constant>(env[" $alpha" ]))
493
+ ) {
494
+ return SASS_MEMORY_NEW (String_Constant, pstate, " hsla("
495
+ + env[" $hue" ]->to_string ()
496
+ + " , "
497
+ + env[" $saturation" ]->to_string ()
498
+ + " , "
499
+ + env[" $lightness" ]->to_string ()
500
+ + " , "
501
+ + env[" $alpha" ]->to_string ()
502
+ + " )"
503
+ );
504
+ }
505
+
413
506
return hsla_impl (ARG (" $hue" , Number)->value (),
414
507
ARG (" $saturation" , Number)->value (),
415
508
ARG (" $lightness" , Number)->value (),
0 commit comments