class RDoc::Markup::AttributeManager

Manages changes of attributes in a block of text

Constants

NULL

The NUL character

Attributes

The attributes enabled for this markup object.

A bits of exclusive maps

This maps HTML tags to the corresponding attribute char

This maps delimiters that occur around words (such as bold or tt) where the start and end delimiters and the same. This lets us optimize the regexp

A \ in front of a character that would normally be processed turns off processing. We do this by turning < into <#{PROTECT}

And this maps _regexp handling_ sequences to a name. A regexp handling sequence is something like a WikiWord

And this is used when the delimiters aren’t the same. In this case the hash maps a pattern to the attribute character

Public Class Methods

Creates a new attribute manager that understands bold, emphasized and teletype text.

# File lib/rdoc/markup/attribute_manager.rb, line 80
def initialize
  @html_tags = {}
  @matching_word_pairs = {}
  @protectable = %w[<]
  @regexp_handlings = []
  @word_pair_map = {}
  @exclusive_bitmap = 0
  @attributes = RDoc::Markup::Attributes.new

  add_word_pair "*", "*", :BOLD, true
  add_word_pair "_", "_", :EM, true
  add_word_pair "+", "+", :TT, true

  add_html "em", :EM, true
  add_html "i",  :EM, true
  add_html "b",  :BOLD, true
  add_html "tt",   :TT, true
  add_html "code", :TT, true
end

Public Instance Methods

Return an attribute object with the given turn_on and turn_off bits set

# File lib/rdoc/markup/attribute_manager.rb, line 103
def attribute(turn_on, turn_off)
  RDoc::Markup::AttrChanger.new turn_on, turn_off
end

Changes the current attribute from current to new

# File lib/rdoc/markup/attribute_manager.rb, line 110
def change_attribute current, new
  diff = current ^ new
  attribute(new & diff, current & diff)
end

Used by the tests to change attributes by name from current_set to new_set

# File lib/rdoc/markup/attribute_manager.rb, line 119
def changed_attribute_by_name current_set, new_set
  current = new = 0
  current_set.each do |name|
    current |= @attributes.bitmap_for(name)
  end

  new_set.each do |name|
    new |= @attributes.bitmap_for(name)
  end

  change_attribute(current, new)
end

Copies start_pos to end_pos from the current string

# File lib/rdoc/markup/attribute_manager.rb, line 135
def copy_string(start_pos, end_pos)
  res = @str[start_pos...end_pos]
  res.gsub!(/\000/, '')
  res
end