我试图让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/
感谢您的帮助
答案 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是否会回来,但在答案中似乎值得一提。