class Less::Node::Expression

Attributes

delimiter[RW]
parent[RW]

Public Class Methods

new(ary, parent = nil, delimiter = ' ') click to toggle source
Calls superclass method
# File lib/less/engine/nodes/property.rb, line 136
      def initialize ary, parent = nil, delimiter = ' '
        self.parent = parent
        self.delimiter = delimiter
#        puts "new expression #{ary} |#{delimiter}|"
        super(ary.is_a?(Array) ? ary : [ary].flatten)
      end

Public Instance Methods

delimiter=(d) click to toggle source
# File lib/less/engine/nodes/property.rb, line 158
def delimiter= d
  @delimiter = d.strip + ' '
end
entities() click to toggle source
# File lib/less/engine/nodes/property.rb, line 146
def entities;    select {|i| i.kind_of? Entity }     end
evaluate(env = nil) click to toggle source

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
      def evaluate env = nil
#        puts "expression #{self.inspect} env: #{env ? env.variables : "nil"}"
        if size > 2 or !terminal?
#          puts " SIZE > 2 or !terminal"

#          puts "--- sub evaluation ---"

          # Replace self with an evaluated sub-expression
          evaled = self.class.new(map {|e| e.respond_to?(:evaluate) ? e.evaluate(env) : e }, parent, delimiter) #5

#          puts "======================"
#          puts "evaled => #{evaled.inspect}"

          unit = evaled.literals.map do |node|
            node.unit
          end.compact.uniq.tap do |ary|
            raise MixedUnitsError, evaled * ' ' if ary.size > 1 && !evaled.operators.empty?
          end.join

          entity = evaled.literals.find {|e| e.unit == unit } || evaled.literals.first || evaled.entities.first
          result = evaled.operators.empty?? evaled : eval(evaled.to_ruby.join)

#          puts "entity is a #{entity.class}"
#          puts "delimiter is |#{@delimiter}|"

          case result
            when Entity     then result
            when Expression then result.one?? result.first : self.class.new(result, parent, delimiter)
            else entity.class.new(result, *(unit if entity.class == Node::Number))
          end
        elsif size == 1
          if first.is_a? Variable
            first.evaluate(env)
          elsif first.is_a? Function
            first.evaluate(env)
          else
            first
          end
        else
          self
        end
      end
expressions() click to toggle source
# File lib/less/engine/nodes/property.rb, line 143
def expressions; select {|i| i.kind_of? Expression } end
flatten() click to toggle source
# File lib/less/engine/nodes/property.rb, line 162
def flatten
  self
end
inspect() click to toggle source
# File lib/less/engine/nodes/property.rb, line 154
def inspect
  '[' + map {|i| i.inspect }.join(', ') + ']'
end
literals() click to toggle source
# File lib/less/engine/nodes/property.rb, line 147
def literals;    select {|i| i.kind_of? Literal }    end
operators() click to toggle source
# File lib/less/engine/nodes/property.rb, line 145
def operators;   select {|i| i.is_a? Operator }      end
parent=(obj) click to toggle source
# File lib/less/engine/nodes/property.rb, line 149
def parent= obj
  @parent = obj
  each {|e| e.parent = obj if e.respond_to? :parent }
end
terminal?() click to toggle source
# File lib/less/engine/nodes/property.rb, line 166
def terminal?
  expressions.empty? #&& variables.empty?
end
to_css(env = nil) click to toggle source
# File lib/less/engine/nodes/property.rb, line 170
      def to_css env = nil
#        puts "TOCSS, delim: |#{@delimiter}|"
        map do |i|
          i.parent = self.parent
          i.respond_to?(:to_css) ? i.to_css() : i.to_s
        end * @delimiter
      end
to_ruby() click to toggle source
# File lib/less/engine/nodes/property.rb, line 178
def to_ruby
  map do |i|
    i.respond_to?(:to_ruby) ? i.to_ruby : i.to_s
  end
end
variables() click to toggle source
# File lib/less/engine/nodes/property.rb, line 144
def variables;   select {|i| i.kind_of? Variable   } end