Redcarpet 降价忽略多个换行符
Redcarpet markdown ignoring multiple line breaks
我将用户输入的降价文本存储在数据库中,我需要使用自定义 Redcarpet 渲染器(用于 Prawn PDF 生成)进行渲染。对于单个换行符(即 "\r\n"
),渲染器会正确处理换行符。但是,当文本包含一行中的多个换行符时(即 "\r\n\r\n"
),Markdown 渲染器会删除并忽略它们。
此外,linebreak
方法从未在我的自定义渲染器中调用,而 paragraph
和 emphasis
方法是。
示例 ruby 脚本:
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"
任何数量的换行符(多于一个)在 markdown 中都被视为一个段落,因此解析器只是吃掉额外的换行符,它与渲染器无关。
您可以继承 HTML 渲染器以更好地理解它的工作原理。
class TestRenderer < Redcarpet::Render::HTML
另请参阅 this answer,其中包含有关如何添加多个换行符的信息(也许您可以在渲染 markdown 之前将 "\r\n"
替换为 "\r\n "
)
我将用户输入的降价文本存储在数据库中,我需要使用自定义 Redcarpet 渲染器(用于 Prawn PDF 生成)进行渲染。对于单个换行符(即 "\r\n"
),渲染器会正确处理换行符。但是,当文本包含一行中的多个换行符时(即 "\r\n\r\n"
),Markdown 渲染器会删除并忽略它们。
此外,linebreak
方法从未在我的自定义渲染器中调用,而 paragraph
和 emphasis
方法是。
示例 ruby 脚本:
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"
任何数量的换行符(多于一个)在 markdown 中都被视为一个段落,因此解析器只是吃掉额外的换行符,它与渲染器无关。
您可以继承 HTML 渲染器以更好地理解它的工作原理。
class TestRenderer < Redcarpet::Render::HTML
另请参阅 this answer,其中包含有关如何添加多个换行符的信息(也许您可以在渲染 markdown 之前将 "\r\n"
替换为 "\r\n "
)