diff options
author | Brandon Mathis <brandon@imathis.com> | 2011-07-19 09:06:54 -0400 |
---|---|---|
committer | Brandon Mathis <brandon@imathis.com> | 2011-07-19 09:06:54 -0400 |
commit | 17c59fb1d1bf3e0c05137af4b4bd09ae271a2d31 (patch) | |
tree | a4b3b5d43173f9b02ec4b6401cb6e14f6e716a35 /plugins/include_code.rb | |
parent | 873a604e144c53cfc5465a790e43db5b7ebb429e (diff) | |
download | my_new_personal_website-17c59fb1d1bf3e0c05137af4b4bd09ae271a2d31.tar.xz my_new_personal_website-17c59fb1d1bf3e0c05137af4b4bd09ae271a2d31.zip |
Moved plugins to root directory. I'm ditching the idea of shipping plugins with themes until it's more obviously necessary. This way it's easier to merge and update plugins.
Diffstat (limited to 'plugins/include_code.rb')
-rw-r--r-- | plugins/include_code.rb | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/plugins/include_code.rb b/plugins/include_code.rb new file mode 100644 index 00000000..b063f14f --- /dev/null +++ b/plugins/include_code.rb @@ -0,0 +1,55 @@ +# Title: Include Code Tag for Jekyll +# Author: Brandon Mathis http://brandonmathis.com +# Description: Import files on your filesystem into any blog post as embedded code snippets with syntax highlighting and a download link. +# Configuration: You can set default import path in _config.yml (defaults to code_dir: downloads/code) +# +# Syntax {% include_code path/to/file %} +# +# Example: +# {% include_code javascripts/test.js %} +# +# This will import test.js from source/downloads/code/javascripts/test.js +# and output the contents in a syntax highlighted code block inside a figure, +# with a figcaption listing the file name and download link +# + +require 'pathname' + +module Jekyll + + class IncludeCodeTag < Liquid::Tag + def initialize(tag_name, file, tokens) + super + @file = file.strip + end + + def render(context) + code_dir = (context.registers[:site].config['code_dir'] || 'downloads/code') + code_path = (Pathname.new(context.registers[:site].source) + code_dir).expand_path + file = code_path + @file + + if File.symlink?(code_path) + return "Code directory '#{code_path}' cannot be a symlink" + end + + unless file.file? + return "File #{file} could not be found" + end + + Dir.chdir(code_path) do + code = file.read + file_type = file.extname + url = "#{context.registers[:site].config['url']}/#{code_dir}/#{@file}" + source = "<figure role=code><figcaption><span>#{file.basename}</span> <a href='#{url}'>download</a></figcaption>\n" + source += "{% highlight #{file_type} %}\n" + code + "\n{% endhighlight %}</figure>" + partial = Liquid::Template.parse(source) + context.stack do + partial.render(context) + end + end + end + end + +end + +Liquid::Template.register_tag('include_code', Jekyll::IncludeCodeTag) |