Class: Sass::SCSS::Parser

Inherits:
Object
  • Object
show all
Includes:
RX
Defined in:
.ruby-sass/lib/sass/scss/parser.rb

Overview

The parser for SCSS. It parses a string of code into a tree of Tree::Nodes.

Direct Known Subclasses

StaticParser

Direct Known Subclasses

StaticParser

Constant Summary

Constant Summary

Constants included from RX

RX::ANY, RX::CDC, RX::CDO, RX::COMMENT, RX::DASHMATCH, RX::DOMAIN, RX::ESCAPE, RX::FUNCTION, RX::GREATER, RX::H, RX::HASH, RX::HEXCOLOR, RX::IDENT, RX::IDENT_HYPHEN_INTERP, RX::IDENT_START, RX::IMPORTANT, RX::INCLUDES, RX::INTERP_START, RX::NAME, RX::NL, RX::NMCHAR, RX::NMSTART, RX::NONASCII, RX::NOT, RX::NUMBER, RX::OPTIONAL, RX::PERCENTAGE, RX::PLUS, RX::PREFIXMATCH, RX::RANGE, RX::S, RX::SINGLE_LINE_COMMENT, RX::STATIC_COMPONENT, RX::STATIC_SELECTOR, RX::STATIC_VALUE, RX::STRING, RX::STRING1, RX::STRING1_NOINTERP, RX::STRING2, RX::STRING2_NOINTERP, RX::STRING_NOINTERP, RX::SUBSTRINGMATCH, RX::SUFFIXMATCH, RX::TILDE, RX::UNICODE, RX::UNICODERANGE, RX::UNIT, RX::UNITLESS_NUMBER, RX::URI, RX::URL, RX::URLCHAR, RX::URL_PREFIX, RX::VARIABLE, RX::W

Class Attribute Summary (collapse)

Instance Attribute Summary (collapse)

Instance Method Summary (collapse)

Methods included from RX

escape_char, escape_ident, quote

Constructor Details

#initialize(str, filename, importer, line = 1, offset = 1) ⇒ Parser

Returns a new instance of Parser

Parameters:

  • str (String, StringScanner)

    The source document to parse. Note that `Parser` *won't* raise a nice error message if this isn't properly parsed; for that, you should use the higher-level Engine or CSS.

  • filename (String)

    The name of the file being parsed. Used for warnings and source maps.

  • importer (Sass::Importers::Base)

    The importer used to import the file being parsed. Used for source maps.

  • line (Integer) (defaults to: 1)

    The 1-based line on which the source string appeared, if it's part of another document.

  • offset (Integer) (defaults to: 1)

    The 1-based character (not byte) offset in the line on which the source string starts. Used for error reporting and sourcemap building.



24
25
26
27
28
29
30
31
32
33
# File '.ruby-sass/lib/sass/scss/parser.rb', line 24

def initialize(str, filename, importer, line = 1, offset = 1)
  @template = str
  @filename = filename
  @importer = importer
  @line = line
  @offset = offset
  @strs = []
  @expected = nil
  @throw_error = false
end

Constructor Details

#initialize(str, filename, importer, line = 1, offset = 1) ⇒ Parser

Returns a new instance of Parser

Parameters:

  • str (String, StringScanner)

    The source document to parse. Note that `Parser` *won't* raise a nice error message if this isn't properly parsed; for that, you should use the higher-level Engine or CSS.

  • filename (String)

    The name of the file being parsed. Used for warnings and source maps.

  • importer (Sass::Importers::Base)

    The importer used to import the file being parsed. Used for source maps.

  • line (Integer) (defaults to: 1)

    The 1-based line on which the source string appeared, if it's part of another document.

  • offset (Integer) (defaults to: 1)

    The 1-based character (not byte) offset in the line on which the source string starts. Used for error reporting and sourcemap building.



24
25
26
27
28
29
30
31
32
33
# File '.ruby-sass/lib/sass/scss/parser.rb', line 24

def initialize(str, filename, importer, line = 1, offset = 1)
  @template = str
  @filename = filename
  @importer = importer
  @line = line
  @offset = offset
  @strs = []
  @expected = nil
  @throw_error = false
end

Class Attribute Details

.sass_script_parserObject



1158
1159
1160
# File '.ruby-sass/lib/sass/scss/parser.rb', line 1158

def sass_script_parser
  @sass_script_parser
end

Instance Attribute Details

#offsetObject

Expose for the SASS parser.



10
11
12
# File '.ruby-sass/lib/sass/scss/parser.rb', line 10

def offset
  @offset
end

Instance Method Details

#parseSass::Tree::RootNode

Parses an SCSS document.

Returns:

Raises:



39
40
41
42
43
44
# File '.ruby-sass/lib/sass/scss/parser.rb', line 39

def parse
  init_scanner!
  root = stylesheet
  expected("selector or at-rule") unless root && @scanner.eos?
  root
end

#parse_at_root_queryArray<String, Sass::Script;:Tree::Node>

Parses an at-root query.

Returns:

  • (Array<String, Sass::Script;:Tree::Node>)

    The interpolated query.

Raises:

  • (Sass::SyntaxError)

    if there's a syntax error in the query, or if it doesn't take up the entire input string.



83
84
85
86
87
88
# File '.ruby-sass/lib/sass/scss/parser.rb', line 83

def parse_at_root_query
  init_scanner!
  query = at_root_query
  expected("@at-root query list") unless query && @scanner.eos?
  query
end

#parse_declaration_valueArray<String, Sass::Script;:Tree::Node>

Parses a custom property value.

Returns:

  • (Array<String, Sass::Script;:Tree::Node>)

    The interpolated value.

Raises:

  • (Sass::SyntaxError)

    if there's a syntax error in the value, or if it doesn't take up the entire input string.



107
108
109
110
111
112
# File '.ruby-sass/lib/sass/scss/parser.rb', line 107

def parse_declaration_value
  init_scanner!
  value = declaration_value
  expected('"}"') unless value && @scanner.eos?
  value
end

#parse_interp_identArray<String, Sass::Script::Tree::Node>?

Parses an identifier with interpolation. Note that this won't assert that the identifier takes up the entire input string; it's meant to be used with `StringScanner`s as part of other parsers.

Returns:



52
53
54
55
# File '.ruby-sass/lib/sass/scss/parser.rb', line 52

def parse_interp_ident
  init_scanner!
  interp_ident
end

#parse_media_query_listSass::Media::QueryList

Parses a media query list.

Returns:

Raises:

  • (Sass::SyntaxError)

    if there's a syntax error in the query list, or if it doesn't take up the entire input string.



71
72
73
74
75
76
# File '.ruby-sass/lib/sass/scss/parser.rb', line 71

def parse_media_query_list
  init_scanner!
  ql = media_query_list
  expected("media query list") unless ql && @scanner.eos?
  ql
end

#parse_supports_clauseObject

Parses a supports clause for an @import directive



58
59
60
61
62
63
64
# File '.ruby-sass/lib/sass/scss/parser.rb', line 58

def parse_supports_clause
  init_scanner!
  ss
  clause = supports_clause
  ss
  clause
end

#parse_supports_conditionSass::Supports::Condition

Parses a supports query condition.

Returns:

Raises:

  • (Sass::SyntaxError)

    if there's a syntax error in the condition, or if it doesn't take up the entire input string.



95
96
97
98
99
100
# File '.ruby-sass/lib/sass/scss/parser.rb', line 95

def parse_supports_condition
  init_scanner!
  condition = supports_condition
  expected("supports condition") unless condition && @scanner.eos?
  condition
end