... | ... |
@@ -48,8 +48,7 @@ function testFeatures() { |
48 | 48 |
|
49 | 49 |
function addCodeLineNumbers(){ |
50 | 50 |
if (navigator.appName == 'Microsoft Internet Explorer') { return } |
51 |
- $('div.highlight pre code').each(function(el){ addDivLines(el); }); |
|
52 |
- $('div.highlight, div.gist-highlight').each(function(code){ |
|
51 |
+ $('div.gist-highlight').each(function(code){ |
|
53 | 52 |
var tableStart = '<table cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter">'; |
54 | 53 |
var lineNumbers = '<pre class="line-numbers">'; |
55 | 54 |
var tableMiddle = '</pre></td><td class="code" width="100%">'; |
... | ... |
@@ -62,16 +61,6 @@ function addCodeLineNumbers(){ |
62 | 62 |
$(code).html(table); |
63 | 63 |
}); |
64 | 64 |
} |
65 |
-function addDivLines(el){ |
|
66 |
- var content = $(el).html(); |
|
67 |
- var lines = content.replace(/\s*$/g, '').split(/\n/); |
|
68 |
- var count = lines.length; |
|
69 |
- $(lines).each(function(line, index){ |
|
70 |
- if(line == '') line = ' '; |
|
71 |
- lines[index] = '<div class="line">' + line + '</div>'; |
|
72 |
- }); |
|
73 |
- $(el).html(lines.join('')); |
|
74 |
-} |
|
75 | 65 |
|
76 | 66 |
function flashVideoFallback(){ |
77 | 67 |
var flashplayerlocation = "/assets/jwplayer/player.swf", |
... | ... |
@@ -4,6 +4,7 @@ GEM |
4 | 4 |
RedCloth (4.2.7) |
5 | 5 |
albino (1.3.3) |
6 | 6 |
posix-spawn (>= 0.3.6) |
7 |
+ blankslate (2.1.2.4) |
|
7 | 8 |
chunky_png (1.2.0) |
8 | 9 |
classifier (1.3.3) |
9 | 10 |
fast-stemmer (>= 1.0.0) |
... | ... |
@@ -13,6 +14,7 @@ GEM |
13 | 13 |
sass (~> 3.1) |
14 | 14 |
directory_watcher (1.4.0) |
15 | 15 |
fast-stemmer (1.0.0) |
16 |
+ ffi (1.0.9) |
|
16 | 17 |
fssm (0.2.7) |
17 | 18 |
haml (3.1.2) |
18 | 19 |
jekyll (0.11.0) |
... | ... |
@@ -27,12 +29,17 @@ GEM |
27 | 27 |
maruku (0.6.0) |
28 | 28 |
syntax (>= 1.0.0) |
29 | 29 |
posix-spawn (0.3.6) |
30 |
- rack (1.3.1) |
|
30 |
+ pygments.rb (0.1.2) |
|
31 |
+ rubypython (>= 0.5.1) |
|
32 |
+ rack (1.3.2) |
|
31 | 33 |
rake (0.9.2) |
32 | 34 |
rb-fsevent (0.4.1) |
33 | 35 |
rdiscount (1.6.8) |
34 | 36 |
rubypants (0.2.0) |
35 |
- sass (3.1.4) |
|
37 |
+ rubypython (0.5.1) |
|
38 |
+ blankslate (>= 2.1.2.3) |
|
39 |
+ ffi (~> 1.0.7) |
|
40 |
+ sass (3.1.5) |
|
36 | 41 |
syntax (1.0.0) |
37 | 42 |
|
38 | 43 |
PLATFORMS |
... | ... |
@@ -43,6 +50,7 @@ DEPENDENCIES |
43 | 43 |
compass (>= 0.11) |
44 | 44 |
haml (>= 3.1) |
45 | 45 |
jekyll |
46 |
+ pygments.rb |
|
46 | 47 |
rack |
47 | 48 |
rake |
48 | 49 |
rb-fsevent |
... | ... |
@@ -28,7 +28,7 @@ plugins: plugins |
28 | 28 |
code_dir: downloads/code |
29 | 29 |
category_dir: blog/categories |
30 | 30 |
markdown: rdiscount |
31 |
-pygments: true |
|
31 |
+pygments: false |
|
32 | 32 |
|
33 | 33 |
paginate: 10 # Posts per page on the blog index |
34 | 34 |
recent_posts: 5 # Posts in the sidebar Recent Posts section |
... | ... |
@@ -41,9 +41,12 @@ |
41 | 41 |
# <pre><code><sarcasm> Ooooh, sarcasm... How original!</sarcasm></code></pre> |
42 | 42 |
# </figure> |
43 | 43 |
# |
44 |
+require './plugins/pygments_code' |
|
45 |
+ |
|
44 | 46 |
module Jekyll |
45 | 47 |
|
46 | 48 |
class CodeBlock < Liquid::Block |
49 |
+ include HighlightCode |
|
47 | 50 |
CaptionUrlTitle = /(\S[\S\s]*)\s+(https?:\/\/)(\S+)\s+(.+)/i |
48 | 51 |
CaptionUrl = /(\S[\S\s]*)\s+(https?:\/\/)(\S+)/i |
49 | 52 |
Caption = /(\S[\S\s]*)/ |
... | ... |
@@ -75,7 +78,7 @@ module Jekyll |
75 | 75 |
if @filetype |
76 | 76 |
@filetype = 'objc' if @filetype == 'm' |
77 | 77 |
@filetype = 'perl' if @filetype == 'pl' |
78 |
- source += "{% highlight #{@filetype} %}\n" + code + "\n{% endhighlight %}</figure></div>" |
|
78 |
+ source += " #{highlight(code, @filetype)}</figure></div>" |
|
79 | 79 |
else |
80 | 80 |
source += "<pre><code>" + code.lstrip.rstrip.gsub(/</,'<') + "</code></pre></figure></div>" |
81 | 81 |
end |
... | ... |
@@ -20,11 +20,13 @@ |
20 | 20 |
# will output a figcaption with the title: Example 2 (test.js) |
21 | 21 |
# |
22 | 22 |
|
23 |
+require './plugins/pygments_code' |
|
23 | 24 |
require 'pathname' |
24 | 25 |
|
25 | 26 |
module Jekyll |
26 | 27 |
|
27 | 28 |
class IncludeCodeTag < Liquid::Tag |
29 |
+ include HighlightCode |
|
28 | 30 |
def initialize(tag_name, markup, tokens) |
29 | 31 |
@title = nil |
30 | 32 |
@file = nil |
... | ... |
@@ -50,13 +52,13 @@ module Jekyll |
50 | 50 |
|
51 | 51 |
Dir.chdir(code_path) do |
52 | 52 |
code = file.read |
53 |
- @filetype = file.extname |
|
53 |
+ @filetype = file.extname.sub('.','') |
|
54 | 54 |
@filetype = 'objc' if @filetype == 'm' |
55 | 55 |
@filetype = 'perl' if @filetype == 'pl' |
56 | 56 |
title = @title ? "#{@title} (#{file.basename})" : file.basename |
57 | 57 |
url = "#{context.registers[:site].config['url']}/#{code_dir}/#{@file}" |
58 | 58 |
source = "<div><figure role=code><figcaption><span>#{title}</span> <a href='#{url}'>download</a></figcaption>\n" |
59 |
- source += "{% highlight #{@filetype} %}\n" + code + "\n{% endhighlight %}</figure></div>" |
|
59 |
+ source += " #{highlight(code, @filetype)}</figure></div>" |
|
60 | 60 |
partial = Liquid::Template.parse(source) |
61 | 61 |
context.stack do |
62 | 62 |
partial.render(context) |
63 | 63 |
deleted file mode 100644 |
... | ... |
@@ -1,30 +0,0 @@ |
1 |
-# |
|
2 |
-# Author: Raimonds Simanovskis, http://blog.rayapps.com/ |
|
3 |
-# Source URL: https://github.com/rsim/blog.rayapps.com/blob/master/_plugins/pygments_cache_patch.rb |
|
4 |
-# |
|
5 |
- |
|
6 |
-require 'fileutils' |
|
7 |
-require 'digest/md5' |
|
8 |
- |
|
9 |
-PYGMENTS_CACHE_DIR = File.expand_path('../../_code_cache', __FILE__) |
|
10 |
-FileUtils.mkdir_p(PYGMENTS_CACHE_DIR) |
|
11 |
- |
|
12 |
-Jekyll::HighlightBlock.class_eval do |
|
13 |
- def render_pygments(context, code) |
|
14 |
- if defined?(PYGMENTS_CACHE_DIR) |
|
15 |
- path = File.join(PYGMENTS_CACHE_DIR, "#{@lang}-#{Digest::MD5.hexdigest(code)}.html") |
|
16 |
- if File.exist?(path) |
|
17 |
- highlighted_code = File.read(path) |
|
18 |
- else |
|
19 |
- highlighted_code = Albino.new(code, @lang).to_s(@options) |
|
20 |
- File.open(path, 'w') {|f| f.print(highlighted_code) } |
|
21 |
- end |
|
22 |
- else |
|
23 |
- highlighted_code = Albino.new(code, @lang).to_s(@options) |
|
24 |
- end |
|
25 |
- output = add_code_tags(highlighted_code, @lang) |
|
26 |
- output = context["pygments_prefix"] + output if context["pygments_prefix"] |
|
27 |
- output = output + context["pygments_suffix"] if context["pygments_suffix"] |
|
28 |
- output |
|
29 |
- end |
|
30 |
-end |
31 | 1 |
new file mode 100644 |
... | ... |
@@ -0,0 +1,34 @@ |
0 |
+require 'pygments' |
|
1 |
+require 'fileutils' |
|
2 |
+require 'digest/md5' |
|
3 |
+ |
|
4 |
+PYGMENTS_CACHE_DIR = File.expand_path('../../_code_cache', __FILE__) |
|
5 |
+FileUtils.mkdir_p(PYGMENTS_CACHE_DIR) |
|
6 |
+ |
|
7 |
+module HighlightCode |
|
8 |
+ def highlight(str, lang) |
|
9 |
+ str = pygments(str, lang).match(/<pre>(.+)<\/pre>/m)[1].to_s.gsub(/\s*$/, '') #strip out divs <div class="highlight"> |
|
10 |
+ table = '<div class="highlight"><table cellpadding="0" cellspacing="0"><tr><td class="gutter"><pre class="line-numbers">' |
|
11 |
+ code = '' |
|
12 |
+ str.lines.each_with_index do |line,index| |
|
13 |
+ table += "<span class='line'>#{index+1}</span>\n" |
|
14 |
+ code += "<div class='line'>#{line}</div>" |
|
15 |
+ end |
|
16 |
+ table += "</pre></td><td class='code' width='100%'><pre><code class='#{lang}'>#{code}</code></pre></td></tr></table></div>" |
|
17 |
+ end |
|
18 |
+ |
|
19 |
+ def pygments(code, lang) |
|
20 |
+ if defined?(PYGMENTS_CACHE_DIR) |
|
21 |
+ path = File.join(PYGMENTS_CACHE_DIR, "#{lang}-#{Digest::MD5.hexdigest(code)}.html") |
|
22 |
+ if File.exist?(path) |
|
23 |
+ highlighted_code = File.read(path) |
|
24 |
+ else |
|
25 |
+ highlighted_code = Pygments.highlight(code, :lexer => lang, :formatter => 'html') |
|
26 |
+ File.open(path, 'w') {|f| f.print(highlighted_code) } |
|
27 |
+ end |
|
28 |
+ else |
|
29 |
+ highlighted_code = Pygments.highlight(code, :lexer => lang, :formatter => 'html') |
|
30 |
+ end |
|
31 |
+ highlighted_code |
|
32 |
+ end |
|
33 |
+end |