1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CrystalAdvent Calendar 2018

Day 5

markdを使ってMarkdownからHTMLへ変換してみる

Last updated at Posted at 2018-12-07

やること

少し興味があったのでCrystalのMarkdownライブラリmarkdを試してみたいと思います。

やっていく

markdとは?

icyleaf氏作のMarkdownライブラリで、MarkdownからHTMLへの変換が行えるようです。

JavaScriptのcommonmark.jsを参考にしているようですが、一部の機能はまだサポートされていないみたいです。

インストール

README.mdに書いてあるように、次の内容をshard.ymlに追加して、shards installします。

shard.yml
dependencies:
  markd:
    github: icyleaf/markd

使い方

markdrequireして、HTMLに変換したいMarkdownの文字列をMarkd.to_htmlに渡すだけです。

require "markd"

markdown = <<-MD
# やること

少し興味があったのでCrystalのMarkdownライブラリ[markd][https://github.com/icyleaf/markd]を試してみたいと思います。
MD

html = Markd.to_html(markdown)
pp html
# => "<h1>やること</h1>\n" +
#    "<p>少し興味があったのでCrystalのMarkdownライブラリ<a href=\"https://github.com/icyleaf/markd\">markd</a>を試してみたいと思います。</p>\n"

また、いくつかオプションがあって、それらを渡すと挙動が変わるみたいです。

例としてsafeオプションを有効にしてみると、HTMLの部分がざっくり削れました。

require "markd"

markdown = <<-MD
# Twitterへのリンク

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">最近はただ、妹のことだけを考えていたい</p>&mdash; さっき作った (@make_now_just) <a href="https://twitter.com/make_now_just/status/638132806812495873?ref_src=twsrc%5Etfw">2015年8月30日</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
MD

option = Markd::Options.new(safe: true)
html = Markd.to_html(markdown, option)
pp html
# => "<h1>Twitterへのリンク</h1>\n" +
#    "<!-- raw HTML omitted -->\n"

他のオプションなどはmarkdREADME.mdを確認してください。

また、自前でRendererを定義して出力をカスタマイズすることもできるみたいです。

まとめ

CrystalのMarkdownライブラリmarkdを使って、MarkdownからHTMLへ変換してみました。

実はCrystalの標準ライブラリにもMarkdownというモジュールがあって、MarkdownからHTMLへの変換ができるのですが、実装が微妙なためMarkdownの多くの機能に対応していないのが辛いところです。
このMarkdownモジュールは主にドキュメントジェネレーターで使われているのですが、前述した通り微妙なので、markdで置き替えようという動きがあったりします。
そのための調査を含めて使ってみたのですが、markdもまだやや機能が足りない部分がある気がしたので、機会があればコントリビュートしたいところです。

というわけでCrystal Advent Calendarの5日目でした。
6日目もいません。追いつけるのか?

最後まで読んでいただきありがとうございました。

1
2
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
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?