Как рассматривать одиночную новую строку как реальный разрыв строки в PHP Markdown?

Я читал http://github.github.com/github-flavored-markdown/

Я хотел бы реализовать эту «модификацию новой строки» в PHP Markdown:

Лучше всего я мог подумать:

$my_html = Markdown($my_text); $my_html = preg_replace("/\n{1}/", "<br/>", $my_html); 

Но это очень непростительно.

Найдите строку в файле уценки:

 function doHardBreaks($text) { 

и измените шаблон preg ниже:

 return preg_replace_callback('/ {2,}\n/', array(&$this, '_doHardBreaks_callback'), $text); 

чтобы:

 return preg_replace_callback('/ {2,}\n|\n{1}/', array(&$this, '_doHardBreaks_callback'), $text); 

Или вы можете просто расширить класс уценки, redeclare 'doHardBreaks' функцию и изменить возвращение на нечто вроде кода выше

С уважением, Ахмад

PHP nl2br -функция не режет?

nl2br – Вставляет строки строки HTML перед всеми символами новой строки в строке

http://php.net/manual/en/function.nl2br.php

Если вы также хотите удалить все строки (nl2br inserts <br/>), вы можете сделать:

 str_replace('\n', '', nl2br($my_html)); 

Если нет, пожалуйста, уточните, как ваше решение выходит из строя, и что вы хотите исправить.

Я придумал следующее решение, подражая большинству частей поведения новой строки gfm. Он передает все соответствующие тесты на странице, указанной в исходном сообщении. Обратите внимание, что код ниже препроцессов маркирует и выводит приправленную уценку.

 preg_replace('/(?<!\n)\n(?![\n\*\#\-])/', " \n", $content); 

В качестве специального скрипта вы можете просто запустить это в своей строке перед запуском скрипта markdown

 $text = preg_replace_callback("/^[\w\<][^\n]*\n+/msU",function($x){ $x = $x[0]; $x = preg_match("/\n{2}/",$x,$match)? $x: trim($x)." \r\n"; return $x; },$text); $my_html = Markdown($text); 

Основано на уценке github flavored

 text.gsub!(/^[\w\<][^\n]*\n+/) do |x| x =~ /\n{2}/ ? x : (x.strip!; x << " \n") end 

PS Я не лучший в регулярном выражении, и я не знаю, какой язык программирования использует github, поэтому я импровизировал