Module: Jekyll::Filters

Defined in:
lib/jekyll-dyndoc.rb

Overview

module Generators

# Promotes select Dyndoc attributes to Jekyll front matter
class DyndocPreprocessor < Generator
  def generate(site)
    dyndoc_converter = JEKYLL_MIN_VERSION_3 ?
        site.find_converter_instance(Jekyll::Converters::DyndocConverter) :
        site.getConverterImpl(Jekyll::Converters::DyndocConverter)
    dyndoc_converter.setup
    unless (page_attr_prefix = site.config['dyndoc_page_attribute_prefix']).empty?
      page_attr_prefix = %(#{page_attr_prefix}-)
    end
    page_attr_prefix_l = page_attr_prefix.length

    site.pages.each do |page|
      if dyndoc_converter.matches(page.ext)
        next unless (doc = dyndoc_converter.load_header(page.content))

        page.data['title'] = doc.doctitle if doc.header?
        page.data['author'] = doc.author if doc.author

        unless (dyndoc_front_matter = doc.attributes
            .select {|name| name.start_with?(page_attr_prefix) }
            .map {|name, val| %(#{name[page_attr_prefix_l..-1]}: #{val}) }).empty?
          page.data.update(SafeYAML.load(dyndoc_front_matter * "\n"))
        end

        page.data['layout'] = 'default' unless page.data.key? 'layout'
      end
    end

    (JEKYLL_MIN_VERSION_3 ? site.posts.docs : site.posts).each do |post|
      if dyndoc_converter.matches(JEKYLL_MIN_VERSION_3 ? post.data['ext'] : post.ext)
        next unless (doc = dyndoc_converter.load_header(post.content))

        post.data['title'] = doc.doctitle if doc.header?
        post.data['author'] = doc.author if doc.author
        post.data['date'] = DateTime.parse(doc.revdate).to_time if doc.attr? 'revdate'

        unless (dyndoc_front_matter = doc.attributes
            .select {|name| name.start_with?(page_attr_prefix) }
            .map {|name, val| %(#{name[page_attr_prefix_l..-1]}: #{val}) }).empty?
          post.data.update(SafeYAML.load(dyndoc_front_matter * "\n"))
        end

        post.data['layout'] = 'post' unless post.data.key? 'layout'
      end
    end
  end
end

end

Instance Method Summary collapse

Instance Method Details

#dyndocify(input) ⇒ Object

Convert an Dyndoc string into HTML output.

input - The Dyndoc String to convert.

Returns the HTML formatted String.



145
146
147
148
149
150
151
# File 'lib/jekyll-dyndoc.rb', line 145

def dyndocify(input)
  site = @context.registers[:site]
  converter = JEKYLL_MIN_VERSION_3 ?
      site.find_converter_instance(Jekyll::Converters::DyndocConverter) :
      site.getConverterImpl(Jekyll::Converters::DyndocConverter)
  converter.convert(input)
end