# Releases

## v0.17.0

  - Add opt-in language prefixes for inline code spans with `Markly::INLINE_CODE_INFO`, expose code metadata through `Node#code_info`, and provide `Node#code_language` as a convenient language accessor.
  - Expose fenced code-block metadata through `Node#fence` and `Node::Fence`.
  - Add `Node#next_header`, retain `Node#next_heading` as an alias, and correctly recognize header nodes.
  - Raise `NotImplementedError` from the base renderer's unimplemented code-block callback instead of recursing indefinitely.
  - Remove unused legacy separator helpers from the Ruby renderer.

## v0.16.0

  - Update `cmark-gfm` from upstream, including two table-rendering protections: avoid repeatedly scanning preceding cells, and limit the number of automatically completed cells to prevent denial of service.
  - Correct `end_line` source positions for single-line and multi-line HTML blocks.
  - Fix trailing newlines when rendering inline nodes.
  - Add support for front matter (`CMARK_OPT_FRONT_MATTER`): a `---` delimited block at the start of a document is captured as a `CMARK_NODE_FRONT_MATTER` node.  The raw content is available via `node.string_content` and an optional format hint (e.g. `"yaml"`, `"toml"`) via `node.fence_info`.
  - Allow `:` in HTML tag names to support XML namespace prefixes (e.g. `<svg:circle>`, `<xhtml:div>`).

## v0.15.1

  - Add agent context.

## v0.15.0

  - Introduced `Markly::Renderer::Headings` class for extracting headings from markdown documents with automatic duplicate ID resolution. When rendering HTML with `ids: true`, duplicate heading text now automatically gets unique IDs (`deployment`, `deployment-2`, `deployment-3`). The `Headings` class can also be used to extract headings for building navigation or table of contents.

## v0.14.0

  - Expose `Markly::Renderer::HTML.anchor_for` method to generate URL-safe anchors from headers.
