HugoのMarkdownレンダラーに採用されました。単純にこう、自分の書いたコードが評価されるっていうのはうれしいし自信につながりますね。実現しているライブラリは多言語ふくめてもそれほどないので頑張ってよかったなあと。思ってたんですけどあっという間に埋まってしまい。Adventカレンダー最終日のポエムです。勝負してみたいなあ、と思っております。仕事でGo書きたいほんとに。冷やかしちっくでやっぱり嫌なものなんですかね。冷やかしでもいいよーとか、よい話があればGithubにあるメアドなりに連絡ください笑メリークリスマス。parserGoでCommonMarkのパーサを実装しました。分かりやすいASTに変換+拡張が容易、そこそこ速い実装になっています。拡張するための機構がないのでさくっと自前でMarkdownパーサを書くか、と思い立ちました。おもってCommonMarkの仕様を読み始めました。定義されているのでした。以下、CommonMarkに寄せられた声です。質問:CommonMarkのパーザの実装を試みていますが、仕様が絶望的です。2018年10月31日しまいには、CommonMarkの中心人物自体が「えらいもん作ってしまった・・・」となっています。1.0.私も仕様を読んだ段階で「これはヤバい」と感じたのですがここで引くのも悔しかったので作り切りました。CommonMarkについて思うところ正直なところ、これが世に広まるってどうなの、と思います。そもそもなんでMarkdownが軽量マークアップ言語の中でこれだけ広く使われるようになったのかというと書き手としての書きやすさ実装者としての実装しやすさつまり、「書き手の適当さ」と「実装側の適当さ」がいい具合に噛み合ったからだと思っています。対応であると言うことができました。Markdownは広まっていったのです。それに対して、CommonMarkはあまりに実装するのがしんどすぎます。しても出来ること自体は少ないのです。テーブルさえ使えないのです。その実装の難しさからCommonMark対応のパーサはいわゆるMarkdownパーサと比べるとわずかしかありません。CommonMarkにかかわっている人の中には「それが何の問題ですか?」という人さえいます。「CとJSで参照実装提供してるじゃん。ブラウザはC動かないからJSも用意してある。C実装のバインディング作ればいいだけでしょ。実装なんて1個あればいいんだよ」なんて感じです。なったという経緯があります。寄せようとするのではなく、もっと仕様をシンプルにする方向に動いて欲しかったです。CommonMarkパーサを実装したい人に向けてとにかく、CommonMarkに準拠するのは難しい。これから書こうと言う人に気づきを共有しておきます。JSONなどのパースとは全く別物です。「パースしやすいように」という視点で文法が作られてますが、CommonMarkはそんなことはありません。pegベースのパーサもあるので無理じゃないですがいわゆるLL,LRやLALRのような方法では厳しいです。Markdownはいうなれば「行志向」なので業単位を基本としましょう。continuation」はかなり曲者です。部分は間違いなくしんどいです。強調は自分で考えるのは諦めましょう。testを通すのは難しいです。タブが本来のタブの意味でつかわれる点に注意。1文字分、2文字分、3文字分、4文字分、いずれの文字幅にもなりえます。折れない心が大事です。CommonMarkとMarkdownは別物です。覚悟してかかりましょう。bat相変わらずメインのマシンはWindowsなのですが、batファイルのもろもろがいつまでも覚えられず、bashスクリプトで書きたいなあ、ということでbatファイルにbashスクリプトを埋め込むことにしました。Cでつくった自作用ツールがあるため、Windowsにはかならずmsys2をいれているのでbashは絶対あるんですよね。その他の言語を埋め込む方法はWindowsでshebangもどき、またはバッチにスクリプトを埋め込む方法が詳しいです。シェルスクリプトをバッチファイルに埋め込む以下のようにすると、バッチファイルにシェルスクリプト(bashスクリプト)を埋め込むことにできます。コマンドやらをうまく利用して埋め込んでいます。