class Showoff::Compiler

Public Class Methods

new(options) click to toggle source
# File lib/showoff/compiler.rb, line 15
def initialize(options)
  @options = options
  @profile = profile
end

Public Instance Methods

profile() click to toggle source

Configures Tilt with the selected engine and options.

Returns render options profile hash

Source:

https://github.com/puppetlabs/showoff/blob/3f43754c84f97be4284bb34f9bc7c42175d45226/lib/showoff_utils.rb#L671-L720

TODO: per slide profiles of render options

# File lib/showoff/compiler.rb, line 27
def profile
  renderer = Showoff::Config.get('markdown')
  profile  = Showoff::Config.get(renderer)

  begin
    # Load markdown configuration
    case renderer
    when 'rdiscount'
      Tilt.prefer Tilt::RDiscountTemplate, "markdown"

    when 'maruku'
      Tilt.prefer Tilt::MarukuTemplate, "markdown"
      # Now check if we can go for latex mode
      require 'maruku'
      require 'maruku/ext/math'

      if profile[:use_tex]
        MaRuKu::Globals[:html_math_output_mathml] = false
        MaRuKu::Globals[:html_math_output_png]    = true
        MaRuKu::Globals[:html_math_engine]        = 'none'
        MaRuKu::Globals[:html_png_engine]         = 'blahtex'
        MaRuKu::Globals[:html_png_dir]            = profile[:png_dir]
        MaRuKu::Globals[:html_png_url]            = profile[:html_png_url]
      end

    when 'bluecloth'
      Tilt.prefer Tilt::BlueClothTemplate, "markdown"

    when 'kramdown'
      Tilt.prefer Tilt::KramdownTemplate, "markdown"

    when 'commonmarker', 'commonmark'
      Tilt.prefer Tilt::CommonMarkerTemplate, "markdown"

    when 'redcarpet', :default
      Tilt.prefer Tilt::RedcarpetTemplate, "markdown"

    else
      raise 'Unsupported markdown renderer'

    end
  rescue LoadError
    puts "ERROR: The #{renderer} markdown rendering engine does not appear to be installed correctly."
    exit 1
  end

  profile
end
render(content) click to toggle source

Compiles markdown and all Showoff extensions into the final HTML output and notes.

@param content [String] markdown content. @return [[String, Array<String>]] A tuple of (html content, array of notes contents)

@todo I think the update_image_paths() malarky is redundant. Verify that.

# File lib/showoff/compiler.rb, line 82
def render(content)
  Variables::interpolate!(content)
  I18n.selectLanguage!(content)

  html = Tilt[:markdown].new(nil, nil, @profile) { content }.render
  doc  = Nokogiri::HTML::DocumentFragment.parse(html)

  Form.render!(doc, @options)
  Fixups.updateClasses!(doc)
  Fixups.updateLinks!(doc)
  Fixups.updateSyntaxHighlighting!(doc)
  Fixups.updateCommandlineBlocks!(doc)
  Fixups.updateImagePaths!(doc, @options)
  Glossary.render!(doc)
  Downloads.scanForFiles!(doc, @options)

  # This call must be last in the chain because it separates notes from the
  # content and returns them separately. If it's not last, then the notes
  # won't have all the compilation steps applied to them.
  #
  # must pass in extra context because this will render markdown itself
  Notes.render!(doc, @profile, @options)
end