diff options
author | Brandon Mathis <brandon@imathis.com> | 2011-07-26 23:36:42 -0400 |
---|---|---|
committer | Brandon Mathis <brandon@imathis.com> | 2011-07-26 23:36:42 -0400 |
commit | 7b81aab5ac225fb12a100d9eb463340f322704fd (patch) | |
tree | f46adc303a4f5b4510d8880c8d5820173c931414 | |
parent | 727a1492278c5e22aa68019f14d4e60319476f74 (diff) | |
download | my_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.js | 13 | ||||
-rw-r--r-- | Gemfile | 1 | ||||
-rw-r--r-- | Gemfile.lock | 12 | ||||
-rw-r--r-- | _config.yml | 2 | ||||
-rw-r--r-- | plugins/code_block.rb | 5 | ||||
-rw-r--r-- | plugins/include_code.rb | 6 | ||||
-rw-r--r-- | plugins/pygments_cache_patch.rb | 30 | ||||
-rw-r--r-- | plugins/pygments_code.rb | 34 |
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", @@ -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><sarcasm> Ooooh, sarcasm... How original!</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(/</,'<') + "</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 |