首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Redcarpet markdown忽略多个换行符

Redcarpet markdown忽略多个换行符
EN

Stack Overflow用户
提问于 2017-02-14 23:10:13
回答 1查看 785关注 0票数 0

我将用户输入的markdown文本存储在数据库中,需要使用自定义的Redcarpet渲染器进行渲染(用于生成Prawn PDF )。对于单行换行(即"\r\n"),渲染器会正确处理换行。但是,当文本在一行中包含多个换行符(即"\r\n\r\n")时,markdown渲染器将删除并忽略它们。

此外,在我的自定义渲染器中,永远不会调用linebreak方法,而调用paragraphemphasis方法。

示例ruby脚本:

代码语言:javascript
复制
require 'redcarpet'

class TestRenderer < Redcarpet::Render::Base
  def paragraph(text)
    text
  end
  def emphasis(text)
    '<foo>' + text + '</foo>'
  end
  def linebreak
    '<should this be called?>'
  end
end

def markdown_this(content)
  markdown = Redcarpet::Markdown.new(TestRenderer)
  markdown.render(content.to_s)
end

s = '_testing_\r\nthat\r\nthis\r\n\r\nline\r\n\r\n\r\nbreaks'
s_rn = s.gsub '\r\n', "\r\n"
s_n = s.gsub '\r\n', "\n"

puts "\n\n"
puts 'raw string -----------------------'
puts s

puts 'gsub \r\n string -----------------'
puts s_rn

puts 'gsub \n string -------------------'
puts s_n

puts 'markdown \r\n string -------------'
puts markdown_this(s_rn)

puts 'markdown \n string ---------------'
puts markdown_this(s_n)

puts '----------------------------------'
puts "\n\n"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-15 23:59:13

在markdown中,任何数量的换行符(多于一个)都被认为是一个段落,因此解析器只处理多余的换行符,与渲染器无关。

您可以继承HTML渲染器,以便更好地了解它的工作原理。

代码语言:javascript
复制
class TestRenderer < Redcarpet::Render::HTML

另请参阅this answer,其中包含有关如何添加多个换行符的信息(也许您可以在呈现标记之前将"\r\n"替换为"\r\n&nbsp;" )

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42229616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档