Sha256: 5188fb1df4fd1a0e2cd70370d9338b06a920d5e1d317b85d704d6dcf8719e6d3

Contents?: true

Size: 1.35 KB

Versions: 1

Compression:

Stored size: 1.35 KB

Contents

# frozen_string_literal: true

require 'yaml'
require 'redcarpet'
require 'rouge'
require 'rouge/plugins/redcarpet'

module Trifle
  module Docs
    module Harvester
      module Markdown
        class Render < Redcarpet::Render::HTML
          include Rouge::Plugins::Redcarpet
        end

        class Sieve < Harvester::Sieve
          def match?
            file.end_with?('.md')
          end

          def to_url
            file.gsub(%r{^#{path}/}, '')
                .gsub(%r{/?index\.md}, '')
                .gsub(/\.md/, '')
          end
        end

        class Conveyor < Harvester::Conveyor
          def content
            @content ||= Redcarpet::Markdown.new(
              Render.new(with_toc_data: true),
              fenced_code_blocks: true,
              disable_indented_code_blocks: true,
              footnotes: true
            ).render(data.sub(/^---(.*?)---(\s*)/m, ''))
          end

          def meta
            @meta ||= (YAML.safe_load(data[/^---(.*?)---(\s*)/m].to_s) || {}).merge(
              'url' => "/#{url}",
              'breadcrumbs' => url.split('/'),
              'toc' => toc
            )
          end

          def toc
            @toc ||= Redcarpet::Markdown.new(
              Redcarpet::Render::HTML_TOC
            ).render(data.sub(/^---(.*?)---(\s*)/m, ''))
          end
        end
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
trifle-docs-0.1.1 lib/trifle/docs/harvester/markdown.rb