Syntax Highlighter这个相信大家非常的熟悉了。
SyntaxHighlighter 是 Alex Gorbatchev 2004年开始开发的一个Javascript web客户端代码高亮库。
之前的主页在google code,现在已经转移到了alexgorbatchev.com。当前最新的版本是3.0.83,兼容的浏览器有:Internet Explorer 7.0 / Mozilla Firefox 3.0 / Google Chrome 0.2 / Safari 3.1 / Opera 9.6,IE6并不被支持。1.x的版本应该是支持的。
最近大家应该是看到了,首页会弹出一个提示框,表示没有js的格式刷。于是我看了一下插件(Syntax Highlighter for WordPress)的代码,用到了短代码,比如:[galley] 就是调用 WordPress 默认的相册的短代码,详细请看Shortcode_API。
也就是说,插入数据库的为[galley] 这样的代码,然后在展现的时候把[galley] 输出为<pre>同时根据需要的格式加载相应的格式刷,对代码进行渲染。代码如下:
if (!$this->isKtai() && !is_feed()) { if (version_compare($this->version, "2.0", "<")) { // -- for SyntaxHighlighter 1.5.x $pre_tag = '<pre' . ' name="code"' . ' class="'.$startTag.($pVal > 1 ? ":firstLine[{$pVal}]" : '') . '"' . '>'; } else { // -- for SyntaxHighlighter 2.x or 3.x $pre_tag = '<pre' . ' class="' . "brush: {$startTag};" . ($pVal > 1 ? " first-line: {$pVal};" : '') . (!empty($highlight_lines) ? " highlight: [{$highlight_lines}];" : '') . (strtolower($collapse) == 'true' ? ' collapse: true;' : '') . (strtolower($gutter) == 'false' ? ' gutter: false;' : '') . (strtolower($ruler) == 'true' ? ' ruler: true;' : '') . (strtolower($toolbar) == 'false' ? ' toolbar: false;' : '') . (strtolower($smart_tabs) == 'false' ? ' smart-tabs: false;' : '') . (strtolower($tab_size) != '4' ? ' tab-size: ' . (int)$tab_size . ';' : '') . (strtolower($auto_link) == 'false' ? ' auto-links: false;' : '') . (strtolower($light) == 'true' ? ' light: true;' : '') . ($font_size != '100%' ? " font-size: {$font_size};" : '') . '"' . '>'; } } $outTxt .= "{$pre_tag}{$inTxt}</pre>\n\n";
根据SyntaxHighlighter的说明,我们知道syntaxHighlightter会处理<pre/>标签的东西,根据class=``"brush:XXx"这样的去调用相应的格式渲染js里的方法对相应代码进行处理,而如果你的代码不是由【php】【/php】这样的代码包裹的话,这个插件就不会在页面加入相应的格式渲染文件,从而出现弹窗来提示了。
而我是用Windows Live Writer + Code Snippet With Syntaxhighlighter Support for Windows Live Writer来写日志的,当然就会出现那个弹窗了。
综上,修改插件中查找内容的正则表达式那一块可以达到效果,我对php非常不懂,就再找另一个插件了。
后来直接用了另一个插件(Syntax Highlighter ComPress),可以识别pre,现在显示正常。