class Less::Parser

Convert lesscss source into an abstract syntax Tree

def imports

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

def initialize(options = {})

Options Hash: (**options)
  • :dumpLineNumbers (String) -- one of 'mediaquery', 'comments', or 'all'
  • :relativeUrls (TrueClass, FalseClass) --
  • :strictImports (TrueClass, FalseClass) --
  • :compress (TrueClass, FalseClass) --
  • :filename (String) -- to associate with resulting parse trees (useful for generating errors)
  • :paths (Array) -- a list of directories to search when handling \@import statements

Parameters:
  • options (Hash) -- configuration options
def initialize(options = {})
  # LeSS supported _env_ options :
  # 
  # - paths (unmodified) - paths to search for imports on
  # - optimization - optimization level (for the chunker)
  # - mime (browser only) mime type for sheet import
  # - contents (browser only)
  # - strictImports
  # - dumpLineNumbers - whether to dump line numbers
  # - compress - whether to compress
  # - processImports - whether to process imports. if false then imports will not be imported
  # - relativeUrls (true/false) whether to adjust URL's to be relative
  # - errback (error callback function)
  # - rootpath string
  # - entryPath string
  # - files (internal) - list of files that have been imported, used for import-once
  # - currentFileInfo (internal) - information about the current file - 
  #   for error reporting and importing and making urls relative etc :
  #     this.currentFileInfo = {
  #        filename: filename,
  #        relativeUrls: this.relativeUrls,
  #        rootpath: options.rootpath || "",
  #        currentDirectory: entryPath,
  #        entryPath: entryPath,
  #        rootFilename: filename
  #     };
  #
  env = {}
  Less.defaults.merge(options).each do |key, val|
    env[key.to_s] = 
      case val
      when Symbol, Pathname then val.to_s
      when Array
        val.map!(&:to_s) if key.to_sym == :paths # might contain Pathname-s
        val # keep the original passed Array
      else val # true/false/String/Method
      end
  end
  @parser = Less::JavaScript.exec { Less['Parser'].new(env) }
end

def parse(less)

Returns:
  • (Less::Tree) - the parsed tree

Parameters:
  • less (String) -- the source to parse
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