Class: RDoc::Markup::Formatter
- Inherits:
-
Object
- Object
- RDoc::Markup::Formatter
- Defined in:
- lib/rdoc/markup/formatter.rb
Overview
Base class for RDoc markup formatters
Formatters use a visitor pattern to convert content into output.
If you'd like to write your own Formatter use RDoc::Markup::FormatterTestCase. If you're writing a text-output formatter use RDoc::Markup::TextFormatterTestCase which provides extra test cases.
Defined Under Namespace
Classes: InlineTag
Instance Method Summary collapse
-
#accept_document(document) ⇒ Object
Adds
document
to the output. -
#add_tag(name, start, stop) ⇒ Object
Add a new set of tags for an attribute.
-
#annotate(tag) ⇒ Object
Allows
tag
to be decorated with additional information. -
#convert(content) ⇒ Object
Marks up
content
. -
#convert_flow(flow) ⇒ Object
Converts flow items
flow
. -
#convert_special(special) ⇒ Object
Converts added specials.
-
#convert_string(string) ⇒ Object
Converts a string to be fancier if desired.
-
#in_tt? ⇒ Boolean
Are we currently inside tt tags?.
-
#initialize(markup = nil) ⇒ Formatter
constructor
Creates a new Formatter.
-
#off_tags(res, item) ⇒ Object
Turns off tags for
item
onres
. -
#on_tags(res, item) ⇒ Object
Turns on tags for
item
onres
. -
#tt?(tag) ⇒ Boolean
Is
tag
a tt tag?.
Constructor Details
#initialize(markup = nil) ⇒ Formatter
Creates a new Formatter
23 24 25 26 27 28 29 30 31 |
# File 'lib/rdoc/markup/formatter.rb', line 23 def initialize markup = nil @markup = 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
#accept_document(document) ⇒ Object
Adds document
to the output
36 37 38 39 40 |
# File 'lib/rdoc/markup/formatter.rb', line 36 def accept_document document document.parts.each do |item| item.accept self end end |
#add_tag(name, start, stop) ⇒ Object
Add a new set of tags for an attribute. We allow separate start and end tags for flexibility
46 47 48 49 |
# File 'lib/rdoc/markup/formatter.rb', line 46 def add_tag(name, start, stop) attr = RDoc::Markup::Attribute.bitmap_for name @attr_tags << InlineTag.new(attr, start, stop) end |
#annotate(tag) ⇒ Object
Allows tag
to be decorated with additional information.
54 55 56 |
# File 'lib/rdoc/markup/formatter.rb', line 54 def annotate(tag) tag end |
#convert(content) ⇒ Object
Marks up content
61 62 63 |
# File 'lib/rdoc/markup/formatter.rb', line 61 def convert(content) @markup.convert content, self end |
#convert_flow(flow) ⇒ Object
Converts flow items flow
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/rdoc/markup/formatter.rb', line 68 def convert_flow(flow) res = [] flow.each do |item| case item when String then res << convert_string(item) when RDoc::Markup::AttrChanger then res, item res, item when RDoc::Markup::Special then res << convert_special(item) else raise "Unknown flow element: #{item.inspect}" end end res.join end |
#convert_special(special) ⇒ Object
Converts added specials. See RDoc::Markup#add_special
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/rdoc/markup/formatter.rb', line 91 def convert_special special return special.text if in_tt? 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 |
#convert_string(string) ⇒ Object
Converts a string to be fancier if desired
113 114 115 |
# File 'lib/rdoc/markup/formatter.rb', line 113 def convert_string string string end |
#in_tt? ⇒ Boolean
Are we currently inside tt tags?
120 121 122 |
# File 'lib/rdoc/markup/formatter.rb', line 120 def in_tt? @in_tt > 0 end |
#off_tags(res, item) ⇒ Object
Turns off tags for item
on res
142 143 144 145 146 147 148 149 150 151 152 |
# File 'lib/rdoc/markup/formatter.rb', line 142 def 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 |
#on_tags(res, item) ⇒ Object
Turns on tags for item
on res
127 128 129 130 131 132 133 134 135 136 137 |
# File 'lib/rdoc/markup/formatter.rb', line 127 def 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 |
#tt?(tag) ⇒ Boolean
Is tag
a tt tag?
157 158 159 |
# File 'lib/rdoc/markup/formatter.rb', line 157 def tt? tag tag.bit == @tt_bit end |