lib/rouge/plugins/redcarpet.rb in rouge-0.0.9 vs lib/rouge/plugins/redcarpet.rb in rouge-0.0.10

- old
+ new

@@ -3,15 +3,34 @@ # require 'rouge/plugins/redcarpet' # this plugin depends on redcarpet require 'redcarpet' +# stdlib +require 'cgi' + module Rouge module Plugins module Redcarpet def block_code(code, language) - lexer = Lexer.find(language) || Lexers::Text - formatter = Formatters::HTML.new(:css_class => "highlight #{lexer.tag}") + name, opts = language.split('?') + + # parse the options hash from a cgi-style string + opts = CGI.parse(opts || '').map do |k, vals| + [ k.to_sym, vals.empty? ? true : vals[0] ] + end + + opts = Hash[opts] + + lexer_class = case name + when 'guess', nil + lexer = Lexer.guess(:source => code, :mimetype => opts[:mimetype]) + when String + Lexer.find(name) + end || Lexers::Text + + lexer = lexer_class.new(opts) + formatter = Formatters::HTML.new(:css_class => "highlight #{lexer_class.tag}") Rouge.highlight(code, lexer, formatter) end end end