私はカスタムRedcarpetレンダラー(Prawn PDF生成用)でレンダリングする必要があるデータベースに格納されたユーザー入力マークダウンテキストを持っています。 1行改行(すなわち、"\r\n"
)の場合、レンダラーは改行を正しく処理します。ただし、行に複数の改行が含まれている場合(つまり"\r\n\r\n"
)、マークダウンレンダラーはそれらを削除して無視します。複数行の改行を無視したRedcarpetのマークダウン
また、paragraph
とemphasis
のメソッドがある間は、linebreak
メソッドはカスタムレンダラーで呼び出されません。
例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"
おかげで@glebtv参照してください - あなたは私の精神を介して取得助けました「100個の空白文字は1つとして扱われます」とブロックします。ブラウザと同じようにPDF表示を行う必要があることを考えると、 '.gsub(" \ r \ n "、 '
').gsub(" \ r \ n "、 '')'(注2最初の検索文字列の先頭の空白)をレンダリング前の文字列に追加します。超エレガントではないようですが、すべてのテストで同じ内容を表示しています。 – roy