This class handles the parsing and compilation of the Sass template. Example usage:
template = File.load('stylesheets/sassy.sass') sass_engine = Sass::Engine.new(template) output = sass_engine.render puts output
The character that designates the beginning of a comment, either Sass or CSS.
The character that follows the general COMMENT_CHAR and designates a CSS comment, which is embedded in the CSS document.
The default options for Sass::Engine. @api public
The character used to denote a compiler directive.
Designates a non-parsed rule.
Designates block as mixin definition rather than CSS rules to output
Includes named mixin declared using MIXIN_DEFINITION_CHAR
The character that begins a CSS property.
The regex that matches and extracts data from properties of the form `:name prop`.
The character that follows the general COMMENT_CHAR and designates a Sass comment, which is not output as a CSS comment.
The character that indicates that a comment allows interpolation and should be preserved even in `:compressed` mode.
Returns the {Sass::Engine} for the given file. This is preferable to Sass::Engine.new when reading from a file because it properly sets up the Engine's metadata, enables parse-tree caching, and infers the syntax from the filename.
@param filename [String] The path to the Sass or SCSS file @param options [{Symbol => Object}] The options hash;
See {file:SASS_REFERENCE.md#sass_options the Sass options documentation}.
@return [Sass::Engine] The Engine for the given Sass or SCSS file. @raise [Sass::SyntaxError] if there's an error in the document.
# File lib/sass/engine.rb, line 212 def self.for_file(filename, options) had_syntax = options[:syntax] if had_syntax # Use what was explicitly specificed elsif filename =~ /\.scss$/ options.merge!(:syntax => :scss) elsif filename =~ /\.sass$/ options.merge!(:syntax => :sass) end Sass::Engine.new(File.read(filename), options.merge(:filename => filename)) end
Creates a new Engine. Note that Engine should only be used directly when compiling in-memory Sass code. If you're compiling a single Sass file from the filesystem, use {Sass::Engine.for_file}. If you're compiling multiple files from the filesystem, use {Sass::Plugin}.
@param template [String] The Sass template.
This template can be encoded using any encoding that can be converted to Unicode. If the template contains an `@charset` declaration, that overrides the Ruby encoding (see {file:SASS_REFERENCE.md#encodings the encoding documentation})
@param options [{Symbol => Object}] An options hash.
See {file:SASS_REFERENCE.md#sass_options the Sass options documentation}.
@see {Sass::Engine.for_file} @see {Sass::Plugin}
# File lib/sass/engine.rb, line 249 def initialize(template, options={}) @options = self.class.normalize_options(options) @template = template end
Converts a Sass options hash into a standard form, filling in default values and resolving aliases.
@param options [{Symbol => Object}] The options hash;
see {file:SASS_REFERENCE.md#sass_options the Sass options documentation}
@return [{Symbol => Object}] The normalized options hash. @private
# File lib/sass/engine.rb, line 170 def self.normalize_options(options) options = DEFAULT_OPTIONS.merge(options.reject {|k, v| v.nil?}) # If the `:filename` option is passed in without an importer, # assume it's using the default filesystem importer. options[:importer] ||= options[:filesystem_importer].new(".") if options[:filename] # Tracks the original filename of the top-level Sass file options[:original_filename] ||= options[:filename] options[:cache_store] ||= Sass::CacheStores::Chain.new( Sass::CacheStores::Memory.new, Sass::CacheStores::Filesystem.new(options[:cache_location])) # Support both, because the docs said one and the other actually worked # for quite a long time. options[:line_comments] ||= options[:line_numbers] options[:load_paths] = (options[:load_paths] + Sass.load_paths).map do |p| next p unless p.is_a?(String) || (defined?(Pathname) && p.is_a?(Pathname)) options[:filesystem_importer].new(p.to_s) end # Backwards compatibility options[:property_syntax] ||= options[:attribute_syntax] case options[:property_syntax] when :alternate; options[:property_syntax] = :new when :normal; options[:property_syntax] = :old end options end
Helper for {#dependencies}.
@private
# File lib/sass/engine.rb, line 302 def _dependencies(seen, engines) return if seen.include?(key = [@options[:filename], @options[:importer]]) seen << key engines << self to_tree.grep(Tree::ImportNode) do |n| next if n.css_import? n.imported_file._dependencies(seen, engines) end end
Gets a set of all the documents that are (transitive) dependencies of this document, not including the document itself.
@return [[Sass::Engine]] The dependency documents.
# File lib/sass/engine.rb, line 294 def dependencies _dependencies(Set.new, engines = Set.new) Sass::Util.array_minus(engines, [self]) end
Render the template to CSS.
@return [String] The CSS @raise [Sass::SyntaxError] if there's an error in the document @raise [Encoding::UndefinedConversionError] if the source encoding
cannot be converted to UTF-8
@raise [ArgumentError] if the document uses an unknown encoding with `@charset`
# File lib/sass/engine.rb, line 261 def render return _render unless @options[:quiet] Sass::Util.silence_sass_warnings {_render} end
Returns the original encoding of the document, or `nil` under Ruby 1.8.
@return [Encoding, nil] @raise [Encoding::UndefinedConversionError] if the source encoding
cannot be converted to UTF-8
@raise [ArgumentError] if the document uses an unknown encoding with `@charset`
# File lib/sass/engine.rb, line 284 def source_encoding check_encoding! @original_encoding end
Parses the document into its parse tree. Memoized.
@return [Sass::Tree::Node] The root of the parse tree. @raise [Sass::SyntaxError] if there's an error in the document
# File lib/sass/engine.rb, line 271 def to_tree @tree ||= @options[:quiet] ? Sass::Util.silence_sass_warnings {_to_tree} : _to_tree end
Generated with the Darkfish Rdoc Generator 2.