ようへい

2012年6月5日火曜日

[SyntaxHighlighter] Java用BrushのBug Fix

3.0.83にバンドルされているJavaのBrushにバグを見つけたので、修正版を公開します。

バグの詳細

以下のようなコードをSyntaxHighlighterでBrushにJavaを指定しハイライトさせてみます。
/* 
  hoge
  hoge
*/

fuga

/** hoge */

fuga
すると3.0.83にバンドルされているshBrushJava.jsでは以下のように表示されてしまいます。
1
2
3
4
5
6
7
8
9
10
/*
  hoge
  hoge
*/
 
fuga
 
/** hoge */
 
fuga
以下で実際に確認することが可能です。
SyntaxHighlighter用タグ 変換/生成ツール - ログろいど

ここではhogeはコメント、fugaはコードとしてハイライトされることを想定しているのですが、意図したように表示されません。

修正

shBrushJava.jsの複数行コメントを判定する正規表現を以下のように変更する。
  this.regexList = [
   { regex: SyntaxHighlighter.regexLib.singleLineCComments, css: 'comments' },  // one line comments
   { regex: /\/\*([^\*][\s\S]+?)?\*\//gm,      css: 'comments' },   // multiline comments
   { regex: /\/\*(?!\*\/)\*[\s\S]*?\*\//gm,     css: 'preprocessor' }, // documentation comments
   { regex: SyntaxHighlighter.regexLib.doubleQuotedString,  css: 'string' },  // strings
   { regex: SyntaxHighlighter.regexLib.singleQuotedString,  css: 'string' },  // strings
   { regex: /\b([\d]+(\.[\d]+)?|0x[a-f0-9]+)\b/gi,    css: 'value' },   // numbers
   { regex: /(?!\@interface\b)\@[\$\w]+\b/g,     css: 'color1' },  // annotation @anno
   { regex: /\@interface\b/g,         css: 'color2' },  // @interface keyword
   { regex: new RegExp(this.getKeywords(keywords), 'gm'),  css: 'keyword' }  // java keyword
   ];
複数行コメントのコメント部分を、*から+?(最短一致)に変更しています。
修正後の表示
1
2
3
4
5
6
7
8
9
10
/*
  hoge
  hoge
*/
 
fuga
 
/** hoge */
 
fuga

修正版のダウンロード

以下より、修正版をダウンロードできます。
共に、3.0.83専用です。
他のバージョンでの動作は未確認です。
非圧縮版(2.16KB)
https://sites.google.com/site/logroid/syntaxhighlighter/shBrushJava.js
圧縮版(1.68KB)
https://sites.google.com/site/logroid/syntaxhighlighter/shBrushJava.min.js
関連記事

0 件のコメント:

コメントを投稿