【问题标题】:Markdown Render NewlinesMarkdown 渲染换行符
【发布时间】:2018-10-17 23:52:55
【问题描述】:

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

现在我遇到了一个问题。 通过编写“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

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

感谢您的宝贵时间!

编辑添加了一张照片来显示输出。

【问题讨论】:

  • 我不明白。能否请您显示这两个输入的 html 输出?
  • 换行符(在您的标题中提到)与列表(在您的问题中提到)有什么关系?您是否知道 Markdown 包含对列表的支持,是否还有其他您希望忽略的有效 Markdown 语法?
  • 添加了照片!

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


【解决方案1】:

您想在 Markdown 源中使用 backslash escape。正如规则所解释的:

Markdown 允许您使用反斜杠转义来生成文字字符,否则这些字符在 Markdown 的格式化语法中具有特殊含义。

反冲转义支持的字符之一是点 (.)。因此,您的源文本应如下所示:

1\. Example

这会产生这个 HTML:

<p>1. Example</p>

并呈现为:

1。示例

【讨论】:

    【解决方案2】:

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

    为了跳过特定的降价功能,我认为您需要提供自己的 custom renderer

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

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-21
      • 2021-05-09
      • 2021-04-07
      • 2016-08-12
      • 1970-01-01
      相关资源
      最近更新 更多