:sig
DTree markdown_to_ast(String src)
DTree markdown_to_ast(String src, DTree options)

:params
src : markdown source text
options : optional markdown options tree
return value : a `DTree` document AST

:desc
Parses Markdown source into a structured `DTree` document tree.

The parser targets a practical GitHub-flavored subset by default:
- ATX headings (`#`)
- setext headings
- paragraphs
- blockquotes
- ordered and unordered lists
- task list items
- fenced code blocks
- tables
- horizontal rules
- emphasis / strong / strikethrough
- links, images, autolinks, and code spans
- `:::` directive blocks for component-based extensions

The returned AST uses `type` plus node-specific fields such as `level`, `text`, `lang`, `href`, `src`, `name`, `argument`, `attrs`, and `children`.

Top-level documents use:
`type = "document"`
`children = [...]`

Common block nodes:
`heading`
`paragraph`
`blockquote`
`list`
`list_item`
`code_block`
`table`
`directive`
`hr`

Common inline nodes:
`text`
`code`
`strong`
`em`
`strike`
`link`
`image`
`raw_html`

:Example
`DTree options = json_decode("{\"components\":{\":::warning\":\"components/markdown/warning\"}}");`
`DTree ast = markdown_to_ast(file_get_contents("README.md"), options);`
`print(json_encode(ast));`

:Options
`options["gfm"]`
Enables GitHub-style extras such as tables, task lists, strikethrough, and bare-URL autolinks.
Defaults to true.

`options["allow_html"]`
Allows raw HTML passthrough nodes to be captured and rendered.
Defaults to false.

`options["components"]`
Component hook map used later by `markdown_to_html()`.
The parser preserves directive data needed by those hooks.

:see
markdown_to_html
component
component_render
json_encode
DTree

:related
**PHP:** CommonMark or Parsedown parsing pipelines that expose a syntax tree or token stream
**JavaScript / Node.js:** `remark`, `micromark`, or `markdown-it` token streams and AST-like structures
