Геши с уценкой - PullRequest
       38

Геши с уценкой

2 голосов
/ 18 ноября 2010

Я пытаюсь заставить GeSHi работать с уценкой.

Простое использование для Геши выглядит следующим образом:

$geshi = new GeSHi($message, 'c');
print $geshi->parse_code();

Приведенный выше код принимает все сообщение и превращает его в выделенный код

У меня также есть функция уценки

print Markdown($message);

Я пытался использовать функцию обратного вызова для preg_match тегов <pre>, возвращаемых из уценки, и запускал функцию geshi->parse_code(); для возвращаемых значений

Вот мой код

print preg_replace_callback(
   '/<pre.*?>(.*?[<pre.*?>.*<\/pre>]*)<\/pre>/gism',
    create_function(
        // single quotes are essential here,
        // or alternative escape all $ as \$
        '$matches',
        '$geshi = new GeSHi($matches[0], \'php\'); return $geshi->parse_code()'
    ),
    Markdown($blog_res['message']));

Я на правильном пути?

Правильно ли мое регулярное выражение? работает на http://gskinner.com/RegExr/

Спасибо за помощь

Ответы [ 3 ]

3 голосов
/ 03 апреля 2011

для дальнейшего использования, вы можете проверить мой плагин для этого:

https://github.com/drm/Markdown_Geshi

Он основан на обычном плагине уценки, добавляющем блок, помеченный шебангом, для выделения кода, например:

#!php
<?php print('This is PHP code'); ?>

Работает довольно хорошо, и я регулярно использую его в своем блоге.

0 голосов
/ 05 декабря 2013

Я понимаю, что вы [хотели] расширить Markdown, добавив поддержку подсветки синтаксиса GeSHi. Украсить делает это и многое другое. Например, он может отображать графики в DOT .

Подход Beautify к блокам кода GeSHi отличается от drm / Markdown_Geshi тем, что используются "заборы". Например:

~~~ php
<?php print('This is PHP code'); ?>
~~~

Я не уверен, был ли Beautify где-то в прошлом, когда этот вопрос был активным, но, похоже, он заслуживает упоминания в ответе.

0 голосов
/ 18 ноября 2010

это было регулярное выражение: (

вместо

/<pre.*?>(.*?[<pre.*?>.*<\/pre>]*)<\/pre>/gism 

использовать (убрать глобальный флаг)

/<pre.*?>(.*?[<pre.*?>.*<\/pre>]*)<\/pre>/ism 

Но если вы используете уценку, вы должны помнить, чтобы компенсировать code блоки, которые принадлежат им самим, поэтому вам нужно заменить только те, которые находятся в формате <pre><code>...MyCode и пропустите Hello <code>MyCode Поэтому вам нужно следующее

'/<pre.*?><code.*?>(.*?[<pre.*?><code.*?>.*<\/code><\/pre>]*)<\/code><\/pre>/ism',
...