首页 > 解决方案 > Markdown 渲染换行符

问题描述

我正在开发一个项目并为用户提供创建帖子的可能性。加载 Post 时,我调用markdown方法来提取链接并格式化文本。

现在我有一个问题。通过写“1. Example”,帖子中的输出是一个列表。只需编写“1.Example”_ 在点和文本之间没有空格,它就可以正常工作。我的降价方法:

@preview = nil
options = {
  autolink: true,
  hard_wrap: true
}
begin
  URI.extract(text, ['http', 'https', 'www']).each do |uri|
    unless text.include?("<a")
      text = text.gsub( uri, "<a href=\"#{uri}\" target=\"_blank\">#{uri}</a>" )
      @preview = LinkThumbnailer.generate(uri)
    end
  end
rescue OpenSSL::SSL::SSLError => e
end


renderer = Redcarpet::Render::HTML.new(options)
markdown = Redcarpet::Markdown.new(renderer)

markdown.render(text).html_safe

你知道如何解决它..我不想要列表,我只希望输出与输入相同!

感谢您的时间!

编辑添加了一张照片来显示输出。在此处输入图像描述

标签: ruby-on-railsformatruby-on-rails-5markdown

解决方案


默认情况下,您将获得列表。Markdown 毕竟是在寻找它识别的语法以生成标记。

为了跳过特定的降价功能,我认为您需要提供自己的自定义渲染器

如果你定义一个新的渲染器:

class NoListRenderer < Redcarpet::Render::HTML
  def list(contents, list_type)
    contents
  end

  def list_item(text, list_type)
    text
  end
end

并在创建实例时使用该实例而不是默认渲染器类,markdown它应该跳过默认列表处理。(注意。我没有测试过这段代码):

renderer = NoListRenderer.new(options)
markdown = Redcarpet::Markdown.new(renderer)

推荐阅读