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

        最近又想开始写博客了,于是重新捡起了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 ] );

未完待续……

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
写在前面 用WordPress以来,一直是用CodeColorer来实现代码高亮,但原的汉化不够完全,且与不少主题都冲突,因此本人将原修改过后使用,并加入了可视化代码插入功能,之前也想发布出来,但因为懒,一直推迟到现在,既然大家希望我提供下载,因此我把它打包出来提供给大家。 CodeColorer CodeColorer是一款基于GeSHi库的WordPress代码语法高亮插件。功能简单,使用方便,是一款比较轻量的插件。CodeColorer支持[ccei_html][cc lang="lang"]code[/cc][/ccei_html] 和[ccei_html]<code lang="lang">code</code>[/ccei_html]两种语法。 属性说明 属性列表如下,括号内是参数类型.string是字符串;integer是整数;boolean是布尔型(开关),可接受“true” “false”, “on” “off”, 整数 1 or 0. lang (string) – 代码使用的语言。 tab_size (integer) – 用以替换制表符的空格数,可在设置界面更改。 line_numbers (boolean) – 是否显示行号,可在设置界面更改。 first_line (integer) – 指定代码块第一行的行号 highlight (string) – 用于指定整行高亮的代码行行数,参数是用半角逗号分隔的数字串(如 1,5,8,9)。 no_links (boolean) – 当值为false时,关键字将会添加一个到官方文档的链接,可在设置界面更改。 lines (integer) –指定代码块显示的行数,当值设置为-1时,不出现纵向滚动条,可在设置界面更改。 width (integer or string) – 代码块宽度,可在设置界面更改。 height (integer or string) – 代码块高度,当这个高度可显示的行数比lines指定的值大才会生效,可在设置界面更改。 rss_width (integer or string) – 代码块在RSS输出时的宽度,可在设置界面更改。 theme (string) – 代码块颜色风格 (default, blackboard, dawn, mac-classic, twitlight, vibrant),可在设置界面更改。 inline (boolean) – 内嵌模式开关,用于将一行代码插入到文本中。 strict (boolean) – 严格模式的开关。 nowrap (boolean) – 当值指定为false时,过长的行将会被自动换行,以避免出现横向滚动条。 noborder (boolean) – 是否显示边框的开关。 no_cc (boolean) – 当值为true时,code标签将会被解析,但代码块不会有格式。 class (string) – 添加一个新的CSS。 escaped (string) – 当值为false,代码块里的html转义字符不会被转义,如<不会转义为<,默认为false。 我的博客: http://lanfei.sinaapp.com/ http://blog.csdn.net/CooLanfei 欢迎访问交流。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值