sass-embedded 1.69.7 → 1.70.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,31 +5,26 @@ module Sass
5
5
  module Serializer
6
6
  module_function
7
7
 
8
- def serialize_quoted_string(string, ascii_only: false)
9
- buffer = [0x22]
10
- string.each_codepoint do |codepoint|
11
- if codepoint.zero?
12
- # If the character is NULL (U+0000), then the REPLACEMENT CHARACTER (U+FFFD).
13
- buffer << 0xFFFD
14
- elsif codepoint == 0x22
15
- # If the character is '"' (U+0022) or "\" (U+005C), then the escaped character.
16
- buffer << 0x5C << 0x22
17
- elsif codepoint == 0x5C
18
- # If the character is '"' (U+0022) or "\" (U+005C), then the escaped character.
19
- buffer << 0x5C << 0x5C
20
- elsif codepoint < 0x20 || (ascii_only ? codepoint >= 0x7F : codepoint == 0x7F)
21
- # If the character is in the range [\1-\1f] (U+0001 to U+001F) or is U+007F,
22
- # then the character escaped as code point.
23
- buffer << 0x5C
24
- buffer.concat(codepoint.to_s(16).codepoints)
25
- buffer << 0x20
26
- else
27
- # Otherwise, the character itself.
28
- buffer << codepoint
29
- end
8
+ CSS_ESCAPE = {
9
+ "\0" => "\uFFFD",
10
+ '\\' => '\\\\',
11
+ '"' => '\\"',
12
+ "'" => "\\'",
13
+ **[*"\x01".."\x08", *"\x0A".."\x1F", "\x7F"].product(
14
+ [*'0'..'9', *'a'..'f', *'A'..'F', "\t", ' ', nil]
15
+ ).to_h do |c, x|
16
+ ["#{c}#{x}".freeze, "\\#{c.ord.to_s(16)}#{" #{x}" if x}".freeze]
17
+ end
18
+ }.freeze
19
+
20
+ private_constant :CSS_ESCAPE
21
+
22
+ def serialize_quoted_string(string)
23
+ if !string.include?('"') || string.include?("'")
24
+ %("#{string.gsub(/[\0\\"]|[\x01-\x08\x0A-\x1F\x7F][\h\t ]?/, CSS_ESCAPE)}")
25
+ else
26
+ %('#{string.gsub(/[\0\\']|[\x01-\x08\x0A-\x1F\x7F][\h\t ]?/, CSS_ESCAPE)}')
30
27
  end
31
- buffer << 0x22
32
- buffer.pack('U*')
33
28
  end
34
29
 
35
30
  def serialize_unquoted_string(string)
@@ -10,17 +10,17 @@ module Sass
10
10
  # @see https://sass-lang.com/documentation/js-api/classes/sassargumentlist/
11
11
  class ArgumentList < List
12
12
  # @param contents [Array<Value>]
13
- # @param keywords [Hash<::String, Value>]
13
+ # @param keywords [Hash<Symbol, Value>]
14
14
  # @param separator [::String]
15
15
  def initialize(contents = [], keywords = {}, separator = ',')
16
16
  super(contents, separator:)
17
17
 
18
18
  @id = 0
19
19
  @keywords_accessed = false
20
- @keywords = keywords.transform_keys(&:to_s).freeze
20
+ @keywords = keywords.freeze
21
21
  end
22
22
 
23
- # @return [Hash<::String, Value>]
23
+ # @return [Hash<Symbol, Value>]
24
24
  def keywords
25
25
  @keywords_accessed = true
26
26
  @keywords
@@ -21,9 +21,6 @@ module Sass
21
21
  @bracketed = bracketed.freeze
22
22
  end
23
23
 
24
- # @return [Array<Value>]
25
- attr_reader :contents
26
-
27
24
  # @return [::String, nil]
28
25
  attr_reader :separator
29
26
 
@@ -35,7 +32,7 @@ module Sass
35
32
  # @return [::Boolean]
36
33
  def ==(other)
