"
+ source = "#{title}download\n"
+ source += " #{highlight(code, @filetype)}"
+ safe_wrap(source)
end
end
end
diff --git a/plugins/octopress_filters.rb b/plugins/octopress_filters.rb
index a63c43a..1a95989 100644
--- a/plugins/octopress_filters.rb
+++ b/plugins/octopress_filters.rb
@@ -1,8 +1,38 @@
#custom filters for Octopress
-require './plugins/pygments_code'
+require './plugins/backtick_code_block'
+require './plugins/post_filters'
+require './plugins/raw'
+require 'rubypants'
module OctopressFilters
- include HighlightCode
+ include BacktickCodeBlock
+ include TemplateWrapper
+ def pre_filter(input)
+ input = render_code_block(input)
+ input.gsub /(.+?<\/figure>)/m do
+ safe_wrap($1)
+ end
+ end
+ def post_filter(input)
+ input = unwrap(input)
+ RubyPants.new(input).to_html
+ end
+end
+
+module Jekyll
+ class ContentFilters < PostFilter
+ include OctopressFilters
+ def pre_render(post)
+ post.content = pre_filter(post.content)
+ end
+ def post_render(post)
+ post.content = post_filter(post.content)
+ end
+ end
+end
+
+
+module OctopressLiquidFilters
# Used on the blog index to split posts on the marker
def excerpt(input)
if input.index(//i)
@@ -26,45 +56,6 @@ module OctopressFilters
end
end
- # for Github style codeblocks eg.
- # ``` ruby
- # code snippet
- # ```
- def backtick_codeblock(input)
- code = nil
- # Markdown support
- input = input.gsub /
`{3}\s*(\w+)?<\/p>\s*
\s*(.+?)\s*<\/code><\/pre>\s*
`{3}<\/p>/m do
- lang = $1
- if lang != ''
- str = $2.gsub('<','<').gsub('>','>').gsub('&','&')
- code = highlight(str, lang)
- "#{code}"
- else
- code = tableize_code($2)
- "#{code}"
- end
- end
-
- # Textile warning
- input = input.gsub /
`{3}\s*(\w+)? \n(.+?)`{3}<\/p>/m do
- lang = $1
- "
Back tick code blocks are not supported for Textile.\nTry HTML or Markdown instead or use the codeblock tag.\n\n{% codeblock #{lang} %}\nYour code snippet\n{% endcodeblock %}
"
- end
-
- # Regular HTML support
- input.gsub /^`{3}\s*(\w+)?\n(.+?)\n`{3}/m do
- lang = $1
- str = $2.gsub(/^\s{4}/, '')
- if lang != ''
- code = highlight(str, lang)
- "#{code}"
- else
- code = tableize_code($2.gsub('<','<').gsub('>','>'))
- "#{code}"
- end
- end
- end
-
# Replaces relative urls with full urls
def expand_urls(input, url='')
url ||= '/'
@@ -88,12 +79,6 @@ module OctopressFilters
end
end
- # replaces primes with smartquotes using RubyPants
- def smart_quotes(input)
- require 'rubypants'
- RubyPants.new(input).to_html
- end
-
# Returns a title cased string based on John Gruber's title case http://daringfireball.net/2008/08/title_case_update
def titlecase(input)
input.titlecase
@@ -127,5 +112,5 @@ module OctopressFilters
end
end
end
-Liquid::Template.register_filter OctopressFilters
+Liquid::Template.register_filter OctopressLiquidFilters
diff --git a/plugins/raw.rb b/plugins/raw.rb
index 2deb5d1..4b00262 100644
--- a/plugins/raw.rb
+++ b/plugins/raw.rb
@@ -1,3 +1,19 @@
+# Author: Brandon Mathis
+# Description: Provides plugins with a method for wrapping and unwrapping input to prevent Markdown and Textile from parsing it.
+# Purpose: This is useful for preventing Markdown and Textile from being too aggressive and incorrectly parsing in-line HTML.
+module TemplateWrapper
+ # Wrap input with a
+ def safe_wrap(input)
+ "
#{input}
"
+ end
+ # This must be applied after the
+ def unwrap(input)
+ input.gsub /
(.+?)<\/notextile><\/div>/m do
+ $1
+ end
+ end
+end
+
# Author: phaer, https://github.com/phaer
# Source: https://gist.github.com/1020852
# Description: Raw tag for jekyll. Keeps liquid from parsing text betweeen {% raw %} and {% endraw %}
diff --git a/plugins/render_partial.rb b/plugins/render_partial.rb
index 9f66564..b6ebfe8 100644
--- a/plugins/render_partial.rb
+++ b/plugins/render_partial.rb
@@ -22,10 +22,12 @@
#
require 'pathname'
+require './plugins/octopress_filters'
module Jekyll
class RenderPartialTag < Liquid::Tag
+ include OctopressFilters
def initialize(tag_name, markup, tokens)
@file = nil
@raw = false
@@ -50,6 +52,7 @@ module Jekyll
if contents =~ /\A-{3}.+[^\A]-{3}\n(.+)/m
contents = $1.lstrip
end
+ contents = pre_filter(contents)
if @raw
contents
else