In Files

  • rdoc/markup/to_html.rb

Files

Class/Module Index [+]

Quicksearch

RDoc::Markup::ToHtml

Public Class Methods

gen_relative_url(path, target) click to toggle source

Converts a target url to one that is relative to a given path

 
               # File rdoc/markup/to_html.rb, line 40
def self.gen_relative_url(path, target)
  from        = File.dirname path
  to, to_file = File.split target

  from = from.split "/"
  to   = to.split "/"

  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
            
new() click to toggle source
 
               # File rdoc/markup/to_html.rb, line 20
def initialize
  super

  # @in_tt - tt nested levels count
  # @tt_bit - cache
  @in_tt = 0
  @tt_bit = RDoc::Markup::Attribute.bitmap_for :TT

  # external hyperlinks
  @markup.add_special(/((link:|https?:|mailto:|ftp:|www\.)\S+\w)/, :HYPERLINK)

  # and links of the form  <text>[<url>]
  @markup.add_special(/(((\{.*?\})|\b\S+?)\[\S+?\.\S+?\])/, :TIDYLINK)

  init_tags
end
            

Public Instance Methods

accept_blank_line(am, fragment) click to toggle source
 
               # File rdoc/markup/to_html.rb, line 211
def accept_blank_line(am, fragment)
  # @res << annotate("<p />") << "\n"
end
            
accept_heading(am, fragment) click to toggle source
 
               # File rdoc/markup/to_html.rb, line 215
def accept_heading(am, fragment)
  @res << convert_heading(fragment.head_level, am.flow(fragment.txt))
end
            
accept_list_end(am, fragment) click to toggle source
 
               # File rdoc/markup/to_html.rb, line 192
def accept_list_end(am, fragment)
  if tag = @in_list_entry.pop
    @res << annotate(tag) << "\n"
  end
  @res << html_list_name(fragment.type, false) << "\n"
end
            
accept_list_item(am, fragment) click to toggle source
 
               # File rdoc/markup/to_html.rb, line 199
def accept_list_item(am, fragment)
  if tag = @in_list_entry.last
    @res << annotate(tag) << "\n"
  end

  @res << list_item_start(am, fragment)

  @res << wrap(convert_flow(am.flow(fragment.txt))) << "\n"

  @in_list_entry[-1] = list_end_for(fragment.type)
end
            
accept_list_start(am, fragment) click to toggle source
 
               # File rdoc/markup/to_html.rb, line 187
def accept_list_start(am, fragment)
  @res << html_list_name(fragment.type, true) << "\n"
  @in_list_entry.push false
end
            
accept_paragraph(am, fragment) click to toggle source
 
               # File rdoc/markup/to_html.rb, line 169
def accept_paragraph(am, fragment)
  @res << annotate("<p>") + "\n"
  @res << wrap(convert_flow(am.flow(fragment.txt)))
  @res << annotate("</p>") + "\n"
end
            
accept_rule(am, fragment) click to toggle source
 
               # File rdoc/markup/to_html.rb, line 181
def accept_rule(am, fragment)
  size = fragment.param
  size = 10 if size > 10
  @res << "<hr size=\"#{size}\"></hr>"
end
            
accept_verbatim(am, fragment) click to toggle source
 
               # File rdoc/markup/to_html.rb, line 175
def accept_verbatim(am, fragment)
  @res << annotate("<pre>") + "\n"
  @res << CGI.escapeHTML(fragment.txt)
  @res << annotate("</pre>") << "\n"
end
            
add_tag(name, start, stop) click to toggle source

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

 
               # File rdoc/markup/to_html.rb, line 144
def add_tag(name, start, stop)
  @attr_tags << InlineTag.new(RDoc::Markup::Attribute.bitmap_for(name), start, stop)
end
            
annotate(tag) click to toggle source

Given an HTML tag, decorate it with class information and the like if required. This is a no-op in the base class, but is overridden in HTML output classes that implement style sheets.

 
               # File rdoc/markup/to_html.rb, line 153
def annotate(tag)
  tag
end
            
end_accepting() click to toggle source
 
               # File rdoc/markup/to_html.rb, line 165
def end_accepting
  @res
end
            
gen_url(url, text) click to toggle source

Generate a hyperlink for url, labeled with text. Handle the special cases for img: and link: described under #handle_special_HYPERLINK

 
               # File rdoc/markup/to_html.rb, line 62
def gen_url(url, text)
  if url =~ /([A-Za-z]+):(.*)/ then
    type = $1
    path = $2
  else
    type = "http"
    path = url
    url  = "http://#{url}"
  end

  if type == "link" then
    url = if path[0, 1] == '#' then # is this meaningful?
            path
          else
            self.class.gen_relative_url @from_path, path
          end
  end

  if (type == "http" or type == "link") and
     url =~ /\.(gif|png|jpg|jpeg|bmp)$/ then
    "<img src=\"#{url}\" />"
  else
    "<a href=\"#{url}\">#{text.sub(%r{^#{type}:/*}, '')}</a>"
  end
end
            
in_tt?() click to toggle source

are we currently inside <tt> tags?

 
               # File rdoc/markup/to_html.rb, line 118
def in_tt?
  @in_tt > 0
end
            
init_tags() click to toggle source

Set up the standard mapping of attributes to HTML tags

 
               # File rdoc/markup/to_html.rb, line 132
def init_tags
  @attr_tags = [
    InlineTag.new(RDoc::Markup::Attribute.bitmap_for(:BOLD), "<b>", "</b>"),
    InlineTag.new(RDoc::Markup::Attribute.bitmap_for(:TT),   "<tt>", "</tt>"),
    InlineTag.new(RDoc::Markup::Attribute.bitmap_for(:EM),   "<em>", "</em>"),
  ]
end
            
start_accepting() click to toggle source

Here’s the client side of the visitor pattern

 
               # File rdoc/markup/to_html.rb, line 160
def start_accepting
  @res = ""
  @in_list_entry = []
end
            
tt?(tag) click to toggle source

is tag a <tt> tag?

 
               # File rdoc/markup/to_html.rb, line 125
def tt?(tag)
  tag.bit == @tt_bit
end
            
wrap(txt, line_len = 76) click to toggle source

This is a higher speed (if messier) version of wrap

 
               # File rdoc/markup/to_html.rb, line 222
def wrap(txt, line_len = 76)
  res = ""
  sp = 0
  ep = txt.length
  while sp < ep
    # scan back for a space
    p = sp + line_len - 1
    if p >= ep
      p = ep
    else
      while p > sp and txt[p] != ?\s
        p -= 1
      end
      if p <= sp
        p = sp + line_len
        while p < ep and txt[p] != ?\s
          p += 1
        end
      end
    end
    res << txt[sp...p] << "\n"
    sp = p
    sp += 1 while sp < ep and txt[sp] == ?\s
  end
  res
end
            

Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.

If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.

If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.

If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.

blog comments powered by Disqus