37
34
  (other.is_a?(Sass::Value::List) &&
38
- other.contents == contents &&
35
+ other.to_a == to_a &&
39
36
  other.separator == separator &&
40
37
  other.bracketed? == bracketed?) ||
41
38
  (to_a.empty? && other.is_a?(Sass::Value::Map) && other.to_a.empty?)
@@ -56,7 +53,10 @@ module Sass
56
53
  @hash ||= contents.hash
57
54
  end
58
55
 
59
- alias to_a contents
56
+ # @return [Array<Value>]
57
+ def to_a
58
+ @contents
59
+ end
60
60
 
61
61
  # @return [Map, nil]
62
62
  def to_map
@@ -63,8 +63,8 @@ module Sass
63
63
  end
64
64
 
65
65
  @value = value.freeze
66
- @numerator_units = numerator_units.freeze
67
- @denominator_units = denominator_units.freeze
66
+ @numerator_units = numerator_units.each(&:freeze).freeze
67
+ @denominator_units = denominator_units.each(&:freeze).freeze
68
68
  end
69
69
 
70
70
  # @return [Numeric]
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sass-embedded
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.69.7
4
+ version: 1.70.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - なつき
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-01-02 00:00:00.000000000 Z
11
+ date: 2024-01-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: google-protobuf
14
+ name: rake
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '3.25'
19
+ version: 13.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '3.25'
26
+ version: 13.0.0
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
28
+ name: google-protobuf
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 13.0.0
33
+ version: '3.25'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - ">="
38
+ - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 13.0.0
40
+ version: '3.25'
41
41
  description: A Ruby library that will communicate with Embedded Dart Sass using the
42
42
  Embedded Sass protocol.
43
43
  email:
@@ -70,7 +70,6 @@ files:
70
70
  - lib/sass/compiler/host/logger_registry.rb
71
71
  - lib/sass/compiler/host/protofier.rb
72
72
  - lib/sass/compiler/host/structifier.rb
73
- - lib/sass/compiler/host/value_protofier.rb
74
73
  - lib/sass/compiler/varint.rb
75
74
  - lib/sass/elf.rb
76
75
  - lib/sass/embedded.rb
@@ -100,8 +99,9 @@ homepage: https://github.com/sass-contrib/sass-embedded-host-ruby
100
99
  licenses:
101
100
  - MIT
102
101
  metadata:
103
- documentation_uri: https://rubydoc.info/gems/sass-embedded/1.69.7
104
- source_code_uri: https://github.com/sass-contrib/sass-embedded-host-ruby/tree/v1.69.7
102
+ bug_tracker_uri: https://github.com/sass-contrib/sass-embedded-host-ruby/issues
103
+ documentation_uri: https://rubydoc.info/gems/sass-embedded/1.70.0
104
+ source_code_uri: https://github.com/sass-contrib/sass-embedded-host-ruby/tree/v1.70.0
105
105
  funding_uri: https://github.com/sponsors/ntkme
106
106
  rubygems_mfa_required: 'true'
107
107
  post_install_message:
@@ -112,14 +112,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
112
112
  requirements:
113
113
  - - ">="
114
114
  - !ruby/object:Gem::Version
115
- version: 3.1.3
115
+ version: 3.1.0
116
116
  required_rubygems_version: !ruby/object:Gem::Requirement
117
117
  requirements:
118
118
  - - ">="
119
119
  - !ruby/object:Gem::Version
120
120
  version: '0'
121
121
  requirements: []
122
- rubygems_version: 3.5.3
122
+ rubygems_version: 3.5.4
123
123
  signing_key:
124
124
  specification_version: 4
125
125
  summary: Use dart-sass with Ruby!
