The spec is organized into "content blocks", "leaf blocks", and inline content. I should take this as a hint to do the same.

So the first task in the parser should be to parse the block structure.

<https://spec.commonmark.org/0.31.2/>

- Blocks
  - Leaf
    - Thematic break
    - ATX heading
    - Setext heading
    - Indented chunk
      + Indented code block is a sequence of indented chunks.
      + Preserve count of blank lines.
    - Fenced code block
    - HTML blocks
    - Link reference definition
    - Paragraph
    - Blank lines
      + These are part of the document, but they are not rendered.
  - Container
    - Blockquote
    - List Item
      + List is a sequence of list items of the same type.

- Inline
  - Inline code
  - Strong, emph
  - Links
    - Inline
    - Reference
    - Images
    - Auto
  - HTML
  - Text

<!--vim: ts=2 sw=2 et linebreak :-->