2015-12-16 00:07:31 -05:00
|
|
|
# frozen_string_literal: false
|
2012-11-26 23:28:14 -05:00
|
|
|
##
|
|
|
|
# Extracts just the RDoc::Markup::Heading elements from a
|
|
|
|
# RDoc::Markup::Document to help build a table of contents
|
|
|
|
|
|
|
|
class RDoc::Markup::ToTableOfContents < RDoc::Markup::Formatter
|
|
|
|
|
|
|
|
@to_toc = nil
|
|
|
|
|
|
|
|
##
|
|
|
|
# Singleton for table-of-contents generation
|
|
|
|
|
|
|
|
def self.to_toc
|
|
|
|
@to_toc ||= new
|
|
|
|
end
|
|
|
|
|
|
|
|
##
|
|
|
|
# Output accumulator
|
|
|
|
|
|
|
|
attr_reader :res
|
|
|
|
|
2012-12-05 17:20:15 -05:00
|
|
|
##
|
|
|
|
# Omits headings with a level less than the given level.
|
|
|
|
|
|
|
|
attr_accessor :omit_headings_below
|
|
|
|
|
2012-11-26 23:28:14 -05:00
|
|
|
def initialize # :nodoc:
|
|
|
|
super nil
|
2012-12-05 17:20:15 -05:00
|
|
|
|
|
|
|
@omit_headings_below = nil
|
|
|
|
end
|
|
|
|
|
|
|
|
##
|
|
|
|
# Adds +document+ to the output, using its heading cutoff if present
|
|
|
|
|
|
|
|
def accept_document document
|
|
|
|
@omit_headings_below = document.omit_headings_below
|
|
|
|
|
|
|
|
super
|
2012-11-26 23:28:14 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
##
|
|
|
|
# Adds +heading+ to the table of contents
|
|
|
|
|
|
|
|
def accept_heading heading
|
2012-12-05 17:20:15 -05:00
|
|
|
@res << heading unless suppressed? heading
|
2012-11-26 23:28:14 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
##
|
|
|
|
# Returns the table of contents
|
|
|
|
|
|
|
|
def end_accepting
|
|
|
|
@res
|
|
|
|
end
|
|
|
|
|
|
|
|
##
|
|
|
|
# Prepares the visitor for text generation
|
|
|
|
|
|
|
|
def start_accepting
|
2012-12-05 17:20:15 -05:00
|
|
|
@omit_headings_below = nil
|
2012-11-26 23:28:14 -05:00
|
|
|
@res = []
|
|
|
|
end
|
|
|
|
|
2012-12-05 17:20:15 -05:00
|
|
|
##
|
|
|
|
# Returns true if +heading+ is below the display threshold
|
|
|
|
|
|
|
|
def suppressed? heading
|
|
|
|
return false unless @omit_headings_below
|
|
|
|
|
|
|
|
heading.level > @omit_headings_below
|
|
|
|
end
|
|
|
|
|
2012-11-26 23:28:14 -05:00
|
|
|
# :stopdoc:
|
|
|
|
alias accept_block_quote ignore
|
|
|
|
alias accept_raw ignore
|
|
|
|
alias accept_rule ignore
|
|
|
|
alias accept_blank_line ignore
|
|
|
|
alias accept_paragraph ignore
|
|
|
|
alias accept_verbatim ignore
|
|
|
|
alias accept_list_end ignore
|
|
|
|
alias accept_list_item_start ignore
|
|
|
|
alias accept_list_item_end ignore
|
|
|
|
alias accept_list_end_bullet ignore
|
|
|
|
alias accept_list_start ignore
|
|
|
|
# :startdoc:
|
|
|
|
|
|
|
|
end
|
|
|
|
|