summaryrefslogtreecommitdiff
path: root/ruby_1_9_3/lib/rdoc/markup/inline.rb
diff options
context:
space:
mode:
Diffstat (limited to 'ruby_1_9_3/lib/rdoc/markup/inline.rb')
-rw-r--r--ruby_1_9_3/lib/rdoc/markup/inline.rb144
1 files changed, 144 insertions, 0 deletions
diff --git a/ruby_1_9_3/lib/rdoc/markup/inline.rb b/ruby_1_9_3/lib/rdoc/markup/inline.rb
new file mode 100644
index 0000000000..cf598d1583
--- /dev/null
+++ b/ruby_1_9_3/lib/rdoc/markup/inline.rb
@@ -0,0 +1,144 @@
+require 'rdoc'
+class RDoc::Markup
+
+ ##
+ # We manage a set of attributes. Each attribute has a symbol name and a bit
+ # value.
+
+ class Attribute
+
+ ##
+ # Special attribute type. See RDoc::Markup#add_special
+
+ SPECIAL = 1
+
+ @@name_to_bitmap = { :_SPECIAL_ => SPECIAL }
+ @@next_bitmap = 2
+
+ ##
+ # Returns a unique bit for +name+
+
+ def self.bitmap_for(name)
+ bitmap = @@name_to_bitmap[name]
+ unless bitmap then
+ bitmap = @@next_bitmap
+ @@next_bitmap <<= 1
+ @@name_to_bitmap[name] = bitmap
+ end
+ bitmap
+ end
+
+ ##
+ # Returns a string representation of +bitmap+
+
+ def self.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
+
+ ##
+ # yields each attribute name in +bitmap+
+
+ def self.each_name_of(bitmap)
+ @@name_to_bitmap.each do |name, bit|
+ next if bit == SPECIAL
+ yield name.to_s if (bitmap & bit) != 0
+ end
+ end
+
+ end
+
+ AttrChanger = Struct.new :turn_on, :turn_off # :nodoc:
+
+ ##
+ # An AttrChanger records a change in attributes. It contains a bitmap of the
+ # attributes to turn on, and a bitmap of those to turn off.
+
+ class AttrChanger
+ def to_s # :nodoc:
+ "Attr: +#{Attribute.as_string turn_on}/-#{Attribute.as_string turn_off}"
+ end
+
+ def inspect # :nodoc:
+ "+%s/-%s" % [
+ Attribute.as_string(turn_on),
+ Attribute.as_string(turn_off),
+ ]
+ end
+ end
+
+ ##
+ # An array of attributes which parallels the characters in a string.
+
+ class AttrSpan
+
+ ##
+ # Creates a new AttrSpan for +length+ characters
+
+ def initialize(length)
+ @attrs = Array.new(length, 0)
+ end
+
+ ##
+ # Toggles +bits+ from +start+ to +length+
+ def set_attrs(start, length, bits)
+ for i in start ... (start+length)
+ @attrs[i] |= bits
+ end
+ end
+
+ ##
+ # Accesses flags for character +n+
+
+ def [](n)
+ @attrs[n]
+ end
+
+ end
+
+ ##
+ # Hold details of a special sequence
+
+ class Special
+
+ ##
+ # Special type
+
+ attr_reader :type
+
+ ##
+ # Special text
+
+ attr_accessor :text
+
+ ##
+ # Creates a new special sequence of +type+ with +text+
+
+ def initialize(type, text)
+ @type, @text = type, text
+ end
+
+ ##
+ # Specials are equal when the have the same text and type
+
+ def ==(o)
+ self.text == o.text && self.type == o.type
+ end
+
+ def inspect # :nodoc:
+ "#<RDoc::Markup::Special:0x%x @type=%p, name=%p @text=%p>" % [
+ object_id, @type, RDoc::Markup::Attribute.as_string(type), text.dump]
+ end
+
+ def to_s # :nodoc:
+ "Special: type=#{type}, name=#{RDoc::Markup::Attribute.as_string type}, text=#{text.dump}"
+ end
+
+ end
+
+end
+