premailer / css_parser

Ruby CSS Parser
Other
279 stars 110 forks source link

keyframes parsing as empty declarations #67

Open rockrep opened 8 years ago

rockrep commented 8 years ago

css with @keyframes rules parse as empty rule sets

css_parser (1.4.1)

css = "@keyframes shimmer {\n  0% {\n    background-position: top left;\n  }\n  100% {\n    background-position: top right;\n  }\n}"
parser = CssParser::Parser.new
parser.add_block!(css)
parser.each_rule_set do |rule_set, media_types|
  p rule_set
end

#<CssParser::RuleSet:0x007fca9ce49030 @selectors=["@keyframes shimmer"], @specificity=nil, @declarations={}, @order=0>
=> [{:media_types=>[:all], :rules=>#<CssParser::RuleSet:0x007fca9ce49030 @declarations={}, @order=0, @selectors=["@keyframes shimmer"], @specificity=nil>}]
grosser commented 8 years ago

Please open a PR :)

rockrep commented 8 years ago

Would be happy to. But I could use a clue as to where the fix should go

grosser commented 8 years ago

sry, no idea, I'm not really an expert on the internals ... maybe check a few recent PRs ... chances are it's a similar area ...

rockrep commented 8 years ago

@keyframes uses nested braces of declarations, and the rest of the parser code in https://github.com/premailer/css_parser/blob/master/lib/css_parser/parser.rb#L248 isn't really setup to handle that. A fix has eluded me so far.