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