blob: f4592ea7416e37f1c74730e712e5c2f54bbc78a6 [file] [log] [blame]
require 'sass/script/css_parser'
module Sass
module SCSS
# This is a subclass of {Parser} which only parses plain CSS.
# It doesn't support any Sass extensions, such as interpolation,
# parent references, nested selectors, and so forth.
# It does support all the same CSS hacks as the SCSS parser, though.
class CssParser < StaticParser
private
def placeholder_selector; nil; end
def parent_selector; nil; end
def interpolation(warn_for_color = false); nil; end
def use_css_import?; true; end
def block_contents(node, context)
if node.is_a?(Sass::Tree::DirectiveNode) && node.normalized_name == '@keyframes'
context = :keyframes
end
super(node, context)
end
def block_child(context)
case context
when :ruleset
declaration
when :stylesheet
directive || ruleset
when :directive
directive || declaration_or_ruleset
when :keyframes
keyframes_ruleset
end
end
def nested_properties!(node)
expected('expression (e.g. 1px, bold)')
end
def ruleset
start_pos = source_position
return unless (selector = selector_comma_sequence)
block(node(Sass::Tree::RuleNode.new(selector, range(start_pos)), start_pos), :ruleset)
end
def keyframes_ruleset
start_pos = source_position
return unless (selector = keyframes_selector)
block(node(Sass::Tree::KeyframeRuleNode.new(selector.strip), start_pos), :ruleset)
end
@sass_script_parser = Sass::Script::CssParser
end
end
end