diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2010-03-14 12:57:08 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2010-03-14 12:57:08 +0000 |
commit | c03b4c2e1e88f4fd1257d9519144905f08718dcd (patch) | |
tree | a096876bd8594a11fad1adf06888dd5aaf1b0838 | |
parent | 51d790b2f32c5b02b6f322b2b0b1b7cc7ce9644b (diff) | |
download | redmine-c03b4c2e1e88f4fd1257d9519144905f08718dcd.tar.gz redmine-c03b4c2e1e88f4fd1257d9519144905f08718dcd.zip |
Extract CodeRay calls to Redmine::SyntaxHighlighting (#2985).
git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@3584 e93f8b46-1217-0410-a6f0-8f06a7374b81
-rw-r--r-- | app/helpers/application_helper.rb | 5 | ||||
-rw-r--r-- | lib/redmine/syntax_highlighting.rb | 56 | ||||
-rw-r--r-- | lib/redmine/wiki_formatting/textile/formatter.rb | 3 |
3 files changed, 58 insertions, 6 deletions
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 5663cc6d6..321d19007 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -15,8 +15,6 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -require 'coderay' -require 'coderay/helpers/file_type' require 'forwardable' require 'cgi' @@ -284,8 +282,7 @@ module ApplicationHelper end def syntax_highlight(name, content) - type = CodeRay::FileType[name] - type ? CodeRay.scan(content, type).html : h(content) + Redmine::SyntaxHighlighting.highlight_by_filename(content, name) end def to_path_param(path) diff --git a/lib/redmine/syntax_highlighting.rb b/lib/redmine/syntax_highlighting.rb new file mode 100644 index 000000000..3481f1f31 --- /dev/null +++ b/lib/redmine/syntax_highlighting.rb @@ -0,0 +1,56 @@ +# Redmine - project management software +# Copyright (C) 2006-2010 Jean-Philippe Lang +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + +module Redmine + module SyntaxHighlighting + + class << self + attr_reader :highlighter + delegate :highlight_by_filename, :highlight_by_language, :to => :highlighter + + def highlighter=(name) + if name.is_a?(Module) + @highlighter = name + else + @highlighter = const_get(name) + end + end + end + + module CodeRay + require 'coderay' + require 'coderay/helpers/file_type' + + class << self + # Highlights +text+ as the content of +filename+ + # Should not return line numbers nor outer pre tag + def highlight_by_filename(text, filename) + language = ::CodeRay::FileType[filename] + language ? ::CodeRay.scan(text, language).html : ERB::Util.h(text) + end + + # Highlights +text+ using +language+ syntax + # Should not return outer pre tag + def highlight_by_language(text, language) + ::CodeRay.scan(text, language).html(:line_numbers => :inline) + end + end + end + end + + SyntaxHighlighting.highlighter = 'CodeRay' +end diff --git a/lib/redmine/wiki_formatting/textile/formatter.rb b/lib/redmine/wiki_formatting/textile/formatter.rb index 2010986f5..65c1d01a6 100644 --- a/lib/redmine/wiki_formatting/textile/formatter.rb +++ b/lib/redmine/wiki_formatting/textile/formatter.rb @@ -16,7 +16,6 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. require 'redcloth3' -require 'coderay' module Redmine module WikiFormatting @@ -54,7 +53,7 @@ module Redmine content = @pre_list[$1.to_i] if content.match(/<code\s+class="(\w+)">\s?(.+)/m) content = "<code class=\"#{$1} CodeRay\">" + - CodeRay.scan($2, $1.downcase).html(:line_numbers => :inline) + Redmine::SyntaxHighlighting.highlight_by_language($2, $1) end content end |