Geshibot是一个Joomla的标准触发器(mambot),基于著名的Geshi程序开发。说实话,我一看到Geshi这个名字,老是联想到汉语拼音,怀疑它是不是“葛氏”的意思啊。后来才知道,Geshi 是Generic Syntax Highlighter(通用语法高亮显示)的缩写。呵呵,原来是专门作程序代码嵌入显示的。
用Joomla建站时,难免有些文章中需要插入一段代码,比如像本站的“教程”栏目。凡是涉及修改程序代码的示范,总要把源代码及修改方法清清楚楚地介绍给读者。但是,Joomla本身对插入代码这件事情处理得不够好。在安装Joomla时,可以看到已经内置一个叫做Geshi的触发器,但是功能要弱得多,并且默认是未发布的。
于是“有高人出,发Gehsibot以利万民”,呵呵。
Geshibot是将Geshi这款独立的代码高亮显示程序打包成为标准触发器,并且加入一些新特性。本站已经将它汉化并发布到下载栏目。安装过程与其他触发器相同。安装后在后台进行简单设置并发布此触发器,就能在文章中使用了。
Geshibot的使用语法支持两种标记,即 和<pre>。当然,在后台参数设置中,你也可以只选定支持其中一个。</p>
<p dir="ltr">Geshibot显示程序代码的优点有: </p>
<ul style="margin-right: 0px;" dir="ltr">
<ul>
<li>显示行号; </li>
<li>可以根据不同计算机语言进行相应高亮方式调整; </li>
<li>支持几乎所有计算机语言,包括常见的BASIC、C、C++、HTML、PHP、ASP、DELPHI等; </li>
<li>可以自定义CSS样式</li></ul></ul>
<p>在文章中需要插入代码的地方,将你的要展示的代码用{geshibot}代码
%E5%92%8C%3Cpre%3E%E3%80%82%E5%BD%93%E7%84%B6%EF%BC%8C%E5%9C%A8%E5%90%8E%E5%8F%B0%E5%8F%82%E6%95%B0%E8%AE%BE%E7%BD%AE%E4%B8%AD%EF%BC%8C%E4%BD%A0%E4%B9%9F%E5%8F%AF%E4%BB%A5%E5%8F%AA%E9%80%89%E5%AE%9A%E6%94%AF%E6%8C%81%E5%85%B6%E4%B8%AD%E4%B8%80%E4%B8%AA%E3%80%82%3C%2Fp%3E%0D%0A%3Cp%20dir%3D%22ltr%22%3EGeshibot%E6%98%BE%E7%A4%BA%E7%A8%8B%E5%BA%8F%E4%BB%A3%E7%A0%81%E7%9A%84%E4%BC%98%E7%82%B9%E6%9C%89%EF%BC%9A%20%3C%2Fp%3E%0D%0A%3Cul%20style%3D%22margin-right%3A%200px%3B%22%20dir%3D%22ltr%22%3E%0D%0A%3Cul%3E%0D%0A%3Cli%3E%E6%98%BE%E7%A4%BA%E8%A1%8C%E5%8F%B7%EF%BC%9B%20%3C%2Fli%3E%0D%0A%3Cli%3E%E5%8F%AF%E4%BB%A5%E6%A0%B9%E6%8D%AE%E4%B8%8D%E5%90%8C%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%AF%AD%E8%A8%80%E8%BF%9B%E8%A1%8C%E7%9B%B8%E5%BA%94%E9%AB%98%E4%BA%AE%E6%96%B9%E5%BC%8F%E8%B0%83%E6%95%B4%EF%BC%9B%20%3C%2Fli%3E%0D%0A%3Cli%3E%E6%94%AF%E6%8C%81%E5%87%A0%E4%B9%8E%E6%89%80%E6%9C%89%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%AF%AD%E8%A8%80%EF%BC%8C%E5%8C%85%E6%8B%AC%E5%B8%B8%E8%A7%81%E7%9A%84BASIC%E3%80%81C%E3%80%81C%2B%2B%E3%80%81HTML%E3%80%81PHP%E3%80%81ASP%E3%80%81DELPHI%E7%AD%89%EF%BC%9B%20%3C%2Fli%3E%0D%0A%3Cli%3E%E5%8F%AF%E4%BB%A5%E8%87%AA%E5%AE%9A%E4%B9%89CSS%E6%A0%B7%E5%BC%8F%3C%2Fli%3E%3C%2Ful%3E%3C%2Ful%3E%0D%0A%3Cp%3E%E5%9C%A8%E6%96%87%E7%AB%A0%E4%B8%AD%E9%9C%80%E8%A6%81%E6%8F%92%E5%85%A5%E4%BB%A3%E7%A0%81%E7%9A%84%E5%9C%B0%E6%96%B9%EF%BC%8C%E5%B0%86%E4%BD%A0%E7%9A%84%E8%A6%81%E5%B1%95%E7%A4%BA%E7%9A%84%E4%BB%A3%E7%A0%81%E7%94%A8%7Bgeshibot%7D%E4%BB%A3%E7%A0%81 或者<pre>代码</pre> 的语法写入即可。
Geshibot触发器还支持3个标记属性,即 lang或langauge,head或header,foot或footer。第一个属性lang指定该代码所属的计算机语言,以便使用相应的高亮模式;第二个属性head允许在展示代码的区块上边框上显示一个表头;第三个属性foot则允许在展示代码的区块底部边框显示一个自定义的脚注。
比如,本文下面的代码展示就使用了这样的语法:
新添代码 代码 .... -
%0A%0D%0A%E4%BB%A3%E7%A0%81%20....%0A%0D%0A
不过,在使用过程中,我发现Geshibot有一个很严重的问题就是不能解决代码语句换行的问题。有时候,一行php代码在屏幕上可能要连续两行才能显示,由于大部分Joomla网站展示文章的宽度并非屏幕全宽,因此导致用Geshibot展示的代码由于无法自动换行而强行拉宽网页,并且使文章跳出mainbody位置而独立显示。这对网站的外观美是一个很大的障碍。
这个问题困扰了我很久,但是一直没有找到合适的解决方法。我曾经给软件作者写信,但是他也没有什么好招。然而昨天,AutoIt却将这个问题轻易地解决了。
AutoIt大侠使用的手段很简单:利用CSS来控制Geshi进行换行。方法是,在你的当前网站前台模板的 /css/template_css.css 文件中插入以下代码:
新添代码 /* added to make embeded code autowrap according to line length */ pre { white-space: pre-wrap; /* css-3 */ white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ } * html pre { word-wrap: break-word; /* Internet Explorer 5.5+ */ white-space : normal ; /* Internet Explorer 5.5+ */ }
%2F%2A%20added%20to%20make%20embeded%20code%20autowrap%20according%20to%20line%20length%20%2A%2F%0A%0D%0Apre%20%7B%0A%0D%0A%20white-space%3A%20pre-wrap%3B%20%20%20%20%20%20%20%2F%2A%20css-3%20%2A%2F%0A%0D%0A%20white-space%3A%20-moz-pre-wrap%3B%20%20%2F%2A%20Mozilla%2C%20since%201999%20%2A%2F%0A%0D%0A%20white-space%3A%20-pre-wrap%3B%20%20%20%20%20%20%2F%2A%20Opera%204-6%20%2A%2F%0A%0D%0A%20white-space%3A%20-o-pre-wrap%3B%20%20%20%20%2F%2A%20Opera%207%20%2A%2F%0A%0D%0A%7D%0A%0D%0A%0A%0D%0A%2A%20html%20pre%20%7B%0A%0D%0A%20word-wrap%3A%20break-word%3B%20%20%20%20%20%20%20%2F%2A%20Internet%20Explorer%205.5%2B%20%2A%2F%0A%0D%0A%20white-space%20%3A%20normal%20%3B%20%20%20%20%20%20%20%2F%2A%20Internet%20Explorer%205.5%2B%20%2A%2F%0A%0D%0A%7D
AutoIt 的原文见:http://www.autoit.cn/index.php/content/view/96/2.html
不过有一点要注意:Geshibot后台设置参数中,允许定义选用CSS的来源,一种是“使用Joomla/Mambo CSS”,另一个选项是“使用自定义CSS”。如果选为前者,刚才说的修改方案才能生效。如果选为后者,那么就不能把上述代码插入到网站模板的CSS文件中了,而必须粘贴到Geshibot后台“自定义CSS”的那个输入框里。
经过试用,AutoIt发明的这个方法果然有效。真是“踏破铁鞋无觅处,得来全不费功夫”,呵呵。在此感谢AutoIt大侠又给Joomla用户带来一件珍贵的礼物。
当然,Geshi本身还有一个功能就是可以自定义起始行号。这对于讨论程序代码文件非常方便。比如我们要告诉读者修改某文件第147行至153行代码,我们就可以在Geshi中指定代码起始行号为147,那么读者看到的样子应该非常接近原文,而不是现在这样自动从1开始。遗憾的是,这个功能在Geshibot中还没有被实现。我们期待作者能够继续改进这个触发器。 向朋友推荐 |