Module: ComposableAgents::Utils::Markdown
- Defined in:
- lib/composable_agents/utils/markdown.rb
Overview
Internal util methods to handle Markdown
Internal collapse
-
.adjust_header_levels(doc, level_diff) ⇒ Object
Adjust header levels in a CommonMarker document by a given difference.
-
.align_markdown_headers(markdown, level: 2) ⇒ String
Align markdown headers in a String to a given level.
-
.find_minimum_header_level(doc) ⇒ Integer?
Find the minimum header level in a CommonMarker document.
Class Method Details
.adjust_header_levels(doc, level_diff) ⇒ Object
Adjust header levels in a CommonMarker document by a given difference
48 49 50 51 52 |
# File 'lib/composable_agents/utils/markdown.rb', line 48 def adjust_header_levels(doc, level_diff) doc.walk do |node| node.header_level = node.header_level + level_diff if node.type == :heading end end |
.align_markdown_headers(markdown, level: 2) ⇒ String
Align markdown headers in a String to a given level.
This method parses the String as a markdown document, sees the minimum current header level,
and changes it while preserving the structure and hierarchy so that this min level is equal to level.
18 19 20 21 22 23 24 25 26 27 |
# File 'lib/composable_agents/utils/markdown.rb', line 18 def align_markdown_headers(markdown, level: 2) doc = Commonmarker.parse(markdown) min_level = find_minimum_header_level(doc) return markdown if min_level.nil? || min_level == level adjust_header_levels(doc, level - min_level) # Unescape dots in headers # TODO: Remove this gsub when CommonMarker will be fixed. doc.to_commonmark.gsub(/^\#{1,6}\s+\h+\K\\\. /, '. ') end |
.find_minimum_header_level(doc) ⇒ Integer?
Find the minimum header level in a CommonMarker document
33 34 35 36 37 38 39 40 41 42 |
# File 'lib/composable_agents/utils/markdown.rb', line 33 def find_minimum_header_level(doc) min_level = nil doc.walk do |node| if node.type == :heading current_level = node.header_level min_level = current_level if min_level.nil? || current_level < min_level end end min_level end |