sass 3.3.0.alpha.196 → 3.3.0.alpha.198

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/REVISION CHANGED
@@ -1 +1 @@
1
- 3815575f97174247159cff208be7ef0d7feed874
1
+ be5f2f981c18818dbb8dd8b08f13262bbf112ef1
data/VERSION CHANGED
@@ -1 +1 @@
1
- 3.3.0.alpha.196
1
+ 3.3.0.alpha.198
data/VERSION_DATE CHANGED
@@ -1 +1 @@
1
- 02 July 2013 23:14:47 GMT
1
+ 03 July 2013 00:40:44 GMT
@@ -2,7 +2,7 @@ module Sass::Script
2
2
  # Methods in this module are accessible from the SassScript context.
3
3
  # For example, you can write
4
4
  #
5
- # $color = hsl(120deg, 100%, 50%)
5
+ # $color: hsl(120deg, 100%, 50%)
6
6
  #
7
7
  # and it will call {Functions#hsl}.
8
8
  #
@@ -13,13 +13,12 @@ module Sass::Script
13
13
  # ## RGB Functions
14
14
  #
15
15
  # \{#rgb rgb($red, $green, $blue)}
16
- # : Converts an `rgb(red, green, blue)` triplet into a color.
16
+ # : Creates a {Sass::Script::Value::Color Color} from red, green, and blue
17
+ # values.
17
18
  #
18
19
  # \{#rgba rgba($red, $green, $blue, $alpha)}
19
- # : Converts an `rgba(red, green, blue, alpha)` quadruplet into a color.
20
- #
21
- # \{#rgba rgba($color, $alpha)}
22
- # : Adds an alpha layer to any color value.
20
+ # : Creates a {Sass::Script::Value::Color Color} from red, green, blue, and
21
+ # alpha values.
23
22
  #
24
23
  # \{#red red($color)}
25
24
  # : Gets the red component of a color.
@@ -36,10 +35,12 @@ module Sass::Script
36
35
  # ## HSL Functions
37
36
  #
38
37
  # \{#hsl hsl($hue, $saturation, $lightness)}
39
- # : Converts an `hsl(hue, saturation, lightness)` triplet into a color.
38
+ # : Creates a {Sass::Script::Value::Color Color} from hue, saturation, and
39
+ # lightness values.
40
40
  #
41
41
  # \{#hsla hsla($hue, $saturation, $lightness, $alpha)}
42
- # : Converts an `hsla(hue, saturation, lightness, alpha)` quadruplet into a color.
42
+ # : Creates a {Sass::Script::Value::Color Color} from hue, saturation,
43
+ # lightness, lightness, and alpha values.
43
44
  #
44
45
  # \{#hue hue($color)}
45
46
  # : Gets the hue component of a color.
@@ -80,7 +81,7 @@ module Sass::Script
80
81
  # : Gets the alpha component (opacity) of a color.
81
82
  #
82
83
  # \{#rgba rgba($color, $alpha)}
83
- # : Add or change an alpha layer for any color value.
84
+ # : Changes the alpha component for a color.
84
85
  #
85
86
  # \{#opacify opacify($color, $amount)} / \{#fade_in fade-in($color, $amount)}
86
87
  # : Makes a color more opaque.
@@ -91,10 +92,10 @@ module Sass::Script
91
92
  # ## Other Color Functions
92
93
  #
93
94
  # \{#adjust_color adjust-color($color, \[$red\], \[$green\], \[$blue\], \[$hue\], \[$saturation\], \[$lightness\], \[$alpha\])}
94
- # : Increase or decrease any of the components of a color.
95
+ # : Increases or decreases one or more components of a color.
95
96
  #
96
97
  # \{#scale_color scale-color($color, \[$red\], \[$green\], \[$blue\], \[$saturation\], \[$lightness\], \[$alpha\])}
97
- # : Fluidly scale one or more components of a color.
98
+ # : Fluidly scales one or more properties of a color.
98
99
  #
99
100
  # \{#change_color change-color($color, \[$red\], \[$green\], \[$blue\], \[$hue\], \[$saturation\], \[$lightness\], \[$alpha\])}
100
101
  # : Changes one or more properties of a color.
@@ -105,7 +106,7 @@ module Sass::Script
105
106
  # ## String Functions
106
107
  #
107
108
  # \{#unquote unquote($string)}
108
- # : Removes the quotes from a string.
109
+ # : Removes quotes from a string.
109
110
  #
110
111
  # \{#quote quote($string)}
111
112
  # : Adds quotes to a string.
@@ -114,13 +115,13 @@ module Sass::Script
114
115
  # : Returns the number of characters in a string.
115
116
  #
116
117
  # \{#str_insert str-insert($string, $insert, $index)}
117
- # : Inserts the second string into the first string at the specified index.
118
+ # : Inserts `$insert` into `$string` at `$index`.
118
119
  #
119
120
  # \{#str_index str-index($string, $substring)}
120
- # : Returns the index where a substring is found in another string or 0 if not found.
121
+ # : Returns the index of the first occurance of `$substring` in `$string`.
121
122
  #
122
- # \{#str_slice str-slice($string, $start, $end)}
123
- # : Extracts a substring of characters from $string
123
+ # \{#str_slice str-slice($string, $start-at, [$end-at])}
124
+ # : Extracts a substring from `$string`.
124
125
  #
125
126
  # \{#to_upper_case to-upper-case($string)}
126
127
  # : Converts a string to upper case.
@@ -137,19 +138,19 @@ module Sass::Script
137
138
  # : Rounds a number to the nearest whole number.
138
139
  #
139
140
  # \{#ceil ceil($value)}
140
- # : Rounds a number up to the nearest whole number.
141
+ # : Rounds a number up to the next whole number.
141
142
  #
142
143
  # \{#floor floor($value)}
143
- # : Rounds a number down to the nearest whole number.
144
+ # : Rounds a number down to the previous whole number.
144
145
  #
145
146
  # \{#abs abs($value)}
146
147
  # : Returns the absolute value of a number.
147
148
  #
148
- # \{#min min($x1, $x2, ...)\}
149
- # : Finds the minimum of several values.
149
+ # \{#min min($numbers...)\}
150
+ # : Finds the minimum of several numbers.
150
151
  #
151
- # \{#max max($x1, $x2, ...)\}
152
- # : Finds the maximum of several values.
152
+ # \{#max max($numbers...)\}
153
+ # : Finds the maximum of several numbers.
153
154
  #
154
155
  # ## List Functions {#list-functions}
155
156
  #
@@ -165,11 +166,11 @@ module Sass::Script
165
166
  # \{#append append($list1, $val, \[$separator\])}
166
167
  # : Appends a single value onto the end of a list.
167
168
  #
168
- # \{#zip zip($list1, $list2, ...)}
169
+ # \{#zip zip($lists...)}
169
170
  # : Combines several lists into a single multidimensional list.
170
171
  #
171
172
  # \{#index index($list, $value)}
172
- # : Returns the position of a value within a list, or false.
173
+ # : Returns the position of a value within a list.
173
174
  #
174
175
  # \{#list_separator list-separator(#list)}
175
176
  # : Returns the separator of a list.
@@ -177,24 +178,25 @@ module Sass::Script
177
178
  # ## Introspection Functions
178
179
  #
179
180
  # \{#feature_exists feature-exists($feature)}
180
- # : Returns whether the named feature exists in the current sass runtime.
181
+ # : Returns whether a feature exists in the current Sass runtime.
181
182
  #
182
183
  # \{#type_of type-of($value)}
183
184
  # : Returns the type of a value.
184
185
  #
185
186
  # \{#unit unit($number)}
186
- # : Returns the units associated with a number.
187
+ # : Returns the unit(s) associated with a number.
187
188
  #
188
189
  # \{#unitless unitless($number)}
189
- # : Returns whether a number has units or not.
190
+ # : Returns whether a number has units.
190
191
  #
191
192
  # \{#comparable comparable($number-1, $number-2)}
192
- # : Returns whether two numbers can be added or compared.
193
+ # : Returns whether two numbers can be added, subtracted, or compared.
193
194
  #
194
195
  # ## Miscellaneous Functions
195
196
  #
196
197
  # \{#if if($condition, $if-true, $if-false)}
197
- # : Returns one of two values, depending on whether or not a condition is true.
198
+ # : Returns one of two values, depending on whether or not `$condition` is
199
+ # true.
198
200
  #
199
201
  # \{#unique_id unique-id()}
200
202
  # : Returns a unique CSS identifier.
@@ -274,6 +276,12 @@ module Sass::Script
274
276
  # but none of them but the first will be used
275
277
  # unless the user uses keyword arguments.
276
278
  #
279
+ # @example
280
+ # declare :rgba, [:hex, :alpha]
281
+ # declare :rgba, [:red, :green, :blue, :alpha]
282
+ # declare :accepts_anything, [], :var_args => true, :var_kwargs => true
283
+ # declare :some_func, [:foo, :bar, :baz], :var_kwargs => true
284
+ #
277
285
  # @param method_name [Symbol] The name of the method
278
286
  # whose signature is being declared.
279
287
  # @param args [Array<Symbol>] The names of the arguments for the function signature.
@@ -287,12 +295,6 @@ module Sass::Script
287
295
  # to {Value}s as the last argument.
288
296
  # In addition, if this is true and `:var_args` is not,
289
297
  # Sass will ensure that the last argument passed is a hash.
290
- #
291
- # @example
292
- # declare :rgba, [:hex, :alpha]
293
- # declare :rgba, [:red, :green, :blue, :alpha]
294
- # declare :accepts_anything, [], :var_args => true, :var_kwargs => true
295
- # declare :some_func, [:foo, :bar, :baz], :var_kwargs => true
296
298
  def self.declare(method_name, args, options = {})
297
299
  @signatures[method_name] ||= []
