blob: c852f06d7f0d7786c97e0fb4fb3f33bc0290adb9 [file] [log] [blame]
require 'sass/scss/rx'
module Sass
# SassScript is code that's embedded in Sass documents
# to allow for property values to be computed from variables.
#
# This module contains code that handles the parsing and evaluation of SassScript.
module Script
# The regular expression used to parse variables.
MATCH = /^\$(#{Sass::SCSS::RX::IDENT})\s*:\s*(.+?)
(!#{Sass::SCSS::RX::IDENT}(?:\s+!#{Sass::SCSS::RX::IDENT})*)?$/x
# The regular expression used to validate variables without matching.
VALIDATE = /^\$#{Sass::SCSS::RX::IDENT}$/
# Parses a string of SassScript
#
# @param value [String] The SassScript
# @param line [Integer] The number of the line on which the SassScript appeared.
# Used for error reporting
# @param offset [Integer] The number of characters in on `line` that the SassScript started.
# Used for error reporting
# @param options [{Symbol => Object}] An options hash;
# see {file:SASS_REFERENCE.md#Options the Sass options documentation}
# @return [Script::Tree::Node] The root node of the parse tree
def self.parse(value, line, offset, options = {})
Parser.parse(value, line, offset, options)
rescue Sass::SyntaxError => e
e.message << ": #{value.inspect}." if e.message == "SassScript error"
e.modify_backtrace(:line => line, :filename => options[:filename])
raise e
end
require 'sass/script/functions'
require 'sass/script/parser'
require 'sass/script/tree'
require 'sass/script/value'
# @private
CONST_RENAMES = {
:Literal => Sass::Script::Value::Base,
:ArgList => Sass::Script::Value::ArgList,
:Bool => Sass::Script::Value::Bool,
:Color => Sass::Script::Value::Color,
:List => Sass::Script::Value::List,
:Null => Sass::Script::Value::Null,
:Number => Sass::Script::Value::Number,
:String => Sass::Script::Value::String,
:Node => Sass::Script::Tree::Node,
:Funcall => Sass::Script::Tree::Funcall,
:Interpolation => Sass::Script::Tree::Interpolation,
:Operation => Sass::Script::Tree::Operation,
:StringInterpolation => Sass::Script::Tree::StringInterpolation,
:UnaryOperation => Sass::Script::Tree::UnaryOperation,
:Variable => Sass::Script::Tree::Variable,
}
# @private
def self.const_missing(name)
klass = CONST_RENAMES[name]
super unless klass
CONST_RENAMES.each {|n, k| const_set(n, k)}
klass
end
end
end