mirror of
https://github.com/WatchOutNewsAgency/wona.github.com.git
synced 2026-01-01 01:16:26 +00:00
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
This commit is contained in:
@ -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
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -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
|
||||
34
plugins/pygments_code.rb
Normal file
34
plugins/pygments_code.rb
Normal file
@ -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
|
||||
Reference in New Issue
Block a user