Как рассматривать одиночный перевод строки как реальный разрыв строки в PHP Markdown? - PullRequest
10 голосов
/ 19 января 2010

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

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

Лучшее, что я мог придумать, это:

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

Но это очень неожиданно.

Ответы [ 4 ]

14 голосов
/ 22 марта 2011

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

function doHardBreaks($text) {

и измените прег шаблон ниже:

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

до:

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

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

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

1 голос
/ 13 ноября 2012

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

$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 со вкусом

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

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

0 голосов
/ 09 июля 2010

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

preg_replace('/(?<!\n)\n(?![\n\*\#\-])/', "  \n", $content);
0 голосов
/ 19 января 2010

PHP-функция nl2br не обрезает ее?

nl2br - вставляет разрывы строки HTML перед всеми новыми строками в строке

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

Если вы также хотите удалить все разрывы строк (вставки nl2br
), вы можете сделать:

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

Если нет, пожалуйста, опишите, почему ваше решение не работает, и что вы хотели бы исправить.

...