module Ariadne::Static::GenerateStructure

def find_fenced_code_ranges_in(str)

def find_fenced_code_ranges_in(str)
  doc = Kramdown::Document.new(str)
  line_starts = find_line_starts_in(str)
  [].tap do |code_ranges|
    each_codespan_in(doc.root) do |node|
      options = node.options
      delimiter = options[:codespan_delimiter]
      next unless delimiter.start_with?("```")
      start_pos = line_starts[options[:location]]
      end_pos = start_pos + node.value.size + delimiter.size
      end_pos = str.index("```", end_pos) + 3
      code_ranges << (start_pos...end_pos)
    end
  end
end