Current indent amount for output in characters
Stack of current list indexes for alphabetic and numeric lists
Stack of list types
Stack of list widths for indentation
Prefix for the next list item. See use_prefix
Output accumulator
Output width in characters
Creates a new formatter that will output (mostly) RDoc markup
# File lib/rdoc/markup/to_rdoc.rb, line 44
def initialize markup = nil
  super
  @markup.add_special(%r\\\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 lib/rdoc/markup/to_rdoc.rb, line 76
def accept_blank_line blank_line
  @res << "\n"
end
						Adds heading to the output
# File lib/rdoc/markup/to_rdoc.rb, line 83
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 lib/rdoc/markup/to_rdoc.rb, line 187
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 lib/rdoc/markup/to_rdoc.rb, line 94
def accept_list_end list
  @list_index.pop
  @list_type.pop
  @list_width.pop
end
						Finishes consumption of list_item
# File lib/rdoc/markup/to_rdoc.rb, line 103
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 lib/rdoc/markup/to_rdoc.rb, line 127
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 lib/rdoc/markup/to_rdoc.rb, line 152
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 lib/rdoc/markup/to_rdoc.rb, line 179
def accept_paragraph paragraph
  text = paragraph.text @hard_break
  wrap attributes text
end
						Adds raw to the output
# File lib/rdoc/markup/to_rdoc.rb, line 197
def accept_raw raw
  @res << raw.parts.join("\n")
end
						Adds rule to the output
# File lib/rdoc/markup/to_rdoc.rb, line 204
def accept_rule rule
  use_prefix or @res << ' ' * @indent
  @res << '-' * (@width - @indent)
  @res << "\n"
end
						Outputs verbatim indented 2 columns
# File lib/rdoc/markup/to_rdoc.rb, line 213
def accept_verbatim verbatim
  indent = ' ' * (@indent + 2)
  verbatim.parts.each do |part|
    @res << indent unless part == "\n"
    @res << part
  end
  @res << "\n" unless @res =~ %r\n\z/
end
						Applies attribute-specific markup to text using
RDoc::AttributeManager
# File lib/rdoc/markup/to_rdoc.rb, line 227
def attributes text
  flow = @am.flow text.dup
  convert_flow flow
end
						Returns the generated output
# File lib/rdoc/markup/to_rdoc.rb, line 235
def end_accepting
  @res.join
end
						Removes preceding \ from the suppressed crossref special
# File lib/rdoc/markup/to_rdoc.rb, line 242
def handle_special_SUPPRESSED_CROSSREF special
  text = special.text
  text = text.sub('\', '') unless in_tt?
  text
end
						Prepares the visitor for text generation
# File lib/rdoc/markup/to_rdoc.rb, line 251
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 lib/rdoc/markup/to_rdoc.rb, line 265
def use_prefix
  prefix, @prefix = @prefix, nil
  @res << prefix if prefix
  prefix
end
						Wraps text to width
# File lib/rdoc/markup/to_rdoc.rb, line 275
def wrap text
  return unless text && !text.empty?
  text_len = @width - @indent
  text_len = 20 if text_len < 20
  re = %r^(.{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
						| / | Search | 
|---|---|
| ? | Show this help |