Using github's linguist to better detect filetypes and to do syntax highlighting.
This commit is contained in:
parent
9ee345750c
commit
5b6019f357
6 changed files with 21 additions and 56 deletions
1
Gemfile
1
Gemfile
|
@ -18,6 +18,7 @@ gem "six"
|
||||||
gem "therubyracer"
|
gem "therubyracer"
|
||||||
gem "faker"
|
gem "faker"
|
||||||
gem "seed-fu"
|
gem "seed-fu"
|
||||||
|
gem "linguist", "~> 1.0.0", :git => "https://github.com/github/linguist.git"
|
||||||
gem "pygments.rb", "0.2.7"
|
gem "pygments.rb", "0.2.7"
|
||||||
gem "thin"
|
gem "thin"
|
||||||
gem "unicorn"
|
gem "unicorn"
|
||||||
|
|
12
Gemfile.lock
12
Gemfile.lock
|
@ -4,6 +4,16 @@ GIT
|
||||||
specs:
|
specs:
|
||||||
annotate (2.4.1.beta1)
|
annotate (2.4.1.beta1)
|
||||||
|
|
||||||
|
GIT
|
||||||
|
remote: https://github.com/github/linguist.git
|
||||||
|
revision: c444c25b27131cd2aca6017f2a9ce5eae60dfcd3
|
||||||
|
specs:
|
||||||
|
linguist (1.0.0)
|
||||||
|
charlock_holmes (~> 0.6.6)
|
||||||
|
escape_utils (~> 0.2.3)
|
||||||
|
mime-types (~> 1.18)
|
||||||
|
pygments.rb (~> 0.2.11)
|
||||||
|
|
||||||
GIT
|
GIT
|
||||||
remote: https://github.com/gitlabhq/gitolite-client.git
|
remote: https://github.com/gitlabhq/gitolite-client.git
|
||||||
revision: 36dabd226caa40ff052677719adaacbfe667b36c
|
revision: 36dabd226caa40ff052677719adaacbfe667b36c
|
||||||
|
@ -104,6 +114,7 @@ GEM
|
||||||
diff-lcs (1.1.3)
|
diff-lcs (1.1.3)
|
||||||
drapper (0.8.4)
|
drapper (0.8.4)
|
||||||
erubis (2.7.0)
|
erubis (2.7.0)
|
||||||
|
escape_utils (0.2.4)
|
||||||
eventmachine (0.12.10)
|
eventmachine (0.12.10)
|
||||||
execjs (1.3.0)
|
execjs (1.3.0)
|
||||||
multi_json (~> 1.0)
|
multi_json (~> 1.0)
|
||||||
|
@ -326,6 +337,7 @@ DEPENDENCIES
|
||||||
kaminari
|
kaminari
|
||||||
launchy
|
launchy
|
||||||
letter_opener
|
letter_opener
|
||||||
|
linguist (~> 1.0.0)!
|
||||||
modularity
|
modularity
|
||||||
mysql2
|
mysql2
|
||||||
omniauth-ldap
|
omniauth-ldap
|
||||||
|
|
|
@ -11,10 +11,10 @@
|
||||||
- if file.text?
|
- if file.text?
|
||||||
.view_file_content
|
.view_file_content
|
||||||
- unless file.empty?
|
- unless file.empty?
|
||||||
%div{:class => current_user.dark_scheme ? "black" : "white"}
|
%div{:class => current_user.dark_scheme ? "black" : "white"}
|
||||||
= preserve do
|
= preserve do
|
||||||
= raw file.colorize
|
= raw file.colorize(options: { linenos: 'True'})
|
||||||
- else
|
- else
|
||||||
%h3
|
%h3
|
||||||
%center Empty file
|
%center Empty file
|
||||||
- elsif file.image?
|
- elsif file.image?
|
||||||
|
|
|
@ -13,8 +13,7 @@
|
||||||
.view_file_header
|
.view_file_header
|
||||||
%strong= @snippet.file_name
|
%strong= @snippet.file_name
|
||||||
.view_file_content
|
.view_file_content
|
||||||
%div{:class => current_user.dark_scheme ? "black" : ""}
|
%div{:class => current_user.dark_scheme ? "black" : ""}
|
||||||
:erb
|
= raw @snippet.colorize(options: { linenos: 'True'})
|
||||||
<%= raw @snippet.colorize %>
|
|
||||||
|
|
||||||
= render "notes/notes", :tid => @snippet.id, :tt => "snippet"
|
= render "notes/notes", :tid => @snippet.id, :tt => "snippet"
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
require 'grit'
|
require 'grit'
|
||||||
require 'pygments'
|
|
||||||
require "utils"
|
|
||||||
|
|
||||||
Grit::Blob.class_eval do
|
Grit::Blob.class_eval do
|
||||||
include Utils::FileHelper
|
include Linguist::BlobHelper
|
||||||
include Utils::Colorize
|
|
||||||
end
|
end
|
||||||
|
|
||||||
#monkey patch raw_object from string
|
#monkey patch raw_object from string
|
||||||
|
@ -15,7 +12,7 @@ Grit::GitRuby::Internal::RawObject.class_eval do
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
||||||
Grit::Diff.class_eval do
|
Grit::Diff.class_eval do
|
||||||
def old_path
|
def old_path
|
||||||
Gitlabhq::Encode.utf8 a_path
|
Gitlabhq::Encode.utf8 a_path
|
||||||
end
|
end
|
||||||
|
|
44
lib/utils.rb
44
lib/utils.rb
|
@ -1,44 +0,0 @@
|
||||||
module Utils
|
|
||||||
module FileHelper
|
|
||||||
def binary?(string)
|
|
||||||
string.each_byte do |x|
|
|
||||||
x.nonzero? or return true
|
|
||||||
end
|
|
||||||
false
|
|
||||||
end
|
|
||||||
|
|
||||||
def image?
|
|
||||||
mime_type =~ /image/
|
|
||||||
end
|
|
||||||
|
|
||||||
def text?
|
|
||||||
mime_type =~ /application|text/ && !binary?(data)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
module Colorize
|
|
||||||
def colorize
|
|
||||||
system_colorize(data, name)
|
|
||||||
end
|
|
||||||
|
|
||||||
def system_colorize(data, file_name)
|
|
||||||
options = { :encoding => 'utf-8', :linenos => 'True' }
|
|
||||||
|
|
||||||
# Try detect language with pygments
|
|
||||||
Pygments.highlight data, :filename => file_name, :options => options
|
|
||||||
rescue
|
|
||||||
# if it fails use manual detection
|
|
||||||
ft = handle_file_type(file_name)
|
|
||||||
Pygments.highlight(data, :lexer => ft, :options => options)
|
|
||||||
end
|
|
||||||
|
|
||||||
def handle_file_type(file_name)
|
|
||||||
case file_name
|
|
||||||
when /(\.ru|Gemfile)$/
|
|
||||||
:ruby
|
|
||||||
else
|
|
||||||
:text
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
Loading…
Reference in a new issue