In Files

  • rdoc/markup/to_rdoc.rb

Class/Module Index [+]

Quicksearch

RDoc::Markup::ToRdoc

Outputs RDoc markup as RDoc markup! (mostly)

Attributes

indent[RW]

Current indent amount for output in characters

list_index[R]

Stack of current list indexes for alphabetic and numeric lists

list_type[R]

Stack of list types

list_width[R]

Stack of list widths for indentation

prefix[R]

Prefix for the next list item. See use_prefix

res[R]

Output accumulator

width[RW]

Output width in characters

Public Class Methods

new(markup = nil) click to toggle source

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
            

Public Instance Methods

accept_blank_line(blank_line) click to toggle source

Adds blank_line to the output

 
               # File rdoc/markup/to_rdoc.rb, line 76
def accept_blank_line blank_line
  @res << "\n"
end
            
accept_block_quote(block_quote) click to toggle source

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
            
accept_heading(heading) click to toggle source

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
            
accept_indented_paragraph(paragraph) click to toggle source

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
            
accept_list_end(list) click to toggle source

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
            
accept_list_item_end(list_item) click to toggle source

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
            
accept_list_item_start(list_item) click to toggle source

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
            
accept_list_start(list) click to toggle source

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
            
accept_paragraph(paragraph) click to toggle source

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
            
accept_raw(raw) click to toggle source

Adds raw to the output

 
               # File rdoc/markup/to_rdoc.rb, line 212
def accept_raw raw
  @res << raw.parts.join("\n")
end
            
accept_rule(rule) click to toggle source

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
            
accept_verbatim(verbatim) click to toggle source

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
            
attributes(text) click to toggle source

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
            
end_accepting() click to toggle source

Returns the generated output

 
               # File rdoc/markup/to_rdoc.rb, line 250
def end_accepting
  @res.join
end
            
handle_special_HARD_BREAK(special) click to toggle source

Adds a newline to the output

 
               # File rdoc/markup/to_rdoc.rb, line 266
def handle_special_HARD_BREAK special
  "\n"
end
            
handle_special_SUPPRESSED_CROSSREF(special) click to toggle source

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
            
init_tags() click to toggle source

Maps attributes to HTML sequences

 
               # File rdoc/markup/to_rdoc.rb, line 67
def init_tags
  add_tag :BOLD, "<b>", "</b>"
  add_tag :TT,   "<tt>", "</tt>"
  add_tag :EM,   "<em>", "</em>"
end
            
start_accepting() click to toggle source

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
            
use_prefix() click to toggle source

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
            
wrap(text) click to toggle source

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 visit Documenting-ruby.org.

blog comments powered by Disqus