Module: Markdown::Engine

Included in:
Converter, Wrapper
Defined in:
lib/markdown/engines/maruku.rb,
lib/markdown/engines/kramdown.rb,
lib/markdown/engines/bluecloth.rb,
lib/markdown/engines/rdiscount.rb,
lib/markdown/engines/redcarpet.rb,
lib/markdown/engines/pandoc_ruby.rb,
lib/markdown/engines/rpeg_markdown.rb

Instance Method Summary collapse

Instance Method Details

#bluecloth_to_html(content, options = {}) ⇒ Object



10
11
12
13
14
# File 'lib/markdown/engines/bluecloth.rb', line 10

def bluecloth_to_html( content, options={} )
  puts "  Converting Markdown-text (#{content.length} bytes) to HTML using library bluecloth..."

  BlueCloth.new( content ).to_html
end

#bluecloth_versionObject



6
7
8
# File 'lib/markdown/engines/bluecloth.rb', line 6

def bluecloth_version
  BlueCloth::VERSION
end

#kramdown_to_html(content, options = {}) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/markdown/engines/kramdown.rb', line 10

def kramdown_to_html( content, options={} )

  h = {}
  
  # todo: find an easier (more generic?) way to setup hash - possible?
  h[ :auto_ids    ]   = options.fetch( 'auto_ids', nil )     if options.fetch( 'auto_ids',      nil )
  h[ :footnote_nr ]   = options.fetch( 'footnote_nr',nil )   if options.fetch( 'footnote_nr',   nil )
  h[ :entity_output ] = options.fetch( 'entity_output',nil ) if options.fetch( 'entity_output', nil )
  h[ :toc_levels ]    = options.fetch( 'toc_levels',nil )    if options.fetch( 'toc_levels',    nil )
  h[ :smart_quotes ]  = options.fetch( 'smart_quotes',nil )  if options.fetch( 'smart_quotes',  nil )
  
  show_banner =  options.fetch( 'banner', true)

  # puts "  Converting Markdown-text (#{content.length} bytes) to HTML using library kramdown (#{Kramdown::VERSION})"
  # puts "  using options: #{h.to_json}"

  ## allow fenced blocks a la github flavored markup
  # -- thanks zenweb for inspiration:
  #  https://github.com/seattlerb/zenweb/blob/master/lib/zenweb/plugins/markdown.rb

  content = content.
    gsub(/^``` *(\w+)/) { "{:lang=\"#$1\"}\n~~~" }.
    gsub(/^```/, '~~~')
  
  content = Kramdown::Document.new( content, h ).to_html
  
  if show_banner

   # todo: check content size and newlines
   #  check banner option?
   #  only add banner if some newlines and size > treshold?
  
  banner_begin =<<EOS
<!-- === begin markdown block ===

  generated by #{Markdown.banner}
            on #{Time.now} with Markdown engine kramdown (#{Kramdown::VERSION})
              using options #{h.to_json}
  -->
EOS

   banner_end =<<EOS
<!-- === end markdown block === -->
EOS
    content = banner_begin + content + banner_end
  end # if show_banner

  content

end

#kramdown_versionObject



6
7
8
# File 'lib/markdown/engines/kramdown.rb', line 6

def kramdown_version
  Kramdown::VERSION
end

#maruku_to_html(content, options = {}) ⇒ Object



10
11
12
13
14
# File 'lib/markdown/engines/maruku.rb', line 10

def maruku_to_html( content, options={} )
  puts "  Converting Markdown-text (#{content.length} bytes) to HTML using library maruku..."
        
  Maruku.new( content, {:on_error => :raise} ).to_html
end

#maruku_versionObject



6
7
8
# File 'lib/markdown/engines/maruku.rb', line 6

def maruku_version
  Maruku::VERSION
end

#pandoc_ruby_to_html(content, options = {}) ⇒ Object



6
7
8
9
10
# File 'lib/markdown/engines/pandoc_ruby.rb', line 6

def pandoc_ruby_to_html( content, options={} )
  puts "  Converting Markdown-text (#{content.length} bytes) to HTML using library pandoc_ruby..."

  content = PandocRuby.new( content, :from => :markdown, :to => :html ).convert
