summaryrefslogtreecommitdiff
path: root/ruby_2_2/lib/rdoc/markup/to_tt_only.rb
diff options
context:
space:
mode:
Diffstat (limited to 'ruby_2_2/lib/rdoc/markup/to_tt_only.rb')
-rw-r--r--ruby_2_2/lib/rdoc/markup/to_tt_only.rb120
1 files changed, 120 insertions, 0 deletions
diff --git a/ruby_2_2/lib/rdoc/markup/to_tt_only.rb b/ruby_2_2/lib/rdoc/markup/to_tt_only.rb
new file mode 100644
index 0000000000..e2da20c6f3
--- /dev/null
+++ b/ruby_2_2/lib/rdoc/markup/to_tt_only.rb
@@ -0,0 +1,120 @@
+##
+# Extracts sections of text enclosed in plus, tt or code. Used to discover
+# undocumented parameters.
+
+class RDoc::Markup::ToTtOnly < RDoc::Markup::Formatter
+
+ ##
+ # Stack of list types
+
+ attr_reader :list_type
+
+ ##
+ # Output accumulator
+
+ attr_reader :res
+
+ ##
+ # Creates a new tt-only formatter.
+
+ def initialize markup = nil
+ super nil, markup
+
+ add_tag :TT, nil, nil
+ end
+
+ ##
+ # Adds tts from +block_quote+ to the output
+
+ def accept_block_quote block_quote
+ tt_sections block_quote.text
+ end
+
+ ##
+ # Pops the list type for +list+ from #list_type
+
+ def accept_list_end list
+ @list_type.pop
+ end
+
+ ##
+ # Pushes the list type for +list+ onto #list_type
+
+ def accept_list_start list
+ @list_type << list.type
+ end
+
+ ##
+ # Prepares the visitor for consuming +list_item+
+
+ def accept_list_item_start list_item
+ case @list_type.last
+ when :NOTE, :LABEL then
+ Array(list_item.label).map do |label|
+ tt_sections label
+ end.flatten
+ end
+ end
+
+ ##
+ # Adds +paragraph+ to the output
+
+ def accept_paragraph paragraph
+ tt_sections(paragraph.text)
+ end
+
+ ##
+ # Does nothing to +markup_item+ because it doesn't have any user-built
+ # content
+
+ def do_nothing markup_item
+ end
+
+ alias accept_blank_line do_nothing # :nodoc:
+ alias accept_heading do_nothing # :nodoc:
+ alias accept_list_item_end do_nothing # :nodoc:
+ alias accept_raw do_nothing # :nodoc:
+ alias accept_rule do_nothing # :nodoc:
+ alias accept_verbatim do_nothing # :nodoc:
+
+ ##
+ # Extracts tt sections from +text+
+
+ def tt_sections text
+ flow = @am.flow text.dup
+
+ flow.each do |item|
+ case item
+ when String then
+ @res << item if in_tt?
+ when RDoc::Markup::AttrChanger then
+ off_tags res, item
+ on_tags res, item
+ when RDoc::Markup::Special then
+ @res << convert_special(item) if in_tt? # TODO can this happen?
+ else
+ raise "Unknown flow element: #{item.inspect}"
+ end
+ end
+
+ res
+ end
+
+ ##
+ # Returns an Array of items that were wrapped in plus, tt or code.
+
+ def end_accepting
+ @res.compact
+ end
+
+ ##
+ # Prepares the visitor for gathering tt sections
+
+ def start_accepting
+ @res = []
+
+ @list_type = []
+ end
+
+end
+