У меня есть введенный пользователем текст разметки, хранящийся в базе данных, который мне нужно визуализировать с помощью специального рендеринга Redcarpet (для создания PDF-файла Prawn). Для разрывов одной строки (т. Е. "\r\n"
) рендеринг правильно обрабатывает перерыв. Однако, когда текст содержит несколько разрывов строк в строке (то есть "\r\n\r\n"
), средство рендеринга уценки удаляет и игнорирует их.Уценка Redcarpet игнорирует множественные разрывы строк
Кроме того, метод linebreak
никогда не вызывается в моем настраиваемом рендерере, в то время как методыи emphasis
.
Пример рубин сценарий:
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 символов пробела рассматриваются как один». Учитывая, что моя потребность была специфической для того, чтобы сделать отображение в формате PDF таким же, как в браузере, я запускал '.gsub (" \ r \ n ", '
') .gsub (" \ r \ n ", '')' (примечание 2 пробелы в начале первой строки поиска) в строке перед рендерингом. Это не кажется очень элегантным, но они показывают один и тот же контент во всех моих тестах. – roy