require 'kramdown' module Jekyll module Converters class Markdown class KramdownParser attr_accessor :kramdown DISPATCHER = Hash.new {|h,k| h[k] = "convert_#{k}"} include ::Kramdown::Utils::Html include ::Kramdown::Parser::Html::Constants # stolen and twiddled from Kramdown::Converter::Html def inner(e, ind) result = '' ind += 2 e.children.each do |inner_e| result << send(DISPATCHER[inner_e.type], inner_e, ind) end result end # stolen from Kramdown::Converter::Html def convert_text(e, ind) escape_html(e.value, :text) end # much of this is gutted from the innards of Kramdown def convert_toc(e, ind) r = "" r += (" " * ind) + "
  • #{e.value.children.first.value}" if (e.children.length > 1) r += "" end r += "
  • \n" r end # stolen from Jekyll::Converters::Markdown::KramdownParser def convert(content) # Check for use of coderay if @config['kramdown']['use_coderay'] %w[wrap line_numbers line_numbers_start tab_width bold_every css default_lang].each do |opt| key = "coderay_#{opt}" @config['kramdown'][key] = @config['kramdown']['coderay'][key] unless @config['kramdown'].has_key?(key) end end @kramdown = Kramdown::Document.new(content, @config["kramdown"].symbolize_keys) puts inner(@kramdown.to_toc, 0) @kramdown.to_html end end end end end