Module: Markdown::Merge::NodeTypeNormalizer

Extended by:
Ast::Merge::NodeTyping::Normalizer
Defined in:
lib/markdown/merge/node_type_normalizer.rb

Overview

Normalizes backend-specific node types to canonical markdown types.

Uses Ast::Merge::NodeTyping::Wrapper to wrap nodes with canonical merge_type, allowing portable merge rules across backends.

## Thread Safety

All backend registration and lookup operations are thread-safe via the shared Ast::Merge::NodeTyping::Normalizer module.

## Extensibility

New backends can be registered at runtime:

## Canonical Types

The following canonical types are used for portable merge rules:

  • :heading - Headers/headings (H1-H6)

  • :paragraph - Text paragraphs

  • :code_block - Fenced or indented code blocks

  • :list - Ordered or unordered lists

  • :block_quote - Block quotations

  • :thematic_break - Horizontal rules

  • :html_block - Raw HTML blocks

  • :table - Tables (GFM extension)

  • :footnote_definition - Footnote definitions

  • :custom_block - Custom/extension blocks

Examples:

Registering a new backend

NodeTypeNormalizer.register_backend(:tree_sitter_markdown, {
  atx_heading: :heading,
  setext_heading: :heading,
  fenced_code_block: :code_block,
  indented_code_block: :code_block,
  paragraph: :paragraph,
  bullet_list: :list,
  ordered_list: :list,
  block_quote: :block_quote,
  thematic_break: :thematic_break,
  html_block: :html_block,
  pipe_table: :table,
})

See Also:

  • Ast::Merge::NodeTyping::Wrapper
  • Ast::Merge::NodeTyping::Normalizer