日記

Markdownパーサー

今日もやりました、先月からやっているMarkdownパーサーの実装。

Block Quoteの実装に入り、基礎的なBlock Quoteのテストは成功するように。Block Quote内部の先頭と末尾の空行を無視する、といった細かい部分がまだ実装できていない。

> foo
bar

上のMarkdownは、下のMarkdownと同じように変換される。

> foo
> bar

この仕組みを上手く実装するのは大変だ。なぜなら、もしこれらを素朴に同一に扱えるようにしてしまうと、次のMarkdownと…

> foo
> ---

次のMarkdownとを同一に扱ってしまいそうになり、setext headingを利用したh2要素と扱ってしまいがちだが、実際にはhr要素として扱うべきだからだ。

> foo
---

Maybe paragraph or setext headingなテキストノードを処理している間は、Laziness block quoteな特性を利用している行はsetext headingとしては処理しない、といった細かい条件分岐が必要になる。実装が複雑になっていく…