Module CodeRay::ForRedCloth
In: lib/coderay/for_redcloth.rb

A little hack to enable CodeRay highlighting in RedCloth.

Usage:

 require 'coderay'
 require '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.

Methods

Public Class methods

[Source]

    # File lib/coderay/for_redcloth.rb, line 15
15:     def self.install
16:       gem 'RedCloth', '>= 4.0.3' rescue nil
17:       require 'redcloth'
18:       raise 'CodeRay.for_redcloth needs RedCloth 4.0.3 or later.' unless RedCloth::VERSION.to_s >= '4.0.3'
19:       RedCloth::TextileDoc.send :include, ForRedCloth::TextileDoc
20:       RedCloth::Formatters::HTML.module_eval do
21:         def unescape(html)
22:           replacements = {
23:             '&' => '&',
24:             '"' => '"',
25:             '>' => '>',
26:             '&lt;' => '<',
27:           }
28:           html.gsub(/&(?:amp|quot|[gl]t);/) { |entity| replacements[entity] }
29:         end
30:         undef_method :code, :bc_open, :bc_close, :escape_pre
31:         def code(opts)  # :nodoc:
32:           opts[:block] = true
33:           if opts[:lang] && !filter_coderay
34:             require 'coderay'
35:             @in_bc ||= nil
36:             format = @in_bc ? :div : :span
37:             highlighted_code = CodeRay.encode opts[:text], opts[:lang], format, :stream => true
38:             highlighted_code.sub!(/\A<(span|div)/) { |m| m + pba(@in_bc || opts) }
39:             highlighted_code = unescape(highlighted_code) unless @in_bc
40:             highlighted_code
41:           else
42:             "<code#{pba(opts)}>#{opts[:text]}</code>"
43:           end
44:         end
45:         def bc_open(opts)  # :nodoc:
46:           opts[:block] = true
47:           @in_bc = opts
48:           opts[:lang] ? '' : "<pre#{pba(opts)}>"
49:         end
50:         def bc_close(opts)  # :nodoc:
51:           opts = @in_bc
52:           @in_bc = nil
53:           opts[:lang] ? '' : "</pre>\n"
54:         end
55:         def escape_pre(text)
56:           if @in_bc ||= nil
57:             text
58:           else
59:             html_esc(text, :html_escape_preformatted)
60:           end
61:         end
62:       end
63:     end

Public Instance methods

[Source]

    # File lib/coderay/for_redcloth.rb, line 55
55:         def escape_pre(text)
56:           if @in_bc ||= nil
57:             text
58:           else
59:             html_esc(text, :html_escape_preformatted)
60:           end
61:         end

[Source]

    # File lib/coderay/for_redcloth.rb, line 21
21:         def unescape(html)
22:           replacements = {
23:             '&amp;' => '&',
24:             '&quot;' => '"',
25:             '&gt;' => '>',
26:             '&lt;' => '<',
27:           }
28:           html.gsub(/&(?:amp|quot|[gl]t);/) { |entity| replacements[entity] }
29:         end

[Validate]