Redcarpet和pygments结合进行markdown显示

redcarpet


用于将内容转化成markdown形式进行显示,它提供许多配置,具体操作方式如下:

1.首先是在gemfile中加入redcarpet.

2.安装redcarpet

1
gem install redcarpet

3.以前可直接在要显示的view中加入如下代码:

1
<%= Redcarpet::Markdown.new(render, :extension => {})%>

现在在辅助方法中写如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
def markdown(text)
      require 'redcarpet'
      render = Redcarpet::Render::HTML
      options = {
          autolink: true,
          filter_html: true,
          fenced_code_blocks: true,
    no_intra_emphasis: true
      }
      markdown = Redcarpet::Markdown.new(render.new(hard_wrap: true), options)
      markdown.render(text).html_safe
  end

4.在view中加入显示markdown的代码:

1
<%= raw(markdown.render(@post.content).html_safe) %>

pygments


可以和redcarpet很好的结合,用于语法高亮设置。 具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 def markdown(text)
          require 'redcarpet'
          render = HTMLwithPygments
          options = {
                  autolink: true,
                  filter_html: true,
                  prettify: true,
                  fenced_code_blocks: true,
                  no_intra_emphasis: true
          }
          markdown = Redcarpet::Markdown.new(render.new(hard_wrap: true), options)
          markdown.render(text).html_safe
  end

  class HTMLwithPygments < Redcarpet::Render::HTML
          require 'pygments'
          def block_code(code, language)
                  Pygments.highlight(code, :lexer => language, :options => {:linenos => true})
          end
  end

注意:

  1. 辅助方法要引入文件redcarpet和pygments。
  2. hard_wrap必须Redcarpet::Render::HTML实例化时进行配置。
  3. 必须有fenced_code_blocks才能将代码块放入代码框中。

参考:

  1. github上的redcarpet

  2. github上的pygments

  3. 视频参考

Comments