lib/rouge/lexers/sass/common.rb in rouge-0.4.0 vs lib/rouge/lexers/sass/common.rb in rouge-0.5.0
- old
+ new
@@ -1,173 +1,181 @@
module Rouge
module Lexers
# shared states with SCSS
# TODO: make this less nasty to do
- SASS_COMMON = proc do
- id = /[\w-]+/
+ module SassCommon
+ include Token::Tokens
- 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
+ def self.included(klass)
+ klass.class_eval(&INCLUDED_PROC)
+ end
- rule /@extend\b/, 'Keyword', :selector
+ INCLUDED_PROC = proc do
+ id = /[\w-]+/
- rule /(@include)(\s+)(#{id})/ do
- group 'Keyword'; group 'Text'; group 'Name.Decorator'
- push :value
- end
+ 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 /@#{id}/, 'Keyword', :selector
+ rule /@extend\b/, Keyword, :selector
- # $variable: assignment
- rule /([$]#{id})([ \t]*)(:)/ do
- group 'Name.Variable'; group 'Text'; group 'Punctuation'
- push :value
+ 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
- end
- state :value do
- mixin :end_section
- rule /[ \t]+/, 'Text'
- rule /[$]#{id}/, 'Name.Variable'
- rule /url[(]/, 'Literal.String.Other', :string_url
- rule /#{id}(?=\s*[(])/, 'Name.Function'
- rule /%#{id}/, 'Name.Decorator'
+ 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.Pseudo'
- rule /(and|or|not)\b/, 'Operator.Word'
+ # 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, 'Literal.Number.Hex'
- rule /-?\d+(%|[a-z]+)?/, 'Literal.Number'
- rule /-?\d*\.\d+(%|[a-z]+)?/, 'Literal.Number.Integer'
+ # 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
+ mixin :has_strings
+ mixin :has_interp
- rule /[~^*!&%<>\|+=@:,.\/?-]+/, 'Operator'
- rule /[\[\]()]+/, 'Punctuation'
- rule %r(/[*]), 'Comment.Multiline', :inline_comment
- rule %r(//[^\n]*), 'Comment.Single'
+ 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'
+ # 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
- end
- state :has_interp do
- rule /[#][{]/, 'Literal.String.Interpol', :interpolation
- end
+ state :has_interp do
+ rule /[#][{]/, Str::Interpol, :interpolation
+ end
- state :has_strings do
- rule /"/, 'Literal.String.Double', :dq
- rule /'/, 'Literal.String.Single', :sq
- end
+ state :has_strings do
+ rule /"/, Str::Double, :dq
+ rule /'/, Str::Single, :sq
+ end
- state :interpolation do
- rule /}/, 'Literal.String.Interpol', :pop!
- mixin :value
- end
+ state :interpolation do
+ rule /}/, Str::Interpol, :pop!
+ mixin :value
+ end
- state :selector do
- mixin :end_section
+ 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
+ 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 /"/, 'Literal.String.Double', :pop!
- mixin :has_interp
- rule /(\\.|#(?![{])|[^\n"#])+/, 'Literal.String.Double'
- end
+ state :dq do
+ rule /"/, Str::Double, :pop!
+ mixin :has_interp
+ rule /(\\.|#(?![{])|[^\n"#])+/, Str::Double
+ end
- state :sq do
- rule /'/, 'Literal.String.Single', :pop!
- mixin :has_interp
- rule /(\\.|#(?![{])|[^\n'#])+/, 'Literal.String.Single'
- end
+ state :sq do
+ rule /'/, Str::Single, :pop!
+ mixin :has_interp
+ rule /(\\.|#(?![{])|[^\n'#])+/, Str::Single
+ end
- state :string_url do
- rule /[)]/, 'Literal.String.Other', :pop!
- rule /(\\.|#(?![{])|[^\n)#])+/, 'Literal.String.Other'
- mixin :has_interp
- 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 :selector_piece do
+ mixin :has_interp
+ rule(//) { pop! }
+ end
- state :pseudo_class do
- rule id, 'Name.Decorator'
- mixin :selector_piece
- 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 :class do
+ rule id, Name::Class
+ mixin :selector_piece
+ end
- state :id do
- rule id, 'Name.Namespace'
- 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 :placeholder do
+ rule id, Name::Variable
+ mixin :selector_piece
+ end
- state :for do
- rule /(from|to|through)/, 'Operator.Word'
- mixin :value
- 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'
+ 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
- end
- state :attribute do
- mixin :attr_common
+ state :attribute do
+ mixin :attr_common
- rule /([ \t]*)(:)/ do
- group 'Text'; group 'Punctuation'
- push :value
+ rule /([ \t]*)(:)/ do
+ group Text; group Punctuation
+ push :value
+ end
end
- end
- state :inline_comment do
- rule /(\\#|#(?=[^\n{])|\*(?=[^\n\/])|[^\n#*])+/, 'Comment.Multiline'
- mixin :has_interp
- rule %r([*]/), 'Comment.Multiline', :pop!
+ state :inline_comment do
+ rule /(\\#|#(?=[^\n{])|\*(?=[^\n\/])|[^\n#*])+/, Comment::Multiline
+ mixin :has_interp
+ rule %r([*]/), Comment::Multiline, :pop!
+ end
end
end
end
end