Skip to content

Instantly share code, notes, and snippets.

@wavebeem
Created November 6, 2015 00:26
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wavebeem/253c9775bb04fd0aecf0 to your computer and use it in GitHub Desktop.
Save wavebeem/253c9775bb04fd0aecf0 to your computer and use it in GitHub Desktop.
require 'cgi'
require 'jekyll'
require 'redcarpet'
class RedcarpetCodeMirror < Redcarpet::Render::HTML
def initialize
super
@total = 0
end
def codespan(code)
code = CGI.escapeHTML(code)
"<code>#{code}</code>"
end
def block_code(code, language)
lang ||= "javascript"
lang = "javascript" if language == ""
lang = "bash" if lang == "shell"
bin = "./vendor/codemirror-5.6/bin/source-highlight"
cmd = [bin, "-s", lang]
cmd = ["cat"]
t1 = Time.now
html = IO.popen(cmd, "r+") do |io|
io.print(code)
io.close_write
code = io.read
theme = "default"
attrs = "class='cm-s-#{theme}'"
"<pre><code #{attrs}>#{code}</code></pre>"
end
t2 = Time.now
dt = t2 - t1
@total += dt
STDERR.puts("Time elapsed: #{t2 - t1}, total = #{@total}")
html
end
end
class Jekyll::Converters::Markdown::RedcarpetCodeMirror
def initialize(config)
@config = config
end
def extensions
defaults = {
fenced_code_blocks: true
}
pairs = @config['redcarpet']['extensions'].map {|e| [e.to_sym, true] }
defaults.merge(Hash[*pairs.flatten])
end
def markdown
@markdown ||= Redcarpet::Markdown.new(RedcarpetCodeMirror, extensions)
end
def convert(content)
return super unless @config['markdown'] == 'RedcarpetCodeMirror'
markdown.render(content)
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment