typestar

TOC de Markdown en Ruby

Un script completo: parsear los encabezados y emitir un índice anidado.

#!/usr/bin/env ruby
# Construye una tabla de contenidos anidada a partir de encabezados markdown.

DOC = <<~MARKDOWN
  # Getting started
  ## Install
  ## First run
  # Concepts
  ## Tours and sets
  ### Stars
  # FAQ
MARKDOWN

entries = DOC.lines.filter_map do |line|
  next unless line =~ /\A(#+)\s+(.+)/
  depth = Regexp.last_match(1).length
  title = Regexp.last_match(2).strip
  slug = title.downcase.gsub(/[^a-z0-9]+/, "-")
  [depth, title, slug]
end

entries.each do |depth, title, slug|
  puts "#{"  " * (depth - 1)}- [#{title}](##{slug})"
end

puts "#{entries.length} headings"

Cómo funciona

  1. filter_map conserva solo las líneas que coinciden con la regexp de encabezados.
  2. Regexp.last_match extrae la profundidad y el título.
  3. gsub convierte los títulos en slugs; la sangría viene de la profundidad del encabezado.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
26
Caracteres a escribir
560
Tokens
125
Ritmo de tres estrellas
75 tpm

Al ritmo de tres estrellas de 75 tokens por minuto, este intento toma unos 100 segundos.

Escribe este fragmento

Paso 2 de 2 en Bis; paso 29 de 29 en Fundamentos del lenguaje.

← Anterior