Geshi与Markdown

时间:2010-11-18 17:10:15

标签: php syntax-highlighting markdown preg-replace-callback geshi

我试图让GeSHi与降价合作。

Geshi的一个简单用法如下:

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

上面的代码接收整个消息并将其转换为突出显示的代码

我也有Markdown功能

print Markdown($message);

我尝试使用回调功能preg_match从markdown返回的<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 个答案:

答案 0 :(得分:3)

以备将来参考,您可能需要查看我的插件:

https://github.com/drm/Markdown_Geshi

它基于常规markdown插件添加标记为shebang的块以突出显示代码,如下所示:

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

效果很好,我经常在自己的博客上使用它。

答案 1 :(得分:0)

这是正则表达式:(

而不是

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

使用(删除全局标志)

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

但是如果你使用markdown,你必须记住要补偿自己的code块,因此你只需要替换格式为<pre><code>...MyCode</code></pre>的块并离开out Hello <code>MyCode</code>因此您需要以下

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

答案 2 :(得分:0)

据我所知,您正在寻求扩展Markdown,增加了对GeSHi语法高亮的支持。 Beautify做到这一点以及更多。例如,它可以在DOT中呈现图形。

Beautify对GeSHi代码块的方法与drm/Markdown_Geshi的不同之处在于使用了“fences”。例如:

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

当这个问题激活时,我不确定Beautify是否会回来,但在答案中似乎值得一提。