Class: Coradoc::Markdown::TocGenerator

Inherits:
Object
  • Object
show all
Includes:
Coradoc::Markdown::Transform::TextExtraction
Defined in:
lib/coradoc/markdown/toc_generator.rb

Overview

Table of Contents Generator

Generates a table of contents from document headings. Supports Kramdown-style TOC with options for levels, depth, etc.

Examples:

Basic usage

doc = Coradoc::Markdown.parse(markdown_text)
toc = Coradoc::Markdown::TocGenerator.generate(doc)
puts toc.to_markdown

With options

toc = Coradoc::Markdown::TocGenerator.generate(doc,
  min_level: 2,
  max_level: 4,
  numbered: true
)

Defined Under Namespace

Classes: Entry

Constant Summary collapse

DEFAULT_OPTIONS =

Default options for TOC generation

{
  min_level: 1,
  max_level: 6,
  numbered: false,
  styled: false,
  link_headings: true
}.freeze

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Coradoc::Markdown::Transform::TextExtraction

#extract_text

Constructor Details

#initialize(options = {}) ⇒ TocGenerator

Returns a new instance of TocGenerator.



108
109
110
111
112
113
# File 'lib/coradoc/markdown/toc_generator.rb', line 108

def initialize(options = {})
  @options = DEFAULT_OPTIONS.merge(options)
  @min_level = @options[:min_level]
  @max_level = @options[:max_level]
  @numbered = @options[:numbered]
end

Class Method Details

.generate(document, options = {}) ⇒ Entry?

Generate a TOC from a document

Parameters:

Options Hash (options):

  • :min_level (Integer) — default: 1

    Minimum heading level to include

  • :max_level (Integer) — default: 6

    Maximum heading level to include

  • :numbered (Boolean) — default: false

    Whether to add section numbers

  • :styled (Boolean) — default: false

    Whether to add styling classes

  • :link_headings (Boolean) — default: true

    Whether to link to headings

Returns:

  • (Entry, nil)

    The root TOC entry or nil if no headings



82
83
84
# File 'lib/coradoc/markdown/toc_generator.rb', line 82

def self.generate(document, options = {})
  new(options).generate(document)
end

.generate_array(document, options = {}) ⇒ Array<Hash>

Generate TOC as array structure

Parameters:

Returns:

  • (Array<Hash>)

    Array of TOC entries



101
102
103
104
105
106
# File 'lib/coradoc/markdown/toc_generator.rb', line 101

def self.generate_array(document, options = {})
  toc = generate(document, options)
  return [] unless toc

  toc.children.map(&:to_h)
end

.generate_markdown(document, options = {}) ⇒ String

Generate TOC as Markdown string

Parameters:

Returns:

  • (String)

    Markdown-formatted TOC



91
92
93
94
# File 'lib/coradoc/markdown/toc_generator.rb', line 91

def self.generate_markdown(document, options = {})
  toc = generate(document, options)
  toc ? toc.to_markdown : ''
end

Instance Method Details

#generate(document) ⇒ Entry?

Generate TOC from document

Parameters:

Returns:

  • (Entry, nil)

    Root TOC entry



119
120
121
122
123
124
125
126
# File 'lib/coradoc/markdown/toc_generator.rb', line 119

def generate(document)
  headings = extract_headings(document)
  return nil if headings.empty?

  root = Entry.new(id: nil, text: 'Table of Contents', level: 0)
  build_toc_tree(root, headings)
  root
end