Nanoc ソースコード色付け

CodeRay

ページ内にソースコードのサンプルをよく書くので、 Nanoc 3.2.1 で色付けを行いたい。 色付け自体は CodeRay を使うので

gem install coderay

でインストールする。

colorize_syntax で色付けする

Nanoc のフィルターで色付けすることができるはずなのだが、 http://nanoclog.web.fc2.com/2011/0525-224022.html に書いてあるようにバグがあって(というか仕様?) Nanoc 自体を変更しないといけない。

私の環境では shebang 行を含むソースコードで エラーが出てしまい使用できないと判断した。 そのうち、うまく動くようになれば、colorize_syntax を使うのが 一番良いはずなのだが。

kramdown 自体の機能を使う

markdown とその変換に kramdown を使っている場合は、 colorize_syntax を使わなくても kramdown の機能で色付けできる。 coderay をインストールしておき、 以下のようにコードサンプルの後に {: lang=’ruby’} で言語名を指定する。

    puts "Context2"
    context2['table'].each do |record|
      p record.key
    end
{: lang='ruby'}

のように書く。

色付けのカスタマイズ

黒背景だと CodeRay デフォルトの色付けが合わないのでカスタマイズする。 まず、style が html に直に記述されているので これを class の指定だけにする。 kramdown フィルタに :coderay_css オプションを渡すと望むようになった。 Rules ファイルの

filter :kramdown

の部分を

filter :kramdown, :coderay_css => :class

に変更する。 また、行数の表示をなくすには

filter :kramdown, :coderay_css => :class, :coderay_line_numbers => nil

とする。 次に、スタイルシートを作る。端末で

coderay_stylesheet > coderay.css

としてスタイルシートのひな形を作り編集すれば良いのだが、 このスタイルシートは設定が多すぎる。 実際には、http://railscasts.com/episodes/207-syntax-highlighting を参考にして簡単なスタイルシートを使った。 後は、Nanoc の layout などで読み込ませれば良い。

対応している言語

coderay のソースの

lib/coderay/helpers/file_type.rb

を見ると lisp や latex は対応していないようだ。 scanners ディレクトリを見ても良い。

Tags of current page

, ,