diff --git a/lib/sass/engine.rb b/lib/sass/engine.rb index 973507e5..acf0cda6 100644 --- a/lib/sass/engine.rb +++ b/lib/sass/engine.rb @@ -94,7 +94,7 @@ module Sass :load_paths => ['.'] }.merge! options @template = template - @environment = Environment.new + @environment = Environment.new(nil, @options) @environment.set_var("important", Script::String.new("!important")) end diff --git a/lib/sass/environment.rb b/lib/sass/environment.rb index 6e46711e..1089445b 100644 --- a/lib/sass/environment.rb +++ b/lib/sass/environment.rb @@ -2,10 +2,15 @@ module Sass class Environment attr_reader :parent - def initialize(parent = nil) + def initialize(parent = nil, options = nil) @vars = {} @mixins = {} @parent = parent + @options = options + end + + def options + @options || (parent && parent.options) || {} end def self.inherited_hash(name) diff --git a/lib/sass/script/funcall.rb b/lib/sass/script/funcall.rb index dbb13c0c..169fab16 100644 --- a/lib/sass/script/funcall.rb +++ b/lib/sass/script/funcall.rb @@ -1,6 +1,18 @@ +require File.join(File.dirname(__FILE__), 'functions') module Sass module Script class Funcall # :nodoc: + class EvaluationContext # :nodoc: + + include Sass::Script::Functions + + attr_reader :options + + def initialize(options) + @options = options + end + end + attr_reader :name, :args def initialize(name, args) @@ -18,7 +30,7 @@ module Sass return Script::String.new("#{name}(#{args.map {|a| a.perform(environment)}.join(', ')})") end - return Functions.send(name, *args) + return EvaluationContext.new(environment.options).send(name, *args) rescue ArgumentError => e raise e unless e.backtrace.first =~ /:in `(#{name}|perform)'$/ raise Sass::SyntaxError.new("#{e.message} for `#{name}'") diff --git a/lib/sass/script/functions.rb b/lib/sass/script/functions.rb index 4af6fa6c..0928ac00 100644 --- a/lib/sass/script/functions.rb +++ b/lib/sass/script/functions.rb @@ -19,6 +19,9 @@ module Sass::Script # and then left as static CSS files. # Any dynamic CSS should be left in