当前位置: 首页 > 工具软件 > GeSHi > 使用案例 >

PHP版源代码高亮工具——GESHI

吴浩皛
2023-12-01

        最近又想开始写博客了,于是重新捡起了Windows live writer。以前都是用它写C++或者是python的技术帖子。不过最近开始学习php了,发现WLW中我安装的插件不给力呀,对php代码的高亮简直不能算高亮过……这让我感觉跟不爽,于是决定找一个好用的源代码高亮工具。由于舍不得WLW,于是开始在其中的插件库中找寻。不过最后得到的答案让我很失望,没有让我满意的。大部分的缺点主要集中在以下几个方面:

对php的高亮效果很差……

配色方案不好看,而且不支持自定义……

部分高亮代码无法脱离插件……

        于是我妥协了,开始寻找第三方工具。经过不懈努力,终于让我发现了一个我自认为不错的开源工具——GESHI,而且是用php写的,这点我很喜欢。一方面可以学习php。另一方面,可以自己修改代码,实现自己想要的功能。不看不知道呀,人家写的非常好了,还配有说明文档(PS:虽然是英文的,不过研究这些问题的,看英文应该不是问题了,哈哈)。不过他们只写了一个非常好的库,想要按照自己的想法来实现代码高亮,还得自己写个前台配置页面。各位如果不嫌弃,可以先试一试我自己搭的网站,先临时凑合一下。网址如下:http://syntaxhl.sinaapp.com/

        好了,我们还是先研究一下GESHI的API吧,按照我们喜欢的方式自定义自己的代码高亮工具。

首先,我们先要实例化一个GESHI对象,代码如下:

$geshi = new GeSHi ( $source, $language );

$source保存的是需要格式化的语言代码,而$language是指按照那种语言方式高亮代码。我们之后的操作都是利用GeSHi类提供的方法实现代码的自定义高亮。

1 设置高亮代码的head格式

$geshi-> set_header_type (GESHI_HEADER_DIV );
// or...
$geshi-> set_header_type (GESHI_HEADER_PRE ); // or...
$geshi-> set_header_type (GESHI_HEADER_NONE );

header的格式有2种:div和pre。这两种方案的主要区别在于有代码行号的代码上。header使用pre的高亮代码得到的字体比较小。如果你不习惯的话,还是使用GESHI_HEADER_DIV吧。

 

2 设置代码行号

2.1 添加代码行号

$geshi-> enable_line_numbers ( $flag );

$flag有3种格式,分别是

  • GESHI_NORMAL_LINE_NUMBERS - 正常的行号
  • GESHI_FANCY_LINE_NUMBERS - 可以设置特殊的行号
  • GESHI_NO_LINE_NUMBERS - 关闭行号

需要说明的是GESHI_FANCY_LINE_NUMBERS的特殊之处。相信细心的读者看到过代码背景交替高亮的效果,这个常量就是干这个用的。不仅可以交替高亮,还可以每N行高亮一次,使用方法如下:

$geshi-> enable_line_numbers (GESHI_FANCY_LINE_NUMBERS, 37 );

这句话的意思就是使用GESHI_FANCY_LINE_NUMBERS,并且逢37的倍数行,高亮之。

 

2.2 设置代码行的风格

$geshi-> set_line_style ( 'background: #fcfcfc;', 'background: #f0f0f0;' );

        这里为什么会出现两个style呢?因为这是为GESHI_FANCY_LINE_NUMBERS风格设置的。正常行使用第一个style,高亮行使用第二个style。需要说明的是,如果你是用的是GESHI_NORMAL_LINE_NUMBERS代码行风格,第二个style会自动失效。

        需要说明的是,当你多次使用set_line_style这个函数的时候,后面的设置会覆盖掉前面的设置。如果想避免这一问题,只需要在最后加上true这个参数。例如:

$geshi-> set_line_style ( 'background: red;', 'background: blue;', true );

 

2.3 设置起始行号

$geshi-> start_line_numbers_at ( $number );

这个函数的功能就不用太介绍了,就是设置起始行号的。

 

3 设置代码风格

3.1 关键字风格

$geshi-> set_keyword_group_style ( $group, $styles, $flag );

        在GESHI中,会将关键字分成几组,于是我们可以按照分组,设置他们的风格。$group代表组号;$style中保存你的CSS代码;$flag标志位用来通知GESHI是否覆盖以前的设置。$group代表组号有如下几种:

1: if, while, do, for, switch 等关键字

2:null, false, true etc等关键字

3:语言的内置函数等关键字

4:int, double, real, static等数据类型关键字

$geshi-> set_keyword_group_style ( 3, 'color: white;', true );

这就话的意思就是将语言的内置函数设置成白色。

 

3.2 注释风格

$geshi-> set_comments_style ( $group, $styles );

因为注释也分单行注释和多行注释,所以这里用$group来表示注释方式。$style自然保存css代码。例如:

$geshi-> set_comments_style ( 1, 'font-style: italic;' );
$geshi-> set_comments_style ( 'MULTI', 'display: hidden;' );

 

3.3 其他代码风格

        除了上面提到的关键字,语言中还包括如下几种:

    • 空白字符,例如\t \n等转义字符;
    • 标点符号,例如{} ()等;
    • 字符串
    • 数字
$geshi-> set_escape_characters_style ( $styles [, $preserve_defaults ] );
$geshi-> set_symbols_style ( $styles [, $preserve_defaults ] );
$geshi-> set_strings_style ( $styles [, $preserve_defaults ] );
$geshi-> set_numbers_style ( $styles [, $preserve_defaults ] );

未完待续……

 类似资料: