summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordave <dave@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-11-20 15:02:57 +0000
committerdave <dave@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2004-11-20 15:02:57 +0000
commita80ba17d67141a51459bb89b1fb51e8b0a4ff2de (patch)
tree07dbf3a174284bb23462ce5109658ea56466207a
parentaafc487d6a461d0a729432f919af0ee9645fcf14 (diff)
1. Force --inline-source if --one-file given
2. Add new :section: directive which starts a new section in the output. The title following :section: is used as the section heading, and the remainder of the comment containing the section is used as introductory text. Subsequent methods, aliases, attributes, and classes will be documented in this section. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7344 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog13
-rw-r--r--lib/rdoc/README7
-rw-r--r--lib/rdoc/code_objects.rb35
-rw-r--r--lib/rdoc/generators/html_generator.rb132
-rw-r--r--lib/rdoc/generators/template/html/html.rb597
-rw-r--r--lib/rdoc/options.rb2
-rw-r--r--lib/rdoc/parsers/parse_rb.rb23
7 files changed, 484 insertions, 325 deletions
diff --git a/ChangeLog b/ChangeLog
index bb105f291a..7129c64a8e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+Sat Nov 20 23:57:33 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/README (et al): Add a new directive, :section:, and
+ change the output format to accomodate. :section: allows to to
+ group together methods, attributes, constants, etc under
+ headings in the output. If used, a table of contents is
+ generated.
+
+Sat Nov 20 23:56:54 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/options.rb (Options::parse): Force --inline-source if
+ --one-file option given
+
Sat Nov 20 23:25:12 2004 Minero Aoki <aamine@loveruby.net>
* io.c (rb_io_getline): f.gets("") did not work. [ruby-core:03771]
diff --git a/lib/rdoc/README b/lib/rdoc/README
index 5e90d792a2..583f7f3b0c 100644
--- a/lib/rdoc/README
+++ b/lib/rdoc/README
@@ -422,6 +422,13 @@ this margin are formatted verbatim.
12. Comment blocks can contain other directives:
+ [<tt>:section: title</tt>]
+ Starts a new section in the output. The title following
+ <tt>:section:</tt> is used as the section heading, and the
+ remainder of the comment containing the section is used as
+ introductory text. Subsequent methods, aliases, attributes,
+ and classes will be documented in this section.
+
[<tt>call-seq:</tt>]
lines up to the next blank line in the comment are treated as
the method's calling sequence, overriding the
diff --git a/lib/rdoc/code_objects.rb b/lib/rdoc/code_objects.rb
index bd713ab92b..134ac398e9 100644
--- a/lib/rdoc/code_objects.rb
+++ b/lib/rdoc/code_objects.rb
@@ -23,6 +23,9 @@ module RDoc
attr_accessor :done_documenting
+ # Which section are we in
+
+ attr_accessor :section
# do we document ourselves?
@@ -111,7 +114,25 @@ module RDoc
class Context < CodeObject
attr_reader :name, :method_list, :attributes, :aliases, :constants
attr_reader :requires, :includes, :in_files, :visibility
-
+
+ attr_reader :sections
+
+ class Section
+ attr_reader :title, :comment, :sequence
+
+ @@sequence = "SEC00000"
+
+ def initialize(title, comment)
+ @title = title
+ @@sequence.succ!
+ @sequence = @@sequence.dup
+ if comment
+ @comment = comment.sub(/.*$/, '')
+ @comment = nil if @comment.empty?
+ end
+ end
+ end
+
def initialize
super()
@@ -123,6 +144,9 @@ module RDoc
@parent = nil
@visibility = :public
+ @current_section = Section.new(nil, nil)
+ @sections = [ @current_section ]
+
initialize_methods_etc
initialize_classes_and_modules
end
@@ -236,6 +260,7 @@ module RDoc
# collection[name] = cls if @document_self && !@done_documenting
collection[name] = cls if !@done_documenting
cls.parent = self
+ cls.section = @current_section
end
cls
end
@@ -243,6 +268,7 @@ module RDoc
def add_to(array, thing)
array << thing if @document_self && !@done_documenting
thing.parent = self
+ thing.section = @current_section
end
# If a class's documentation is turned off after we've started
@@ -374,6 +400,13 @@ module RDoc
find_module_named(symbol)
end
+ # Handle sections
+
+ def set_current_section(title, comment)
+ @current_section = Section.new(title, comment)
+ @sections << @current_section
+ end
+
private
# Find a named method, or return nil
diff --git a/lib/rdoc/generators/html_generator.rb b/lib/rdoc/generators/html_generator.rb
index fbfc596cc3..f9c72a4df2 100644
--- a/lib/rdoc/generators/html_generator.rb
+++ b/lib/rdoc/generators/html_generator.rb
@@ -336,8 +336,10 @@ module Generators
# Build a list of aliases for which we couldn't find a
# corresponding method
- def build_alias_summary_list
- @context.aliases.map do |al|
+ def build_alias_summary_list(section)
+ values = []
+ @context.aliases.each do |al|
+ next unless al.section == section
res = {
'old_name' => al.old_name,
'new_name' => al.new_name,
@@ -345,20 +347,24 @@ module Generators
if al.comment && !al.comment.empty?
res['desc'] = markup(al.comment, true)
end
- res
+ values << res
end
+ values
end
# Build a list of constants
- def build_constants_summary_list
- @context.constants.map do |co|
+ def build_constants_summary_list(section)
+ values = []
+ @context.constants.each do |co|
+ next unless co.section == section
res = {
'name' => co.name,
'value' => CGI.escapeHTML(co.value)
}
res['desc'] = markup(co.comment, true) if co.comment && !co.comment.empty?
- res
+ values << res
end
+ values
end
def build_requires_list(context)
@@ -416,7 +422,7 @@ module Generators
# methods, the other for instance methods. The inner arrays contain
# a hash for each method
- def build_method_detail_list
+ def build_method_detail_list(section)
outer = []
methods = @methods.sort
@@ -424,7 +430,10 @@ module Generators
for vis in [ :public, :protected, :private ]
res = []
methods.each do |m|
- if m.document_self and m.visibility == vis and m.singleton == singleton
+ if m.section == section and
+ m.document_self and
+ m.visibility == vis and
+ m.singleton == singleton
row = {}
if m.call_seq
row["callseq"] = m.call_seq.gsub(/->/, '&rarr;')
@@ -478,11 +487,12 @@ module Generators
# Build the structured list of classes and modules contained
# in this context.
- def build_class_list(level, from, infile=nil)
+ def build_class_list(level, from, section, infile=nil)
res = ""
prefix = "&nbsp;&nbsp;::" * level;
from.modules.sort.each do |mod|
+ next unless mod.section == section
next if infile && !mod.defined_in?(infile)
if mod.document_self
res <<
@@ -490,11 +500,12 @@ module Generators
"Module " <<
href(url(mod.viewer.path), "link", mod.full_name) <<
"<br />\n" <<
- build_class_list(level + 1, mod, infile)
+ build_class_list(level + 1, mod, section, infile)
end
end
from.classes.sort.each do |cls|
+ next unless cls.section == section
next if infile && !cls.defined_in?(infile)
if cls.document_self
res <<
@@ -502,7 +513,7 @@ module Generators
"Class " <<
href(url(cls.viewer.path), "link", cls.full_name) <<
"<br />\n" <<
- build_class_list(level + 1, cls, infile)
+ build_class_list(level + 1, cls, section, infile)
end
end
@@ -541,6 +552,24 @@ module Generators
end
res
end
+
+ # create table of contents if we contain sections
+
+ def add_table_of_sections
+ toc = []
+ @context.sections.each do |section|
+ if section.title
+ toc << {
+ 'secname' => section.title,
+ 'href' => section.sequence
+ }
+ end
+ end
+
+ @values['toc'] = toc unless toc.empty?
+ end
+
+
end
#####################################################################
@@ -604,6 +633,7 @@ module Generators
def value_hash
class_attribute_values
+ add_table_of_sections
@values["charset"] = @options.charset
@values["style_url"] = style_url(path, @options.css)
@@ -614,30 +644,43 @@ module Generators
ml = build_method_summary_list
@values["methods"] = ml unless ml.empty?
- al = build_alias_summary_list
- @values["aliases"] = al unless al.empty?
-
- co = build_constants_summary_list
- @values["constants"] = co unless co.empty?
-
il = build_include_list(@context)
@values["includes"] = il unless il.empty?
- al = build_attribute_list
- @values["attributes"] = al unless al.empty?
-
- cl = build_class_list(0, @context)
- @values["classlist"] = cl unless cl.empty?
+ @values["sections"] = @context.sections.map do |section|
+
+ secdata = {
+ "sectitle" => section.title,
+ "secsequence" => section.sequence,
+ "seccomment" => markup(section.comment)
+ }
+
+ al = build_alias_summary_list(section)
+ secdata["aliases"] = al unless al.empty?
+
+ co = build_constants_summary_list(section)
+ secdata["constants"] = co unless co.empty?
+
+ al = build_attribute_list(section)
+ secdata["attributes"] = al unless al.empty?
+
+ cl = build_class_list(0, @context, section)
+ secdata["classlist"] = cl unless cl.empty?
+
+ mdl = build_method_detail_list(section)
+ secdata["method_list"] = mdl unless mdl.empty?
+
+ secdata
+ end
- mdl = build_method_detail_list
- @values["method_list"] = mdl unless mdl.empty?
@values
end
- def build_attribute_list
+ def build_attribute_list(section)
atts = @context.attributes.sort
res = []
atts.each do |att|
+ next unless att.section == section
if att.visibility == :public || @options.show_all
entry = {
"name" => CGI.escapeHTML(att.name),
@@ -701,7 +744,6 @@ module Generators
end
@values['infiles'] = files
-
end
def <=>(other)
@@ -759,6 +801,7 @@ module Generators
def value_hash
file_attribute_values
+ add_table_of_sections
@values["charset"] = @options.charset
@values["href"] = path
@@ -778,23 +821,36 @@ module Generators
rl = build_requires_list(@context)
@values["requires"] = rl unless rl.empty?
- co = build_constants_summary_list
- @values["constants"] = co unless co.empty?
-
- al = build_alias_summary_list
- @values["aliases"] = al unless al.empty?
-
if @options.promiscuous
file_context = nil
else
file_context = @context
end
- cl = build_class_list(0, @context, file_context)
- @values["classlist"] = cl unless cl.empty?
- mdl = build_method_detail_list
- @values["method_list"] = mdl unless mdl.empty?
+ @values["sections"] = @context.sections.map do |section|
+
+ secdata = {
+ "sectitle" => section.title,
+ "secsequence" => section.sequence,
+ "seccomment" => markup(section.comment)
+ }
+
+ cl = build_class_list(0, @context, section, file_context)
+ @values["classlist"] = cl unless cl.empty?
+
+ mdl = build_method_detail_list(section)
+ secdata["method_list"] = mdl unless mdl.empty?
+
+ al = build_alias_summary_list(section)
+ secdata["aliases"] = al unless al.empty?
+
+ co = build_constants_summary_list(section)
+ @values["constants"] = co unless co.empty?
+
+ secdata
+ end
+
@values
end
@@ -885,6 +941,10 @@ module Generators
@context.name
end
+ def section
+ @context.section
+ end
+
def index_name
"#{@context.name} (#{@html_class.name})"
end
diff --git a/lib/rdoc/generators/template/html/html.rb b/lib/rdoc/generators/template/html/html.rb
index e0a8880004..fd9917b43a 100644
--- a/lib/rdoc/generators/template/html/html.rb
+++ b/lib/rdoc/generators/template/html/html.rb
@@ -20,19 +20,22 @@
#
module RDoc
- module Page
+ module Page
- FONTS = "Verdana,Arial,Helvetica,sans-serif"
+ FONTS = "Verdana,Arial,Helvetica,sans-serif"
STYLE = %{
body {
+ font-family: Verdana,Arial,Helvetica,sans-serif;
+ 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: 120%; }
+h1 { font-size: 150%; }
h2,h3,h4 { margin-top: 1em; }
a { background: #eef; color: #039; text-decoration: none; }
@@ -40,61 +43,75 @@ a:hover { background: #039; color: #eef; }
/* Override the base stylesheet's Anchor inside a table cell */
td > a {
- background: transparent;
- color: #039;
- text-decoration: none;
+ background: transparent;
+ color: #039;
+ text-decoration: none;
+}
+
+/* and inside a section title */
+.section-title > a {
+ background: transparent;
+ color: #eee;
+ text-decoration: none;
}
/* === Structural elements =================================== */
div#index {
margin: 0;
+ margin-left: -40px;
padding: 0;
- font-size: 0.9em;
+ font-size: 90%;
}
+
div#index a {
margin-left: 0.7em;
}
-div#classHeader {
+div#index .section-bar {
+ margin-left: 0px;
+ padding-left: 0.7em;
+ background: #ccc;
+ font-size: small;
+}
+
+
+div#classHeader, div#fileHeader {
width: auto;
- background: #039;
color: white;
padding: 0.5em 1.5em 0.5em 1.5em;
margin: 0;
+ margin-left: -40px;
border-bottom: 3px solid #006;
}
-div#classHeader a {
+div#classHeader a, div#fileHeader a {
background: inherit;
color: white;
}
-div#classHeader td {
+div#classHeader td, div#fileHeader td {
background: inherit;
color: white;
}
+
div#fileHeader {
- width: auto;
- background: #039;
- color: white;
- padding: 0.5em 1.5em 0.5em 1.5em;
- margin: 0;
- border-bottom: 3px solid #006;
+ background: #057;
}
-div#fileHeader a {
- background: inherit;
- color: white;
+div#classHeader {
+ background: #048;
}
-div#fileHeader td {
- background: inherit;
- color: white;
+
+.class-name-in-header {
+ font-size: 180%;
+ font-weight: bold;
}
+
div#bodyContent {
padding: 0 1.5em 0 1.5em;
}
@@ -105,7 +122,7 @@ div#description {
border: 1px dotted #999;
}
-div#description h1,h2,h3,h4,h5,h6 {
+div#description h1,h3,h3,h4,h5,h6 {
color: black;
background: transparent;
}
@@ -137,35 +154,51 @@ table.header-table {
color: #DEDEDE;
}
-.section-bar {
+.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: vertical-align: top }
+.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: x-small; color: #448; }
-.context-item-desc { background: #efefef; }
+.context-item-value { font-size: small; color: #448; }
+.context-item-desc { color: #333; padding-left: 2em; }
/* --- Method classes -------------------------- */
.method-detail {
- background: #EFEFEF;
+ background: #efefef;
padding: 0;
margin-top: 0.5em;
- margin-bottom: 0.5em;
- border: 1px dotted #DDD;
+ margin-bottom: 1em;
+ border: 1px dotted #ccc;
}
.method-heading {
- color: black;
- background: #AAA;
- border-bottom: 1px solid #666;
- padding: 0.2em 0.5em 0 0.5em;
+ 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; }
@@ -178,7 +211,7 @@ a.source-toggle { font-size: 90%; }
div.method-source-code {
background: #262626;
color: #ffdead;
- margin: 1em;
+ margin: 1em;
padding: 0.5em;
border: 1px dashed #999;
overflow: hidden;
@@ -190,20 +223,20 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
.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-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; }
+.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; }
}
#####################################################################
-### H E A D E R T E M P L A T E
+### H E A D E R T E M P L A T E
#####################################################################
XHTML_PREAMBLE = %{<?xml version="1.0" encoding="%charset%"?>
@@ -215,41 +248,41 @@ XHTML_PREAMBLE = %{<?xml version="1.0" encoding="%charset%"?>
HEADER = XHTML_PREAMBLE + %{
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
- <title>%title%</title>
- <meta http-equiv="Content-Type" content="text/html; charset=%charset%" />
- <meta http-equiv="Content-Script-Type" content="text/javascript" />
- <link rel="stylesheet" href="%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>
+ <title>%title%</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=%charset%" />
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
+ <link rel="stylesheet" href="%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>
@@ -257,129 +290,15 @@ HEADER = XHTML_PREAMBLE + %{
#####################################################################
-### C O N T E X T C O N T E N T T E M P L A T E
+### C O N T E X T C O N T E N T T E M P L A T E
#####################################################################
CONTEXT_CONTENT = %{
- <div id="contextContent">
-IF:diagram
- <div id="diagram">
- %diagram%
- </div>
-ENDIF:diagram
-
-IF:description
- <div id="description">
- %description%
- </div>
-ENDIF:description
-
-IF:requires
- <div id="requires-list">
- <h2 class="section-bar">Required files</h2>
-
- <div class="name-list">
-START:requires
- HREF:aref:name:&nbsp;&nbsp;
-END:requires
- </div>
- </div>
-ENDIF:requires
-
-IF:methods
- <div id="method-list">
- <h2 class="section-bar">Methods</h2>
-
- <div class="name-list">
-START:methods
- HREF:aref:name:&nbsp;&nbsp;
-END:methods
- </div>
- </div>
-ENDIF:methods
-
-IF:constants
- <div id="constants-list">
- <h2 class="section-bar">Constants</h2>
-
- <div class="name-list">
- <table summary="Constants">
-START:constants
- <tr class="top-aligned-row context-row">
- <td class="context-item-name">%name%</td>
- <td>=</td>
- <td class="context-item-value">%value%</td>
- </tr>
-IF:desc
- <tr class="top-aligned-row context-row">
- <td>&nbsp;</td>
- <td colspan="2" class="context-item-desc">%desc%</td>
- </tr>
-ENDIF:desc
-END:constants
- </table>
- </div>
- </div>
-ENDIF:constants
-
-IF:aliases
- <div id="aliases-list">
- <h2 class="section-bar">External Aliases</h2>
-
- <div class="name-list">
- <table summary="aliases">
-START:aliases
- <tr class="top-aligned-row context-row">
- <td class="context-item-name">%old_name%</td>
- <td>-></td>
- <td class="context-item-value">%new_name%</td>
- </tr>
-IF:desc
- <tr class="top-aligned-row context-row">
- <td>&nbsp;</td>
- <td colspan="2" class="context-item-desc">%desc%</td>
- </tr>
-ENDIF:desc
-END:aliases
- </table>
- </div>
- </div>
-ENDIF:aliases
-
-
-IF:attributes
- <div id="attribute-list">
- <h2 class="section-bar">Attributes</h2>
-
- <div class="name-list">
- <table>
-START:attributes
- <tr class="top-aligned-row context-row">
- <td class="context-item-name">%name%</td>
- <td class="context-item-value">&nbsp;[%rw%]&nbsp;</td>
- <td class="context-item-desc">%a_desc%</td>
- </tr>
-END:attributes
- </table>
- </div>
- </div>
-ENDIF:attributes
-
-IF:classlist
- <div id="class-list">
- <h2 class="section-bar">Classes and Modules</h2>
-
- %classlist%
- </div>
-ENDIF:classlist
-
- </div>
-
}
#####################################################################
-### F O O T E R T E M P L A T E
+### F O O T E R T E M P L A T E
#####################################################################
FOOTER = %{
<div id="validator-badges">
@@ -392,39 +311,42 @@ FOOTER = %{
#####################################################################
-### F I L E P A G E H E A D E R T E M P L A T E
+### F I L E P A G E H E A D E R T E M P L A T E
#####################################################################
FILE_PAGE = %{
- <div id="fileHeader">
- <h1>%short_name%</h1>
- <table class="header-table">
- <tr class="top-aligned-row">
- <td><strong>Path:</strong></td>
- <td>%full_path%
+ <div id="fileHeader">
+ <h1>%short_name%</h1>
+ <table class="header-table">
+ <tr class="top-aligned-row">
+ <td><strong>Path:</strong></td>
+ <td>%full_path%
IF:cvsurl
- &nbsp;(<a href="%cvsurl%">CVS</a>)
+ &nbsp;(<a href="%cvsurl%">CVS</a>)
ENDIF:cvsurl
- </td>
- </tr>
- <tr class="top-aligned-row">
- <td><strong>Last Update:</strong></td>
- <td>%dtm_modified%</td>
- </tr>
- </table>
- </div>
+ </td>
+ </tr>
+ <tr class="top-aligned-row">
+ <td><strong>Last Update:</strong></td>
+ <td>%dtm_modified%</td>
+ </tr>
+ </table>
+ </div>
}
#####################################################################
-### C L A S S P A G E H E A D E R T E M P L A T E
+### C L A S S P A G E H E A D E R T E M P L A T E
#####################################################################
CLASS_PAGE = %{
<div id="classHeader">
- <h1>%full_name% <sup class="type-note">(%classmod%)</sup></h1>
<table class="header-table">
<tr class="top-aligned-row">
+ <td><strong>%classmod%</strong></td>
+ <td class="class-name-in-header">%full_name%</td>
+ </tr>
+ <tr class="top-aligned-row">
<td><strong>In:</strong></td>
<td>
START:infiles
@@ -436,9 +358,9 @@ IF:full_path_url
</a>
ENDIF:full_path_url
IF:cvsurl
- &nbsp;(<a href="%cvsurl%">CVS</a>)
+ &nbsp;(<a href="%cvsurl%">CVS</a>)
ENDIF:cvsurl
- <br />
+ <br />
END:infiles
</td>
</tr>
@@ -463,121 +385,258 @@ ENDIF:parent
#####################################################################
-### M E T H O D L I S T T E M P L A T E
+### M E T H O D L I S T T E M P L A T E
#####################################################################
METHOD_LIST = %{
- <!-- if includes -->
+ <div id="contextContent">
+IF:diagram
+ <div id="diagram">
+ %diagram%
+ </div>
+ENDIF:diagram
+
+IF:description
+ <div id="description">
+ %description%
+ </div>
+ENDIF:description
+
+IF:requires
+ <div id="requires-list">
+ <h3 class="section-bar">Required files</h3>
+
+ <div class="name-list">
+START:requires
+ HREF:aref:name:&nbsp;&nbsp;
+END:requires
+ </div>
+ </div>
+ENDIF:requires
+
+IF:toc
+ <div id="contents-list">
+ <h3 class="section-bar">Contents</h3>
+ <ul>
+START:toc
+ <li><a href="#%href%">%secname%</a></li>
+END:toc
+ </ul>
+ENDIF:toc
+ </div>
+
+IF:methods
+ <div id="method-list">
+ <h3 class="section-bar">Methods</h3>
+
+ <div class="name-list">
+START:methods
+ HREF:aref:name:&nbsp;&nbsp;
+END:methods
+ </div>
+ </div>
+ENDIF:methods
+
+ </div>
+
+
+ <!-- if includes -->
IF:includes
- <div id="includes">
- <h2 class="section-bar">Included Modules</h2>
+ <div id="includes">
+ <h3 class="section-bar">Included Modules</h3>
- <div id="includes-list">
+ <div id="includes-list">
START:includes
- <span class="include-name">HREF:aref:name:</span>
+ <span class="include-name">HREF:aref:name:</span>
END:includes
- </div>
- </div>
+ </div>
+ </div>
ENDIF:includes
+START:sections
+ <div id="section">
+IF:sectitle
+ <h2 class="section-title"><a name="%secsequence%">%sectitle%</a></h2>
+IF:seccomment
+ <div class="section-comment">
+ %seccomment%
+ </div>
+ENDIF:seccomment
+ENDIF:sectitle
+
+IF:classlist
+ <div id="class-list">
+ <h3 class="section-bar">Classes and Modules</h3>
+
+ %classlist%
+ </div>
+ENDIF:classlist
+
+IF:constants
+ <div id="constants-list">
+ <h3 class="section-bar">Constants</h3>
+
+ <div class="name-list">
+ <table summary="Constants">
+START:constants
+ <tr class="top-aligned-row context-row">
+ <td class="context-item-name">%name%</td>
+ <td>=</td>
+ <td class="context-item-value">%value%</td>
+IF:desc
+ <td width="3em">&nbsp;</td>
+ <td class="context-item-desc">%desc%</td>
+ENDIF:desc
+ </tr>
+END:constants
+ </table>
+ </div>
+ </div>
+ENDIF:constants
+
+IF:aliases
+ <div id="aliases-list">
+ <h3 class="section-bar">External Aliases</h3>
+
+ <div class="name-list">
+ <table summary="aliases">
+START:aliases
+ <tr class="top-aligned-row context-row">
+ <td class="context-item-name">%old_name%</td>
+ <td>-></td>
+ <td class="context-item-value">%new_name%</td>
+ </tr>
+IF:desc
+ <tr class="top-aligned-row context-row">
+ <td>&nbsp;</td>
+ <td colspan="2" class="context-item-desc">%desc%</td>
+ </tr>
+ENDIF:desc
+END:aliases
+ </table>
+ </div>
+ </div>
+ENDIF:aliases
+
+
+IF:attributes
+ <div id="attribute-list">
+ <h3 class="section-bar">Attributes</h3>
+
+ <div class="name-list">
+ <table>
+START:attributes
+ <tr class="top-aligned-row context-row">
+ <td class="context-item-name">%name%</td>
+ <td class="context-item-value">&nbsp;[%rw%]&nbsp;</td>
+ <td class="context-item-desc">%a_desc%</td>
+ </tr>
+END:attributes
+ </table>
+ </div>
+ </div>
+ENDIF:attributes
+
- <!-- if method_list -->
+
+ <!-- if method_list -->
IF:method_list
- <div id="methods">
+ <div id="methods">
START:method_list
IF:methods
- <h2 class="section-bar">%type% %category% methods</h2>
+ <h3 class="section-bar">%type% %category% methods</h3>
START:methods
- <div id="method-%aref%" class="method-detail">
- <a name="%aref%"></a>
+ <div id="method-%aref%" class="method-detail">
+ <a name="%aref%"></a>
- <div class="method-heading">
+ <div class="method-heading">
IF:codeurl
- <a href="%codeurl%" target="Code" class="method-signature"
- onclick="popupCode('%codeurl%');return false;">
+ <a href="%codeurl%" target="Code" class="method-signature"
+ onclick="popupCode('%codeurl%');return false;">
ENDIF:codeurl
IF:sourcecode
- <a href="#%aref%" class="method-signature">
+ <a href="#%aref%" class="method-signature">
ENDIF:sourcecode
IF:callseq
- <span class="method-name">%callseq%</span>
+ <span class="method-name">%callseq%</span>
ENDIF:callseq
IFNOT:callseq
- <span class="method-name">%name%</span><span class="method-args">%params%</span>
+ <span class="method-name">%name%</span><span class="method-args">%params%</span>
ENDIF:callseq
IF:codeurl
- </a>
+ </a>
ENDIF:codeurl
IF:sourcecode
- </a>
+ </a>
ENDIF:sourcecode
- </div>
-
- <div class="method-description">
+ </div>
+
+ <div class="method-description">
IF:m_desc
- %m_desc%
+ %m_desc%
ENDIF:m_desc
IF:sourcecode
- <p><a class="source-toggle" href="#"
- onclick="toggleCode('%aref%-source');return false;">[Source]</a></p>
- <div class="method-source-code" id="%aref%-source">
+ <p><a class="source-toggle" href="#"
+ onclick="toggleCode('%aref%-source');return false;">[Source]</a></p>
+ <div class="method-source-code" id="%aref%-source">
<pre>
%sourcecode%
</pre>
- </div>
+ </div>
ENDIF:sourcecode
- </div>
- </div>
+ </div>
+ </div>
END:methods
ENDIF:methods
END:method_list
- </div>
+ </div>
ENDIF:method_list
+END:sections
}
#####################################################################
-### B O D Y T E M P L A T E
+### B O D Y T E M P L A T E
#####################################################################
BODY = HEADER + %{
!INCLUDE! <!-- banner header -->
- <div id="bodyContent">
+ <div id="bodyContent">
-} + CONTEXT_CONTENT + METHOD_LIST + %{
+} + METHOD_LIST + %{
- </div>
+ </div>
} + FOOTER
#####################################################################
-### S O U R C E C O D E T E M P L A T E
+### S O U R C E C O D E T E M P L A T E
#####################################################################
SRC_PAGE = XHTML_PREAMBLE + %{
<html>
<head>
- <title>%title%</title>
- <meta http-equiv="Content-Type" content="text/html; charset=%charset%" />
- <link rel="stylesheet" href="%style_url%" type="text/css" media="screen" />
+ <title>%title%</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=%charset%" />
+ <link rel="stylesheet" href="%style_url%" type="text/css" media="screen" />
</head>
<body class="standalone-code">
- <pre>%code%</pre>
+ <pre>%code%</pre>
</body>
</html>
}
#####################################################################
-### I N D E X F I L E T E M P L A T E S
+### I N D E X F I L E T E M P L A T E S
#####################################################################
FR_INDEX_BODY = %{
@@ -592,19 +651,19 @@ FILE_INDEX = XHTML_PREAMBLE + %{
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
- <title>%list_title%</title>
- <meta http-equiv="Content-Type" content="text/html; charset=%charset%" />
- <link rel="stylesheet" href="%style_url%" type="text/css" />
- <base target="docwin" />
+ <title>%list_title%</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=%charset%" />
+ <link rel="stylesheet" href="%style_url%" type="text/css" />
+ <base target="docwin" />
</head>
<body>
<div id="index">
- <h1 class="section-bar">%list_title%</h1>
- <div id="index-entries">
+ <h1 class="section-bar">%list_title%</h1>
+ <div id="index-entries">
START:entries
- <a href="%href%">%name%</a><br />
+ <a href="%href%">%name%</a><br />
END:entries
- </div>
+ </div>
</div>
</body>
</html>
@@ -625,8 +684,8 @@ INDEX = %{<?xml version="1.0" encoding="%charset%"?>
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
- <title>%title%</title>
- <meta http-equiv="Content-Type" content="text/html; charset=%charset%" />
+ <title>%title%</title>
+ <meta http-equiv="Content-Type" content="text/html; charset=%charset%" />
</head>
<frameset rows="20%, 80%">
<frameset cols="25%,35%,45%">
@@ -641,7 +700,7 @@ INDEX = %{<?xml version="1.0" encoding="%charset%"?>
- end # module Page
+ end # module Page
end # class RDoc
require 'rdoc/generators/template/html/one_page_html'
diff --git a/lib/rdoc/options.rb b/lib/rdoc/options.rb
index 62c6dabff0..53eee992e2 100644
--- a/lib/rdoc/options.rb
+++ b/lib/rdoc/options.rb
@@ -391,7 +391,7 @@ class Options
when "--line-numbers" then @include_line_numbers = true
when "--main" then @main_page = arg
when "--merge" then @merge = true
- when "--one-file" then @all_one_file = true
+ when "--one-file" then @all_one_file = @inline_source = true
when "--op" then @op_dir = arg
when "--opname" then @op_name = arg
when "--promiscuous" then @promiscuous = true
diff --git a/lib/rdoc/parsers/parse_rb.rb b/lib/rdoc/parsers/parse_rb.rb
index b8367b5641..8f1206409a 100644
--- a/lib/rdoc/parsers/parse_rb.rb
+++ b/lib/rdoc/parsers/parse_rb.rb
@@ -1580,23 +1580,6 @@ module RDoc
non_comment_seen = true unless tk.kind_of?(TkCOMMENT)
-# $stderr.puts "===== #{tk.inspect}"
-# blank_line_seen = true
-# while tk.kind_of?(TkNL)
-# skip_tkspace(false)
-# if peek_tk.kind_of?(TkCOMMENT)
-# if blank_line_seen
-# comment = ''
-# blank_line_seen = false
-# end
-# tk = get_tk
-# comment << tk.text << "\n"
-# else
-# blank_line_seen = true
-# end
-# tk = get_tk
-# end
-
case tk
when TkNL
@@ -2326,6 +2309,10 @@ module RDoc
options.title = param
""
+ when "section"
+ context.set_current_section(param, comment)
+ comment.clear
+ ""
else
warn "Unrecognized directive '#{directive}'"
break
@@ -2548,7 +2535,7 @@ module RDoc
break
when TkCOMMA
else
- warn("unexpected token: '#{tk.inspect}'")
+ warn("unexpected token: '#{tk2.inspect}'") if $DEBBUG
break
end
end