aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrandon Mathis <brandon@imathis.com>2011-07-26 23:36:42 -0400
committerBrandon Mathis <brandon@imathis.com>2011-07-26 23:36:42 -0400
commit7b81aab5ac225fb12a100d9eb463340f322704fd (patch)
treef46adc303a4f5b4510d8880c8d5820173c931414
parent727a1492278c5e22aa68019f14d4e60319476f74 (diff)
downloadmy_new_personal_website-7b81aab5ac225fb12a100d9eb463340f322704fd.tar.xz
my_new_personal_website-7b81aab5ac225fb12a100d9eb463340f322704fd.zip
added support for pygments.rb removing dependency on pygments, added support for caching highlighted code from pygments.rb and added default line numbering. Javascript auto line numbering now only occurs for embedded gists
-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