summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Rakefile4
-rw-r--r--lib/coderay.rb1
-rw-r--r--lib/coderay/for_redcloth.rb54
-rwxr-xr-xtest/functional/basic.rb7
4 files changed, 66 insertions, 0 deletions
diff --git a/Rakefile b/Rakefile
index 5482cd9..8894a7d 100644
--- a/Rakefile
+++ b/Rakefile
@@ -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">&quot;</span><span style="color:#D20">Hello, World!</span><span style="color:#710">&quot;</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
)