aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.themes/classic/source/javascripts/octopress.js13
-rw-r--r--Gemfile1
-rw-r--r--Gemfile.lock12
-rw-r--r--_config.yml2
-rw-r--r--plugins/code_block.rb5
-rw-r--r--plugins/include_code.rb6
-rw-r--r--plugins/pygments_cache_patch.rb30
-rw-r--r--plugins/pygments_code.rb34
8 files changed, 55 insertions, 48 deletions
diff --git a/.themes/classic/source/javascripts/octopress.js b/.themes/classic/source/javascripts/octopress.js
index 12ca23ea..5266ecb3 100644
--- a/.themes/classic/source/javascripts/octopress.js
+++ b/.themes/classic/source/javascripts/octopress.js
@@ -48,8 +48,7 @@ function testFeatures() {
function addCodeLineNumbers(){
if (navigator.appName == 'Microsoft Internet Explorer') { return }
- $('div.highlight pre code').each(function(el){ addDivLines(el); });
- $('div.highlight, div.gist-highlight').each(function(code){
+ $('div.gist-highlight').each(function(code){
var tableStart = '<table cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter">';
var lineNumbers = '<pre class="line-numbers">';
var tableMiddle = '</pre></td><td class="code" width="100%">';
@@ -62,16 +61,6 @@ function addCodeLineNumbers(){
$(code).html(table);
});
}
-function addDivLines(el){
- var content = $(el).html();
- var lines = content.replace(/\s*$/g, '').split(/\n/);
- var count = lines.length;
- $(lines).each(function(line, index){
- if(line == '') line = ' ';
- lines[index] = '<div class="line">' + line + '</div>';
- });
- $(el).html(lines.join(''));
-}
function flashVideoFallback(){
var flashplayerlocation = "/assets/jwplayer/player.swf",
diff --git a/Gemfile b/Gemfile
index 8b7de0f9..5bb57ed4 100644
--- a/Gemfile
+++ b/Gemfile
@@ -4,6 +4,7 @@ gem 'rake'
gem 'rack'
gem 'jekyll'
gem 'rdiscount'
+gem 'pygments.rb'
gem 'RedCloth'
gem 'haml', '>= 3.1'
gem 'compass', '>= 0.11'
diff --git a/Gemfile.lock b/Gemfile.lock
index 302cc44c..c9235cb2 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -4,6 +4,7 @@ GEM
RedCloth (4.2.7)
albino (1.3.3)
posix-spawn (>= 0.3.6)
+ blankslate (2.1.2.4)
chunky_png (1.2.0)
classifier (1.3.3)
fast-stemmer (>= 1.0.0)
@@ -13,6 +14,7 @@ GEM
sass (~> 3.1)
directory_watcher (1.4.0)
fast-stemmer (1.0.0)
+ ffi (1.0.9)
fssm (0.2.7)
haml (3.1.2)
jekyll (0.11.0)
@@ -27,12 +29,17 @@ GEM
maruku (0.6.0)
syntax (>= 1.0.0)
posix-spawn (0.3.6)
- rack (1.3.1)
+ pygments.rb (0.1.2)
+ rubypython (>= 0.5.1)
+ rack (1.3.2)
rake (0.9.2)
rb-fsevent (0.4.1)
rdiscount (1.6.8)
rubypants (0.2.0)
- sass (3.1.4)
+ rubypython (0.5.1)
+ blankslate (>= 2.1.2.3)
+ ffi (~> 1.0.7)
+ sass (3.1.5)
syntax (1.0.0)
PLATFORMS
@@ -43,6 +50,7 @@ DEPENDENCIES
compass (>= 0.11)
haml (>= 3.1)
jekyll
+ pygments.rb
rack
rake
rb-fsevent
diff --git a/_config.yml b/_config.yml
index b801db16..25783c86 100644
--- a/_config.yml
+++ b/_config.yml
@@ -28,7 +28,7 @@ plugins: plugins
code_dir: downloads/code
category_dir: blog/categories
markdown: rdiscount
-pygments: true
+pygments: false
paginate: 10 # Posts per page on the blog index
recent_posts: 5 # Posts in the sidebar Recent Posts section
diff --git a/plugins/code_block.rb b/plugins/code_block.rb
index 4cf2817b..af64e031 100644
--- a/plugins/code_block.rb
+++ b/plugins/code_block.rb
@@ -41,9 +41,12 @@
# <pre><code>&lt;sarcasm> Ooooh, sarcasm... How original!&lt;/sarcasm></code></pre>
# </figure>
#
+require './plugins/pygments_code'
+
module Jekyll
class CodeBlock < Liquid::Block
+ include HighlightCode
CaptionUrlTitle = /(\S[\S\s]*)\s+(https?:\/\/)(\S+)\s+(.+)/i
CaptionUrl = /(\S[\S\s]*)\s+(https?:\/\/)(\S+)/i
Caption = /(\S[\S\s]*)/
@@ -75,7 +78,7 @@ module Jekyll
if @filetype
@filetype = 'objc' if @filetype == 'm'
@filetype = 'perl' if @filetype == 'pl'
- source += "{% highlight #{@filetype} %}\n" + code + "\n{% endhighlight %}</figure></div>"
+ source += " #{highlight(code, @filetype)}</figure></div>"
else
source += "<pre><code>" + code.lstrip.rstrip.gsub(/</,'&lt;') + "</code></pre></figure></div>"
end
diff --git a/plugins/include_code.rb b/plugins/include_code.rb
index b0258a4c..93db78a3 100644
--- a/plugins/include_code.rb
+++ b/plugins/include_code.rb
@@ -20,11 +20,13 @@
# will output a figcaption with the title: Example 2 (test.js)
#
+require './plugins/pygments_code'
require 'pathname'
module Jekyll
class IncludeCodeTag < Liquid::Tag
+ include HighlightCode
def initialize(tag_name, markup, tokens)
@title = nil
@file = nil
@@ -50,13 +52,13 @@ module Jekyll
Dir.chdir(code_path) do
code = file.read
- @filetype = file.extname
+ @filetype = file.extname.sub('.','')
@filetype = 'objc' if @filetype == 'm'
@filetype = 'perl' if @filetype == 'pl'
title = @title ? "#{@title} (#{file.basename})" : file.basename
url = "#{context.registers[:site].config['url']}/#{code_dir}/#{@file}"
source = "<div><figure role=code><figcaption><span>#{title}</span> <a href='#{url}'>download</a></figcaption>\n"
- source += "{% highlight #{@filetype} %}\n" + code + "\n{% endhighlight %}</figure></div>"
+ source += " #{highlight(code, @filetype)}</figure></div>"
partial = Liquid::Template.parse(source)
context.stack do
partial.render(context)
diff --git a/plugins/pygments_cache_patch.rb b/plugins/pygments_cache_patch.rb
deleted file mode 100644
index 09c09840..00000000
--- a/plugins/pygments_cache_patch.rb
+++ /dev/null
@@ -1,30 +0,0 @@
-#
-# Author: Raimonds Simanovskis, http://blog.rayapps.com/
-# Source URL: https://github.com/rsim/blog.rayapps.com/blob/master/_plugins/pygments_cache_patch.rb
-#
-
-require 'fileutils'
-require 'digest/md5'
-
-PYGMENTS_CACHE_DIR = File.expand_path('../../_code_cache', __FILE__)
-FileUtils.mkdir_p(PYGMENTS_CACHE_DIR)
-
-Jekyll::HighlightBlock.class_eval do
- def render_pygments(context, code)
- if defined?(PYGMENTS_CACHE_DIR)
- path = File.join(PYGMENTS_CACHE_DIR, "#{@lang}-#{Digest::MD5.hexdigest(code)}.html")
- if File.exist?(path)
- highlighted_code = File.read(path)
- else
- highlighted_code = Albino.new(code, @lang).to_s(@options)
- File.open(path, 'w') {|f| f.print(highlighted_code) }
- end
- else
- highlighted_code = Albino.new(code, @lang).to_s(@options)
- end
- output = add_code_tags(highlighted_code, @lang)
- output = context["pygments_prefix"] + output if context["pygments_prefix"]
- output = output + context["pygments_suffix"] if context["pygments_suffix"]
- output
- end
-end
diff --git a/plugins/pygments_code.rb b/plugins/pygments_code.rb
new file mode 100644
index 00000000..05b4fb57
--- /dev/null
+++ b/plugins/pygments_code.rb
@@ -0,0 +1,34 @@
+require 'pygments'
+require 'fileutils'
+require 'digest/md5'
+
+PYGMENTS_CACHE_DIR = File.expand_path('../../_code_cache', __FILE__)
+FileUtils.mkdir_p(PYGMENTS_CACHE_DIR)
+
+module HighlightCode
+ def highlight(str, lang)
+ str = pygments(str, lang).match(/<pre>(.+)<\/pre>/m)[1].to_s.gsub(/\s*$/, '') #strip out divs <div class="highlight">
+ table = '<div class="highlight"><table cellpadding="0" cellspacing="0"><tr><td class="gutter"><pre class="line-numbers">'
+ code = ''
+ str.lines.each_with_index do |line,index|
+ table += "<span class='line'>#{index+1}</span>\n"
+ code += "<div class='line'>#{line}</div>"
+ end
+ table += "</pre></td><td class='code' width='100%'><pre><code class='#{lang}'>#{code}</code></pre></td></tr></table></div>"
+ end
+
+ def pygments(code, lang)
+ if defined?(PYGMENTS_CACHE_DIR)
+ path = File.join(PYGMENTS_CACHE_DIR, "#{lang}-#{Digest::MD5.hexdigest(code)}.html")
+ if File.exist?(path)
+ highlighted_code = File.read(path)
+ else
+ highlighted_code = Pygments.highlight(code, :lexer => lang, :formatter => 'html')
+ File.open(path, 'w') {|f| f.print(highlighted_code) }
+ end
+ else
+ highlighted_code = Pygments.highlight(code, :lexer => lang, :formatter => 'html')
+ end
+ highlighted_code
+ end
+end