end

#pandoc_ruby_to_html_incremental(content, options = {}) ⇒ Object



12
13
14
15
16
17
18
# File 'lib/markdown/engines/pandoc_ruby.rb', line 12

def pandoc_ruby_to_html_incremental( content, options={} )
  content = PandocRuby.new( content, :from => :markdown, :to => :html ).convert
  content = content.gsub(/<(ul|ol)/) do |match|
    "#{Regexp.last_match(0)} class='step'"
  end
  content
end

#pandoc_ruby_to_s5(content, options = {}) ⇒ Object

sample how to use your own converter configure in markdown.yml pandoc-ruby:

converter: pandoc-ruby-to-s5


25
26
27
28
29
# File 'lib/markdown/engines/pandoc_ruby.rb', line 25

def pandoc_ruby_to_s5( content, options={} )
  content = PandocRuby.new( content, {:from => :markdown, :to => :s5}, :smart ).convert
  content = content.gsub(/class="incremental"/,'class="step"')
  content = content.to_a[13..-1].join # remove the layout div
end

#pandoc_ruby_to_s5_incremental(content, options = {}) ⇒ Object



31
32
33
34
35
# File 'lib/markdown/engines/pandoc_ruby.rb', line 31

def pandoc_ruby_to_s5_incremental( content, options={} )
  content = PandocRuby.new( content, {:from => :markdown, :to => :s5 }, :incremental, :smart ).convert
  content = content.gsub(/class="incremental"/,'class="step"')
  content = content.to_a[13..-1].join # remove the layout div
end

#rdiscount_to_html(content, options = {}) ⇒ Object



10
11
12
13
14
# File 'lib/markdown/engines/rdiscount.rb', line 10

def rdiscount_to_html( content, options={} )
  puts "  Converting Markdown-text (#{content.length} bytes) to HTML using library rdiscount..."      
  
  RDiscount.new( content ).to_html
end

#rdiscount_versionObject



6
7
8
# File 'lib/markdown/engines/rdiscount.rb', line 6

def rdiscount_version
  RDiscount::VERSION
end

#redcarpet_to_html(content, options = {}) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/markdown/engines/redcarpet.rb', line 10

def redcarpet_to_html( content, options={} )
  
  ## NB: uses redcarpet2
  #
  # see https://github.com/tanoku/redcarpet
  
  extensions_ary = options.fetch( 'extensions', [] )
  show_banner = options.fetch( 'banner', true )

  extensions_hash = {}
  extensions_ary.each do |e|
    extensions_hash[ e.to_sym ] = true
  end

  puts "  Converting Markdown-text (#{content.length} bytes) to HTML using library redcarpet (#{Redcarpet::VERSION}) w/ HTML render"
  puts "  using extensions: #{extensions_ary.to_json}"
  
  redcarpet = Redcarpet::Markdown.new( Redcarpet::Render::HTML, extensions_hash )
  content = redcarpet.render( content )

  if show_banner
    # todo: check content size and newlines
    #  check banner option?
    #  only add banner if some newlines and size > treshold?
  
  banner_begin =<<EOS
<!-- === begin markdown block ===

  generated by #{Markdown.banner}
            on #{Time.now} with Markdown engine redcarpet (#{Redcarpet::VERSION}) w/ HTML render
              using extensions: #{extensions_ary.to_json}
  -->
EOS

  banner_end =<<EOS
<!-- === end markdown block === -->
EOS

    content = banner_begin + content + banner_end
  end # if show_banner

  content
  
end

#redcarpet_versionObject



6
7
8
# File 'lib/markdown/engines/redcarpet.rb', line 6

def redcarpet_version
  Redcarpet::VERSION
end

#rpeg_markdown_to_html(content, options = {}) ⇒ Object



6
7
8
9
10
# File 'lib/markdown/engines/rpeg_markdown.rb', line 6

def rpeg_markdown_to_html( content, options={} )
  puts "  Converting Markdown-text (#{content.length} bytes) to HTML using library rpeg_markdown..."

  PEGMarkdown.new( content ).to_html
end