Creates a new formatter that will output (mostly) RDoc markup
# File rdoc/markup/to_rdoc.rb, line 44
def initialize markup = nil
super nil, markup
@markup.add_special(/\\S/, :SUPPRESSED_CROSSREF)
@width = 78
init_tags
@headings = {}
@headings.default = []
@headings[1] = ['= ', '']
@headings[2] = ['== ', '']
@headings[3] = ['=== ', '']
@headings[4] = ['==== ', '']
@headings[5] = ['===== ', '']
@headings[6] = ['====== ', '']
@hard_break = "\n"
end
Adds blank_line to the output
# File rdoc/markup/to_rdoc.rb, line 76
def accept_blank_line blank_line
@res << "\n"
end
Adds paragraph to the output
# File rdoc/markup/to_rdoc.rb, line 83
def accept_block_quote block_quote
@indent += 2
block_quote.parts.each do |part|
@prefix = '> '
part.accept self
end
@indent -= 2
end
Adds heading to the output
# File rdoc/markup/to_rdoc.rb, line 98
def accept_heading heading
use_prefix or @res << ' ' * @indent
@res << @headings[heading.level][0]
@res << attributes(heading.text)
@res << @headings[heading.level][1]
@res << "\n"
end
Adds paragraph to the output
# File rdoc/markup/to_rdoc.rb, line 202
def accept_indented_paragraph paragraph
@indent += paragraph.indent
text = paragraph.text @hard_break
wrap attributes text
@indent -= paragraph.indent
end
Finishes consumption of list
# File rdoc/markup/to_rdoc.rb, line 109
def accept_list_end list
@list_index.pop
@list_type.pop
@list_width.pop
end
Finishes consumption of list_item
# File rdoc/markup/to_rdoc.rb, line 118
def accept_list_item_end list_item
width = case @list_type.last
when :BULLET then
2
when :NOTE, :LABEL then
if @prefix then
@res << @prefix.strip
@prefix = nil
end
@res << "\n"
2
else
bullet = @list_index.last.to_s
@list_index[-1] = @list_index.last.succ
bullet.length + 2
end
@indent -= width
end
Prepares the visitor for consuming list_item
# File rdoc/markup/to_rdoc.rb, line 142
def accept_list_item_start list_item
type = @list_type.last
case type
when :NOTE, :LABEL then
bullets = Array(list_item.label).map do |label|
attributes(label).strip
end.join "\n"
bullets << ":\n" unless bullets.empty?
@prefix = ' ' * @indent
@indent += 2
@prefix << bullets + (' ' * @indent)
else
bullet = type == :BULLET ? '*' : @list_index.last.to_s + '.'
@prefix = (' ' * @indent) + bullet.ljust(bullet.length + 1)
width = bullet.length + 1
@indent += width
end
end
Prepares the visitor for consuming list
# File rdoc/markup/to_rdoc.rb, line 167
def accept_list_start list
case list.type
when :BULLET then
@list_index << nil
@list_width << 1
when :LABEL, :NOTE then
@list_index << nil
@list_width << 2
when :LALPHA then
@list_index << 'a'
@list_width << list.items.length.to_s.length
when :NUMBER then
@list_index << 1
@list_width << list.items.length.to_s.length
when :UALPHA then
@list_index << 'A'
@list_width << list.items.length.to_s.length
else
raise RDoc::Error, "invalid list type #{list.type}"
end
@list_type << list.type
end
Adds paragraph to the output
# File rdoc/markup/to_rdoc.rb, line 194
def accept_paragraph paragraph
text = paragraph.text @hard_break
wrap attributes text
end
Adds raw to the output
# File rdoc/markup/to_rdoc.rb, line 212
def accept_raw raw
@res << raw.parts.join("\n")
end
Adds rule to the output
# File rdoc/markup/to_rdoc.rb, line 219
def accept_rule rule
use_prefix or @res << ' ' * @indent
@res << '-' * (@width - @indent)
@res << "\n"
end
Outputs verbatim indented 2 columns
# File rdoc/markup/to_rdoc.rb, line 228
def accept_verbatim verbatim
indent = ' ' * (@indent + 2)
verbatim.parts.each do |part|
@res << indent unless part == "\n"
@res << part
end
@res << "\n" unless @res =~ /\n\z/
end
Applies attribute-specific markup to text using
RDoc::AttributeManager
# File rdoc/markup/to_rdoc.rb, line 242
def attributes text
flow = @am.flow text.dup
convert_flow flow
end
Returns the generated output
# File rdoc/markup/to_rdoc.rb, line 250
def end_accepting
@res.join
end
Adds a newline to the output
# File rdoc/markup/to_rdoc.rb, line 266
def handle_special_HARD_BREAK special
"\n"
end
Removes preceding \ from the suppressed crossref special
# File rdoc/markup/to_rdoc.rb, line 257
def handle_special_SUPPRESSED_CROSSREF special
text = special.text
text = text.sub('\', '') unless in_tt?
text
end
Prepares the visitor for text generation
# File rdoc/markup/to_rdoc.rb, line 273
def start_accepting
@res = [""]
@indent = 0
@prefix = nil
@list_index = []
@list_type = []
@list_width = []
end
Adds the stored prefix to the output and clears it. Lists generate a prefix for later consumption.
# File rdoc/markup/to_rdoc.rb, line 287
def use_prefix
prefix, @prefix = @prefix, nil
@res << prefix if prefix
prefix
end
Wraps text to width
# File rdoc/markup/to_rdoc.rb, line 297
def wrap text
return unless text && !text.empty?
text_len = @width - @indent
text_len = 20 if text_len < 20
re = /^(.{0,#{text_len}})[ \n]/
next_prefix = ' ' * @indent
prefix = @prefix || next_prefix
@prefix = nil
@res << prefix
while text.length > text_len
if text =~ re then
@res << $1
text.slice!(0, $&.length)
else
@res << text.slice!(0, text_len)
end
@res << "\n" << next_prefix
end
if text.empty? then
@res.pop
@res.pop
else
@res << text
@res << "\n"
end
end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please see Improve the docs, or visit Documenting-ruby.org.