Creates a new formatter that will output (mostly) RDoc markup
# File rdoc/markup/to_rdoc.rb, line 47
def initialize markup = nil
super
@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] = ['====== ', '']
end
Adds blank_line to the output
# File rdoc/markup/to_rdoc.rb, line 77
def accept_blank_line blank_line
@res << "\n"
end
Adds heading to the output
# File rdoc/markup/to_rdoc.rb, line 84
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 177
def accept_indented_paragraph paragraph
@indent += paragraph.indent
wrap attributes(paragraph.text)
@indent -= paragraph.indent
end
Finishes consumption of list
# File rdoc/markup/to_rdoc.rb, line 95
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 104
def accept_list_item_end list_item
width = case @list_type.last
when :BULLET then
2
when :NOTE, :LABEL then
@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 123
def accept_list_item_start list_item
type = @list_type.last
case type
when :NOTE, :LABEL then
bullet = attributes(list_item.label) + ":\n"
@prefix = ' ' * @indent
@indent += 2
@prefix << bullet + (' ' * @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 143
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 170
def accept_paragraph paragraph
wrap attributes(paragraph.text)
end
Adds raw to the output
# File rdoc/markup/to_rdoc.rb, line 186
def accept_raw raw
@res << raw.parts.join("\n")
end
Adds rule to the output
# File rdoc/markup/to_rdoc.rb, line 193
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 202
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 216
def attributes text
flow = @am.flow text.dup
convert_flow flow
end
Returns the generated output
# File rdoc/markup/to_rdoc.rb, line 224
def end_accepting
@res.join
end
Removes preceding \ from the suppressed crossref special
# File rdoc/markup/to_rdoc.rb, line 231
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 240
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 254
def use_prefix
prefix = @prefix
@prefix = nil
@res << prefix if prefix
prefix
end
Wraps text to width
# File rdoc/markup/to_rdoc.rb, line 265
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.