Created
March 27, 2011 21:15
-
-
Save sparkertime/889626 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'haml' | |
require 'haml/html' | |
require 'httparty' | |
module Jekyll | |
class SyntaxBlock < Liquid::Block | |
def initialize(tag_name, language, tokens) | |
super | |
@language = language | |
end | |
# Typical output of render | |
# :plain | |
# <div class="highlight"><pre><span class="k">class</span> <span class="nc">Boop</span> | |
# <span class="k">def</span> <span class="nf">something</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">,</span><span class="n">c</span><span class="p">)</span> | |
# <span class="k">end</span> | |
# <span class="k">end</span> | |
# </pre></div> | |
def render(context) | |
html_syntax = indent(code_to_html(super.join,@language)) | |
":plain\n#{html_syntax}" | |
end | |
# Typical output of code_to_html: | |
# <div class="highlight"><pre><span class="k">class</span> <span class="nc">Boop</span> | |
# <span class="k">def</span> <span class="nf">something</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">,</span><span class="n">c</span><span class="p">)</span> | |
# <span class="k">end</span> | |
# <span class="k">end</span> | |
# </pre></div> | |
# | |
def code_to_html(code, language) | |
response = HTTParty.post('http://pygments.appspot.com/', :body => {'lang'=>language.strip, 'code'=>code}) | |
puts "An error occured while processing this #{language} code: #{code}" unless response.success? | |
response.body | |
end | |
# Typical output of indent | |
# <div class="highlight"><pre><span class="k">class</span> <span class="nc">Boop</span> | |
# <span class="k">def</span> <span class="nf">something</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">,</span><span class="n">c</span><span class="p">)</span> | |
# <span class="k">end</span> | |
# <span class="k">end</span> | |
# </pre></div> | |
def indent(html) | |
indented = html.gsub(/\n/, "\n ") | |
" #{indented}" | |
end | |
end | |
end | |
Liquid::Template.register_tag('syntax', Jekyll::SyntaxBlock) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment