Module: Sass::SCSS::RX
- Included in:
- Parser, Sass::Script::Lexer
- Defined in:
- .ruby-sass/lib/sass/scss/rx.rb
Overview
A module containing regular expressions used for lexing tokens in an SCSS document. Most of these are taken from [the CSS3 spec](www.w3.org/TR/css3-syntax/#lexical), although some have been modified for various reasons.
Constant Summary
- H =
/[0-9a-fA-F]/
- NL =
/\n|\r\n|\r|\f/
- UNICODE =
/\\#{H}{1,6}[ \t\r\n\f]?/
- NONASCII =
/[#{s}]/
- ESCAPE =
/#{UNICODE}|\\[ -~#{s}]/
- NMSTART =
/[_a-zA-Z]|#{NONASCII}|#{ESCAPE}/
- NMCHAR =
/[a-zA-Z0-9_-]|#{NONASCII}|#{ESCAPE}/
- STRING1 =
/\"((?:[^\n\r\f\\"]|\\#{NL}|#{ESCAPE})*)\"/
- STRING2 =
/\'((?:[^\n\r\f\\']|\\#{NL}|#{ESCAPE})*)\'/
- IDENT =
/-*#{NMSTART}#{NMCHAR}*/
- NAME =
/#{NMCHAR}+/
- STRING =
/#{STRING1}|#{STRING2}/
- URLCHAR =
/[#%&*-~]|#{NONASCII}|#{ESCAPE}/
- URL =
/(#{URLCHAR}*)/
- W =
/[ \t\r\n\f]*/
- VARIABLE =
/(\$)(#{Sass::SCSS::RX::IDENT})/
- RANGE =
This is more liberal than the spec's definition, but that definition didn't work well with the greediness rules
/(?:#{H}|\?){1,6}/
- S =
/[ \t\r\n\f]+/
- COMMENT =
%r{/\*([^*]|\*+[^/*])*\**\*/}
- SINGLE_LINE_COMMENT =
%r{//.*(\n[ \t]*//.*)*}
- CDO =
quote("<!--")
- CDC =
quote("-->")
- INCLUDES =
quote("~=")
- DASHMATCH =
quote("|=")
- PREFIXMATCH =
quote("^=")
- SUFFIXMATCH =
quote("$=")
- SUBSTRINGMATCH =
quote("*=")
- HASH =
/##{NAME}/
- IMPORTANT =
/!#{W}important/i
- UNIT =
A unit is like an IDENT, but disallows a hyphen followed by a digit. This allows “1px-2px” to be interpreted as subtraction rather than “1” with the unit “px-2px”. It also allows “%”.
/-?#{NMSTART}(?:[a-zA-Z0-9_]|#{NONASCII}|#{ESCAPE}|-(?!\.?\d))*|%/
- UNITLESS_NUMBER =
/(?:[0-9]+|[0-9]*\.[0-9]+)(?:[eE][+-]?\d+)?/
- NUMBER =
/#{UNITLESS_NUMBER}(?:#{UNIT})?/
- PERCENTAGE =
/#{UNITLESS_NUMBER}%/
- URI =
/url\(#{W}(?:#{STRING}|#{URL})#{W}\)/i
- FUNCTION =
/#{IDENT}\(/
- UNICODERANGE =
/u\+(?:#{H}{1,6}-#{H}{1,6}|#{RANGE})/i
- PLUS =
Defined in www.w3.org/TR/css3-selectors/#lex
/#{W}\+/
- GREATER =
/#{W}>/
- TILDE =
/#{W}~/
- NOT =
quote(":not(", Regexp::IGNORECASE)
- URL_PREFIX =
Defined in developer.mozilla.org/en/CSS/@-moz-document as a non-standard version of www.w3.org/TR/css3-conditional/
/url-prefix\(#{W}(?:#{STRING}|#{URL})#{W}\)/i
- DOMAIN =
/domain\(#{W}(?:#{STRING}|#{URL})#{W}\)/i
- HEXCOLOR =
Custom
/\#[0-9a-fA-F]+/
- INTERP_START =
/#\{/
- ANY =
/:(-[-\w]+-)?any\(/i
- OPTIONAL =
/!#{W}optional/i
- IDENT_START =
/-|#{NMSTART}/
- IDENT_HYPHEN_INTERP =
/-+(?=#\{)/
- STRING1_NOINTERP =
/\"((?:[^\n\r\f\\"#]|#(?!\{)|#{ESCAPE})*)\"/
- STRING2_NOINTERP =
/\'((?:[^\n\r\f\\'#]|#(?!\{)|#{ESCAPE})*)\'/
- STRING_NOINTERP =
/#{STRING1_NOINTERP}|#{STRING2_NOINTERP}/
- STATIC_COMPONENT =
/#{IDENT}|#{STRING_NOINTERP}|#{HEXCOLOR}|[+-]?#{NUMBER}|\!important/i
- STATIC_VALUE =
%r(#{STATIC_COMPONENT}(\s*[\s,\/]\s*#{STATIC_COMPONENT})*(?=[;}]))i
- STATIC_SELECTOR =
/(#{NMCHAR}|[ \t]|[,>+*]|[:#.]#{NMSTART}){1,50}([{])/i
Class Method Summary (collapse)
-
.escape_char(c) ⇒ String
Escapes a single character for a CSS identifier.
-
.escape_ident(str) ⇒ String
Takes a string and returns a CSS identifier that will have the value of the given string.
-
.quote(str, flags = 0) ⇒ Regexp
Creates a Regexp from a plain text string, escaping all significant characters.
Class Method Details
.escape_char(c) ⇒ String
Escapes a single character for a CSS identifier.
34 35 36 37 |
# File '.ruby-sass/lib/sass/scss/rx.rb', line 34 def self.escape_char(c) return "\\%06x" % c.ord unless c =~ %r{[ -/:-~]} "\\#{c}" end |
.escape_ident(str) ⇒ String
Takes a string and returns a CSS identifier that will have the value of the given string.
14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File '.ruby-sass/lib/sass/scss/rx.rb', line 14 def self.escape_ident(str) return "" if str.empty? return "\\#{str}" if str == '-' || str == '_' out = "" value = str.dup out << value.slice!(0...1) if value =~ /^[-_]/ if value[0...1] =~ NMSTART out << value.slice!(0...1) else out << escape_char(value.slice!(0...1)) end out << value.gsub(/[^a-zA-Z0-9_-]/) {|c| escape_char c} out end |
.quote(str, flags = 0) ⇒ Regexp
Creates a Regexp from a plain text string, escaping all significant characters.
46 47 48 |
# File '.ruby-sass/lib/sass/scss/rx.rb', line 46 def self.quote(str, flags = 0) Regexp.new(Regexp.quote(str), flags) end |