# class RDoc::Markup::Attributes

frozen_string_literal: false

We manage a set of attributes. Each attribute has a symbol name and a bit value.

### Attributes

special[R]

The special attribute type. See RDoc::Markup#add_special

### Public Class Methods

new() click to toggle source

Creates a new attributes set.

    # File lib/rdoc/markup/attributes.rb, line 16
    def initialize
      @special = 1

      @name_to_bitmap = [
        [:_SPECIAL_, @special],
      ]

      @next_bitmap = @special << 1
    end

### Public Instance Methods

as_string(bitmap) click to toggle source

Returns a string representation of `bitmap`

    # File lib/rdoc/markup/attributes.rb, line 46
    def as_string bitmap
      return 'none' if bitmap.zero?
      res = []

      @name_to_bitmap.each do |name, bit|
        res << name if (bitmap & bit) != 0
      end

      res.join ','
    end

bitmap_for(name) click to toggle source

Returns a unique bit for `name`

    # File lib/rdoc/markup/attributes.rb, line 29
    def bitmap_for name
      bitmap = @name_to_bitmap.assoc name

      unless bitmap then
        bitmap = @next_bitmap
        @next_bitmap <<= 1
        @name_to_bitmap << [name, bitmap]
      else
        bitmap = bitmap.last
      end

      bitmap
    end

each_name_of(bitmap) { |name| ... } click to toggle source

yields each attribute name in `bitmap`

    # File lib/rdoc/markup/attributes.rb, line 60
    def each_name_of bitmap
      return enum_for __method__, bitmap unless block_given?

      @name_to_bitmap.each do |name, bit|
        next if bit == @special

        yield name.to_s if (bitmap & bit) != 0
      end
    end