add markdown
diff --git a/_plugins/kramdown-with-pygments/kramdown_pygments.rb b/_plugins/kramdown-with-pygments/kramdown_pygments.rb
new file mode 100644
index 0000000..74f279a
--- /dev/null
+++ b/_plugins/kramdown-with-pygments/kramdown_pygments.rb
@@ -0,0 +1,92 @@
+# We define the an additional option for the kramdown parser to look for
+module Kramdown
+ module Options
+ define(:kramdown_default_lang, Symbol, nil, <<EOF)
+Sets the default language for highlighting code blocks
+
+If no language is set for a code block, the default language is used
+instead. The value has to be one of the languages supported by pygments
+or nil if no default language should be used.
+
+Default: nil
+Used by: PygmentsHtml converter
+EOF
+ end
+end
+
+# This class is a plugin for kramdown, to make it use pygments instead of coderay
+# It has nothing to do with Jekyll, it is simply used by the custom converter below
+module Kramdown
+ module Converter
+ class PygmentsHtml < Html
+
+ begin
+ require 'pygments'
+ rescue LoadError
+ STDERR.puts 'You are missing a library required for syntax highlighting. Please run:'
+ STDERR.puts ' $ [sudo] gem install pygments'
+ raise FatalException.new("Missing dependency: Pygments")
+ end
+
+ def convert_codeblock(el, indent)
+ attr = el.attr.dup
+ lang = extract_code_language!(attr) || @options[:kramdown_default_lang]
+ code = pygmentize(el.value, lang)
+ code_attr = {}
+ code_attr['class'] = "language-#{lang}" if lang
+ "#{' '*indent}<div class=\"highlight\"><pre#{html_attributes(attr)}><code#{html_attributes(code_attr)}>#{code}</code></pre></div>\n"
+ end
+
+ def convert_codespan(el, indent)
+ attr = el.attr.dup
+ lang = extract_code_language!(attr) || @options[:kramdown_default_lang]
+ code = pygmentize(el.value, lang)
+ if lang
+ attr['class'] = "highlight"
+ if attr.has_key?('class')
+ attr['class'] += " language-#{lang}"
+ else
+ attr['class'] = "language-#{lang}"
+ end
+ end
+ "<code#{html_attributes(attr)}>#{code}</code>"
+ end
+
+ def pygmentize(code, lang)
+ if lang
+ Pygments.highlight(code,
+ :lexer => lang,
+ :options => { :startinline => true, :encoding => 'utf-8', :nowrap => true })
+ else
+ escape_html(code)
+ end
+ end
+ end
+ end
+end
+
+# This class is the actual custom Jekyll converter.
+class Jekyll::Converters::Markdown::KramdownPygments
+
+ def initialize(config)
+ require 'kramdown'
+ @config = config
+ rescue LoadError
+ STDERR.puts 'You are missing a library required for Markdown. Please run:'
+ STDERR.puts ' $ [sudo] gem install kramdown'
+ raise FatalException.new("Missing dependency: kramdown")
+ end
+
+ def convert(content)
+ html = Kramdown::Document.new(content, {
+ :auto_ids => @config['kramdown']['auto_ids'],
+ :footnote_nr => @config['kramdown']['footnote_nr'],
+ :entity_output => @config['kramdown']['entity_output'],
+ :toc_levels => @config['kramdown']['toc_levels'],
+ :smart_quotes => @config['kramdown']['smart_quotes'],
+ :kramdown_default_lang => @config['kramdown']['default_lang'],
+ :input => @config['kramdown']['input']
+ }).to_pygments_html
+ return html;
+ end
+end