diff options
-rw-r--r-- | Rakefile | 4 | ||||
-rw-r--r-- | lib/coderay.rb | 1 | ||||
-rw-r--r-- | lib/coderay/for_redcloth.rb | 54 | ||||
-rwxr-xr-x | test/functional/basic.rb | 7 |
4 files changed, 66 insertions, 0 deletions
@@ -51,6 +51,10 @@ task 'rubinius' do RUBY.replace 'rbx' end +task 'ee' do + RUBY.replace 'rubyee' +end + for task_file in Dir['rake_tasks/*.rake'] load task_file end diff --git a/lib/coderay.rb b/lib/coderay.rb index 1f067db..c1025c7 100644 --- a/lib/coderay.rb +++ b/lib/coderay.rb @@ -141,6 +141,7 @@ module CodeRay require 'coderay/encoder' require 'coderay/duo' require 'coderay/style' + require 'coderay/for_redcloth' class << self diff --git a/lib/coderay/for_redcloth.rb b/lib/coderay/for_redcloth.rb new file mode 100644 index 0000000..4de597e --- /dev/null +++ b/lib/coderay/for_redcloth.rb @@ -0,0 +1,54 @@ +# A little hack to enable CodeRay highlighting in RedCloth. + +module CodeRay + + # A little hack to enable CodeRay highlighting in RedCloth. + # + # Usage: + # require 'coderay' + # CodeRay.for_redcloth + # RedCloth.new('@[ruby]puts "Hello, World!"@').to_html + # + # Make sure you have RedCloth 4.0.3 activated, for example by calling + # require 'rubygems' + # before RedCloth is loaded and before calling CodeRay.for_redcloth. + def self.for_redcloth + gem 'RedCloth', '>= 4.0.3' rescue nil + require 'redcloth' + raise 'CodeRay.for_redcloth needs RedCloth 4.0.3 or later.' unless RedCloth::VERSION.to_s >= '4.0.3' + RedCloth::TextileDoc.send :include, ForRedCloth::TextileDoc + RedCloth::Formatters::HTML.module_eval do + undef_method :code, :bc_open, :bc_close + def code(opts) + opts[:block] = true + if opts[:lang] && !filter_coderay + require 'coderay' + @in_bc ||= nil + format = @in_bc ? :div : :span + highlighted_code = CodeRay.encode opts[:text], opts[:lang], format, :stream => true + highlighted_code.sub(/\A<(span|div)/) { |m| m + pba(@in_bc || opts) } + else + "<code#{pba(opts)}>#{opts[:text]}</code>" + end + end + def bc_open(opts) + opts[:block] = true + @in_bc = opts + opts[:lang] ? '' : "<pre#{pba(opts)}>" + end + def bc_close(opts) + @in_bc = nil + opts[:lang] ? '' : "</pre>\n" + end + end + end + + module ForRedCloth # :nodoc: + + module TextileDoc # :nodoc: + attr_accessor :filter_coderay + end + + end + +end diff --git a/test/functional/basic.rb b/test/functional/basic.rb index 5e0e759..07818ea 100755 --- a/test/functional/basic.rb +++ b/test/functional/basic.rb @@ -34,6 +34,13 @@ class BasicTest < Test::Unit::TestCase CodeRay::Duo[:plain, :plain].highlight(RUBY_TEST_CODE, :stream => true)) end + def test_for_redcloth + require 'rubygems' + CodeRay.for_redcloth + assert_equal '<p><span lang="ruby" class="CodeRay">puts <span style="background-color:#fff0f0"><span style="color:#710">"</span><span style="color:#D20">Hello, World!</span><span style="color:#710">"</span></span></span></p>', + RedCloth.new('@[ruby]puts "Hello, World!"@').to_html + end + ENCODERS_LIST = %w( count debug div html null page span statistic text tokens xml yaml ) |