less 1.2.21 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +4 -3
- data/.gitmodules +6 -0
- data/Gemfile +3 -0
- data/README.md +39 -46
- data/Rakefile +5 -50
- data/bin/lessc +1 -100
- data/less.gemspec +21 -125
- data/lib/less.rb +11 -30
- data/{LICENSE → lib/less/js/LICENSE} +1 -1
- data/lib/less/js/Makefile +56 -0
- data/lib/less/js/README.md +20 -0
- data/lib/less/js/benchmark/benchmark.less +3979 -0
- data/lib/less/js/benchmark/less-benchmark.js +49 -0
- data/lib/less/js/bin/lessc +105 -0
- data/lib/less/js/build/ecma-5.js +120 -0
- data/lib/less/js/build/header.js +7 -0
- data/lib/less/js/build/require.js +7 -0
- data/lib/less/js/dist/less-1.0.44.js +2655 -0
- data/lib/less/js/dist/less-1.1.0.js +2695 -0
- data/lib/less/js/dist/less-1.1.0.min.js +16 -0
- data/lib/less/js/dist/less-1.1.1.js +2710 -0
- data/lib/less/js/dist/less-1.1.1.min.js +16 -0
- data/lib/less/js/dist/less-1.1.2.js +2712 -0
- data/lib/less/js/dist/less-1.1.2.min.js +16 -0
- data/lib/less/js/dist/less-1.1.3.js +2721 -0
- data/lib/less/js/dist/less-1.1.3.min.js +16 -0
- data/lib/less/js/lib/less/browser.js +369 -0
- data/lib/less/js/lib/less/functions.js +174 -0
- data/lib/less/js/lib/less/index.js +137 -0
- data/lib/less/js/lib/less/parser.js +1098 -0
- data/lib/less/js/lib/less/tree.js +13 -0
- data/lib/less/js/lib/less/tree/alpha.js +17 -0
- data/lib/less/js/lib/less/tree/anonymous.js +13 -0
- data/lib/less/js/lib/less/tree/call.js +45 -0
- data/lib/less/js/lib/less/tree/color.js +98 -0
- data/lib/less/js/lib/less/tree/comment.js +14 -0
- data/lib/less/js/lib/less/tree/dimension.js +34 -0
- data/lib/less/js/lib/less/tree/directive.js +33 -0
- data/lib/less/js/lib/less/tree/element.js +32 -0
- data/lib/less/js/lib/less/tree/expression.js +23 -0
- data/lib/less/js/lib/less/tree/import.js +77 -0
- data/lib/less/js/lib/less/tree/javascript.js +51 -0
- data/lib/less/js/lib/less/tree/keyword.js +9 -0
- data/lib/less/js/lib/less/tree/mixin.js +106 -0
- data/lib/less/js/lib/less/tree/operation.js +32 -0
- data/lib/less/js/lib/less/tree/quoted.js +29 -0
- data/lib/less/js/lib/less/tree/rule.js +38 -0
- data/lib/less/js/lib/less/tree/ruleset.js +179 -0
- data/lib/less/js/lib/less/tree/selector.js +28 -0
- data/lib/less/js/lib/less/tree/url.js +25 -0
- data/lib/less/js/lib/less/tree/value.js +24 -0
- data/lib/less/js/lib/less/tree/variable.js +24 -0
- data/lib/less/js/package.json +13 -0
- data/lib/less/js/test/css/colors.css +42 -0
- data/lib/less/js/test/css/comments.css +52 -0
- data/lib/less/js/test/css/css-3.css +42 -0
- data/lib/less/js/test/css/css-escapes.css +20 -0
- data/lib/less/js/test/css/css.css +82 -0
- data/lib/less/js/test/css/functions.css +30 -0
- data/{spec → lib/less/js/test}/css/import.css +4 -2
- data/lib/less/js/test/css/javascript.css +22 -0
- data/lib/less/js/test/css/lazy-eval.css +3 -0
- data/lib/less/js/test/css/media.css +21 -0
- data/lib/less/js/test/css/mixins-args.css +61 -0
- data/lib/less/js/test/css/mixins-closure.css +9 -0
- data/lib/less/js/test/css/mixins-nested.css +14 -0
- data/lib/less/js/test/css/mixins-pattern.css +49 -0
- data/lib/less/js/test/css/mixins.css +50 -0
- data/{spec → lib/less/js/test}/css/operations.css +20 -2
- data/{spec → lib/less/js/test}/css/parens.css +0 -0
- data/lib/less/js/test/css/rulesets.css +29 -0
- data/{spec → lib/less/js/test}/css/scope.css +6 -2
- data/lib/less/js/test/css/selectors.css +32 -0
- data/lib/less/js/test/css/strings.css +38 -0
- data/lib/less/js/test/css/variables.css +24 -0
- data/lib/less/js/test/css/whitespace.css +36 -0
- data/lib/less/js/test/less-test.js +75 -0
- data/{spec → lib/less/js/test}/less/colors.less +13 -2
- data/{spec → lib/less/js/test}/less/comments.less +19 -2
- data/{spec → lib/less/js/test}/less/css-3.less +4 -1
- data/lib/less/js/test/less/css-escapes.less +28 -0
- data/{spec → lib/less/js/test}/less/css.less +10 -18
- data/lib/less/js/test/less/functions.less +35 -0
- data/{spec → lib/less/js/test}/less/import.less +1 -1
- data/{spec → lib/less/js/test}/less/import/import-test-a.less +0 -0
- data/{spec → lib/less/js/test}/less/import/import-test-b.less +0 -0
- data/{spec → lib/less/js/test}/less/import/import-test-c.less +0 -0
- data/{spec → lib/less/js/test}/less/import/import-test-d.css +0 -0
- data/lib/less/js/test/less/javascript.less +27 -0
- data/{spec → lib/less/js/test}/less/lazy-eval.less +0 -0
- data/lib/less/js/test/less/media.less +25 -0
- data/lib/less/js/test/less/mixins-args.less +118 -0
- data/lib/less/js/test/less/mixins-closure.less +26 -0
- data/lib/less/js/test/less/mixins-nested.less +22 -0
- data/lib/less/js/test/less/mixins-pattern.less +96 -0
- data/{spec → lib/less/js/test}/less/mixins.less +8 -4
- data/{spec → lib/less/js/test}/less/operations.less +19 -0
- data/{spec → lib/less/js/test}/less/parens.less +0 -0
- data/{spec → lib/less/js/test}/less/rulesets.less +2 -2
- data/{spec → lib/less/js/test}/less/scope.less +1 -1
- data/{spec → lib/less/js/test}/less/selectors.less +1 -1
- data/lib/less/js/test/less/strings.less +49 -0
- data/lib/less/js/test/less/variables.less +50 -0
- data/{spec → lib/less/js/test}/less/whitespace.less +3 -0
- data/lib/less/loader.rb +67 -0
- data/lib/less/parser.rb +46 -0
- data/lib/less/version.rb +3 -0
- data/spec/less/one/one.less +1 -0
- data/spec/less/parser_spec.rb +30 -0
- data/spec/less/two/two.less +1 -0
- data/spec/spec_helper.rb +2 -7
- metadata +156 -106
- data/CHANGELOG +0 -62
- data/VERSION +0 -1
- data/lib/less/command.rb +0 -110
- data/lib/less/engine.rb +0 -52
- data/lib/less/engine/grammar/common.tt +0 -29
- data/lib/less/engine/grammar/entity.tt +0 -144
- data/lib/less/engine/grammar/less.tt +0 -341
- data/lib/less/engine/nodes.rb +0 -9
- data/lib/less/engine/nodes/element.rb +0 -281
- data/lib/less/engine/nodes/entity.rb +0 -79
- data/lib/less/engine/nodes/function.rb +0 -93
- data/lib/less/engine/nodes/literal.rb +0 -171
- data/lib/less/engine/nodes/property.rb +0 -232
- data/lib/less/engine/nodes/ruleset.rb +0 -12
- data/lib/less/engine/nodes/selector.rb +0 -44
- data/lib/less/ext.rb +0 -60
- data/spec/command_spec.rb +0 -102
- data/spec/css/accessors.css +0 -18
- data/spec/css/big.css +0 -3768
- data/spec/css/colors.css +0 -14
- data/spec/css/comments.css +0 -9
- data/spec/css/css-3.css +0 -21
- data/spec/css/css.css +0 -50
- data/spec/css/dash-prefix.css +0 -12
- data/spec/css/functions.css +0 -6
- data/spec/css/import-with-extra-paths.css +0 -8
- data/spec/css/import-with-partial-in-extra-path.css +0 -6
- data/spec/css/lazy-eval.css +0 -1
- data/spec/css/mixins-args.css +0 -32
- data/spec/css/mixins.css +0 -28
- data/spec/css/rulesets.css +0 -17
- data/spec/css/selectors.css +0 -13
- data/spec/css/strings.css +0 -12
- data/spec/css/variables.css +0 -8
- data/spec/css/whitespace.css +0 -7
- data/spec/engine_spec.rb +0 -127
- data/spec/less/accessors.less +0 -20
- data/spec/less/big.less +0 -1264
- data/spec/less/dash-prefix.less +0 -21
- data/spec/less/exceptions/mixed-units-error.less +0 -3
- data/spec/less/exceptions/name-error-1.0.less +0 -3
- data/spec/less/exceptions/syntax-error-1.0.less +0 -3
- data/spec/less/extra_import_path/extra.less +0 -1
- data/spec/less/extra_import_path/import/import-test-a.css +0 -1
- data/spec/less/extra_import_path/import/import-test-a.less +0 -4
- data/spec/less/functions.less +0 -6
- data/spec/less/hidden.less +0 -25
- data/spec/less/import-with-extra-paths.less +0 -4
- data/spec/less/literal-css.less +0 -11
- data/spec/less/mixins-args.less +0 -59
- data/spec/less/strings.less +0 -14
- data/spec/less/variables.less +0 -29
- data/spec/spec.css +0 -50
@@ -1,171 +0,0 @@
|
|
1
|
-
module Less
|
2
|
-
module Node
|
3
|
-
module Literal
|
4
|
-
include Entity
|
5
|
-
|
6
|
-
def unit
|
7
|
-
nil
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
#
|
12
|
-
# rgb(255, 0, 0) #f0f0f0
|
13
|
-
#
|
14
|
-
class Color
|
15
|
-
include Literal
|
16
|
-
attr_reader :r, :g, :b, :a
|
17
|
-
|
18
|
-
def initialize r, g, b, a = 1.0
|
19
|
-
@r, @g, @b = [r, g, b].map do |c|
|
20
|
-
normalize(c.is_a?(String) ? c.to_i(16) : c)
|
21
|
-
end
|
22
|
-
@a = normalize(a, 1.0)
|
23
|
-
end
|
24
|
-
|
25
|
-
def alpha v
|
26
|
-
self.class.new r, g, b, v
|
27
|
-
end
|
28
|
-
|
29
|
-
def rgb
|
30
|
-
[r, g, b]
|
31
|
-
end
|
32
|
-
|
33
|
-
def operate op, other
|
34
|
-
color = if other.is_a? Numeric
|
35
|
-
rgb.map {|c| c.send(op, other) }
|
36
|
-
else
|
37
|
-
rgb.zip(other.rgb).map {|a, b| a.send(op, b) }
|
38
|
-
end
|
39
|
-
self.class.new *[color, @a].flatten # Ruby 1.8 hack
|
40
|
-
end
|
41
|
-
|
42
|
-
def + other; operate :+, other end
|
43
|
-
def - other; operate :-, other end
|
44
|
-
def * other; operate :*, other end
|
45
|
-
def / other; operate :/, other end
|
46
|
-
|
47
|
-
def coerce other
|
48
|
-
return self, other
|
49
|
-
end
|
50
|
-
|
51
|
-
def to_s
|
52
|
-
if a < 1.0
|
53
|
-
"rgba(#{r.to_i}, #{g.to_i}, #{b.to_i}, #{a})"
|
54
|
-
else
|
55
|
-
"#%02x%02x%02x" % [r, g, b]
|
56
|
-
end
|
57
|
-
end
|
58
|
-
|
59
|
-
def inspect
|
60
|
-
if a < 1.0
|
61
|
-
"rgba(#{r}, #{g}, #{b}, #{a})"
|
62
|
-
else
|
63
|
-
"rgb(#{r}, #{g}, #{b})"
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
|
-
def to_css
|
68
|
-
to_s
|
69
|
-
end
|
70
|
-
|
71
|
-
def to_ruby
|
72
|
-
"#{self.class}.new(#{r},#{g},#{b},#{a})"
|
73
|
-
end
|
74
|
-
|
75
|
-
protected
|
76
|
-
def normalize(v, max = 255, min = 0)
|
77
|
-
[[min, v].max, max].min
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
#
|
82
|
-
# 6 10px 125%
|
83
|
-
#
|
84
|
-
class Number < DelegateClass(Float)
|
85
|
-
include Literal
|
86
|
-
|
87
|
-
attr_accessor :unit
|
88
|
-
|
89
|
-
def initialize value, unit = nil
|
90
|
-
super value.to_f
|
91
|
-
@unit = (unit.nil? || unit.empty?) ? nil : unit
|
92
|
-
end
|
93
|
-
|
94
|
-
def to_s
|
95
|
-
"#{super}#@unit"
|
96
|
-
end
|
97
|
-
|
98
|
-
def dup
|
99
|
-
self
|
100
|
-
end
|
101
|
-
|
102
|
-
def to_ruby
|
103
|
-
self.to_f
|
104
|
-
end
|
105
|
-
|
106
|
-
def inspect
|
107
|
-
to_s
|
108
|
-
end
|
109
|
-
|
110
|
-
def to_css
|
111
|
-
"#{(self % 1).zero?? "#{self.to_i}#@unit" : self}"
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
#
|
116
|
-
# "hello world"
|
117
|
-
#
|
118
|
-
class Quoted < String
|
119
|
-
include Literal
|
120
|
-
|
121
|
-
attr_reader :quotes, :content
|
122
|
-
|
123
|
-
# Strip quotes if necessary, and save them in @quotes
|
124
|
-
def initialize str
|
125
|
-
@quotes, @content = unless str.nil? or str.empty?
|
126
|
-
str.match(/('|")(.*?)(\1)/).captures rescue [nil, str]
|
127
|
-
else
|
128
|
-
[nil, ""]
|
129
|
-
end
|
130
|
-
super @content
|
131
|
-
end
|
132
|
-
|
133
|
-
def to_css
|
134
|
-
"#@quotes#{@content}#@quotes"
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
class Font
|
139
|
-
include Literal
|
140
|
-
end
|
141
|
-
|
142
|
-
class FontFamily
|
143
|
-
include Literal
|
144
|
-
|
145
|
-
def initialize family = []
|
146
|
-
@family = family
|
147
|
-
end
|
148
|
-
|
149
|
-
def to_css
|
150
|
-
@family.map(&:to_css) * ', '
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
#
|
155
|
-
# Any un-quoted word
|
156
|
-
#
|
157
|
-
# ex: red, small, border-collapse
|
158
|
-
#
|
159
|
-
class Keyword < String
|
160
|
-
include Entity
|
161
|
-
|
162
|
-
def to_css
|
163
|
-
self
|
164
|
-
end
|
165
|
-
|
166
|
-
def inspect
|
167
|
-
"#{self}"
|
168
|
-
end
|
169
|
-
end
|
170
|
-
end
|
171
|
-
end
|
@@ -1,232 +0,0 @@
|
|
1
|
-
module Less
|
2
|
-
module Node
|
3
|
-
class Property < String
|
4
|
-
include Entity
|
5
|
-
|
6
|
-
attr_accessor :value
|
7
|
-
|
8
|
-
def initialize key, value = nil, parent = nil
|
9
|
-
super key, parent
|
10
|
-
value = if value.is_a? Array
|
11
|
-
value.each {|v| v.parent = self if v.respond_to? :parent }.
|
12
|
-
map {|v| v.is_a?(Expression) ? v : Expression.new(v, self) }
|
13
|
-
elsif value.nil?
|
14
|
-
[]
|
15
|
-
else
|
16
|
-
value
|
17
|
-
end
|
18
|
-
@value = value.is_a?(Expression) ? value : Expression.new(value, self)
|
19
|
-
@value.parent = self
|
20
|
-
@value.delimiter = ','
|
21
|
-
# puts "new property #{to_s}: #{value} => #{@value}, contains: #{@value[0].class}"
|
22
|
-
# puts
|
23
|
-
end
|
24
|
-
|
25
|
-
def parent= obj
|
26
|
-
@parent = obj
|
27
|
-
value.parent = self
|
28
|
-
end
|
29
|
-
|
30
|
-
def copy
|
31
|
-
clone.tap {|c| c.value = value.copy }
|
32
|
-
end
|
33
|
-
|
34
|
-
def << token
|
35
|
-
token = Node::Anonymous.new(*token) unless token.is_a? Entity or token.respond_to? :to_ruby
|
36
|
-
token.parent = self if token.respond_to? :parent
|
37
|
-
@value << token
|
38
|
-
end
|
39
|
-
|
40
|
-
def empty?; !@value || @value.empty? end
|
41
|
-
|
42
|
-
def inspect
|
43
|
-
self + (empty?? "" : ": `#{value.map {|i| i.to_s } * ' | '}`")
|
44
|
-
end
|
45
|
-
|
46
|
-
def == other
|
47
|
-
self.to_s == other.to_s
|
48
|
-
end
|
49
|
-
|
50
|
-
def eql? other
|
51
|
-
self == other and value.eql? other.value
|
52
|
-
end
|
53
|
-
|
54
|
-
def to_s
|
55
|
-
super
|
56
|
-
end
|
57
|
-
|
58
|
-
def nearest node
|
59
|
-
parent.nearest node
|
60
|
-
end
|
61
|
-
|
62
|
-
def evaluate env = nil
|
63
|
-
# puts "evaluating property `#{to_s}`: #{value.inspect}"
|
64
|
-
if value.is_a?(Expression) #Value
|
65
|
-
# puts "value is a Value"
|
66
|
-
value.map {|e| e.evaluate(env) } #6
|
67
|
-
else
|
68
|
-
# puts "value is a #{value.class}"
|
69
|
-
[value.evaluate(env)]
|
70
|
-
end
|
71
|
-
|
72
|
-
|
73
|
-
end
|
74
|
-
|
75
|
-
def to_css env = nil
|
76
|
-
# puts "property.to_css `#{to_s}` env:#{env ? env.variables : "nil"}"
|
77
|
-
val = evaluate(env)
|
78
|
-
"#{self}: #{if val.respond_to? :to_css
|
79
|
-
val.to_css
|
80
|
-
else
|
81
|
-
# p val
|
82
|
-
# puts "#{val.class} #{val.first.class}"
|
83
|
-
val.map {|i| i.to_css }.join(", ")
|
84
|
-
end};"
|
85
|
-
end
|
86
|
-
end
|
87
|
-
|
88
|
-
class Variable < Property
|
89
|
-
attr_reader :declaration
|
90
|
-
|
91
|
-
def initialize key, value = nil, parent = nil
|
92
|
-
@declaration = value ? true : false
|
93
|
-
super key.delete('@'), value, parent
|
94
|
-
end
|
95
|
-
|
96
|
-
def inspect
|
97
|
-
"@#{super}"
|
98
|
-
end
|
99
|
-
|
100
|
-
def to_s
|
101
|
-
"@#{super}"
|
102
|
-
end
|
103
|
-
|
104
|
-
def evaluate env = nil
|
105
|
-
if declaration
|
106
|
-
# puts "evaluating DEC"
|
107
|
-
value.evaluate #2
|
108
|
-
else
|
109
|
-
# puts "evaluating #{to_s} par: #{parent} env: #{env ? env.variables : "nil"}"
|
110
|
-
begin
|
111
|
-
var = (env || self.parent).nearest(to_s) #3
|
112
|
-
rescue VariableNameError
|
113
|
-
var = self.parent.nearest(to_s)
|
114
|
-
end
|
115
|
-
var.evaluate
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
def to_ruby
|
120
|
-
evaluate.to_ruby
|
121
|
-
end
|
122
|
-
|
123
|
-
def to_css env = nil
|
124
|
-
val = evaluate env
|
125
|
-
if val.respond_to? :to_css
|
126
|
-
env ? val.to_css(env) : val.to_css
|
127
|
-
else
|
128
|
-
val.map {|i| env ? i.to_css(env) : i.to_css }.join ', '
|
129
|
-
end
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
class Expression < Array
|
134
|
-
attr_accessor :parent, :delimiter
|
135
|
-
|
136
|
-
def initialize ary, parent = nil, delimiter = ' '
|
137
|
-
self.parent = parent
|
138
|
-
self.delimiter = delimiter
|
139
|
-
# puts "new expression #{ary} |#{delimiter}|"
|
140
|
-
super(ary.is_a?(Array) ? ary : [ary].flatten)
|
141
|
-
end
|
142
|
-
|
143
|
-
def expressions; select {|i| i.kind_of? Expression } end
|
144
|
-
def variables; select {|i| i.kind_of? Variable } end
|
145
|
-
def operators; select {|i| i.is_a? Operator } end
|
146
|
-
def entities; select {|i| i.kind_of? Entity } end
|
147
|
-
def literals; select {|i| i.kind_of? Literal } end
|
148
|
-
|
149
|
-
def parent= obj
|
150
|
-
@parent = obj
|
151
|
-
each {|e| e.parent = obj if e.respond_to? :parent }
|
152
|
-
end
|
153
|
-
|
154
|
-
def inspect
|
155
|
-
'[' + map {|i| i.inspect }.join(', ') + ']'
|
156
|
-
end
|
157
|
-
|
158
|
-
def delimiter= d
|
159
|
-
@delimiter = d.strip + ' '
|
160
|
-
end
|
161
|
-
|
162
|
-
def flatten
|
163
|
-
self
|
164
|
-
end
|
165
|
-
|
166
|
-
def terminal?
|
167
|
-
expressions.empty? #&& variables.empty?
|
168
|
-
end
|
169
|
-
|
170
|
-
def to_css env = nil
|
171
|
-
# puts "TOCSS, delim: |#{@delimiter}|"
|
172
|
-
map do |i|
|
173
|
-
i.parent = self.parent
|
174
|
-
i.respond_to?(:to_css) ? i.to_css() : i.to_s
|
175
|
-
end * @delimiter
|
176
|
-
end
|
177
|
-
|
178
|
-
def to_ruby
|
179
|
-
map do |i|
|
180
|
-
i.respond_to?(:to_ruby) ? i.to_ruby : i.to_s
|
181
|
-
end
|
182
|
-
end
|
183
|
-
|
184
|
-
#
|
185
|
-
# Evaluates the expression and instantiates a new Literal with the result
|
186
|
-
# ex: [#111, +, #111] will evaluate to a Color node, with value #222
|
187
|
-
#
|
188
|
-
def evaluate env = nil
|
189
|
-
# puts "expression #{self.inspect} env: #{env ? env.variables : "nil"}"
|
190
|
-
if size > 2 or !terminal?
|
191
|
-
# puts " SIZE > 2 or !terminal"
|
192
|
-
|
193
|
-
# puts "--- sub evaluation ---"
|
194
|
-
|
195
|
-
# Replace self with an evaluated sub-expression
|
196
|
-
evaled = self.class.new(map {|e| e.respond_to?(:evaluate) ? e.evaluate(env) : e }, parent, delimiter) #5
|
197
|
-
|
198
|
-
# puts "======================"
|
199
|
-
# puts "evaled => #{evaled.inspect}"
|
200
|
-
|
201
|
-
unit = evaled.literals.map do |node|
|
202
|
-
node.unit
|
203
|
-
end.compact.uniq.tap do |ary|
|
204
|
-
raise MixedUnitsError, evaled * ' ' if ary.size > 1 && !evaled.operators.empty?
|
205
|
-
end.join
|
206
|
-
|
207
|
-
entity = evaled.literals.find {|e| e.unit == unit } || evaled.literals.first || evaled.entities.first
|
208
|
-
result = evaled.operators.empty?? evaled : eval(evaled.to_ruby.join)
|
209
|
-
|
210
|
-
# puts "entity is a #{entity.class}"
|
211
|
-
# puts "delimiter is |#{@delimiter}|"
|
212
|
-
|
213
|
-
case result
|
214
|
-
when Entity then result
|
215
|
-
when Expression then result.one?? result.first : self.class.new(result, parent, delimiter)
|
216
|
-
else entity.class.new(result, *(unit if entity.class == Node::Number))
|
217
|
-
end
|
218
|
-
elsif size == 1
|
219
|
-
if first.is_a? Variable
|
220
|
-
first.evaluate(env)
|
221
|
-
elsif first.is_a? Function
|
222
|
-
first.evaluate(env)
|
223
|
-
else
|
224
|
-
first
|
225
|
-
end
|
226
|
-
else
|
227
|
-
self
|
228
|
-
end
|
229
|
-
end
|
230
|
-
end
|
231
|
-
end
|
232
|
-
end
|
@@ -1,44 +0,0 @@
|
|
1
|
-
module Less
|
2
|
-
module Node
|
3
|
-
class Selector < String
|
4
|
-
include Entity
|
5
|
-
|
6
|
-
Selectors = {
|
7
|
-
:Descendant => '',
|
8
|
-
:Child => '>',
|
9
|
-
:Adjacent => '+',
|
10
|
-
:PseudoClass => ':',
|
11
|
-
:PseudoElement => '::',
|
12
|
-
:Sibling => '~'
|
13
|
-
}
|
14
|
-
|
15
|
-
def initialize
|
16
|
-
super Selectors[ self.class.to_s.split('::').last.to_sym ]
|
17
|
-
end
|
18
|
-
|
19
|
-
def self.[] key
|
20
|
-
Node.const_get(Selectors.find {|k, v| v == key }.first)
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
class Descendant < Selector
|
25
|
-
def to_css; " " end
|
26
|
-
end
|
27
|
-
|
28
|
-
class Child < Selector
|
29
|
-
def to_css; " #{self} " end
|
30
|
-
end
|
31
|
-
|
32
|
-
class Adjacent < Selector
|
33
|
-
def to_css; " #{self} " end
|
34
|
-
end
|
35
|
-
|
36
|
-
class PseudoClass < Selector
|
37
|
-
def to_css; self end
|
38
|
-
end
|
39
|
-
|
40
|
-
class PseudoElement < Selector
|
41
|
-
def to_css; self end
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|