Rust を使って、自力で HTML のパーサを書いている。
https://github.com/a2ikm/html2md
モチベーションは、
- Google Docs で整形してから Markdown 形式に落とし込むことが最近多く、いい感じにやってくれるツールが欲しかった
- Google Docs と連携して変換するツールもあるにはがあるが、外部に共有することができないケースが多く、使えない
- HTML から Markdown に変換するは多くあるが、 Google Docs フレンドリーなものが欲しかった
- レビューの記録を削ったり
- CSS でネストしてるように見えるリストをちゃんとネストさせたり
- HTML のパーサを書いてみたかった
- ブラウザのように文法的に間違っているものを許容する仕組みをどう実現するかに興味があった
- Rust を使ってみたかった
現状、それっぽく変換できるようにはなっているが、まだいくつか課題がある。
- 利用するのに今はソースコードからビルドするしかないので、 GitHub Actions 上でクロスコンパイルしてバイナリをダウンロードできるようにしたい
- レビューの記録を削るようなオプションを提供したい
- CSS でネストしたリストを今は Markdown レンダリング時にインデントで調整しているが、 AST として表現できるようにしたい
- Google Docs でダウンロードできるのは HTML 直ではなく画像等とまとめた zip ファイルなので、それを扱えるようにしたい
追々やっていきたい。