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 ディレクトリを見ても良い。