Class: Sass::Script::Lexer
Overview
The lexical analyzer for SassScript. It takes a raw string and converts it to individual tokens that are easier to parse.
Defined Under Namespace
Classes: Token
Constant Summary collapse
- STRING_REGULAR_EXPRESSIONS =
A hash of regular expressions that are used for tokenizing strings.
The key is a [Symbol, Boolean] pair. The symbol represents which style of quotation to use, while the boolean represents whether or not the string is following an interpolated segment.
{ [:double, false] => string_re('"', '"'), [:single, false] => string_re("'", "'"), [:double, true] => string_re('', '"'), [:single, true] => string_re('', "'"), }
Instance Method Summary collapse
-
#done? ⇒ Boolean
Whether or not there's more source text to lex.
-
#initialize(str, line, offset, options) ⇒ Lexer
constructor
A new instance of Lexer.
-
#next ⇒ Token
Moves the lexer forward one token.
-
#peek ⇒ Token
Returns the next token without moving the lexer forward.
Constructor Details
#initialize(str, line, offset, options) ⇒ Lexer
Returns a new instance of Lexer.
93 94 95 96 97 98 99 100 |
# File 'lib/sass/script/lexer.rb', line 93
def initialize(str, line, offset, options)
@scanner = str.is_a?(StringScanner) ? str : StringScanner.new(str)
@line = line
@offset = offset
@options = options
@interpolation_stack = []
@prev = nil
end
|
Instance Method Details
#done? ⇒ Boolean
Returns Whether or not there's more source text to lex.
120 121 122 123 |
# File 'lib/sass/script/lexer.rb', line 120
def done?
whitespace unless after_interpolation?
@scanner.eos? && @tok.nil?
end
|
#next ⇒ Token
Moves the lexer forward one token.
105 106 107 108 109 110 |
# File 'lib/sass/script/lexer.rb', line 105
def next
@tok ||= read_token
@tok, tok = nil, @tok
@prev = tok
return tok
end
|
#peek ⇒ Token
Returns the next token without moving the lexer forward.
115 116 117 |
# File 'lib/sass/script/lexer.rb', line 115
def peek
@tok ||= read_token
end
|