diff options
Diffstat (limited to 'lib/rdoc/generator')
-rw-r--r-- | lib/rdoc/generator/html.rb | 63 | ||||
-rw-r--r-- | lib/rdoc/generator/html/frameless.rb | 795 | ||||
-rw-r--r-- | lib/rdoc/generator/html/hefss.rb | 22 | ||||
-rw-r--r-- | lib/rdoc/generator/html/html.rb | 168 | ||||
-rw-r--r-- | lib/rdoc/generator/html/kilmer.rb | 20 | ||||
-rw-r--r-- | lib/rdoc/generator/html/one_page_html.rb | 18 | ||||
-rw-r--r-- | lib/rdoc/generator/ri.rb | 2 | ||||
-rw-r--r-- | lib/rdoc/generator/texinfo.rb | 84 | ||||
-rw-r--r-- | lib/rdoc/generator/texinfo/class.texinfo.erb | 44 | ||||
-rw-r--r-- | lib/rdoc/generator/texinfo/file.texinfo.erb | 6 | ||||
-rw-r--r-- | lib/rdoc/generator/texinfo/method.texinfo.erb | 6 | ||||
-rw-r--r-- | lib/rdoc/generator/texinfo/texinfo.erb | 28 |
12 files changed, 1120 insertions, 136 deletions
diff --git a/lib/rdoc/generator/html.rb b/lib/rdoc/generator/html.rb index b99af4d47b..a9e030a896 100644 --- a/lib/rdoc/generator/html.rb +++ b/lib/rdoc/generator/html.rb @@ -82,7 +82,7 @@ class RDoc::Generator::HTML @classes = [] write_style_sheet - gen_sub_directories() + gen_sub_directories build_indices generate_html end @@ -157,6 +157,7 @@ class RDoc::Generator::HTML # the individual descriptions for files and classes gen_into(@files) gen_into(@classes) + # and the index files gen_file_index gen_class_index @@ -168,14 +169,21 @@ class RDoc::Generator::HTML end def gen_into(list) + @file_list ||= index_to_links @files + @class_list ||= index_to_links @classes + @method_list ||= index_to_links RDoc::Generator::Method.all_methods + list.each do |item| - if item.document_self - op_file = item.path - FileUtils.mkdir_p(File.dirname(op_file)) - open(op_file, "w") { |file| item.write_on(file) } + next unless item.document_self + + op_file = item.path + + FileUtils.mkdir_p File.dirname(op_file) + + open op_file, 'w' do |io| + item.write_on io, @file_list, @class_list, @method_list end end - end def gen_file_index @@ -221,9 +229,23 @@ class RDoc::Generator::HTML # line. def gen_main_index - template = RDoc::TemplatePage.new @template::INDEX + if @template.const_defined? :FRAMELESS then + main = @files.find do |file| + @main_page == file.name + end + + if main.nil? then + main = @classes.find do |klass| + main_page == klass.context.full_name + end + end + else + main = RDoc::TemplatePage.new @template::INDEX + end open 'index.html', 'w' do |f| + style_url = style_url '', @options.css + classes = @classes.sort.map { |klass| klass.value_hash } values = { @@ -237,18 +259,31 @@ class RDoc::Generator::HTML values['inline_source'] = @options.inline_source - template.write_html_on f, values + if main.respond_to? :write_on then + main.write_on f, @file_list, @class_list, @method_list, values + else + main.write_html_on f, values + end end end + def index_to_links(collection) + collection.sort.map do |f| + next unless f.document_self + { "href" => f.path, "name" => f.index_name } + end.compact + end + ## # Returns the url of the main page def main_url @main_page = @options.main_page @main_page_ref = nil - if @main_page + + if @main_page then @main_page_ref = RDoc::Generator::AllReferences[@main_page] + if @main_page_ref then @main_page_path = @main_page_ref.path else @@ -351,15 +386,8 @@ class RDoc::Generator::HTMLInOne < RDoc::Generator::HTML end def gen_an_index(collection, title) - res = [] - collection.sort.each do |f| - if f.document_self - res << { "href" => f.path, "name" => f.index_name } - end - end - return { - "entries" => res, + "entries" => index_to_links(collection), 'list_title' => title, 'index_url' => main_url, } @@ -367,4 +395,3 @@ class RDoc::Generator::HTMLInOne < RDoc::Generator::HTML end - diff --git a/lib/rdoc/generator/html/frameless.rb b/lib/rdoc/generator/html/frameless.rb new file mode 100644 index 0000000000..2af890ce04 --- /dev/null +++ b/lib/rdoc/generator/html/frameless.rb @@ -0,0 +1,795 @@ +require 'rdoc/generator/html' +require 'rdoc/generator/html/one_page_html' + +## +# = CSS2 RDoc HTML template +# +# This is a template for RDoc that uses XHTML 1.0 Transitional and dictates a +# bit more of the appearance of the output to cascading stylesheets than the +# default. It was designed for clean inline code display, and uses DHTMl to +# toggle the visbility of each method's source with each click on the '[source]' +# link. +# +# == Authors +# +# * Michael Granger <ged@FaerieMUD.org> +# +# Copyright (c) 2002, 2003 The FaerieMUD Consortium. Some rights reserved. +# +# This work is licensed under the Creative Commons Attribution License. To view +# a copy of this license, visit http://creativecommons.org/licenses/by/1.0/ or +# send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California +# 94305, USA. + +module RDoc::Generator::HTML::FRAMELESS + + FRAMELESS = true + + FONTS = "Verdana,Arial,Helvetica,sans-serif" + + STYLE = <<-EOF +body { + font-family: #{FONTS}; + font-size: 90%; + margin: 0; + margin-left: 40px; + padding: 0; + background: white; +} + +h1, h2, h3, h4 { + margin: 0; + color: #efefef; + background: transparent; +} + +h1 { + font-size: 150%; +} + +h2,h3,h4 { + margin-top: 1em; +} + +:link, :visited { + background: #eef; + color: #039; + text-decoration: none; +} + +:link:hover, :visited:hover { + background: #039; + color: #eef; +} + +/* Override the base stylesheet's Anchor inside a table cell */ +td > :link, td > :visited { + background: transparent; + color: #039; + text-decoration: none; +} + +/* and inside a section title */ +.section-title > :link, .section-title > :visited { + background: transparent; + color: #eee; + text-decoration: none; +} + +/* === Structural elements =================================== */ + +.index { + margin: 0; + margin-left: -40px; + padding: 0; + font-size: 90%; +} + +.index :link, .index :visited { + margin-left: 0.7em; +} + +.index .section-bar { + margin-left: 0px; + padding-left: 0.7em; + background: #ccc; + font-size: small; +} + +#classHeader, #fileHeader { + width: auto; + color: white; + padding: 0.5em 1.5em 0.5em 1.5em; + margin: 0; + margin-left: -40px; + border-bottom: 3px solid #006; +} + +#classHeader :link, #fileHeader :link, +#classHeader :visited, #fileHeader :visited { + background: inherit; + color: white; +} + +#classHeader td, #fileHeader td { + background: inherit; + color: white; +} + +#fileHeader { + background: #057; +} + +#classHeader { + background: #048; +} + +.class-name-in-header { + font-size: 180%; + font-weight: bold; +} + +#bodyContent { + padding: 0 1.5em 0 1.5em; +} + +#description { + padding: 0.5em 1.5em; + background: #efefef; + border: 1px dotted #999; +} + +#description h1, #description h2, #description h3, +#description h4, #description h5, #description h6 { + color: #125; + background: transparent; +} + +#copyright { + color: #333; + background: #efefef; + font: 0.75em sans-serif; + margin-top: 5em; + margin-bottom: 0; + padding: 0.5em 2em; +} + +/* === Classes =================================== */ + +table.header-table { + color: white; + font-size: small; +} + +.type-note { + font-size: small; + color: #dedede; +} + +.xxsection-bar { + background: #eee; + color: #333; + padding: 3px; +} + +.section-bar { + color: #333; + border-bottom: 1px solid #999; + margin-left: -20px; +} + +.section-title { + background: #79a; + color: #eee; + padding: 3px; + margin-top: 2em; + margin-left: -30px; + border: 1px solid #999; +} + +.top-aligned-row { + vertical-align: top +} + +.bottom-aligned-row { + vertical-align: bottom +} + +/* --- Context section classes ----------------------- */ + +.context-row { } + +.context-item-name { + font-family: monospace; + font-weight: bold; + color: black; +} + +.context-item-value { + font-size: small; + color: #448; +} + +.context-item-desc { + color: #333; + padding-left: 2em; +} + +/* --- Method classes -------------------------- */ + +.method-detail { + background: #efefef; + padding: 0; + margin-top: 0.5em; + margin-bottom: 1em; + border: 1px dotted #ccc; +} + +.method-heading { + color: black; + background: #ccc; + border-bottom: 1px solid #666; + padding: 0.2em 0.5em 0 0.5em; +} + +.method-signature { + color: black; + background: inherit; +} + +.method-name { + font-weight: bold; +} + +.method-args { + font-style: italic; +} + +.method-description { + padding: 0 0.5em 0 0.5em; +} + +/* --- Source code sections -------------------- */ + +:link.source-toggle, :visited.source-toggle { + font-size: 90%; +} + +div.method-source-code { + background: #262626; + color: #ffdead; + margin: 1em; + padding: 0.5em; + border: 1px dashed #999; + overflow: hidden; +} + +div.method-source-code pre { + color: #ffdead; + overflow: hidden; +} + +/* --- Ruby keyword styles --------------------- */ + +.standalone-code { + background: #221111; + color: #ffdead; + overflow: hidden; +} + +.ruby-constant { + color: #7fffd4; + background: transparent; +} + +.ruby-keyword { + color: #00ffff; + background: transparent; +} + +.ruby-ivar { + color: #eedd82; + background: transparent; +} + +.ruby-operator { + color: #00ffee; + background: transparent; +} + +.ruby-identifier { + color: #ffdead; + background: transparent; +} + +.ruby-node { + color: #ffa07a; + background: transparent; +} + +.ruby-comment { + color: #b22222; + font-weight: bold; + background: transparent; +} + +.ruby-regexp { + color: #ffa07a; + background: transparent; +} + +.ruby-value { + color: #7fffd4; + background: transparent; +} + +EOF + + ## + # Header template + + XHTML_PREAMBLE = <<-EOF +<?xml version="1.0" encoding="<%= values["charset"] %>"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> + EOF + + HEADER = XHTML_PREAMBLE + <<-EOF +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title><%= values["title"] %></title> + <meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>" /> + <meta http-equiv="Content-Script-Type" content="text/javascript" /> + <link rel="stylesheet" href="<%= values["style_url"] %>" type="text/css" media="screen" /> + <script type="text/javascript"> + // <![CDATA[ + + function popupCode( url ) { + window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400") + } + + function toggleCode( id ) { + if ( document.getElementById ) + elem = document.getElementById( id ); + else if ( document.all ) + elem = eval( "document.all." + id ); + else + return false; + + elemStyle = elem.style; + + if ( elemStyle.display != "block" ) { + elemStyle.display = "block" + } else { + elemStyle.display = "none" + } + + return true; + } + + // Make codeblocks hidden by default + document.writeln( "<style type=\\"text/css\\">div.method-source-code { display: none }</style>" ) + + // ]]> + </script> + +</head> +<body> +EOF + + ## + # Context content template + + CONTEXT_CONTENT = %{ +} + + ## + # Footer template + + FOOTER = <<-EOF + <div id="popupmenu" class="index"> + <ul> + <li class="index-entries section-bar">Classes + <ul> +<% values["class_list"].each do |klass| %> + <li><a href="<%= klass["href"] %>"><%= klass["name"] %></a> +<% end %> + </ul> + </li> + + <li class="index-entries section-bar">Methods + <ul> +<% values["method_list"].each do |file| %> + <li><a href="<%= file["href"] %>"><%= file["name"] %></a> +<% end %> + </ul> + </li> + + <li class="index-entries section-bar">Files + <ul> +<% values["file_list"].each do |file| %> + <li><a href="<%= file["href"] %>"><%= file["name"] %></a> +<% end %> + </ul> + </li> + </ul> + </li> + +</body> +</html> + EOF + + ## + # File page header template + + FILE_PAGE = <<-EOF + <div id="fileHeader"> + <h1><%= values["short_name"] %></h1> + + <table class="header-table"> + <tr class="top-aligned-row"> + <td><strong>Path:</strong></td> + <td><%= values["full_path"] %> +<% if values["cvsurl"] then %> + (<a href="<%= values["cvsurl"] %>"><acronym title="Concurrent Versioning System">CVS</acronym></a>) +<% end %> + </td> + </tr> + + <tr class="top-aligned-row"> + <td><strong>Last Update:</strong></td> + <td><%= values["dtm_modified"] %></td> + </tr> + </table> + </div> + EOF + + ## + # Class page header template + + CLASS_PAGE = <<-EOF + <div id="classHeader"> + <table class="header-table"> + <tr class="top-aligned-row"> + <td><strong><%= values["classmod"] %></strong></td> + <td class="class-name-in-header"><%= values["full_name"] %></td> + </tr> + + <tr class="top-aligned-row"> + <td><strong>In:</strong></td> + <td> +<% values["infiles"].each do |infiles| %> +<% if infiles["full_path_url"] then %> + <a href="<%= infiles["full_path_url"] %>"> +<% end %> + <%= infiles["full_path"] %> +<% if infiles["full_path_url"] then %> + </a> +<% end %> +<% if infiles["cvsurl"] then %> + (<a href="<%= infiles["cvsurl"] %>"><acronym title="Concurrent Versioning System">CVS</acronym></a>) +<% end %> + <br /> +<% end %><%# values["infiles"] %> + </td> + </tr> + +<% if values["parent"] then %> + <tr class="top-aligned-row"> + <td><strong>Parent:</strong></td> + <td> +<% if values["par_url"] then %> + <a href="<%= values["par_url"] %>"> +<% end %> + <%= values["parent"] %> +<% if values["par_url"] then %> + </a> +<% end %> + </td> + </tr> +<% end %> + </table> + </div> + EOF + + ## + # Method list template + + METHOD_LIST = <<-EOF + + <div id="contextContent"> +<% if values["diagram"] then %> + <div id="diagram"> + <%= values["diagram"] %> + </div> +<% end %> + +<% if values["description"] then %> + <div id="description"> + <%= values["description"] %> + </div> +<% end %> + +<% if values["requires"] then %> + <div id="requires-list"> + <h3 class="section-bar">Required files</h3> + + <div class="name-list"> +<% values["requires"].each do |requires| %> + <%= href requires["aref"], requires["name"] %> +<% end %><%# values["requires"] %> + </div> + </div> +<% end %> + +<% if values["toc"] then %> + <div id="contents-list"> + <h3 class="section-bar">Contents</h3> + <ul> +<% values["toc"].each do |toc| %> + <li><a href="#<%= values["href"] %>"><%= values["secname"] %></a></li> +<% end %><%# values["toc"] %> + </ul> +<% end %> + </div> + +<% if values["methods"] then %> + <div id="method-list"> + <h3 class="section-bar">Methods</h3> + + <div class="name-list"> +<% values["methods"].each do |methods| %> + <%= href methods["aref"], methods["name"] %> +<% end %><%# values["methods"] %> + </div> + </div> +<% end %> + + </div> + + + <!-- if includes --> +<% if values["includes"] then %> + <div id="includes"> + <h3 class="section-bar">Included Modules</h3> + + <div id="includes-list"> +<% values["includes"].each do |includes| %> + <span class="include-name"><%= href includes["aref"], includes["name"] %></span> +<% end %><%# values["includes"] %> + </div> + </div> +<% end %> + +<% values["sections"].each do |sections| %> + <div id="section"> +<% if sections["sectitle"] then %> + <h2 class="section-title"><a name="<%= sections["secsequence"] %>"><%= sections["sectitle"] %></a></h2> +<% if sections["seccomment"] then %> + <div class="section-comment"> + <%= sections["seccomment"] %> + </div> +<% end %> +<% end %> + +<% if values["classlist"] then %> + <div id="class-list"> + <h3 class="section-bar">Classes and Modules</h3> + + <%= values["classlist"] %> + </div> +<% end %> + +<% if values["constants"] then %> + <div id="constants-list"> + <h3 class="section-bar">Constants</h3> + + <div class="name-list"> + <table summary="Constants"> +<% values["constants"].each do |constants| %> + <tr class="top-aligned-row context-row"> + <td class="context-item-name"><%= constants["name"] %></td> + <td>=</td> + <td class="context-item-value"><%= constants["value"] %></td> +<% if values["desc"] then %> + <td width="3em"> </td> + <td class="context-item-desc"><%= constants["desc"] %></td> +<% end %> + </tr> +<% end %><%# values["constants"] %> + </table> + </div> + </div> +<% end %> + +<% if values["aliases"] then %> + <div id="aliases-list"> + <h3 class="section-bar">External Aliases</h3> + + <div class="name-list"> + <table summary="aliases"> +<% values["aliases"].each do |aliases| $stderr.puts({ :aliases => aliases }.inspect) %> + <tr class="top-aligned-row context-row"> + <td class="context-item-name"><%= values["old_name"] %></td> + <td>-></td> + <td class="context-item-value"><%= values["new_name"] %></td> + </tr> +<% if values["desc"] then %> + <tr class="top-aligned-row context-row"> + <td> </td> + <td colspan="2" class="context-item-desc"><%= values["desc"] %></td> + </tr> +<% end %> +<% end %><%# values["aliases"] %> + </table> + </div> + </div> +<% end %> + + +<% if values["attributes"] then %> + <div id="attribute-list"> + <h3 class="section-bar">Attributes</h3> + + <div class="name-list"> + <table> +<% values["attributes"].each do |attributes| $stderr.puts({ :attributes => attributes }.inspect) %> + <tr class="top-aligned-row context-row"> + <td class="context-item-name"><%= values["name"] %></td> +<% if values["rw"] then %> + <td class="context-item-value"> [<%= values["rw"] %>] </td> +<% end %> +<% unless values["rw"] then %> + <td class="context-item-value"> </td> +<% end %> + <td class="context-item-desc"><%= values["a_desc"] %></td> + </tr> +<% end %><%# values["attributes"] %> + </table> + </div> + </div> +<% end %> + + <!-- if method_list --> +<% if sections["method_list"] then %> + <div id="methods"> +<% sections["method_list"].each do |method_list| %> +<% if method_list["methods"] then %> + <h3 class="section-bar"><%= method_list["type"] %> <%= method_list["category"] %> methods</h3> + +<% method_list["methods"].each do |methods| %> + <div id="method-<%= methods["aref"] %>" class="method-detail"> + <a name="<%= methods["aref"] %>"></a> + + <div class="method-heading"> +<% if methods["codeurl"] then %> + <a href="<%= methods["codeurl"] %>" target="Code" class="method-signature" + onclick="popupCode('<%= methods["codeurl"] %>');return false;"> +<% end %> +<% if methods["sourcecode"] then %> + <a href="#<%= methods["aref"] %>" class="method-signature"> +<% end %> +<% if methods["callseq"] then %> + <span class="method-name"><%= methods["callseq"] %></span> +<% end %> +<% unless methods["callseq"] then %> + <span class="method-name"><%= methods["name"] %></span><span class="method-args"><%= methods["params"] %></span> +<% end %> +<% if methods["codeurl"] then %> + </a> +<% end %> +<% if methods["sourcecode"] then %> + </a> +<% end %> + </div> + + <div class="method-description"> +<% if methods["m_desc"] then %> + <%= methods["m_desc"] %> +<% end %> +<% if methods["sourcecode"] then %> + <p><a class="source-toggle" href="#" + onclick="toggleCode('<%= methods["aref"] %>-source');return false;">[Source]</a></p> + <div class="method-source-code" id="<%= methods["aref"] %>-source"> +<pre> +<%= methods["sourcecode"] %> +</pre> + </div> +<% end %> + </div> + </div> + +<% end %><%# method_list["methods"] %> +<% end %> +<% end %><%# sections["method_list"] %> + + </div> +<% end %> +<% end %><%# values["sections"] %> + EOF + + ## + # Body template + + BODY = HEADER + %{ + +<%= template_include %> <!-- banner header --> + + <div id="bodyContent"> + +} + METHOD_LIST + %{ + + </div> + +} + FOOTER + + ## + # Source code template + + SRC_PAGE = XHTML_PREAMBLE + <<-EOF +<html> +<head> + <title><%= values["title"] %></title> + <meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>" /> + <link rel="stylesheet" href="<%= values["style_url"] %>" type="text/css" media="screen" /> +</head> +<body class="standalone-code"> + <pre><%= values["code"] %></pre> +</body> +</html> + EOF + + ## + # Index file templates + + FR_INDEX_BODY = %{ +<%= template_include %> +} + + FILE_INDEX = XHTML_PREAMBLE + <<-EOF +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title><%= values["list_title"] %></title> + <meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>" /> + <link rel="stylesheet" href="<%= values["style_url"] %>" type="text/css" /> + <base target="docwin" /> +</head> +<body> +<div class="index"> + <h1 class="section-bar"><%= values["list_title"] %></h1> + <div class="index-entries"> +<% values["entries"].each do |entries| %> + <a href="<%= entries["href"] %>"><%= entries["name"] %></a><br /> +<% end %><%# values["entries"] %> + </div> +</div> +</body> +</html> + EOF + + CLASS_INDEX = FILE_INDEX + METHOD_INDEX = FILE_INDEX + + INDEX = <<-EOF +<?xml version="1.0" encoding="<%= values["charset"] %>"?> +<!DOCTYPE html + PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" + "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <title><%= values["title"] %></title> + <meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>" /> +</head> +<frameset rows="20%, 80%"> + <frameset cols="45%,55%"> + <frame src="fr_class_index.html" name="Classes" /> + <frame src="fr_method_index.html" name="Methods" /> + </frameset> + <frame src="<%= values["initial_page"] %>" name="docwin" /> +</frameset> +</html> + EOF + +end + diff --git a/lib/rdoc/generator/html/hefss.rb b/lib/rdoc/generator/html/hefss.rb index 294d5b62f6..e186a40384 100644 --- a/lib/rdoc/generator/html/hefss.rb +++ b/lib/rdoc/generator/html/hefss.rb @@ -141,7 +141,7 @@ td { font-family: Verdana, Arial, Helvetica, sans-serif; <div class="name-list"> <% values["requires"].each do |requires| %> <%= href requires["aref"], requires["name"] %> -<% end # values["requires"] %> +<% end %><%# values["requires"] %> <% end %> </div> @@ -156,10 +156,10 @@ td { font-family: Verdana, Arial, Helvetica, sans-serif; <div class="name-list"> <% method_list["methods"].each do |methods| %> <a href="<%= methods["codeurl"] %>" target="source"><%= methods["name"] %></a> -<% end # values["methods"] %> +<% end %><%# values["methods"] %> </div> <% end %> -<% end # values["method_list"] %> +<% end %><%# values["method_list"] %> <% end %> <% if sections["attributes"] then %> @@ -178,10 +178,10 @@ td { font-family: Verdana, Arial, Helvetica, sans-serif; <td class="attr-name"><%= attributes["name"] %></td> <td><%= attributes["a_desc"] %></td> </tr> -<% end # values["attributes"] %> +<% end %><%# values["attributes"] %> </table> <% end %> -<% end # values["sections"] %> +<% end %><%# values["sections"] %> <% end %> <% if values["classlist"] then %> @@ -237,7 +237,7 @@ td { font-family: Verdana, Arial, Helvetica, sans-serif; <% if infiles["cvsurl"] then %> (<a href="<%= infiles["cvsurl"] %>"><acronym title="Concurrent Versioning System">CVS</acronym></a>) <% end %> -<% end # values["infiles"] %> +<% end %><%# values["infiles"] %> </td> </tr> <% if values["parent"] then %> @@ -266,7 +266,7 @@ td { font-family: Verdana, Arial, Helvetica, sans-serif; <div class="name-list"> <% values["includes"].each do |includes| %> <span class="method-name"><%= href includes["aref"], includes["name"] %></span> -<% end # values["includes"] %> +<% end %><%# values["includes"] %> </div> <% end %> @@ -293,11 +293,11 @@ td { font-family: Verdana, Arial, Helvetica, sans-serif; <%= method_list["m_desc"] %> </div> <% end %> -<% end # method_list["methods"] %> +<% end %><%# method_list["methods"] %> <% end %> -<% end # sections["method_list"] %> +<% end %><%# sections["method_list"] %> <% end %> -<% end # values["sections"] %> +<% end %><%# values["sections"] %> <% end %> EOF @@ -365,7 +365,7 @@ div.banner { <div class="banner"><%= values["list_title"] %></div> <% values["entries"].each do |entries| %> <a href="<%= entries["href"] %>"><%= entries["name"] %></a><br /> -<% end # values["entries"] %> +<% end %><%# values["entries"] %> </body></html> EOF diff --git a/lib/rdoc/generator/html/html.rb b/lib/rdoc/generator/html/html.rb index 63c83ee5fd..1ab90c6264 100644 --- a/lib/rdoc/generator/html/html.rb +++ b/lib/rdoc/generator/html/html.rb @@ -7,8 +7,8 @@ require 'rdoc/generator/html/one_page_html' # This is a template for RDoc that uses XHTML 1.0 Transitional and dictates a # bit more of the appearance of the output to cascading stylesheets than the # default. It was designed for clean inline code display, and uses DHTMl to -# toggle the visibility of each method's source with each click on the '[source]' -# link. +# toggle the visibility of each method's source with each click on the +# '[source]' link. # # == Authors # @@ -16,10 +16,10 @@ require 'rdoc/generator/html/one_page_html' # # Copyright (c) 2002, 2003 The FaerieMUD Consortium. Some rights reserved. # -# This work is licensed under the Creative Commons Attribution License. To view -# a copy of this license, visit http://creativecommons.org/licenses/by/1.0/ or -# send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California -# 94305, USA. +# This work is licensed under the Creative Commons Attribution License. To +# view a copy of this license, visit +# http://creativecommons.org/licenses/by/1.0/ or send a letter to Creative +# Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA. module RDoc::Generator::HTML::HTML @@ -361,7 +361,7 @@ EOF (<a href="<%= infiles["cvsurl"] %>"><acronym title="Concurrent Versioning System">CVS</acronym></a>) <% end %> <br /> -<% end # values["infiles"] %> +<% end %><%# values["infiles"] %> </td> </tr> @@ -388,39 +388,38 @@ EOF ##################################################################### METHOD_LIST = <<-EOF - <div id="contextContent"> <% if values["diagram"] then %> <div id="diagram"> <%= values["diagram"] %> </div> -<% end %> +<% end -<% if values["description"] then %> + if values["description"] then %> <div id="description"> <%= values["description"] %> </div> -<% end %> +<% end -<% if values["requires"] then %> + if values["requires"] then %> <div id="requires-list"> <h3 class="section-bar">Required files</h3> <div class="name-list"> <% values["requires"].each do |requires| %> <%= href requires["aref"], requires["name"] %> -<% end # values["requires"] %> +<% end %><%# values["requires"] %> </div> </div> -<% end %> +<% end -<% if values["toc"] then %> + if values["toc"] then %> <div id="contents-list"> <h3 class="section-bar">Contents</h3> <ul> <% values["toc"].each do |toc| %> - <li><a href="#<%= values["href"] %>"><%= values["secname"] %></a></li> -<% end # values["toc"] %> + <li><a href="#<%= toc["href"] %>"><%= toc["secname"] %></a></li> +<% end %><%# values["toc"] %> </ul> <% end %> </div> @@ -430,16 +429,14 @@ EOF <h3 class="section-bar">Methods</h3> <div class="name-list"> -<% values["methods"].each do |methods| %> +<% values["methods"].each do |methods| %> <%= href methods["aref"], methods["name"] %> -<% end # values["methods"] %> +<% end %><%# values["methods"] %> </div> </div> <% end %> - </div> - <!-- if includes --> <% if values["includes"] then %> <div id="includes"> @@ -448,140 +445,137 @@ EOF <div id="includes-list"> <% values["includes"].each do |includes| %> <span class="include-name"><%= href includes["aref"], includes["name"] %></span> -<% end # values["includes"] %> +<% end %><%# values["includes"] %> </div> </div> -<% end %> +<% end -<% values["sections"].each do |sections| %> + values["sections"].each do |sections| %> <div id="section"> -<% if sections["sectitle"] then %> +<% if sections["sectitle"] then %> <h2 class="section-title"><a name="<%= sections["secsequence"] %>"><%= sections["sectitle"] %></a></h2> -<% if sections["seccomment"] then %> +<% if sections["seccomment"] then %> <div class="section-comment"> <%= sections["seccomment"] %> </div> -<% end %> -<% end %> +<% end + end -<% if values["classlist"] then %> + if sections["classlist"] then %> <div id="class-list"> <h3 class="section-bar">Classes and Modules</h3> - <%= values["classlist"] %> + <%= sections["classlist"] %> </div> -<% end %> +<% end -<% if values["constants"] then %> + if sections["constants"] then %> <div id="constants-list"> <h3 class="section-bar">Constants</h3> <div class="name-list"> <table summary="Constants"> -<% values["constants"].each do |constants| %> +<% sections["constants"].each do |constants| %> <tr class="top-aligned-row context-row"> <td class="context-item-name"><%= constants["name"] %></td> <td>=</td> <td class="context-item-value"><%= constants["value"] %></td> -<% if values["desc"] then %> +<% if sections["desc"] then %> <td width="3em"> </td> <td class="context-item-desc"><%= constants["desc"] %></td> -<% end %> +<% end %> </tr> -<% end # values["constants"] %> +<% end %><%# sections["constants"] %> </table> </div> </div> -<% end %> +<% end -<% if values["aliases"] then %> + if sections["aliases"] then %> <div id="aliases-list"> <h3 class="section-bar">External Aliases</h3> <div class="name-list"> - <table summary="aliases"> -<% values["aliases"].each do |aliases| $stderr.puts({ :aliases => aliases }.inspect) %> + <table summary="aliases"> +<% sections["aliases"].each do |aliases| %> <tr class="top-aligned-row context-row"> - <td class="context-item-name"><%= values["old_name"] %></td> + <td class="context-item-name"><%= aliases["old_name"] %></td> <td>-></td> - <td class="context-item-value"><%= values["new_name"] %></td> + <td class="context-item-value"><%= aliases["new_name"] %></td> </tr> -<% if values["desc"] then %> +<% if aliases["desc"] then %> <tr class="top-aligned-row context-row"> <td> </td> - <td colspan="2" class="context-item-desc"><%= values["desc"] %></td> + <td colspan="2" class="context-item-desc"><%= aliases["desc"] %></td> </tr> -<% end %> -<% end # values["aliases"] %> +<% end + end %><%# sections["aliases"] %> </table> </div> </div> -<% end %> - +<% end %> -<% if values["attributes"] then %> +<% if sections["attributes"] then %> <div id="attribute-list"> <h3 class="section-bar">Attributes</h3> <div class="name-list"> <table> -<% values["attributes"].each do |attributes| $stderr.puts({ :attributes => attributes }.inspect) %> +<% sections["attributes"].each do |attribute| %> <tr class="top-aligned-row context-row"> - <td class="context-item-name"><%= values["name"] %></td> -<% if values["rw"] then %> - <td class="context-item-value"> [<%= values["rw"] %>] </td> -<% end %> -<% unless values["rw"] then %> + <td class="context-item-name"><%= attribute["name"] %></td> +<% if attribute["rw"] then %> + <td class="context-item-value"> [<%= attribute["rw"] %>] </td> +<% end + unless attribute["rw"] then %> <td class="context-item-value"> </td> -<% end %> - <td class="context-item-desc"><%= values["a_desc"] %></td> +<% end %> + <td class="context-item-desc"><%= attribute["a_desc"] %></td> </tr> -<% end # values["attributes"] %> +<% end %><%# sections["attributes"] %> </table> </div> </div> -<% end %> - - +<% end %> <!-- if method_list --> -<% if sections["method_list"] then %> +<% if sections["method_list"] then %> <div id="methods"> -<% sections["method_list"].each do |method_list| %> -<% if method_list["methods"] then %> +<% sections["method_list"].each do |method_list| + if method_list["methods"] then %> <h3 class="section-bar"><%= method_list["type"] %> <%= method_list["category"] %> methods</h3> -<% method_list["methods"].each do |methods| %> +<% method_list["methods"].each do |methods| %> <div id="method-<%= methods["aref"] %>" class="method-detail"> <a name="<%= methods["aref"] %>"></a> <div class="method-heading"> -<% if methods["codeurl"] then %> +<% if methods["codeurl"] then %> <a href="<%= methods["codeurl"] %>" target="Code" class="method-signature" onclick="popupCode('<%= methods["codeurl"] %>');return false;"> -<% end %> -<% if methods["sourcecode"] then %> +<% end + if methods["sourcecode"] then %> <a href="#<%= methods["aref"] %>" class="method-signature"> -<% end %> -<% if methods["callseq"] then %> +<% end + if methods["callseq"] then %> <span class="method-name"><%= methods["callseq"] %></span> -<% end %> -<% unless methods["callseq"] then %> +<% end + unless methods["callseq"] then %> <span class="method-name"><%= methods["name"] %></span><span class="method-args"><%= methods["params"] %></span> -<% end %> -<% if methods["codeurl"] then %> +<% end + if methods["codeurl"] then %> </a> -<% end %> -<% if methods["sourcecode"] then %> +<% end + if methods["sourcecode"] then %> </a> -<% end %> +<% end %> </div> <div class="method-description"> -<% if methods["m_desc"] then %> +<% if methods["m_desc"] then %> <%= methods["m_desc"] %> -<% end %> -<% if methods["sourcecode"] then %> +<% end + if methods["sourcecode"] then %> <p><a class="source-toggle" href="#" onclick="toggleCode('<%= methods["aref"] %>-source');return false;">[Source]</a></p> <div class="method-source-code" id="<%= methods["aref"] %>-source"> @@ -589,17 +583,17 @@ EOF <%= methods["sourcecode"] %> </pre> </div> -<% end %> +<% end %> </div> </div> -<% end # method_list["methods"] %> -<% end %> -<% end # sections["method_list"] %> +<% end %><%# method_list["methods"] %><% + end + end %><%# sections["method_list"] %> </div> -<% end %> -<% end # values["sections"] %> +<% end %> +<% end %><%# values["sections"] %> EOF ##################################################################### @@ -663,7 +657,7 @@ EOF <div id="index-entries"> <% values["entries"].each do |entries| %> <a href="<%= entries["href"] %>"><%= entries["name"] %></a><br /> -<% end # values["entries"] %> +<% end %><%# values["entries"] %> </div> </div> </body> diff --git a/lib/rdoc/generator/html/kilmer.rb b/lib/rdoc/generator/html/kilmer.rb index b6c9c4e339..6479abaf8b 100644 --- a/lib/rdoc/generator/html/kilmer.rb +++ b/lib/rdoc/generator/html/kilmer.rb @@ -119,7 +119,7 @@ body,td,p { font-family: <%= values["fonts"] %>; <div class="name-list"> <% values["requires"].each do |requires| %> <%= href requires["aref"], requires["name"] %> -<% end # values["requires"] %> +<% end %><%# values["requires"] %> <% end %> </div> @@ -130,7 +130,7 @@ body,td,p { font-family: <%= values["fonts"] %>; <div class="name-list"> <% values["methods"].each do |methods| %> <%= href methods["aref"], methods["name"] %>, -<% end # values["methods"] %> +<% end %><%# values["methods"] %> </div> <% end %> @@ -162,7 +162,7 @@ body,td,p { font-family: <%= values["fonts"] %>; <td class="attr-name"><%= attributes["name"] %></td> <td><%= attributes["a_desc"] %></td> </tr> -<% end # sections["attributes"] %> +<% end %><%# sections["attributes"] %> </table> <% end %> @@ -175,7 +175,7 @@ body,td,p { font-family: <%= values["fonts"] %>; <%= template_include %> <!-- method descriptions --> -<% end # values["sections"] %> +<% end %><%# values["sections"] %> </body> </html> @@ -221,7 +221,7 @@ body,td,p { font-family: <%= values["fonts"] %>; <% if infiles["cvsurl"] then %> (<a href="<%= infiles["cvsurl"] %>"><acronym title="Concurrent Versioning System">CVS</acronym></a>) <% end %> -<% end # values["infiles"] %> +<% end %><%# values["infiles"] %> </td> </tr> <% if values["parent"] then %> @@ -250,7 +250,7 @@ body,td,p { font-family: <%= values["fonts"] %>; <div class="name-list"> <% values["includes"].each do |includes| %> <span class="method-name"><%= href includes["aref"], includes["name"] %></span> -<% end # values["includes"] %> +<% end %><%# values["includes"] %> </div> <% end %> @@ -285,7 +285,7 @@ body,td,p { font-family: <%= values["fonts"] %>; This method is also aliased as <% values["aka"].each do |aka| $stderr.puts({ :aka => aka }.inspect) %> <a href="<%= values["aref"] %>"><%= values["name"] %></a> -<% end # values["aka"] %> +<% end %><%# values["aka"] %> </div> <% end %> <% if values["sourcecode"] then %> @@ -293,9 +293,9 @@ This method is also aliased as <%= values["sourcecode"] %> </pre> <% end %> -<% end # values["methods"] %> +<% end %><%# values["methods"] %> <% end %> -<% end # values["method_list"] %> +<% end %><%# values["method_list"] %> <% end %> EOF @@ -364,7 +364,7 @@ div.banner { <div class="banner"><%= values["list_title"] %></div> <% values["entries"].each do |entries| %> <a href="<%= entries["href"] %>"><%= entries["name"] %></a><br /> -<% end # values["entries"] %> +<% end %><%# values["entries"] %> </body></html> EOF diff --git a/lib/rdoc/generator/html/one_page_html.rb b/lib/rdoc/generator/html/one_page_html.rb index 885d0dcf6b..c4dd95529d 100644 --- a/lib/rdoc/generator/html/one_page_html.rb +++ b/lib/rdoc/generator/html/one_page_html.rb @@ -17,7 +17,7 @@ module RDoc::Generator::HTML::ONE_PAGE_HTML <% unless requires["aref"] then %> <li><%= requires["name"] %></li> <% end %> -<% end # files["requires"] %> +<% end %><%# files["requires"] %> </ul> <% end %> @@ -31,7 +31,7 @@ module RDoc::Generator::HTML::ONE_PAGE_HTML <% unless includes["aref"] then %> <li><%= includes["name"] %></li> <% end %> -<% end # classes["includes"] %> +<% end %><%# classes["includes"] %> </ul> <% end %> @@ -42,7 +42,7 @@ module RDoc::Generator::HTML::ONE_PAGE_HTML <table> <% sections["attributes"].each do |attributes| %> <tr><td><%= attributes["name"] %></td><td><%= attributes["rw"] %></td><td><%= attributes["a_desc"] %></td></tr> -<% end # sections["attributes"] %> +<% end %><%# sections["attributes"] %> </table> <% end %> @@ -68,11 +68,11 @@ module RDoc::Generator::HTML::ONE_PAGE_HTML <%= methods["sourcecode"] %> </pre></blockquote> <% end %> -<% end # method_list["methods"] %> +<% end %><%# method_list["methods"] %> <% end %> -<% end # sections["method_list"] %> +<% end %><%# sections["method_list"] %> <% end %> -<% end # classes["sections"] %> +<% end %><%# classes["sections"] %> <% end %> EOF @@ -91,7 +91,7 @@ module RDoc::Generator::HTML::ONE_PAGE_HTML <tr><td>Modified:</td><td><%= files["dtm_modified"] %></td></tr> </table> } + CONTENTS_XML + %{ -<% end # values["files"] %> +<% end %><%# values["files"] %> <% if values["classes"] then %> <h2>Classes</h2> @@ -107,11 +107,11 @@ module RDoc::Generator::HTML::ONE_PAGE_HTML (in files <% classes["infiles"].each do |infiles| %> <%= href infiles["full_path_url"], infiles["full_path"] %> -<% end # classes["infiles"] %> +<% end %><%# classes["infiles"] %> ) <% end %> } + CONTENTS_XML + %{ -<% end # values["classes"] %> +<% end %><%# values["classes"] %> <% end %> </body> </html> diff --git a/lib/rdoc/generator/ri.rb b/lib/rdoc/generator/ri.rb index ea0bbeffcc..d347505e0b 100644 --- a/lib/rdoc/generator/ri.rb +++ b/lib/rdoc/generator/ri.rb @@ -45,7 +45,7 @@ class RDoc::Generator::RI def process_class(from_class) generate_class_info(from_class) - # now recurse into this classes constituent classes + # now recurse into this class' constituent classes from_class.each_classmodule do |mod| process_class(mod) end diff --git a/lib/rdoc/generator/texinfo.rb b/lib/rdoc/generator/texinfo.rb new file mode 100644 index 0000000000..0b79820228 --- /dev/null +++ b/lib/rdoc/generator/texinfo.rb @@ -0,0 +1,84 @@ +require 'rdoc/rdoc' +require 'rdoc/generator' +require 'rdoc/markup/to_texinfo' + +module RDoc + RDoc::GENERATORS['texinfo'] = RDoc::Generator.new("rdoc/generator/texinfo", + :Texinfo, + 'texinfo') + module Generator + # This generates Texinfo files for viewing with GNU Info or Emacs + # from RDoc extracted from Ruby source files. + class Texinfo + # What should the .info file be named by default? + DEFAULT_INFO_FILENAME = 'rdoc.info' + + include Generator::MarkUp + + # Accept some options + def initialize(options) + @options = options + @options.inline_source = true + @options.op_name ||= 'rdoc.texinfo' + @options.formatter = ::RDoc::Markup::ToTexInfo.new + end + + # Generate the +texinfo+ files + def generate(toplevels) + @toplevels = toplevels + @files, @classes = ::RDoc::Generator::Context.build_indicies(@toplevels, + @options) + + (@files + @classes).each { |x| x.value_hash } + + open(@options.op_name, 'w') do |f| + f.puts TexinfoTemplate.new('files' => @files, + 'classes' => @classes, + 'filename' => @options.op_name.gsub(/texinfo/, 'info'), + 'title' => @options.title).render + end + # TODO: create info files and install? + end + + class << self + # Factory? We don't need no stinkin' factory! + alias_method :for, :new + end + end + + # Basically just a wrapper around ERB. + # Should probably use RDoc::TemplatePage instead + class TexinfoTemplate + BASE_DIR = ::File.expand_path(::File.dirname(__FILE__)) # have to calculate this when the file's loaded. + + def initialize(values, file = 'texinfo.erb') + @v, @file = [values, file] + end + + def template + ::File.read(::File.join(BASE_DIR, 'texinfo', @file)) + end + + # Go! + def render + ERB.new(template).result binding + end + + def href(location, text) + text # TODO: how does texinfo do hyperlinks? + end + + def target(name, text) + text # TODO: how do hyperlink targets work? + end + + # TODO: this is probably implemented elsewhere? + def method_prefix(section) + { 'Class' => '.', + 'Module' => '::', + 'Instance' => '#', + }[section['category']] + end + end + end +end diff --git a/lib/rdoc/generator/texinfo/class.texinfo.erb b/lib/rdoc/generator/texinfo/class.texinfo.erb new file mode 100644 index 0000000000..07f17eaef2 --- /dev/null +++ b/lib/rdoc/generator/texinfo/class.texinfo.erb @@ -0,0 +1,44 @@ +@node <%= @v['class']['full_name'].gsub(/::/, '-') %> +@chapter <%= @v['class']["classmod"] %> <%= @v['class']['full_name'] %> + +<% if @v['class']["parent"] and @v['class']['par_url'] %> +Inherits <%= href @v['class']["par_url"], @v['class']["parent"] %><% end %> + +<%= @v['class']["description"] %> + +<% if @v['class']["includes"] %> +Includes +<% @v['class']["includes"].each do |include| %> +* <%= href include["aref"], include["name"] %> +<% end # @v['class']["includes"] %> +<% end %> + +<% if @v['class']["sections"] %> +<% @v['class']["sections"].each do |section| %> +<% if section["attributes"] %> +Attributes +<% section["attributes"].each do |attributes| %> +* <%= attributes["name"] %> <%= attributes["rw"] %> <%= attributes["a_desc"] %> +<% end # section["attributes"] %> +<% end %> +<% end %> + +<% @v['class']["sections"].each do |section| %> +<% if section["method_list"] %> +Methods +@menu +<% section["method_list"].each_with_index do |method_list, i| %> +<%= i %> +<% (method_list["methods"] || []).each do |method| %> +* <%= @v['class']['full_name'].gsub(/::/, '-') %><%= method_prefix method_list %><%= method['name'] %>::<% end %> +<% end %> +@end menu + +<% section["method_list"].each do |method_list| %> +<% (method_list["methods"] || []).uniq.each do |method| %> +<%= TexinfoTemplate.new(@v.merge({'method' => method, 'list' => method_list}), + 'method.texinfo.erb').render %><% end %> +<% end # section["method_list"] %> +<% end %> +<% end # @v['class']["sections"] %> +<% end %> diff --git a/lib/rdoc/generator/texinfo/file.texinfo.erb b/lib/rdoc/generator/texinfo/file.texinfo.erb new file mode 100644 index 0000000000..b619b94bd2 --- /dev/null +++ b/lib/rdoc/generator/texinfo/file.texinfo.erb @@ -0,0 +1,6 @@ +<% if false %> +<h2>File: <%= @v['file']["short_name"] %></h2> +Path: <%= @v['file']["full_path"] %> + +<%= TexinfoTemplate.new(@v, 'content.texinfo.erb').render %> +<% end %> diff --git a/lib/rdoc/generator/texinfo/method.texinfo.erb b/lib/rdoc/generator/texinfo/method.texinfo.erb new file mode 100644 index 0000000000..f5c2b73a4b --- /dev/null +++ b/lib/rdoc/generator/texinfo/method.texinfo.erb @@ -0,0 +1,6 @@ +@node <%= @v['class']['full_name'].gsub(/::/, '-') %><%= method_prefix @v['list'] %><%= @v['method']['name'] %> +@section <%= @v['class']["classmod"] %> <%= @v['class']['full_name'] %><%= method_prefix @v['list'] %><%= @v['method']['name'] %> +<%= @v['method']["type"] %> <%= @v['method']["category"] %> method: +<%= target @v['method']["aref"], @v['method']['callseq'] || + @v['method']["name"] + @v['method']["params"] %> +<%= @v['method']["m_desc"] %> diff --git a/lib/rdoc/generator/texinfo/texinfo.erb b/lib/rdoc/generator/texinfo/texinfo.erb new file mode 100644 index 0000000000..235f63d73c --- /dev/null +++ b/lib/rdoc/generator/texinfo/texinfo.erb @@ -0,0 +1,28 @@ +\input texinfo @c -*-texinfo-*- +@c %**start of header +@setfilename <%= @v['filename'] %> +@settitle <%= @v['title'] %> +@c %**end of header + +@contents @c TODO: whitespace is a mess... =\ + +@ifnottex +@node Top + +@top <%= @v['title'] %> +@end ifnottex + +<% if @f = @v['files'].detect { |f| f.name =~ /Readme/i } %> +<%= @f.values['description'] %><% end %> + +@menu +<% @v['classes'].each do |klass| %> +* <%= klass.name.gsub(/::/, '-') %>::<% end %> +@c TODO: add files +@end menu + +<% (@v['classes'] || []).each_with_index do |klass, i| %> +<%= TexinfoTemplate.new(@v.merge('class' => klass.values), + 'class.texinfo.erb').render %><% end %> + +@bye |