@@ -1,390 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Sass
4
- class Compiler
5
- class Host
6
- # The {ValueProtofier} class.
7
- #
8
- # It converts Pure Ruby types and Protobuf Ruby types.
9
- class ValueProtofier
10
- def initialize(function_registry)
11
- @function_registry = function_registry
12
- end
13
-
14
- def to_proto(obj)
15
- case obj
16
- when Sass::Value::String
17
- EmbeddedProtocol::Value.new(
18
- string: EmbeddedProtocol::Value::String.new(
19
- text: obj.text.to_str,
20
- quoted: obj.quoted?
21
- )
22
- )
23
- when Sass::Value::Number
24
- EmbeddedProtocol::Value.new(
25
- number: Number.to_proto(obj)
26
- )
27
- when Sass::Value::Color
28
- if obj.instance_eval { !defined?(@hue) }
29
- EmbeddedProtocol::Value.new(
30
- rgb_color: EmbeddedProtocol::Value::RgbColor.new(
31
- red: obj.red,
32
- green: obj.green,
33
- blue: obj.blue,
34
- alpha: obj.alpha.to_f
35
- )
36
- )
37
- elsif obj.instance_eval { !defined?(@saturation) }
38
- EmbeddedProtocol::Value.new(
39
- hwb_color: EmbeddedProtocol::Value::HwbColor.new(
40
- hue: obj.hue.to_f,
41
- whiteness: obj.whiteness.to_f,
42
- blackness: obj.blackness.to_f,
43
- alpha: obj.alpha.to_f
44
- )
45
- )
46
- else
47
- EmbeddedProtocol::Value.new(
48
- hsl_color: EmbeddedProtocol::Value::HslColor.new(
49
- hue: obj.hue.to_f,
50
- saturation: obj.saturation.to_f,
51
- lightness: obj.lightness.to_f,
52
- alpha: obj.alpha.to_f
53
- )
54
- )
55
- end
56
- when Sass::Value::ArgumentList
57
- EmbeddedProtocol::Value.new(
58
- argument_list: EmbeddedProtocol::Value::ArgumentList.new(
59
- id: obj.instance_eval { @id },
60
- contents: obj.contents.map { |element| to_proto(element) },
61
- keywords: obj.keywords.transform_values { |value| to_proto(value) },
62
- separator: ListSeparator.to_proto(obj.separator)
63
- )
64
- )
65
- when Sass::Value::List
66
- EmbeddedProtocol::Value.new(
67
- list: EmbeddedProtocol::Value::List.new(
68
- contents: obj.contents.map { |element| to_proto(element) },
69
- separator: ListSeparator.to_proto(obj.separator),
70
- has_brackets: obj.bracketed?
71
- )
72
- )
73
- when Sass::Value::Map
74
- EmbeddedProtocol::Value.new(
75
- map: EmbeddedProtocol::Value::Map.new(
76
- entries: obj.contents.map do |key, value|
77
- EmbeddedProtocol::Value::Map::Entry.new(
78
- key: to_proto(key),
79
- value: to_proto(value)
80
- )
81
- end
82
- )
83
- )
84
- when Sass::Value::Function
85
- if obj.instance_eval { @id }
86
- EmbeddedProtocol::Value.new(
87
- compiler_function: EmbeddedProtocol::Value::CompilerFunction.new(
88
- id: obj.instance_eval { @id }
89
- )
90
- )
91
- else
92
- EmbeddedProtocol::Value.new(
93
- host_function: EmbeddedProtocol::Value::HostFunction.new(
94
- id: @function_registry.register(obj.callback),
95
- signature: obj.signature
96
- )
97
- )
98
- end
99
- when Sass::Value::Mixin
100
- EmbeddedProtocol::Value.new(
101
- compiler_mixin: EmbeddedProtocol::Value::CompilerMixin.new(
102
- id: obj.instance_eval { @id }
103
- )
104
- )
105
- when Sass::Value::Calculation
106
- EmbeddedProtocol::Value.new(
107
- calculation: Calculation.to_proto(obj)
108
- )
109
- when Sass::Value::Boolean
110
- EmbeddedProtocol::Value.new(
111
- singleton: obj.value ? :TRUE : :FALSE
112
- )
113
- when Sass::Value::Null
114
- EmbeddedProtocol::Value.new(
115
- singleton: :NULL
116
- )
117
- else
118
- raise Sass::ScriptError, "Unknown Sass::Value #{obj}"
119
- end
120
- end
121
-
122
- def from_proto(proto)
123
- oneof = proto.value
124
- obj = proto.public_send(oneof)
125
- case oneof
126
- when :string
127
- Sass::Value::String.new(
128
- obj.text,
129
- quoted: obj.quoted
130
- )
131
- when :number
132
- Number.from_proto(obj)
133
- when :rgb_color
134
- Sass::Value::Color.new(
135
- red: obj.red,
136
- green: obj.green,
137
- blue: obj.blue,
138
- alpha: obj.alpha
139
- )
140
- when :hsl_color
141
- Sass::Value::Color.new(
142
- hue: obj.hue,
143
- saturation: obj.saturation,
144
- lightness: obj.lightness,
145
- alpha: obj.alpha
146
- )
147
- when :hwb_color
148
- Sass::Value::Color.new(
149
- hue: obj.hue,
150
- whiteness: obj.whiteness,
151
- blackness: obj.blackness,
152
- alpha: obj.alpha
153
- )
154
- when :argument_list
155
- Sass::Value::ArgumentList.new(
156
- obj.contents.map do |element|
157
- from_proto(element)
158
- end,
159
- obj.keywords.entries.to_h.transform_values! do |value|
160
- from_proto(value)
161
- end,
162
- ListSeparator.from_proto(obj.separator)
163
- ).instance_eval do
164
- @id = obj.id
165
- self
166
- end
167
- when :list
168
- Sass::Value::List.new(
169
- obj.contents.map do |element|
170
- from_proto(element)
171
- end,
172
- separator: ListSeparator.from_proto(obj.separator),
173
- bracketed: obj.has_brackets
174
- )
175
- when :map
176
- Sass::Value::Map.new(
177
- obj.entries.to_h do |entry|
178
- [from_proto(entry.key), from_proto(entry.value)]
179
- end
180
- )
181
- when :compiler_function
182
- Sass::Value::Function.new(nil).instance_eval do
183
- @id = obj.id
184
- self
185
- end
186
- when :host_function
187
- raise Sass::ScriptError, 'The compiler may not send Value.host_function to host'
188
- when :compiler_mixin
189
- Sass::Value::Mixin.send(:new).instance_eval do
190
- @id = obj.id
191
- self
192
- end
193
- when :calculation
194
- Calculation.from_proto(obj)
195
- when :singleton
196
- case obj
197
- when :TRUE
198
- Sass::Value::Boolean::TRUE
199
- when :FALSE
200
- Sass::Value::Boolean::FALSE
201
- when :NULL
202
- Sass::Value::Null::NULL
203
- else
204
- raise Sass::ScriptError, "Unknown Value.singleton #{obj}"
205
- end
206
- else
207
- raise Sass::ScriptError, "Unknown Value.value #{obj}"
208
- end
209
- end
210
-
211
- # The {Number} Protofier.
212
- module Number
213
- module_function
214
-
215
- def to_proto(obj)
216
- EmbeddedProtocol::Value::Number.new(
217
- value: obj.value.to_f,
218
- numerators: obj.numerator_units,
219
- denominators: obj.denominator_units
220
- )
221
- end
222
-
223
- def from_proto(obj)
224
- Sass::Value::Number.new(
225
- obj.value, {
226
- numerator_units: obj.numerators.to_a,
227
- denominator_units: obj.denominators.to_a
228
- }
229
- )
230
- end
231
- end
232
-
233
- private_constant :Number
234
-
235
- # The {Calculation} Protofier.
236
- module Calculation
237
- module_function
238
-
239
- def to_proto(obj)
240
- EmbeddedProtocol::Value::Calculation.new(
241
- name: obj.name,
242
- arguments: obj.arguments.map { |argument| CalculationValue.to_proto(argument) }
243
- )
244
- end
245
-
246
- def from_proto(obj)
247
- Sass::Value::Calculation.send(
248
- :new,
249
- obj.name,
250
- obj.arguments.map { |argument| CalculationValue.from_proto(argument) }
251
- )
252
- end
253
- end
254
-
255
- private_constant :Calculation
256
-
257
- # The {CalculationValue} Protofier.
258
- module CalculationValue
259
- module_function
260
-
261
- def to_proto(value)
262
- case value
263
- when Sass::Value::Number
264
- EmbeddedProtocol::Value::Calculation::CalculationValue.new(
265
- number: Number.to_proto(value)
266
- )
267
- when Sass::Value::Calculation
268
- EmbeddedProtocol::Value::Calculation::CalculationValue.new(
269
- calculation: Calculation.to_proto(value)
270
- )
271
- when Sass::Value::String
272
- EmbeddedProtocol::Value::Calculation::CalculationValue.new(
273
- string: value.text
274
- )
275
- when Sass::CalculationValue::CalculationOperation
276
- EmbeddedProtocol::Value::Calculation::CalculationValue.new(
277
- operation: EmbeddedProtocol::Value::Calculation::CalculationOperation.new(
278
- operator: CalculationOperator.to_proto(value.operator),
279
- left: to_proto(value.left),
280
- right: to_proto(value.right)
281
- )
282
- )
283
- else
284
- raise Sass::ScriptError, "Unknown CalculationValue #{value}"
285
- end
286
- end
287
-
288
- def from_proto(value)
289
- oneof = value.value
290
- obj = value.public_send(oneof)
291
- case oneof
292
- when :number
293
- Number.from_proto(obj)
294
- when :calculation
295
- Calculation.from_proto(obj)
296
- when :string
297
- Sass::Value::String.new(obj, quoted: false)
298
- when :operation
299
- Sass::CalculationValue::CalculationOperation.new(
300
- CalculationOperator.from_proto(obj.operator),
301
- from_proto(obj.left),
302
- from_proto(obj.right)
303
- )
304
- else
305
- raise Sass::ScriptError, "Unknown CalculationValue #{value}"
306
- end
307
- end
308
- end
309
-
310
- private_constant :CalculationValue
311
-
312
- # The {CalculationOperator} Protofier.
313
- module CalculationOperator
314
- module_function
315
-
316
- def to_proto(operator)
317
- case operator
318
- when '+'
319
- :PLUS
320
- when '-'
321
- :MINUS
322
- when '*'
323
- :TIMES
324
- when '/'
325
- :DIVIDE
326
- else
327
- raise Sass::ScriptError, "Unknown CalculationOperator #{separator}"
328
- end
329
- end
330
-
331
- def from_proto(operator)
332
- case operator
333
- when :PLUS
334
- '+'
335
- when :MINUS
336
- '-'
337
- when :TIMES
338
- '*'
339
- when :DIVIDE
340
- '/'
341
- else
342
- raise Sass::ScriptError, "Unknown CalculationOperator #{separator}"
343
- end
344
- end
345
- end
346
-
347
- private_constant :CalculationOperator
348
-
349
- # The {ListSeparator} Protofier.
350
- module ListSeparator
351
- module_function
352
-
353
- def to_proto(separator)
354
- case separator
355
- when ','
356
- :COMMA
357
- when ' '
358
- :SPACE
359
- when '/'
360
- :SLASH
361
- when nil
362
- :UNDECIDED
363
- else
364
- raise Sass::ScriptError, "Unknown ListSeparator #{separator}"
365
- end
366
- end
367
-
368
- def from_proto(separator)
369
- case separator
370
- when :COMMA
371
- ','
372
- when :SPACE
373
- ' '
374
- when :SLASH
375
- '/'
376
- when :UNDECIDED
377
- nil
378
- else
379
- raise Sass::ScriptError, "Unknown ListSeparator #{separator}"
380
- end
381
- end
382
- end
383
-
384
- private_constant :ListSeparator
385
- end
386
-
387
- private_constant :ValueProtofier
388
- end
389
- end
390
- end