require "pathname" require "dionysus/redcarpet" require "active_support/core_ext/object/blank" module Dionysus module Redcarpet # This is an extension to Redcarpet that allows you to include a file, preprocessor. # # @example README.md # = This is my README # <<< LICENSE.txt module Includes extend ActiveSupport::Concern included do preprocess_line do |renderer, line| if m = line.match(LINE_DIRECTIVE_REGEXP) path = Pathname.new(m[1]) if path.file? newlines = path.readlines newlines.collect! {|ln| ln.chomp} newlines.shift while(newlines.first.blank?) newlines.pop while(newlines.last.blank?) line = newlines.join("\n") line = renderer.preprocess(line) else warn "[WARNING] Cannot find path %s to include"%[path.to_s] end end line end end end end end Redcarpet::Render::HTML.send(:include, Dionysus::Redcarpet::Includes)