https://blog.0xshadow.dev/posts/markdown-parser/introduction/