PHP-код для преобразования текстовых блоков с отступом в четыре пробела в <pre><code> блок [Markdown] - PullRequest
2 голосов
/ 31 марта 2010

Я не очень хорош в PHP и хотел бы иметь функцию PHP, которая превращает это (текстовый блок с отступом в четыре пробела):

    printf("goodbye world!");  /* his suicide note
                                  was in C */

В это:

<pre><code>    printf("goodbye world!");  /* his suicide note
                              was in C */

Оставляя все остальные строки без изменений.

Это то, что делает Markdown. Я нашел этот PHP-порт Markdown (см. function doCodeBlocks()), но я не хочу использовать весь файл Markdown, я просто хочу эту одну функцию.

Может ли кто-нибудь предоставить мне минимальный код PHP, необходимый для того, чтобы это работало? Так что я могу сделать это:

<?php echo markdownPre('Here goes some code:

    var x = 1, y = 2;
    alert(x + y);

That should be a pre block.'); ?>

Ответы [ 3 ]

3 голосов
/ 31 марта 2010

Я не пробовал, но я думаю, что вы можете preg_replace регулярное выражение

/((?:^(?: {4}|\t).*$\n+)+)/m

с <pre><code>$1.

2 голосов
/ 31 марта 2010

Хотя выражение Кенни работает, я бы предложил заменить его на обратный вызов для гибкости:

<code>function markdownPre($in) {
    if(is_array($in)) {
        $code = $in[0];
        // post-process the code, e.g. remove leading spaces
        $code = preg_replace('~^(\x20{4}|\t)~m', '', $code);
        return "<pre>$code
"; } return preg_replace_callback ('~ ( ^ (\ x20 {4} | \ t) (. +) \ п ) + ~ mx ', __FUNCTION__, $ in); }

На этапе «пост-обработки» вы можете делать интересные вещи, например, подсветку синтаксиса.

0 голосов
/ 31 марта 2010

Я не правильно понимаю проблему. Вы хотите что-то вроде -

функция markdownPre ($ str) { return '

 '. $ str. '';
} 

 это вернет 

<pre><code>    printf("goodbye world!");  /* his suicide note
                              was in C */

если вы сдадите

echo markdownPre ('printf ("Прощай, мир!"); / * Его предсмертная записка был в С * / ')

к нему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...