GoでCommonMarkのパーサを実装しました。 分かりやすいASTに変換+拡張が容易、そこそこ速い実装になっています。 めちゃくちゃしんどかったです。 経緯 Go言語のMarkdownパーサといえばblackfridayですが、 拡張するための機構がないのでさくっと自前でMarkdownパーサを書くか、と思い立ちました。 そこで「そういえばCommonMarkなんてもんがあったな」と思い出しせっかくならCommonMark準拠にするかとおもってCommonMarkの仕様を読み始めました。 え、なにこれは… Markdownで出来ることなんてrestructuredTextなどほかのマークアップ言語に比べればわずかなものです。しかし、たかがそれだけを実装するために凄まじく複雑な仕様が定義されているのでした。 以下、CommonMarkに寄せられた声です。 commonmarkのlistの