红地毯/蓝布不允许头



是否有一种方法可以使用Redcarpet或blueccloth,这样当它插入markdown时就不会产生任何标题?

例如:

#header 1

收益率:

<标题>头1

报头1(首选)

:

##header 2

收益率:

头2

报头2(首选)

你可以在Markdown中转义字符:

# header 1
# header 1
## header 2
## header 2

…给:

<标题>头1

# header 1

头2

## header 2

如果您不想这样做,或者您正在解析其他人的Markdown并且没有选择,我建议预处理传入的Markdown以完成上述操作:

def pound_filter text
  text.gsub /^#/, '#'
end

使用Redcarpet你可以验证它是否有效:

text = <<-END
  # Hello
  ## World
END
Markdown.new(text.to_html)
# =>  <h1>Hello</h1>
#
#     <h2>World</h2>
Markdown.new(pound_filter text).to_html
# =>  <p># Hello
#     ## World</p>

当然,因为HTML中的换行符实际上并没有这样呈现——它将显示为一行:

# Hello ## World"

…您可能想要扩展它:

def pound_filter text
  text.gsub( /((A^)|([^A]^))#/ ) {|match| "n" == match[0] ? "nn\#" : '#' }
end
pound_filter text
# =>  # Hello
#
#     ## World
Markdown.new(pound_filter text).to_html
# =>  <p># Hello</p>
#
#     <p>## World</p>

最后一条显示为:

#你好

# #世界

不幸的是,你最终会进入这样一个奇怪的领域,在引号里面有一个标题:

> ## Heading

在这里看到一个类似的解决方案:

class RenderWithoutWrap < Redcarpet::Render::HTML
  def postprocess(full_document)
    Regexp.new(/A<p>(.*)</p>Z/m).match(full_document)[1] rescue full_document
  end
end

移除所有的<p> &</p>标签。我就这样用了,它起作用了。我把这个类放在一个名为/config/initializers/render_without_wrap.rb的新文件中。您可以为所有<h1> - <h6>标签做类似的事情

class RenderWithoutHeaders < Redcarpet::Render::HTML
  def postprocess(full_document)
    Regexp.new(/A<h1>(.*)</h1>Z/m).match(full_document)[1] rescue full_document
    Regexp.new(/A<h2>(.*)</h2>Z/m).match(full_document)[1] rescue full_document
    Regexp.new(/A<h3>(.*)</h3>Z/m).match(full_document)[1] rescue full_document
    ...(you get the idea)
  end
end

你可以这样使用

def custom_markdown_parse(text)
  markdown = Redcarpet::Markdown.new(RenderWithoutHeaders.new(
    filter_html: true,
    hard_wrap: true,
    other_options: its_your_call
  ))
  markdown.render(text).html_safe
end

我还没有测试过,但这是一个想法。

您应该能够用反斜杠转义降价源文本:

# not a header

2。你也可以给它打猴子补丁:

module RedCloth::Formatters::HTML
  [:h1, :h2, :h3, :h4, :h5, :h6].each do |m|
    define_method(m) do |opts|
      "#{opts[:text]}n"
    end
  end
end

考虑到Markdown预解析很难,而且Markdown允许插入HTML,那么从生成的HTML中去掉标题元素怎么样?

相关内容

  • 没有找到相关文章

最新更新