D7net
Home
Console
Upload
information
Create File
Create Folder
About
Tools
:
/
opt
/
td-agent
/
embedded
/
lib
/
ruby
/
gems
/
2.1.0
/
gems
/
sass-3.2.19
/
lib
/
sass
/
Filename :
environment.rb
back
Copy
require 'set' module Sass # The lexical environment for SassScript. # This keeps track of variable, mixin, and function definitions. # # A new environment is created for each level of Sass nesting. # This allows variables to be lexically scoped. # The new environment refers to the environment in the upper scope, # so it has access to variables defined in enclosing scopes, # but new variables are defined locally. # # Environment also keeps track of the {Engine} options # so that they can be made available to {Sass::Script::Functions}. class Environment # The enclosing environment, # or nil if this is the global environment. # # @return [Environment] attr_reader :parent attr_reader :options attr_writer :caller attr_writer :content # @param options [{Symbol => Object}] The options hash. See # {file:SASS_REFERENCE.md#sass_options the Sass options documentation}. # @param parent [Environment] See \{#parent} def initialize(parent = nil, options = nil) @parent = parent @options = options || (parent && parent.options) || {} end # The environment of the caller of this environment's mixin or function. # @return {Environment?} def caller @caller || (@parent && @parent.caller) end # The content passed to this environmnet. This is naturally only set # for mixin body environments with content passed in. # @return {Environment?} def content @content || (@parent && @parent.content) end private class << self private UNDERSCORE, DASH = '_', '-' # Note: when updating this, # update sass/yard/inherited_hash.rb as well. def inherited_hash(name) class_eval <<RUBY, __FILE__, __LINE__ + 1 def #{name}(name) _#{name}(name.tr(UNDERSCORE, DASH)) end def _#{name}(name) (@#{name}s && @#{name}s[name]) || @parent && @parent._#{name}(name) end protected :_#{name} def set_#{name}(name, value) name = name.tr(UNDERSCORE, DASH) @#{name}s[name] = value unless try_set_#{name}(name, value) end def try_set_#{name}(name, value) @#{name}s ||= {} if @#{name}s.include?(name) @#{name}s[name] = value true elsif @parent @parent.try_set_#{name}(name, value) else false end end protected :try_set_#{name} def set_local_#{name}(name, value) @#{name}s ||= {} @#{name}s[name.tr(UNDERSCORE, DASH)] = value end RUBY end end # variable # Script::Literal inherited_hash :var # mixin # Sass::Callable inherited_hash :mixin # function # Sass::Callable inherited_hash :function end end