プログラムソースを綺麗に表示するプラグイン 

ソースコードを綺麗に表示し、行番号とかも追加してくれる便利なJavaScript、
dp.SyntaxHighlighter

さらに、スクリプト記入部分をある程度自動化してくれる
kwLogさん: SyntaxHighlighter for Movable Typeを導入してみました。
// Cソース表示
int a = 10;		// 変数A
int b = 20;		// 変数B
int c = a + b;	// 合計
なにげに、結構大変だったのでメモをのこしておきます。

1.プラグインをダウンロードして、"plugins"と"mt-static/plugins"にアップします。

2.ヘッダーテンプレートの<head>~</head>の間に[code:cpp]<$mt:SyntaxHighlighterInclude brush="cpp,jscript,perl,xml,css" theme="default"$>[/code]を入れます。
このとき、Movable Typeの設定で "mt-config.cgi" の "StaticWebPath" が設定されていないと、JavaScriptとcssへのパスが正常に通りません。
デフォルトだと、コメントアウトされてるはず。
[code:xml]StaticWebPath http://www.xxx/mt/mt-static/[/code]
3.あとは、エントリー記事のソースを書き込む場所に
フォーマットで "SyntaxHighighter + Convert Line Breaks" を選んで
<pre class="brush: cpp">
ソースコード
</pre>
と書けばよいだけのはずだけど、ここでもトラブル。

このサイトは、HTMLソースの無駄な改行やスペースを省略するために
Movable Type 備忘録さんのMTRemoveBlankを使用しています。
ところが、HTMLソースを出力したあとにJavaScriptでプログラムソースを表示するので
変換する前に、HTMLソース出力の段階で改行やスペースが削除されてしまいます。

これを防ぐために、プログラムコード部分のスペース削除を除外しました。
"RemoveBlank.pl" の "remove_blank_trim" 関数を変更させていただきました。
sub remove_blank_trim
{
    my @out = @_;
    my $txt = '';
    my $awb_flag = 0;  # プログラムコード開始フラグ

    for (@out) {
		if( $_ =~ m/<pre class=\'brush:/ ){  # プログラムコード部分開始
			$awb_flag = 1;
		}
		if( $_ =~ m/<\/pre>/ ){  # プログラムコード部分終了
			$awb_flag = 0;
		}
		if( $awb_flag == 0 ){
        	s/^\s+//;
        	s/\s+$//;
        }else{
        	$_ .= "\n";  # プログラムコード部分には改行を残す
        }
#        $txt .= $_ . "\n" if ($_ ne '');
        $txt .= $_;
    }

    return $txt;
}


さらに、エントリーを書くときにフォーマットが "SyntaxHighighter + Convert Line Breaks" だと、記事中にリンクを貼った場合などに(原因不明)、ソースコード中に自動改行の<br>や<p>タグが出現してしまうことがある。

謎だけど、フォーマットは "SyntaxHighighter" を選び、改行は<br>タグを手動でいれています。
 



 

投稿されたコメント[1] 

なんかアンダーバー _ が表示されないなぁ。



コメントをお願いします 

Name:   ※必須(ニックネームでOK)
 名前を記憶
コメント:(HTMLタグは使用できません)