これは結構大変だった。前回いじったshBrushPerl.jsと同じ場所1にshBrushTT2.jsを置いても、それだけでは反映されない。次のファイルをいじる。
/mt/plugins/SyntaxHighlighter/lib/SyntaxHighlighter/Plugin.pm
# 149行目あたりに2行を追加
'html'=>'shBrushXml',
'xhtml'=>'shBrushXml',
'tt' => 'shBrushTT2',
'tt2' => 'shBrushTT2',
);
これで後はHTMLヘッダーテンプレートに”tt2″を加えるだけだ。
<$mt:SyntaxHighlighterInclude brush="html,perl,jscript,bash,tt2,plain" theme="default"$>
肝心のshBrushTT2.jsの中身は次の通り。
SyntaxHighlighter.brushes.TT2 = function() {
var funcs =
'undef unlink unpack unshift utime values vec ' +
'wait waitpid warn write defined length repeat ' +
'replace remove match search split chunk substr ' +
'list hash size keys values items each pairs ' +
'list sort nsort import defined exists delete ' +
'size item first last size max defined reverse ' +
'join grep sort nsort unshift push shift pop ' +
'unique import merge slice splice hash format ' +
'upper lower ucfirst lcfirst trim collapse ' +
'html html_entity xml html_para html_break ' +
'html_para_break html_line_break uri url indent ' +
'truncate repeat remove replace redirect eval ' +
'evaltt perl evalperl stdout stderr null';
var keywords =
'GET CALL SET DEFAULT INSERT INCLUDE PROCESS ' +
'WRAPPER BLOCK IF UNLESS ELSIF ELSE SWITCH CASE ' +
'FOREACH WHILE FILTER USE MACRO PERL RAWPERL TRY ' +
'THROW CATCH FINAL NEXT LAST RETURN STOP CLEAR ' +
'META TAGS DEBUG END Assert Autoformat CGI ' +
'Datafile Date Directory DBI Dumper File Filter ' +
'Format GD HTML Iterator Pod Scalar String Table ' +
'URL Wrap XML';
this.regexList = [
{ regex: /^#[^#]*$/g, css: 'comments' }
,{ regex: /#.*$/gm, css: 'comments' }
,{ regex: /\$\w+/g, css: 'variable' }
,{ regex: /\${[.\w]+}/g, css: 'variable' }
,{ regex: new RegExp(
this.getKeywords( funcs ), 'gm')
,css: 'functions' }
,{ regex: new RegExp(
this.getKeywords( keywords ), 'gm')
,css: 'keyword' }
,{ regex: SyntaxHighlighter.regexLib.doubleQuotedString
,css: 'string' }
,{ regex: SyntaxHighlighter.regexLib.singleQuotedString
,css: 'string' }
];
this.forHtmlScript(
{ left: /\[%-?/g, right: /-?%\]/g } );
};
SyntaxHighlighter.brushes.TT2.prototype
= new SyntaxHighlighter.Highlighter();
SyntaxHighlighter.brushes.TT2.aliases
= ['tt', 'tt2'];
ちょっと面倒だったのは 2 種類のコメント。下に挙げた例のうち、1 つ目の複数行コ
メントはうまくハイライトできない場合がある2。解決できないものか……。後は
Template::Manualにある語句を適当にコピーしまくって完成した。……だが、まだ不満があった。次回へ続く。
<!-- いきなり"#"で始まれば全体がコメント -->
[%# これはコメントです
これもコメントです
これもコメントです
%]
<!-- Perlスタイルのコメント -->
[% # これはコメントです
fig1 = 12345 # これはコメントです
fig2 = 23456 # これもコメントです
%]
[%- # chompもおk
INCLUDE inc/header.tt -%]
[% IF users %]
<p class="msg">[% users.${me.id}.name %]</p>
[% END %][%# IF %]
[%- INCLUDE inc/footer.tt -%]
