class RDoc::Markup::Formatter
Constants
- InlineTag
-
Tag for inline markup containing a
bitfor the bitmask and theonandofftriggers.
Public Class Methods
Source
# File lib/rdoc/markup/formatter.rb, line 27 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
Converts a target url to one that is relative to a given path
Source
# File lib/rdoc/markup/formatter.rb, line 51 def initialize(options, markup = nil) @options = options @markup = markup || RDoc::Markup.new @from_path = '.' end
Creates a new Formatter
Public Instance Methods
Source
# File lib/rdoc/markup/formatter.rb, line 62 def accept_document(document) document.parts.each do |item| case item when RDoc::Markup::Document then # HACK accept_document item else item.accept self end end end
Adds document to the output
Source
# File lib/rdoc/markup/formatter.rb, line 76 def add_regexp_handling_RDOCLINK @markup.add_regexp_handling(/rdoc-[a-z]+:[^\s\]]+/, :RDOCLINK) end
Adds a regexp handling for links of the form rdoc-…:
Source
# File lib/rdoc/markup/formatter.rb, line 83 def annotate(tag) tag end
Allows tag to be decorated with additional information.
Source
# File lib/rdoc/markup/formatter.rb, line 96 def apply_regexp_handling(text) matched = [] @markup.regexp_handlings.each_with_index do |(pattern, name), priority| text.scan(pattern) do m = Regexp.last_match idx = m[1] ? 1 : 0 matched << [m.begin(idx), m.end(idx), m[idx], name, priority] end end # If the start positions are the same, prefer the one with higher priority (registered earlier one) matched.sort_by! {|beg_pos, _, _, _, priority| [beg_pos, priority] } chars = text.chars pos = 0 output = [] matched.each do |beg_pos, end_pos, s, name| next if beg_pos < pos output << [chars[pos...beg_pos].join, false] if beg_pos != pos handled = public_send(:"handle_regexp_#{name}", s) output << [handled, true] pos = end_pos end output << [chars[pos..].join, false] if pos < chars.size output end
Applies regexp handling to text and returns an array of [text, converted?] pairs.
Source
# File lib/rdoc/markup/formatter.rb, line 90 def convert(content) @markup.convert content, self end
Marks up content
Source
# File lib/rdoc/markup/formatter.rb, line 242 def convert_string(string) string end
Converts a string to be fancier if desired
Source
# File lib/rdoc/markup/formatter.rb, line 157 def handle_BOLD(nodes) traverse_inline_nodes(nodes) end
Called when processing bold nodes while traversing inline nodes from handle_inline. Traverse the children nodes and dispatch to the appropriate handlers.
Source
# File lib/rdoc/markup/formatter.rb, line 171 def handle_BOLD_WORD(word) handle_PLAIN_TEXT(word) end
Called when processing bold word nodes while traversing inline nodes from handle_inline. word may need proper escaping.
Source
# File lib/rdoc/markup/formatter.rb, line 164 def handle_EM(nodes) traverse_inline_nodes(nodes) end
Called when processing emphasis nodes while traversing inline nodes from handle_inline. Traverse the children nodes and dispatch to the appropriate handlers.
Source
# File lib/rdoc/markup/formatter.rb, line 178 def handle_EM_WORD(word) handle_PLAIN_TEXT(word) end
Called when processing emphasis word nodes while traversing inline nodes from handle_inline. word may need proper escaping.
Source
# File lib/rdoc/markup/formatter.rb, line 151 def handle_HARD_BREAK end
Called when processing a hard break while traversing inline nodes from handle_inline.
Source
# File lib/rdoc/markup/formatter.rb, line 127 def handle_PLAIN_TEXT(text) end
Called when processing plain text while traversing inline nodes from handle_inline. text may need proper escaping.
Source
# File lib/rdoc/markup/formatter.rb, line 133 def handle_REGEXP_HANDLING_TEXT(text) end
Called when processing regexp-handling-processed text while traversing inline nodes from handle_inline. text may contain markup tags.
Source
# File lib/rdoc/markup/formatter.rb, line 192 def handle_STRIKE(nodes) traverse_inline_nodes(nodes) end
Called when processing strike nodes while traversing inline nodes from handle_inline. Traverse the children nodes and dispatch to the appropriate handlers.
Source
# File lib/rdoc/markup/formatter.rb, line 139 def handle_TEXT(text) apply_regexp_handling(text).each do |part, converted| if converted handle_REGEXP_HANDLING_TEXT(part) else handle_PLAIN_TEXT(part) end end end
Called when processing text node while traversing inline nodes from handle_inline. Apply regexp handling and dispatch to the appropriate handler: handle_REGEXP_HANDLING_TEXT or handle_PLAIN_TEXT.
Source
# File lib/rdoc/markup/formatter.rb, line 201 def handle_TIDYLINK(label_part, url) traverse_inline_nodes(label_part) end
Called when processing tidylink nodes while traversing inline nodes from handle_inline. label_part is an array of strings or nodes representing the link label. url is the link URL. Traverse the label_part nodes and dispatch to the appropriate handlers.
Source
# File lib/rdoc/markup/formatter.rb, line 185 def handle_TT(code) handle_PLAIN_TEXT(code) end
Called when processing tt nodes while traversing inline nodes from handle_inline. code may need proper escaping.
Source
# File lib/rdoc/markup/formatter.rb, line 207 def handle_inline(text) nodes = RDoc::Markup::InlineParser.new(text).parse traverse_inline_nodes(nodes) end
Parses inline text, traverse the resulting nodes, and calls the appropriate handler methods.
Source
# File lib/rdoc/markup/formatter.rb, line 254 def ignore *node end
Use ignore in your subclass to ignore the content of a node.
## # We don't support raw nodes in ToNoRaw alias accept_raw ignore
Source
# File lib/rdoc/markup/formatter.rb, line 260 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
Extracts and a scheme, url and an anchor id from url and returns them.
Source
# File lib/rdoc/markup/formatter.rb, line 215 def traverse_inline_nodes(nodes) nodes.each do |node| next handle_TEXT(node) if String === node case node[:type] when :TIDYLINK handle_TIDYLINK(node[:children], node[:url]) when :HARD_BREAK handle_HARD_BREAK when :BOLD handle_BOLD(node[:children]) when :BOLD_WORD handle_BOLD_WORD(node[:children][0] || '') when :EM handle_EM(node[:children]) when :EM_WORD handle_EM_WORD(node[:children][0] || '') when :TT handle_TT(node[:children][0] || '') when :STRIKE handle_STRIKE(node[:children]) end end end
Traverses nodes and calls the appropriate handler methods Nodes formats are described in RDoc::Markup::InlineParser#parse
Source
# File lib/rdoc/markup/formatter.rb, line 290 def tt?(tag) tag.bit == @tt_bit end
Is tag a tt tag?