Use ERB instead of custom template language for RDoc.

Remove old_html template.

Convert all templates to ERB.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@14935 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
drbrain 2008-01-07 10:40:50 +00:00
parent f2707db2dc
commit 466d40ed15
11 changed files with 690 additions and 1575 deletions

View File

@ -1,3 +1,11 @@
Mon Jan 7 19:39:50 2008 Eric Hodel <drbrain@segment7.net>
* lib/rdoc/template.rb: Use ERB instead of custom template language.
* lib/rdoc/generators/template/html/old_html.rb: Remove.
* lib/rdoc/generators/template/*: Convert to ERB.
Mon Jan 7 19:11:30 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
* string.c (Init_String): sym_match arity spec was wrong. a patch

View File

@ -27,8 +27,6 @@ class RDoc::Generators::CHMGenerator < RDoc::Generators::HTMLGenerator
"\n\nYou can download a copy for free from:\n\n" <<
" http://msdn.microsoft.com/library/default.asp?" <<
"url=/library/en-us/htmlhelp/html/hwMicrosoftHTMLHelpDownloads.asp\n\n"
exit 99
end
##
@ -54,7 +52,7 @@ class RDoc::Generators::CHMGenerator < RDoc::Generators::HTMLGenerator
# files that go to make up the help.
def create_project_file
template = TemplatePage.new(RDoc::Page::HPP_FILE)
template = RDoc::TemplatePage.new RDoc::Page::HPP_FILE
values = { "title" => @options.title, "opname" => @op_name }
files = []
@files.each do |f|
@ -92,13 +90,13 @@ class RDoc::Generators::CHMGenerator < RDoc::Generators::HTMLGenerator
end
values = { "contents" => contents }
template = TemplatePage.new(RDoc::Page::CONTENTS)
template = RDoc::TemplatePage.new RDoc::Page::CONTENTS
File.open("contents.hhc", "w") do |f|
template.write_html_on(f, values)
end
values = { "index" => index }
template = TemplatePage.new(RDoc::Page::CHM_INDEX)
template = RDoc::TemplatePage.new RDoc::Page::CHM_INDEX
File.open("index.hhk", "w") do |f|
template.write_html_on(f, values)
end

View File

@ -1,5 +1,4 @@
module RDoc
module Page
module RDoc::Page
require "rdoc/generators/template/html/html"
@ -13,17 +12,17 @@ HPP_FILE = %{
[OPTIONS]
Auto Index = Yes
Compatibility=1.1 or later
Compiled file=%opname%.chm
Compiled file=<%= values["opname"] %>.chm
Contents file=contents.hhc
Full-text search=Yes
Index file=index.hhk
Language=0x409 English(United States)
Title=%title%
Title=<%= values["title"] %>
[FILES]
START:all_html_files
%html_file_name%
END:all_html_files
<% values["all_html_files"].each do |all_html_files| %>
<%= all_html_files["html_file_name"] %>
<% end # values["all_html_files"] %>
}
CONTENTS = %{
@ -39,28 +38,27 @@ CONTENTS = %{
<param name="ImageType" value="Folder">
</OBJECT>
<UL>
START:contents
<% values["contents"].each do |contents| %>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="%c_name%">
<param name="Local" value="%ref%">
<param name="Name" value="<%= contents["c_name"] %>">
<param name="Local" value="<%= contents["ref"] %>">
</OBJECT>
IF:methods
<% if contents["methods"] then %>
<ul>
START:methods
<% contents["methods"].each do |methods| %>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="%name%">
<param name="Local" value="%aref%">
<param name="Name" value="<%= methods["name"] %>">
<param name="Local" value="<%= methods["aref"] %>">
</OBJECT>
END:methods
<% end # contents["methods"] %>
</ul>
ENDIF:methods
<% end %>
</LI>
END:contents
<% end # values["contents"] %>
</UL>
</BODY></HTML>
}
CHM_INDEX = %{
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
<HTML>
@ -74,14 +72,15 @@ CHM_INDEX = %{
<param name="ImageType" value="Folder">
</OBJECT>
<UL>
START:index
<% values["index"].each do |index| %>
<LI> <OBJECT type="text/sitemap">
<param name="Name" value="%name%">
<param name="Local" value="%aref%">
<param name="Name" value="<%= index["name"] %>">
<param name="Local" value="<%= index["aref"] %>">
</OBJECT>
END:index
<% end # values["index"] %>
</UL>
</BODY></HTML>
}
end
end

View File

@ -112,9 +112,9 @@ td { font-family: Verdana, Arial, Helvetica, sans-serif;
BODY = %{
<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><%= 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" />
<script type="text/javascript" language="JavaScript">
<!--
function popCode(url) {
@ -125,68 +125,76 @@ BODY = %{
</head>
<body bgcolor="#BBBBBB">
!INCLUDE! <!-- banner header -->
<%= template_include %> <!-- banner header -->
IF:diagram
<% if values["diagram"] then %>
<table width="100%"><tr><td align="center">
%diagram%
<%= values["diagram"] %>
</td></tr></table>
ENDIF:diagram
<% end %>
IF:description
<div class="description">%description%</div>
ENDIF:description
<% if values["description"] then %>
<div class="description"><%= values["description"] %></div>
<% end %>
IF:requires
<% if values["requires"] then %>
<table cellpadding="5" width="100%">
<tr><td class="tablesubtitle">Required files</td></tr>
</table><br />
<div class="name-list">
START:requires
HREF:aref:name:
END:requires
ENDIF:requires
<% values["requires"].each do |requires| %>
<%= href requires["aref"], requires["name"] %>
<% end # values["requires"] %>
<% end %>
</div>
IF:methods
<% if values["sections"] then %>
<% values["sections"].each do |sections| %>
<% if sections["method_list"] then %>
<% sections["method_list"].each do |method_list| %>
<% if method_list["methods"] then %>
<table cellpadding="5" width="100%">
<tr><td class="tablesubtitle">Subroutines and Functions</td></tr>
</table><br />
<div class="name-list">
START:methods
HREF:aref:name:,
END:methods
<% method_list["methods"].each do |methods| %>
<a href="<%= methods["codeurl"] %>" target="source"><%= methods["name"] %></a>
<% end # values["methods"] %>
</div>
ENDIF:methods
<% end %>
<% end # values["method_list"] %>
<% end %>
IF:attributes
<% if sections["attributes"] then %>
<table cellpadding="5" width="100%">
<tr><td class="tablesubtitle">Arguments</td></tr>
</table><br />
<table cellspacing="5">
START:attributes
<% sections["attributes"].each do |attributes| %>
<tr valign="top">
IF:rw
<td align="center" class="attr-rw">&nbsp;[%rw%]&nbsp;</td>
ENDIF:rw
IFNOT:rw
<% if attributes["rw"] then %>
<td align="center" class="attr-rw">&nbsp;[<%= attributes["rw"] %>]&nbsp;</td>
<% end %>
<% unless attributes["rw"] then %>
<td></td>
ENDIF:rw
<td class="attr-name">%name%</td>
<td>%a_desc%</td>
<% end %>
<td class="attr-name"><%= attributes["name"] %></td>
<td><%= attributes["a_desc"] %></td>
</tr>
END:attributes
<% end # values["attributes"] %>
</table>
ENDIF:attributes
<% end %>
<% end # values["sections"] %>
<% end %>
IF:classlist
<% if values["classlist"] then %>
<table cellpadding="5" width="100%">
<tr><td class="tablesubtitle">Modules</td></tr>
</table><br />
%classlist%<br />
ENDIF:classlist
<%= values["classlist"] %><br />
<% end %>
!INCLUDE! <!-- method descriptions -->
<%= template_include %> <!-- method descriptions -->
</body>
</html>
@ -198,19 +206,19 @@ FILE_PAGE = <<_FILE_PAGE_
<table width="100%">
<tr class="title-row">
<td><table width="100%"><tr>
<td class="big-title-font" colspan="2"><font size="-3"><b>File</b><br /></font>%short_name%</td>
<td class="big-title-font" colspan="2"><font size="-3"><b>File</b><br /></font><%= values["short_name"] %></td>
<td align="right"><table cellspacing="0" cellpadding="2">
<tr>
<td class="small-title-font">Path:</td>
<td class="small-title-font">%full_path%
IF:cvsurl
&nbsp;(<a href="%cvsurl%"><acronym title="Concurrent Versioning System">CVS</acronym></a>)
ENDIF:cvsurl
<td class="small-title-font"><%= values["full_path"] %>
<% if values["cvsurl"] then %>
&nbsp;(<a href="<%= values["cvsurl"] %>"><acronym title="Concurrent Versioning System">CVS</acronym></a>)
<% end %>
</td>
</tr>
<tr>
<td class="small-title-font">Modified:</td>
<td class="small-title-font">%dtm_modified%</td>
<td class="small-title-font"><%= values["dtm_modified"] %></td>
</tr>
</table>
</td></tr></table></td>
@ -224,35 +232,35 @@ CLASS_PAGE = %{
<table width="100%" border="0" cellspacing="0">
<tr class="title-row">
<td class="big-title-font">
<font size="-3"><b>%classmod%</b><br /></font>%full_name%
<font size="-3"><b><%= values["classmod"] %></b><br /></font><%= values["full_name"] %>
</td>
<td align="right">
<table cellspacing="0" cellpadding="2">
<tr valign="top">
<td class="small-title-font">In:</td>
<td class="small-title-font">
START:infiles
HREF:full_path_url:full_path:
IF:cvsurl
&nbsp;(<a href="%cvsurl%"><acronym title="Concurrent Versioning System">CVS</acronym></a>)
ENDIF:cvsurl
END:infiles
<% values["infiles"].each do |infiles| %>
<%= href infiles["full_path_url"], infiles["full_path"] %>
<% if infiles["cvsurl"] then %>
&nbsp;(<a href="<%= infiles["cvsurl"] %>"><acronym title="Concurrent Versioning System">CVS</acronym></a>)
<% end %>
<% end # values["infiles"] %>
</td>
</tr>
IF:parent
<% if values["parent"] then %>
<tr>
<td class="small-title-font">Parent:</td>
<td class="small-title-font">
IF:par_url
<a href="%par_url%" class="cyan">
ENDIF:par_url
%parent%
IF:par_url
<% if values["par_url"] then %>
<a href="<%= values["par_url"] %>" class="cyan">
<% end %>
<%= values["parent"] %>
<% if values["par_url"] then %>
</a>
ENDIF:par_url
<% end %>
</td>
</tr>
ENDIF:parent
<% end %>
</table>
</td>
</tr>
@ -262,40 +270,44 @@ ENDIF:parent
###################################################################
METHOD_LIST = %{
IF:includes
<% if values["includes"] then %>
<div class="tablesubsubtitle">Uses</div><br />
<div class="name-list">
START:includes
<span class="method-name">HREF:aref:name:</span>
END:includes
<% values["includes"].each do |includes| %>
<span class="method-name"><%= href includes["aref"], includes["name"] %></span>
<% end # values["includes"] %>
</div>
ENDIF:includes
<% end %>
IF:method_list
START:method_list
IF:methods
<% if values["sections"] then %>
<% values["sections"].each do |sections| %>
<% if sections["method_list"] then %>
<% sections["method_list"].each do |method_list| %>
<% if method_list["methods"] then %>
<table cellpadding="5" width="100%">
<tr><td class="tablesubtitle">%type% %category% methods</td></tr>
<tr><td class="tablesubtitle"><%= method_list["type"] %> <%= method_list["category"] %> methods</td></tr>
</table>
START:methods
<% method_list["methods"].each do |methods| %>
<table width="100%" cellspacing="0" cellpadding="5" border="0">
<tr><td class="methodtitle">
<a name="%aref%">
<b>%name%</b>%params%
IF:codeurl
<a href="%codeurl%" target="source" class="srclink">src</a>
ENDIF:codeurl
<a name="<%= methods["aref"] %>">
<b><%= methods["name"] %></b><%= methods["params"] %>
<% if methods["codeurl"] then %>
<a href="<%= methods["codeurl"] %>" target="source" class="srclink">src</a>
<% end %>
</a></td></tr>
</table>
IF:m_desc
<% if method_list["m_desc"] then %>
<div class="description">
%m_desc%
<%= method_list["m_desc"] %>
</div>
ENDIF:m_desc
END:methods
ENDIF:methods
END:method_list
ENDIF:method_list
<% end %>
<% end # method_list["methods"] %>
<% end %>
<% end # sections["method_list"] %>
<% end %>
<% end # values["sections"] %>
<% end %>
}
=begin
@ -305,8 +317,8 @@ ENDIF:method_list
SRC_PAGE = %{
<html>
<head><title>%title%</title>
<meta http-equiv="Content-Type" content="text/html; charset=%charset%">
<head><title><%= values["title"] %></title>
<meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>">
<style type="text/css">
.kw { color: #3333FF; font-weight: bold }
.cmt { color: green; font-style: italic }
@ -324,7 +336,7 @@ SRC_PAGE = %{
</style>
</head>
<body bgcolor="#BBBBBB">
<pre>%code%</pre>
<pre><%= values["code"] %></pre>
</body>
</html>
}
@ -332,13 +344,13 @@ SRC_PAGE = %{
########################## Index ################################
FR_INDEX_BODY = %{
!INCLUDE!
<%= template_include %>
}
FILE_INDEX = %{
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=%charset%">
<meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>">
<style type="text/css">
<!--
body {
@ -360,16 +372,16 @@ div.banner {
text-align: center;
width: 100%;
}
-->
</style>
<base target="docwin">
</head>
<body>
<div class="banner">%list_title%</div>
START:entries
<a href="%href%">%name%</a><br />
END:entries
<div class="banner"><%= values["list_title"] %></div>
<% values["entries"].each do |entries| %>
<a href="<%= entries["href"] %>"><%= entries["name"] %></a><br />
<% end # values["entries"] %>
</body></html>
}
@ -379,8 +391,8 @@ METHOD_INDEX = FILE_INDEX
INDEX = %{
<html>
<head>
<title>%title%</title>
<meta http-equiv="Content-Type" content="text/html; charset=%charset%">
<title><%= values["title"] %></title>
<meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>">
</head>
<frameset cols="20%,*">
@ -390,7 +402,7 @@ INDEX = %{
<frame src="fr_method_index.html" name="Subroutines and Functions">
</frameset>
<frameset rows="80%,20%">
<frame src="%initial_page%" name="docwin">
<frame src="<%= values["initial_page"] %>" name="docwin">
<frame src="blank.html" name="source">
</frameset>
<noframes>

View File

@ -24,7 +24,7 @@ module RDoc
FONTS = "Verdana,Arial,Helvetica,sans-serif"
STYLE = %{
STYLE = <<-EOF
body {
font-family: Verdana,Arial,Helvetica,sans-serif;
font-size: 90%;
@ -232,26 +232,26 @@ div.method-source-code pre { color: #ffdead; overflow: hidden; }
.ruby-comment { color: #b22222; font-weight: bold; background: transparent; }
.ruby-regexp { color: #ffa07a; background: transparent; }
.ruby-value { color: #7fffd4; background: transparent; }
}
EOF
#####################################################################
### 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%"?>
<!DOCTYPE html
XHTML_PREAMBLE = %{<?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">
}
HEADER = XHTML_PREAMBLE + %{
HEADER = XHTML_PREAMBLE + <<-EOF
<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><%= 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="%style_url%" type="text/css" media="screen" />
<link rel="stylesheet" href="<%= values["style_url"] %>" type="text/css" media="screen" />
<script type="text/javascript">
// <![CDATA[
@ -268,7 +268,7 @@ HEADER = XHTML_PREAMBLE + %{
return false;
elemStyle = elem.style;
if ( elemStyle.display != "block" ) {
elemStyle.display = "block"
} else {
@ -277,16 +277,16 @@ HEADER = XHTML_PREAMBLE + %{
return true;
}
// Make codeblocks hidden by default
document.writeln( "<style type=\\"text/css\\">div.method-source-code { display: none }</style>" )
// ]]>
</script>
</head>
<body>
}
EOF
#####################################################################
@ -300,308 +300,308 @@ CONTEXT_CONTENT = %{
#####################################################################
### F O O T E R T E M P L A T E
#####################################################################
FOOTER = %{
FOOTER = <<-EOF
<div id="validator-badges">
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
</div>
</body>
</html>
}
EOF
#####################################################################
### F I L E P A G E H E A D E R T E M P L A T E
#####################################################################
FILE_PAGE = %{
FILE_PAGE = <<-EOF
<div id="fileHeader">
<h1>%short_name%</h1>
<h1><%= values["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%"><acronym title="Concurrent Versioning System">CVS</acronym></a>)
ENDIF:cvsurl
<td><%= values["full_path"] %>
<% if values["cvsurl"] then %>
&nbsp;(<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>%dtm_modified%</td>
<td><%= values["dtm_modified"] %></td>
</tr>
</table>
</div>
}
EOF
#####################################################################
### 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 = %{
CLASS_PAGE = <<-EOF
<div id="classHeader">
<table class="header-table">
<tr class="top-aligned-row">
<td><strong>%classmod%</strong></td>
<td class="class-name-in-header">%full_name%</td>
<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>
START:infiles
IF:full_path_url
<a href="%full_path_url%">
ENDIF:full_path_url
%full_path%
IF:full_path_url
<% 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>
ENDIF:full_path_url
IF:cvsurl
&nbsp;(<a href="%cvsurl%"><acronym title="Concurrent Versioning System">CVS</acronym></a>)
ENDIF:cvsurl
<% end %>
<% if infiles["cvsurl"] then %>
&nbsp;(<a href="<%= infiles["cvsurl"] %>"><acronym title="Concurrent Versioning System">CVS</acronym></a>)
<% end %>
<br />
END:infiles
<% end # values["infiles"] %>
</td>
</tr>
IF:parent
<% if values["parent"] then %>
<tr class="top-aligned-row">
<td><strong>Parent:</strong></td>
<td>
IF:par_url
<a href="%par_url%">
ENDIF:par_url
%parent%
IF:par_url
<% if values["par_url"] then %>
<a href="<%= values["par_url"] %>">
<% end %>
<%= values["parent"] %>
<% if values["par_url"] then %>
</a>
ENDIF:par_url
<% end %>
</td>
</tr>
ENDIF:parent
<% end %>
</table>
</div>
}
EOF
#####################################################################
### M E T H O D L I S T T E M P L A T E
#####################################################################
METHOD_LIST = %{
METHOD_LIST = <<-EOF
<div id="contextContent">
IF:diagram
<% if values["diagram"] then %>
<div id="diagram">
%diagram%
<%= values["diagram"] %>
</div>
ENDIF:diagram
<% end %>
IF:description
<% if values["description"] then %>
<div id="description">
%description%
<%= values["description"] %>
</div>
ENDIF:description
<% end %>
IF:requires
<% if values["requires"] then %>
<div id="requires-list">
<h3 class="section-bar">Required files</h3>
<div class="name-list">
START:requires
HREF:aref:name:&nbsp;&nbsp;
END:requires
<% values["requires"].each do |requires| %>
<%= href requires["aref"], requires["name"] %>&nbsp;&nbsp;
<% end # values["requires"] %>
</div>
</div>
ENDIF:requires
<% end %>
IF:toc
<% if values["toc"] then %>
<div id="contents-list">
<h3 class="section-bar">Contents</h3>
<ul>
START:toc
<li><a href="#%href%">%secname%</a></li>
END:toc
<% values["toc"].each do |toc| $stderr.puts({ :toc => toc }.inspect) %>
<li><a href="#<%= values["href"] %>"><%= values["secname"] %></a></li>
<% end # values["toc"] %>
</ul>
ENDIF:toc
<% end %>
</div>
IF:methods
<% if values["methods"] then %>
<div id="method-list">
<h3 class="section-bar">Methods</h3>
<div class="name-list">
START:methods
HREF:aref:name:&nbsp;&nbsp;
END:methods
<% values["methods"].each do |methods| %>
<%= href methods["aref"], methods["name"] %>&nbsp;&nbsp;
<% end # values["methods"] %>
</div>
</div>
ENDIF:methods
<% end %>
</div>
<!-- if includes -->
IF:includes
<% if values["includes"] then %>
<div id="includes">
<h3 class="section-bar">Included Modules</h3>
<div id="includes-list">
START:includes
<span class="include-name">HREF:aref:name:</span>
END:includes
<% values["includes"].each do |includes| %>
<span class="include-name"><%= href includes["aref"], includes["name"] %></span>
<% end # values["includes"] %>
</div>
</div>
ENDIF:includes
<% end %>
START:sections
<% values["sections"].each do |sections| %>
<div id="section">
IF:sectitle
<h2 class="section-title"><a name="%secsequence%">%sectitle%</a></h2>
IF:seccomment
<% if sections["sectitle"] then %>
<h2 class="section-title"><a name="<%= sections["secsequence"] %>"><%= sections["sectitle"] %></a></h2>
<% if sections["seccomment"] then %>
<div class="section-comment">
%seccomment%
</div>
ENDIF:seccomment
ENDIF:sectitle
<%= sections["seccomment"] %>
</div>
<% end %>
<% end %>
IF:classlist
<% if values["classlist"] then %>
<div id="class-list">
<h3 class="section-bar">Classes and Modules</h3>
%classlist%
<%= values["classlist"] %>
</div>
ENDIF:classlist
<% end %>
IF:constants
<% if values["constants"] then %>
<div id="constants-list">
<h3 class="section-bar">Constants</h3>
<div class="name-list">
<table summary="Constants">
START:constants
<% values["constants"].each do |constants| $stderr.puts({ :constants => constants }.inspect) %>
<tr class="top-aligned-row context-row">
<td class="context-item-name">%name%</td>
<td class="context-item-name"><%= values["name"] %></td>
<td>=</td>
<td class="context-item-value">%value%</td>
IF:desc
<td class="context-item-value"><%= values["value"] %></td>
<% if values["desc"] then %>
<td width="3em">&nbsp;</td>
<td class="context-item-desc">%desc%</td>
ENDIF:desc
<td class="context-item-desc"><%= values["desc"] %></td>
<% end %>
</tr>
END:constants
<% end # values["constants"] %>
</table>
</div>
</div>
ENDIF:constants
<% end %>
IF:aliases
<% if values["aliases"] then %>
<div id="aliases-list">
<h3 class="section-bar">External Aliases</h3>
<div class="name-list">
<table summary="aliases">
START:aliases
<% values["aliases"].each do |aliases| $stderr.puts({ :aliases => aliases }.inspect) %>
<tr class="top-aligned-row context-row">
<td class="context-item-name">%old_name%</td>
<td class="context-item-name"><%= values["old_name"] %></td>
<td>-&gt;</td>
<td class="context-item-value">%new_name%</td>
<td class="context-item-value"><%= values["new_name"] %></td>
</tr>
IF:desc
<% if values["desc"] then %>
<tr class="top-aligned-row context-row">
<td>&nbsp;</td>
<td colspan="2" class="context-item-desc">%desc%</td>
<td colspan="2" class="context-item-desc"><%= values["desc"] %></td>
</tr>
ENDIF:desc
END:aliases
</table>
<% end %>
<% end # values["aliases"] %>
</table>
</div>
</div>
ENDIF:aliases
<% end %>
IF:attributes
<% if values["attributes"] then %>
<div id="attribute-list">
<h3 class="section-bar">Attributes</h3>
<div class="name-list">
<table>
START:attributes
<% values["attributes"].each do |attributes| $stderr.puts({ :attributes => attributes }.inspect) %>
<tr class="top-aligned-row context-row">
<td class="context-item-name">%name%</td>
IF:rw
<td class="context-item-value">&nbsp;[%rw%]&nbsp;</td>
ENDIF:rw
IFNOT:rw
<td class="context-item-name"><%= values["name"] %></td>
<% if values["rw"] then %>
<td class="context-item-value">&nbsp;[<%= values["rw"] %>]&nbsp;</td>
<% end %>
<% unless values["rw"] then %>
<td class="context-item-value">&nbsp;&nbsp;</td>
ENDIF:rw
<td class="context-item-desc">%a_desc%</td>
<% end %>
<td class="context-item-desc"><%= values["a_desc"] %></td>
</tr>
END:attributes
<% end # values["attributes"] %>
</table>
</div>
</div>
ENDIF:attributes
<% end %>
<!-- if method_list -->
IF:method_list
<% if sections["method_list"] then %>
<div id="methods">
START:method_list
IF:methods
<h3 class="section-bar">%type% %category% methods</h3>
<% sections["method_list"].each do |method_list| %>
<% if method_list["methods"] then %>
<h3 class="section-bar"><%= method_list["type"] %> <%= method_list["category"] %> methods</h3>
START:methods
<div id="method-%aref%" class="method-detail">
<a name="%aref%"></a>
<% method_list["methods"].each do |methods| %>
<div id="method-<%= methods["aref"] %>" class="method-detail">
<a name="<%= methods["aref"] %>"></a>
<div class="method-heading">
IF:codeurl
<a href="%codeurl%" target="Code" class="method-signature"
onclick="popupCode('%codeurl%');return false;">
ENDIF:codeurl
IF:sourcecode
<a href="#%aref%" class="method-signature">
ENDIF:sourcecode
IF:callseq
<span class="method-name">%callseq%</span>
ENDIF:callseq
IFNOT:callseq
<span class="method-name">%name%</span><span class="method-args">%params%</span>
ENDIF:callseq
IF:codeurl
<% 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>
ENDIF:codeurl
IF:sourcecode
<% end %>
<% if methods["sourcecode"] then %>
</a>
ENDIF:sourcecode
<% end %>
</div>
<div class="method-description">
IF:m_desc
%m_desc%
ENDIF:m_desc
IF:sourcecode
<% if methods["m_desc"] then %>
<%= methods["m_desc"] %>
<% end %>
<% if methods["sourcecode"] then %>
<p><a class="source-toggle" href="#"
onclick="toggleCode('%aref%-source');return false;">[Source]</a></p>
<div class="method-source-code" id="%aref%-source">
onclick="toggleCode('<%= methods["aref"] %>-source');return false;">[Source]</a></p>
<div class="method-source-code" id="<%= methods["aref"] %>-source">
<pre>
%sourcecode%
<%= methods["sourcecode"] %>
</pre>
</div>
ENDIF:sourcecode
<% end %>
</div>
</div>
END:methods
ENDIF:methods
END:method_list
<% end # method_list["methods"] %>
<% end %>
<% end # sections["method_list"] %>
</div>
ENDIF:method_list
END:sections
}
<% end %>
<% end # values["sections"] %>
EOF
#####################################################################
@ -610,7 +610,7 @@ END:sections
BODY = HEADER + %{
!INCLUDE! <!-- banner header -->
<%= template_include %> <!-- banner header -->
<div id="bodyContent">
@ -626,18 +626,18 @@ BODY = HEADER + %{
### S O U R C E C O D E T E M P L A T E
#####################################################################
SRC_PAGE = XHTML_PREAMBLE + %{
SRC_PAGE = XHTML_PREAMBLE + <<-EOF
<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><%= 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>%code%</pre>
<pre><%= values["code"] %></pre>
</body>
</html>
}
EOF
#####################################################################
@ -645,29 +645,29 @@ SRC_PAGE = XHTML_PREAMBLE + %{
#####################################################################
FR_INDEX_BODY = %{
!INCLUDE!
<%= template_include %>
}
FILE_INDEX = XHTML_PREAMBLE + %{
<!--
%list_title%
<%= values["list_title"] %>
-->
<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" />
<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 id="index">
<h1 class="section-bar">%list_title%</h1>
<h1 class="section-bar"><%= values["list_title"] %></h1>
<div id="index-entries">
START:entries
<a href="%href%">%name%</a><br />
END:entries
<% values["entries"].each do |entries| %>
<a href="<%= entries["href"] %>"><%= entries["name"] %></a><br />
<% end # values["entries"] %>
</div>
</div>
</body>
@ -677,20 +677,20 @@ END:entries
CLASS_INDEX = FILE_INDEX
METHOD_INDEX = FILE_INDEX
INDEX = %{<?xml version="1.0" encoding="%charset%"?>
<!DOCTYPE html
INDEX = %{<?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">
<!--
%title%
<%= values["title"] %>
-->
<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><%= values["title"] %></title>
<meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>" />
</head>
<frameset rows="20%, 80%">
<frameset cols="25%,35%,45%">
@ -698,7 +698,7 @@ INDEX = %{<?xml version="1.0" encoding="%charset%"?>
<frame src="fr_class_index.html" name="Classes" />
<frame src="fr_method_index.html" name="Methods" />
</frameset>
<frame src="%initial_page%" name="docwin" />
<frame src="<%= values["initial_page"] %>" name="docwin" />
</frameset>
</html>
}

View File

@ -5,7 +5,7 @@ module Page
FONTS = "Verdana, Arial, Helvetica, sans-serif"
STYLE = %{
body,td,p { font-family: %fonts%;
body,td,p { font-family: <%= values["fonts"] %>;
color: #000040;
}
@ -18,20 +18,20 @@ body,td,p { font-family: %fonts%;
.big-title-font {
color: black;
font-weight: bold;
font-family: %fonts%;
font-family: <%= values["fonts"] %>;
font-size: large;
height: 60px;
padding: 10px 3px 10px 3px;
}
.small-title-font { color: black;
font-family: %fonts%;
font-family: <%= values["fonts"] %>;
font-size:10; }
.aqua { color: black }
.method-name, .attr-name {
font-family: font-family: %fonts%;
font-family: font-family: <%= values["fonts"] %>;
font-weight: bold;
font-size: small;
margin-left: 20px;
@ -92,9 +92,9 @@ body,td,p { font-family: %fonts%;
BODY = %{
<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><%= 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" />
<script type="text/javascript" language="JavaScript">
<!--
function popCode(url) {
@ -105,82 +105,82 @@ BODY = %{
</head>
<body bgcolor="white">
!INCLUDE! <!-- banner header -->
<%= template_include %> <!-- banner header -->
IF:diagram
<% if values["diagram"] then %>
<table width="100%"><tr><td align="center">
%diagram%
<%= values["diagram"] %>
</td></tr></table>
ENDIF:diagram
<% end %>
IF:description
<div class="description">%description%</div>
ENDIF:description
<% if values["description"] then %>
<div class="description"><%= values["description"] %></div>
<% end %>
IF:requires
<% if values["requires"] then %>
<table cellpadding="5" width="100%">
<tr><td class="tablesubtitle">Required files</td></tr>
</table><br />
<div class="name-list">
START:requires
HREF:aref:name:
END:requires
ENDIF:requires
<% values["requires"].each do |requires| %>
<%= href requires["aref"], requires["name"] %>
<% end # values["requires"] %>
<% end %>
</div>
IF:methods
<% if values["methods"] then %>
<table cellpadding="5" width="100%">
<tr><td class="tablesubtitle">Methods</td></tr>
</table><br />
<div class="name-list">
START:methods
HREF:aref:name:,
END:methods
<% values["methods"].each do |methods| %>
<%= href methods["aref"], methods["name"] %>,
<% end # values["methods"] %>
</div>
ENDIF:methods
<% end %>
START:sections
<% values["sections"].each do |sections| %>
<div id="section">
IF:sectitle
<h2 class="section-title"><a name="%secsequence%">%sectitle%</a></h2>
IF:seccomment
<% if sections["sectitle"] then %>
<h2 class="section-title"><a name="<%= sections["secsequence"] %>"><%= sections["sectitle"] %></a></h2>
<% if sections["seccomment"] then %>
<div class="section-comment">
%seccomment%
</div>
ENDIF:seccomment
ENDIF:sectitle
<%= sections["seccomment"] %>
</div>
<% end %>
<% end %>
IF:attributes
<% if sections["attributes"] then %>
<table cellpadding="5" width="100%">
<tr><td class="tablesubtitle">Attributes</td></tr>
</table><br />
<table cellspacing="5">
START:attributes
<% sections["attributes"].each do |attributes| %>
<tr valign="top">
IF:rw
<td align="center" class="attr-rw">&nbsp;[%rw%]&nbsp;</td>
ENDIF:rw
IFNOT:rw
<% if attributes["rw"] then %>
<td align="center" class="attr-rw">&nbsp;[<%= attributes["rw"] %>]&nbsp;</td>
<% end %>
<% unless attributes["rw"] then %>
<td></td>
ENDIF:rw
<td class="attr-name">%name%</td>
<td>%a_desc%</td>
<% end %>
<td class="attr-name"><%= attributes["name"] %></td>
<td><%= attributes["a_desc"] %></td>
</tr>
END:attributes
<% end # sections["attributes"] %>
</table>
ENDIF:attributes
<% end %>
IF:classlist
<% if sections["classlist"] then %>
<table cellpadding="5" width="100%">
<tr><td class="tablesubtitle">Classes and Modules</td></tr>
</table><br />
%classlist%<br />
ENDIF:classlist
<%= sections["classlist"] %><br />
<% end %>
!INCLUDE! <!-- method descriptions -->
<%= template_include %> <!-- method descriptions -->
END:sections
<% end # values["sections"] %>
</body>
</html>
@ -192,19 +192,19 @@ FILE_PAGE = <<_FILE_PAGE_
<table width="100%">
<tr class="title-row">
<td><table width="100%"><tr>
<td class="big-title-font" colspan="2"><font size="-3"><b>File</b><br /></font>%short_name%</td>
<td class="big-title-font" colspan="2"><font size="-3"><b>File</b><br /></font><%= values["short_name"] %></td>
<td align="right"><table cellspacing="0" cellpadding="2">
<tr>
<td class="small-title-font">Path:</td>
<td class="small-title-font">%full_path%
IF:cvsurl
&nbsp;(<a href="%cvsurl%"><acronym title="Concurrent Versioning System">CVS</acronym></a>)
ENDIF:cvsurl
<td class="small-title-font"><%= values["full_path"] %>
<% if values["cvsurl"] then %>
&nbsp;(<a href="<%= values["cvsurl"] %>"><acronym title="Concurrent Versioning System">CVS</acronym></a>)
<% end %>
</td>
</tr>
<tr>
<td class="small-title-font">Modified:</td>
<td class="small-title-font">%dtm_modified%</td>
<td class="small-title-font"><%= values["dtm_modified"] %></td>
</tr>
</table>
</td></tr></table></td>
@ -218,35 +218,35 @@ CLASS_PAGE = %{
<table width="100%" border="0" cellspacing="0">
<tr class="title-row">
<td class="big-title-font">
<font size="-3"><b>%classmod%</b><br /></font>%full_name%
<font size="-3"><b><%= values["classmod"] %></b><br /></font><%= values["full_name"] %>
</td>
<td align="right">
<table cellspacing="0" cellpadding="2">
<tr valign="top">
<td class="small-title-font">In:</td>
<td class="small-title-font">
START:infiles
HREF:full_path_url:full_path:
IF:cvsurl
&nbsp;(<a href="%cvsurl%"><acronym title="Concurrent Versioning System">CVS</acronym></a>)
ENDIF:cvsurl
END:infiles
<% values["infiles"].each do |infiles| %>
<%= href infiles["full_path_url"], infiles["full_path"] %>
<% if infiles["cvsurl"] then %>
&nbsp;(<a href="<%= infiles["cvsurl"] %>"><acronym title="Concurrent Versioning System">CVS</acronym></a>)
<% end %>
<% end # values["infiles"] %>
</td>
</tr>
IF:parent
<% if values["parent"] then %>
<tr>
<td class="small-title-font">Parent:</td>
<td class="small-title-font">
IF:par_url
<a href="%par_url%" class="cyan">
ENDIF:par_url
%parent%
IF:par_url
<% if values["par_url"] then %>
<a href="<%= values["par_url"] %>" class="cyan">
<% end %>
<%= values["parent"] %>
<% if values["par_url"] then %>
</a>
ENDIF:par_url
<% end %>
</td>
</tr>
ENDIF:parent
<% end %>
</table>
</td>
</tr>
@ -256,58 +256,58 @@ ENDIF:parent
###################################################################
METHOD_LIST = %{
IF:includes
<% if values["includes"] then %>
<div class="tablesubsubtitle">Included modules</div><br />
<div class="name-list">
START:includes
<span class="method-name">HREF:aref:name:</span>
END:includes
<% values["includes"].each do |includes| %>
<span class="method-name"><%= href includes["aref"], includes["name"] %></span>
<% end # values["includes"] %>
</div>
ENDIF:includes
<% end %>
IF:method_list
START:method_list
IF:methods
<% if values["method_list"] then %>
<% values["method_list"].each do |method_list| $stderr.puts({ :method_list => method_list }.inspect) %>
<% if values["methods"] then %>
<table cellpadding=5 width="100%">
<tr><td class="tablesubtitle">%type% %category% methods</td></tr>
<tr><td class="tablesubtitle"><%= values["type"] %> <%= values["category"] %> methods</td></tr>
</table>
START:methods
<% values["methods"].each do |methods| $stderr.puts({ :methods => methods }.inspect) %>
<table width="100%" cellspacing="0" cellpadding="5" border="0">
<tr><td class="methodtitle">
<a name="%aref%">
IF:callseq
<b>%callseq%</b>
ENDIF:callseq
IFNOT:callseq
<b>%name%</b>%params%
ENDIF:callseq
IF:codeurl
<a href="%codeurl%" target="source" class="srclink">src</a>
ENDIF:codeurl
<a name="<%= values["aref"] %>">
<% if values["callseq"] then %>
<b><%= values["callseq"] %></b>
<% end %>
<% unless values["callseq"] then %>
<b><%= values["name"] %></b><%= values["params"] %>
<% end %>
<% if values["codeurl"] then %>
<a href="<%= values["codeurl"] %>" target="source" class="srclink">src</a>
<% end %>
</a></td></tr>
</table>
IF:m_desc
<% if values["m_desc"] then %>
<div class="description">
%m_desc%
<%= values["m_desc"] %>
</div>
ENDIF:m_desc
IF:aka
<% end %>
<% if values["aka"] then %>
<div class="aka">
This method is also aliased as
START:aka
<a href="%aref%">%name%</a>
END:aka
<% values["aka"].each do |aka| $stderr.puts({ :aka => aka }.inspect) %>
<a href="<%= values["aref"] %>"><%= values["name"] %></a>
<% end # values["aka"] %>
</div>
ENDIF:aka
IF:sourcecode
<% end %>
<% if values["sourcecode"] then %>
<pre class="source">
%sourcecode%
<%= values["sourcecode"] %>
</pre>
ENDIF:sourcecode
END:methods
ENDIF:methods
END:method_list
ENDIF:method_list
<% end %>
<% end # values["methods"] %>
<% end %>
<% end # values["method_list"] %>
<% end %>
}
=begin
@ -317,8 +317,8 @@ ENDIF:method_list
SRC_PAGE = %{
<html>
<head><title>%title%</title>
<meta http-equiv="Content-Type" content="text/html; charset=%charset%">
<head><title><%= values["title"] %></title>
<meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>">
<style type="text/css">
.ruby-comment { color: green; font-style: italic }
.ruby-constant { color: #4433aa; font-weight: bold; }
@ -336,7 +336,7 @@ SRC_PAGE = %{
</style>
</head>
<body bgcolor="white">
<pre>%code%</pre>
<pre><%= values["code"] %></pre>
</body>
</html>
}
@ -344,13 +344,13 @@ SRC_PAGE = %{
########################## Index ################################
FR_INDEX_BODY = %{
!INCLUDE!
<%= template_include %>
}
FILE_INDEX = %{
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=%charset%">
<meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>">
<style>
<!--
body {
@ -378,10 +378,10 @@ div.banner {
<base target="docwin">
</head>
<body>
<div class="banner">%list_title%</div>
START:entries
<a href="%href%">%name%</a><br />
END:entries
<div class="banner"><%= values["list_title"] %></div>
<% values["entries"].each do |entries| %>
<a href="<%= entries["href"] %>"><%= entries["name"] %></a><br />
<% end # values["entries"] %>
</body></html>
}
@ -391,8 +391,8 @@ METHOD_INDEX = FILE_INDEX
INDEX = %{
<html>
<head>
<title>%title%</title>
<meta http-equiv="Content-Type" content="text/html; charset=%charset%">
<title><%= values["title"] %></title>
<meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>">
</head>
<frameset cols="20%,*">
@ -401,15 +401,15 @@ INDEX = %{
<frame src="fr_class_index.html" name="Classes">
<frame src="fr_method_index.html" name="Methods">
</frameset>
IF:inline_source
<frame src="%initial_page%" name="docwin">
ENDIF:inline_source
IFNOT:inline_source
<% if values["inline_source"] then %>
<frame src="<%= values["initial_page"] %>" name="docwin">
<% end %>
<% unless values["inline_source"] then %>
<frameset rows="80%,20%">
<frame src="%initial_page%" name="docwin">
<frame src="<%= values["initial_page"] %>" name="docwin">
<frame src="blank.html" name="source">
</frameset>
ENDIF:inline_source
<% end %>
<noframes>
<body bgcolor="white">
Click <a href="html/index.html">here</a> for a non-frames

View File

@ -1,728 +0,0 @@
module RDoc
# This is how you define the HTML that RDoc generates. Simply create
# a file in rdoc/generators/html_templates that creates the
# module RDoc::Page and populate it as described below. Then invoke
# rdoc using the --template <name of your file> option, and
# your template will be used.
#
# The constants defining pages use a simple templating system:
#
# * The templating system is passed a hash. Keys in the hash correspond
# to tags on this page. The tag %abc% is looked up in the hash,
# and is replaced by the corresponding hash value.
#
# * Some tags are optional. You can detect this using IF/ENDIF
#
# IF: title
# The value of title is %title%
# ENDIF: title
#
# * Some entries in the hash have values that are arrays, where each
# entry in the array is itself a hash. These are used to generate
# lists using the START: construct. For example, given a hash
# containing
#
# { 'people' => [ { 'name' => 'Fred', 'age' => '12' },
# { 'name' => 'Mary', 'age' => '21' } ]
#
# You could generate a simple table using
#
# <table>
# START:people
# <tr><td>%name%<td>%age%</tr>
# END:people
# </table>
#
# These lists can be nested to an arbitrary depth
#
# * the construct HREF:url:name: generates <a href="%url%">%name%</a>
# if +url+ is defined in the hash, or %name% otherwise.
#
#
# Your file must contain the following constants
#
# [*FONTS*] a list of fonts to be used
# [*STYLE*] a CSS section (without the <style> or comments). This is
# used to generate a style.css file
#
# [*BODY*]
# The main body of all non-index RDoc pages. BODY will contain
# two !INCLUDE!s. The first is used to include a document-type
# specific header (FILE_PAGE or CLASS_PAGE). The second include
# is for the method list (METHOD_LIST). THe body is passed:
#
# %title%::
# the page's title
#
# %style_url%::
# the url of a style sheet for this page
#
# %diagram%::
# the optional URL of a diagram for this page
#
# %description%::
# a (potentially multi-paragraph) string containing the
# description for th file/class/module.
#
# %requires%::
# an optional list of %aref%/%name% pairs, one for each module
# required by this file.
#
# %methods%::
# an optional list of %aref%/%name%, one for each method
# documented on this page. This is intended to be an index.
#
# %attributes%::
# An optional list. For each attribute it contains:
# %name%:: the attribute name
# %rw%:: r/o, w/o, or r/w
# %a_desc%:: description of the attribute
#
# %classlist%::
# An optional string containing an already-formatted list of
# classes and modules documented in this file
#
# For FILE_PAGE entries, the body will be passed
#
# %short_name%::
# The name of the file
#
# %full_path%::
# The full path to the file
#
# %dtm_modified%::
# The date/time the file was last changed
#
# For class and module pages, the body will be passed
#
# %classmod%::
# The name of the class or module
#
# %files%::
# A list. For each file this class is defined in, it contains:
# %full_path_url%:: an (optional) URL of the RDoc page
# for this file
# %full_path%:: the name of the file
#
# %par_url%::
# The (optional) URL of the RDoc page documenting this class's
# parent class
#
# %parent%::
# The name of this class's parent.
#
# For both files and classes, the body is passed the following information
# on includes and methods:
#
# %includes%::
# Optional list of included modules. For each, it receives
# %aref%:: optional URL to RDoc page for the module
# %name%:: the name of the module
#
# %method_list%::
# Optional list of methods of a particular class and category.
#
# Each method list entry contains:
#
# %type%:: public/private/protected
# %category%:: instance/class
# %methods%:: a list of method descriptions
#
# Each method description contains:
#
# %aref%:: a target aref, used when referencing this method
# description. You should code this as <a name="%aref%">
# %codeurl%:: the optional URL to the page containing this method's
# source code.
# %name%:: the method's name
# %params%:: the method's parameters
# %callseq%:: a full calling sequence
# %m_desc%:: the (potentially multi-paragraph) description of
# this method.
#
# [*CLASS_PAGE*]
# Header for pages documenting classes and modules. See
# BODY above for the available parameters.
#
# [*FILE_PAGE*]
# Header for pages documenting files. See
# BODY above for the available parameters.
#
# [*METHOD_LIST*]
# Controls the display of the listing of methods. See BODY for
# parameters.
#
# [*INDEX*]
# The top-level index page. For a browser-like environment
# define a frame set that includes the file, class, and
# method indices. Passed
# %title%:: title of page
# %initial_page% :: url of initial page to display
#
# [*CLASS_INDEX*]
# Individual files for the three indexes. Passed:
# %index_url%:: URL of main index page
# %entries%:: List of
# %name%:: name of an index entry
# %href%:: url of corresponding page
# [*METHOD_INDEX*]
# Same as CLASS_INDEX for methods
#
# [*FILE_INDEX*]
# Same as CLASS_INDEX for methods
#
# [*FR_INDEX_BODY*]
# A wrapper around CLASS_INDEX, METHOD_INDEX, and FILE_INDEX.
# If those index strings contain the complete HTML for the
# output, then FR_INDEX_BODY can simply be !INCLUDE!
#
# [*SRC_PAGE*]
# Page used to display source code. Passed %title% and %code%,
# the latter being a multi-line string of code.
module Page
FONTS = "Verdana, Arial, Helvetica, sans-serif"
STYLE = %{
body,td,p { font-family: %fonts%;
color: #000040;
}
.attr-rw { font-size: x-small; color: #444488 }
.title-row { background: #0000aa;
color: #eeeeff;
}
.big-title-font { color: white;
font-family: %fonts%;
font-size: large;
height: 50px}
.small-title-font { color: aqua;
font-family: %fonts%;
font-size: xx-small; }
.aqua { color: aqua }
.method-name, attr-name {
font-family: monospace; font-weight: bold;
}
.tablesubtitle, .tablesubsubtitle {
width: 100%;
margin-top: 1ex;
margin-bottom: .5ex;
padding: 5px 0px 5px 20px;
font-size: large;
color: aqua;
background: #3333cc;
}
.name-list {
font-family: monospace;
margin-left: 40px;
margin-bottom: 2ex;
line-height: 140%;
}
.description {
margin-left: 40px;
margin-top: -2ex;
margin-bottom: 2ex;
}
.description p {
line-height: 140%;
}
.aka {
margin-left: 40px;
margin-bottom: 2ex;
line-height: 100%;
font-size: small;
color: #808080;
}
.methodtitle {
font-size: medium;
text-decoration: none;
color: #0000AA;
background: white;
}
.paramsig {
font-size: small;
}
.srcbut { float: right }
pre { font-size: 1.2em; }
tt { font-size: 1.2em; }
pre.source {
border-style: groove;
background-color: #ddddff;
margin-left: 40px;
padding: 1em 0em 1em 2em;
}
.classlist {
margin-left: 40px;
margin-bottom: 2ex;
line-height: 140%;
}
li {
display: list-item;
margin-top: .6em;
}
.ruby-comment { color: green; font-style: italic }
.ruby-constant { color: #4433aa; font-weight: bold; }
.ruby-identifier { color: #222222; }
.ruby-ivar { color: #2233dd; }
.ruby-keyword { color: #3333FF; font-weight: bold }
.ruby-node { color: #777777; }
.ruby-operator { color: #111111; }
.ruby-regexp { color: #662222; }
.ruby-value { color: #662222; font-style: italic }
}
############################################################################
HEADER = %{
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<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%" />
<link rel=StyleSheet href="%style_url%" type="text/css" media="screen" />
<script type="text/javascript" language="JavaScript">
<!--
function popCode(url) {
window.open(url, "Code",
"resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
}
//-->
</script>
</head>
}
###################################################################
METHOD_LIST = %{
IF:includes
<table summary="Included modules" cellpadding="5" width="100%">
<tr><td class="tablesubtitle">Included modules</td></tr>
</table>
<div class="name-list">
START:includes
<span class="method-name">HREF:aref:name:</span>
END:includes
</div>
ENDIF:includes
IF:method_list
START:method_list
IF:methods
<table summary="Method list" cellpadding="5" width="100%">
<tr><td class="tablesubtitle">%type% %category% methods</td></tr>
</table>
START:methods
<table summary="method" width="100%" cellspacing="0" cellpadding="5" border="0">
<tr><td class="methodtitle">
<a name="%aref%"></a>
IF:codeurl
<a href="%codeurl%" target="Code" class="methodtitle"
onClick="popCode('%codeurl%');return false;">
ENDIF:codeurl
IF:callseq
<b>%callseq%</b>
ENDIF:callseq
IFNOT:callseq
<b>%name%</b>%params%
ENDIF:callseq
IF:codeurl
</a>
ENDIF:codeurl
</td></tr>
</table>
IF:m_desc
<div class="description">
%m_desc%
</div>
ENDIF:m_desc
IF:aka
<div class="aka">
This method is also aliased as
START:aka
<a href="%aref%">%name%</a>
END:aka
</div>
ENDIF:aka
IF:sourcecode
<pre class="source">
%sourcecode%
</pre>
ENDIF:sourcecode
END:methods
ENDIF:methods
END:method_list
ENDIF:method_list
}
###################################################################
CONTEXT_CONTENT = %{
IF:diagram
<table summary="Diagram of classes and modules" width="100%">
<tr><td align="center">
%diagram%
</td></tr></table>
ENDIF:diagram
IF:description
<div class="description">%description%</div>
ENDIF:description
IF:requires
<table summary="Requires" cellpadding="5" width="100%">
<tr><td class="tablesubtitle">Required files</td></tr>
</table>
<div class="name-list">
START:requires
HREF:aref:name:&nbsp; &nbsp;
END:requires
</div>
ENDIF:requires
IF:methods
<table summary="Methods" cellpadding="5" width="100%">
<tr><td class="tablesubtitle">Methods</td></tr>
</table>
<div class="name-list">
START:methods
HREF:aref:name:&nbsp; &nbsp;
END:methods
</div>
ENDIF:methods
IF:constants
<table summary="Constants" cellpadding="5" width="100%">
<tr><td class="tablesubtitle">Constants</td></tr>
</table>
<table cellpadding="5">
START:constants
<tr valign="top"><td>%name%</td><td>=</td><td>%value%</td></tr>
IF:desc
<tr><td></td><td></td><td>%desc%</td></tr>
ENDIF:desc
END:constants
</table>
ENDIF:constants
IF:aliases
<table summary="Aliases" cellpadding="5" width="100%">
<tr><td class="tablesubtitle">External Aliases</td></tr>
</table>
<div class="name-list">
START:aliases
%old_name% -> %new_name%<br />
END:aliases
</div>
ENDIF:aliases
IF:attributes
<table summary="Attributes" cellpadding="5" width="100%">
<tr><td class="tablesubtitle">Attributes</td></tr>
</table>
<table summary="Attribute details" cellspacing="5">
START:attributes
<tr valign="top">
<td class="attr-name">%name%</td>
IF:rw
<td align="center" class="attr-rw">&nbsp;[%rw%]&nbsp;</td>
ENDIF:rw
IFNOT:rw
<td></td>
ENDIF:rw
<td>%a_desc%</td>
</tr>
END:attributes
</table>
ENDIF:attributes
IF:classlist
<table summary="List of classes" cellpadding="5" width="100%">
<tr><td class="tablesubtitle">Classes and Modules</td></tr>
</table>
<div class="classlist">
%classlist%
</div>
ENDIF:classlist
}
###############################################################################
BODY = HEADER + %{
<body bgcolor="white">
!INCLUDE! <!-- banner header -->
} +
CONTEXT_CONTENT + METHOD_LIST +
%{
</body>
</html>
}
###############################################################################
FILE_PAGE = <<_FILE_PAGE_
<table summary="Information on file" width="100%">
<tr class="title-row">
<td><table summary="layout" width="100%"><tr>
<td class="big-title-font" colspan="2">%short_name%</td>
<td align="right"><table summary="layout" cellspacing="0" cellpadding="2">
<tr>
<td class="small-title-font">Path:</td>
<td class="small-title-font">%full_path%
IF:cvsurl
&nbsp;(<a href="%cvsurl%"><acronym title="Concurrent Versioning System">CVS</acronym></a>)
ENDIF:cvsurl
</td>
</tr>
<tr>
<td class="small-title-font">Modified:</td>
<td class="small-title-font">%dtm_modified%</td>
</tr>
</table>
</td></tr></table></td>
</tr>
</table>
_FILE_PAGE_
###################################################################
CLASS_PAGE = %{
<table summary="Information on class" width="100%" border="0" cellspacing="0">
<tr class="title-row">
<td class="big-title-font">
<sup><font color="aqua">%classmod%</font></sup> %full_name%
</td>
<td align="right">
<table summary="layout" cellspacing="0" cellpadding="2">
<tr valign="top">
<td class="small-title-font">In:</td>
<td class="small-title-font">
START:infiles
IF:full_path_url
<a href="%full_path_url%" class="aqua">
ENDIF:full_path_url
%full_path%
IF:full_path_url
</a>
ENDIF:full_path_url
IF:cvsurl
&nbsp;(<a href="%cvsurl%"><acronym title="Concurrent Versioning System">CVS</acronym></a>)
ENDIF:cvsurl
<br />
END:infiles
</td>
</tr>
IF:parent
<tr>
<td class="small-title-font">Parent:</td>
<td class="small-title-font">
IF:par_url
<a href="%par_url%" class="aqua">
ENDIF:par_url
%parent%
IF:par_url
</a>
ENDIF:par_url
</td>
</tr>
ENDIF:parent
</table>
</td>
</tr>
</table>
}
=begin
=end
########################## Source code ##########################
SRC_PAGE = %{
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=%charset%">
<title>%title%</title>
<link rel="stylesheet" href="%style_url%" type="text/css" media="screen" />
</head>
<body bgcolor="white">
<pre>%code%</pre>
</body>
</html>
}
########################## Index ################################
FR_INDEX_BODY = %{
!INCLUDE!
}
FILE_INDEX = %{
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=%charset%">
<title>%list_title%</title>
<style type="text/css">
<!--
body {
background-color: #ddddff;
font-family: #{FONTS};
font-size: 11px;
font-style: normal;
line-height: 14px;
color: #000040;
}
div.banner {
background: #0000aa;
color: white;
padding: 1;
margin: 0;
font-size: 90%;
font-weight: bold;
line-height: 1.1;
text-align: center;
width: 100%;
}
A.xx { color: white; font-weight: bold; }
-->
</style>
<base target="docwin">
</head>
<body>
<div class="banner"><a href="%index_url%" class="xx">%list_title%</a></div>
START:entries
<a href="%href%">%name%</a><br />
END:entries
</body></html>
}
CLASS_INDEX = FILE_INDEX
METHOD_INDEX = FILE_INDEX
INDEX = %{
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=%charset%">
<title>%title%</title></head>
<frameset rows="20%, 80%">
<frameset cols="25%,35%,45%">
<frame src="fr_file_index.html" title="Files" name="Files">
<frame src="fr_class_index.html" name="Classes">
<frame src="fr_method_index.html" name="Methods">
</frameset>
<frame src="%initial_page%" name="docwin">
<noframes>
<body bgcolor="white">
Sorry, RDoc currently only generates HTML using frames.
</body>
</noframes>
</frameset>
</html>
}
######################################################################
#
# The following is used for the -1 option
#
CONTENTS_XML = %{
IF:description
%description%
ENDIF:description
IF:requires
<h4>Requires:</h4>
<ul>
START:requires
IF:aref
<li><a href="%aref%">%name%</a></li>
ENDIF:aref
IFNOT:aref
<li>%name%</li>
ENDIF:aref
END:requires
</ul>
ENDIF:requires
IF:attributes
<h4>Attributes</h4>
<table>
START:attributes
<tr><td>%name%</td><td>%rw%</td><td>%a_desc%</td></tr>
END:attributes
</table>
ENDIF:attributes
IF:includes
<h4>Includes</h4>
<ul>
START:includes
IF:aref
<li><a href="%aref%">%name%</a></li>
ENDIF:aref
IFNOT:aref
<li>%name%</li>
ENDIF:aref
END:includes
</ul>
ENDIF:includes
IF:method_list
<h3>Methods</h3>
START:method_list
IF:methods
START:methods
<h4>%type% %category% method: <a name="%aref%">%name%%params%</a></h4>
IF:m_desc
%m_desc%
ENDIF:m_desc
IF:sourcecode
<blockquote><pre>
%sourcecode%
</pre></blockquote>
ENDIF:sourcecode
END:methods
ENDIF:methods
END:method_list
ENDIF:method_list
}
end
end
require 'rdoc/generators/template/html/one_page_html'

View File

@ -1,78 +1,77 @@
module RDoc
module Page
######################################################################
#
# The following is used for the -1 option
#
module RDoc::Page
CONTENTS_XML = %{
IF:description
%description%
ENDIF:description
<% if defined? classes and classes["description"] then %>
<%= classes["description"] %>
<% end %>
IF:requires
<% if defined? files and files["requires"] then %>
<h4>Requires:</h4>
<ul>
START:requires
IF:aref
<li><a href="%aref%">%name%</a></li>
ENDIF:aref
IFNOT:aref
<li>%name%</li>
ENDIF:aref
END:requires
<% files["requires"].each do |requires| %>
<% if requires["aref"] then %>
<li><a href="<%= requires["aref"] %>"><%= requires["name"] %></a></li>
<% end %>
<% unless requires["aref"] then %>
<li><%= requires["name"] %></li>
<% end %>
<% end # files["requires"] %>
</ul>
ENDIF:requires
<% end %>
IF:attributes
<h4>Attributes</h4>
<table>
START:attributes
<tr><td>%name%</td><td>%rw%</td><td>%a_desc%</td></tr>
END:attributes
</table>
ENDIF:attributes
IF:includes
<% if defined? classes and classes["includes"] then %>
<h4>Includes</h4>
<ul>
START:includes
IF:aref
<li><a href="%aref%">%name%</a></li>
ENDIF:aref
IFNOT:aref
<li>%name%</li>
ENDIF:aref
END:includes
<% classes["includes"].each do |includes| %>
<% if includes["aref"] then %>
<li><a href="<%= includes["aref"] %>"><%= includes["name"] %></a></li>
<% end %>
<% unless includes["aref"] then %>
<li><%= includes["name"] %></li>
<% end %>
<% end # classes["includes"] %>
</ul>
ENDIF:includes
<% end %>
IF:method_list
<% if defined? classes and classes["sections"] then %>
<% classes["sections"].each do |sections| %>
<% if sections["attributes"] then %>
<h4>Attributes</h4>
<table>
<% sections["attributes"].each do |attributes| %>
<tr><td><%= attributes["name"] %></td><td><%= attributes["rw"] %></td><td><%= attributes["a_desc"] %></td></tr>
<% end # sections["attributes"] %>
</table>
<% end %>
<% if sections["method_list"] then %>
<h3>Methods</h3>
START:method_list
IF:methods
START:methods
<h4>%type% %category% method:
IF:callseq
<a name="%aref%">%callseq%</a>
ENDIF:callseq
IFNOT:callseq
<a name="%aref%">%name%%params%</a></h4>
ENDIF:callseq
<% sections["method_list"].each do |method_list| %>
<% if method_list["methods"] then %>
<% method_list["methods"].each do |methods| %>
<h4><%= methods["type"] %> <%= methods["category"] %> method:
<% if methods["callseq"] then %>
<a name="<%= methods["aref"] %>"><%= methods["callseq"] %></a>
<% end %>
<% unless methods["callseq"] then %>
<a name="<%= methods["aref"] %>"><%= methods["name"] %><%= methods["params"] %></a></h4>
<% end %>
IF:m_desc
%m_desc%
ENDIF:m_desc
<% if methods["m_desc"] then %>
<%= methods["m_desc"] %>
<% end %>
IF:sourcecode
<% if methods["sourcecode"] then %>
<blockquote><pre>
%sourcecode%
<%= methods["sourcecode"] %>
</pre></blockquote>
ENDIF:sourcecode
END:methods
ENDIF:methods
END:method_list
ENDIF:method_list
<% end %>
<% end # method_list["methods"] %>
<% end %>
<% end # sections["method_list"] %>
<% end %>
<% end # classes["sections"] %>
<% end %>
}
########################################################################
@ -81,42 +80,42 @@ ONE_PAGE = %{
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>%title%</title>
<meta http-equiv="Content-Type" content="text/html; charset=%charset%" />
<title><%= values["title"] %></title>
<meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>" />
</head>
<body>
START:files
<h2>File: %short_name%</h2>
<% values["files"].each do |files| %>
<h2>File: <%= files["short_name"] %></h2>
<table>
<tr><td>Path:</td><td>%full_path%</td></tr>
<tr><td>Modified:</td><td>%dtm_modified%</td></tr>
<tr><td>Path:</td><td><%= files["full_path"] %></td></tr>
<tr><td>Modified:</td><td><%= files["dtm_modified"] %></td></tr>
</table>
} + CONTENTS_XML + %{
END:files
<% end # values["files"] %>
IF:classes
<% if values["classes"] then %>
<h2>Classes</h2>
START:classes
IF:parent
<h3>%classmod% %full_name% &lt; HREF:par_url:parent:</h3>
ENDIF:parent
IFNOT:parent
<h3>%classmod% %full_name%</h3>
ENDIF:parent
<% values["classes"].each do |classes| %>
<% if classes["parent"] then %>
<h3><%= classes["classmod"] %> <%= classes["full_name"] %> &lt; <%= href classes["par_url"], classes["parent"] %></h3>
<% end %>
<% unless classes["parent"] then %>
<h3><%= classes["classmod"] %> <%= classes["full_name"] %></h3>
<% end %>
IF:infiles
<% if classes["infiles"] then %>
(in files
START:infiles
HREF:full_path_url:full_path:
END:infiles
<% classes["infiles"].each do |infiles| %>
<%= href infiles["full_path_url"], infiles["full_path"] %>
<% end # classes["infiles"] %>
)
ENDIF:infiles
<% end %>
} + CONTENTS_XML + %{
END:classes
ENDIF:classes
<% end # values["classes"] %>
<% end %>
</body>
</html>
}
end
end

View File

@ -1,67 +1,68 @@
module RDoc
module Page
module RDoc::Page
CONTENTS_RDF = %{
IF:description
<% if defined? classes and classes["description"] then %>
<description rd:parseType="Literal">
%description%
<%= classes["description"] %>
</description>
ENDIF:description
<% end %>
IF:requires
START:requires
<rd:required-file rd:name="%name%" />
END:requires
ENDIF:requires
<% if defined? files and files["requires"] then %>
<% files["requires"].each do |requires| %>
<rd:required-file rd:name="<%= requires["name"] %>" />
<% end # files["requires"] %>
<% end %>
IF:attributes
START:attributes
<% if defined? classes and classes["includes"] then %>
<IncludedModuleList>
<% classes["includes"].each do |includes| %>
<included-module rd:name="<%= includes["name"] %>" />
<% end # includes["includes"] %>
</IncludedModuleList>
<% end %>
<% if defined? classes and classes["sections"] then %>
<% classes["sections"].each do |sections| %>
<% if sections["attributes"] then %>
<% sections["attributes"].each do |attributes| %>
<contents>
<Attribute rd:name="%name%">
IF:rw
<attribute-rw>%rw%</attribute-rw>
ENDIF:rw
<description rdf:parseType="Literal">%a_desc%</description>
<Attribute rd:name="<%= attributes["name"] %>">
<% if attributes["rw"] then %>
<attribute-rw><%= attributes["rw"] %></attribute-rw>
<% end %>
<description rdf:parseType="Literal"><%= attributes["a_desc"] %></description>
</Attribute>
</contents>
END:attributes
ENDIF:attributes
<% end # sections["attributes"] %>
<% end %>
IF:includes
<IncludedModuleList>
START:includes
<included-module rd:name="%name%" />
END:includes
</IncludedModuleList>
ENDIF:includes
IF:method_list
START:method_list
IF:methods
START:methods
<% if sections["method_list"] then %>
<% sections["method_list"].each do |method_list| %>
<% if method_list["methods"] then %>
<% method_list["methods"].each do |methods| %>
<contents>
<Method rd:name="%name%" rd:visibility="%type%"
rd:category="%category%" rd:id="%aref%">
<parameters>%params%</parameters>
IF:m_desc
<Method rd:name="<%= methods["name"] %>" rd:visibility="<%= methods["type"] %>"
rd:category="<%= methods["category"] %>" rd:id="<%= methods["aref"] %>">
<parameters><%= methods["params"] %></parameters>
<% if methods["m_desc"] then %>
<description rdf:parseType="Literal">
%m_desc%
<%= methods["m_desc"] %>
</description>
ENDIF:m_desc
IF:sourcecode
<% end %>
<% if methods["sourcecode"] then %>
<source-code-listing rdf:parseType="Literal">
%sourcecode%
<%= methods["sourcecode"] %>
</source-code-listing>
ENDIF:sourcecode
<% end %>
</Method>
</contents>
END:methods
ENDIF:methods
END:method_list
ENDIF:method_list
<% end # method_list["methods"] %>
<% end %>
<% end # sections["method_list"] %>
<% end %>
<!-- end method list -->
<% end # classes["sections"] %>
<% end %>
}
########################################################################
@ -72,41 +73,39 @@ ONE_PAGE = %{<?xml version="1.0" encoding="utf-8"?>
xmlns:rd="http://pragprog.com/rdoc/rdoc.rdf#">
<!-- RDoc -->
START:files
<rd:File rd:name="%short_name%" rd:id="%href%">
<path>%full_path%</path>
<dtm-modified>%dtm_modified%</dtm-modified>
<% values["files"].each do |files| %>
<rd:File rd:name="<%= files["short_name"] %>" rd:id="<%= files["href"] %>">
<path><%= files["full_path"] %></path>
<dtm-modified><%= files["dtm_modified"] %></dtm-modified>
} + CONTENTS_RDF + %{
</rd:File>
END:files
START:classes
<%classmod% rd:name="%full_name%" rd:id="%full_name%">
<% end # values["files"] %>
<% values["classes"].each do |classes| %>
<<%= values["classmod"] %> rd:name="<%= classes["full_name"] %>" rd:id="<%= classes["full_name"] %>">
<classmod-info>
IF:infiles
<% if classes["infiles"] then %>
<InFiles>
START:infiles
<% classes["infiles"].each do |infiles| %>
<infile>
<File rd:name="%full_path%"
IF:full_path_url
rdf:about="%full_path_url%"
ENDIF:full_path_url
<File rd:name="<%= infiles["full_path"] %>"
<% if infiles["full_path_url"] then %>
rdf:about="<%= infiles["full_path_url"] %>"
<% end %>
/>
</infile>
END:infiles
<% end # classes["infiles"] %>
</InFiles>
ENDIF:infiles
IF:parent
<superclass>HREF:par_url:parent:</superclass>
ENDIF:parent
<% end %>
<% if classes["parent"] then %>
<superclass><%= href classes["par_url"], classes["parent"] %></superclass>
<% end %>
</classmod-info>
} + CONTENTS_RDF + %{
</%classmod%>
END:classes
</<%= classes["classmod"] %>>
<% end # values["classes"] %>
<!-- /RDoc -->
</rdf:RDF>
}
end
end

View File

@ -1,73 +1,74 @@
module RDoc
module Page
module RDoc::Page
CONTENTS_XML = %{
IF:description
<% if defined? classes and classes["description"] then %>
<description>
%description%
<%= classes["description"] %>
</description>
ENDIF:description
<% end %>
<contents>
IF:requires
<% if defined? files and files["requires"] then %>
<required-file-list>
START:requires
<required-file name="%name%"
IF:aref
href="%aref%"
ENDIF:aref
<% files["requires"].each do |requires| %>
<required-file name="<%= requires["name"] %>"
<% if requires["aref"] then %>
href="<%= requires["aref"] %>"
<% end %>
/>
END:requires
<% end # files["requires"] %>
</required-file-list>
ENDIF:requires
IF:attributes
<% end %>
<% if defined? classes and classes["sections"] then %>
<% classes["sections"].each do |sections| %>
<% if sections["attributes"] then %>
<attribute-list>
START:attributes
<attribute name="%name%">
IF:rw
<attribute-rw>%rw%</attribute-rw>
ENDIF:rw
<description>%a_desc%</description>
<% sections["attributes"].each do |attributes| %>
<attribute name="<%= attributes["name"] %>">
<% if attributes["rw"] then %>
<attribute-rw><%= attributes["rw"] %></attribute-rw>
<% end %>
<description><%= attributes["a_desc"] %></description>
</attribute>
END:attributes
<% end # sections["attributes"] %>
</attribute-list>
ENDIF:attributes
IF:includes
<included-module-list>
START:includes
<included-module name="%name%"
IF:aref
href="%aref%"
ENDIF:aref
/>
END:includes
</included-module-list>
ENDIF:includes
IF:method_list
<% end %>
<% if sections["method_list"] then %>
<method-list>
START:method_list
IF:methods
START:methods
<method name="%name%" type="%type%" category="%category%" id="%aref%">
<parameters>%params%</parameters>
IF:m_desc
<% sections["method_list"].each do |method_list| %>
<% if method_list["methods"] then %>
<% method_list["methods"].each do |methods| %>
<method name="<%= methods["name"] %>" type="<%= methods["type"] %>" category="<%= methods["category"] %>" id="<%= methods["aref"] %>">
<parameters><%= methods["params"] %></parameters>
<% if methods["m_desc"] then %>
<description>
%m_desc%
<%= methods["m_desc"] %>
</description>
ENDIF:m_desc
IF:sourcecode
<% end %>
<% if methods["sourcecode"] then %>
<source-code-listing>
%sourcecode%
<%= methods["sourcecode"] %>
</source-code-listing>
ENDIF:sourcecode
<% end %>
</method>
END:methods
ENDIF:methods
END:method_list
<% end # method_list["methods"] %>
<% end %>
<% end # sections["method_list"] %>
</method-list>
ENDIF:method_list
</contents>
<% end %>
<% end # classes["sections"] %>
<% end %>
<% if defined? classes and classes["includes"] then %>
<included-module-list>
<% classes["includes"].each do |includes| %>
<included-module name="<%= includes["name"] %>"
<% if includes["aref"] then %>
href="<%= includes["aref"] %>"
<% end %>
/>
<% end # classes["includes"] %>
</included-module-list>
<% end %>
</contents>
}
########################################################################
@ -75,38 +76,36 @@ ENDIF:method_list
ONE_PAGE = %{<?xml version="1.0" encoding="utf-8"?>
<rdoc>
<file-list>
START:files
<file name="%short_name%" id="%href%">
<% values["files"].each do |files| %>
<file name="<%= files["short_name"] %>" id="<%= files["href"] %>">
<file-info>
<path>%full_path%</path>
<dtm-modified>%dtm_modified%</dtm-modified>
<path><%= files["full_path"] %></path>
<dtm-modified><%= files["dtm_modified"] %></dtm-modified>
</file-info>
} + CONTENTS_XML + %{
</file>
END:files
<% end # values["files"] %>
</file-list>
<class-module-list>
START:classes
<%classmod% name="%full_name%" id="%full_name%">
<% values["classes"].each do |classes| %>
<<%= classes["classmod"] %> name="<%= classes["full_name"] %>" id="<%= classes["full_name"] %>">
<classmod-info>
IF:infiles
<% if classes["infiles"] then %>
<infiles>
START:infiles
<infile>HREF:full_path_url:full_path:</infile>
END:infiles
<% classes["infiles"].each do |infiles| %>
<infile><%= href infiles["full_path_url"], infiles["full_path"] %></infile>
<% end # classes["infiles"] %>
</infiles>
ENDIF:infiles
IF:parent
<superclass>HREF:par_url:parent:</superclass>
ENDIF:parent
<% end %>
<% if classes["parent"] then %>
<superclass><%= href classes["par_url"], classes["parent"] %></superclass>
<% end %>
</classmod-info>
} + CONTENTS_XML + %{
</%classmod%>
END:classes
</<%= classes["classmod"] %>>
<% end # values["classes"] %>
</class-module-list>
</rdoc>
}
end
end

View File

@ -1,233 +1,62 @@
# Cheap-n-cheerful HTML page template system. You create a
# template containing:
require 'erb'
##
# An ERB wrapper.
#
# * variable names between percent signs (<tt>%fred%</tt>)
# * blocks of repeating stuff:
# This TemplatePage operates similarly to RDoc 1.x's TemplatePage, but uses
# ERB instead of a custom template language.
#
# START:key
# ... stuff
# END:key
# Converting from a RDoc 1.x template to an RDoc 2.x template is fairly easy.
#
# You feed the code a hash. For simple variables, the values
# are resolved directly from the hash. For blocks, the hash entry
# corresponding to +key+ will be an array of hashes. The block will
# be generated once for each entry. Blocks can be nested arbitrarily
# deeply.
# * %blah% becomes <%= values["blah"] %>
# * !INCLUDE! becomes <%= template_include %>
# * HREF:aref:name becomes <%= href values["aref"], values["name"] %>
# * IF:blah becomes <% if values["blah"] then %>
# * IFNOT:blah becomes <% unless values["blah"] then %>
# * ENDIF:blah becomes <% end %>
# * START:blah becomes <% values["blah"].each do |blah| %>
# * END:blah becomes <% end %>
#
# The template may also contain
#
# IF:key
# ... stuff
# ENDIF:key
#
# _stuff_ will only be included in the output if the corresponding
# key is set in the value hash.
#
# Usage: Given a set of templates <tt>T1, T2,</tt> etc
#
# values = { "name" => "Dave", state => "TX" }
#
# t = TemplatePage.new(T1, T2, T3)
# File.open(name, "w") {|f| t.write_html_on(f, values)}
# or
# res = ''
# t.write_html_on(res, values)
# To make nested loops easier to convert, start by converting START statements
# to:
#
# <% values["blah"].each do |blah| $stderr.puts blah.keys %>
#
# So you can see what is being used inside which loop.
class RDoc::TemplatePage
##########
# A context holds a stack of key/value pairs (like a symbol
# table). When asked to resolve a key, it first searches the top of
# the stack, then the next level, and so on until it finds a match
# (or runs out of entries)
class Context
def initialize
@stack = []
end
def push(hash)
@stack.push(hash)
end
def pop
@stack.pop
end
# Find a scalar value, throwing an exception if not found. This
# method is used when substituting the %xxx% constructs
def find_scalar(key)
@stack.reverse_each do |level|
if val = level[key]
return val unless val.kind_of? Array
end
end
raise "Template error: can't find variable '#{key}'"
end
# Lookup any key in the stack of hashes
def lookup(key)
@stack.reverse_each do |level|
val = level[key]
return val if val
end
nil
end
end
#########
# Simple class to read lines out of a string
class LineReader
# we're initialized with an array of lines
def initialize(lines)
@lines = lines
end
# read the next line
def read
@lines.shift
end
# Return a list of lines up to the line that matches
# a pattern. That last line is discarded.
def read_up_to(pattern)
res = []
while line = read
if pattern.match(line)
return LineReader.new(res)
else
res << line
end
end
raise "Missing end tag in template: #{pattern.source}"
end
# Return a copy of ourselves that can be modified without
# affecting us
def dup
LineReader.new(@lines.dup)
end
end
# +templates+ is an array of strings containing the templates.
# We start at the first, and substitute in subsequent ones
# where the string <tt>!INCLUDE!</tt> occurs. For example,
# we could have the overall page template containing
#
# <html><body>
# <h1>Master</h1>
# !INCLUDE!
# </bost></html>
#
# and substitute subpages in to it by passing [master, sub_page].
# This gives us a cheap way of framing pages
##
# Create a new TemplatePage that will use +templates+.
def initialize(*templates)
result = "!INCLUDE!"
templates.each do |content|
result.sub!(/!INCLUDE!/, content)
@templates = templates
end
##
# Returns "<a href=\"#{ref}\">#{name}</a>"
def href(ref, name)
if ref then
"<a href=\"#{ref}\">#{name}</a>"
else
name
end
@lines = LineReader.new(result.split($/))
end
# Render the templates into HTML, storing the result on +op+
# using the method <tt><<</tt>. The <tt>value_hash</tt> contains
# key/value pairs used to drive the substitution (as described above)
##
# Process the template using +values+, writing the result to +io+.
def write_html_on(op, value_hash)
@context = Context.new
op << substitute_into(@lines, value_hash).tr("\000", '\\')
end
def write_html_on(io, values)
template_include = ""
b = binding
# Substitute a set of key/value pairs into the given template.
# Keys with scalar values have them substituted directly into
# the page. Those with array values invoke <tt>substitute_array</tt>
# (below), which examples a block of the template once for each
# row in the array.
#
# This routine also copes with the <tt>IF:</tt>_key_ directive,
# removing chunks of the template if the corresponding key
# does not appear in the hash, and the START: directive, which
# loops its contents for each value in an array
def substitute_into(lines, values)
@context.push(values)
skip_to = nil
result = []
while line = lines.read
case line
when /^IF:(\w+)/
lines.read_up_to(/^ENDIF:#$1/) unless @context.lookup($1)
when /^IFNOT:(\w+)/
lines.read_up_to(/^ENDIF:#$1/) if @context.lookup($1)
when /^ENDIF:/
;
when /^START:(\w+)/
tag = $1
body = lines.read_up_to(/^END:#{tag}/)
inner_values = @context.lookup(tag)
raise "unknown tag: #{tag}" unless inner_values
raise "not array: #{tag}" unless inner_values.kind_of?(Array)
inner_values.each do |vals|
result << substitute_into(body.dup, vals)
end
else
result << expand_line(line.dup)
end
@templates.reverse_each do |template|
template_include = ERB.new(template).result b
end
@context.pop
result.join("\n")
end
# Given an individual line, we look for %xxx% constructs and
# HREF:ref:name: constructs, substituting for each.
def expand_line(line)
# Generate a cross reference if a reference is given,
# otherwise just fill in the name part
line.gsub!(/HREF:(\w+?):(\w+?):/) {
ref = @context.lookup($1)
name = @context.find_scalar($2)
if ref and !ref.kind_of?(Array)
"<a href=\"#{ref}\">#{name}</a>"
else
name
end
}
# Substitute in values for %xxx% constructs. This is made complex
# because the replacement string may contain characters that are
# meaningful to the regexp (like \1)
line = line.gsub(/%([a-zA-Z]\w*)%/) {
val = @context.find_scalar($1)
val.tr('\\', "\000")
}
line
rescue Exception => e
$stderr.puts "Error in template: #{e}"
$stderr.puts "Original line: #{line}"
exit
io.write template_include
end
end