Module: Rouge::Lexers::SassCommon
Overview
shared states with SCSS TODO: make this less nasty to do
Constant Summary collapse
- INCLUDED_PROC =
proc do id = /[\w-]+/ state :content_common do rule /@for\b/, Keyword, :for rule /@(debug|warn|if|while)/, Keyword, :value rule /(@mixin)(\s+)(#{id})/ do group Keyword; group Text; group Name::Function push :value end rule /@extend\b/, Keyword, :selector rule /(@include)(\s+)(#{id})/ do group Keyword; group Text; group Name::Decorator push :value end rule /@#{id}/, Keyword, :selector # $variable: assignment rule /([$]#{id})([ \t]*)(:)/ do group Name::Variable; group Text; group Punctuation push :value end end state :value do mixin :end_section rule /[ \t]+/, Text rule /[$]#{id}/, Name::Variable rule /url[(]/, Str::Other, :string_url rule /#{id}(?=\s*[(])/, Name::Function rule /%#{id}/, Name::Decorator # named literals rule /(true|false)\b/, Name::Builtin::Pseudo rule /(and|or|not)\b/, Operator::Word # colors and numbers rule /#[a-z0-9]{1,6}/i, Num::Hex rule /-?\d+(%|[a-z]+)?/, Num rule /-?\d*\.\d+(%|[a-z]+)?/, Num::Integer mixin :has_strings mixin :has_interp rule /[~^*!&%<>\|+=@:,.\/?-]+/, Operator rule /[\[\]()]+/, Punctuation rule %r(/[*]), Comment::Multiline, :inline_comment rule %r(//[^\n]*), Comment::Single # identifiers rule(id) do |m| if CSS.builtins.include? m[0] token Name::Builtin elsif CSS.constants.include? m[0] token Name::Constant else token Name end end end state :has_interp do rule /[#][{]/, Str::Interpol, :interpolation end state :has_strings do rule /"/, Str::Double, :dq rule /'/, Str::Single, :sq end state :interpolation do rule /}/, Str::Interpol, :pop! mixin :value end state :selector do mixin :end_section mixin :has_strings mixin :has_interp rule /[ \t]+/, Text rule /:/, Name::Decorator, :pseudo_class rule /[.]/, Name::Class, :class rule /#/, Name::Namespace, :id rule /%/, Name::Variable, :placeholder rule id, Name::Tag rule /&/, Keyword rule /[~^*!&\[\]()<>\|+=@:;,.\/?-]/, Operator end state :dq do rule /"/, Str::Double, :pop! mixin :has_interp rule /(\\.|#(?![{])|[^\n"#])+/, Str::Double end state :sq do rule /'/, Str::Single, :pop! mixin :has_interp rule /(\\.|#(?![{])|[^\n'#])+/, Str::Single end state :string_url do rule /[)]/, Str::Other, :pop! rule /(\\.|#(?![{])|[^\n)#])+/, Str::Other mixin :has_interp end state :selector_piece do mixin :has_interp rule(//) { pop! } end state :pseudo_class do rule id, Name::Decorator mixin :selector_piece end state :class do rule id, Name::Class mixin :selector_piece end state :id do rule id, Name::Namespace mixin :selector_piece end state :placeholder do rule id, Name::Variable mixin :selector_piece end state :for do rule /(from|to|through)/, Operator::Word mixin :value end state :attr_common do mixin :has_interp rule id do |m| if CSS.attributes.include? m[0] token Name::Label else token Name::Attribute end end end state :attribute do mixin :attr_common rule /([ \t]*)(:)/ do group Text; group Punctuation push :value end end state :inline_comment do rule /(\\#|#(?=[^\n{])|\*(?=[^\n\/])|[^\n#*])+/, Comment::Multiline mixin :has_interp rule %r([*]/), Comment::Multiline, :pop! end end
Constants included from Token::Tokens
Token::Tokens::Num, Token::Tokens::Str
Class Method Summary collapse
Methods included from Token::Tokens
Class Method Details
.included(klass) ⇒ Object
8 9 10 |
# File 'lib/rouge/lexers/sass/common.rb', line 8 def self.included(klass) klass.class_eval(&INCLUDED_PROC) end |