lib/rouge/plugins/redcarpet.rb in rouge-0.2.1 vs lib/rouge/plugins/redcarpet.rb in rouge-0.2.2
- old
+ new
@@ -1,45 +1,29 @@
# this file is not require'd from the root. To use this plugin, run:
#
# 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)
- name, opts = language ? language.split('?', 2) : [nil, '']
+ lexer = Lexer.find_fancy(language, code) || Lexers::Text
- # 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
-
# XXX HACK: Redcarpet strips hard tabs out of code blocks,
# so we assume you're not using leading spaces that aren't tabs,
# and just replace them here.
- if lexer_class.tag == 'make'
+ if lexer.tag == 'make'
code.gsub! /^ /, "\t"
end
- lexer = lexer_class.new(opts)
- formatter = Formatters::HTML.new(:css_class => "highlight #{lexer_class.tag}")
+ formatter = Formatters::HTML.new(
+ :css_class => "highlight #{lexer.tag}"
+ )
- Rouge.highlight(code, lexer, formatter)
+ formatter.format(lexer.lex(code))
end
end
end
end