Class: RDoc::Markup::Formatter
Relationships & Source Files | |
Namespace Children | |
Classes:
| |
Extension / Inclusion / Inheritance Descendants | |
Subclasses:
|
|
Inherits: | Object |
Defined in: | lib/rdoc/markup/formatter.rb |
Overview
Base class for ::RDoc::RDoc markup formatters
Formatters are a visitor that converts an ::RDoc::Markup tree (from a comment) into some kind of output. ::RDoc::RDoc ships with formatters for converting back to rdoc, ANSI text, HTML, a Table of Contents and other formats.
If you'd like to write your own Formatter
use ::RDoc::TestCase. If you're writing a text-output formatter use TextFormatterTestCase which provides extra test cases.
Class Method Summary
-
.gen_relative_url(path, target)
Converts a target url to one that is relative to a given path.
-
.new(options, markup = nil) ⇒ Formatter
constructor
Creates a new
Formatter
.
Instance Attribute Summary
-
#in_tt? ⇒ Boolean
readonly
Are we currently inside tt tags?
Instance Method Summary
-
#accept_document(document)
Adds
document
to the output. -
#add_special_RDOCLINK
Adds a special for links of the form rdoc-…:
-
#add_special_TIDYLINK
Adds a special for links of the form
<text>
and <#add_tag(name, start, stop)Add a new set of tags for an attribute.
- #annotate(tag)
Allows
tag
to be decorated with additional information.- #convert(content)
Marks up
content
- #convert_flow(flow)
Converts flow items
flow
- #convert_special(special)
Converts added specials.
- #convert_string(string)
Converts a string to be fancier if desired.
- #ignore(*node) (also: #accept_raw, #accept_rule, #accept_block_quote, #accept_heading, #accept_list_end, #accept_list_item_end, #accept_list_item_start, #accept_list_start, #accept_raw, #accept_rule, #accept_verbatim, #accept_block_quote, #accept_raw, #accept_rule, #accept_blank_line, #accept_paragraph, #accept_verbatim, #accept_list_end, #accept_list_item_start, #accept_list_item_end, #accept_list_end_bullet, #accept_list_start)
Use ignore in your subclass to ignore the content of a node.
- #off_tags(res, item)
Turns off tags for
item
onres
- #on_tags(res, item)
Turns on tags for
item
onres
- #parse_url(url)
Extracts and a scheme, url and an anchor id from
url
and returns them.- #tt?(tag) ⇒ Boolean
Is
tag
a tt tag?Constructor Details
.new(options, markup = nil) ⇒
Formatter
Creates a new
Formatter
# File 'lib/rdoc/markup/formatter.rb', line 48
def initialize , markup = nil @options = @markup = markup || RDoc::Markup.new @am = @markup.attribute_manager @am.add_special(/<br>/, :HARD_BREAK) @attributes = @am.attributes @attr_tags = [] @in_tt = 0 @tt_bit = @attributes.bitmap_for :TT @hard_break = '' @from_path = '.' end
Class Method Details
.gen_relative_url(path, target)
Converts a target url to one that is relative to a given path
# File 'lib/rdoc/markup/formatter.rb', line 24
def self.gen_relative_url path, target from = File.dirname path to, to_file = File.split target from = from.split "/" to = to.split "/" from.delete '.' to.delete '.' while from.size > 0 and to.size > 0 and from[0] == to[0] do from.shift to.shift end from.fill ".." from.concat to from << to_file File.join(*from) end
Instance Attribute Details
#in_tt? ⇒
Boolean
(readonly)Are we currently inside tt tags?
# File 'lib/rdoc/markup/formatter.rb', line 193
def in_tt? @in_tt > 0 end
Instance Method Details
#accept_document(document)
Adds
document
to the output#add_special_RDOCLINK
Adds a special for links of the form rdoc-…:
# File 'lib/rdoc/markup/formatter.rb', line 83
def add_special_RDOCLINK @markup.add_special(/rdoc-[a-z]:[^\s\]]/, :RDOCLINK) end
#add_special_TIDYLINK
Adds a special for links of the form
<text>
and <add_special(/(?: \{.*?\} | # multi-word label \b[^\s{}]+? # single-word label ) \[\S+?\] # link target /x, :TIDYLINK) end#add_tag(name, start, stop)
Add a new set of tags for an attribute. We allow separate start and end tags for flexibility
#annotate(tag)
Allows
tag
to be decorated with additional information.# File 'lib/rdoc/markup/formatter.rb', line 112
def annotate(tag) tag end
#convert(content)
Marks up
content
# File 'lib/rdoc/markup/formatter.rb', line 119
def convert content @markup.convert content, self end
#convert_flow(flow)
Converts flow items
flow
# File 'lib/rdoc/markup/formatter.rb', line 126
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)
Converts added specials. See RDoc::Markup#add_special
# File 'lib/rdoc/markup/formatter.rb', line 149
def convert_special special return special.text if in_tt? handled = false @attributes.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 unless handled then special_name = @attributes.as_string special.type raise RDoc::Error, "Unhandled special #{special_name}: #{special}" end special.text end
#convert_string(string)
Converts a string to be fancier if desired
# File 'lib/rdoc/markup/formatter.rb', line 175
def convert_string string string end
#ignore(*node) Also known as: #accept_raw, #accept_rule, #accept_block_quote, #accept_heading, #accept_list_end, #accept_list_item_end, #accept_list_item_start, #accept_list_start, #accept_raw, #accept_rule, #accept_verbatim, #accept_block_quote, #accept_raw, #accept_rule, #accept_blank_line, #accept_paragraph, #accept_verbatim, #accept_list_end, #accept_list_item_start, #accept_list_item_end, #accept_list_end_bullet, #accept_list_start
Use ignore in your subclass to ignore the content of a node.
## # We don't support raw nodes in ToNoRaw alias accept_raw ignore
# File 'lib/rdoc/markup/formatter.rb', line 187
def ignore *node end
#off_tags(res, item)
Turns off tags for
item
onres
#on_tags(res, item)
Turns on tags for
item
onres
#parse_url(url)
Extracts and a scheme, url and an anchor id from
url
and returns them.# File 'lib/rdoc/markup/formatter.rb', line 230
def parse_url url case url when /^rdoc-label:([^:]*)(?::(.*))?/ then scheme = 'link' path = "##{$1}" id = " id=\"#{$2}\"" if $2 when /([A-Za-z]+):(.*)/ then scheme = $1.downcase path = $2 when /^#/ then else scheme = 'http' path = url url = url end if scheme == 'link' then url = if path[0, 1] == '#' then # is this meaningful? path else self.class.gen_relative_url @from_path, path end end [scheme, url, id] end
#tt?(tag) ⇒
Boolean
Is
tag
a tt tag?# File 'lib/rdoc/markup/formatter.rb', line 260
def tt? tag tag.bit == @tt_bit end
- #annotate(tag)