In Files

  • rdoc/markup/formatter.rb

Class/Module Index [+]

Quicksearch

RDoc::Markup::Formatter

Base class for RDoc markup formatters

Formatters use a visitor pattern to convert content into output.

If you'd like to write your own Formatter use RDoc::Markup::FormatterTestCase. If you're writing a text-output formatter use RDoc::Markup::TextFormatterTestCase which provides extra test cases.

Constants

InlineTag

Tag for inline markup containing a bit for the bitmask and the on and off triggers.

Public Class Methods

new(markup = nil) click to toggle source

Creates a new Formatter

 
               # File rdoc/markup/formatter.rb, line 23
def initialize markup = nil
  @markup = markup || RDoc::Markup.new
  @am     = @markup.attribute_manager

  @attr_tags = []

  @in_tt = 0
  @tt_bit = RDoc::Markup::Attribute.bitmap_for :TT
end
            

Public Instance Methods

accept_document(document) click to toggle source

Adds document to the output

 
               # File rdoc/markup/formatter.rb, line 36
def accept_document document
  document.parts.each do |item|
    item.accept self
  end
end
            
add_tag(name, start, stop) click to toggle source

Add a new set of tags for an attribute. We allow separate start and end tags for flexibility

 
               # File rdoc/markup/formatter.rb, line 46
def add_tag(name, start, stop)
  attr = RDoc::Markup::Attribute.bitmap_for name
  @attr_tags << InlineTag.new(attr, start, stop)
end
            
annotate(tag) click to toggle source

Allows tag to be decorated with additional information.

 
               # File rdoc/markup/formatter.rb, line 54
def annotate(tag)
  tag
end
            
convert(content) click to toggle source

Marks up content

 
               # File rdoc/markup/formatter.rb, line 61
def convert(content)
  @markup.convert content, self
end
            
convert_flow(flow) click to toggle source

Converts flow items flow

 
               # File rdoc/markup/formatter.rb, line 68
def convert_flow(flow)
  res = []

  flow.each do |item|
    case item
    when String then
      res << convert_string(item)
    when RDoc::Markup::AttrChanger then
      off_tags res, item
      on_tags res, item
    when RDoc::Markup::Special then
      res << convert_special(item)
    else
      raise "Unknown flow element: #{item.inspect}"
    end
  end

  res.join
end
            
convert_special(special) click to toggle source

Converts added specials. See RDoc::Markup#add_special

 
               # File rdoc/markup/formatter.rb, line 91
def convert_special special
  return special.text if in_tt?

  handled = false

  RDoc::Markup::Attribute.each_name_of special.type do |name|
    method_name = "handle_special_#{name}"

    if respond_to? method_name then
      special.text = send method_name, special
      handled = true
    end
  end

  raise "Unhandled special: #{special}" unless handled

  special.text
end
            
convert_string(string) click to toggle source

Converts a string to be fancier if desired

 
               # File rdoc/markup/formatter.rb, line 113
def convert_string string
  string
end
            
in_tt?() click to toggle source

Are we currently inside tt tags?

 
               # File rdoc/markup/formatter.rb, line 120
def in_tt?
  @in_tt > 0
end
            
off_tags(res, item) click to toggle source

Turns off tags for item on res

 
               # File rdoc/markup/formatter.rb, line 142
def off_tags res, item
  attr_mask = item.turn_off
  return if attr_mask.zero?

  @attr_tags.reverse_each do |tag|
    if attr_mask & tag.bit != 0 then
      @in_tt -= 1 if tt? tag
      res << annotate(tag.off)
    end
  end
end
            
on_tags(res, item) click to toggle source

Turns on tags for item on res

 
               # File rdoc/markup/formatter.rb, line 127
def on_tags res, item
  attr_mask = item.turn_on
  return if attr_mask.zero?

  @attr_tags.each do |tag|
    if attr_mask & tag.bit != 0 then
      res << annotate(tag.on)
      @in_tt += 1 if tt? tag
    end
  end
end
            
tt?(tag) click to toggle source

Is tag a tt tag?

 
               # File rdoc/markup/formatter.rb, line 157
def tt? tag
  tag.bit == @tt_bit
end