From 59532a9fd20fa906367310932cf87680cc9ecbea Mon Sep 17 00:00:00 2001 From: murphy Date: Thu, 28 Aug 2008 04:55:59 +0000 Subject: Added CodeRay.for_redcloth with test and documentation. * Tested with RedCloth 4.0.3. * Also added :ee task for the Ruby Enterprise Edition (rubyee). --- lib/coderay/for_redcloth.rb | 54 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 lib/coderay/for_redcloth.rb (limited to 'lib/coderay') 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 + "#{opts[:text]}" + end + end + def bc_open(opts) + opts[:block] = true + @in_bc = opts + opts[:lang] ? '' : "" + end + def bc_close(opts) + @in_bc = nil + opts[:lang] ? '' : "\n" + end + end + end + + module ForRedCloth # :nodoc: + + module TextileDoc # :nodoc: + attr_accessor :filter_coderay + end + + end + +end -- cgit v1.2.1