Imported File#ftype spec from rubyspecs.
[rbx.git] / lib / rdoc / markup / inline.rb
blobee77679a112032a5956559b2c83af679b0d9176e
1 require 'rdoc/markup'
3 class RDoc::Markup
5   ##
6   # We manage a set of attributes. Each attribute has a symbol name and a bit
7   # value.
9   class Attribute
10     SPECIAL = 1
12     @@name_to_bitmap = { :_SPECIAL_ => SPECIAL }
13     @@next_bitmap = 2
15     def self.bitmap_for(name)
16       bitmap = @@name_to_bitmap[name]
17       unless bitmap then
18         bitmap = @@next_bitmap
19         @@next_bitmap <<= 1
20         @@name_to_bitmap[name] = bitmap
21       end
22       bitmap
23     end
25     def self.as_string(bitmap)
26       return "none" if bitmap.zero?
27       res = []
28       @@name_to_bitmap.each do |name, bit|
29         res << name if (bitmap & bit) != 0
30       end
31       res.join(",")
32     end
34     def self.each_name_of(bitmap)
35       @@name_to_bitmap.each do |name, bit|
36         next if bit == SPECIAL
37         yield name.to_s if (bitmap & bit) != 0
38       end
39     end
40   end
42   AttrChanger = Struct.new(:turn_on, :turn_off)
44   ##
45   # An AttrChanger records a change in attributes. It contains a bitmap of the
46   # attributes to turn on, and a bitmap of those to turn off.
48   class AttrChanger
49     def to_s
50       "Attr: +#{Attribute.as_string(@turn_on)}/-#{Attribute.as_string(@turn_on)}"
51     end
52   end
54   ##
55   # An array of attributes which parallels the characters in a string.
57   class AttrSpan
58     def initialize(length)
59       @attrs = Array.new(length, 0)
60     end
62     def set_attrs(start, length, bits)
63       for i in start ... (start+length)
64         @attrs[i] |= bits
65       end
66     end
68     def [](n)
69       @attrs[n]
70     end
71   end
73   ##
74   # Hold details of a special sequence
76   class Special
77     attr_reader   :type
78     attr_accessor :text
80     def initialize(type, text)
81       @type, @text = type, text
82     end
84     def ==(o)
85       self.text == o.text && self.type == o.type
86     end
88     def inspect
89       "#<RDoc::Markup::Special:0x%x @type=%p, name=%p @text=%p>" % [
90         object_id, @type, RDoc::Markup::Attribute.as_string(type), text.dump]
91     end
93     def to_s
94       "Special: type=#{type}, name=#{RDoc::Markup::Attribute.as_string type}, text=#{text.dump}"
95     end
97   end
99 end
101 require 'rdoc/markup/attribute_manager'