4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
# File 'lib/sassc/script/value_conversion.rb', line 4
def self.from_native(native_value, options)
case value_tag = Native.value_get_tag(native_value)
when :sass_null
when :sass_string
value = Native.string_get_value(native_value)
type = Native.string_get_type(native_value)
argument = Script::String.new(value, type)
argument
when :sass_boolean
value = Native.boolean_get_value(native_value)
argument = Script::Bool.new(value)
argument
when :sass_number
value = Native.number_get_value(native_value)
unit = Native.number_get_unit(native_value)
argument = Sass::Script::Value::Number.new(value, unit)
argument
when :sass_color
red, green, blue, alpha = Native.color_get_r(native_value), Native.color_get_g(native_value), Native.color_get_b(native_value), Native.color_get_a(native_value)
argument = Script::Color.new([red, green, blue, alpha])
argument.options = options
argument
when :sass_map
values = {}
length = Native::map_get_length native_value
(0..length-1).each do |index|
key = Native::map_get_key(native_value, index)
value = Native::map_get_value(native_value, index)
values[from_native(key, options)] = from_native(value, options)
end
argument = Sass::Script::Value::Map.new values
argument
when :sass_list
length = Native::list_get_length(native_value)
items = (0...length).map do |index|
native_item = Native::list_get_value(native_value, index)
from_native(native_item, options)
end
if Gem.loaded_specs['sass'].version < Gem::Version.create('3.5')
Sass::Script::Value::List.new(items, :space)
else
Sass::Script::Value::List.new(items, separator: :space)
end
else
raise UnsupportedValue.new("Sass argument of type #{value_tag} unsupported")
end
end
|