sass 3.2.7 → 3.3.0.rc.1
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/MIT-LICENSE +2 -2
- data/README.md +14 -2
- data/Rakefile +25 -1
- data/VERSION +1 -1
- data/VERSION_DATE +1 -1
- data/VERSION_NAME +1 -1
- data/lib/sass/cache_stores/base.rb +4 -2
- data/lib/sass/cache_stores/chain.rb +2 -1
- data/lib/sass/cache_stores/filesystem.rb +2 -6
- data/lib/sass/cache_stores/memory.rb +1 -1
- data/lib/sass/cache_stores/null.rb +2 -2
- data/lib/sass/callbacks.rb +1 -0
- data/lib/sass/css.rb +10 -10
- data/lib/sass/engine.rb +403 -150
- data/lib/sass/environment.rb +136 -57
- data/lib/sass/error.rb +7 -7
- data/lib/sass/exec.rb +123 -39
- data/lib/sass/features.rb +41 -0
- data/lib/sass/importers/base.rb +33 -2
- data/lib/sass/importers/deprecated_path.rb +45 -0
- data/lib/sass/importers/filesystem.rb +25 -14
- data/lib/sass/importers.rb +1 -0
- data/lib/sass/logger/base.rb +3 -3
- data/lib/sass/logger/log_level.rb +4 -6
- data/lib/sass/media.rb +19 -19
- data/lib/sass/plugin/compiler.rb +141 -101
- data/lib/sass/plugin/configuration.rb +18 -22
- data/lib/sass/plugin/merb.rb +1 -1
- data/lib/sass/plugin/staleness_checker.rb +24 -8
- data/lib/sass/plugin.rb +4 -2
- data/lib/sass/repl.rb +3 -3
- data/lib/sass/script/css_lexer.rb +9 -4
- data/lib/sass/script/css_parser.rb +6 -2
- data/lib/sass/script/functions.rb +1343 -590
- data/lib/sass/script/lexer.rb +84 -52
- data/lib/sass/script/parser.rb +217 -97
- data/lib/sass/script/tree/funcall.rb +290 -0
- data/lib/sass/script/{interpolation.rb → tree/interpolation.rb} +34 -13
- data/lib/sass/script/tree/list_literal.rb +80 -0
- data/lib/sass/script/tree/literal.rb +47 -0
- data/lib/sass/script/tree/map_literal.rb +64 -0
- data/lib/sass/script/{node.rb → tree/node.rb} +22 -12
- data/lib/sass/script/{operation.rb → tree/operation.rb} +17 -25
- data/lib/sass/script/tree/selector.rb +30 -0
- data/lib/sass/script/{string_interpolation.rb → tree/string_interpolation.rb} +5 -4
- data/lib/sass/script/{unary_operation.rb → tree/unary_operation.rb} +14 -9
- data/lib/sass/script/tree/variable.rb +57 -0
- data/lib/sass/script/tree.rb +16 -0
- data/lib/sass/script/{arg_list.rb → value/arg_list.rb} +4 -24
- data/lib/sass/script/value/base.rb +248 -0
- data/lib/sass/script/value/bool.rb +36 -0
- data/lib/sass/script/{color.rb → value/color.rb} +239 -195
- data/lib/sass/script/value/helpers.rb +155 -0
- data/lib/sass/script/value/list.rb +119 -0
- data/lib/sass/script/value/map.rb +70 -0
- data/lib/sass/script/value/null.rb +45 -0
- data/lib/sass/script/{number.rb → value/number.rb} +91 -65
- data/lib/sass/script/{string.rb → value/string.rb} +9 -11
- data/lib/sass/script/value.rb +11 -0
- data/lib/sass/script.rb +35 -8
- data/lib/sass/scss/css_parser.rb +2 -1
- data/lib/sass/scss/parser.rb +338 -170
- data/lib/sass/scss/rx.rb +5 -6
- data/lib/sass/scss/script_lexer.rb +1 -0
- data/lib/sass/scss/script_parser.rb +1 -0
- data/lib/sass/scss/static_parser.rb +23 -6
- data/lib/sass/selector/abstract_sequence.rb +2 -2
- data/lib/sass/selector/comma_sequence.rb +21 -16
- data/lib/sass/selector/sequence.rb +60 -34
- data/lib/sass/selector/simple.rb +11 -12
- data/lib/sass/selector/simple_sequence.rb +55 -33
- data/lib/sass/selector.rb +52 -48
- data/lib/sass/source/map.rb +211 -0
- data/lib/sass/source/position.rb +39 -0
- data/lib/sass/source/range.rb +41 -0
- data/lib/sass/stack.rb +120 -0
- data/lib/sass/supports.rb +12 -13
- data/lib/sass/tree/at_root_node.rb +82 -0
- data/lib/sass/tree/comment_node.rb +3 -3
- data/lib/sass/tree/css_import_node.rb +11 -11
- data/lib/sass/tree/debug_node.rb +2 -2
- data/lib/sass/tree/directive_node.rb +13 -2
- data/lib/sass/tree/each_node.rb +8 -8
- data/lib/sass/tree/extend_node.rb +13 -6
- data/lib/sass/tree/for_node.rb +4 -4
- data/lib/sass/tree/function_node.rb +5 -4
- data/lib/sass/tree/if_node.rb +1 -1
- data/lib/sass/tree/import_node.rb +4 -5
- data/lib/sass/tree/media_node.rb +4 -14
- data/lib/sass/tree/mixin_def_node.rb +4 -4
- data/lib/sass/tree/mixin_node.rb +21 -8
- data/lib/sass/tree/node.rb +29 -12
- data/lib/sass/tree/prop_node.rb +38 -18
- data/lib/sass/tree/return_node.rb +3 -2
- data/lib/sass/tree/root_node.rb +19 -3
- data/lib/sass/tree/rule_node.rb +25 -17
- data/lib/sass/tree/supports_node.rb +0 -13
- data/lib/sass/tree/trace_node.rb +2 -1
- data/lib/sass/tree/variable_node.rb +9 -3
- data/lib/sass/tree/visitors/base.rb +6 -6
- data/lib/sass/tree/visitors/check_nesting.rb +12 -9
- data/lib/sass/tree/visitors/convert.rb +63 -38
- data/lib/sass/tree/visitors/cssize.rb +63 -23
- data/lib/sass/tree/visitors/deep_copy.rb +6 -5
- data/lib/sass/tree/visitors/extend.rb +7 -7
- data/lib/sass/tree/visitors/perform.rb +256 -151
- data/lib/sass/tree/visitors/set_options.rb +6 -6
- data/lib/sass/tree/visitors/to_css.rb +231 -81
- data/lib/sass/tree/warn_node.rb +2 -2
- data/lib/sass/tree/while_node.rb +2 -2
- data/lib/sass/util/multibyte_string_scanner.rb +2 -0
- data/lib/sass/util/normalized_map.rb +65 -0
- data/lib/sass/util/ordered_hash.rb +188 -0
- data/lib/sass/util/subset_map.rb +3 -2
- data/lib/sass/util/test.rb +9 -0
- data/lib/sass/util.rb +220 -34
- data/lib/sass/version.rb +9 -9
- data/lib/sass.rb +14 -7
- data/test/sass/compiler_test.rb +213 -0
- data/test/sass/conversion_test.rb +235 -9
- data/test/sass/engine_test.rb +230 -60
- data/test/sass/exec_test.rb +86 -0
- data/test/sass/extend_test.rb +215 -147
- data/test/sass/functions_test.rb +584 -99
- data/test/sass/importer_test.rb +165 -17
- data/test/sass/plugin_test.rb +19 -13
- data/test/sass/script_conversion_test.rb +40 -0
- data/test/sass/script_test.rb +231 -21
- data/test/sass/scss/css_test.rb +14 -5
- data/test/sass/scss/scss_test.rb +1266 -66
- data/test/sass/source_map_test.rb +879 -0
- data/test/sass/templates/bork5.sass +3 -0
- data/test/sass/util/normalized_map_test.rb +30 -0
- data/test/sass/util_test.rb +90 -0
- data/test/sass/value_helpers_test.rb +181 -0
- data/test/test_helper.rb +7 -2
- metadata +316 -291
- data/lib/sass/script/bool.rb +0 -18
- data/lib/sass/script/funcall.rb +0 -231
- data/lib/sass/script/list.rb +0 -84
- data/lib/sass/script/literal.rb +0 -239
- data/lib/sass/script/null.rb +0 -34
- data/lib/sass/script/variable.rb +0 -58
- data/test/Gemfile +0 -3
- data/vendor/listen/CHANGELOG.md +0 -221
- data/vendor/listen/CONTRIBUTING.md +0 -38
- data/vendor/listen/Gemfile +0 -30
- data/vendor/listen/Guardfile +0 -8
- data/vendor/listen/LICENSE +0 -20
- data/vendor/listen/README.md +0 -315
- data/vendor/listen/Rakefile +0 -47
- data/vendor/listen/Vagrantfile +0 -96
- data/vendor/listen/lib/listen/adapter.rb +0 -214
- data/vendor/listen/lib/listen/adapters/bsd.rb +0 -112
- data/vendor/listen/lib/listen/adapters/darwin.rb +0 -85
- data/vendor/listen/lib/listen/adapters/linux.rb +0 -113
- data/vendor/listen/lib/listen/adapters/polling.rb +0 -67
- data/vendor/listen/lib/listen/adapters/windows.rb +0 -87
- data/vendor/listen/lib/listen/dependency_manager.rb +0 -126
- data/vendor/listen/lib/listen/directory_record.rb +0 -371
- data/vendor/listen/lib/listen/listener.rb +0 -225
- data/vendor/listen/lib/listen/multi_listener.rb +0 -143
- data/vendor/listen/lib/listen/turnstile.rb +0 -28
- data/vendor/listen/lib/listen/version.rb +0 -3
- data/vendor/listen/lib/listen.rb +0 -40
- data/vendor/listen/listen.gemspec +0 -22
- data/vendor/listen/spec/listen/adapter_spec.rb +0 -183
- data/vendor/listen/spec/listen/adapters/bsd_spec.rb +0 -36
- data/vendor/listen/spec/listen/adapters/darwin_spec.rb +0 -37
- data/vendor/listen/spec/listen/adapters/linux_spec.rb +0 -47
- data/vendor/listen/spec/listen/adapters/polling_spec.rb +0 -68
- data/vendor/listen/spec/listen/adapters/windows_spec.rb +0 -30
- data/vendor/listen/spec/listen/dependency_manager_spec.rb +0 -107
- data/vendor/listen/spec/listen/directory_record_spec.rb +0 -1225
- data/vendor/listen/spec/listen/listener_spec.rb +0 -169
- data/vendor/listen/spec/listen/multi_listener_spec.rb +0 -174
- data/vendor/listen/spec/listen/turnstile_spec.rb +0 -56
- data/vendor/listen/spec/listen_spec.rb +0 -73
- data/vendor/listen/spec/spec_helper.rb +0 -21
- data/vendor/listen/spec/support/adapter_helper.rb +0 -629
- data/vendor/listen/spec/support/directory_record_helper.rb +0 -55
- data/vendor/listen/spec/support/fixtures_helper.rb +0 -29
- data/vendor/listen/spec/support/listeners_helper.rb +0 -156
- data/vendor/listen/spec/support/platform_helper.rb +0 -15
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
module Sass::Script
|
|
1
|
+
module Sass::Script::Value
|
|
4
2
|
# A SassScript object representing a CSS color.
|
|
5
3
|
#
|
|
6
4
|
# A color may be represented internally as RGBA, HSLA, or both.
|
|
@@ -15,165 +13,171 @@ module Sass::Script
|
|
|
15
13
|
# It's always stored, as 1 if nothing else is specified.
|
|
16
14
|
# If only the alpha channel is modified using \{#with},
|
|
17
15
|
# the cached RGB and HSL values are retained.
|
|
18
|
-
class Color <
|
|
16
|
+
class Color < Base
|
|
19
17
|
class << self; include Sass::Util; end
|
|
20
18
|
|
|
21
19
|
# A hash from color names to `[red, green, blue]` value arrays.
|
|
22
|
-
COLOR_NAMES = map_vals(
|
|
23
|
-
'aliceblue'
|
|
24
|
-
'antiquewhite'
|
|
25
|
-
'aqua'
|
|
26
|
-
'aquamarine'
|
|
27
|
-
'azure'
|
|
28
|
-
'beige'
|
|
29
|
-
'bisque'
|
|
30
|
-
'black'
|
|
31
|
-
'blanchedalmond'
|
|
32
|
-
'blue'
|
|
33
|
-
'blueviolet'
|
|
34
|
-
'brown'
|
|
35
|
-
'burlywood'
|
|
36
|
-
'cadetblue'
|
|
37
|
-
'chartreuse'
|
|
38
|
-
'chocolate'
|
|
39
|
-
'coral'
|
|
40
|
-
'cornflowerblue'
|
|
41
|
-
'cornsilk'
|
|
42
|
-
'crimson'
|
|
43
|
-
'cyan'
|
|
44
|
-
'darkblue'
|
|
45
|
-
'darkcyan'
|
|
46
|
-
'darkgoldenrod'
|
|
47
|
-
'darkgray'
|
|
48
|
-
'darkgrey'
|
|
49
|
-
'darkgreen'
|
|
50
|
-
'darkkhaki'
|
|
51
|
-
'darkmagenta'
|
|
52
|
-
'darkolivegreen'
|
|
53
|
-
'darkorange'
|
|
54
|
-
'darkorchid'
|
|
55
|
-
'darkred'
|
|
56
|
-
'darksalmon'
|
|
57
|
-
'darkseagreen'
|
|
58
|
-
'darkslateblue'
|
|
59
|
-
'darkslategray'
|
|
60
|
-
'darkslategrey'
|
|
61
|
-
'darkturquoise'
|
|
62
|
-
'darkviolet'
|
|
63
|
-
'deeppink'
|
|
64
|
-
'deepskyblue'
|
|
65
|
-
'dimgray'
|
|
66
|
-
'dimgrey'
|
|
67
|
-
'dodgerblue'
|
|
68
|
-
'firebrick'
|
|
69
|
-
'floralwhite'
|
|
70
|
-
'forestgreen'
|
|
71
|
-
'fuchsia'
|
|
72
|
-
'gainsboro'
|
|
73
|
-
'ghostwhite'
|
|
74
|
-
'gold'
|
|
75
|
-
'goldenrod'
|
|
76
|
-
'gray'
|
|
77
|
-
'
|
|
78
|
-
'
|
|
79
|
-
'
|
|
80
|
-
'
|
|
81
|
-
'
|
|
82
|
-
'
|
|
83
|
-
'
|
|
84
|
-
'
|
|
85
|
-
'
|
|
86
|
-
'
|
|
87
|
-
'
|
|
88
|
-
'
|
|
89
|
-
'
|
|
90
|
-
'
|
|
91
|
-
'
|
|
92
|
-
'
|
|
93
|
-
'
|
|
94
|
-
'
|
|
95
|
-
'
|
|
96
|
-
'
|
|
97
|
-
'
|
|
98
|
-
'
|
|
99
|
-
'
|
|
100
|
-
'
|
|
101
|
-
'
|
|
102
|
-
'
|
|
103
|
-
'
|
|
104
|
-
'
|
|
105
|
-
'
|
|
106
|
-
'
|
|
107
|
-
'
|
|
108
|
-
'
|
|
109
|
-
'
|
|
110
|
-
'
|
|
111
|
-
'
|
|
112
|
-
'
|
|
113
|
-
'
|
|
114
|
-
'
|
|
115
|
-
'
|
|
116
|
-
'
|
|
117
|
-
'
|
|
118
|
-
'
|
|
119
|
-
'
|
|
120
|
-
'
|
|
121
|
-
'
|
|
122
|
-
'
|
|
123
|
-
'
|
|
124
|
-
'
|
|
125
|
-
'
|
|
126
|
-
'
|
|
127
|
-
'
|
|
128
|
-
'
|
|
129
|
-
'
|
|
130
|
-
'
|
|
131
|
-
'
|
|
132
|
-
'
|
|
133
|
-
'
|
|
134
|
-
'
|
|
135
|
-
'
|
|
136
|
-
'
|
|
137
|
-
'
|
|
138
|
-
'
|
|
139
|
-
'
|
|
140
|
-
'
|
|
141
|
-
'
|
|
142
|
-
'
|
|
143
|
-
'
|
|
144
|
-
'
|
|
145
|
-
'
|
|
146
|
-
'
|
|
147
|
-
'
|
|
148
|
-
'
|
|
149
|
-
'
|
|
150
|
-
'
|
|
151
|
-
'
|
|
152
|
-
'
|
|
153
|
-
'
|
|
154
|
-
'
|
|
155
|
-
'
|
|
156
|
-
'
|
|
157
|
-
'
|
|
158
|
-
'
|
|
159
|
-
'
|
|
160
|
-
'
|
|
161
|
-
'
|
|
162
|
-
'
|
|
163
|
-
'
|
|
164
|
-
'
|
|
165
|
-
'
|
|
166
|
-
'
|
|
167
|
-
'
|
|
168
|
-
'
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
20
|
+
COLOR_NAMES = map_vals(
|
|
21
|
+
'aliceblue' => 0xF0F8FFFF,
|
|
22
|
+
'antiquewhite' => 0xFAEBD7FF,
|
|
23
|
+
'aqua' => 0x00FFFFFF,
|
|
24
|
+
'aquamarine' => 0x7FFFD4FF,
|
|
25
|
+
'azure' => 0xF0FFFFFF,
|
|
26
|
+
'beige' => 0xF5F5DCFF,
|
|
27
|
+
'bisque' => 0xFFE4C4FF,
|
|
28
|
+
'black' => 0x000000FF,
|
|
29
|
+
'blanchedalmond' => 0xFFEBCDFF,
|
|
30
|
+
'blue' => 0x0000FFFF,
|
|
31
|
+
'blueviolet' => 0x8A2BE2FF,
|
|
32
|
+
'brown' => 0xA52A2AFF,
|
|
33
|
+
'burlywood' => 0xDEB887FF,
|
|
34
|
+
'cadetblue' => 0x5F9EA0FF,
|
|
35
|
+
'chartreuse' => 0x7FFF00FF,
|
|
36
|
+
'chocolate' => 0xD2691EFF,
|
|
37
|
+
'coral' => 0xFF7F50FF,
|
|
38
|
+
'cornflowerblue' => 0x6495EDFF,
|
|
39
|
+
'cornsilk' => 0xFFF8DCFF,
|
|
40
|
+
'crimson' => 0xDC143CFF,
|
|
41
|
+
'cyan' => 0x00FFFFFF,
|
|
42
|
+
'darkblue' => 0x00008BFF,
|
|
43
|
+
'darkcyan' => 0x008B8BFF,
|
|
44
|
+
'darkgoldenrod' => 0xB8860BFF,
|
|
45
|
+
'darkgray' => 0xA9A9A9FF,
|
|
46
|
+
'darkgrey' => 0xA9A9A9FF,
|
|
47
|
+
'darkgreen' => 0x006400FF,
|
|
48
|
+
'darkkhaki' => 0xBDB76BFF,
|
|
49
|
+
'darkmagenta' => 0x8B008BFF,
|
|
50
|
+
'darkolivegreen' => 0x556B2FFF,
|
|
51
|
+
'darkorange' => 0xFF8C00FF,
|
|
52
|
+
'darkorchid' => 0x9932CCFF,
|
|
53
|
+
'darkred' => 0x8B0000FF,
|
|
54
|
+
'darksalmon' => 0xE9967AFF,
|
|
55
|
+
'darkseagreen' => 0x8FBC8FFF,
|
|
56
|
+
'darkslateblue' => 0x483D8BFF,
|
|
57
|
+
'darkslategray' => 0x2F4F4FFF,
|
|
58
|
+
'darkslategrey' => 0x2F4F4FFF,
|
|
59
|
+
'darkturquoise' => 0x00CED1FF,
|
|
60
|
+
'darkviolet' => 0x9400D3FF,
|
|
61
|
+
'deeppink' => 0xFF1493FF,
|
|
62
|
+
'deepskyblue' => 0x00BFFFFF,
|
|
63
|
+
'dimgray' => 0x696969FF,
|
|
64
|
+
'dimgrey' => 0x696969FF,
|
|
65
|
+
'dodgerblue' => 0x1E90FFFF,
|
|
66
|
+
'firebrick' => 0xB22222FF,
|
|
67
|
+
'floralwhite' => 0xFFFAF0FF,
|
|
68
|
+
'forestgreen' => 0x228B22FF,
|
|
69
|
+
'fuchsia' => 0xFF00FFFF,
|
|
70
|
+
'gainsboro' => 0xDCDCDCFF,
|
|
71
|
+
'ghostwhite' => 0xF8F8FFFF,
|
|
72
|
+
'gold' => 0xFFD700FF,
|
|
73
|
+
'goldenrod' => 0xDAA520FF,
|
|
74
|
+
'gray' => 0x808080FF,
|
|
75
|
+
'grey' => 0x808080FF,
|
|
76
|
+
'green' => 0x008000FF,
|
|
77
|
+
'greenyellow' => 0xADFF2FFF,
|
|
78
|
+
'honeydew' => 0xF0FFF0FF,
|
|
79
|
+
'hotpink' => 0xFF69B4FF,
|
|
80
|
+
'indianred' => 0xCD5C5CFF,
|
|
81
|
+
'indigo' => 0x4B0082FF,
|
|
82
|
+
'ivory' => 0xFFFFF0FF,
|
|
83
|
+
'khaki' => 0xF0E68CFF,
|
|
84
|
+
'lavender' => 0xE6E6FAFF,
|
|
85
|
+
'lavenderblush' => 0xFFF0F5FF,
|
|
86
|
+
'lawngreen' => 0x7CFC00FF,
|
|
87
|
+
'lemonchiffon' => 0xFFFACDFF,
|
|
88
|
+
'lightblue' => 0xADD8E6FF,
|
|
89
|
+
'lightcoral' => 0xF08080FF,
|
|
90
|
+
'lightcyan' => 0xE0FFFFFF,
|
|
91
|
+
'lightgoldenrodyellow' => 0xFAFAD2FF,
|
|
92
|
+
'lightgreen' => 0x90EE90FF,
|
|
93
|
+
'lightgray' => 0xD3D3D3FF,
|
|
94
|
+
'lightgrey' => 0xD3D3D3FF,
|
|
95
|
+
'lightpink' => 0xFFB6C1FF,
|
|
96
|
+
'lightsalmon' => 0xFFA07AFF,
|
|
97
|
+
'lightseagreen' => 0x20B2AAFF,
|
|
98
|
+
'lightskyblue' => 0x87CEFAFF,
|
|
99
|
+
'lightslategray' => 0x778899FF,
|
|
100
|
+
'lightslategrey' => 0x778899FF,
|
|
101
|
+
'lightsteelblue' => 0xB0C4DEFF,
|
|
102
|
+
'lightyellow' => 0xFFFFE0FF,
|
|
103
|
+
'lime' => 0x00FF00FF,
|
|
104
|
+
'limegreen' => 0x32CD32FF,
|
|
105
|
+
'linen' => 0xFAF0E6FF,
|
|
106
|
+
'magenta' => 0xFF00FFFF,
|
|
107
|
+
'maroon' => 0x800000FF,
|
|
108
|
+
'mediumaquamarine' => 0x66CDAAFF,
|
|
109
|
+
'mediumblue' => 0x0000CDFF,
|
|
110
|
+
'mediumorchid' => 0xBA55D3FF,
|
|
111
|
+
'mediumpurple' => 0x9370DBFF,
|
|
112
|
+
'mediumseagreen' => 0x3CB371FF,
|
|
113
|
+
'mediumslateblue' => 0x7B68EEFF,
|
|
114
|
+
'mediumspringgreen' => 0x00FA9AFF,
|
|
115
|
+
'mediumturquoise' => 0x48D1CCFF,
|
|
116
|
+
'mediumvioletred' => 0xC71585FF,
|
|
117
|
+
'midnightblue' => 0x191970FF,
|
|
118
|
+
'mintcream' => 0xF5FFFAFF,
|
|
119
|
+
'mistyrose' => 0xFFE4E1FF,
|
|
120
|
+
'moccasin' => 0xFFE4B5FF,
|
|
121
|
+
'navajowhite' => 0xFFDEADFF,
|
|
122
|
+
'navy' => 0x000080FF,
|
|
123
|
+
'oldlace' => 0xFDF5E6FF,
|
|
124
|
+
'olive' => 0x808000FF,
|
|
125
|
+
'olivedrab' => 0x6B8E23FF,
|
|
126
|
+
'orange' => 0xFFA500FF,
|
|
127
|
+
'orangered' => 0xFF4500FF,
|
|
128
|
+
'orchid' => 0xDA70D6FF,
|
|
129
|
+
'palegoldenrod' => 0xEEE8AAFF,
|
|
130
|
+
'palegreen' => 0x98FB98FF,
|
|
131
|
+
'paleturquoise' => 0xAFEEEEFF,
|
|
132
|
+
'palevioletred' => 0xDB7093FF,
|
|
133
|
+
'papayawhip' => 0xFFEFD5FF,
|
|
134
|
+
'peachpuff' => 0xFFDAB9FF,
|
|
135
|
+
'peru' => 0xCD853FFF,
|
|
136
|
+
'pink' => 0xFFC0CBFF,
|
|
137
|
+
'plum' => 0xDDA0DDFF,
|
|
138
|
+
'powderblue' => 0xB0E0E6FF,
|
|
139
|
+
'purple' => 0x800080FF,
|
|
140
|
+
'red' => 0xFF0000FF,
|
|
141
|
+
'rosybrown' => 0xBC8F8FFF,
|
|
142
|
+
'royalblue' => 0x4169E1FF,
|
|
143
|
+
'saddlebrown' => 0x8B4513FF,
|
|
144
|
+
'salmon' => 0xFA8072FF,
|
|
145
|
+
'sandybrown' => 0xF4A460FF,
|
|
146
|
+
'seagreen' => 0x2E8B57FF,
|
|
147
|
+
'seashell' => 0xFFF5EEFF,
|
|
148
|
+
'sienna' => 0xA0522DFF,
|
|
149
|
+
'silver' => 0xC0C0C0FF,
|
|
150
|
+
'skyblue' => 0x87CEEBFF,
|
|
151
|
+
'slateblue' => 0x6A5ACDFF,
|
|
152
|
+
'slategray' => 0x708090FF,
|
|
153
|
+
'slategrey' => 0x708090FF,
|
|
154
|
+
'snow' => 0xFFFAFAFF,
|
|
155
|
+
'springgreen' => 0x00FF7FFF,
|
|
156
|
+
'steelblue' => 0x4682B4FF,
|
|
157
|
+
'tan' => 0xD2B48CFF,
|
|
158
|
+
'teal' => 0x008080FF,
|
|
159
|
+
'thistle' => 0xD8BFD8FF,
|
|
160
|
+
'tomato' => 0xFF6347FF,
|
|
161
|
+
'transparent' => 0x00000000,
|
|
162
|
+
'turquoise' => 0x40E0D0FF,
|
|
163
|
+
'violet' => 0xEE82EEFF,
|
|
164
|
+
'wheat' => 0xF5DEB3FF,
|
|
165
|
+
'white' => 0xFFFFFFFF,
|
|
166
|
+
'whitesmoke' => 0xF5F5F5FF,
|
|
167
|
+
'yellow' => 0xFFFF00FF,
|
|
168
|
+
'yellowgreen' => 0x9ACD32FF
|
|
169
|
+
) do |color|
|
|
170
|
+
rgba = (0..3).map {|n| color >> (n << 3) & 0xff}.reverse
|
|
171
|
+
rgba[-1] = rgba[-1] / 255.0
|
|
172
|
+
rgba
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
# A hash from `[red, green, blue, alpha]` value arrays to color names.
|
|
172
176
|
COLOR_NAMES_REVERSE = map_hash(hash_to_a(COLOR_NAMES)) {|k, v| [v, k]}
|
|
173
177
|
|
|
174
178
|
# Constructs an RGB or HSL color object,
|
|
175
179
|
# optionally with an alpha channel.
|
|
176
|
-
#
|
|
180
|
+
#
|
|
177
181
|
# The RGB values must be between 0 and 255.
|
|
178
182
|
# The saturation and lightness values must be between 0 and 100.
|
|
179
183
|
# The alpha value must be between 0 and 1.
|
|
@@ -244,6 +248,24 @@ module Sass::Script
|
|
|
244
248
|
@attrs[:alpha] = Sass::Util.check_range("Alpha channel", 0..1, @attrs[:alpha])
|
|
245
249
|
end
|
|
246
250
|
|
|
251
|
+
# Create a new color from a valid CSS hex string.
|
|
252
|
+
#
|
|
253
|
+
# The leading hash is optional.
|
|
254
|
+
#
|
|
255
|
+
# @return [Color]
|
|
256
|
+
def self.from_hex(hex_string, alpha = nil)
|
|
257
|
+
unless hex_string =~ /^#?([0-9a-f]{2})([0-9a-f]{2})([0-9a-f]{2})$/i ||
|
|
258
|
+
hex_string =~ /^#?([0-9a-f])([0-9a-f])([0-9a-f])$/i
|
|
259
|
+
raise ArgumentError.new("#{hex_string.inspect} is not a valid hex color.")
|
|
260
|
+
end
|
|
261
|
+
red = $1.ljust(2, $1).to_i(16)
|
|
262
|
+
green = $2.ljust(2, $2).to_i(16)
|
|
263
|
+
blue = $3.ljust(2, $3).to_i(16)
|
|
264
|
+
attrs = {:red => red, :green => green, :blue => blue}
|
|
265
|
+
attrs[:alpha] = alpha if alpha
|
|
266
|
+
new(attrs)
|
|
267
|
+
end
|
|
268
|
+
|
|
247
269
|
# The red component of the color.
|
|
248
270
|
#
|
|
249
271
|
# @return [Fixnum]
|
|
@@ -297,7 +319,7 @@ module Sass::Script
|
|
|
297
319
|
#
|
|
298
320
|
# @return [Fixnum]
|
|
299
321
|
def alpha
|
|
300
|
-
@attrs[:alpha]
|
|
322
|
+
@attrs[:alpha].to_f
|
|
301
323
|
end
|
|
302
324
|
|
|
303
325
|
# Returns whether this color object is translucent;
|
|
@@ -316,6 +338,14 @@ module Sass::Script
|
|
|
316
338
|
[red, green, blue].freeze
|
|
317
339
|
end
|
|
318
340
|
|
|
341
|
+
# Returns the red, green, blue, and alpha components of the color.
|
|
342
|
+
#
|
|
343
|
+
# @return [Array<Fixnum>] A frozen four-element array of the red, green,
|
|
344
|
+
# blue, and alpha values (respectively) of the color
|
|
345
|
+
def rgba
|
|
346
|
+
[red, green, blue, alpha].freeze
|
|
347
|
+
end
|
|
348
|
+
|
|
319
349
|
# Returns the hue, saturation, and lightness components of the color.
|
|
320
350
|
#
|
|
321
351
|
# @return [Array<Fixnum>] A frozen three-element array of the
|
|
@@ -324,18 +354,30 @@ module Sass::Script
|
|
|
324
354
|
[hue, saturation, lightness].freeze
|
|
325
355
|
end
|
|
326
356
|
|
|
357
|
+
# Returns the hue, saturation, lightness, and alpha components of the color.
|
|
358
|
+
#
|
|
359
|
+
# @return [Array<Fixnum>] A frozen four-element array of the hue,
|
|
360
|
+
# saturation, lightness, and alpha values (respectively) of the color
|
|
361
|
+
def hsla
|
|
362
|
+
[hue, saturation, lightness].freeze
|
|
363
|
+
end
|
|
364
|
+
|
|
327
365
|
# The SassScript `==` operation.
|
|
328
|
-
# **Note that this returns a {Sass::Script::Bool} object,
|
|
366
|
+
# **Note that this returns a {Sass::Script::Value::Bool} object,
|
|
329
367
|
# not a Ruby boolean**.
|
|
330
368
|
#
|
|
331
|
-
# @param other [
|
|
332
|
-
# @return [Bool] True if this
|
|
369
|
+
# @param other [Value] The right-hand side of the operator
|
|
370
|
+
# @return [Bool] True if this value is the same as the other,
|
|
333
371
|
# false otherwise
|
|
334
372
|
def eq(other)
|
|
335
|
-
Sass::Script::Bool.new(
|
|
373
|
+
Sass::Script::Value::Bool.new(
|
|
336
374
|
other.is_a?(Color) && rgb == other.rgb && alpha == other.alpha)
|
|
337
375
|
end
|
|
338
376
|
|
|
377
|
+
def hash
|
|
378
|
+
[rgb, alpha].hash
|
|
379
|
+
end
|
|
380
|
+
|
|
339
381
|
# Returns a copy of this color with one or more channels changed.
|
|
340
382
|
# RGB or HSL colors may be changed, but not both at once.
|
|
341
383
|
#
|
|
@@ -386,14 +428,14 @@ module Sass::Script
|
|
|
386
428
|
# {Color}
|
|
387
429
|
# : Adds each of the RGB color channels together.
|
|
388
430
|
#
|
|
389
|
-
# {
|
|
390
|
-
# : See {
|
|
431
|
+
# {Value}
|
|
432
|
+
# : See {Value::Base#plus}.
|
|
391
433
|
#
|
|
392
|
-
# @param other [
|
|
434
|
+
# @param other [Value] The right-hand side of the operator
|
|
393
435
|
# @return [Color] The resulting color
|
|
394
436
|
# @raise [Sass::SyntaxError] if `other` is a number with units
|
|
395
437
|
def plus(other)
|
|
396
|
-
if other.is_a?(Sass::Script::Number) || other.is_a?(Sass::Script::Color)
|
|
438
|
+
if other.is_a?(Sass::Script::Value::Number) || other.is_a?(Sass::Script::Value::Color)
|
|
397
439
|
piecewise(other, :+)
|
|
398
440
|
else
|
|
399
441
|
super
|
|
@@ -409,14 +451,14 @@ module Sass::Script
|
|
|
409
451
|
# {Color}
|
|
410
452
|
# : Subtracts each of the other color's RGB color channels from this color's.
|
|
411
453
|
#
|
|
412
|
-
# {
|
|
413
|
-
# : See {
|
|
454
|
+
# {Value}
|
|
455
|
+
# : See {Value::Base#minus}.
|
|
414
456
|
#
|
|
415
|
-
# @param other [
|
|
457
|
+
# @param other [Value] The right-hand side of the operator
|
|
416
458
|
# @return [Color] The resulting color
|
|
417
459
|
# @raise [Sass::SyntaxError] if `other` is a number with units
|
|
418
460
|
def minus(other)
|
|
419
|
-
if other.is_a?(Sass::Script::Number) || other.is_a?(Sass::Script::Color)
|
|
461
|
+
if other.is_a?(Sass::Script::Value::Number) || other.is_a?(Sass::Script::Value::Color)
|
|
420
462
|
piecewise(other, :-)
|
|
421
463
|
else
|
|
422
464
|
super
|
|
@@ -436,7 +478,7 @@ module Sass::Script
|
|
|
436
478
|
# @return [Color] The resulting color
|
|
437
479
|
# @raise [Sass::SyntaxError] if `other` is a number with units
|
|
438
480
|
def times(other)
|
|
439
|
-
if other.is_a?(Sass::Script::Number) || other.is_a?(Sass::Script::Color)
|
|
481
|
+
if other.is_a?(Sass::Script::Value::Number) || other.is_a?(Sass::Script::Value::Color)
|
|
440
482
|
piecewise(other, :*)
|
|
441
483
|
else
|
|
442
484
|
raise NoMethodError.new(nil, :times)
|
|
@@ -452,14 +494,15 @@ module Sass::Script
|
|
|
452
494
|
# {Color}
|
|
453
495
|
# : Divides each of this color's RGB color channels by the other color's.
|
|
454
496
|
#
|
|
455
|
-
# {
|
|
456
|
-
# : See {
|
|
497
|
+
# {Value}
|
|
498
|
+
# : See {Value::Base#div}.
|
|
457
499
|
#
|
|
458
|
-
# @param other [
|
|
500
|
+
# @param other [Value] The right-hand side of the operator
|
|
459
501
|
# @return [Color] The resulting color
|
|
460
502
|
# @raise [Sass::SyntaxError] if `other` is a number with units
|
|
461
503
|
def div(other)
|
|
462
|
-
if other.is_a?(Sass::Script::Number) ||
|
|
504
|
+
if other.is_a?(Sass::Script::Value::Number) ||
|
|
505
|
+
other.is_a?(Sass::Script::Value::Color)
|
|
463
506
|
piecewise(other, :/)
|
|
464
507
|
else
|
|
465
508
|
super
|
|
@@ -479,7 +522,8 @@ module Sass::Script
|
|
|
479
522
|
# @return [Color] The resulting color
|
|
480
523
|
# @raise [Sass::SyntaxError] if `other` is a number with units
|
|
481
524
|
def mod(other)
|
|
482
|
-
if other.is_a?(Sass::Script::Number) ||
|
|
525
|
+
if other.is_a?(Sass::Script::Value::Number) ||
|
|
526
|
+
other.is_a?(Sass::Script::Value::Color)
|
|
483
527
|
piecewise(other, :%)
|
|
484
528
|
else
|
|
485
529
|
raise NoMethodError.new(nil, :mod)
|
|
@@ -492,10 +536,9 @@ module Sass::Script
|
|
|
492
536
|
#
|
|
493
537
|
# @return [String] The string representation
|
|
494
538
|
def to_s(opts = {})
|
|
495
|
-
return rgba_str if alpha?
|
|
496
539
|
return smallest if options[:style] == :compressed
|
|
497
|
-
return COLOR_NAMES_REVERSE[
|
|
498
|
-
hex_str
|
|
540
|
+
return COLOR_NAMES_REVERSE[rgba] if COLOR_NAMES_REVERSE[rgba]
|
|
541
|
+
alpha? ? rgba_str : hex_str
|
|
499
542
|
end
|
|
500
543
|
alias_method :to_sass, :to_s
|
|
501
544
|
|
|
@@ -509,10 +552,10 @@ module Sass::Script
|
|
|
509
552
|
private
|
|
510
553
|
|
|
511
554
|
def smallest
|
|
512
|
-
|
|
513
|
-
return
|
|
514
|
-
color.size <=
|
|
515
|
-
|
|
555
|
+
small_explicit_str = alpha? ? rgba_str : hex_str.gsub(/^#(.)\1(.)\2(.)\3$/, '#\1\2\3')
|
|
556
|
+
return small_explicit_str unless (color = COLOR_NAMES_REVERSE[rgba]) &&
|
|
557
|
+
color.size <= small_explicit_str.size
|
|
558
|
+
color
|
|
516
559
|
end
|
|
517
560
|
|
|
518
561
|
def rgba_str
|
|
@@ -521,20 +564,21 @@ module Sass::Script
|
|
|
521
564
|
end
|
|
522
565
|
|
|
523
566
|
def hex_str
|
|
524
|
-
red, green, blue = rgb.map {
|
|
567
|
+
red, green, blue = rgb.map {|num| num.to_s(16).rjust(2, '0')}
|
|
525
568
|
"##{red}#{green}#{blue}"
|
|
526
569
|
end
|
|
527
570
|
|
|
528
571
|
def piecewise(other, operation)
|
|
529
572
|
other_num = other.is_a? Number
|
|
530
573
|
if other_num && !other.unitless?
|
|
531
|
-
raise Sass::SyntaxError.new(
|
|
574
|
+
raise Sass::SyntaxError.new(
|
|
575
|
+
"Cannot add a number with units (#{other}) to a color (#{self}).")
|
|
532
576
|
end
|
|
533
577
|
|
|
534
578
|
result = []
|
|
535
|
-
|
|
579
|
+
(0...3).each do |i|
|
|
536
580
|
res = rgb[i].send(operation, other_num ? other.value : other.rgb[i])
|
|
537
|
-
result[i] = [
|
|
581
|
+
result[i] = [[res, 255].min, 0].max
|
|
538
582
|
end
|
|
539
583
|
|
|
540
584
|
if !other_num && other.alpha != alpha
|
|
@@ -555,9 +599,9 @@ module Sass::Script
|
|
|
555
599
|
m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s
|
|
556
600
|
m1 = l * 2 - m2
|
|
557
601
|
@attrs[:red], @attrs[:green], @attrs[:blue] = [
|
|
558
|
-
hue_to_rgb(m1, m2, h + 1.0/3),
|
|
602
|
+
hue_to_rgb(m1, m2, h + 1.0 / 3),
|
|
559
603
|
hue_to_rgb(m1, m2, h),
|
|
560
|
-
hue_to_rgb(m1, m2, h - 1.0/3)
|
|
604
|
+
hue_to_rgb(m1, m2, h - 1.0 / 3)
|
|
561
605
|
].map {|c| (c * 0xff).round}
|
|
562
606
|
end
|
|
563
607
|
|
|
@@ -566,8 +610,8 @@ module Sass::Script
|
|
|
566
610
|
h -= 1 if h > 1
|
|
567
611
|
return m1 + (m2 - m1) * h * 6 if h * 6 < 1
|
|
568
612
|
return m2 if h * 2 < 1
|
|
569
|
-
return m1 + (m2 - m1) * (2.0/3 - h) * 6 if h * 3 < 2
|
|
570
|
-
|
|
613
|
+
return m1 + (m2 - m1) * (2.0 / 3 - h) * 6 if h * 3 < 2
|
|
614
|
+
m1
|
|
571
615
|
end
|
|
572
616
|
|
|
573
617
|
def rgb_to_hsl!
|
|
@@ -582,20 +626,20 @@ module Sass::Script
|
|
|
582
626
|
h =
|
|
583
627
|
case max
|
|
584
628
|
when min; 0
|
|
585
|
-
when r; 60 * (g-b)/d
|
|
586
|
-
when g; 60 * (b-r)/d + 120
|
|
587
|
-
when b; 60 * (r-g)/d + 240
|
|
629
|
+
when r; 60 * (g - b) / d
|
|
630
|
+
when g; 60 * (b - r) / d + 120
|
|
631
|
+
when b; 60 * (r - g) / d + 240
|
|
588
632
|
end
|
|
589
633
|
|
|
590
|
-
l = (max + min)/2.0
|
|
634
|
+
l = (max + min) / 2.0
|
|
591
635
|
|
|
592
636
|
s =
|
|
593
637
|
if max == min
|
|
594
638
|
0
|
|
595
639
|
elsif l < 0.5
|
|
596
|
-
d/(2*l)
|
|
640
|
+
d / (2 * l)
|
|
597
641
|
else
|
|
598
|
-
d/(2 - 2*l)
|
|
642
|
+
d / (2 - 2 * l)
|
|
599
643
|
end
|
|
600
644
|
|
|
601
645
|
@attrs[:hue] = h % 360
|