これは結構大変だった。前回いじった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 -%]