Class: Coradoc::Html::TocBuilder
- Inherits:
-
Object
- Object
- Coradoc::Html::TocBuilder
- Defined in:
- lib/coradoc/html/toc_builder.rb
Overview
Builds a CoreModel::Toc from a document’s StructuralElement tree.
Walks the section hierarchy, assigns section numbers, and returns a Toc model with nested TocEntry children. Section numbers are derived from tree position — single source of truth for both TOC rendering and heading numbering.
Class Method Summary collapse
-
.from_options(options) ⇒ TocBuilder
Build a TocBuilder from renderer-style options hash.
Instance Method Summary collapse
-
#build(document) ⇒ CoreModel::Toc
Build a Toc model from a document.
-
#build_with_numbers(document) ⇒ Array(CoreModel::Toc, Hash)
Build TOC and section number map in a single tree walk.
-
#initialize(max_level: 6, numbered: false, section_number_levels: 3) ⇒ TocBuilder
constructor
A new instance of TocBuilder.
Constructor Details
#initialize(max_level: 6, numbered: false, section_number_levels: 3) ⇒ TocBuilder
Returns a new instance of TocBuilder.
12 13 14 15 16 |
# File 'lib/coradoc/html/toc_builder.rb', line 12 def initialize(max_level: 6, numbered: false, section_number_levels: 3) @max_level = max_level @numbered = numbered @section_number_levels = section_number_levels end |
Class Method Details
.from_options(options) ⇒ TocBuilder
Build a TocBuilder from renderer-style options hash.
22 23 24 25 26 27 |
# File 'lib/coradoc/html/toc_builder.rb', line 22 def self.() section_number_levels = [:section_number_levels] || 3 toc_levels = [:toc_levels] || 2 max_level = [toc_levels, section_number_levels].min new(max_level: max_level, numbered: [:section_numbers] == true, section_number_levels: section_number_levels) end |
Instance Method Details
#build(document) ⇒ CoreModel::Toc
Build a Toc model from a document.
33 34 35 36 |
# File 'lib/coradoc/html/toc_builder.rb', line 33 def build(document) toc, = build_with_numbers(document) toc end |
#build_with_numbers(document) ⇒ Array(CoreModel::Toc, Hash)
Build TOC and section number map in a single tree walk.
42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/coradoc/html/toc_builder.rb', line 42 def build_with_numbers(document) entries = [] counters = [0] collect_entries(document.children, entries, 1, counters, always_number: true) if document.children map = {} flatten_numbers(entries, map) strip_numbers(entries) unless @numbered toc = CoreModel::Toc.new( entries: entries, min_level: 1, max_level: @max_level, numbered: @numbered ) [toc, map] end |