Open10
Ruby で mermaid 構文のパーサーを書く
所用で mermaid 構文のパーサーを書く必要があるが、特にライブラリが見当たらなかった。そこで Ruby のマークダウンパーサーを参考にそれっぽいものを書いてみる。動くのを優先。
なお、今回は mermaid 構文の中の erDriagram だけパースできれば良い。
Kramdown というマークダウンパーサーを使うとマークダウンのテキストを構文木のハッシュに変換できる。
これを拡張して marmaid 構文にも対応させるという作戦でいく。
karmdown 拡張の例としては kramdown-gist が参考になりそう。
kramdown の mermaid 対応に関する issue
kramdown を拡張するにあたり、パースしたい構文を kramdown の構文と対応させる必要がありそう。
kramdown-gist を読んでも block-level element として gist tag を追加する箇所がある。
ざっと kramdown の syntax を押さえる。
要するに erDiagram を block-level element として、中身は一旦 value として取り込めればよさそうだ。
codespan のパース処理を真似すればよさそう。
ところで何故 Range オブジェクト?
entity をパースして AST の要素に追加するところまではできた。
migration file の自動生成は paper-trail や devise が参考になりそう。
ひとまず ERDiagram のパースはできた。
Entity と Relation をパースして hash_ast として参照できる。
html 等、他の形式への変換は未実装。