class MagicReveal::SlideRenderer

Custom renderer so the HTML is the right format for Reveal.js.

Attributes

has_shown_slides[RW]

Public Class Methods

markdown_renderer() click to toggle source
# File lib/magic_reveal/slide_renderer.rb, line 16
def self.markdown_renderer
  Redcarpet::Markdown.new(
    new,
    space_after_headers: true,
    filter_html: true,
    fenced_code_blocks: true,
    no_intra_emphasis: true
  )
end
new() click to toggle source
Calls superclass method
# File lib/magic_reveal/slide_renderer.rb, line 12
def initialize
  super(no_styles: true)
end

Public Instance Methods

block_code(code, language) click to toggle source
# File lib/magic_reveal/slide_renderer.rb, line 54
def block_code(code, language)
  [].tap do |output|
    output << (language ? "<pre class=\"#{language}\">"  : '<pre>')
    output << '<code>'

    output << CGI.escapeHTML(prepare_code code)
    output << '</code>'
    output << '</pre>'
  end.join('')
end
doc_header() click to toggle source
# File lib/magic_reveal/slide_renderer.rb, line 26
def doc_header
  @has_shown_slides = false
  "<!-- generated by magic_reveal v#{VERSION} on #{Time.now} -->"
end
header(text, header_level, anchor = nil) click to toggle source
# File lib/magic_reveal/slide_renderer.rb, line 35
def header(text, header_level, anchor = nil)
  [].tap do |output|
    output << '</section>' if has_shown_slides
    @has_shown_slides = true
    anchor_html = anchor ? " id=\"#{anchor}\"" : ''

    output << '<section>'
    output << "<h#{header_level}#{anchor_html}>#{text}</h#{header_level}>"
  end.join("\n")
end
prepare_code(code) click to toggle source
# File lib/magic_reveal/slide_renderer.rb, line 46
def prepare_code(code)
  if code =~ /\A\s*@@source\s*=\s*(?<filename>.*)\s*\Z/
    File.read Regexp.last_match[:filename]
  else
    code.sub(/\A\s*/, '').sub(/\s*\Z/, '')
  end
end