Pass line number and character offset from the Engine to the Lexer.
This commit is contained in:
parent
c5334c3f79
commit
0d6d7e1c0a
|
@ -413,9 +413,9 @@ END
|
|||
Tree::MixinNode.new(name, args.map {|s| parse_script(s)}, @options)
|
||||
end
|
||||
|
||||
def parse_script(script, line = nil)
|
||||
def parse_script(script, line = nil, offset = 0)
|
||||
line ||= @line
|
||||
Script.parse(script, line)
|
||||
Script.parse(script, line, offset)
|
||||
end
|
||||
def import_paths
|
||||
paths = @options[:load_paths] || []
|
||||
|
|
|
@ -18,12 +18,12 @@ module Sass
|
|||
# The regular expression used to validate variables without matching
|
||||
VALIDATE = /^!\w+$/
|
||||
|
||||
def self.resolve(value, line, environment)
|
||||
parse(value, line).perform(environment).to_s
|
||||
def self.resolve(value, line, offset, environment)
|
||||
parse(value, line, offset).perform(environment).to_s
|
||||
end
|
||||
|
||||
def self.parse(value, line)
|
||||
Parser.parse(value)
|
||||
def self.parse(value, line, offset)
|
||||
Parser.parse(value, line, offset)
|
||||
rescue Sass::SyntaxError => e
|
||||
if e.message == "SassScript error"
|
||||
e.instance_eval do
|
||||
|
|
|
@ -38,8 +38,10 @@ module Sass
|
|||
:op => %r{(#{Regexp.union(*OP_NAMES.map{|s| Regexp.new(Regexp.escape(s) + (s =~ /\w$/ ? '(?:\b|$)' : ''))})})}
|
||||
}
|
||||
|
||||
def initialize(str)
|
||||
def initialize(str, line, offset)
|
||||
@scanner = StringScanner.new(str)
|
||||
@line = line
|
||||
@offset = offset
|
||||
end
|
||||
|
||||
def token
|
||||
|
|
|
@ -3,8 +3,8 @@ require 'sass/script/lexer'
|
|||
module Sass
|
||||
module Script
|
||||
class Parser
|
||||
def initialize(str)
|
||||
@lexer = Lexer.new(str)
|
||||
def initialize(str, line, offset)
|
||||
@lexer = Lexer.new(str, line, offset)
|
||||
end
|
||||
|
||||
def parse
|
||||
|
|
|
@ -68,7 +68,7 @@ module Sass
|
|||
if escapes % 2 == 1
|
||||
str << '#{'
|
||||
else
|
||||
str << Sass::Script.resolve(balance(scan, ?{, ?}, 1)[0][0...-1], line, environment)
|
||||
str << Sass::Script.resolve(balance(scan, ?{, ?}, 1)[0][0...-1], line, scan.pos - scan.matchedsize, environment)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -78,11 +78,12 @@ class SassFunctionTest < Test::Unit::TestCase
|
|||
private
|
||||
|
||||
def assert_rgb_hsl(rgb, hsl)
|
||||
assert_equal(rgb, Sass::Script::Functions.hsl(*hsl.map(&Sass::Script::Parser.method(:parse))).value)
|
||||
hsl = hsl.map {|v| Sass::Script::Parser.parse v, 0, 0 }
|
||||
assert_equal(rgb, Sass::Script::Functions.hsl(*hsl).value)
|
||||
end
|
||||
|
||||
def evaluate(value)
|
||||
Sass::Script::Parser.parse(value).perform({}).to_s
|
||||
Sass::Script::Parser.parse(value, 0, 0).perform({}).to_s
|
||||
end
|
||||
|
||||
def assert_error_message(message, value)
|
||||
|
|
|
@ -6,7 +6,7 @@ class SassScriptTest < Test::Unit::TestCase
|
|||
include Sass::Script
|
||||
|
||||
def eval(str, environment = {})
|
||||
Sass::Script.resolve(str, 0, environment)
|
||||
Sass::Script.resolve(str, 0, 0, environment)
|
||||
end
|
||||
|
||||
def test_color_checks_input
|
||||
|
|
Loading…
Reference in New Issue