LoginSignup
1
0

More than 5 years have passed since last update.

commonmarker 0.18.x で使う commonmarker-rouge は 1.5.x でないと

Last updated at Posted at 2018-12-01

きちんとした記事を書く余裕がないので,伝えたいことだけを最小限の記述で。(質問は歓迎)

Ruby で Markdown テキストを扱うのに commonmarker って gem を使いますよね。

で,Markdown テキスト中にコードブロックがあってシンタックスハイライトもやりたい,となると,commonmarker-rouge という gem を併用することに。
簡単に使えて,多数の言語に対応しているので,便利。

ここまでが前置き。

commonmarker のバージョンが上がって正常に動かなくなった

commonmarker 0.17.13 を使っていたのですが,0.18.1 が出たので bundle update したら正常に動かなくなった。

正常な場合,

gem 'commonmarker', '0.17.13'
require 'commonmarker'
gem 'commonmarker-rouge', '1.4.0'
require 'commonmarker/rouge'

source = "```rb\nx\n```"

puts CommonMarker::Rouge.render_html(source)

で,

<div class="highlighter-rouge language-rb"><span class="n">x</span>
</div>

が出力される。

ところが commonmarker のバージョンを上げて

gem 'commonmarker', '0.18.1'

とすると,なんと出力が

<!-- raw HTML omitted -->

になってしまう。
そんな殺生な〜

なんかどうも,commonmarker の 0.18 でのセキュリティー上の理由による仕様変更に commonmarker-rouge が対応してなかったのが原因だったぽい。

解決

当初 commonmarker 側に

Code block vanishes in latest with commonmarker-rouge · Issue #85 · gjtorikian/commonmarker

という issue を(超デタラメ英語で)立てたのですが,どうもこれは commonmarker-rouge 側でどうにかすべきものだったようなので,

Code block vanishes with commonmarker 0.18.x · Issue #4 · sandfoxme/commonmarker-rouge

という(英語力的に)やる気のない issue を立てたところ,なんかすぐに直してくれました。

結果,両者を最新の

gem 'commonmarker', '0.18.2'
gem 'commonmarker-rouge', '1.5.0'

のようにしたところ,問題なく変換されました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0