Class: Less::Parser

Inherits:
Object
  • Object
show all
Defined in:
lib/less/parser.rb

Overview

Convert lesscss source into an abstract syntax Tree

Defined Under Namespace

Classes: Tree

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Parser

Construct and configure new Less::Parser

Parameters:

  • opts (Hash)

    configuration options



11
12
13
14
15
16
17
# File 'lib/less/parser.rb', line 11

def initialize(options = {})
  stringy = {}
  Less.defaults.merge(options).each do |k,v|
    stringy[k.to_s] = v.is_a?(Array) ? v.map(&:to_s) : v.to_s
  end
  @parser = Less::JavaScript.exec { Less['Parser'].new(stringy) }
end

Instance Method Details

#importsObject



41
42
43
# File 'lib/less/parser.rb', line 41

def imports
  Less::JavaScript.exec { @parser.imports.files.map{|file, _| file} }
end

#parse(less) ⇒ Less::Tree

Convert ‘less` source into a abstract syntaxt tree

Parameters:

  • less (String)

    the source to parse

Returns:

  • (Less::Tree)

    the parsed tree



22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/less/parser.rb', line 22

def parse(less)
  error, tree = nil, nil
  Less::JavaScript.exec do
    @parser.parse(less, lambda { |*args| # (error, tree)
      # v8 >= 0.10 passes this as first arg :
      if args.size > 2
        error, tree = args[-2], args[-1]
      elsif args.last.respond_to?(:message) && args.last.message
        # might get invoked as callback(error)
        error = args.last
      else
        error, tree = *args
      end
      fail error.message unless error.nil?
    })
  end
  Tree.new(tree) if tree
end