如何修改redcarpet markdown,以便可以处理类



我正在使用RedCarpet Markdown我的Rails网站上。通常,我想将类(或其他属性)添加到段落,表或其他元素中,但不允许。如果我用HTML替换Markdown元素,那么我也需要用HTML替换内部降价,这是一个麻烦。

例如,我想将类"表"添加到Markdown表元素(因此它获得Bootstrap的表造型),但是然后我需要用HTML替换Markdown表。

最简单的解决方案是什么?是否有一种简单的方法来修改降价以便可以处理类?另外,是否可以在HTML元素中允许降价?

示例更新

我想将一类添加到DIV,表格或段落中,但仍将Markdown保留在元素内。例如,我想生成以下HTML:

<p class="cool">
  <b>Hello world</b> <a href="http://google.com">Google</a>
</p>

有2个可能的解决方案,但我不知道如何使用RedCarpet Markdown进行操作:

  1. 获取课程的特殊Markdown语法,例如:

    {class: cool}
    **Hello world** [Google](http://google.com)

  2. 允许Markdown在HTML元素中工作:

    <p class="cool">
    **Hello world** [Google](http://google.com)
    </p>

目前,我只是在纯HTML中执行此类元素而没有降级。但是我该如何工作#1或#2工作?

您可以构建自己的渲染器(基于Redcarpet::Render::HTML),它将覆盖您对自定义感兴趣的方法:

自定义渲染器是通过从现有渲染器继承而创建的。 内置渲染器,HTMLXHTML可能会这样扩展:

# create a custom renderer that allows highlighting of code blocks
class HTMLwithPygments < Redcarpet::Render::HTML
  def block_code(code, language)
    Pygments.highlight(code, :lexer => language)
  end
end
markdown = Redcarpet::Markdown.new(HTMLwithPygments, :fenced_code_blocks => true)

但是也可以从头开始创建新的渲染器(请参阅 lib/redcarpet/render_man.rb用于实现的示例 manpage渲染器)

<<snip>>

渲染器可以实现以下实例方法:

<<snip>>

  • 表(标题,身体)

<<snip>>

  • raw_html(raw_html)

例如,要在RAW HTML内启用Markdown,我建议声明一个<markdown>元素,您可以提取并渲染(警告 - 未经测试的代码):

def raw_html(html)
  html.gsub(/<markdown>(.*)</markdown>/) { render $1 }
end

覆盖这些方法要么将所需的类添加到您的表格中,要么从RAW HTML中的元素递归调用render

相关内容

  • 没有找到相关文章

最新更新