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
60
61
62
63
64
65
66
67
68
|
# File 'lib/minicss/serializer.rb', line 12
def serialize(value)
case value
when Array
value.each { serialize(it) }
when String
@str << value
when AST::Rule
@str << (value.valid_selector? ? Sel.stringify(value.selector) : value.raw_selector) << "{"
value.decls.each { serialize(it) }
value.child_rules.each { serialize(it) }
@str << "}"
when AST::Decl
@str << "#{value.name}:"
value.value.each { serialize(it) }
@str << (value.important? ? "!important" : "")
@str << ";"
when AST::Dimension
@str << value.sign if value.sign
@str << (value.type == :integer ? value.value.to_i : value.value.to_f).to_s
@str << value.unit
when AST::Percentage
@str << value.sign if value.sign
@str << (value.type == :integer ? value.value.to_i : value.value.to_f).to_s
@str << "%"
when AST::Number
@str << value.sign if value.sign
@str << (value.type == :integer ? value.value.to_i : value.value.to_f).to_s
when AST::AtRule
@str << "@" << value.name
if value.prelude && !value.prelude.nil? && !value.prelude.empty?
@str << " "
value.prelude.each { serialize(it) }
end
if value.child_rules.empty?
@str << ";"
else
@str << "{"
value.child_rules.each { serialize(it) }
@str << "}"
end
when AST::URL
@str << "url(" << value.value << ")"
when AST::Function
@str << value.name << "("
value.value.each { serialize(it) }
@str << ")"
when AST::Block
@str << value.left_token
value.value.each { serialize(it) }
@str << value.right_token
when AST::StringToken
@str << value.quoting << (value.value || "") << value.quoting
else
raise "Unexpected element in serialization pipeline: #{value.class} #{value.inspect}"
end
end
|