298
300
  @signatures[method_name] << Signature.new(
@@ -370,14 +372,14 @@ module Sass::Script
370
372
  # @example
371
373
  # assert_type value, :String
372
374
  # assert_type value, :Number
373
- # @param value [Value] A SassScript value
375
+ # @param value [Sass::Script::Value::Base] A SassScript value
374
376
  # @param type [Symbol] The name of the type the value is expected to be
375
- # @param name [String, nil] The name of the argument.
377
+ # @param name [String, Symbol, nil] The name of the argument.
376
378
  # @raise [ArgumentError] if value is not of the correct type.
377
379
  def assert_type(value, type, name = nil)
378
380
  return if value.is_a?(Sass::Script::Value.const_get(type))
379
381
  err = "#{value.inspect} is not a #{type.to_s.downcase}"
380
- err = "$#{name}: " + err if name
382
+ err = "$#{name.to_s.gsub('_', '-')}: " + err if name
381
383
  raise ArgumentError.new(err)
382
384
  end
383
385
 
@@ -442,29 +444,31 @@ module Sass::Script
442
444
  # Creates a {Sass::Script::Value::Color Color} object from red, green, and
443
445
  # blue values.
444
446
  #
445
- # @param red [Sass::Script::Value::Number]
446
- # A number between 0 and 255 inclusive,
447
- # or between 0% and 100% inclusive
448
- # @param green [Sass::Script::Value::Number]
449
- # A number between 0 and 255 inclusive,
450
- # or between 0% and 100% inclusive
451
- # @param blue [Sass::Script::Value::Number]
452
- # A number between 0 and 255 inclusive,
453
- # or between 0% and 100% inclusive
454
447
  # @see #rgba
448
+ # @overload rgb($red, $green, $blue)
449
+ # @param $red [Sass::Script::Value::Number] The amount of red in the color.
450
+ # Must be between 0 and 255 inclusive, or between `0%` and `100%`
451
+ # inclusive
452
+ # @param $green [Sass::Script::Value::Number] The amount of green in the
453
+ # color. Must be between 0 and 255 inclusive, or between `0%` and `100%`
454
+ # inclusive
455
+ # @param $blue [Sass::Script::Value::Number] The amount of blue in the
456
+ # color. Must be between 0 and 255 inclusive, or between `0%` and `100%`
457
+ # inclusive
455
458
  # @return [Sass::Script::Value::Color]
459
+ # @raise [ArgumentError] if any parameter is the wrong type or out of bounds
456
460
  def rgb(red, green, blue)
457
- assert_type red, :Number
458
- assert_type green, :Number
459
- assert_type blue, :Number
461
+ assert_type red, :Number, :red
462
+ assert_type green, :Number, :green
463
+ assert_type blue, :Number, :blue
460
464
 
461
- Sass::Script::Value::Color.new([red, green, blue].map do |c|
465
+ Sass::Script::Value::Color.new([[red, :red], [green, :green], [blue, :blue]].map do |(c, name)|
462
466
  v = c.value
463
467
  if c.is_unit?("%")
464
- v = Sass::Util.check_range("Color value", 0..100, c, '%')
468
+ v = Sass::Util.check_range("$#{name}: Color value", 0..100, c, '%')
465
469
  v * 255 / 100.0
466
470
  elsif c.unitless?
467
- Sass::Util.check_range("Color value", 0..255, c)
471
+ Sass::Util.check_range("$#{name}: Color value", 0..255, c)
468
472
  else
469
473
  raise ArgumentError.new("Expected #{c} to be unitless or have a unit of % but got #{c}")
470
474
  end
@@ -472,39 +476,44 @@ module Sass::Script
472
476
  end
473
477
  declare :rgb, [:red, :green, :blue]
474
478
 
479
+ # Creates a {Sass::Script::Value::Color Color} from red, green, blue, and
480
+ # alpha values.
475
481
  # @see #rgb
476
- # @overload rgba(red, green, blue, alpha)
477
- # Creates a {Sass::Script::Value::Color Color} object from red, green, and
478
- # blue values, as well as an alpha channel indicating opacity.
479
- #
480
- # @param red [Sass::Script::Value::Number]
481
- # A number between 0 and 255 inclusive
482
- # @param green [Sass::Script::Value::Number]
483
- # A number between 0 and 255 inclusive
484
- # @param blue [Sass::Script::Value::Number]
485
- # A number between 0 and 255 inclusive
486
- # @param alpha [Sass::Script::Value::Number]
487
- # A number between 0 and 1
482
+ #
483
+ # @overload rgba($red, $green, $blue, $alpha)
484
+ # @param $red [Sass::Script::Value::Number] The amount of red in the
485
+ # color. Must be between 0 and 255 inclusive
486
+ # @param $green [Sass::Script::Value::Number] The amount of green in the
487
+ # color. Must be between 0 and 255 inclusive
488
+ # @param $blue [Sass::Script::Value::Number] The amount of blue in the
489
+ # color. Must be between 0 and 255 inclusive
490
+ # @param $alpha [Sass::Script::Value::Number] The opacity of the color.
491
+ # Must be between 0 and 1 inclusive
488
492
  # @return [Sass::Script::Value::Color]
493
+ # @raise [ArgumentError] if any parameter is the wrong type or out of
494
+ # bounds
489
495
  #
490
- # @overload rgba(color, alpha)
491
- # Sets the opacity of a color.
496
+ # @overload rgba($color, $alpha)
497
+ # Sets the opacity of an existing color.
492
498
  #
493
499
  # @example
494
500
  # rgba(#102030, 0.5) => rgba(16, 32, 48, 0.5)
495
501
  # rgba(blue, 0.2) => rgba(0, 0, 255, 0.2)
496
502
  #
497
- # @param color [Sass::Script::Value::Color]
498
- # @param alpha [Sass::Script::Value::Number]
499
- # A number between 0 and 1
503
+ # @param $color [Sass::Script::Value::Color] The color whose opacity will
504
+ # be changed.
505
+ # @param $alpha [Sass::Script::Value::Number] The new opacity of the
506
+ # color. Must be between 0 and 1 inclusive
500
507
  # @return [Sass::Script::Value::Color]
508
+ # @raise [ArgumentError] if `$alpha` is out of bounds or either parameter
509
+ # is the wrong type
501
510
  def rgba(*args)
502
511
  case args.size
503
512
  when 2
504
513
  color, alpha = args
505
514
 
506
- assert_type color, :Color
507
- assert_type alpha, :Number
515
+ assert_type color, :Color, :color
516
+ assert_type alpha, :Number, :alpha
508
517
 
509
518
  Sass::Util.check_range('Alpha channel', 0..1, alpha)
510
519
  color.with(:alpha => alpha.value)
@@ -518,43 +527,51 @@ module Sass::Script
518
527
  declare :rgba, [:red, :green, :blue, :alpha]
519
528
  declare :rgba, [:color, :alpha]
520
529
 
521
- # Creates a {Sass::Script::Value::Color Color} object from hue, saturation,
522
- # and lightness. Uses the algorithm from the [CSS3 spec](http://www.w3.org/TR/css3-color/#hsl-color).
530
+ # Creates a {Sass::Script::Value::Color Color} from hue, saturation, and
531
+ # lightness values. Uses the algorithm from the [CSS3 spec][].
532
+ #
533
+ # [CSS3 spec]: http://www.w3.org/TR/css3-color/#hsl-color
523
534
  #
524
- # @param hue [Sass::Script::Value::Number]
525
- # The hue of the color. Should be between 0 and 360 degrees, inclusive
526
- # @param saturation [Sass::Script::Value::Number]
527
- # The saturation of the color. Must be between `0%` and `100%`, inclusive
528
- # @param lightness [Sass::Script::Value::Number]
529
- # The lightness of the color. Must be between `0%` and `100%`, inclusive
530
- # @return [Sass::Script::Value::Color] The resulting color
531
535
  # @see #hsla
532
- # @raise [ArgumentError] if `saturation` or `lightness` are out of bounds
536
+ # @overload hsl($hue, $saturation, $lightness)
537
+ # @param $hue [Sass::Script::Value::Number] The hue of the color. Should be
538
+ # between 0 and 360 degrees, inclusive
539
+ # @param $saturation [Sass::Script::Value::Number] The saturation of the
540
+ # color. Must be between `0%` and `100%`, inclusive
541
+ # @param $lightness [Sass::Script::Value::Number] The lightness of the
542
+ # color. Must be between `0%` and `100%`, inclusive
543
+ # @return [Sass::Script::Value::Color]
544
+ # @raise [ArgumentError] if `$saturation` or `$lightness` are out of bounds
545
+ # or any parameter is the wrong type
533
546
  def hsl(hue, saturation, lightness)
534
547
  hsla(hue, saturation, lightness, Sass::Script::Value::Number.new(1))
535
548
  end
536
549
  declare :hsl, [:hue, :saturation, :lightness]
537
550
 
538
- # Creates a {Sass::Script::Value::Color Color} object from hue, saturation,
539
- # and lightness, as well as an alpha channel indicating opacity. Uses the
540
- # algorithm from the [CSS3 spec](http://www.w3.org/TR/css3-color/#hsl-color).
541
- #
542
- # @param hue [Sass::Script::Value::Number] The hue of the color.
543
- # Should be between 0 and 360 degrees, inclusive
544
- # @param saturation [Sass::Script::Value::Number] The saturation of the color.
545
- # Must be between `0%` and `100%`, inclusive
546
- # @param lightness [Sass::Script::Value::Number] The lightness of the color.
547
- # Must be between `0%` and `100%`, inclusive
548
- # @param alpha [Sass::Script::Value::Number] The opacity of the color.
549
- # Must be between 0 and 1, inclusive
550
- # @return [Sass::Script::Value::Color] The resulting color
551
+ # Creates a {Sass::Script::Value::Color Color} from hue, saturation,
552
+ # lightness, lightness, and alpha values. Uses the algorithm from the [CSS3
553
+ # spec][].
554
+ #
555
+ # [CSS3 spec]: http://www.w3.org/TR/css3-color/#hsl-color
556
+ #
551
557
  # @see #hsl
552
- # @raise [ArgumentError] if `saturation`, `lightness`, or `alpha` are out of bounds
558
+ # @overload hsla($hue, $saturation, $lightness, $alpha)
559
+ # @param $hue [Sass::Script::Value::Number] The hue of the color. Should be
560
+ # between 0 and 360 degrees, inclusive
561
+ # @param $saturation [Sass::Script::Value::Number] The saturation of the
562
+ # color. Must be between `0%` and `100%`, inclusive
563
+ # @param $lightness [Sass::Script::Value::Number] The lightness of the
564
+ # color. Must be between `0%` and `100%`, inclusive
565
+ # @param $alpha [Sass::Script::Value::Number] The opacity of the color. Must
566
+ # be between 0 and 1, inclusive
567
+ # @return [Sass::Script::Value::Color]
568
+ # @raise [ArgumentError] if `$saturation`, `$lightness`, or `$alpha` are out
569
+ # of bounds or any parameter is the wrong type
553
570
  def hsla(hue, saturation, lightness, alpha)
554
- assert_type hue, :Number
555
- assert_type saturation, :Number
556
- assert_type lightness, :Number
557
- assert_type alpha, :Number
571
+ assert_type hue, :Number, :hue
572
+ assert_type saturation, :Number, :saturation
573
+ assert_type lightness, :Number, :lightness
574
+ assert_type alpha, :Number, :alpha
558
575
 
559
576
  Sass::Util.check_range('Alpha channel', 0..1, alpha)
560
577
 
@@ -566,104 +583,118 @@ module Sass::Script
566
583
  end
567
584
  declare :hsla, [:hue, :saturation, :lightness, :alpha]
568
585
 
569
- # Returns the red component of a color.
586
+ # Gets the red component of a color. Calculated from HSL where necessary via
587
+ # [this algorithm][hsl-to-rgb].
570
588
  #
571
- # @param color [Sass::Script::Value::Color]
572
- # @return [Sass::Script::Value::Number]
573
- # @raise [ArgumentError] If `color` isn't a color
589
+ # [hsl-to-rgb]: http://www.w3.org/TR/css3-color/#hsl-color
590
+ #
591
+ # @overload red($color)
592
+ # @param $color [Sass::Script::Value::Color]
593
+ # @return [Sass::Script::Value::Number] The red component, between 0 and 255
594
+ # inclusive
595
+ # @raise [ArgumentError] if `$color` isn't a color
574
596
  def red(color)
575
- assert_type color, :Color
597
+ assert_type color, :Color, :color
576
598
  Sass::Script::Value::Number.new(color.red)
577
599
  end
578
600
  declare :red, [:color]
579
601
 
580
- # Returns the green component of a color.
602
+ # Gets the green component of a color. Calculated from HSL where necessary
603
+ # via [this algorithm][hsl-to-rgb].
581
604
  #
582
- # @param color [Sass::Script::Value::Color]
583
- # @return [Sass::Script::Value::Number]
584
- # @raise [ArgumentError] If `color` isn't a color
605
+ # [hsl-to-rgb]: http://www.w3.org/TR/css3-color/#hsl-color
606
+ #
607
+ # @overload green($color)
608
+ # @param $color [Sass::Script::Value::Color]
609
+ # @return [Sass::Script::Value::Number] The green component, between 0 and
610
+ # 255 inclusive
611
+ # @raise [ArgumentError] if `$color` isn't a color
585
612
  def green(color)
586
- assert_type color, :Color
613
+ assert_type color, :Color, :color
587
614
  Sass::Script::Value::Number.new(color.green)
588
615
  end
589
616
  declare :green, [:color]
590
617
 
591
- # Returns the blue component of a color.
618
+ # Gets the blue component of a color. Calculated from HSL where necessary
619
+ # via [this algorithm][hsl-to-rgb].
592
620
  #
593
- # @param color [Sass::Script::Value::Color]
594
- # @return [Sass::Script::Value::Number]
595
- # @raise [ArgumentError] If `color` isn't a color
621
+ # [hsl-to-rgb]: http://www.w3.org/TR/css3-color/#hsl-color
622
+ #
623
+ # @overload blue($color)
624
+ # @param $color [Sass::Script::Value::Color]
625
+ # @return [Sass::Script::Value::Number] The blue component, between 0 and
626
+ # 255 inclusive
627
+ # @raise [ArgumentError] if `$color` isn't a color
596
628
  def blue(color)
597
- assert_type color, :Color
629
+ assert_type color, :Color, :color
598
630
  Sass::Script::Value::Number.new(color.blue)
599
631
  end
600
632
  declare :blue, [:color]
601
633
 
602
- # Returns the hue component of a color.
634
+ # Returns the hue component of a color. See [the CSS3 HSL
635
+ # specification][hsl]. Calculated from RGB where necessary via [this
636
+ # algorithm][rgb-to-hsl].
603
637
  #
604
- # See [the CSS3 HSL specification](http://en.wikipedia.org/wiki/HSL_and_HSV#Conversion_from_RGB_to_HSL_or_HSV).
638
+ # [hsl]: http://en.wikipedia.org/wiki/HSL_and_HSV#Conversion_from_RGB_to_HSL_or_HSV
639
+ # [rgb-to-hsl]: http://en.wikipedia.org/wiki/HSL_and_HSV#Conversion_from_RGB_to_HSL_or_HSV
605
640
  #
606
- # Calculated from RGB where necessary via [this algorithm](http://en.wikipedia.org/wiki/HSL_and_HSV#Conversion_from_RGB_to_HSL_or_HSV).
607
- #
608
- # @param color [Sass::Script::Value::Color]
609
- # @return [Sass::Script::Value::Number] between 0deg and 360deg
610
- # @see #adjust_hue
611
- # @raise [ArgumentError] if `color` isn't a color
641
+ # @overload hue($color)
642
+ # @param $color [Sass::Script::Value::Color]
643
+ # @return [Sass::Script::Value::Number] The hue component, between 0deg and
644
+ # 360deg
645
+ # @raise [ArgumentError] if `$color` isn't a color
612
646
  def hue(color)
613
- assert_type color, :Color
647
+ assert_type color, :Color, :color
614
648
  Sass::Script::Value::Number.new(color.hue, ["deg"])
615
649
  end
616
650
  declare :hue, [:color]
617
651
 
618
- # Returns the saturation component of a color.
619
- #
620
- # See [the CSS3 HSL specification](http://en.wikipedia.org/wiki/HSL_and_HSV#Conversion_from_RGB_to_HSL_or_HSV).
652
+ # Returns the saturation component of a color. See [the CSS3 HSL
653
+ # specification][hsl]. Calculated from RGB where necessary via [this
654
+ # algorithm][rgb-to-hsl].
621
655
  #
622
- # Calculated from RGB where necessary via [this algorithm](http://en.wikipedia.org/wiki/HSL_and_HSV#Conversion_from_RGB_to_HSL_or_HSV).
656
+ # [hsl]: http://en.wikipedia.org/wiki/HSL_and_HSV#Conversion_from_RGB_to_HSL_or_HSV
657
+ # [rgb-to-hsl]: http://en.wikipedia.org/wiki/HSL_and_HSV#Conversion_from_RGB_to_HSL_or_HSV
623
658
  #
624
- # @param color [Sass::Script::Value::Color]
625
- # @return [Sass::Script::Value::Number] between 0% and 100%
626
- # @see #saturate
627
- # @see #desaturate
628
- # @raise [ArgumentError] if `color` isn't a color
659
+ # @overload saturation($color)
660
+ # @param $color [Sass::Script::Value::Color]
661
+ # @return [Sass::Script::Value::Number] The saturation component, between 0%
662
+ # and 100%
663
+ # @raise [ArgumentError] if `$color` isn't a color
629
664
  def saturation(color)
630
- assert_type color, :Color
665
+ assert_type color, :Color, :color
631
666
  Sass::Script::Value::Number.new(color.saturation, ["%"])
632
667
  end
633
668
  declare :saturation, [:color]
634
669
 
635
- # Returns the hue component of a color.
636
- #
637
- # See [the CSS3 HSL specification](http://en.wikipedia.org/wiki/HSL_and_HSV#Conversion_from_RGB_to_HSL_or_HSV).
670
+ # Returns the lightness component of a color. See [the CSS3 HSL
671
+ # specification][hsl]. Calculated from RGB where necessary via [this
672
+ # algorithm][rgb-to-hsl].
638
673
  #
639
- # Calculated from RGB where necessary via [this algorithm](http://en.wikipedia.org/wiki/HSL_and_HSV#Conversion_from_RGB_to_HSL_or_HSV).
674
+ # [hsl]: http://en.wikipedia.org/wiki/HSL_and_HSV#Conversion_from_RGB_to_HSL_or_HSV
675
+ # [rgb-to-hsl]: http://en.wikipedia.org/wiki/HSL_and_HSV#Conversion_from_RGB_to_HSL_or_HSV
640
676
  #
641
- # @param color [Sass::Script::Value::Color]
642
- # @return [Sass::Script::Value::Number] between 0% and 100%
643
- # @see #lighten
644
- # @see #darken
645
- # @raise [ArgumentError] if `color` isn't a color
677
+ # @overload lightness($color)
678
+ # @param $color [Sass::Script::Value::Color]
679
+ # @return [Sass::Script::Value::Number] The lightness component, between 0%
680
+ # and 100%
681
+ # @raise [ArgumentError] if `$color` isn't a color
646
682
  def lightness(color)
647
- assert_type color, :Color
683
+ assert_type color, :Color, :color
648
684
  Sass::Script::Value::Number.new(color.lightness, ["%"])
649
685
  end
650
686
  declare :lightness, [:color]
651
687
 
652
- # @overload alpha(color)
653
- # Returns the alpha component (opacity) of a color.
654
- # This is 1 unless otherwise specified.
655
- #
656
- # @param color [Sass::Script::Value::Color]
657
- # @return [Sass::Script::Value::Number]
658
- # @see #opacify
659
- # @see #transparentize
660
- # @raise [ArgumentError] If `color` isn't a color
688
+ # Returns the alpha component (opacity) of a color. This is 1 unless
689
+ # otherwise specified.
661
690
  #
662
- # @overload alpha(microsoft_string)
663
- # Support for the proprietary Microsoft `alpha(opacity=20)` syntax.
691
+ # This function also supports the proprietary Microsoft `alpha(opacity=20)`
692
+ # syntax as a special case.
664
693
  #
665
- # @param microsoft_string A special literal representing the
666
- # css-incompatible microsoft syntax
694
+ # @overload alpha($color)
695
+ # @param $color [Sass::Script::Value::Color]
696
+ # @return [Sass::Script::Value::Number] The alpha component, between 0 and 1
697
+ # @raise [ArgumentError] if `$color` isn't a color
667
698
  def alpha(*args)
668
699
  if args.all? do |a|
669
700
  a.is_a?(Sass::Script::Value::String) && a.type == :identifier &&
@@ -675,41 +706,41 @@ module Sass::Script
675
706
 
676
707
  raise ArgumentError.new("wrong number of arguments (#{args.size} for 1)") if args.size != 1
677
708
 
678
- assert_type args.first, :Color
709
+ assert_type args.first, :Color, :color
679
710
  Sass::Script::Value::Number.new(args.first.alpha)
680
711
  end
681
712
  declare :alpha, [:color]
682
713
 
683
- # Returns the alpha component (opacity) of a color.
684
- # This is 1 unless otherwise specified.
714
+ # Returns the alpha component (opacity) of a color. This is 1 unless
715
+ # otherwise specified.
685
716
  #
686
- # @param color [Sass::Script::Value::Color]
687
- # @return [Sass::Script::Value::Number]
688
- # @see #opacify
689
- # @see #transparentize
690
- # @raise [ArgumentError] If `color` isn't a color
717
+ # @overload opacity($color)
718
+ # @param $color [Sass::Script::Value::Color]
719
+ # @return [Sass::Script::Value::Number] The alpha component, between 0 and 1
720
+ # @raise [ArgumentError] if `$color` isn't a color
691
721
  def opacity(color)
692
722
  if color.is_a?(Sass::Script::Value::Number)
693
723
  return Sass::Script::Value::String.new("opacity(#{color})")
694
724
  end
695
- assert_type color, :Color
725
+ assert_type color, :Color, :color
696
726
  Sass::Script::Value::Number.new(color.alpha)
697
727
  end
698
728
  declare :opacity, [:color]
699
729
 
700
- # Makes a color more opaque.
701
- # Takes a color and an amount between 0 and 1,
702
- # and returns a color with the opacity increased by that value.
730
+ # Makes a color more opaque. Takes a color and a number between 0 and 1, and
731
+ # returns a color with the opacity increased by that amount.
703
732
  #
733
+ # @see #transparentize
704
734
  # @example
705
735
  # opacify(rgba(0, 0, 0, 0.5), 0.1) => rgba(0, 0, 0, 0.6)
706
736
  # opacify(rgba(0, 0, 17, 0.8), 0.2) => #001
707
- # @param color [Sass::Script::Value::Color]
708
- # @param amount [Sass::Script::Value::Number]
737
+ # @overload opacify($color, $amount)
738
+ # @param $color [Sass::Script::Value::Color]
739
+ # @param $amount [Sass::Script::Value::Number] The amount to increase the
740
+ # opacity by, between 0 and 1
709
741
  # @return [Sass::Script::Value::Color]
710
- # @see #transparentize
711
- # @raise [ArgumentError] If `color` isn't a color,
712
- # or `number` isn't a number between 0 and 1
742
+ # @raise [ArgumentError] if `$amount` is out of bounds, or either parameter
743
+ # is the wrong type
713
744
  def opacify(color, amount)
714
745
  _adjust(color, amount, :alpha, 0..1, :+)
715
746
  end
@@ -718,19 +749,20 @@ module Sass::Script
718
749
  alias_method :fade_in, :opacify
719
750
  declare :fade_in, [:color, :amount]
720
751
 
721
- # Makes a color more transparent.
722
- # Takes a color and an amount between 0 and 1,
723
- # and returns a color with the opacity decreased by that value.
752
+ # Makes a color more transparent. Takes a color and a number between 0 and
753
+ # 1, and returns a color with the opacity decreased by that amount.
724
754
  #
755
+ # @see #opacify
725
756
  # @example
726
757
  # transparentize(rgba(0, 0, 0, 0.5), 0.1) => rgba(0, 0, 0, 0.4)
727
758
  # transparentize(rgba(0, 0, 0, 0.8), 0.2) => rgba(0, 0, 0, 0.6)
728
- # @param color [Sass::Script::Value::Color]
729
- # @param amount [Sass::Script::Value::Number]
759
+ # @overload transparentize($color, $amount)
760
+ # @param $color [Sass::Script::Value::Color]
761
+ # @param $amount [Sass::Script::Value::Number] The amount to decrease the
762
+ # opacity by, between 0 and 1
730
763
  # @return [Sass::Script::Value::Color]
731
- # @see #opacify
732
- # @raise [ArgumentError] If `color` isn't a color,
733
- # or `number` isn't a number between 0 and 1
764
+ # @raise [ArgumentError] if `$amount` is out of bounds, or either parameter
765
+ # is the wrong type
734
766
  def transparentize(color, amount)
735
767
  _adjust(color, amount, :alpha, 0..1, :-)
736
768
  end
@@ -739,56 +771,58 @@ module Sass::Script
739
771
  alias_method :fade_out, :transparentize
740
772
  declare :fade_out, [:color, :amount]
741
773
 
742
- # Makes a color lighter.
743
- # Takes a color and an amount between 0% and 100%,
744
- # and returns a color with the lightness increased by that value.
774
+ # Makes a color lighter. Takes a color and a number between `0%` and `100%`,
775
+ # and returns a color with the lightness increased by that amount.
745
776
  #
777
+ # @see #darken
746
778
  # @example
747
779
  # lighten(hsl(0, 0%, 0%), 30%) => hsl(0, 0, 30)
748
780
  # lighten(#800, 20%) => #e00
749
- # @param color [Sass::Script::Value::Color]
750
- # @param amount [Sass::Script::Value::Number]
781
+ # @overload lighten($color, $amount)
782
+ # @param $color [Sass::Script::Value::Color]
783
+ # @param $amount [Sass::Script::Value::Number] The amount to increase the
784
+ # lightness by, between `0%` and `100%`
751
785
  # @return [Sass::Script::Value::Color]
752
- # @see #darken
753
- # @raise [ArgumentError] If `color` isn't a color,
754
- # or `number` isn't a number between 0% and 100%
786
+ # @raise [ArgumentError] if `$amount` is out of bounds, or either parameter
787
+ # is the wrong type
755
788
  def lighten(color, amount)
756
789
  _adjust(color, amount, :lightness, 0..100, :+, "%")
757
790
  end
758
791
  declare :lighten, [:color, :amount]
759
792
 
760
- # Makes a color darker.
761
- # Takes a color and an amount between 0% and 100%,
762
- # and returns a color with the lightness decreased by that value.
793
+ # Makes a color darker. Takes a color and a number between 0% and 100%, and
794
+ # returns a color with the lightness decreased by that amount.
763
795
  #
796
+ # @see #lighten
764
797
  # @example
765
798
  # darken(hsl(25, 100%, 80%), 30%) => hsl(25, 100%, 50%)
766
799
  # darken(#800, 20%) => #200
767
- # @param color [Sass::Script::Value::Color]
768
- # @param amount [Sass::Script::Value::Number]
800
+ # @overload darken($color, $amount)
801
+ # @param $color [Sass::Script::Value::Color]
802
+ # @param $amount [Sass::Script::Value::Number] The amount to dencrease the
803
+ # lightness by, between `0%` and `100%`
769
804
  # @return [Sass::Script::Value::Color]
770
- # @see #lighten
771
- # @raise [ArgumentError] If `color` isn't a color,
772
- # or `number` isn't a number between 0% and 100%
805
+ # @raise [ArgumentError] if `$amount` is out of bounds, or either parameter
806
+ # is the wrong type
773
807
  def darken(color, amount)
774
808
  _adjust(color, amount, :lightness, 0..100, :-, "%")
775
809
  end
776
810
  declare :darken, [:color, :amount]
777
811
 
778
- # Makes a color more saturated.
779
- # Takes a color and an amount between 0% and 100%,
780
- # and returns a color with the saturation increased by that value.
812
+ # Makes a color more saturated. Takes a color and a number between 0% and
813
+ # 100%, and returns a color with the saturation increased by that amount.
781
814
  #
815
+ # @see #desaturate
782
816
  # @example
783
817
  # saturate(hsl(120, 30%, 90%), 20%) => hsl(120, 50%, 90%)
784
818
  # saturate(#855, 20%) => #9e3f3f
785
- # @overload saturate(color, amount)
786
- # @param color [Sass::Script::Value::Color]
787
- # @param amount [Sass::Script::Value::Number]
788
- # @return [Sass::Script::Value::Color]
789
- # @see #desaturate
790
- # @raise [ArgumentError] If `color` isn't a color,
791
- # or `number` isn't a number between 0% and 100%
819
+ # @overload saturate($color, $amount)
820
+ # @param $color [Sass::Script::Value::Color]
821
+ # @param $amount [Sass::Script::Value::Number] The amount to increase the
822
+ # saturation by, between `0%` and `100%`
823
+ # @return [Sass::Script::Value::Color]
824
+ # @raise [ArgumentError] if `$amount` is out of bounds, or either parameter
825
+ # is the wrong type
792
826
  def saturate(color, amount = nil)
793
827
  # Support the filter effects definition of saturate.
794
828
  # https://dvcs.w3.org/hg/FXTF/raw-file/tip/filters/index.html
@@ -798,93 +832,99 @@ module Sass::Script
798
832
  declare :saturate, [:color, :amount]
799
833
  declare :saturate, [:amount]
800
834
 
801
- # Makes a color less saturated.
802
- # Takes a color and an amount between 0% and 100%,
803
- # and returns a color with the saturation decreased by that value.
835
+ # Makes a color less saturated. Takes a color and a number between 0% and
836
+ # 100%, and returns a color with the saturation decreased by that value.
804
837
  #
838
+ # @see #saturate
805
839
  # @example
806
840
  # desaturate(hsl(120, 30%, 90%), 20%) => hsl(120, 10%, 90%)
807
841
  # desaturate(#855, 20%) => #726b6b
808
- # @param color [Sass::Script::Value::Color]
809
- # @param amount [Sass::Script::Value::Number]
842
+ # @overload desaturate($color, $amount)
843
+ # @param $color [Sass::Script::Value::Color]
844
+ # @param $amount [Sass::Script::Value::Number] The amount to decrease the
845
+ # saturation by, between `0%` and `100%`
810
846
  # @return [Sass::Script::Value::Color]
811
- # @see #saturate
812
- # @raise [ArgumentError] If `color` isn't a color,
813
- # or `number` isn't a number between 0% and 100%
847
+ # @raise [ArgumentError] if `$amount` is out of bounds, or either parameter
848
+ # is the wrong type
814
849
  def desaturate(color, amount)
815
850
  _adjust(color, amount, :saturation, 0..100, :-, "%")
816
851
  end
817
852
  declare :desaturate, [:color, :amount]
818
853
 
819
- # Changes the hue of a color while retaining the lightness and saturation.
820
- # Takes a color and a number of degrees (usually between -360deg and 360deg),
821
- # and returns a color with the hue rotated by that value.
854
+ # Changes the hue of a color. Takes a color and a number of degrees (usually
855
+ # between `-360deg` and `360deg`), and returns a color with the hue rotated
856
+ # along the color wheel by that amount.
822
857
  #
823
858
  # @example
824
859
  # adjust-hue(hsl(120, 30%, 90%), 60deg) => hsl(180, 30%, 90%)
825
860
  # adjust-hue(hsl(120, 30%, 90%), 060deg) => hsl(60, 30%, 90%)
826
861
  # adjust-hue(#811, 45deg) => #886a11
827
- # @param color [Sass::Script::Value::Color] The color to adjust.
828
- # @param degrees [Sass::Script::Value::Number] The number of degrees to shift the hue.
829
- # @return [Sass::Script::Value::Color] The transformed color.
830
- # @raise [ArgumentError] If `color` isn't a color, or `degrees` isn't a number
862
+ # @overload adjust_hue($color, $degrees)
863
+ # @param $color [Sass::Script::Value::Color]
864
+ # @param $degrees [Sass::Script::Value::Number] The number of degrees to
865
+ # rotate the hue
866
+ # @return [Sass::Script::Value::Color]
867
+ # @raise [ArgumentError] if either parameter is the wrong type
831
868
  def adjust_hue(color, degrees)
832
- assert_type color, :Color
833
- assert_type degrees, :Number
869
+ assert_type color, :Color, :color
870
+ assert_type degrees, :Number, :degrees
834
871
  color.with(:hue => color.hue + degrees.value)
835
872
  end
836
873
  declare :adjust_hue, [:color, :degrees]
837
874
 
838
- # Returns an IE hex string for a color with an alpha channel
839
- # suitable for passing to IE filters.
875
+ # Converts a color into the format understood by IE filters.
840
876
  #
841
877
  # @example
842
878
  # ie-hex-str(#abc) => #FFAABBCC
843
879
  # ie-hex-str(#3322BB) => #FF3322BB
844
880
  # ie-hex-str(rgba(0, 255, 0, 0.5)) => #8000FF00
845
- # @param color [Sass::Script::Value::Color]
846
- # @return [Sass::Script::Value::String]
847
- # @raise [ArgumentError] If `color` isn't a color
881
+ # @overload ie_hex_str($color)
882
+ # @param $color [Sass::Script::Value::Color]
883
+ # @return [Sass::Script::Value::String] The IE-formatted string
884
+ # representation of the color
885
+ # @raise [ArgumentError] if `$color` isn't a color
848
886
  def ie_hex_str(color)
849
- assert_type color, :Color
887
+ assert_type color, :Color, :color
850
888
  alpha = (color.alpha * 255).round.to_s(16).rjust(2, '0')
851
889
  Sass::Script::Value::String.new("##{alpha}#{color.send(:hex_str)[1..-1]}".upcase)
852
890
  end
853
891
  declare :ie_hex_str, [:color]
854
892
 
855
- # Adjusts one or more properties of a color.
856
- # This can change the red, green, blue, hue, saturation, value, and alpha properties.
857
- # The properties are specified as keyword arguments,
858
- # and are added to or subtracted from the color's current value for that property.
859
- #
860
- # `$red`, `$green`, and `$blue` properties should be between 0 and 255.
861
- # `$saturation` and `$lightness` should be between 0% and 100%.
862
- # `$alpha` should be between 0 and 1.
893
+ # Increases or decreases one or more properties of a color. This can change
894
+ # the red, green, blue, hue, saturation, value, and alpha properties. The
895
+ # properties are specified as keyword arguments, and are added to or
896
+ # subtracted from the color's current value for that property.
863
897
  #
864
- # All properties are optional.
865
- # You can't specify both RGB properties (`$red`, `$green`, `$blue`)
866
- # and HSL properties (`$hue`, `$saturation`, `$value`) at the same time.
898
+ # All properties are optional. You can't specify both RGB properties
899
+ # (`$red`, `$green`, `$blue`) and HSL properties (`$hue`, `$saturation`,
900
+ # `$value`) at the same time.
867
901
  #
868
902
  # @example
869
903
  # adjust-color(#102030, $blue: 5) => #102035
870
904
  # adjust-color(#102030, $red: -5, $blue: 5) => #0b2035
871
905
  # adjust-color(hsl(25, 100%, 80%), $lightness: -30%, $alpha: -0.4) => hsla(25, 100%, 50%, 0.6)
872
- # @param color [Sass::Script::Value::Color]
873
- # @option kwargs [Sass::Script::Value::Number] "red" The amount by which the red component should change.
874
- # @option kwargs [Sass::Script::Value::Number] "green" The amount by which the green component should change.
875
- # @option kwargs [Sass::Script::Value::Number] "blue" The amount by which the blue component should change.
876
- # @option kwargs [Sass::Script::Value::Number] "hue" The number of degrees by which the hue should change.
877
- # @option kwargs [Sass::Script::Value::Number] "saturation" The amount by which the saturation should change.
878
- # @option kwargs [Sass::Script::Value::Number] "lightness" The amount by which the lightness should change.
879
- # @option kwargs [Sass::Script::Value::Number] "alpha" The amount by which the alpha channel should change.
906
+ # @overload adjust_color($color, [$red], [$green], [$blue], [$hue], [$saturation], [$lightness], [$alpha])
907
+ # @param $color [Sass::Script::Value::Color]
908
+ # @param $red [Sass::Script::Value::Number] The adjustment to make on the
909
+ # red component, between -255 and 255 inclusive
910
+ # @param $green [Sass::Script::Value::Number] The adjustment to make on the
911
+ # green component, between -255 and 255 inclusive
912
+ # @param $blue [Sass::Script::Value::Number] The adjustment to make on the
913
+ # blue component, between -255 and 255 inclusive
914
+ # @param $hue [Sass::Script::Value::Number] The adjustment to make on the
915
+ # hue component, in degrees
916
+ # @param $saturation [Sass::Script::Value::Number] The adjustment to make on
917
+ # the saturation component, between `-100%` and `100%` inclusive
918
+ # @param $lightness [Sass::Script::Value::Number] The adjustment to make on
919
+ # the lightness component, between `-100%` and `100%` inclusive
920
+ # @param $alpha [Sass::Script::Value::Number] The adjustment to make on the
921
+ # alpha component, between -1 and 1 inclusive
880
922
  # @return [Sass::Script::Value::Color]
881
- # @raise [ArgumentError] if `color` is not a color,
882
- # if any keyword argument is not a number,
883
- # if any keyword argument is not in the legal range,
884
- # if an unexpected keyword argument is given,
885
- # or if both HSL and RGB properties are given.
923
+ # @raise [ArgumentError] if any parameter is the wrong type or out-of
924
+ # bounds, or if RGB properties and HSL properties are adjusted at the
925
+ # same time
886
926
  def adjust_color(color, kwargs)
887
- assert_type color, :Color
927
+ assert_type color, :Color, :color
888
928
  with = Sass::Util.map_hash({
889
929
  "red" => [-255..255, ""],
890
930
  "green" => [-255..255, ""],
@@ -912,47 +952,47 @@ module Sass::Script
912
952
  end
913
953
  declare :adjust_color, [:color], :var_kwargs => true
914
954
 
915
- # Scales one or more properties of a color by a percentage value.
916
- # Unlike \{#adjust_color adjust-color}, which changes a color's properties by fixed amounts,
917
- # \{#scale_color scale-color} fluidly changes them based on how high or low they already are.
918
- # That means that lightening an already-light color with \{#scale_color scale-color}
919
- # won't change the lightness much,
920
- # but lightening a dark color by the same amount will change it more dramatically.
921
- # This has the benefit of making `scale-color($color, ...)` have a similar effect
922
- # regardless of what `$color` is.
923
- #
924
- # For example, the lightness of a color can be anywhere between 0 and 100.
925
- # If `scale-color($color, $lightness: 40%)` is called, the resulting color's lightness
926
- # will be 40% of the way between its original lightness and 100.
927
- # If `scale-color($color, $lightness: -40%)` is called instead,
928
- # the lightness will be 40% of the way between the original and 0.
929
- #
930
- # This can change the red, green, blue, saturation, value, and alpha properties.
931
- # The properties are specified as keyword arguments.
932
- # All arguments should be percentages between 0% and 100%.
933
- #
934
- # All properties are optional.
935
- # You can't specify both RGB properties (`$red`, `$green`, `$blue`)
936
- # and HSL properties (`$saturation`, `$value`) at the same time.
955
+ # Fluidly scales one or more properties of a color. Unlike
956
+ # \{#adjust_color adjust-color}, which changes a color's properties by fixed
957
+ # amounts, \{#scale_color scale-color} fluidly changes them based on how
958
+ # high or low they already are. That means that lightening an already-light
959
+ # color with \{#scale_color scale-color} won't change the lightness much,
960
+ # but lightening a dark color by the same amount will change it more
961
+ # dramatically. This has the benefit of making `scale-color($color, ...)`
962
+ # have a similar effect regardless of what `$color` is.
963
+ #
964
+ # For example, the lightness of a color can be anywhere between `0%` and
965
+ # `100%`. If `scale-color($color, $lightness: 40%)` is called, the resulting
966
+ # color's lightness will be 40% of the way between its original lightness
967
+ # and 100. If `scale-color($color, $lightness: -40%)` is called instead, the
968
+ # lightness will be 40% of the way between the original and 0.
969
+ #
970
+ # This can change the red, green, blue, saturation, value, and alpha
971
+ # properties. The properties are specified as keyword arguments. All
972
+ # arguments should be percentages between `0%` and `100%`.
973
+ #
974
+ # All properties are optional. You can't specify both RGB properties
975
+ # (`$red`, `$green`, `$blue`) and HSL properties (`$saturation`, `$value`)
976
+ # at the same time.
937
977
  #
938
978
  # @example
939
- # scale-color(hsl(120, 70, 80), $lightness: 50%) => hsl(120, 70, 90)
940
- # scale-color(rgb(200, 150, 170), $green: -40%, $blue: 70%) => rgb(200, 90, 229)
941
- # scale-color(hsl(200, 70, 80), $saturation: -90%, $alpha: -30%) => hsla(200, 7, 80, 0.7)
942
- # @param color [Sass::Script::Value::Color]
943
- # @option kwargs [Sass::Script::Value::Number] "red" The amount by which the red component should scale.
944
- # @option kwargs [Sass::Script::Value::Number] "green" The amount by which the green component should scale.
945
- # @option kwargs [Sass::Script::Value::Number] "blue" The amount by which the blue component should scale.
946
- # @option kwargs [Sass::Script::Value::Number] "saturation" The amount by which the saturation should scale.
947
- # @option kwargs [Sass::Script::Value::Number] "lightness" The amount by which the lightness should scale.
948
- # @option kwargs [Sass::Script::Value::Number] "alpha" The amount by which the alpha channel should scale.
979
+ # scale-color(hsl(120, 70%, 80%), $lightness: 50%) => hsl(120, 70%, 90%)
980
+ # scale-color(rgb(200, 150%, 170%), $green: -40%, $blue: 70%) => rgb(200, 90, 229)
981
+ # scale-color(hsl(200, 70%, 80%), $saturation: -90%, $alpha: -30%) => hsla(200, 7%, 80%, 0.7)
982
+ # @overload scale_color($color, [$red], [$green], [$blue], [$saturation], [$lightness], [$alpha])
983
+ # @param $color [Sass::Script::Value::Color]
984
+ # @param $red [Sass::Script::Value::Number]
985
+ # @param $green [Sass::Script::Value::Number]
986
+ # @param $blue [Sass::Script::Value::Number]
987
+ # @param $saturation [Sass::Script::Value::Number]
988
+ # @param $lightness [Sass::Script::Value::Number]
989
+ # @param $alpha [Sass::Script::Value::Number]
949
990
  # @return [Sass::Script::Value::Color]
950
- # @raise [ArgumentError] if `color` is not a color,
951
- # if any keyword argument is not a percentage between 0% and 100%,
952
- # if an unexpected keyword argument is given,
953
- # or if both HSL and RGB properties are given.
991
+ # @raise [ArgumentError] if any parameter is the wrong type or out-of
992
+ # bounds, or if RGB properties and HSL properties are adjusted at the
993
+ # same time
954
994
  def scale_color(color, kwargs)
955
- assert_type color, :Color
995
+ assert_type color, :Color, :color
956
996
  with = Sass::Util.map_hash({
957
997
  "red" => 255,
958
998
  "green" => 255,
@@ -982,39 +1022,41 @@ module Sass::Script
982
1022
  end
983
1023
  declare :scale_color, [:color], :var_kwargs => true
984
1024
 
985
- # Changes one or more properties of a color.
986
- # This can change the red, green, blue, hue, saturation, value, and alpha properties.
987
- # The properties are specified as keyword arguments,
988
- # and replace the color's current value for that property.
989
- #
990
- # `$red`, `$green`, and `$blue` properties should be between 0 and 255.
991
- # `$saturation` and `$lightness` should be between 0% and 100%.
992
- # `$alpha` should be between 0 and 1.
1025
+ # Changes one or more properties of a color. This can change the red, green,
1026
+ # blue, hue, saturation, value, and alpha properties. The properties are
1027
+ # specified as keyword arguments, and replace the color's current value for
1028
+ # that property.
993
1029
  #
994
- # All properties are optional.
995
- # You can't specify both RGB properties (`$red`, `$green`, `$blue`)
996
- # and HSL properties (`$hue`, `$saturation`, `$value`) at the same time.
1030
+ # All properties are optional. You can't specify both RGB properties
1031
+ # (`$red`, `$green`, `$blue`) and HSL properties (`$hue`, `$saturation`,
1032
+ # `$value`) at the same time.
997
1033
  #
998
1034
  # @example
999
1035
  # change-color(#102030, $blue: 5) => #102005
1000
1036
  # change-color(#102030, $red: 120, $blue: 5) => #782005
1001
1037
  # change-color(hsl(25, 100%, 80%), $lightness: 40%, $alpha: 0.8) => hsla(25, 100%, 40%, 0.8)
1002
- # @param color [Sass::Script::Value::Color]
1003
- # @option kwargs [Sass::Script::Value::Number] "red" The amount by which the red component should change.
1004
- # @option kwargs [Sass::Script::Value::Number] "green" The amount by which the green component should change.
1005
- # @option kwargs [Sass::Script::Value::Number] "blue" The amount by which the blue component should change.
1006
- # @option kwargs [Sass::Script::Value::Number] "hue" The number of degrees by which the hue should change.
1007
- # @option kwargs [Sass::Script::Value::Number] "saturation" The amount by which the saturation should change.
1008
- # @option kwargs [Sass::Script::Value::Number] "lightness" The amount by which the lightness should change.
1009
- # @option kwargs [Sass::Script::Value::Number] "alpha" The amount by which the alpha channel should change.
1038
+ # @overload change_color($color, [$red], [$green], [$blue], [$hue], [$saturation], [$lightness], [$alpha])
1039
+ # @param $color [Sass::Script::Value::Color]
1040
+ # @param $red [Sass::Script::Value::Number] The new red component for the
1041
+ # color, within 0 and 255 inclusive
1042
+ # @param $green [Sass::Script::Value::Number] The new green component for
1043
+ # the color, within 0 and 255 inclusive
1044
+ # @param $blue [Sass::Script::Value::Number] The new blue component for the
1045
+ # color, within 0 and 255 inclusive
1046
+ # @param $hue [Sass::Script::Value::Number] The new hue component for the
1047
+ # color, in degrees
1048
+ # @param $saturation [Sass::Script::Value::Number] The new saturation
1049
+ # component for the color, between `0%` and `100%` inclusive
1050
+ # @param $lightness [Sass::Script::Value::Number] The new lightness
1051
+ # component for the color, within `0%` and `100%` inclusive
1052
+ # @param $alpha [Sass::Script::Value::Number] The new alpha component for
1053
+ # the color, within 0 and 1 inclusive
1010
1054
  # @return [Sass::Script::Value::Color]
1011
- # @raise [ArgumentError] if `color` is not a color,
1012
- # if any keyword argument is not a number,
1013
- # if any keyword argument is not in the legal range,
1014
- # if an unexpected keyword argument is given,
1015
- # or if both HSL and RGB properties are given.
1055
+ # @raise [ArgumentError] if any parameter is the wrong type or out-of
1056
+ # bounds, or if RGB properties and HSL properties are adjusted at the
1057
+ # same time
1016
1058
  def change_color(color, kwargs)
1017
- assert_type color, :Color
1059
+ assert_type color, :Color, :color
1018
1060
  with = Sass::Util.map_hash(%w[red green blue hue saturation lightness alpha]) do |name, max|
1019
1061
  next unless val = kwargs.delete(name)
1020
1062
  assert_type val, :Number, name
@@ -1030,33 +1072,32 @@ module Sass::Script
1030
1072
  end
1031
1073
  declare :change_color, [:color], :var_kwargs => true
1032
1074
 
1033
- # Mixes together two colors.
1034
- # Specifically, takes the average of each of the RGB components,
1035
- # optionally weighted by the given percentage.
1036
- # The opacity of the colors is also considered when weighting the components.
1075
+ # Mixes two colors together. Specifically, takes the average of each of the
1076
+ # RGB components, optionally weighted by the given percentage. The opacity
1077
+ # of the colors is also considered when weighting the components.
1037
1078
  #
1038
1079
  # The weight specifies the amount of the first color that should be included
1039
- # in the returned color.
1040
- # The default, 50%, means that half the first color
1041
- # and half the second color should be used.
1042
- # 25% means that a quarter of the first color
1043
- # and three quarters of the second color should be used.
1080
+ # in the returned color. The default, `50%`, means that half the first color
1081
+ # and half the second color should be used. `25%` means that a quarter of
1082
+ # the first color and three quarters of the second color should be used.
1044
1083
  #
1045
1084
  # @example
1046
1085
  # mix(#f00, #00f) => #7f007f
1047
1086
  # mix(#f00, #00f, 25%) => #3f00bf
1048
1087
  # mix(rgba(255, 0, 0, 0.5), #00f) => rgba(63, 0, 191, 0.75)
1049
- # @overload mix(color1, color2, weight: 50%)
1050
- # @param color1 [Sass::Script::Value::Color]
1051
- # @param color2 [Sass::Script::Value::Color]
1052
- # @param weight [Sass::Script::Value::Number] between 0% and 100%
1053
- # @return [Sass::Script::Value::Color]
1054
- # @raise [ArgumentError] if `color1` or `color2` aren't colors,
1055
- # or `weight` isn't a number between 0% and 100%
1056
- def mix(color1, color2, weight = Sass::Script::Value::Number.new(50))
1057
- assert_type color1, :Color
1058
- assert_type color2, :Color
1059
- assert_type weight, :Number
1088
+ # @overload mix($color-1, $color-2, $weight: 50%)
1089
+ # @param $color-1 [Sass::Script::Value::Color]
1090
+ # @param $color-2 [Sass::Script::Value::Color]
1091
+ # @param $weight [Sass::Script::Value::Number] The relative weight of each
1092
+ # color. Closer to `0%` gives more weight to `$color`, closer to `100%`
1093
+ # gives more weight to `$color2`
1094
+ # @return [Sass::Script::Value::Color]
1095
+ # @raise [ArgumentError] if `$weight` is out of bounds or any parameter is
1096
+ # the wrong type
1097
+ def mix(color_1, color_2, weight = Sass::Script::Value::Number.new(50))
1098
+ assert_type color_1, :Color, :color_1
1099
+ assert_type color_2, :Color, :color_2
1100
+ assert_type weight, :Number, :weight
1060
1101
 
1061
1102
  Sass::Util.check_range("Weight", 0..100, weight, '%')
1062
1103
 
@@ -1065,11 +1106,11 @@ module Sass::Script
1065
1106
  # to perform the weighted average of the two RGB values.
1066
1107
  #
1067
1108
  # It works by first normalizing both parameters to be within [-1, 1],
1068
- # where 1 indicates "only use color1", -1 indicates "only use color2", and
1109
+ # where 1 indicates "only use color_1", -1 indicates "only use color_2", and
1069
1110
  # all values in between indicated a proportionately weighted average.
1070
1111
  #
1071
1112
  # Once we have the normalized variables w and a, we apply the formula
1072
- # (w + a)/(1 + w*a) to get the combined weight (in [-1, 1]) of color1.
1113
+ # (w + a)/(1 + w*a) to get the combined weight (in [-1, 1]) of color_1.
1073
1114
  # This formula has two especially nice properties:
1074
1115
  #
1075
1116
  # * When either w or a are -1 or 1, the combined weight is also that number
@@ -1077,29 +1118,30 @@ module Sass::Script
1077
1118
  #
1078
1119
  # * When a is 0, the combined weight is w, and vice versa.
1079
1120
  #
1080
- # Finally, the weight of color1 is renormalized to be within [0, 1]
1081
- # and the weight of color2 is given by 1 minus the weight of color1.
1121
+ # Finally, the weight of color_1 is renormalized to be within [0, 1]
1122
+ # and the weight of color_2 is given by 1 minus the weight of color_1.
1082
1123
  p = (weight.value/100.0).to_f
1083
1124
  w = p*2 - 1
1084
- a = color1.alpha - color2.alpha
1125
+ a = color_1.alpha - color_2.alpha
1085
1126
 
1086
1127
  w1 = (((w * a == -1) ? w : (w + a)/(1 + w*a)) + 1)/2.0
1087
1128
  w2 = 1 - w1
1088
1129
 
1089
- rgb = color1.rgb.zip(color2.rgb).map {|v1, v2| v1*w1 + v2*w2}
1090
- alpha = color1.alpha*p + color2.alpha*(1-p)
1130
+ rgb = color_1.rgb.zip(color_2.rgb).map {|v1, v2| v1*w1 + v2*w2}
1131
+ alpha = color_1.alpha*p + color_2.alpha*(1-p)
1091
1132
  Sass::Script::Value::Color.new(rgb + [alpha])
1092
1133
  end
1093
1134
  declare :mix, [:color_1, :color_2]
1094
1135
  declare :mix, [:color_1, :color_2, :weight]
1095
1136
 
1096
- # Converts a color to grayscale.
1097
- # This is identical to `desaturate(color, 100%)`.
1137
+ # Converts a color to grayscale. This is identical to `desaturate(color,
1138
+ # 100%)`.
1098
1139
  #
1099
- # @param color [Sass::Script::Value::Color]
1100
- # @return [Sass::Script::Value::Color]
1101
- # @raise [ArgumentError] if `color` isn't a color
1102
1140
  # @see #desaturate
1141
+ # @overload grayscale($color)
1142
+ # @param $color [Sass::Script::Value::Color]
1143
+ # @return [Sass::Script::Value::Color]
1144
+ # @raise [ArgumentError] if `$color` isn't a color
1103
1145
  def grayscale(color)
1104
1146
  if color.is_a?(Sass::Script::Value::Number)
1105
1147
  return Sass::Script::Value::String.new("grayscale(#{color})")
@@ -1108,30 +1150,32 @@ module Sass::Script
1108
1150
  end
1109
1151
  declare :grayscale, [:color]
1110
1152
 
1111
- # Returns the complement of a color.
1112
- # This is identical to `adjust-hue(color, 180deg)`.
1153
+ # Returns the complement of a color. This is identical to `adjust-hue(color,
1154
+ # 180deg)`.
1113
1155
  #
1114
- # @param color [Sass::Script::Value::Color]
1115
- # @return [Sass::Script::Value::Color]
1116
- # @raise [ArgumentError] if `color` isn't a color
1117
1156
  # @see #adjust_hue #adjust-hue
1157
+ # @overload complement($color)
1158
+ # @param $color [Sass::Script::Value::Color]
1159
+ # @return [Sass::Script::Value::Color]
1160
+ # @raise [ArgumentError] if `$color` isn't a color
1118
1161
  def complement(color)
1119
1162
  adjust_hue color, Sass::Script::Value::Number.new(180)
1120
1163
  end
1121
1164
  declare :complement, [:color]
1122
1165
 
1123
- # Returns the inverse (negative) of a color.
1124
- # The red, green, and blue values are inverted, while the opacity is left alone.
1166
+ # Returns the inverse (negative) of a color. The red, green, and blue values
1167
+ # are inverted, while the opacity is left alone.
1125
1168
  #
1126
- # @param color [Sass::Script::Value::Color]
1169
+ # @overload invert($color)
1170
+ # @param $color [Sass::Script::Value::Color]
1127
1171
  # @return [Sass::Script::Value::Color]
1128
- # @raise [ArgumentError] if `color` isn't a color
1172
+ # @raise [ArgumentError] if `$color` isn't a color
1129
1173
  def invert(color)
1130
1174
  if color.is_a?(Sass::Script::Value::Number)
1131
1175
  return Sass::Script::Value::String.new("invert(#{color})")
1132
1176
  end
1133
1177
 
1134
- assert_type color, :Color
1178
+ assert_type color, :Color, :color
1135
1179
  color.with(
1136
1180
  :red => (255 - color.red),
1137
1181
  :green => (255 - color.green),
@@ -1139,16 +1183,17 @@ module Sass::Script
1139
1183
  end
1140
1184
  declare :invert, [:color]
1141
1185
 
1142
- # Removes quotes from a string if the string is quoted,
1143
- # or returns the same string if it's not.
1186
+ # Removes quotes from a string. If the string is already unquoted, this will
1187
+ # return it unmodified.
1144
1188
  #
1145
- # @param string [Sass::Script::Value::String]
1146
- # @return [Sass::Script::Value::String]
1147
- # @raise [ArgumentError] if `string` isn't a string
1148
1189
  # @see #quote
1149
1190
  # @example
1150
1191
  # unquote("foo") => foo
1151
1192
  # unquote(foo) => foo
1193
+ # @overload unquote($string)
1194
+ # @param $string [Sass::Script::Value::String]
1195
+ # @return [Sass::Script::Value::String]
1196
+ # @raise [ArgumentError] if `$string` isn't a string
1152
1197
  def unquote(string)
1153
1198
  if string.is_a?(Sass::Script::Value::String)
1154
1199
  Sass::Script::Value::String.new(string.value, :identifier)
@@ -1161,113 +1206,117 @@ module Sass::Script
1161
1206
  # Add quotes to a string if the string isn't quoted,
1162
1207
  # or returns the same string if it is.
1163
1208
  #
1164
- # @param string [Sass::Script::Value::String]
1165
- # @return [Sass::Script::Value::String]
1166
- # @raise [ArgumentError] if `string` isn't a string
1167
1209
  # @see #unquote
1168
1210
  # @example
1169
1211
  # quote("foo") => "foo"
1170
1212
  # quote(foo) => "foo"
1213
+ # @overload quote($string)
1214
+ # @param $string [Sass::Script::Value::String]
1215
+ # @return [Sass::Script::Value::String]
1216
+ # @raise [ArgumentError] if `$string` isn't a string
1171
1217
  def quote(string)
1172
- assert_type string, :String
1218
+ assert_type string, :String, :string
1173
1219
  Sass::Script::Value::String.new(string.value, :string)
1174
1220
  end
1175
1221
  declare :quote, [:string]
1176
1222
 
1177
1223
  # Returns the number of characters in a string.
1178
1224
  #
1179
- # @return [Sass::Script::Value::Number]
1180
- # @raise [ArgumentError] if `string` isn't a string
1181
1225
  # @example
1182
1226
  # str-length("foo") => 3
1227
+ # @overload str_length($string)
1228
+ # @param $string [Sass::Script::Value::String]
1229
+ # @return [Sass::Script::Value::Number]
1230
+ # @raise [ArgumentError] if `$string` isn't a string
1183
1231
  def str_length(string)
1184
- assert_type string, :String
1232
+ assert_type string, :String, :string
1185
1233
  Sass::Script::Value::Number.new(string.value.size)
1186
1234
  end
1187
1235
  declare :str_length, [:string]
1188
1236
 
1189
- # Inserts a string into another string.
1237
+ # Inserts `$insert` into `$string` at `$index`.
1190
1238
  #
1191
- # Inserts the `$insert` string into the `$original` before the character at
1192
- # the given `$index`.
1239
+ # Note that unlike some languages, the first character in a Sass string is
1240
+ # number 1, the second number 2, and so forth.
1193
1241
  #
1194
- # @param original [Sass::Script::Value::String]
1195
- # The string that will receive the insertion.
1196
- # @param insert [Sass::Script::Value::String]
1197
- # The string that will be inserted.
1198
- # @param index [Sass::Script::Value::Number]
1199
- # The position where inserted string will start.
1200
- # Negative indices count from the end of the original string.
1201
- #
1202
- # @return [Sass::Script::Value::String] A new string
1203
- # @raise [ArgumentError] if `$original` isn't a string, `$insert` isn't a string, or `$index` isn't a number.
1204
1242
  # @example
1205
1243
  # str-insert("abcd", "X", 1) => "Xabcd"
1206
1244
  # str-insert("abcd", "X", 4) => "abcXd"
1207
- # str-insert("abcd", "X", 100) => "abcdX"
1208
- # str-insert("abcd", "X", -100) => "Xabcd"
1245
+ # str-insert("abcd", "X", 5) => "abcXd"
1246
+ #
1247
+ # @overload str_insert($string, $insert, $index)
1248
+ # @param $string [Sass::Script::Value::String]
1249
+ # @param $insert [Sass::Script::Value::String]
1250
+ # @param $index [Sass::Script::Value::Number] The position at which
1251
+ # `$insert` will be inserted. Negative indices count from the end of
1252
+ # `$string`. An index that's outside the bounds of the string will insert
1253
+ # `$insert` at the front or back of the string
1254
+ # @return [Sass::Script::Value::String] The result string. This will be
1255
+ # quoted if and only if `$string` was quoted
1256
+ # @raise [ArgumentError] if any parameter is the wrong type
1209
1257
  def str_insert(original, insert, index)
1210
- assert_type original, :String, "original"
1211
- assert_type insert, :String, "insert"
1212
- assert_integer index, "index"
1213
- assert_unit index, nil, "index"
1258
+ assert_type original, :String, :string
1259
+ assert_type insert, :String, :insert
1260
+ assert_integer index, :index
1261
+ assert_unit index, nil, :index
1214
1262
  insertion_point = index.value > 0 ? [index.value - 1, original.value.size].min : [index.value, -original.value.size - 1].max
1215
1263
  Sass::Script::Value::String.new(original.value.dup.insert(insertion_point, insert.value), original.type)
1216
1264
  end
1217
- declare :str_insert, [:original, :insert, :index]
1265
+ declare :str_insert, [:string, :insert, :index]
1218
1266
 
1219
- # Starting at the left, finds the index of the first location
1220
- # where `substring` is found in `string`.
1267
+ # Returns the index of the first occurance of `$substring` in `$string`. If
1268
+ # there is no such occurance, returns 0.
1269
+ #
1270
+ # Note that unlike some languages, the first character in a Sass string is
1271
+ # number 1, the second number 2, and so forth.
1221
1272
  #
1222
- # @return [Sass::Script::Value::Number] The index of the substring, or 0 if not found.
1223
- # @raise [ArgumentError] if `original` isn't a string, `insert` isn't a string, or `index` isn't a number.
1224
- # @param string The string to search
1225
- # @param substring The string to search for
1226
1273
  # @example
1227
1274
  # str-index(abcd, a) => 1
1228
1275
  # str-index(abcd, ab) => 1
1229
1276
  # str-index(abcd, X) => 0
1230
1277
  # str-index(abcd, c) => 3
1278
+ #
1279
+ # @overload str_index($string, $substring)
1280
+ # @param $string [Sass::Script::Value::String]
1281
+ # @param $substring [Sass::Script::Value::String]
1282
+ # @return [Sass::Script::Value::Number]
1283
+ # @raise [ArgumentError] if any parameter is the wrong type
1231
1284
  def str_index(string, substring)
1232
- assert_type string, :String
1233
- assert_type substring, :String
1285
+ assert_type string, :String, :string
1286
+ assert_type substring, :String, :substring
1234
1287
  index = string.value.index(substring.value) || -1
1235
1288
  Sass::Script::Value::Number.new(index + 1)
1236
1289
  end
1237
1290
  declare :str_index, [:string, :substring]
1238
1291
 
1239
1292
 
1240
- # Slice a substring from `string` from `start-at` index to `end-at` index.
1293
+ # Extracts a substring from `$string`. The substring will begin at index
1294
+ # `$start-at` and ends at index `$end-at`.
1295
+ #
1296
+ # Note that unlike some languages, the first character in a Sass string is
1297
+ # number 1, the second number 2, and so forth.
1241
1298
  #
1242
- # @return [Sass::Script::Value::String] A new string
1243
- # @param start_at
1244
- # The index (inclusive) of the first character to slice out of the string.
1245
- # If negative, counts from the end of the string.
1246
- # @param end_at
1247
- # The index (inclusive) of the last character to slice out of the string.
1248
- # @overload str_slice(string, start_at)
1249
- # Slice starting at `start_at` to the end of the string.
1250
- # @overload str_slice(string, start_at, end_at)
1251
- # Slice starting at `start_at` to `end_at`
1252
- # @raise [ArgumentError] if `string` isn't a string or `start_at` and `end_at` aren't unitless numbers
1253
1299
  # @example
1254
- # str-slice(abcd, 2, 3) => bc
1255
- # str-slice(abcd, 2 ) => bcd
1256
- # str-slice(abcd, -2 ) => cd
1257
- # str-slice(abcd, 2, -2) => bc
1258
- # str-slice("abcd", 3, -3) => ""
1259
- # str-slice(abcd, 1, 1) => a
1260
- # str-slice(abcd, 1, 2) => ab
1261
- # str-slice(abcd, 1, 4) => abcd
1262
- # str-slice(abcd, -100, 4) => abcd
1263
- # str-slice(abcd, 1, 100) => abcd
1264
- # str-slice("abcd", 2, 1) => ""
1265
- # str-slice("abcd", 2, 3) => "bc"
1300
+ # str-slice("abcd", 2, 3) => "bc"
1301
+ # str-slice("abcd", 2) => "bcd"
1302
+ # str-slice("abcd", -3, -2) => "bc"
1303
+ # str-slice("abcd", 2, -2) => "bc"
1304
+ #
1305
+ # @overload str_slice($string, $start-at, $end-at: -1)
1306
+ # @param $start-at [Sass::Script::Value::Number] The index of the first
1307
+ # character of the substring. If this is negative, it counts from the end
1308
+ # of `$string`
1309
+ # @param $end-before [Sass::Script::Value::Number] The index of the last
1310
+ # character of the substring. If this is negative, it counts from the end
1311
+ # of `$string`. Defaults to -1
1312
+ # @return [Sass::Script::Value::String] The substring. This will be quoted
1313
+ # if and only if `$string` was quoted
1314
+ # @raise [ArgumentError] if any parameter is the wrong type
1266
1315
  def str_slice(string, start_at, end_at = nil)
1267
- assert_type string, :String
1316
+ assert_type string, :String, :string
1268
1317
  assert_unit start_at, nil, "start-at"
1269
1318
 
1270
- end_at = Sass::Script::Value::Number.new(-1)if end_at.nil?
1319
+ end_at = Sass::Script::Value::Number.new(-1) if end_at.nil?
1271
1320
  assert_unit end_at, nil, "end-at"
1272
1321
 
1273
1322
  s = start_at.value > 0 ? start_at.value - 1 : start_at.value
@@ -1282,33 +1331,37 @@ module Sass::Script
1282
1331
  declare :str_slice, [:string, :start_at]
1283
1332
  declare :str_slice, [:string, :start_at, :end_at]
1284
1333
 
1285
- # Convert a string to upper case
1334
+ # Converts a string to upper case.
1286
1335
  #
1287
- # @return [Sass::Script::Value::String]
1288
- # @raise [ArgumentError] if `string` isn't a string
1289
1336
  # @example
1290
1337
  # to-upper-case(abcd) => ABCD
1291
- # to-upper-case("abcd") => "ABCD"
1338
+ #
1339
+ # @overload to_upper_case($string)
1340
+ # @param $string [Sass::Script::Value::String]
1341
+ # @return [Sass::Script::Value::String]
1342
+ # @raise [ArgumentError] if `$string` isn't a string
1292
1343
  def to_upper_case(string)
1293
- assert_type string, :String
1344
+ assert_type string, :String, :string
1294
1345
  Sass::Script::Value::String.new(string.value.upcase, string.type)
1295
1346
  end
1296
1347
  declare :to_upper_case, [:string]
1297
1348
 
1298
- # Convert a string to lower case
1349
+ # Convert a string to lower case,
1299
1350
  #
1300
- # @return [Sass::Script::Value::String]
1301
- # @raise [ArgumentError] if `string` isn't a string
1302
1351
  # @example
1303
1352
  # to-lower-case(ABCD) => abcd
1304
- # to-lower-case("ABCD") => "abcd"
1353
+ #
1354
+ # @overload to_lower_case($string)
1355
+ # @param $string [Sass::Script::Value::String]
1356
+ # @return [Sass::Script::Value::String]
1357
+ # @raise [ArgumentError] if `$string` isn't a string
1305
1358
  def to_lower_case(string)
1306
- assert_type string, :String
1359
+ assert_type string, :String, :string
1307
1360
  Sass::Script::Value::String.new(string.value.downcase, string.type)
1308
1361
  end
1309
1362
  declare :to_lower_case, [:string]
1310
1363
 
1311
- # Inspects the type of the argument, returning it as an unquoted string.
1364
+ # Returns the type of a value.
1312
1365
  #
1313
1366
  # @example
1314
1367
  # type-of(100px) => number
@@ -1317,29 +1370,33 @@ module Sass::Script
1317
1370
  # type-of(true) => bool
1318
1371
  # type-of(#fff) => color
1319
1372
  # type-of(blue) => color
1320
- # @param value [Value] The object to inspect
1321
- # @return [Sass::Script::Value::String] The unquoted string name of the value's type
1373
+ # @overload type_of($value)
1374
+ # @param $value [Sass::Script::Value::Base] The value to inspect
1375
+ # @return [Sass::Script::Value::String] The unquoted string name of the
1376
+ # value's type
1322
1377
  def type_of(value)
1323
1378
  Sass::Script::Value::String.new(value.class.name.gsub(/Sass::Script::Value::/,'').downcase)
1324
1379
  end
1325
1380
  declare :type_of, [:value]
1326
1381
 
1327
- # Returns true if the feature name specified exists in the current Sass runtime.
1382
+ # Returns whether a feature exists in the current Sass runtime.
1328
1383
  #
1329
1384
  # @example
1330
1385
  # feature-exists(some-feature-that-exists) => true
1331
1386
  # feature-exists(what-is-this-i-dont-know) => false
1332
1387
  #
1333
- # @param feature [Sass::Script::Value::String] The name of the feature to check
1334
- # @return [Sass::Script::Value::Bool] Whether the feature is supported in this version of Sass.
1388
+ # @overload feature_exists($feature)
1389
+ # @param $feature [Sass::Script::Value::String] The name of the feature
1390
+ # @return [Sass::Script::Value::Bool] Whether the feature is supported in this version of Sass
1391
+ # @raise [ArgumentError] if `$feature` isn't a string
1335
1392
  def feature_exists(feature)
1393
+ assert_type feature, :String, :feature
1336
1394
  Sass::Script::Value::Bool.new(Sass.has_feature?(feature.value))
1337
1395
  end
1338
1396
  declare :feature_exists, [:feature]
1339
1397
 
1340
-
1341
- # Inspects the unit of the number, returning it as a quoted string.
1342
- # Complex units are sorted in alphabetical order by numerator and denominator.
1398
+ # Returns the unit(s) associated with a number. Complex units are sorted in
1399
+ # alphabetical order by numerator and denominator.
1343
1400
  #
1344
1401
  # @example
1345
1402
  # unit(100) => ""
@@ -1347,57 +1404,62 @@ module Sass::Script
1347
1404
  # unit(3em) => "em"
1348
1405
  # unit(10px * 5em) => "em*px"
1349
1406
  # unit(10px * 5em / 30cm / 1rem) => "em*px/cm*rem"
1350
- # @param number [Value] The number to inspect
1351
- # @return [Sass::Script::Value::String] The unit(s) of the number
1352
- # @raise [ArgumentError] if `number` isn't a number
1407
+ # @overload unit($number)
1408
+ # @param $number [Sass::Script::Value::Number]
1409
+ # @return [Sass::Script::Value::String] The unit(s) of the number, as a
1410
+ # quoted string
1411
+ # @raise [ArgumentError] if `$number` isn't a number
1353
1412
  def unit(number)
1354
- assert_type number, :Number
1413
+ assert_type number, :Number, :number
1355
1414
  Sass::Script::Value::String.new(number.unit_str, :string)
1356
1415
  end
1357
1416
  declare :unit, [:number]
1358
1417
 
1359
- # Inspects the unit of the number, returning a boolean indicating if it is unitless.
1418
+ # Returns whether a number has units.
1360
1419
  #
1361
1420
  # @example
1362
1421
  # unitless(100) => true
1363
1422
  # unitless(100px) => false
1364
- # @param number [Value] The number to inspect
1365
- # @return [Sass::Script::Value::Bool] Whether or not the number is unitless
1366
- # @raise [ArgumentError] if `number` isn't a number
1423
+ # @overload unitless($number)
1424
+ # @param $number [Sass::Script::Value::Number]
1425
+ # @return [Sass::Script::Value::Bool]
1426
+ # @raise [ArgumentError] if `$number` isn't a number
1367
1427
  def unitless(number)
1368
- assert_type number, :Number
1428
+ assert_type number, :Number, :number
1369
1429
  Sass::Script::Value::Bool.new(number.unitless?)
1370
1430
  end
1371
1431
  declare :unitless, [:number]
1372
1432
 
1373
- # Returns true if two numbers are similar enough to be added, subtracted, or compared.
1433
+ # Returns whether two numbers can added, subtracted, or compared.
1374
1434
  #
1375
1435
  # @example
1376
1436
  # comparable(2px, 1px) => true
1377
1437
  # comparable(100px, 3em) => false
1378
1438
  # comparable(10cm, 3mm) => true
1379
- # @param number_1 [Sass::Script::Value::Number]
1380
- # @param number_2 [Sass::Script::Value::Number]
1381
- # @return [Sass::Script::Value::Bool] indicating if the numbers can be compared.
1382
- # @raise [ArgumentError] if `number_1` or `number_2` aren't numbers
1439
+ # @overload comparable($number-1, $number-2)
1440
+ # @param $number-1 [Sass::Script::Value::Number]
1441
+ # @param $number-2 [Sass::Script::Value::Number]
1442
+ # @return [Sass::Script::Value::Bool]
1443
+ # @raise [ArgumentError] if either parameter is the wrong type
1383
1444
  def comparable(number_1, number_2)
1384
- assert_type number_1, :Number
1385
- assert_type number_2, :Number
1445
+ assert_type number_1, :Number, :number_1
1446
+ assert_type number_2, :Number, :number_2
1386
1447
  Sass::Script::Value::Bool.new(number_1.comparable_to?(number_2))
1387
1448
  end
1388
1449
  declare :comparable, [:number_1, :number_2]
1389
1450
 
1390
- # Converts a decimal number to a percentage.
1451
+ # Converts a unitless number to a percentage.
1391
1452
  #
1392
1453
  # @example
1454
+ # percentage(0.2) => 20%
1393
1455
  # percentage(100px / 50px) => 200%
1394
- # @param value [Sass::Script::Value::Number]
1395
- # The decimal number to convert to a percentage
1396
- # @return [Sass::Script::Value::Number] The percentage
1397
- # @raise [ArgumentError] If `value` isn't a unitless number
1456
+ # @overload percentage($value)
1457
+ # @param $value [Sass::Script::Value::Number]
1458
+ # @return [Sass::Script::Value::Number]
1459
+ # @raise [ArgumentError] if `$value` isn't a unitless number
1398
1460
  def percentage(value)
1399
1461
  unless value.is_a?(Sass::Script::Value::Number) && value.unitless?
1400
- raise ArgumentError.new("#{value.inspect} is not a unitless number")
1462
+ raise ArgumentError.new("$value: #{value.inspect} is not a unitless number")
1401
1463
  end
1402
1464
  Sass::Script::Value::Number.new(value.value * 100, ['%'])
1403
1465
  end
@@ -1408,76 +1470,83 @@ module Sass::Script
1408
1470
  # @example
1409
1471
  # round(10.4px) => 10px
1410
1472
  # round(10.6px) => 11px
1411
- # @param value [Sass::Script::Value::Number] The number
1412
- # @return [Sass::Script::Value::Number] The rounded number
1413
- # @raise [ArgumentError] if `value` isn't a number
1473
+ # @overload round($value)
1474
+ # @param $value [Sass::Script::Value::Number]
1475
+ # @return [Sass::Script::Value::Number]
1476
+ # @raise [ArgumentError] if `$value` isn't a number
1414
1477
  def round(value)
1415
1478
  numeric_transformation(value) {|n| n.round}
1416
1479
  end
1417
1480
  declare :round, [:value]
1418
1481
 
1419
- # Rounds a number up to the nearest whole number.
1482
+ # Rounds a number up to the next whole number.
1420
1483
  #
1421
1484
  # @example
1422
1485
  # ceil(10.4px) => 11px
1423
1486
  # ceil(10.6px) => 11px
1424
- # @param value [Sass::Script::Value::Number] The number
1425
- # @return [Sass::Script::Value::Number] The rounded number
1426
- # @raise [ArgumentError] if `value` isn't a number
1487
+ # @overload ceil($value)
1488
+ # @param $value [Sass::Script::Value::Number]
1489
+ # @return [Sass::Script::Value::Number]
1490
+ # @raise [ArgumentError] if `$value` isn't a number
1427
1491
  def ceil(value)
1428
1492
  numeric_transformation(value) {|n| n.ceil}
1429
1493
  end
1430
1494
  declare :ceil, [:value]
1431
1495
 
1432
- # Rounds down to the nearest whole number.
1496
+ # Rounds a number down to the previous whole number.
1433
1497
  #
1434
1498
  # @example
1435
1499
  # floor(10.4px) => 10px
1436
1500
  # floor(10.6px) => 10px
1437
- # @param value [Sass::Script::Value::Number] The number
1438
- # @return [Sass::Script::Value::Number] The rounded number
1439
- # @raise [ArgumentError] if `value` isn't a number
1501
+ # @overload floor($value)
1502
+ # @param $value [Sass::Script::Value::Number]
1503
+ # @return [Sass::Script::Value::Number]
1504
+ # @raise [ArgumentError] if `$value` isn't a number
1440
1505
  def floor(value)
1441
1506
  numeric_transformation(value) {|n| n.floor}
1442
1507
  end
1443
1508
  declare :floor, [:value]
1444
1509
 
1445
- # Finds the absolute value of a number.
1510
+ # Returns the absolute value of a number.
1446
1511
  #
1447
1512
  # @example
1448
1513
  # abs(10px) => 10px
1449
1514
  # abs(-10px) => 10px
1450
- # @param value [Sass::Script::Value::Number] The number
1451
- # @return [Sass::Script::Value::Number] The absolute value
1452
- # @raise [ArgumentError] if `value` isn't a number
1515
+ # @overload abs($value)
1516
+ # @param $value [Sass::Script::Value::Number]
1517
+ # @return [Sass::Script::Value::Number]
1518
+ # @raise [ArgumentError] if `$value` isn't a number
1453
1519
  def abs(value)
1454
1520
  numeric_transformation(value) {|n| n.abs}
1455
1521
  end
1456
1522
  declare :abs, [:value]
1457
1523
 
1458
- # Finds the minimum of several values. This function takes any number of
1524
+ # Finds the minimum of several numbers. This function takes any number of
1459
1525
  # arguments.
1460
1526
  #
1461
1527
  # @example
1462
1528
  # min(1px, 4px) => 1px
1463
1529
  # min(5em, 3em, 4em) => 3em
1464
- # @param values [Array<Sass::Script::Value::Number>] The numbers
1465
- # @return [Sass::Script::Value::Number] The minimum value
1530
+ # @overload min($numbers...)
1531
+ # @param $numbers [[Sass::Script::Value::Number]]
1532
+ # @return [Sass::Script::Value::Number]
1466
1533
  # @raise [ArgumentError] if any argument isn't a number, or if not all of
1467
1534
  # the arguments have comparable units
1468
- def min(*values)
1469
- values.each {|v| assert_type v, :Number}
1470
- values.inject {|min, val| min.lt(val).to_bool ? min : val}
1535
+ def min(*numbers)
1536
+ numbers.each {|n| assert_type n, :Number}
1537
+ numbers.inject {|min, num| min.lt(num).to_bool ? min : num}
1471
1538
  end
1472
1539
  declare :min, [], :var_args => :true
1473
1540
 
1474
- # Finds the maximum of several values. This function takes any number of
1541
+ # Finds the maximum of several numbers. This function takes any number of
1475
1542
  # arguments.
1476
1543
  #
1477
1544
  # @example
1478
1545
  # max(1px, 4px) => 4px
1479
1546
  # max(5em, 3em, 4em) => 5em
1480
- # @return [Sass::Script::Value::Number] The maximum value
1547
+ # @overload max($numbers...)
1548
+ # @param $numbers [[Sass::Script::Value::Number]]
1549
+ # @return [Sass::Script::Value::Number]
1481
1550
  # @raise [ArgumentError] if any argument isn't a number, or if not all of
1482
1551
  # the arguments have comparable units
1483
1552
  def max(*values)
@@ -1491,8 +1560,9 @@ module Sass::Script
1491
1560
  # @example
1492
1561
  # length(10px) => 1
1493
1562
  # length(10px 20px 30px) => 3
1494
- # @param list [Value] The list
1495
- # @return [Sass::Script::Value::Number] The length
1563
+ # @overload length($list)
1564
+ # @param $list [Sass::Script::Value::Base]
1565
+ # @return [Sass::Script::Value::Number]
1496
1566
  def length(list)
1497
1567
  Sass::Script::Value::Number.new(list.to_a.size)
1498
1568
  end
@@ -1500,21 +1570,21 @@ module Sass::Script
1500
1570
 
1501
1571
  # Gets the nth item in a list.
1502
1572
  #
1503
- # Note that unlike some languages, the first item in a Sass list is number 1,
1504
- # the second number 2, and so forth. You can also use negative numbers to
1505
- # count from the end of the list. So -1 is the last item, -2 is the
1506
- # second-to-last item, etc.
1573
+ # Note that unlike some languages, the first item in a Sass list is number
1574
+ # 1, the second number 2, and so forth.
1507
1575
  #
1508
1576
  # @example
1509
1577
  # nth(10px 20px 30px, 1) => 10px
1510
1578
  # nth((Helvetica, Arial, sans-serif), 3) => sans-serif
1511
- # nth((red, green, blue), -2) => green
1512
- # @param list [Value] The list
1513
- # @param n [Sass::Script::Value::Number] The index into the list
1514
- # @return [Sass::Script::Value::Base] The nth item in the list
1515
- # @raise [ArgumentError] If `n` isn't an integer whose absolute value is between 1 and the list's length.
1579
+ # @overload nth($list, $n)
1580
+ # @param $list [Sass::Script::Value::Base]
1581
+ # @param $n [Sass::Script::Value::Number] The index of the item to get.
1582
+ # Negative indices count from the end of the list.
1583
+ # @return [Sass::Script::Value::Base]
1584
+ # @raise [ArgumentError] if `$n` isn't an integer between 1 and the length
1585
+ # of `$list`
1516
1586
  def nth(list, n)
1517
- assert_type n, :Number
1587
+ assert_type n, :Number, :n
1518
1588
  if !n.int? || n.to_i == 0
1519
1589
  raise ArgumentError.new("List index #{n} must be a non-zero integer")
1520
1590
  elsif list.to_a.size == 0
@@ -1528,12 +1598,12 @@ module Sass::Script
1528
1598
  end
1529
1599
  declare :nth, [:list, :n]
1530
1600
 
1531
- # Joins together two lists into a new list.
1601
+ # Joins together two lists into one.
1532
1602
  #
1533
- # Unless the `$separator` argument is passed,
1534
- # if one list is comma-separated and one is space-separated,
1535
- # the first parameter's separator is used for the resulting list.
1536
- # If the lists have only one item each, spaces are used for the resulting list.
1603
+ # Unless `$separator` is passed, if one list is comma-separated and one is
1604
+ # space-separated, the first parameter's separator is used for the resulting
1605
+ # list. If both lists have fewer than two items, spaces are used for the
1606
+ # resulting list.
1537
1607
  #
1538
1608
  # @example
1539
1609
  # join(10px 20px, 30px 40px) => 10px 20px 30px 40px
@@ -1541,15 +1611,15 @@ module Sass::Script
1541
1611
  # join(10px, 20px) => 10px 20px
1542
1612
  # join(10px, 20px, comma) => 10px, 20px
1543
1613
  # join((blue, red), (#abc, #def), space) => blue red #abc #def
1544
- # @overload join(list1, list2, separator: auto)
1545
- # @param list1 [Value] The first list to join
1546
- # @param list2 [Value] The second list to join
1547
- # @param separator [Sass::Script::Value::String]
1548
- # How the list separator (comma or space) should be determined. If this
1549
- # is `comma` or `space`, that is always the separator; if this is `auto`
1550
- # (the default), the separator is determined as explained above.
1614
+ # @overload join($list1, $list2, $separator: auto)
1615
+ # @param $list1 [Sass::Script::Value::Base]
1616
+ # @param $list2 [Sass::Script::Value::Base]
1617
+ # @param $separator [Sass::Script::Value::String] The list separator to use.
1618
+ # If this is `comma` or `space`, that separator will be used. If this is
1619
+ # `auto` (the default), the separator is determined as explained above.
1620
+ # @return [Sass::Script::Value::List]
1551
1621
  def join(list1, list2, separator = Sass::Script::Value::String.new("auto"))
1552
- assert_type separator, :String
1622
+ assert_type separator, :String, :separator
1553
1623
  unless %w[auto space comma].include?(separator.value)
1554
1624
  raise ArgumentError.new("Separator name must be space, comma, or auto")
1555
1625
  end
@@ -1568,8 +1638,7 @@ module Sass::Script
1568
1638
 
1569
1639
  # Appends a single value onto the end of a list.
1570
1640
  #
1571
- # Unless the `$separator` argument is passed,
1572
- # if the list has only one item,
1641
+ # Unless the `$separator` argument is passed, if the list had only one item,
1573
1642
  # the resulting list will be space-separated.
1574
1643
  #
1575
1644
  # @example
@@ -1578,15 +1647,15 @@ module Sass::Script
1578
1647
  # append(10px 20px, 30px 40px) => 10px 20px (30px 40px)
1579
1648
  # append(10px, 20px, comma) => 10px, 20px
1580
1649
  # append((blue, red), green, space) => blue red green
1581
- # @overload append(list, val, separator: auto)
1582
- # @param list [Value] The list to add the value to
1583
- # @param val [Value] The value to add to the end of the list
1584
- # @param separator [Sass::Script::Value::String]
1585
- # How the list separator (comma or space) should be determined. If this
1586
- # is `comma` or `space`, that is always the separator; if this is `auto`
1587
- # (the default), the separator is the same as that used by the list.
1588
- def append(list, val, separator = Sass::Script::Value::String.new("auto"))
1589
- assert_type separator, :String
1650
+ # @overload append($list, $val, $separator: auto)
1651
+ # @param $list [Sass::Script::Value::Base]
1652
+ # @param $val [Sass::Script::Value::Base]
1653
+ # @param $separator [Sass::Script::Value::String] The list separator to use.
1654
+ # If this is `comma` or `space`, that separator will be used. If this is
1655
+ # `auto` (the default), the separator is determined as explained above.
1656
+ # @return [Sass::Script::Value::List]
1657
+ def append(list, val, separator = Sass::Script::String.new("auto"))
1658
+ assert_type separator, :String, :separator
1590
1659
  unless %w[auto space comma].include?(separator.value)
1591
1660
  raise ArgumentError.new("Separator name must be space, comma, or auto")
1592
1661
  end
@@ -1602,8 +1671,9 @@ module Sass::Script
1602
1671
  declare :append, [:list, :val]
1603
1672
  declare :append, [:list, :val, :separator]
1604
1673
 
1605
- # Combines several lists into a single comma separated list, where the nth
1606
- # value is a space separated list of the source lists' nth values.
1674
+ # Combines several lists into a single multidimensional list. The nth value
1675
+ # of the resulting list is a space separated list of the source lists' nth
1676
+ # values.
1607
1677
  #
1608
1678
  # The length of the resulting list is the length of the
1609
1679
  # shortest list.
@@ -1611,6 +1681,9 @@ module Sass::Script
1611
1681
  # @example
1612
1682
  # zip(1px 1px 3px, solid dashed solid, red green blue)
1613
1683
  # => 1px solid red, 1px dashed green, 3px solid blue
1684
+ # @overload zip($lists...)
1685
+ # @param $lists [[Sass::Script::Value::Base]]
1686
+ # @return [Sass::Script::Value::List]
1614
1687
  def zip(*lists)
1615
1688
  length = nil
1616
1689
  values = []
@@ -1628,12 +1701,20 @@ module Sass::Script
1628
1701
  declare :zip, [], :var_args => true
1629
1702
 
1630
1703
 
1631
- # Returns the position of a value within a list. If not found, returns
1632
- # false.
1704
+ # Returns the position of a value within a list. If the value isn't found,
1705
+ # returns false instead.
1706
+ #
1707
+ # Note that unlike some languages, the first item in a Sass list is number
1708
+ # 1, the second number 2, and so forth.
1633
1709
  #
1634
1710
  # @example
1635
1711
  # index(1px solid red, solid) => 2
1636
1712
  # index(1px solid red, dashed) => false
1713
+ # @overload index($list, $value)
1714
+ # @param $list [Sass::Script::Value::Base]
1715
+ # @param $value [Sass::Script::Value::Base]
1716
+ # @return [Sass::Script::Value::Number, Sass::Script::Value::Bool] The
1717
+ # 1-based index of `$value` in `$list`, or `false`
1637
1718
  def index(list, value)
1638
1719
  index = list.to_a.index {|e| e.eq(value).to_bool }
1639
1720
  if index
@@ -1644,13 +1725,16 @@ module Sass::Script
1644
1725
  end
1645
1726
  declare :index, [:list, :value]
1646
1727
 
1647
- # Returns the separator of the given list.
1648
- # If not a list, returns false.
1728
+ # Returns the separator of a list. If the list doesn't have a separator due
1729
+ # to having fewer than two elements, returns `space`.
1649
1730
  #
1650
1731
  # @example
1651
- # list-separator(1px 2px 3px) => 'space'
1652
- # list-separator(1px, 2px, 3px) => 'comma'
1653
- # list-separator('foo') => 'space'
1732
+ # list-separator(1px 2px 3px) => space
1733
+ # list-separator(1px, 2px, 3px) => comma
1734
+ # list-separator('foo') => space
1735
+ # @overload list_separator($list)
1736
+ # @param $list [Sass::Script::Value::Base]
1737
+ # @return [Sass::Script::Value::String] `comma` or `space`
1654
1738
  def list_separator(list)
1655
1739
  if list.is_a?(Sass::Script::Value::List)
1656
1740
  Sass::Script::Value::String.new(list.separator.to_s)
@@ -1660,15 +1744,19 @@ module Sass::Script
1660
1744
  end
1661
1745
  declare :separator, [:list]
1662
1746
 
1663
- # Returns one of two values based on the truth value of the first argument.
1747
+ # Returns one of two values, depending on whether or not `$condition` is
1748
+ # true. Just like in `@if`, all values other than `false` and `null` are
1749
+ # considered to be true.
1664
1750
  #
1665
1751
  # @example
1666
1752
  # if(true, 1px, 2px) => 1px
1667
1753
  # if(false, 1px, 2px) => 2px
1668
- # @param condition [Sass::Script::Value::Bool]
1669
- # Whether the first or second value will be returned.
1670
- # @param if_true [Value] The value that will be returned if `$condition` is true.
1671
- # @param if_false [Value] The value that will be returned if `$condition` is false.
1754
+ # @overload if($condition, $if-true, $if-false)
1755
+ # @param $condition [Sass::Script::Value::Base] Whether the `$if-true` or
1756
+ # `$if-false` will be returned
1757
+ # @param $if-true [Sass::Script::Value::Base]
1758
+ # @param $if-false [Sass::Script::Value::Base]
1759
+ # @return [Sass::Script::Value::Base] `$if-true` or `$if-false`
1672
1760
  def if(condition, if_true, if_false)
1673
1761
  if condition.to_bool
1674
1762
  if_true
@@ -1678,9 +1766,12 @@ module Sass::Script
1678
1766
  end
1679
1767
  declare :if, [:condition, :if_true, :if_false]
1680
1768
 
1681
- # Returns a unique unquoted string that is a legal CSS identifier. The
1682
- # identifier returned is only guaranteed to be unique within the scope of a
1683
- # single Sass run.
1769
+ # Returns a unique CSS identifier. The identifier is returned as an unquoted
1770
+ # string. The identifier returned is only guaranteed to be unique within the
1771
+ # scope of a single Sass run.
1772
+ #
1773
+ # @overload unique_id()
1774
+ # @return [Sass::Script::Value::String]
1684
1775
  def unique_id
1685
1776
  Thread.current[:sass_last_unique_id] ||= rand(36**8)
1686
1777
  # avoid the temptation of trying to guess the next unique value.
@@ -1697,6 +1788,8 @@ module Sass::Script
1697
1788
  #
1698
1789
  # @example
1699
1790
  # counter(item, ".") => counter(item,".")
1791
+ # @overload counter($args...)
1792
+ # @return [String]
1700
1793
  def counter(*args)
1701
1794
  Sass::Script::Value::String.new("counter(#{args.map {|a| a.to_s(options)}.join(',')})")
1702
1795
  end
@@ -1708,13 +1801,13 @@ module Sass::Script
1708
1801
  # another numeric value with the same units.
1709
1802
  # It yields a number to a block to perform the operation and return a number
1710
1803
  def numeric_transformation(value)
1711
- assert_type value, :Number
1804
+ assert_type value, :Number, :value
1712
1805
  Sass::Script::Value::Number.new(yield(value.value), value.numerator_units, value.denominator_units)
1713
1806
  end
1714
1807
 
1715
1808
  def _adjust(color, amount, attr, range, op, units = "")
1716
- assert_type color, :Color
1717
- assert_type amount, :Number
1809
+ assert_type color, :Color, :color
1810
+ assert_type amount, :Number, :amount
1718
1811
  Sass::Util.check_range('Amount', range, amount, units)
1719
1812
 
1720
1813
  # TODO: is it worth restricting here,