Patch by Go MAEDA with the help of Stephan Wenzel's contribution. git-svn-id: http://svn.redmine.org/redmine/trunk@18122 e93f8b46-1217-0410-a6f0-8f06a7374b81tags/4.1.0
@@ -237,7 +237,7 @@ class Attachment < ActiveRecord::Base | |||
end | |||
def is_text? | |||
Redmine::MimeType.is_type?('text', filename) | |||
Redmine::MimeType.is_type?('text', filename) || Redmine::SyntaxHighlighting.filename_supported?(filename) | |||
end | |||
def is_image? |
@@ -52,6 +52,14 @@ module Redmine | |||
rescue | |||
false | |||
end | |||
def filename_supported?(filename) | |||
if highlighter.respond_to? :filename_supported? | |||
highlighter.filename_supported? filename | |||
else | |||
false | |||
end | |||
end | |||
end | |||
module Rouge | |||
@@ -101,7 +109,11 @@ module Redmine | |||
def language_supported?(language) | |||
find_lexer(language.to_s.downcase) ? true : false | |||
end | |||
def filename_supported?(filename) | |||
!::Rouge::Lexer.guesses(:filename => filename).empty? | |||
end | |||
private | |||
# Alias names used by CodeRay and not supported by Rouge | |||
LANG_ALIASES = { |
@@ -0,0 +1 @@ | |||
document.write('Hello, World!'); |
@@ -502,4 +502,21 @@ class AttachmentTest < ActiveSupport::TestCase | |||
puts '(ImageMagick convert not available)' | |||
end | |||
def test_is_text | |||
js_attachment = Attachment.new( | |||
:container => Issue.find(1), | |||
:file => uploaded_test_file('hello.js', 'application/javascript'), | |||
:author => User.find(1)) | |||
to_test = { | |||
js_attachment => true, # hello.js (application/javascript) | |||
attachments(:attachments_003) => false, # logo.gif (image/gif) | |||
attachments(:attachments_004) => true, # source.rb (application/x-ruby) | |||
attachments(:attachments_015) => true, # private.diff (text/x-diff) | |||
attachments(:attachments_016) => false, # testfile.png (image/png) | |||
} | |||
to_test.each do |attachment, expected| | |||
assert_equal expected, attachment.is_text?, attachment.inspect | |||
end | |||
end | |||
end |
@@ -20,6 +20,18 @@ | |||
require File.expand_path('../../../../../test_helper', __FILE__) | |||
class Redmine::SyntaxHighlighting::RougeTest < ActiveSupport::TestCase | |||
def test_filename_supported | |||
to_test = { | |||
'application.js' => true, | |||
'Gemfile' => true, | |||
'AUTOEXEC.BAT' => false, # Rouge does not support BAT files | |||
'HELLO.C' => true | |||
} | |||
to_test.each do |filename, expected| | |||
assert_equal expected, Redmine::SyntaxHighlighting::Rouge.filename_supported?(filename) | |||
end | |||
end | |||
def test_highlight_by_filename_should_distinguish_perl_and_prolog | |||
raw_perl = <<'RAW_PERL' | |||
#!/usr/bin/perl |