From 42db3cac06ad7f49dc10c7993e2df54b5bb4b2ab Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Thu, 6 Sep 2007 17:06:07 +0000 Subject: [PATCH] Added code highlighting support in wiki, using this syntax:
 <-- cut here

  

    Place you code here.
  
cut here -->
git-svn-id: http://redmine.rubyforge.org/svn/trunk@710 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/views/wiki/edit.rhtml | 4 ++++ app/views/wiki/show.rhtml | 4 ++++ lib/redmine/wiki_formatting.rb | 18 +++++++++++++++++- public/stylesheets/scm.css | 2 +- .../lib/coderay/encoders/html.rb | 8 +++++++- 5 files changed, 33 insertions(+), 3 deletions(-) diff --git a/app/views/wiki/edit.rhtml b/app/views/wiki/edit.rhtml index 56ed5d8d..368ab098 100644 --- a/app/views/wiki/edit.rhtml +++ b/app/views/wiki/edit.rhtml @@ -25,3 +25,7 @@ <% end %>
+ +<% content_for :header_tags do %> + <%= stylesheet_link_tag 'scm' %> +<% end %> diff --git a/app/views/wiki/show.rhtml b/app/views/wiki/show.rhtml index 06eca76e..31c4b60c 100644 --- a/app/views/wiki/show.rhtml +++ b/app/views/wiki/show.rhtml @@ -37,3 +37,7 @@ <%= submit_tag l(:button_add) %> <% end %> <% end %> + +<% content_for :header_tags do %> + <%= stylesheet_link_tag 'scm' %> +<% end %> diff --git a/lib/redmine/wiki_formatting.rb b/lib/redmine/wiki_formatting.rb index b6b2ff80..e9f5eb74 100644 --- a/lib/redmine/wiki_formatting.rb +++ b/lib/redmine/wiki_formatting.rb @@ -1,4 +1,5 @@ require 'redcloth' +require 'coderay' module Redmine module WikiFormatting @@ -24,7 +25,22 @@ module Redmine def hard_break( text ) text.gsub!( /(.)\n(?!\n|\Z| *([#*=]+(\s|$)|[{|]))/, "\\1
" ) if hard_breaks end - + + # Patch to add code highlighting support to RedCloth + def smooth_offtags( text ) + unless @pre_list.empty? + ## replace
 content
+          text.gsub!(//) do
+            content = @pre_list[$1.to_i]
+            if content.match(/\s?(.+)/m)
+              content = "" + 
+                CodeRay.scan($2, $1).html(:escape => false, :line_numbers => :inline)
+            end
+            content
+          end
+        end
+      end
+      
       AUTO_LINK_RE = %r{
                         (                          # leading text
                           <\w+.*?>|                # leading HTML tag, or
diff --git a/public/stylesheets/scm.css b/public/stylesheets/scm.css
index 88d7cec3..338229b0 100644
--- a/public/stylesheets/scm.css
+++ b/public/stylesheets/scm.css
@@ -29,7 +29,7 @@ table.list thead th.list-filename {
 
 /************* Coderay styles *************/
 
-.CodeRay {
+table.CodeRay {
   background-color: #fafafa;
 }
 .CodeRay pre { margin: 0px }
diff --git a/vendor/plugins/coderay-0.7.6.227/lib/coderay/encoders/html.rb b/vendor/plugins/coderay-0.7.6.227/lib/coderay/encoders/html.rb
index 0c66f68c..f0a123ed 100644
--- a/vendor/plugins/coderay-0.7.6.227/lib/coderay/encoders/html.rb
+++ b/vendor/plugins/coderay-0.7.6.227/lib/coderay/encoders/html.rb
@@ -25,6 +25,10 @@ module Encoders
   #
   # == Options
   #
+  # === :escape
+  # Escape html entities
+  # Default: true
+  #
   # === :tab_width
   # Convert \t characters to +n+ spaces (a number.)
   # Default: 8
@@ -70,6 +74,7 @@ module Encoders
     FILE_EXTENSION = 'html'
 
     DEFAULT_OPTIONS = {
+      :escape => true,
       :tab_width => 8,
 
       :level => :xhtml,
@@ -145,6 +150,7 @@ module Encoders
       @HTML_ESCAPE = HTML_ESCAPE.dup
       @HTML_ESCAPE["\t"] = ' ' * options[:tab_width]
 
+      @escape = options[:escape]
       @opened = [nil]
       @css = CSS.new options[:style]
 
@@ -222,7 +228,7 @@ module Encoders
 
     def token text, type
       if text.is_a? ::String
-        if text =~ /#{HTML_ESCAPE_PATTERN}/o
+        if @escape && (text =~ /#{HTML_ESCAPE_PATTERN}/o)
           text = text.gsub(/#{HTML_ESCAPE_PATTERN}/o) { |m| @HTML_ESCAPE[m] }
         end
         @opened[0] = type