sass-embedded 1.77.5 → 1.100.0

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.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +18 -17
  3. data/README.md +1 -1
  4. data/exe/sass +2 -10
  5. data/ext/sass/Rakefile +162 -385
  6. data/ext/sass/file_utils.rb +75 -0
  7. data/ext/sass/package.json +1 -1
  8. data/ext/sass/platform.rb +44 -0
  9. data/ext/sass/sass-1.100.0.tgz +0 -0
  10. data/ext/sass/sass_config.rb +183 -0
  11. data/ext/sass/utils.rb +39 -0
  12. data/lib/sass/compiler/channel.rb +6 -4
  13. data/lib/sass/compiler/connection.rb +17 -21
  14. data/lib/sass/compiler/dispatcher.rb +27 -1
  15. data/lib/sass/compiler/host/function_registry.rb +6 -6
  16. data/lib/sass/compiler/host/importer_registry.rb +17 -11
  17. data/lib/sass/compiler/host/logger_registry.rb +17 -20
  18. data/lib/sass/compiler/host/protofier.rb +59 -73
  19. data/lib/sass/compiler/host/struct.rb +36 -0
  20. data/lib/sass/compiler/host.rb +2 -2
  21. data/lib/sass/compiler.rb +4 -3
  22. data/lib/sass/elf.rb +282 -172
  23. data/lib/sass/embedded/version.rb +1 -1
  24. data/lib/sass/embedded.rb +2 -41
  25. data/lib/sass/embedded_protocol.rb +1 -1
  26. data/{ext → lib}/sass/embedded_sass_pb.rb +3 -5
  27. data/lib/sass/exception.rb +7 -2
  28. data/lib/sass/fork_tracker.rb +36 -28
  29. data/lib/sass/gem_package_importer.rb +19 -0
  30. data/lib/sass/serializer.rb +5 -11
  31. data/lib/sass/value/argument_list.rb +0 -8
  32. data/lib/sass/value/color/channel.rb +79 -0
  33. data/lib/sass/value/color/conversions.rb +473 -0
  34. data/lib/sass/value/color/gamut_map_method/clip.rb +45 -0
  35. data/lib/sass/value/color/gamut_map_method/local_minde.rb +94 -0
  36. data/lib/sass/value/color/gamut_map_method.rb +45 -0
  37. data/lib/sass/value/color/interpolation_method.rb +51 -0
  38. data/lib/sass/value/color/space/a98_rgb.rb +57 -0
  39. data/lib/sass/value/color/space/display_p3.rb +72 -0
  40. data/lib/sass/value/color/space/display_p3_linear.rb +72 -0
  41. data/lib/sass/value/color/space/hsl.rb +65 -0
  42. data/lib/sass/value/color/space/hwb.rb +70 -0
  43. data/lib/sass/value/color/space/lab.rb +77 -0
  44. data/lib/sass/value/color/space/lch.rb +53 -0
  45. data/lib/sass/value/color/space/lms.rb +129 -0
  46. data/lib/sass/value/color/space/oklab.rb +66 -0
  47. data/lib/sass/value/color/space/oklch.rb +54 -0
  48. data/lib/sass/value/color/space/prophoto_rgb.rb +59 -0
  49. data/lib/sass/value/color/space/rec2020.rb +69 -0
  50. data/lib/sass/value/color/space/rgb.rb +52 -0
  51. data/lib/sass/value/color/space/srgb.rb +140 -0
  52. data/lib/sass/value/color/space/srgb_linear.rb +72 -0
  53. data/lib/sass/value/color/space/utils.rb +86 -0
  54. data/lib/sass/value/color/space/xyz_d50.rb +100 -0
  55. data/lib/sass/value/color/space/xyz_d65.rb +57 -0
  56. data/lib/sass/value/color/space.rb +201 -0
  57. data/lib/sass/value/color.rb +539 -162
  58. data/lib/sass/value/function.rb +9 -6
  59. data/lib/sass/value/fuzzy_math.rb +34 -30
  60. data/lib/sass/value/mixin.rb +5 -2
  61. data/lib/sass/value/null.rb +1 -1
  62. data/lib/sass/value/number/unit.rb +5 -4
  63. data/lib/sass/value/number.rb +15 -17
  64. data/lib/sass/value/string.rb +1 -1
  65. data/lib/sass/value.rb +1 -1
  66. metadata +42 -21
  67. data/ext/sass/expand-archive.ps1 +0 -1
  68. data/lib/sass/compiler/host/structifier.rb +0 -37
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sass
4
+ module Value
5
+ class Color
6
+ module Space
7
+ # @see https://github.com/sass/dart-sass/blob/main/lib/src/value/color/space/xyz_d65.dart
8
+ class XyzD65
9
+ include Space
10
+
11
+ def bounded?
12
+ false
13
+ end
14
+
15
+ def initialize
16
+ super('xyz', Utils::XYZ_CHANNELS)
17
+ end
18
+
19
+ def to_linear(channel)
20
+ channel
21
+ end
22
+
23
+ def from_linear(channel)
24
+ channel
25
+ end
26
+
27
+ private
28
+
29
+ def transformation_matrix(dest)
30
+ case dest
31
+ when A98_RGB
32
+ Conversions::XYZ_D65_TO_LINEAR_A98_RGB
33
+ when DISPLAY_P3, DISPLAY_P3_LINEAR
34
+ Conversions::XYZ_D65_TO_LINEAR_DISPLAY_P3
35
+ when LMS
36
+ Conversions::XYZ_D65_TO_LMS
37
+ when PROPHOTO_RGB
38
+ Conversions::XYZ_D65_TO_LINEAR_PROPHOTO_RGB
39
+ when REC2020
40
+ Conversions::XYZ_D65_TO_LINEAR_REC2020
41
+ when RGB, SRGB, SRGB_LINEAR
42
+ Conversions::XYZ_D65_TO_LINEAR_SRGB
43
+ when XYZ_D50
44
+ Conversions::XYZ_D65_TO_XYZ_D50
45
+ else
46
+ super
47
+ end
48
+ end
49
+ end
50
+
51
+ private_constant :XyzD65
52
+
53
+ XYZ_D65 = XyzD65.new
54
+ end
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,201 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Sass
4
+ module Value
5
+ class Color
6
+ # @see https://github.com/sass/dart-sass/blob/main/lib/src/value/color/space.dart
7
+ module Space
8
+ # @return [::String]
9
+ attr_reader :name
10
+
11
+ # @return [Array<ColorChannel>]
12
+ attr_reader :channels
13
+
14
+ # @return [::Boolean]
15
+ def bounded?
16
+ raise NotImplementedError
17
+ end
18
+
19
+ # @return [::Boolean]
20
+ def legacy?
21
+ false
22
+ end
23
+
24
+ # @return [::Boolean]
25
+ def polar?
26
+ false
27
+ end
28
+
29
+ # @param name [::String]
30
+ # @param channels [Array<ColorChannel>]
31
+ def initialize(name, channels)
32
+ @name = name
33
+ @channels = channels
34
+ end
35
+
36
+ class << self
37
+ # @param name [::String]
38
+ # @param argument_name [::String]
39
+ # @return [Space]
40
+ def from_name(name, argument_name = nil)
41
+ case name.downcase
42
+ when 'rgb'
43
+ RGB
44
+ when 'hwb'
45
+ HWB
46
+ when 'hsl'
47
+ HSL
48
+ when 'srgb'
49
+ SRGB
50
+ when 'srgb-linear'
51
+ SRGB_LINEAR
52
+ when 'display-p3'
53
+ DISPLAY_P3
54
+ when 'display-p3-linear'
55
+ DISPLAY_P3_LINEAR
56
+ when 'a98-rgb'
57
+ A98_RGB
58
+ when 'prophoto-rgb'
59
+ PROPHOTO_RGB
60
+ when 'rec2020'
61
+ REC2020
62
+ when 'xyz', 'xyz-d65'
63
+ XYZ_D65
64
+ when 'xyz-d50'
65
+ XYZ_D50
66
+ when 'lab'
67
+ LAB
68
+ when 'lch'
69
+ LCH
70
+ when 'oklab'
71
+ OKLAB
72
+ when 'oklch'
73
+ OKLCH
74
+ else
75
+ raise Sass::ScriptError.new("Unknown color space \"#{name}\".", argument_name)
76
+ end
77
+ end
78
+ end
79
+
80
+ # @param dest [Space]
81
+ # @param channel0 [Numeric]
82
+ # @param channel1 [Numeric]
83
+ # @param channel2 [Numeric]
84
+ # @param alpha [Numeric]
85
+ # @return [Color]
86
+ def convert(dest, channel0, channel1, channel2, alpha)
87
+ convert_linear(dest, channel0, channel1, channel2, alpha)
88
+ end
89
+
90
+ protected
91
+
92
+ def convert_linear(dest, red, green, blue, alpha,
93
+ missing_lightness: false,
94
+ missing_chroma: false,
95
+ missing_hue: false,
96
+ missing_a: false,
97
+ missing_b: false)
98
+ linear_dest = case dest
99
+ when HSL, HWB
100
+ SRGB
101
+ when LAB, LCH
102
+ XYZ_D50
103
+ when OKLAB, OKLCH
104
+ LMS
105
+ else
106
+ dest
107
+ end
108
+ if linear_dest == self
109
+ transformed_red = red
110
+ transformed_green = green
111
+ transformed_blue = blue
112
+ else
113
+ linear_red = to_linear(red.nil? ? 0 : red)
114
+ linear_green = to_linear(green.nil? ? 0 : green)
115
+ linear_blue = to_linear(blue.nil? ? 0 : blue)
116
+ matrix = transformation_matrix(linear_dest)
117
+
118
+ # (matrix * [linear_red, linear_green, linear_blue]).map(linear_dest.from_linear)
119
+ transformed_red = linear_dest.from_linear((matrix[0] * linear_red) +
120
+ (matrix[1] * linear_green) +
121
+ (matrix[2] * linear_blue))
122
+ transformed_green = linear_dest.from_linear((matrix[3] * linear_red) +
123
+ (matrix[4] * linear_green) +
124
+ (matrix[5] * linear_blue))
125
+ transformed_blue = linear_dest.from_linear((matrix[6] * linear_red) +
126
+ (matrix[7] * linear_green) +
127
+ (matrix[8] * linear_blue))
128
+ end
129
+
130
+ case dest
131
+ when HSL, HWB
132
+ SRGB.convert(dest, transformed_red, transformed_green, transformed_blue, alpha,
133
+ missing_lightness:,
134
+ missing_chroma:,
135
+ missing_hue:)
136
+ when LAB, LCH
137
+ XYZ_D50.convert(dest, transformed_red, transformed_green, transformed_blue, alpha,
138
+ missing_lightness:,
139
+ missing_chroma:,
140
+ missing_hue:,
141
+ missing_a:,
142
+ missing_b:)
143
+ when OKLAB, OKLCH
144
+ LMS.convert(dest, transformed_red, transformed_green, transformed_blue, alpha,
145
+ missing_lightness:,
146
+ missing_chroma:,
147
+ missing_hue:,
148
+ missing_a:,
149
+ missing_b:)
150
+ else
151
+ Color.send(:_for_space,
152
+ dest,
153
+ red.nil? ? nil : transformed_red,
154
+ green.nil? ? nil : transformed_green,
155
+ blue.nil? ? nil : transformed_blue,
156
+ alpha)
157
+ end
158
+ end
159
+
160
+ # @param channel [Numeric]
161
+ # @return [Numeric]
162
+ def to_linear(channel)
163
+ raise NotImplementedError, "[BUG] Color space #{name} doesn't support linear conversions."
164
+ end
165
+
166
+ # @param channel [Numeric]
167
+ # @return [Numeric]
168
+ def from_linear(channel)
169
+ raise NotImplementedError, "[BUG] Color space #{name} doesn't support linear conversions."
170
+ end
171
+
172
+ # @param dest [Space]
173
+ # @return [Array<Numeric>]
174
+ def transformation_matrix(dest)
175
+ raise NotImplementedError, "[BUG] Color space conversion from #{name} to #{dest.name} not implemented."
176
+ end
177
+ end
178
+
179
+ private_constant :Space
180
+ end
181
+ end
182
+ end
183
+
184
+ require_relative 'space/utils'
185
+ require_relative 'space/a98_rgb'
186
+ require_relative 'space/display_p3'
187
+ require_relative 'space/display_p3_linear'
188
+ require_relative 'space/hsl'
189
+ require_relative 'space/hwb'
190
+ require_relative 'space/lab'
191
+ require_relative 'space/lch'
192
+ require_relative 'space/lms'
193
+ require_relative 'space/oklab'
194
+ require_relative 'space/oklch'
195
+ require_relative 'space/prophoto_rgb'
196
+ require_relative 'space/rec2020'
197
+ require_relative 'space/rgb'
198
+ require_relative 'space/srgb'
199
+ require_relative 'space/srgb_linear'
200
+ require_relative 'space/xyz_d50'
201
+ require_relative 'space/xyz_d65'