Class: Jekyll::MarkdownConverter

Inherits:
Converter show all
Defined in:
lib/jekyll/converters/markdown.rb

Constant Summary

Constants inherited from Plugin

Plugin::PRIORITIES

Instance Method Summary collapse

Methods inherited from Converter

#initialize, pygments_prefix, #pygments_prefix, pygments_suffix, #pygments_suffix

Methods inherited from Plugin

<=>, inherited, #initialize, priority, safe, subclasses

Constructor Details

This class inherits a constructor from Jekyll::Converter

Instance Method Details

#convert(content) ⇒ Object



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'lib/jekyll/converters/markdown.rb', line 87

def convert(content)
  setup
  case @config['markdown']
    when 'redcarpet'
      Redcarpet.new(content, *@redcarpet_extensions).to_html
    when 'kramdown'
      # Check for use of coderay
      if @config['kramdown']['use_coderay']
        Kramdown::Document.new(content, {
          :auto_ids      => @config['kramdown']['auto_ids'],
          :footnote_nr   => @config['kramdown']['footnote_nr'],
          :entity_output => @config['kramdown']['entity_output'],
          :toc_levels    => @config['kramdown']['toc_levels'],
          :smart_quotes  => @config['kramdown']['smart_quotes'],

          :coderay_wrap               => @config['kramdown']['coderay']['coderay_wrap'],
          :coderay_line_numbers       => @config['kramdown']['coderay']['coderay_line_numbers'],
          :coderay_line_number_start  => @config['kramdown']['coderay']['coderay_line_number_start'],
          :coderay_tab_width          => @config['kramdown']['coderay']['coderay_tab_width'],
          :coderay_bold_every         => @config['kramdown']['coderay']['coderay_bold_every'],
          :coderay_css                => @config['kramdown']['coderay']['coderay_css']
        }).to_html
      else
        # not using coderay
        Kramdown::Document.new(content, {
          :auto_ids      => @config['kramdown']['auto_ids'],
          :footnote_nr   => @config['kramdown']['footnote_nr'],
          :entity_output => @config['kramdown']['entity_output'],
          :toc_levels    => @config['kramdown']['toc_levels'],
          :smart_quotes  => @config['kramdown']['smart_quotes']
        }).to_html
      end
    when 'rdiscount'
      rd = RDiscount.new(content, *@rdiscount_extensions)
      html = rd.to_html
      if rd.generate_toc and html.include?(@config['rdiscount']['toc_token'])
        html.gsub!(@config['rdiscount']['toc_token'], rd.toc_content)
      end
      html
    when 'maruku'
      Maruku.new(content).to_html
  end
end

#matches(ext) ⇒ Object



78
79
80
81
# File 'lib/jekyll/converters/markdown.rb', line 78

def matches(ext)
  rgx = '(' + @config['markdown_ext'].gsub(',','|') +')'
  ext =~ Regexp.new(rgx, Regexp::IGNORECASE)
end

#output_ext(ext) ⇒ Object



83
84
85
# File 'lib/jekyll/converters/markdown.rb', line 83

def output_ext(ext)
  ".html"
end

#setupObject



9
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/jekyll/converters/markdown.rb', line 9

def setup
  return if @setup
  # Set the Markdown interpreter (and Maruku self.config, if necessary)
  case @config['markdown']
    when 'redcarpet'
      begin
        require 'redcarpet'
        @redcarpet_extensions = @config['redcarpet']['extensions'].map { |e| e.to_sym }
      rescue LoadError
        STDERR.puts 'You are missing a library required for Markdown. Please run:'
        STDERR.puts '  $ [sudo] gem install redcarpet'
        raise FatalException.new("Missing dependency: redcarpet")
      end
    when 'kramdown'
      begin
        require 'kramdown'
      rescue LoadError
        STDERR.puts 'You are missing a library required for Markdown. Please run:'
        STDERR.puts '  $ [sudo] gem install kramdown'
        raise FatalException.new("Missing dependency: kramdown")
      end
    when 'rdiscount'
      begin
        require 'rdiscount'

        # Load rdiscount extensions
        @rdiscount_extensions = @config['rdiscount']['extensions'].map { |e| e.to_sym }
      rescue LoadError
        STDERR.puts 'You are missing a library required for Markdown. Please run:'
        STDERR.puts '  $ [sudo] gem install rdiscount'
        raise FatalException.new("Missing dependency: rdiscount")
      end
    when 'maruku'
      begin
        require 'maruku'

        if @config['maruku']['use_divs']
          require 'maruku/ext/div'
          STDERR.puts 'Maruku: Using extended syntax for div elements.'
        end

        if @config['maruku']['use_tex']
          require 'maruku/ext/math'
          STDERR.puts "Maruku: Using LaTeX extension. Images in `#{@config['maruku']['png_dir']}`."

          # Switch off MathML output
          MaRuKu::Globals[:html_math_output_mathml] = false
          MaRuKu::Globals[:html_math_engine] = 'none'

          # Turn on math to PNG support with blahtex
          # Resulting PNGs stored in `images/latex`
          MaRuKu::Globals[:html_math_output_png] = true
          MaRuKu::Globals[:html_png_engine] =  @config['maruku']['png_engine']
          MaRuKu::Globals[:html_png_dir] = @config['maruku']['png_dir']
          MaRuKu::Globals[:html_png_url] = @config['maruku']['png_url']
        end
      rescue LoadError
        STDERR.puts 'You are missing a library required for Markdown. Please run:'
        STDERR.puts '  $ [sudo] gem install maruku'
        raise FatalException.new("Missing dependency: maruku")
      end
    else
      STDERR.puts "Invalid Markdown processor: #{@config['markdown']}"
      STDERR.puts "  Valid options are [ maruku | rdiscount | kramdown ]"
      raise FatalException.new("Invalid Markdown process: #{@config['markdown']}")
  end
  @setup = true
end