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]);

未完待續……

發佈了302 篇原創文章 · 獲贊 11 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章