class Less::Node::Expression
def _sass_split(arr)
def _sass_split(arr) return arr[0].to_sass_tree, arr[1..-1] unless arr[0] == "(" parens = 1 i = arr[1..-1].each_with_index do |e, i| parens += 1 if e == "(" parens -= 1 if e == ")" break i if parens == 0 end return _to_sass_tree(arr[1...i+1]), arr[i+2..-1] end
def _to_sass_tree(arr)
def _to_sass_tree(arr) e, rest = _to_sass_tree_plus_minus_eq(arr) until rest.empty? e2, rest = _to_sass_tree_plus_minus_eq(rest) e = Sass::Script::Operation.new(e, e2, :space) end return e end
def _to_sass_tree_plus_minus_eq(arr)
def _to_sass_tree_plus_minus_eq(arr) e, rest = _to_sass_tree_times_div(arr) while rest[0] && rest[0].is_a?(Operator) && %w[+ - =].include?(rest[0]) op = LESS_TO_SASS_OPERATORS[rest[0]] e2, rest = _to_sass_tree_times_div(rest[1..-1]) e = Sass::Script::Operation.new(e, e2, op) end return e, rest end
def _to_sass_tree_times_div(arr)
def _to_sass_tree_times_div(arr) e, rest = _to_sass_tree_unary(arr) while rest[0] && rest[0].is_a?(Operator) && %w[* /].include?(rest[0]) op = LESS_TO_SASS_OPERATORS[rest[0]] e2, rest = _to_sass_tree_unary(rest[1..-1]) e = Sass::Script::Operation.new(e, e2, op) end return e, rest end
def _to_sass_tree_unary(arr)
def _to_sass_tree_unary(arr) if arr[0] == "-" first, rest = _sass_split(arr[1..-1]) return Sass::Script::UnaryOperation.new(first, :minus), rest else return _sass_split(arr[0..-1]) end end
def to_sass_tree
def to_sass_tree if first.is_a?(Array) val = map {|e| _to_sass_tree(e)}.inject(nil) do |e, i| next i unless e Sass::Script::Operation.new(e, i, :comma) end else val = _to_sass_tree(self) end val.options = {} val end