Help us understand the problem. What is going on with this article?

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

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

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'

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

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away