Home > Movable Type > ソースコードを美しく

ソースコードを美しく

といっても、読みやすいきれいなソースコードを書きましょうといった話ではなく、blog 上でソースコードをきれいに表示したいという話。

気になったことを備忘録の感覚で書き留めていこうという趣旨で blog を始めたのだが、気になることの大半がソフトウェアに関する事なので、ソースコードを簡単にコピペできることは「めんどくさくない」運用という点においては必須の機能。

とりあえずは、以下のようなコードが普通にコピペできれば合格だ。

template <typename T>
class Hoge {
    T m_val;
public:
    explicit Hoge(const T& val = T()): m_val(val) {}
    const T& GetVal() const {
        return m_val; // 持ってる値を返すだけ。意味も無くコメントを書いているのは、一行を無理やり長くするためだったりする。
    }
};

HTML では一部の記号をエスケープしないといけないし、キーワードを判別して色付けしてくれる訳でもないので、当然「普通にコピペ」しただけでは上のようには表示されない。上の例はとりあえず span やら &amp; やらを駆使して手作業で整形したもの。これを自動でやってくれる何かがあれば、blog を備忘録として活用できる可能性が一気に上がるというわけだ。

SyntaxHighlighter

検索で真っ先にヒットしたのが SyntaxHighlighter というもの。見た感じ良さそげなので試してみようとしたのだが、Java Script で書かれているという点に引っかかってしまった。NoScript を愛用している私が、ブログツールやコメントの類ならともかく、自分の blog のエントリー部分で Java Script に頼ってしまうのは何ともいえない矛盾を感じる。Java Script を OFF にしていればシンタックスハイライト無しの pre タグとして見えるような気がするので、もしそうなら許容範囲に収まっているかも知れないが、とりあえず保留。

VimColor

次に見つかったのが VimColor プラグインというもの。これは Movable Type 用のプラグインなので、サーバ側で整形処理が完結する。よし、これだ。


template <typename T>
class Hoge {
  T m_val;
public:
  explicit Hoge(const T& val = T()): m_val(val) {}
  const T& GetVal() const {
      return m_val; // 持ってる値を返すだけ。意味も無くコメントを書いているのは、一行を無理やり長くするためだったりする。
  }
};

最初のインデントがおかしいけど、概ね良好。うん、悪くないね。

......と、簡単に導入しているように見えるが、root 権限の無いレンタルサーバ上に Perl のモジュールやら vim やら(!)をインストールするのは大変な作業だった。そもそも「CPAN って何?」状態だったし、PuTTY を使ったのも初めて。

以下、参考にしたもの。

また、ここのコメント欄にあるように、SetEnv できない環境下で CGI からローカルモジュールを使う場合は use lib が必要。そのため、プラグインの頭の部分を以下のように修正して Text::VimColor モジュールのインストール先を指定する。


use strict;
use MT;
use MT::Template::Context;
use lib '/home/*****/perl/lib/perl5/site_perl';
use Text::VimColor;

私のように vim を自前でインストールした場合は、Text::VimColor にもその場所を教えてあげないといけない。


my $vimcolor = Text::VimColor->new(vim_command => '/home/*****/local/bin/vim', vim_options => \@options);

また、そのままだとエラーになるので、options に -T xterm を追加する。この問題の解決には Text::VimColor in a CGI - possible? が役立った。ついでに、さりげなく tabstop を 4 にしている。


my @options = (qw( -XZ -i NONE -u NONE -N -T xterm ),
  '+set nomodeline',
  '+set expandtab',
  '+set tabstop=4',
  '+set encoding=' . MT::ConfigMgr->instance()->PublishCharset);

ちなみに、MTEntryBody だけでなく MTEntryMore の方にも vim_color = "none" としておかないと、「続き」側で編集した内容に VimColor が適用されない。まぁ、このあたりは特に何も書かなくても気づくとは思うが、念のため。


<$MTEntryMore vim_color="none"$>

それにしても、プラグインの導入記事にプラグイン自身が活躍するところが面白い。いい感じに続けられそうな気がするぞ。

関連エントリー

Comments:4

zakio Author Profile Page 2009年2月28日 21:27
コメントにも使えるのかな?

template  class Hoge;

zakio Author Profile Page 2009年2月28日 21:50

惜しい。

zakio Author Profile Page 2009年2月28日 22:00
これならどうだ?

template <typename T> class Hoge;

zakio Author Profile Page 2009年2月28日 22:03

できた!
でも、&lt; と &gt; を使わなきゃいけないのはチト苦しいか。

コメントを表示する前に、このブログのオーナーによる承認が必要になることがあります。コメントが表示されない場合は、承認されるまでしばらくお待ちください。

Comment Form

Home > Movable Type > ソースコードを美しく

Search
Feeds

Return to page top