Sha256: 3d4b1406002c5b33a93e00710325bdfb4d09d0b6a10d636a03f5368431e161c6

Contents?: true

Size: 1.31 KB

Versions: 1

Compression:

Stored size: 1.31 KB

Contents

require "pathname"
require "active_support/concern"
require "active_support/core_ext/object/blank"
require "dionysus/redcarpet"

module Dionysus
  module Redcarpet
    module Includes
      extend ActiveSupport::Concern

      included do
        if method_defined?(:preprocess)
          alias_method_chain :preprocess, :includes
        else
          alias_method :preprocess, :preprocess_with_includes
        end
      end

      def preprocess_with_includes(full_document)
        lines = full_document.split($/)
        lines.each_with_index do |ln, i|
          if m = ln.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?)
              lines[i] = newlines
            else
              warn "[WARNING] Cannot find path %s to include"%[path.to_s]
            end
          end
        end
        full_document = lines.flatten.join("\n")

        if respond_to? :preprocess_without_includes
          preprocess_without_includes(full_document)
        else
          full_document
        end
      end
    end
  end
end

Redcarpet::Render::HTML.send(:include, Dionysus::Redcarpet::Includes)

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
dionysus-2.1.0 lib/dionysus/redcarpet/includes.rb