blob: ea765fcc16a82302a330dd3c927d23b4158c1ee7 [file] [log] [blame]
# -*- coding: utf-8 -*- #
module Rouge
module Lexers
load_lexer 'sass/common.rb'
class Sass < SassCommon
include Indentation
title "Sass"
desc 'The Sass stylesheet language language (sass-lang.com)'
tag 'sass'
filenames '*.sass'
mimetypes 'text/x-sass'
id = /[\w-]+/
state :root do
rule /[ \t]*\n/, Text
rule(/[ \t]*/) { |m| token Text; indentation(m[0]) }
end
state :content do
# block comments
rule %r(//.*?\n) do
token Comment::Single
pop!; starts_block :single_comment
end
rule %r(/[*].*?\n) do
token Comment::Multiline
pop!; starts_block :multi_comment
end
rule /@import\b/, Keyword, :import
mixin :content_common
rule %r(=#{id}), Name::Function, :value
rule %r([+]#{id}), Name::Decorator, :value
rule /:/, Name::Attribute, :old_style_attr
rule(/(?=.+?:([^a-z]|$))/) { push :attribute }
rule(//) { push :selector }
end
state :single_comment do
rule /.*?\n/, Comment::Single, :pop!
end
state :multi_comment do
rule /.*?\n/, Comment::Multiline, :pop!
end
state :import do
rule /[ \t]+/, Text
rule /\S+/, Str
rule /\n/, Text, :pop!
end
state :old_style_attr do
mixin :attr_common
rule(//) { pop!; push :value }
end
state :end_section do
rule(/\n/) { token Text; reset_stack }
end
end
end
end