Геши с уценкой
Я пытаюсь заставить Геши работать с markdown.
Простое использование геши заключается в следующем:
$geshi = new GeSHi($message, 'c');
print $geshi->parse_code();
Приведенный выше код принимает все сообщение целиком и превращает его в выделенный код
У меня также есть функция уценки
print Markdown($message);
Я пытался использовать функцию обратного вызова для preg_match
тегов <pre>
, возвращенных из markdown, и запустить функцию 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 answers
Для дальнейшего использования вы можете проверить мой плагин для этого:
Https://github.com/drm/Markdown_Geshi
Он основан на обычном плагине markdown, добавляющем блок, помеченный символом, для выделения кода, например:
#!php
<?php print('This is PHP code'); ?>
Работает довольно хорошо, и я регулярно использую его в своем собственном блоге.
Это было регулярное выражение:(
Вместо
/<pre.*?>(.*?[<pre.*?>.*<\/pre>]*)<\/pre>/gism
Использовать (удалить глобальный флаг)
/<pre.*?>(.*?[<pre.*?>.*<\/pre>]*)<\/pre>/ism
Но если вы используете markdown, вы должны помнить, что нужно компенсировать блоки code
, которые находятся самостоятельно, поэтому вам нужно заменить только те, которые находятся в формате <pre><code>...MyCode</code></pre>
и исключить Hello <code>MyCode</code>
, Поэтому вам нужно следующее
'/<pre.*?><code.*?>(.*?[<pre.*?><code.*?>.*<\/code><\/pre>]*)<\/code><\/pre>/ism',
Я понимаю, что вы [хотели] расширить уценку, добавив поддержку подсветки синтаксиса GeSHi. Украсить делает это и многое другое. Например, он может отображать графики в ТОЧКА.
Подход Beautify к блокам кода GeSHi отличается от drm/markdown_geshi тем, что используются "ограждения". Например:
~~~ php
<?php print('This is PHP code'); ?>
~~~
Я не уверен, был ли Beautify в прошлом, когда этот вопрос был активным, но он показался достойным упоминания в ответе.