# File lib/less/engine/nodes/property.rb, line 136
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
# File lib/less/engine/nodes/property.rb, line 158
158: def delimiter= d
159: @delimiter = d.strip + ' '
160: end
# File lib/less/engine/nodes/property.rb, line 146
146: def entities; select {|i| i.kind_of? Entity } end
Evaluates the expression and instantiates a new Literal with the result ex: [#111, +, #111] will evaluate to a Color node, with value #222
# File lib/less/engine/nodes/property.rb, line 188
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
# File lib/less/engine/nodes/property.rb, line 143
143: def expressions; select {|i| i.kind_of? Expression } end
# File lib/less/engine/nodes/property.rb, line 162
162: def flatten
163: self
164: end
# File lib/less/engine/nodes/property.rb, line 154
154: def inspect
155: '[' + map {|i| i.inspect }.join(', ') + ']'
156: end
# File lib/less/engine/nodes/property.rb, line 147
147: def literals; select {|i| i.kind_of? Literal } end
# File lib/less/engine/nodes/property.rb, line 145
145: def operators; select {|i| i.is_a? Operator } end
# File lib/less/engine/nodes/property.rb, line 149
149: def parent= obj
150: @parent = obj
151: each {|e| e.parent = obj if e.respond_to? :parent }
152: end
# File lib/less/engine/nodes/property.rb, line 166
166: def terminal?
167: expressions.empty? #&& variables.empty?
168: end
# File lib/less/engine/nodes/property.rb, line 170
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
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.