Class: RDoc::Markup::Formatter

Inherits:
Object
  • Object
show all
Defined in:
lib/rdoc/markup/formatter.rb

Overview

Base class for RDoc markup formatters

Formatters use a visitor pattern to convert content into output.

Defined Under Namespace

Classes: InlineTag

Instance Method Summary (collapse)

Constructor Details

- (Formatter) initialize

Creates a new Formatter



19
20
21
22
23
24
25
26
# File 'lib/rdoc/markup/formatter.rb', line 19

def initialize
  @markup = RDoc::Markup.new
  @am = @markup.attribute_manager
  @attr_tags = []

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

Instance Method Details

- (Object) add_tag(name, start, stop)

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



32
33
34
35
# File 'lib/rdoc/markup/formatter.rb', line 32

def add_tag(name, start, stop)
  attr = RDoc::Markup::Attribute.bitmap_for name
  @attr_tags << InlineTag.new(attr, start, stop)
end

- (Object) annotate(tag)

Allows tag to be decorated with additional information.



40
41
42
# File 'lib/rdoc/markup/formatter.rb', line 40

def annotate(tag)
  tag
end

- (Object) convert(content)

Marks up content



47
48
49
# File 'lib/rdoc/markup/formatter.rb', line 47

def convert(content)
  @markup.convert content, self
end

- (Object) convert_flow(flow)

Converts flow items flow



54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/rdoc/markup/formatter.rb', line 54

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

- (Object) convert_special(special)

Converts added specials. See RDoc::Markup#add_special



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/rdoc/markup/formatter.rb', line 77

def convert_special(special)
  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

- (Object) convert_string(string)

Converts a string to be fancier if desired



97
98
99
# File 'lib/rdoc/markup/formatter.rb', line 97

def convert_string string
  string
end

- (Boolean) in_tt?

Are we currently inside tt tags?

Returns:

  • (Boolean)


104
105
106
# File 'lib/rdoc/markup/formatter.rb', line 104

def in_tt?
  @in_tt > 0
end

- (Object) off_tags(res, item)

Turns off tags for item on res



126
127
128
129
130
131
132
133
134
135
136
# File 'lib/rdoc/markup/formatter.rb', line 126

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

- (Object) on_tags(res, item)

Turns on tags for item on res



111
112
113
114
115
116
117
118
119
120
121
# File 'lib/rdoc/markup/formatter.rb', line 111

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

- (Boolean) tt?(tag)

Is tag a tt tag?

Returns:

  • (Boolean)


141
142
143
# File 'lib/rdoc/markup/formatter.rb', line 141

def tt? tag
  tag.bit == @tt_bit
end