2012/10/19

Recent entries from same category

  1. Ruby の Array#<< は Array#push よりも速いか
  2. Ruby の a = a + 1 はなぜ undefined method '+' for nil:NilClass なのか
  3. Re: Ruby 製バッチ処理を省メモリ化した
  4. Crystal と CRuby でHTTPサーバのベンチマーク
  5. pure mruby な JSON パーサ書いた。

Jekyllを使っていていつも思うのが、githubの様な ```perl
use strict;
use warnings;

warn "foo";
```
という Triple Backtick が使えない事なんだけど、まぁこれは Markdown の仕様に準拠していない拡張なのでしょうがないと思いつつも、最近 github に慣れすぎていてイライラしてきた。Jekyll Plugin では Markdown の変換をプラグインとして書くことは出来ないので、Jekyll::MarkdownConverter の convert メソッドを上書きしてやるプラグイン(と呼べるかどうかはあるが)を書いた。
module Jekyll
  class MarkdownConverter
    alias :old_convert :convert
  
    def convert(content)
      content.gsub!(/(?:^|\n)```(\w*)\n(.*?\n)```\n/mdo |text|
        cls = $1.empty? ? "prettyprint" : "prettyprint lang-#{$1}"
        "\n<pre class=\"#{cls}\"><code>#{CGI.escapeHTML($2)}</code></pre>"
      end
      old_convert(content)
    end
  end
end
これを _plugins/triple-backtick.rb として入れておけば、Google Code Prettify が検知できるクラス名を付けてコード出力してくれ、みんな大好き ``` が使える様になって幸せになれる。
ちなみにこの方式を使って、maruku や redcloth で出力させたい場合はLiquidのコンバータまでさかのぼって上書きしないといけなくなるので諦めた。
Posted at by