Module: Markdown::Merge::LinkDefinitionFormatter

Defined in:
lib/markdown/merge/link_definition_formatter.rb

Overview

Formats link reference definitions for output.

Markdown parsers (especially cmark-based ones like Markly/Commonmarker)
consume link reference definitions during parsing and resolve them into
inline links. This means they don’t appear as nodes in the AST.

This formatter reconstructs the markdown syntax from LinkDefinitionNode
instances so they can be included in the merged output.

Examples:

node = LinkDefinitionNode.new(
  "[ref]: https://example.com \"Title\"",
  label: "ref",
  url: "https://example.com",
  title: "Title"
)
LinkDefinitionFormatter.format(node)
# => "[ref]: https://example.com \"Title\""

Class Method Summary collapse

Class Method Details

.format(node) ⇒ String

Format a link definition node

Parameters:

Returns:

  • (String)

    Formatted link definition



29
30
31
32
33
34
35
36
# File 'lib/markdown/merge/link_definition_formatter.rb', line 29

def format(node)
  return node.content if node.content && !node.content.empty?

  # Reconstruct from components
  output = "[#{node.label}]: #{node.url}"
  output += " \"#{node.title}\"" if node.title && !node.title.empty?
  output
end

.format_all(nodes, separator: "\n") ⇒ String

Format multiple link definitions

Parameters:

  • nodes (Array<LinkDefinitionNode>)

    Link definition nodes

  • separator (String) (defaults to: "\n")

    Separator between definitions

Returns:

  • (String)

    Formatted link definitions



43
44
45
# File 'lib/markdown/merge/link_definition_formatter.rb', line 43

def format_all(nodes, separator: "\n")
  nodes.map { |node| format(node) }.join(separator)
end