Import RDoc 2.5
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27147 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
|
@ -1,113 +0,0 @@
|
|||
require 'rdoc/generator/html'
|
||||
|
||||
class RDoc::Generator::CHM < RDoc::Generator::HTML
|
||||
|
||||
HHC_PATH = "c:/Program Files/HTML Help Workshop/hhc.exe"
|
||||
|
||||
##
|
||||
# Standard generator factory
|
||||
|
||||
def self.for(options)
|
||||
new(options)
|
||||
end
|
||||
|
||||
def initialize(*args)
|
||||
super
|
||||
@op_name = @options.op_name || "rdoc"
|
||||
check_for_html_help_workshop
|
||||
end
|
||||
|
||||
def check_for_html_help_workshop
|
||||
stat = File.stat(HHC_PATH)
|
||||
rescue
|
||||
$stderr <<
|
||||
"\n.chm output generation requires that Microsoft's Html Help\n" <<
|
||||
"Workshop is installed. RDoc looks for it in:\n\n " <<
|
||||
HHC_PATH <<
|
||||
"\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"
|
||||
end
|
||||
|
||||
##
|
||||
# Generate the html as normal, then wrap it in a help project
|
||||
|
||||
def generate(info)
|
||||
super
|
||||
@project_name = @op_name + ".hhp"
|
||||
create_help_project
|
||||
end
|
||||
|
||||
##
|
||||
# The project contains the project file, a table of contents and an index
|
||||
|
||||
def create_help_project
|
||||
create_project_file
|
||||
create_contents_and_index
|
||||
compile_project
|
||||
end
|
||||
|
||||
##
|
||||
# The project file links together all the various
|
||||
# files that go to make up the help.
|
||||
|
||||
def create_project_file
|
||||
template = RDoc::TemplatePage.new @template::HPP_FILE
|
||||
values = { "title" => @options.title, "opname" => @op_name }
|
||||
files = []
|
||||
@files.each do |f|
|
||||
files << { "html_file_name" => f.path }
|
||||
end
|
||||
|
||||
values['all_html_files'] = files
|
||||
|
||||
File.open(@project_name, "w") do |f|
|
||||
template.write_html_on(f, values)
|
||||
end
|
||||
end
|
||||
|
||||
##
|
||||
# The contents is a list of all files and modules.
|
||||
# For each we include as sub-entries the list
|
||||
# of methods they contain. As we build the contents
|
||||
# we also build an index file
|
||||
|
||||
def create_contents_and_index
|
||||
contents = []
|
||||
index = []
|
||||
|
||||
(@files+@classes).sort.each do |entry|
|
||||
content_entry = { "c_name" => entry.name, "ref" => entry.path }
|
||||
index << { "name" => entry.name, "aref" => entry.path }
|
||||
|
||||
internals = []
|
||||
|
||||
methods = entry.build_method_summary_list(entry.path)
|
||||
|
||||
content_entry["methods"] = methods unless methods.empty?
|
||||
contents << content_entry
|
||||
index.concat methods
|
||||
end
|
||||
|
||||
values = { "contents" => contents }
|
||||
template = RDoc::TemplatePage.new @template::CONTENTS
|
||||
File.open("contents.hhc", "w") do |f|
|
||||
template.write_html_on(f, values)
|
||||
end
|
||||
|
||||
values = { "index" => index }
|
||||
template = RDoc::TemplatePage.new @template::CHM_INDEX
|
||||
File.open("index.hhk", "w") do |f|
|
||||
template.write_html_on(f, values)
|
||||
end
|
||||
end
|
||||
|
||||
##
|
||||
# Invoke the windows help compiler to compiler the project
|
||||
|
||||
def compile_project
|
||||
system(HHC_PATH, @project_name)
|
||||
end
|
||||
|
||||
end
|
||||
|
|
@ -1,100 +0,0 @@
|
|||
require 'rdoc/generator/chm'
|
||||
require 'rdoc/generator/html/html'
|
||||
|
||||
module RDoc::Generator::CHM::CHM
|
||||
|
||||
HTML = RDoc::Generator::HTML::HTML
|
||||
|
||||
INDEX = HTML::INDEX
|
||||
|
||||
STYLE = HTML::STYLE
|
||||
|
||||
CLASS_INDEX = HTML::CLASS_INDEX
|
||||
CLASS_PAGE = HTML::CLASS_PAGE
|
||||
FILE_INDEX = HTML::FILE_INDEX
|
||||
FILE_PAGE = HTML::FILE_PAGE
|
||||
METHOD_INDEX = HTML::METHOD_INDEX
|
||||
METHOD_LIST = HTML::METHOD_LIST
|
||||
|
||||
FR_INDEX_BODY = HTML::FR_INDEX_BODY
|
||||
|
||||
# This is a nasty little hack, but hhc doesn't support the <?xml tag, so...
|
||||
BODY = HTML::BODY.sub!(/<\?xml.*\?>/, '')
|
||||
SRC_PAGE = HTML::SRC_PAGE.sub!(/<\?xml.*\?>/, '')
|
||||
|
||||
HPP_FILE = <<-EOF
|
||||
[OPTIONS]
|
||||
Auto Index = Yes
|
||||
Compatibility=1.1 or later
|
||||
Compiled file=<%= values["opname"] %>.chm
|
||||
Contents file=contents.hhc
|
||||
Full-text search=Yes
|
||||
Index file=index.hhk
|
||||
Language=0x409 English(United States)
|
||||
Title=<%= values["title"] %>
|
||||
|
||||
[FILES]
|
||||
<% values["all_html_files"].each do |all_html_files| %>
|
||||
<%= all_html_files["html_file_name"] %>
|
||||
<% end # values["all_html_files"] %>
|
||||
EOF
|
||||
|
||||
CONTENTS = <<-EOF
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<meta name="GENERATOR" content="Microsoft® HTML Help Workshop 4.1">
|
||||
<!-- Sitemap 1.0 -->
|
||||
</HEAD><BODY>
|
||||
<OBJECT type="text/site properties">
|
||||
<param name="Foreground" value="0x80">
|
||||
<param name="Window Styles" value="0x800025">
|
||||
<param name="ImageType" value="Folder">
|
||||
</OBJECT>
|
||||
<UL>
|
||||
<% values["contents"].each do |contents| %>
|
||||
<LI> <OBJECT type="text/sitemap">
|
||||
<param name="Name" value="<%= contents["c_name"] %>">
|
||||
<param name="Local" value="<%= contents["ref"] %>">
|
||||
</OBJECT>
|
||||
<% if contents["methods"] then %>
|
||||
<ul>
|
||||
<% contents["methods"].each do |methods| %>
|
||||
<LI> <OBJECT type="text/sitemap">
|
||||
<param name="Name" value="<%= methods["name"] %>">
|
||||
<param name="Local" value="<%= methods["aref"] %>">
|
||||
</OBJECT>
|
||||
<% end # contents["methods"] %>
|
||||
</ul>
|
||||
<% end %>
|
||||
</LI>
|
||||
<% end # values["contents"] %>
|
||||
</UL>
|
||||
</BODY></HTML>
|
||||
EOF
|
||||
|
||||
CHM_INDEX = <<-EOF
|
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<meta name="GENERATOR" content="Microsoft® HTML Help Workshop 4.1">
|
||||
<!-- Sitemap 1.0 -->
|
||||
</HEAD><BODY>
|
||||
<OBJECT type="text/site properties">
|
||||
<param name="Foreground" value="0x80">
|
||||
<param name="Window Styles" value="0x800025">
|
||||
<param name="ImageType" value="Folder">
|
||||
</OBJECT>
|
||||
<UL>
|
||||
<% values["index"].each do |index| %>
|
||||
<LI> <OBJECT type="text/sitemap">
|
||||
<param name="Name" value="<%= index["name"] %>">
|
||||
<param name="Local" value="<%= index["aref"] %>">
|
||||
</OBJECT>
|
||||
<% end # values["index"] %>
|
||||
</UL>
|
||||
</BODY></HTML>
|
||||
EOF
|
||||
|
||||
end
|
||||
|
459
lib/rdoc/generator/darkfish.rb
Normal file
|
@ -0,0 +1,459 @@
|
|||
#!ruby
|
||||
# vim: noet ts=2 sts=8 sw=2
|
||||
|
||||
unless File.exist? File.expand_path('../.svn', __FILE__) then
|
||||
require 'rubygems'
|
||||
gem 'rdoc', '>= 2.4'
|
||||
end
|
||||
|
||||
require 'pp'
|
||||
require 'pathname'
|
||||
require 'fileutils'
|
||||
require 'erb'
|
||||
|
||||
require 'rdoc/generator/markup'
|
||||
|
||||
$DARKFISH_DRYRUN = false # TODO make me non-global
|
||||
|
||||
#
|
||||
# Darkfish RDoc HTML Generator
|
||||
#
|
||||
# $Id: darkfish.rb 52 2009-01-07 02:08:11Z deveiant $
|
||||
#
|
||||
# == Author/s
|
||||
# * Michael Granger (ged@FaerieMUD.org)
|
||||
#
|
||||
# == Contributors
|
||||
# * Mahlon E. Smith (mahlon@martini.nu)
|
||||
# * Eric Hodel (drbrain@segment7.net)
|
||||
#
|
||||
# == License
|
||||
#
|
||||
# Copyright (c) 2007, 2008, Michael Granger. All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright notice,
|
||||
# this list of conditions and the following disclaimer.
|
||||
#
|
||||
# * Redistributions in binary form must reproduce the above copyright notice,
|
||||
# this list of conditions and the following disclaimer in the documentation
|
||||
# and/or other materials provided with the distribution.
|
||||
#
|
||||
# * Neither the name of the author/s, nor the names of the project's
|
||||
# contributors may be used to endorse or promote products derived from this
|
||||
# software without specific prior written permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
||||
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
||||
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#
|
||||
class RDoc::Generator::Darkfish
|
||||
|
||||
RDoc::RDoc.add_generator( self )
|
||||
|
||||
include ERB::Util
|
||||
|
||||
# Subversion rev
|
||||
SVNRev = %$Rev: 52 $
|
||||
|
||||
# Subversion ID
|
||||
SVNId = %$Id: darkfish.rb 52 2009-01-07 02:08:11Z deveiant $
|
||||
|
||||
# Path to this file's parent directory. Used to find templates and other
|
||||
# resources.
|
||||
GENERATOR_DIR = File.join 'rdoc', 'generator'
|
||||
|
||||
# Release Version
|
||||
VERSION = '1.1.6'
|
||||
|
||||
# Directory where generated classes live relative to the root
|
||||
CLASS_DIR = nil
|
||||
|
||||
# Directory where generated files live relative to the root
|
||||
FILE_DIR = nil
|
||||
|
||||
|
||||
#################################################################
|
||||
### C L A S S M E T H O D S
|
||||
#################################################################
|
||||
|
||||
### Standard generator factory method
|
||||
def self::for( options )
|
||||
new( options )
|
||||
end
|
||||
|
||||
|
||||
#################################################################
|
||||
### I N S T A N C E M E T H O D S
|
||||
#################################################################
|
||||
|
||||
### Initialize a few instance variables before we start
|
||||
def initialize( options )
|
||||
@options = options
|
||||
|
||||
template = @options.template || 'darkfish'
|
||||
|
||||
template_dir = $LOAD_PATH.map do |path|
|
||||
File.join File.expand_path(path), GENERATOR_DIR, 'template', template
|
||||
end.find do |dir|
|
||||
File.directory? dir
|
||||
end
|
||||
|
||||
raise RDoc::Error, "could not find template #{template.inspect}" unless
|
||||
template_dir
|
||||
|
||||
@template_dir = Pathname.new File.expand_path(template_dir)
|
||||
|
||||
@files = nil
|
||||
@classes = nil
|
||||
|
||||
@basedir = Pathname.pwd.expand_path
|
||||
end
|
||||
|
||||
######
|
||||
public
|
||||
######
|
||||
|
||||
# The output directory
|
||||
attr_reader :outputdir
|
||||
|
||||
|
||||
### Output progress information if debugging is enabled
|
||||
def debug_msg( *msg )
|
||||
return unless $DEBUG_RDOC
|
||||
$stderr.puts( *msg )
|
||||
end
|
||||
|
||||
def class_dir
|
||||
CLASS_DIR
|
||||
end
|
||||
|
||||
def file_dir
|
||||
FILE_DIR
|
||||
end
|
||||
|
||||
### Create the directories the generated docs will live in if
|
||||
### they don't already exist.
|
||||
def gen_sub_directories
|
||||
@outputdir.mkpath
|
||||
end
|
||||
|
||||
### Copy over the stylesheet into the appropriate place in the output
|
||||
### directory.
|
||||
def write_style_sheet
|
||||
debug_msg "Copying static files"
|
||||
options = { :verbose => $DEBUG_RDOC, :noop => $DARKFISH_DRYRUN }
|
||||
|
||||
FileUtils.cp @template_dir + 'rdoc.css', '.', options
|
||||
|
||||
Dir[(@template_dir + "{js,images}/**/*").to_s].each do |path|
|
||||
next if File.directory? path
|
||||
next if path =~ /#{File::SEPARATOR}\./
|
||||
|
||||
dst = Pathname.new(path).relative_path_from @template_dir
|
||||
|
||||
# I suck at glob
|
||||
dst_dir = dst.dirname
|
||||
FileUtils.mkdir_p dst_dir, options unless File.exist? dst_dir
|
||||
|
||||
FileUtils.cp @template_dir + path, dst, options
|
||||
end
|
||||
end
|
||||
|
||||
### Build the initial indices and output objects
|
||||
### based on an array of TopLevel objects containing
|
||||
### the extracted information.
|
||||
def generate( top_levels )
|
||||
@outputdir = Pathname.new( @options.op_dir ).expand_path( @basedir )
|
||||
|
||||
@files = top_levels.sort
|
||||
@classes = RDoc::TopLevel.all_classes_and_modules.sort
|
||||
@methods = @classes.map { |m| m.method_list }.flatten.sort
|
||||
@modsort = get_sorted_module_list( @classes )
|
||||
|
||||
# Now actually write the output
|
||||
write_style_sheet
|
||||
generate_index
|
||||
generate_class_files
|
||||
generate_file_files
|
||||
|
||||
rescue StandardError => err
|
||||
debug_msg "%s: %s\n %s" % [ err.class.name, err.message, err.backtrace.join("\n ") ]
|
||||
raise
|
||||
end
|
||||
|
||||
#########
|
||||
protected
|
||||
#########
|
||||
|
||||
### Return a list of the documented modules sorted by salience first, then
|
||||
### by name.
|
||||
def get_sorted_module_list( classes )
|
||||
nscounts = classes.inject({}) do |counthash, klass|
|
||||
top_level = klass.full_name.gsub( /::.*/, '' )
|
||||
counthash[top_level] ||= 0
|
||||
counthash[top_level] += 1
|
||||
|
||||
counthash
|
||||
end
|
||||
|
||||
# Sort based on how often the top level namespace occurs, and then on the
|
||||
# name of the module -- this works for projects that put their stuff into
|
||||
# a namespace, of course, but doesn't hurt if they don't.
|
||||
classes.sort_by do |klass|
|
||||
top_level = klass.full_name.gsub( /::.*/, '' )
|
||||
[
|
||||
nscounts[ top_level ] * -1,
|
||||
klass.full_name
|
||||
]
|
||||
end.select do |klass|
|
||||
klass.document_self
|
||||
end
|
||||
end
|
||||
|
||||
### Generate an index page which lists all the classes which
|
||||
### are documented.
|
||||
def generate_index
|
||||
template_file = @template_dir + 'index.rhtml'
|
||||
return unless template_file.exist?
|
||||
|
||||
debug_msg "Rendering the index page..."
|
||||
|
||||
template_src = template_file.read
|
||||
template = ERB.new( template_src, nil, '<>' )
|
||||
template.filename = template_file.to_s
|
||||
context = binding()
|
||||
|
||||
output = nil
|
||||
|
||||
begin
|
||||
output = template.result( context )
|
||||
rescue NoMethodError => err
|
||||
raise RDoc::Error, "Error while evaluating %s: %s (at %p)" % [
|
||||
template_file,
|
||||
err.message,
|
||||
eval( "_erbout[-50,50]", context )
|
||||
], err.backtrace
|
||||
end
|
||||
|
||||
outfile = @basedir + @options.op_dir + 'index.html'
|
||||
unless $DARKFISH_DRYRUN
|
||||
debug_msg "Outputting to %s" % [outfile.expand_path]
|
||||
outfile.open( 'w', 0644 ) do |fh|
|
||||
fh.print( output )
|
||||
end
|
||||
else
|
||||
debug_msg "Would have output to %s" % [outfile.expand_path]
|
||||
end
|
||||
end
|
||||
|
||||
### Generate a documentation file for each class
|
||||
def generate_class_files
|
||||
template_file = @template_dir + 'classpage.rhtml'
|
||||
return unless template_file.exist?
|
||||
debug_msg "Generating class documentation in #@outputdir"
|
||||
|
||||
@classes.each do |klass|
|
||||
debug_msg " working on %s (%s)" % [ klass.full_name, klass.path ]
|
||||
outfile = @outputdir + klass.path
|
||||
rel_prefix = @outputdir.relative_path_from( outfile.dirname )
|
||||
svninfo = self.get_svninfo( klass )
|
||||
|
||||
debug_msg " rendering #{outfile}"
|
||||
self.render_template( template_file, binding(), outfile )
|
||||
end
|
||||
end
|
||||
|
||||
### Generate a documentation file for each file
|
||||
def generate_file_files
|
||||
template_file = @template_dir + 'filepage.rhtml'
|
||||
return unless template_file.exist?
|
||||
debug_msg "Generating file documentation in #@outputdir"
|
||||
|
||||
@files.each do |file|
|
||||
outfile = @outputdir + file.path
|
||||
debug_msg " working on %s (%s)" % [ file.full_name, outfile ]
|
||||
rel_prefix = @outputdir.relative_path_from( outfile.dirname )
|
||||
context = binding()
|
||||
|
||||
debug_msg " rendering #{outfile}"
|
||||
self.render_template( template_file, binding(), outfile )
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
### Return a string describing the amount of time in the given number of
|
||||
### seconds in terms a human can understand easily.
|
||||
def time_delta_string( seconds )
|
||||
return 'less than a minute' if seconds < 1.minute
|
||||
return (seconds / 1.minute).to_s + ' minute' + (seconds/60 == 1 ? '' : 's') if seconds < 50.minutes
|
||||
return 'about one hour' if seconds < 90.minutes
|
||||
return (seconds / 1.hour).to_s + ' hours' if seconds < 18.hours
|
||||
return 'one day' if seconds < 1.day
|
||||
return 'about one day' if seconds < 2.days
|
||||
return (seconds / 1.day).to_s + ' days' if seconds < 1.week
|
||||
return 'about one week' if seconds < 2.week
|
||||
return (seconds / 1.week).to_s + ' weeks' if seconds < 3.months
|
||||
return (seconds / 1.month).to_s + ' months' if seconds < 1.year
|
||||
return (seconds / 1.year).to_s + ' years'
|
||||
end
|
||||
|
||||
|
||||
# %q$Id: darkfish.rb 52 2009-01-07 02:08:11Z deveiant $"
|
||||
SVNID_PATTERN = /
|
||||
\$Id:\s
|
||||
(\S+)\s # filename
|
||||
(\d+)\s # rev
|
||||
(\d{4}-\d{2}-\d{2})\s # Date (YYYY-MM-DD)
|
||||
(\d{2}:\d{2}:\d{2}Z)\s # Time (HH:MM:SSZ)
|
||||
(\w+)\s # committer
|
||||
\$$
|
||||
/x
|
||||
|
||||
### Try to extract Subversion information out of the first constant whose value looks like
|
||||
### a subversion Id tag. If no matching constant is found, and empty hash is returned.
|
||||
def get_svninfo( klass )
|
||||
constants = klass.constants or return {}
|
||||
|
||||
constants.find {|c| c.value =~ SVNID_PATTERN } or return {}
|
||||
|
||||
filename, rev, date, time, committer = $~.captures
|
||||
commitdate = Time.parse( date + ' ' + time )
|
||||
|
||||
return {
|
||||
:filename => filename,
|
||||
:rev => Integer( rev ),
|
||||
:commitdate => commitdate,
|
||||
:commitdelta => time_delta_string( Time.now.to_i - commitdate.to_i ),
|
||||
:committer => committer,
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
### Load and render the erb template in the given +template_file+ within the
|
||||
### specified +context+ (a Binding object) and write it out to +outfile+.
|
||||
### Both +template_file+ and +outfile+ should be Pathname-like objects.
|
||||
|
||||
def render_template( template_file, context, outfile )
|
||||
template_src = template_file.read
|
||||
template = ERB.new( template_src, nil, '<>' )
|
||||
template.filename = template_file.to_s
|
||||
|
||||
output = begin
|
||||
template.result( context )
|
||||
rescue NoMethodError => err
|
||||
raise RDoc::Error, "Error while evaluating %s: %s (at %p)" % [
|
||||
template_file.to_s,
|
||||
err.message,
|
||||
eval( "_erbout[-50,50]", context )
|
||||
], err.backtrace
|
||||
end
|
||||
|
||||
unless $DARKFISH_DRYRUN
|
||||
outfile.dirname.mkpath
|
||||
outfile.open( 'w', 0644 ) do |ofh|
|
||||
ofh.print( output )
|
||||
end
|
||||
else
|
||||
debug_msg " would have written %d bytes to %s" %
|
||||
[ output.length, outfile ]
|
||||
end
|
||||
end
|
||||
|
||||
end # Roc::Generator::Darkfish
|
||||
|
||||
# :stopdoc:
|
||||
|
||||
### Time constants
|
||||
module TimeConstantMethods # :nodoc:
|
||||
|
||||
### Number of seconds (returns receiver unmodified)
|
||||
def seconds
|
||||
return self
|
||||
end
|
||||
alias_method :second, :seconds
|
||||
|
||||
### Returns number of seconds in <receiver> minutes
|
||||
def minutes
|
||||
return self * 60
|
||||
end
|
||||
alias_method :minute, :minutes
|
||||
|
||||
### Returns the number of seconds in <receiver> hours
|
||||
def hours
|
||||
return self * 60.minutes
|
||||
end
|
||||
alias_method :hour, :hours
|
||||
|
||||
### Returns the number of seconds in <receiver> days
|
||||
def days
|
||||
return self * 24.hours
|
||||
end
|
||||
alias_method :day, :days
|
||||
|
||||
### Return the number of seconds in <receiver> weeks
|
||||
def weeks
|
||||
return self * 7.days
|
||||
end
|
||||
alias_method :week, :weeks
|
||||
|
||||
### Returns the number of seconds in <receiver> fortnights
|
||||
def fortnights
|
||||
return self * 2.weeks
|
||||
end
|
||||
alias_method :fortnight, :fortnights
|
||||
|
||||
### Returns the number of seconds in <receiver> months (approximate)
|
||||
def months
|
||||
return self * 30.days
|
||||
end
|
||||
alias_method :month, :months
|
||||
|
||||
### Returns the number of seconds in <receiver> years (approximate)
|
||||
def years
|
||||
return (self * 365.25.days).to_i
|
||||
end
|
||||
alias_method :year, :years
|
||||
|
||||
|
||||
### Returns the Time <receiver> number of seconds before the
|
||||
### specified +time+. E.g., 2.hours.before( header.expiration )
|
||||
def before( time )
|
||||
return time - self
|
||||
end
|
||||
|
||||
|
||||
### Returns the Time <receiver> number of seconds ago. (e.g.,
|
||||
### expiration > 2.hours.ago )
|
||||
def ago
|
||||
return self.before( ::Time.now )
|
||||
end
|
||||
|
||||
|
||||
### Returns the Time <receiver> number of seconds after the given +time+.
|
||||
### E.g., 10.minutes.after( header.expiration )
|
||||
def after( time )
|
||||
return time + self
|
||||
end
|
||||
|
||||
# Reads best without arguments: 10.minutes.from_now
|
||||
def from_now
|
||||
return self.after( ::Time.now )
|
||||
end
|
||||
end # module TimeConstantMethods
|
||||
|
||||
|
||||
# Extend Numeric with time constants
|
||||
class Numeric # :nodoc:
|
||||
include TimeConstantMethods
|
||||
end
|
||||
|
|
@ -1,449 +0,0 @@
|
|||
require 'fileutils'
|
||||
|
||||
require 'rdoc/generator'
|
||||
require 'rdoc/markup/to_html'
|
||||
|
||||
##
|
||||
# We're responsible for generating all the HTML files from the object tree
|
||||
# defined in code_objects.rb. We generate:
|
||||
#
|
||||
# [files] an html file for each input file given. These
|
||||
# input files appear as objects of class
|
||||
# TopLevel
|
||||
#
|
||||
# [classes] an html file for each class or module encountered.
|
||||
# These classes are not grouped by file: if a file
|
||||
# contains four classes, we'll generate an html
|
||||
# file for the file itself, and four html files
|
||||
# for the individual classes.
|
||||
#
|
||||
# [indices] we generate three indices for files, classes,
|
||||
# and methods. These are displayed in a browser
|
||||
# like window with three index panes across the
|
||||
# top and the selected description below
|
||||
#
|
||||
# Method descriptions appear in whatever entity (file, class, or module) that
|
||||
# contains them.
|
||||
#
|
||||
# We generate files in a structure below a specified subdirectory, normally
|
||||
# +doc+.
|
||||
#
|
||||
# opdir
|
||||
# |
|
||||
# |___ files
|
||||
# | |__ per file summaries
|
||||
# |
|
||||
# |___ classes
|
||||
# |__ per class/module descriptions
|
||||
#
|
||||
# HTML is generated using the Template class.
|
||||
|
||||
class RDoc::Generator::HTML
|
||||
|
||||
include RDoc::Generator::MarkUp
|
||||
|
||||
##
|
||||
# Generator may need to return specific subclasses depending on the
|
||||
# options they are passed. Because of this we create them using a factory
|
||||
|
||||
def self.for(options)
|
||||
RDoc::Generator::AllReferences.reset
|
||||
RDoc::Generator::Method.reset
|
||||
|
||||
if options.all_one_file
|
||||
RDoc::Generator::HTMLInOne.new options
|
||||
else
|
||||
new options
|
||||
end
|
||||
end
|
||||
|
||||
class << self
|
||||
protected :new
|
||||
end
|
||||
|
||||
##
|
||||
# Set up a new HTML generator. Basically all we do here is load up the
|
||||
# correct output temlate
|
||||
|
||||
def initialize(options) #:not-new:
|
||||
@options = options
|
||||
load_html_template
|
||||
end
|
||||
|
||||
##
|
||||
# Build the initial indices and output objects
|
||||
# based on an array of TopLevel objects containing
|
||||
# the extracted information.
|
||||
|
||||
def generate(toplevels)
|
||||
@toplevels = toplevels
|
||||
@files = []
|
||||
@classes = []
|
||||
|
||||
write_style_sheet
|
||||
gen_sub_directories
|
||||
build_indices
|
||||
generate_html
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
##
|
||||
# Load up the HTML template specified in the options.
|
||||
# If the template name contains a slash, use it literally
|
||||
|
||||
def load_html_template
|
||||
#
|
||||
# If the template is not a path, first look for it
|
||||
# in rdoc's HTML template directory. Perhaps this behavior should
|
||||
# be reversed (first try to include the template and, only if that
|
||||
# fails, try to include it in the default template directory).
|
||||
# One danger with reversing the behavior, however, is that
|
||||
# if something like require 'html' could load up an
|
||||
# unrelated file in the standard library or in a gem.
|
||||
#
|
||||
template = @options.template
|
||||
|
||||
unless template =~ %r{/|\\} then
|
||||
template = File.join('rdoc', 'generator', @options.generator.key,
|
||||
template)
|
||||
end
|
||||
|
||||
begin
|
||||
require template
|
||||
|
||||
@template = self.class.const_get @options.template.upcase
|
||||
@options.template_class = @template
|
||||
rescue LoadError => e
|
||||
#
|
||||
# The template did not exist in the default template directory, so
|
||||
# see if require can find the template elsewhere (in a gem, for
|
||||
# instance).
|
||||
#
|
||||
if(e.message[template] && template != @options.template)
|
||||
template = @options.template
|
||||
retry
|
||||
end
|
||||
|
||||
$stderr.puts "Could not find HTML template '#{template}': #{e.message}"
|
||||
exit 99
|
||||
end
|
||||
end
|
||||
|
||||
##
|
||||
# Write out the style sheet used by the main frames
|
||||
|
||||
def write_style_sheet
|
||||
return unless @template.constants.include? :STYLE or
|
||||
@template.constants.include? 'STYLE'
|
||||
|
||||
template = RDoc::TemplatePage.new @template::STYLE
|
||||
|
||||
unless @options.css then
|
||||
open RDoc::Generator::CSS_NAME, 'w' do |f|
|
||||
values = {}
|
||||
|
||||
if @template.constants.include? :FONTS or
|
||||
@template.constants.include? 'FONTS' then
|
||||
values["fonts"] = @template::FONTS
|
||||
end
|
||||
|
||||
template.write_html_on(f, values)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
##
|
||||
# See the comments at the top for a description of the directory structure
|
||||
|
||||
def gen_sub_directories
|
||||
FileUtils.mkdir_p RDoc::Generator::FILE_DIR
|
||||
FileUtils.mkdir_p RDoc::Generator::CLASS_DIR
|
||||
rescue
|
||||
$stderr.puts $!.message
|
||||
exit 1
|
||||
end
|
||||
|
||||
def build_indices
|
||||
@files, @classes = RDoc::Generator::Context.build_indices(@toplevels,
|
||||
@options)
|
||||
end
|
||||
|
||||
##
|
||||
# Generate all the HTML
|
||||
|
||||
def generate_html
|
||||
@main_url = main_url
|
||||
|
||||
# the individual descriptions for files and classes
|
||||
gen_into(@files)
|
||||
gen_into(@classes)
|
||||
|
||||
# and the index files
|
||||
gen_file_index
|
||||
gen_class_index
|
||||
gen_method_index
|
||||
gen_main_index
|
||||
|
||||
# this method is defined in the template file
|
||||
values = {
|
||||
'title_suffix' => CGI.escapeHTML("[#{@options.title}]"),
|
||||
'charset' => @options.charset,
|
||||
'style_url' => style_url('', @options.css),
|
||||
}
|
||||
|
||||
@template.write_extra_pages(values) if @template.respond_to?(:write_extra_pages)
|
||||
end
|
||||
|
||||
def gen_into(list)
|
||||
#
|
||||
# The file, class, and method lists technically should be regenerated
|
||||
# for every output file, in order that the relative links be correct
|
||||
# (we are worried here about frameless templates, which need this
|
||||
# information for every generated page). Doing this is a bit slow,
|
||||
# however. For a medium-sized gem, this increased rdoc's runtime by
|
||||
# about 5% (using the 'time' command-line utility). While this is not
|
||||
# necessarily a problem, I do not want to pessimize rdoc for large
|
||||
# projects, however, and so we only regenerate the lists when the
|
||||
# directory of the output file changes, which seems like a reasonable
|
||||
# optimization.
|
||||
#
|
||||
file_list = {}
|
||||
class_list = {}
|
||||
method_list = {}
|
||||
prev_op_dir = nil
|
||||
|
||||
list.each do |item|
|
||||
next unless item.document_self
|
||||
|
||||
op_file = item.path
|
||||
op_dir = File.dirname(op_file)
|
||||
|
||||
if(op_dir != prev_op_dir)
|
||||
file_list = index_to_links op_file, @files
|
||||
class_list = index_to_links op_file, @classes
|
||||
method_list = index_to_links op_file, RDoc::Generator::Method.all_methods
|
||||
end
|
||||
prev_op_dir = op_dir
|
||||
|
||||
FileUtils.mkdir_p op_dir
|
||||
|
||||
open op_file, 'w' do |io|
|
||||
item.write_on io, file_list, class_list, method_list
|
||||
end
|
||||
|
||||
file_list.clear
|
||||
class_list.clear
|
||||
method_list.clear
|
||||
end
|
||||
end
|
||||
|
||||
def gen_file_index
|
||||
gen_an_index @files, 'Files', @template::FILE_INDEX, "fr_file_index.html"
|
||||
end
|
||||
|
||||
def gen_class_index
|
||||
gen_an_index(@classes, 'Classes', @template::CLASS_INDEX,
|
||||
"fr_class_index.html")
|
||||
end
|
||||
|
||||
def gen_method_index
|
||||
gen_an_index(RDoc::Generator::Method.all_methods, 'Methods',
|
||||
@template::METHOD_INDEX, "fr_method_index.html")
|
||||
end
|
||||
|
||||
def gen_an_index(collection, title, template, filename)
|
||||
template = RDoc::TemplatePage.new @template::FR_INDEX_BODY, template
|
||||
res = []
|
||||
collection.sort.each do |f|
|
||||
if f.document_self
|
||||
res << { "href" => f.path, "name" => f.index_name }
|
||||
end
|
||||
end
|
||||
|
||||
values = {
|
||||
"entries" => res,
|
||||
'title' => CGI.escapeHTML("#{title} [#{@options.title}]"),
|
||||
'list_title' => CGI.escapeHTML(title),
|
||||
'index_url' => @main_url,
|
||||
'charset' => @options.charset,
|
||||
'style_url' => style_url('', @options.css),
|
||||
}
|
||||
|
||||
open filename, 'w' do |f|
|
||||
template.write_html_on(f, values)
|
||||
end
|
||||
end
|
||||
|
||||
##
|
||||
# The main index page is mostly a template frameset, but includes the
|
||||
# initial page. If the <tt>--main</tt> option was given, we use this as
|
||||
# our main page, otherwise we use the first file specified on the command
|
||||
# line.
|
||||
|
||||
def gen_main_index
|
||||
if @template.const_defined? :FRAMELESS then
|
||||
#
|
||||
# If we're using a template without frames, then just redirect
|
||||
# to it from index.html.
|
||||
#
|
||||
# One alternative to this, expanding the main page's template into
|
||||
# index.html, is tricky because the relative URLs will be different
|
||||
# (since index.html is located in at the site's root,
|
||||
# rather than within a files or a classes subdirectory).
|
||||
#
|
||||
open 'index.html', 'w' do |f|
|
||||
f.puts(%{<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">})
|
||||
f.puts(%{<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
|
||||
lang="en">})
|
||||
f.puts(%{<head>})
|
||||
f.puts(%{<title>#{CGI.escapeHTML(@options.title)}</title>})
|
||||
f.puts(%{<meta http-equiv="refresh" content="0; url=#{@main_url}" />})
|
||||
f.puts(%{</head>})
|
||||
f.puts(%{<body></body>})
|
||||
f.puts(%{</html>})
|
||||
end
|
||||
else
|
||||
main = RDoc::TemplatePage.new @template::INDEX
|
||||
|
||||
open 'index.html', 'w' do |f|
|
||||
style_url = style_url '', @options.css
|
||||
|
||||
classes = @classes.sort.map { |klass| klass.value_hash }
|
||||
|
||||
values = {
|
||||
'initial_page' => @main_url,
|
||||
'style_url' => style_url('', @options.css),
|
||||
'title' => CGI.escapeHTML(@options.title),
|
||||
'charset' => @options.charset,
|
||||
'classes' => classes,
|
||||
}
|
||||
|
||||
values['inline_source'] = @options.inline_source
|
||||
|
||||
main.write_html_on f, values
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def index_to_links(output_path, collection)
|
||||
collection.sort.map do |f|
|
||||
next unless f.document_self
|
||||
{ "href" => RDoc::Markup::ToHtml.gen_relative_url(output_path, f.path),
|
||||
"name" => f.index_name }
|
||||
end.compact
|
||||
end
|
||||
|
||||
##
|
||||
# Returns the url of the main page
|
||||
|
||||
def main_url
|
||||
main_page = @options.main_page
|
||||
|
||||
#
|
||||
# If a main page has been specified (--main), then search for it
|
||||
# in the AllReferences array. This allows either files or classes
|
||||
# to be used for the main page.
|
||||
#
|
||||
if main_page then
|
||||
main_page_ref = RDoc::Generator::AllReferences[main_page]
|
||||
|
||||
if main_page_ref then
|
||||
return main_page_ref.path
|
||||
else
|
||||
$stderr.puts "Could not find main page #{main_page}"
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# No main page has been specified, so just use the README.
|
||||
#
|
||||
@files.each do |file|
|
||||
if file.name =~ /^README/ then
|
||||
return file.path
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# There's no README (shame! shame!). Just use the first file
|
||||
# that will be documented.
|
||||
#
|
||||
@files.each do |file|
|
||||
if file.document_self then
|
||||
return file.path
|
||||
end
|
||||
end
|
||||
|
||||
#
|
||||
# There are no files to be documented... Something seems very wrong.
|
||||
#
|
||||
raise RDoc::Error, "Couldn't find anything to document (perhaps :stopdoc: has been used in all classes)!"
|
||||
end
|
||||
private :main_url
|
||||
|
||||
end
|
||||
|
||||
class RDoc::Generator::HTMLInOne < RDoc::Generator::HTML
|
||||
|
||||
def initialize(*args)
|
||||
super
|
||||
end
|
||||
|
||||
##
|
||||
# Build the initial indices and output objects
|
||||
# based on an array of TopLevel objects containing
|
||||
# the extracted information.
|
||||
|
||||
def generate(info)
|
||||
@toplevels = info
|
||||
@hyperlinks = {}
|
||||
|
||||
build_indices
|
||||
generate_xml
|
||||
end
|
||||
|
||||
##
|
||||
# Generate:
|
||||
#
|
||||
# * a list of RDoc::Generator::File objects for each TopLevel object.
|
||||
# * a list of RDoc::Generator::Class objects for each first level
|
||||
# class or module in the TopLevel objects
|
||||
# * a complete list of all hyperlinkable terms (file,
|
||||
# class, module, and method names)
|
||||
|
||||
def build_indices
|
||||
@files, @classes = RDoc::Generator::Context.build_indices(@toplevels,
|
||||
@options)
|
||||
end
|
||||
|
||||
##
|
||||
# Generate all the HTML. For the one-file case, we generate
|
||||
# all the information in to one big hash
|
||||
|
||||
def generate_xml
|
||||
values = {
|
||||
'charset' => @options.charset,
|
||||
'files' => gen_into(@files),
|
||||
'classes' => gen_into(@classes),
|
||||
'title' => CGI.escapeHTML(@options.title),
|
||||
}
|
||||
|
||||
template = RDoc::TemplatePage.new @template::ONE_PAGE
|
||||
|
||||
if @options.op_name
|
||||
opfile = open @options.op_name, 'w'
|
||||
else
|
||||
opfile = $stdout
|
||||
end
|
||||
template.write_html_on(opfile, values)
|
||||
end
|
||||
|
||||
def gen_into(list)
|
||||
res = []
|
||||
list.each do |item|
|
||||
res << item.value_hash
|
||||
end
|
||||
res
|
||||
end
|
||||
end
|
|
@ -1,24 +0,0 @@
|
|||
#
|
||||
# The templates require further refactoring. In particular,
|
||||
# * Some kind of HTML generation library should be used.
|
||||
#
|
||||
# Also, all of the templates require some TLC from a designer.
|
||||
#
|
||||
# Right now, this file contains some constants that are used by all
|
||||
# of the templates.
|
||||
#
|
||||
module RDoc::Generator::HTML::Common
|
||||
XHTML_STRICT_PREAMBLE = <<-EOF
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
EOF
|
||||
|
||||
XHTML_FRAME_PREAMBLE = <<-EOF
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
|
||||
EOF
|
||||
|
||||
HTML_ELEMENT = <<-EOF
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||
EOF
|
||||
end
|
|
@ -1,92 +0,0 @@
|
|||
require 'rdoc/generator/html/html'
|
||||
|
||||
##
|
||||
# = CSS2 RDoc HTML template
|
||||
#
|
||||
# This is a template for RDoc that uses XHTML 1.0 Strict and dictates a
|
||||
# bit more of the appearance of the output to cascading stylesheets than the
|
||||
# default. It was designed for clean inline code display, and uses DHTMl to
|
||||
# toggle the visbility of each method's source with each click on the '[source]'
|
||||
# link.
|
||||
#
|
||||
# Frameless basically is the html template without frames.
|
||||
#
|
||||
# == Authors
|
||||
#
|
||||
# * Michael Granger <ged@FaerieMUD.org>
|
||||
#
|
||||
# Copyright (c) 2002, 2003 The FaerieMUD Consortium. Some rights reserved.
|
||||
#
|
||||
# This work is licensed under the Creative Commons Attribution License. To view
|
||||
# a copy of this license, visit http://creativecommons.org/licenses/by/1.0/ or
|
||||
# send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California
|
||||
# 94305, USA.
|
||||
|
||||
module RDoc::Generator::HTML::FRAMELESS
|
||||
|
||||
FRAMELESS = true
|
||||
|
||||
FONTS = RDoc::Generator::HTML::HTML::FONTS
|
||||
|
||||
STYLE = RDoc::Generator::HTML::HTML::STYLE
|
||||
|
||||
HEADER = RDoc::Generator::HTML::HTML::HEADER
|
||||
|
||||
FOOTER = <<-EOF
|
||||
<div id="popupmenu" class="index">
|
||||
<br />
|
||||
<h1 class="index-entries section-bar">Files</h1>
|
||||
<ul>
|
||||
<% values["file_list"].each do |file| %>
|
||||
<li><a href="<%= file["href"] %>"><%= file["name"] %></a></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
|
||||
<br />
|
||||
<h1 class="index-entries section-bar">Classes</h1>
|
||||
<ul>
|
||||
<% values["class_list"].each do |klass| %>
|
||||
<li><a href="<%= klass["href"] %>"><%= klass["name"] %></a></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
|
||||
<br />
|
||||
<h1 class="index-entries section-bar">Methods</h1>
|
||||
<ul>
|
||||
<% values["method_list"].each do |method| %>
|
||||
<li><a href="<%= method["href"] %>"><%= method["name"] %></a></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
EOF
|
||||
|
||||
FILE_PAGE = RDoc::Generator::HTML::HTML::FILE_PAGE
|
||||
|
||||
CLASS_PAGE = RDoc::Generator::HTML::HTML::CLASS_PAGE
|
||||
|
||||
METHOD_LIST = RDoc::Generator::HTML::HTML::METHOD_LIST
|
||||
|
||||
BODY = HEADER + %{
|
||||
|
||||
<%= template_include %> <!-- banner header -->
|
||||
|
||||
<div id="bodyContent">
|
||||
|
||||
} + METHOD_LIST + %{
|
||||
|
||||
</div>
|
||||
|
||||
} + FOOTER
|
||||
|
||||
SRC_PAGE = RDoc::Generator::HTML::HTML::SRC_PAGE
|
||||
|
||||
FR_INDEX_BODY = RDoc::Generator::HTML::HTML::FR_INDEX_BODY
|
||||
|
||||
FILE_INDEX = RDoc::Generator::HTML::HTML::FILE_INDEX
|
||||
|
||||
CLASS_INDEX = RDoc::Generator::HTML::HTML::CLASS_INDEX
|
||||
|
||||
METHOD_INDEX = RDoc::Generator::HTML::HTML::METHOD_INDEX
|
||||
end
|
|
@ -1,150 +0,0 @@
|
|||
require 'rdoc/generator/html'
|
||||
require 'rdoc/generator/html/kilmerfactory'
|
||||
|
||||
module RDoc::Generator::HTML::HEFSS
|
||||
|
||||
FONTS = "Verdana, Arial, Helvetica, sans-serif"
|
||||
|
||||
CENTRAL_STYLE = <<-EOF
|
||||
body,p { font-family: <%= values["fonts"] %>;
|
||||
color: #000040; background: #BBBBBB;
|
||||
}
|
||||
|
||||
td { font-family: <%= values["fonts"] %>;
|
||||
color: #000040;
|
||||
}
|
||||
|
||||
.attr-rw { font-size: small; color: #444488 }
|
||||
|
||||
.title-row {color: #eeeeff;
|
||||
background: #BBBBDD;
|
||||
}
|
||||
|
||||
.big-title-font { color: white;
|
||||
font-family: <%= values["fonts"] %>;
|
||||
font-size: large;
|
||||
height: 50px}
|
||||
|
||||
.small-title-font { color: purple;
|
||||
font-family: <%= values["fonts"] %>;
|
||||
font-size: small; }
|
||||
|
||||
.aqua { color: purple }
|
||||
|
||||
#diagram img {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.method-name, attr-name {
|
||||
font-family: monospace; font-weight: bold;
|
||||
}
|
||||
|
||||
.tablesubtitle {
|
||||
width: 100%;
|
||||
margin-top: 1ex;
|
||||
margin-bottom: .5ex;
|
||||
padding: 5px 0px 5px 20px;
|
||||
font-size: large;
|
||||
color: purple;
|
||||
background: #BBBBCC;
|
||||
}
|
||||
|
||||
.tablesubsubtitle {
|
||||
width: 100%;
|
||||
margin-top: 1ex;
|
||||
margin-bottom: .5ex;
|
||||
padding: 5px 0px 5px 20px;
|
||||
font-size: medium;
|
||||
color: white;
|
||||
background: #BBBBCC;
|
||||
}
|
||||
|
||||
.name-list {
|
||||
font-family: monospace;
|
||||
margin-left: 40px;
|
||||
margin-bottom: 2ex;
|
||||
line-height: 140%;
|
||||
}
|
||||
|
||||
.description {
|
||||
margin-left: 40px;
|
||||
margin-bottom: 2ex;
|
||||
line-height: 140%;
|
||||
}
|
||||
|
||||
.methodtitle {
|
||||
font-size: medium;
|
||||
text_decoration: none;
|
||||
padding: 3px 3px 3px 20px;
|
||||
color: #0000AA;
|
||||
}
|
||||
|
||||
.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 }
|
||||
|
||||
.srcbut { float: right }
|
||||
EOF
|
||||
|
||||
INDEX_STYLE = <<-EOF
|
||||
body {
|
||||
background-color: #bbbbbb;
|
||||
font-family: #{FONTS};
|
||||
font-size: 11px;
|
||||
font-style: normal;
|
||||
line-height: 14px;
|
||||
color: #000040;
|
||||
}
|
||||
|
||||
div.banner {
|
||||
background: #bbbbcc;
|
||||
color: white;
|
||||
padding: 1;
|
||||
margin: 0;
|
||||
font-size: 90%;
|
||||
font-weight: bold;
|
||||
line-height: 1.1;
|
||||
text-align: center;
|
||||
width: 100%;
|
||||
}
|
||||
EOF
|
||||
|
||||
FACTORY = RDoc::Generator::HTML::
|
||||
KilmerFactory.new(:central_css => CENTRAL_STYLE,
|
||||
:index_css => INDEX_STYLE,
|
||||
:method_list_heading => "Subroutines and Functions",
|
||||
:class_and_module_list_heading => "Classes and Modules",
|
||||
:attribute_list_heading => "Arguments")
|
||||
|
||||
STYLE = FACTORY.get_STYLE()
|
||||
|
||||
METHOD_LIST = FACTORY.get_METHOD_LIST()
|
||||
|
||||
BODY = FACTORY.get_BODY()
|
||||
|
||||
FILE_PAGE = FACTORY.get_FILE_PAGE()
|
||||
|
||||
CLASS_PAGE = FACTORY.get_CLASS_PAGE()
|
||||
|
||||
SRC_PAGE = FACTORY.get_SRC_PAGE()
|
||||
|
||||
FR_INDEX_BODY = FACTORY.get_FR_INDEX_BODY()
|
||||
|
||||
FILE_INDEX = FACTORY.get_FILE_INDEX()
|
||||
|
||||
CLASS_INDEX = FACTORY.get_CLASS_INDEX()
|
||||
|
||||
METHOD_INDEX = FACTORY.get_METHOD_INDEX()
|
||||
|
||||
INDEX = FACTORY.get_INDEX()
|
||||
|
||||
def self.write_extra_pages(values)
|
||||
FACTORY.write_extra_pages(values)
|
||||
end
|
||||
end
|
|
@ -1,769 +0,0 @@
|
|||
require 'rdoc/generator/html'
|
||||
require 'rdoc/generator/html/common'
|
||||
|
||||
##
|
||||
# = CSS2 RDoc HTML template
|
||||
#
|
||||
# This is a template for RDoc that uses XHTML 1.0 Strict and dictates a
|
||||
# bit more of the appearance of the output to cascading stylesheets than the
|
||||
# default. It was designed for clean inline code display, and uses DHTMl to
|
||||
# toggle the visibility of each method's source with each click on the
|
||||
# '[source]' link.
|
||||
#
|
||||
# This template *also* forms the basis of the frameless template.
|
||||
#
|
||||
# == Authors
|
||||
#
|
||||
# * Michael Granger <ged@FaerieMUD.org>
|
||||
#
|
||||
# Copyright (c) 2002, 2003 The FaerieMUD Consortium. Some rights reserved.
|
||||
#
|
||||
# This work is licensed under the Creative Commons Attribution License. To
|
||||
# view a copy of this license, visit
|
||||
# http://creativecommons.org/licenses/by/1.0/ or send a letter to Creative
|
||||
# Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
|
||||
|
||||
module RDoc::Generator::HTML::HTML
|
||||
|
||||
include RDoc::Generator::HTML::Common
|
||||
|
||||
FONTS = "Verdana,Arial,Helvetica,sans-serif"
|
||||
|
||||
STYLE = <<-EOF
|
||||
body {
|
||||
font-family: #{FONTS};
|
||||
font-size: 90%;
|
||||
margin: 0;
|
||||
margin-left: 40px;
|
||||
padding: 0;
|
||||
background: white;
|
||||
color: black;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4 {
|
||||
margin: 0;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 150%;
|
||||
}
|
||||
|
||||
h2,h3,h4 {
|
||||
margin-top: 1em;
|
||||
}
|
||||
|
||||
:link, :visited {
|
||||
background: #eef;
|
||||
color: #039;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
:link:hover, :visited:hover {
|
||||
background: #039;
|
||||
color: #eef;
|
||||
}
|
||||
|
||||
/* Override the base stylesheet's Anchor inside a table cell */
|
||||
td > :link, td > :visited {
|
||||
background: transparent;
|
||||
color: #039;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* and inside a section title */
|
||||
.section-title > :link, .section-title > :visited {
|
||||
background: transparent;
|
||||
color: #eee;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
/* === Structural elements =================================== */
|
||||
|
||||
.index {
|
||||
margin: 0;
|
||||
margin-left: -40px;
|
||||
padding: 0;
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
.index :link, .index :visited {
|
||||
margin-left: 0.7em;
|
||||
}
|
||||
|
||||
.index .section-bar {
|
||||
margin-left: 0px;
|
||||
padding-left: 0.7em;
|
||||
background: #ccc;
|
||||
font-size: small;
|
||||
}
|
||||
|
||||
#classHeader, #fileHeader {
|
||||
width: auto;
|
||||
color: white;
|
||||
padding: 0.5em 1.5em 0.5em 1.5em;
|
||||
margin: 0;
|
||||
margin-left: -40px;
|
||||
border-bottom: 3px solid #006;
|
||||
}
|
||||
|
||||
#classHeader :link, #fileHeader :link,
|
||||
#classHeader :visited, #fileHeader :visited {
|
||||
background: inherit;
|
||||
color: white;
|
||||
}
|
||||
|
||||
#classHeader td, #fileHeader td {
|
||||
background: inherit;
|
||||
color: white;
|
||||
}
|
||||
|
||||
#fileHeader {
|
||||
background: #057;
|
||||
}
|
||||
|
||||
#classHeader {
|
||||
background: #048;
|
||||
}
|
||||
|
||||
.class-name-in-header {
|
||||
font-size: 180%;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
#bodyContent {
|
||||
padding: 0 1.5em 0 1.5em;
|
||||
}
|
||||
|
||||
#description {
|
||||
padding: 0.5em 1.5em;
|
||||
background: #efefef;
|
||||
border: 1px dotted #999;
|
||||
}
|
||||
|
||||
#description h1, #description h2, #description h3,
|
||||
#description h4, #description h5, #description h6 {
|
||||
color: #125;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
#validator-badges {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#validator-badges img {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
#copyright {
|
||||
color: #333;
|
||||
background: #efefef;
|
||||
font: 0.75em sans-serif;
|
||||
margin-top: 5em;
|
||||
margin-bottom: 0;
|
||||
padding: 0.5em 2em;
|
||||
}
|
||||
|
||||
/* === Classes =================================== */
|
||||
|
||||
table.header-table {
|
||||
color: white;
|
||||
font-size: small;
|
||||
}
|
||||
|
||||
.type-note {
|
||||
font-size: small;
|
||||
color: #dedede;
|
||||
}
|
||||
|
||||
.section-bar {
|
||||
color: #333;
|
||||
border-bottom: 1px solid #999;
|
||||
margin-left: -20px;
|
||||
}
|
||||
|
||||
.section-title {
|
||||
background: #79a;
|
||||
color: #eee;
|
||||
padding: 3px;
|
||||
margin-top: 2em;
|
||||
margin-left: -30px;
|
||||
border: 1px solid #999;
|
||||
}
|
||||
|
||||
.top-aligned-row {
|
||||
vertical-align: top
|
||||
}
|
||||
|
||||
.bottom-aligned-row {
|
||||
vertical-align: bottom
|
||||
}
|
||||
|
||||
#diagram img {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/* --- Context section classes ----------------------- */
|
||||
|
||||
.context-row { }
|
||||
|
||||
.context-item-name {
|
||||
font-family: monospace;
|
||||
font-weight: bold;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.context-item-value {
|
||||
font-size: small;
|
||||
color: #448;
|
||||
}
|
||||
|
||||
.context-item-desc {
|
||||
color: #333;
|
||||
padding-left: 2em;
|
||||
}
|
||||
|
||||
/* --- Method classes -------------------------- */
|
||||
|
||||
.method-detail {
|
||||
background: #efefef;
|
||||
padding: 0;
|
||||
margin-top: 0.5em;
|
||||
margin-bottom: 1em;
|
||||
border: 1px dotted #ccc;
|
||||
}
|
||||
|
||||
.method-heading {
|
||||
color: black;
|
||||
background: #ccc;
|
||||
border-bottom: 1px solid #666;
|
||||
padding: 0.2em 0.5em 0 0.5em;
|
||||
}
|
||||
|
||||
.method-signature {
|
||||
color: black;
|
||||
background: inherit;
|
||||
}
|
||||
|
||||
.method-name {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.method-args {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
.method-description {
|
||||
padding: 0 0.5em 0 0.5em;
|
||||
}
|
||||
|
||||
/* --- Source code sections -------------------- */
|
||||
|
||||
:link.source-toggle, :visited.source-toggle {
|
||||
font-size: 90%;
|
||||
}
|
||||
|
||||
div.method-source-code {
|
||||
background: #262626;
|
||||
color: #ffdead;
|
||||
margin: 1em;
|
||||
padding: 0.5em;
|
||||
border: 1px dashed #999;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
div.method-source-code pre {
|
||||
color: #ffdead;
|
||||
}
|
||||
|
||||
/* --- Ruby keyword styles --------------------- */
|
||||
|
||||
.standalone-code {
|
||||
background: #221111;
|
||||
color: #ffdead;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
.ruby-constant {
|
||||
color: #7fffd4;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.ruby-keyword {
|
||||
color: #00ffff;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.ruby-ivar {
|
||||
color: #eedd82;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.ruby-operator {
|
||||
color: #00ffee;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.ruby-identifier {
|
||||
color: #ffdead;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.ruby-node {
|
||||
color: #ffa07a;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.ruby-comment {
|
||||
color: #b22222;
|
||||
font-weight: bold;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.ruby-regexp {
|
||||
color: #ffa07a;
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.ruby-value {
|
||||
color: #7fffd4;
|
||||
background: transparent;
|
||||
}
|
||||
EOF
|
||||
|
||||
|
||||
#####################################################################
|
||||
### H E A D E R T E M P L A T E
|
||||
#####################################################################
|
||||
|
||||
HEADER = XHTML_STRICT_PREAMBLE + HTML_ELEMENT + <<-EOF
|
||||
<head>
|
||||
<title><%= values["title"] %></title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>" />
|
||||
<meta http-equiv="Content-Script-Type" content="text/javascript" />
|
||||
<link rel="stylesheet" href="<%= values["style_url"] %>" type="text/css" media="screen" />
|
||||
<script type="text/javascript">
|
||||
// <![CDATA[
|
||||
|
||||
function popupCode( url ) {
|
||||
window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
|
||||
}
|
||||
|
||||
function toggleCode( id ) {
|
||||
if ( document.getElementById )
|
||||
elem = document.getElementById( id );
|
||||
else if ( document.all )
|
||||
elem = eval( "document.all." + id );
|
||||
else
|
||||
return false;
|
||||
|
||||
elemStyle = elem.style;
|
||||
|
||||
if ( elemStyle.display != "block" ) {
|
||||
elemStyle.display = "block"
|
||||
} else {
|
||||
elemStyle.display = "none"
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// Make codeblocks hidden by default
|
||||
document.writeln( "<style type=\\"text/css\\">div.method-source-code { display: none }<\\/style>" )
|
||||
|
||||
// ]]>
|
||||
</script>
|
||||
|
||||
</head>
|
||||
<body>
|
||||
EOF
|
||||
|
||||
#####################################################################
|
||||
### F O O T E R T E M P L A T E
|
||||
#####################################################################
|
||||
|
||||
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 = <<-EOF
|
||||
<div id="fileHeader">
|
||||
<h1><%= values["short_name"] %></h1>
|
||||
<table class="header-table">
|
||||
<tr class="top-aligned-row">
|
||||
<td><strong>Path:</strong></td>
|
||||
<td><%= values["full_path"] %>
|
||||
<% if values["cvsurl"] then %>
|
||||
(<a href="<%= values["cvsurl"] %>"><acronym title="Concurrent Versioning System">CVS</acronym></a>)
|
||||
<% end %>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="top-aligned-row">
|
||||
<td><strong>Last Update:</strong></td>
|
||||
<td><%= values["dtm_modified"] %></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
EOF
|
||||
|
||||
#####################################################################
|
||||
### 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 = <<-EOF
|
||||
<div id="classHeader">
|
||||
<table class="header-table">
|
||||
<tr class="top-aligned-row">
|
||||
<td><strong><%= values["classmod"] %></strong></td>
|
||||
<td class="class-name-in-header"><%= values["full_name"] %></td>
|
||||
</tr>
|
||||
<tr class="top-aligned-row">
|
||||
<td><strong>In:</strong></td>
|
||||
<td>
|
||||
<% values["infiles"].each do |infiles| %>
|
||||
<% if infiles["full_path_url"] then %>
|
||||
<a href="<%= infiles["full_path_url"] %>">
|
||||
<% end %>
|
||||
<%= infiles["full_path"] %>
|
||||
<% if infiles["full_path_url"] then %>
|
||||
</a>
|
||||
<% end %>
|
||||
<% if infiles["cvsurl"] then %>
|
||||
(<a href="<%= infiles["cvsurl"] %>"><acronym title="Concurrent Versioning System">CVS</acronym></a>)
|
||||
<% end %>
|
||||
<br />
|
||||
<% end %><%# values["infiles"] %>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<% if values["parent"] then %>
|
||||
<tr class="top-aligned-row">
|
||||
<td><strong>Parent:</strong></td>
|
||||
<td>
|
||||
<% if values["par_url"] then %>
|
||||
<a href="<%= values["par_url"] %>">
|
||||
<% end %>
|
||||
<%= values["parent"] %>
|
||||
<% if values["par_url"] then %>
|
||||
</a>
|
||||
<% end %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</table>
|
||||
</div>
|
||||
EOF
|
||||
|
||||
#####################################################################
|
||||
### M E T H O D L I S T T E M P L A T E
|
||||
#####################################################################
|
||||
|
||||
METHOD_LIST = <<-EOF
|
||||
<div id="contextContent">
|
||||
<% if values["diagram"] then %>
|
||||
<div id="diagram">
|
||||
<%= values["diagram"] %>
|
||||
</div>
|
||||
<% end
|
||||
|
||||
if values["description"] then %>
|
||||
<div id="description">
|
||||
<%= values["description"] %>
|
||||
</div>
|
||||
<% end
|
||||
|
||||
if values["requires"] then %>
|
||||
<div id="requires-list">
|
||||
<h3 class="section-bar">Required files</h3>
|
||||
|
||||
<div class="name-list">
|
||||
<% values["requires"].each do |requires| %>
|
||||
<%= href requires["aref"], requires["name"] %>
|
||||
<% end %><%# values["requires"] %>
|
||||
</div>
|
||||
</div>
|
||||
<% end
|
||||
|
||||
if values["toc"] then %>
|
||||
<div id="contents-list">
|
||||
<h3 class="section-bar">Contents</h3>
|
||||
<ul>
|
||||
<% values["toc"].each do |toc| %>
|
||||
<li><a href="#<%= toc["href"] %>"><%= toc["secname"] %></a></li>
|
||||
<% end %><%# values["toc"] %>
|
||||
</ul>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<% if values["methods"] then %>
|
||||
<div id="method-list">
|
||||
<h3 class="section-bar">Methods</h3>
|
||||
|
||||
<div class="name-list">
|
||||
<% values["methods"].each do |methods| %>
|
||||
<%= href methods["aref"], methods["name"] %>
|
||||
<% end %><%# values["methods"] %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<!-- if includes -->
|
||||
<% if values["includes"] then %>
|
||||
<div id="includes">
|
||||
<h3 class="section-bar">Included Modules</h3>
|
||||
|
||||
<div id="includes-list">
|
||||
<% values["includes"].each do |includes| %>
|
||||
<span class="include-name"><%= href includes["aref"], includes["name"] %></span>
|
||||
<% end %><%# values["includes"] %>
|
||||
</div>
|
||||
</div>
|
||||
<% end
|
||||
|
||||
values["sections"].each do |sections| %>
|
||||
<div id="section">
|
||||
<% if sections["sectitle"] then %>
|
||||
<h2 class="section-title"><a name="<%= sections["secsequence"] %>"><%= sections["sectitle"] %></a></h2>
|
||||
<% if sections["seccomment"] then %>
|
||||
<div class="section-comment">
|
||||
<%= sections["seccomment"] %>
|
||||
</div>
|
||||
<% end
|
||||
end
|
||||
|
||||
if sections["classlist"] then %>
|
||||
<div id="class-list">
|
||||
<h3 class="section-bar">Classes and Modules</h3>
|
||||
|
||||
<%= sections["classlist"] %>
|
||||
</div>
|
||||
<% end
|
||||
|
||||
if sections["constants"] then %>
|
||||
<div id="constants-list">
|
||||
<h3 class="section-bar">Constants</h3>
|
||||
|
||||
<div class="name-list">
|
||||
<table summary="Constants">
|
||||
<% sections["constants"].each do |constants| %>
|
||||
<tr class="top-aligned-row context-row">
|
||||
<td class="context-item-name"><%= constants["name"] %></td>
|
||||
<td>=</td>
|
||||
<td class="context-item-value"><%= constants["value"] %></td>
|
||||
<% if constants["desc"] then %>
|
||||
<td> </td>
|
||||
<td class="context-item-desc"><%= constants["desc"] %></td>
|
||||
<% end %>
|
||||
</tr>
|
||||
<% end %><%# sections["constants"] %>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<% end
|
||||
|
||||
if sections["aliases"] then %>
|
||||
<div id="aliases-list">
|
||||
<h3 class="section-bar">External Aliases</h3>
|
||||
|
||||
<div class="name-list">
|
||||
<table summary="aliases">
|
||||
<% sections["aliases"].each do |aliases| %>
|
||||
<tr class="top-aligned-row context-row">
|
||||
<td class="context-item-name"><%= aliases["old_name"] %></td>
|
||||
<td>-></td>
|
||||
<td class="context-item-value"><%= aliases["new_name"] %></td>
|
||||
</tr>
|
||||
<% if aliases["desc"] then %>
|
||||
<tr class="top-aligned-row context-row">
|
||||
<td> </td>
|
||||
<td colspan="2" class="context-item-desc"><%= aliases["desc"] %></td>
|
||||
</tr>
|
||||
<% end
|
||||
end %><%# sections["aliases"] %>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<% if sections["attributes"] then %>
|
||||
<div id="attribute-list">
|
||||
<h3 class="section-bar">Attributes</h3>
|
||||
|
||||
<div class="name-list">
|
||||
<table>
|
||||
<% sections["attributes"].each do |attribute| %>
|
||||
<tr class="top-aligned-row context-row">
|
||||
<td class="context-item-name"><%= attribute["name"] %></td>
|
||||
<% if attribute["rw"] then %>
|
||||
<td class="context-item-value"> [<%= attribute["rw"] %>] </td>
|
||||
<% end
|
||||
unless attribute["rw"] then %>
|
||||
<td class="context-item-value"> </td>
|
||||
<% end %>
|
||||
<td class="context-item-desc"><%= attribute["a_desc"] %></td>
|
||||
</tr>
|
||||
<% end %><%# sections["attributes"] %>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<!-- if method_list -->
|
||||
<% if sections["method_list"] then %>
|
||||
<div id="methods">
|
||||
<% sections["method_list"].each do |method_list|
|
||||
if method_list["methods"] then %>
|
||||
<h3 class="section-bar"><%= method_list["type"] %> <%= method_list["category"] %> methods</h3>
|
||||
|
||||
<% method_list["methods"].each do |methods| %>
|
||||
<div id="method-<%= methods["aref"] %>" class="method-detail">
|
||||
<a name="<%= methods["aref"] %>"></a>
|
||||
|
||||
<div class="method-heading">
|
||||
<% if methods["codeurl"] then %>
|
||||
<a href="<%= methods["codeurl"] %>" target="Code" class="method-signature"
|
||||
onclick="popupCode('<%= methods["codeurl"] %>');return false;">
|
||||
<% end
|
||||
if methods["sourcecode"] then %>
|
||||
<a href="#<%= methods["aref"] %>" class="method-signature">
|
||||
<% end
|
||||
if methods["callseq"] then %>
|
||||
<span class="method-name"><%= methods["callseq"] %></span>
|
||||
<% end
|
||||
unless methods["callseq"] then %>
|
||||
<span class="method-name"><%= methods["name"] %></span><span class="method-args"><%= methods["params"] %></span>
|
||||
<% end
|
||||
if methods["codeurl"] then %>
|
||||
</a>
|
||||
<% end
|
||||
if methods["sourcecode"] then %>
|
||||
</a>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<div class="method-description">
|
||||
<% if methods["m_desc"] then %>
|
||||
<%= methods["m_desc"] %>
|
||||
<% end
|
||||
if methods["sourcecode"] then %>
|
||||
<p><a class="source-toggle" href="#"
|
||||
onclick="toggleCode('<%= methods["aref"] %>-source');return false;">[Source]</a></p>
|
||||
<div class="method-source-code" id="<%= methods["aref"] %>-source">
|
||||
<pre>
|
||||
<%= methods["sourcecode"] %>
|
||||
</pre>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<% end %><%# method_list["methods"] %><%
|
||||
end
|
||||
end %><%# sections["method_list"] %>
|
||||
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %><%# values["sections"] %>
|
||||
EOF
|
||||
|
||||
#####################################################################
|
||||
### B O D Y T E M P L A T E
|
||||
#####################################################################
|
||||
|
||||
BODY = HEADER + %{
|
||||
|
||||
<%= template_include %> <!-- banner header -->
|
||||
|
||||
<div id="bodyContent">
|
||||
|
||||
} + METHOD_LIST + %{
|
||||
|
||||
</div>
|
||||
|
||||
} + FOOTER
|
||||
|
||||
#####################################################################
|
||||
### S O U R C E C O D E T E M P L A T E
|
||||
#####################################################################
|
||||
|
||||
SRC_PAGE = XHTML_STRICT_PREAMBLE + HTML_ELEMENT + <<-EOF
|
||||
<head>
|
||||
<title><%= values["title"] %></title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>" />
|
||||
<link rel="stylesheet" href="<%= values["style_url"] %>" type="text/css" media="screen" />
|
||||
</head>
|
||||
<body class="standalone-code">
|
||||
<pre><%= values["code"] %></pre>
|
||||
</body>
|
||||
</html>
|
||||
EOF
|
||||
|
||||
|
||||
#####################################################################
|
||||
### I N D E X F I L E T E M P L A T E S
|
||||
#####################################################################
|
||||
|
||||
FR_INDEX_BODY = %{<%= template_include %>}
|
||||
|
||||
FILE_INDEX = XHTML_STRICT_PREAMBLE + HTML_ELEMENT + <<-EOF
|
||||
<!--
|
||||
|
||||
<%= values["title"] %>
|
||||
|
||||
-->
|
||||
<head>
|
||||
<title><%= values["title"] %></title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>" />
|
||||
<link rel="stylesheet" href="<%= values["style_url"] %>" type="text/css" />
|
||||
<base target="docwin" />
|
||||
</head>
|
||||
<body>
|
||||
<div class="index">
|
||||
<h1 class="section-bar"><%= values["list_title"] %></h1>
|
||||
<div id="index-entries">
|
||||
<% values["entries"].each do |entries| %>
|
||||
<a href="<%= entries["href"] %>"><%= entries["name"] %></a><br />
|
||||
<% end %><%# values["entries"] %>
|
||||
</div>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
EOF
|
||||
|
||||
CLASS_INDEX = FILE_INDEX
|
||||
METHOD_INDEX = FILE_INDEX
|
||||
|
||||
INDEX = XHTML_FRAME_PREAMBLE + HTML_ELEMENT + <<-EOF
|
||||
<!--
|
||||
|
||||
<%= values["title"] %>
|
||||
|
||||
-->
|
||||
<head>
|
||||
<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%">
|
||||
<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="<%= values["initial_page"] %>" name="docwin" />
|
||||
</frameset>
|
||||
</html>
|
||||
EOF
|
||||
|
||||
end
|
||||
|
|
@ -1,151 +0,0 @@
|
|||
require 'rdoc/generator/html'
|
||||
require 'rdoc/generator/html/kilmerfactory'
|
||||
|
||||
module RDoc::Generator::HTML::KILMER
|
||||
|
||||
FONTS = "Verdana, Arial, Helvetica, sans-serif"
|
||||
|
||||
CENTRAL_STYLE = <<-EOF
|
||||
body,td,p { font-family: <%= values["fonts"] %>;
|
||||
color: #000040;
|
||||
}
|
||||
|
||||
.attr-rw { font-size: xx-small; color: #444488 }
|
||||
|
||||
.title-row { background-color: #CCCCFF;
|
||||
color: #000010;
|
||||
}
|
||||
|
||||
.big-title-font {
|
||||
color: black;
|
||||
font-weight: bold;
|
||||
font-family: <%= values["fonts"] %>;
|
||||
font-size: large;
|
||||
height: 60px;
|
||||
padding: 10px 3px 10px 3px;
|
||||
}
|
||||
|
||||
.small-title-font { color: black;
|
||||
font-family: <%= values["fonts"] %>;
|
||||
font-size:10; }
|
||||
|
||||
.aqua { color: black }
|
||||
|
||||
#diagram img {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
.method-name, .attr-name {
|
||||
font-family: font-family: <%= values["fonts"] %>;
|
||||
font-weight: bold;
|
||||
font-size: small;
|
||||
margin-left: 20px;
|
||||
color: #000033;
|
||||
}
|
||||
|
||||
.tablesubtitle, .tablesubsubtitle {
|
||||
width: 100%;
|
||||
margin-top: 1ex;
|
||||
margin-bottom: .5ex;
|
||||
padding: 5px 0px 5px 3px;
|
||||
font-size: large;
|
||||
color: black;
|
||||
background-color: #CCCCFF;
|
||||
border: thin;
|
||||
}
|
||||
|
||||
.name-list {
|
||||
margin-left: 5px;
|
||||
margin-bottom: 2ex;
|
||||
line-height: 105%;
|
||||
}
|
||||
|
||||
.description {
|
||||
margin-left: 5px;
|
||||
margin-bottom: 2ex;
|
||||
line-height: 105%;
|
||||
font-size: small;
|
||||
}
|
||||
|
||||
.methodtitle {
|
||||
font-size: small;
|
||||
font-weight: bold;
|
||||
text-decoration: none;
|
||||
color: #000033;
|
||||
background: #ccc;
|
||||
}
|
||||
|
||||
.srclink {
|
||||
font-size: small;
|
||||
font-weight: bold;
|
||||
text-decoration: none;
|
||||
color: #0000DD;
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
.srcbut { float: right }
|
||||
|
||||
.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 }
|
||||
EOF
|
||||
|
||||
INDEX_STYLE = <<-EOF
|
||||
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%;
|
||||
}
|
||||
EOF
|
||||
|
||||
FACTORY = RDoc::Generator::HTML::
|
||||
KilmerFactory.new(:central_css => CENTRAL_STYLE,
|
||||
:index_css => INDEX_STYLE)
|
||||
|
||||
STYLE = FACTORY.get_STYLE()
|
||||
|
||||
METHOD_LIST = FACTORY.get_METHOD_LIST()
|
||||
|
||||
BODY = FACTORY.get_BODY()
|
||||
|
||||
FILE_PAGE = FACTORY.get_FILE_PAGE()
|
||||
|
||||
CLASS_PAGE = FACTORY.get_CLASS_PAGE()
|
||||
|
||||
SRC_PAGE = FACTORY.get_SRC_PAGE()
|
||||
|
||||
FR_INDEX_BODY = FACTORY.get_FR_INDEX_BODY()
|
||||
|
||||
FILE_INDEX = FACTORY.get_FILE_INDEX()
|
||||
|
||||
CLASS_INDEX = FACTORY.get_CLASS_INDEX()
|
||||
|
||||
METHOD_INDEX = FACTORY.get_METHOD_INDEX()
|
||||
|
||||
INDEX = FACTORY.get_INDEX()
|
||||
|
||||
def self.write_extra_pages(values)
|
||||
FACTORY.write_extra_pages(values)
|
||||
end
|
||||
end
|
|
@ -1,427 +0,0 @@
|
|||
require 'rdoc/generator/html'
|
||||
require 'rdoc/generator/html/common'
|
||||
|
||||
#
|
||||
# This class generates Kilmer-style templates. Right now,
|
||||
# rdoc is shipped with two such templates:
|
||||
# * kilmer
|
||||
# * hefss
|
||||
#
|
||||
# Kilmer-style templates use frames. The left side of the page has
|
||||
# three frames stacked on top of each other: one lists
|
||||
# files, one lists classes, and one lists methods. If source code
|
||||
# is not inlined, an additional frame runs across the bottom of
|
||||
# the page and will be used to display method source code.
|
||||
# The central (and largest frame) display class and file
|
||||
# pages.
|
||||
#
|
||||
# The constructor of this class accepts a Hash containing stylistic
|
||||
# attributes. Then, a get_BLAH instance method of this class returns a
|
||||
# value for the template's BLAH constant. get_BODY, for instance, returns
|
||||
# the value of the template's BODY constant.
|
||||
#
|
||||
class RDoc::Generator::HTML::KilmerFactory
|
||||
|
||||
include RDoc::Generator::HTML::Common
|
||||
|
||||
#
|
||||
# The contents of the stylesheet that should be used for the
|
||||
# central frame (for the class and file pages).
|
||||
#
|
||||
# This must be specified in the Hash passed to the constructor.
|
||||
#
|
||||
attr_reader :central_css
|
||||
|
||||
#
|
||||
# The contents of the stylesheet that should be used for the
|
||||
# index pages.
|
||||
#
|
||||
# This must be specified in the Hash passed to the constructor.
|
||||
#
|
||||
attr_reader :index_css
|
||||
|
||||
#
|
||||
# The heading that should be displayed before listing methods.
|
||||
#
|
||||
# If not supplied, this defaults to "Methods".
|
||||
#
|
||||
attr_reader :method_list_heading
|
||||
|
||||
#
|
||||
# The heading that should be displayed before listing classes and
|
||||
# modules.
|
||||
#
|
||||
# If not supplied, this defaults to "Classes and Modules".
|
||||
#
|
||||
attr_reader :class_and_module_list_heading
|
||||
|
||||
#
|
||||
# The heading that should be displayed before listing attributes.
|
||||
#
|
||||
# If not supplied, this defaults to "Attributes".
|
||||
#
|
||||
attr_reader :attribute_list_heading
|
||||
|
||||
#
|
||||
# ====Description:
|
||||
# This method constructs a KilmerFactory instance, which
|
||||
# can be used to build Kilmer-style template classes.
|
||||
# The +style_attributes+ argument is a Hash that contains the
|
||||
# values of the classes attributes (Symbols mapped to Strings).
|
||||
#
|
||||
# ====Parameters:
|
||||
# [style_attributes]
|
||||
# A Hash describing the appearance of the Kilmer-style.
|
||||
#
|
||||
def initialize(style_attributes)
|
||||
@central_css = style_attributes[:central_css]
|
||||
if(!@central_css)
|
||||
raise ArgumentError, "did not specify a value for :central_css"
|
||||
end
|
||||
|
||||
@index_css = style_attributes[:index_css]
|
||||
if(!@index_css)
|
||||
raise ArgumentError, "did not specify a value for :index_css"
|
||||
end
|
||||
|
||||
@method_list_heading = style_attributes[:method_list_heading]
|
||||
if(!@method_list_heading)
|
||||
@method_list_heading = "Methods"
|
||||
end
|
||||
|
||||
@class_and_module_list_heading = style_attributes[:class_and_module_list_heading]
|
||||
if(!@class_and_module_list_heading)
|
||||
@class_and_module_list_heading = "Classes and Modules"
|
||||
end
|
||||
|
||||
@attribute_list_heading = style_attributes[:attribute_list_heading]
|
||||
if(!@attribute_list_heading)
|
||||
@attribute_list_heading = "Attributes"
|
||||
end
|
||||
end
|
||||
|
||||
def get_STYLE
|
||||
return @central_css
|
||||
end
|
||||
|
||||
def get_METHOD_LIST
|
||||
return %{
|
||||
<% if values["diagram"] then %>
|
||||
<div id="diagram">
|
||||
<table width="100%"><tr><td align="center">
|
||||
<%= values["diagram"] %>
|
||||
</td></tr></table>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<% if values["description"] then %>
|
||||
<div class="description"><%= values["description"] %></div>
|
||||
<% end %>
|
||||
|
||||
<% if values["requires"] then %>
|
||||
<table cellpadding="5" width="100%">
|
||||
<tr><td class="tablesubtitle">Required files</td></tr>
|
||||
</table><br />
|
||||
<div class="name-list">
|
||||
<% values["requires"].each do |requires| %>
|
||||
<%= href requires["aref"], requires["name"] %>
|
||||
<% end %><%# values["requires"] %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<% if values["methods"] then %>
|
||||
<table cellpadding="5" width="100%">
|
||||
<tr><td class="tablesubtitle">#{@method_list_heading}</td></tr>
|
||||
</table><br />
|
||||
<div class="name-list">
|
||||
<% values["methods"].each do |methods| %>
|
||||
<%= href methods["aref"], methods["name"] %>,
|
||||
<% end %><%# values["methods"] %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<% if values["includes"] then %>
|
||||
<div class="tablesubsubtitle">Included modules</div><br />
|
||||
<div class="name-list">
|
||||
<% values["includes"].each do |includes| %>
|
||||
<span class="method-name"><%= href includes["aref"], includes["name"] %></span>
|
||||
<% end %><%# values["includes"] %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<% values["sections"].each do |sections| %>
|
||||
<div id="section">
|
||||
<% if sections["sectitle"] then %>
|
||||
<h2 class="section-title"><a name="<%= sections["secsequence"] %>"><%= sections["sectitle"] %></a></h2>
|
||||
<% if sections["seccomment"] then %>
|
||||
<div class="section-comment">
|
||||
<%= sections["seccomment"] %>
|
||||
</div>
|
||||
<% end %>
|
||||
<% end %>
|
||||
<% if sections["attributes"] then %>
|
||||
<table cellpadding="5" width="100%">
|
||||
<tr><td class="tablesubtitle">#{@attribute_list_heading}</td></tr>
|
||||
</table><br />
|
||||
<table cellspacing="5">
|
||||
<% sections["attributes"].each do |attributes| %>
|
||||
<tr valign="top">
|
||||
<% if attributes["rw"] then %>
|
||||
<td align="center" class="attr-rw"> [<%= attributes["rw"] %>] </td>
|
||||
<% end %>
|
||||
<% unless attributes["rw"] then %>
|
||||
<td></td>
|
||||
<% end %>
|
||||
<td class="attr-name"><%= attributes["name"] %></td>
|
||||
<td><%= attributes["a_desc"] %></td>
|
||||
</tr>
|
||||
<% end %><%# sections["attributes"] %>
|
||||
</table>
|
||||
<% end %>
|
||||
|
||||
<% if sections["classlist"] then %>
|
||||
<table cellpadding="5" width="100%">
|
||||
<tr><td class="tablesubtitle">#{@class_and_module_list_heading}</td></tr>
|
||||
</table><br />
|
||||
<%= sections["classlist"] %><br />
|
||||
<% end %>
|
||||
|
||||
<% 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"><%= method_list["type"] %> <%= method_list["category"] %> methods</td></tr>
|
||||
</table>
|
||||
<% method_list["methods"].each do |methods| %>
|
||||
<table width="100%" cellspacing="0" cellpadding="5" border="0">
|
||||
<tr><td class="methodtitle">
|
||||
<a name="<%= methods["aref"] %>">
|
||||
<% if methods["callseq"] then %>
|
||||
<b><%= methods["callseq"] %></b>
|
||||
<% end %>
|
||||
<% unless methods["callseq"] then %>
|
||||
<b><%= methods["name"] %></b><%= methods["params"] %>
|
||||
<% end %>
|
||||
</a>
|
||||
<% if methods["codeurl"] then %>
|
||||
<a href="<%= methods["codeurl"] %>" target="source" class="srclink">src</a>
|
||||
<% end %>
|
||||
</td></tr>
|
||||
</table>
|
||||
<% if methods["m_desc"] then %>
|
||||
<div class="description">
|
||||
<%= methods["m_desc"] %>
|
||||
</div>
|
||||
<% end %>
|
||||
<% if methods["aka"] then %>
|
||||
<div class="aka">
|
||||
This method is also aliased as
|
||||
<% methods["aka"].each do |aka| %>
|
||||
<a href="<%= methods["aref"] %>"><%= methods["name"] %></a>
|
||||
<% end %><%# methods["aka"] %>
|
||||
</div>
|
||||
<% end %>
|
||||
<% if methods["sourcecode"] then %>
|
||||
<pre class="source">
|
||||
<%= methods["sourcecode"] %>
|
||||
</pre>
|
||||
<% end %>
|
||||
<% end %><%# method_list["methods"] %>
|
||||
<% end %>
|
||||
<% end %><%# sections["method_list"] %>
|
||||
<% end %>
|
||||
|
||||
<% end %><%# values["sections"] %>
|
||||
</div>
|
||||
}
|
||||
end
|
||||
|
||||
def get_BODY
|
||||
return XHTML_STRICT_PREAMBLE + HTML_ELEMENT + %{
|
||||
<head>
|
||||
<title><%= values["title"] %></title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>" />
|
||||
<link rel="stylesheet" href="<%= values["style_url"] %>" type="text/css" media="screen" />
|
||||
<script type="text/javascript">
|
||||
<!--
|
||||
function popCode(url) {
|
||||
parent.frames.source.location = url
|
||||
}
|
||||
//-->
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<div class="bodyContent">
|
||||
<%= template_include %> <!-- banner header -->
|
||||
|
||||
#{get_METHOD_LIST()}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
}
|
||||
end
|
||||
|
||||
def get_FILE_PAGE
|
||||
return %{
|
||||
<table width="100%">
|
||||
<tr class="title-row">
|
||||
<td><table width="100%"><tr>
|
||||
<td class="big-title-font" colspan="2">File<br /><%= 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"><%= values["full_path"] %>
|
||||
<% if values["cvsurl"] then %>
|
||||
(<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"><%= values["dtm_modified"] %></td>
|
||||
</tr>
|
||||
</table>
|
||||
</td></tr></table></td>
|
||||
</tr>
|
||||
</table><br />
|
||||
}
|
||||
end
|
||||
|
||||
def get_CLASS_PAGE
|
||||
return %{
|
||||
<table width="100%" border="0" cellspacing="0">
|
||||
<tr class="title-row">
|
||||
<td class="big-title-font">
|
||||
<%= values["classmod"] %><br /><%= 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">
|
||||
<% values["infiles"].each do |infiles| %>
|
||||
<%= href infiles["full_path_url"], infiles["full_path"] %>
|
||||
<% if infiles["cvsurl"] then %>
|
||||
(<a href="<%= infiles["cvsurl"] %>"><acronym title="Concurrent Versioning System">CVS</acronym></a>)
|
||||
<% end %>
|
||||
<% end %><%# values["infiles"] %>
|
||||
</td>
|
||||
</tr>
|
||||
<% if values["parent"] then %>
|
||||
<tr>
|
||||
<td class="small-title-font">Parent:</td>
|
||||
<td class="small-title-font">
|
||||
<% if values["par_url"] then %>
|
||||
<a href="<%= values["par_url"] %>" class="cyan">
|
||||
<% end %>
|
||||
<%= values["parent"] %>
|
||||
<% if values["par_url"] then %>
|
||||
</a>
|
||||
<% end %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table><br />
|
||||
}
|
||||
end
|
||||
|
||||
def get_SRC_PAGE
|
||||
return XHTML_STRICT_PREAMBLE + HTML_ELEMENT + %{
|
||||
<head><title><%= values["title"] %></title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>" />
|
||||
<link rel="stylesheet" href="<%= values["style_url"] %>" type="text/css" media="screen" />
|
||||
</head>
|
||||
<body>
|
||||
<pre><%= values["code"] %></pre>
|
||||
</body>
|
||||
</html>
|
||||
}
|
||||
end
|
||||
|
||||
def get_FR_INDEX_BODY
|
||||
return %{<%= template_include %>}
|
||||
end
|
||||
|
||||
def get_FILE_INDEX
|
||||
return XHTML_STRICT_PREAMBLE + HTML_ELEMENT + %{
|
||||
<head>
|
||||
<title><%= values["title"] %></title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>" />
|
||||
<style type="text/css">
|
||||
<!--
|
||||
#{@index_css}
|
||||
-->
|
||||
</style>
|
||||
<base target="docwin" />
|
||||
</head>
|
||||
<body>
|
||||
<div class="index">
|
||||
<div class="banner"><%= values["list_title"] %></div>
|
||||
<% values["entries"].each do |entries| %>
|
||||
<a href="<%= entries["href"] %>"><%= entries["name"] %></a><br />
|
||||
<% end %><%# values["entries"] %>
|
||||
</div>
|
||||
</body></html>
|
||||
}
|
||||
end
|
||||
|
||||
def get_CLASS_INDEX
|
||||
return get_FILE_INDEX
|
||||
end
|
||||
|
||||
def get_METHOD_INDEX
|
||||
return get_FILE_INDEX
|
||||
end
|
||||
|
||||
def get_INDEX
|
||||
return XHTML_FRAME_PREAMBLE + HTML_ELEMENT + %{
|
||||
<head>
|
||||
<title><%= values["title"] %></title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>" />
|
||||
</head>
|
||||
|
||||
<frameset cols="20%,*">
|
||||
<frameset rows="15%,35%,50%">
|
||||
<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>
|
||||
<% if values["inline_source"] then %>
|
||||
<frame src="<%= values["initial_page"] %>" name="docwin" />
|
||||
<% end %>
|
||||
<% unless values["inline_source"] then %>
|
||||
<frameset rows="80%,20%">
|
||||
<frame src="<%= values["initial_page"] %>" name="docwin" />
|
||||
<frame src="blank.html" name="source" />
|
||||
</frameset>
|
||||
<% end %>
|
||||
</frameset>
|
||||
|
||||
</html>
|
||||
}
|
||||
end
|
||||
|
||||
def get_BLANK
|
||||
# This will be displayed in the source code frame before
|
||||
# any source code has been selected.
|
||||
return XHTML_STRICT_PREAMBLE + HTML_ELEMENT + %{
|
||||
<head>
|
||||
<title>Source Code Frame <%= values["title_suffix"] %></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>
|
||||
</body>
|
||||
</html>
|
||||
}
|
||||
end
|
||||
|
||||
def write_extra_pages(values)
|
||||
template = RDoc::TemplatePage.new(get_BLANK())
|
||||
File.open("blank.html", "w") { |f| template.write_html_on(f, values) }
|
||||
end
|
||||
|
||||
end
|
|
@ -1,122 +0,0 @@
|
|||
require 'rdoc/generator/html'
|
||||
require 'rdoc/generator/html/common'
|
||||
|
||||
module RDoc::Generator::HTML::ONE_PAGE_HTML
|
||||
|
||||
include RDoc::Generator::HTML::Common
|
||||
|
||||
CONTENTS_XML = <<-EOF
|
||||
<% if defined? classes and classes["description"] then %>
|
||||
<%= classes["description"] %>
|
||||
<% end %>
|
||||
|
||||
<% if defined? files and files["requires"] then %>
|
||||
<h4>Requires:</h4>
|
||||
<ul>
|
||||
<% 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>
|
||||
<% end %>
|
||||
|
||||
<% if defined? classes and classes["includes"] then %>
|
||||
<h4>Includes</h4>
|
||||
<ul>
|
||||
<% 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>
|
||||
<% end %>
|
||||
|
||||
<% 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>
|
||||
<% 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 methods["m_desc"] then %>
|
||||
<%= methods["m_desc"] %>
|
||||
<% end %>
|
||||
|
||||
<% if methods["sourcecode"] then %>
|
||||
<blockquote><pre>
|
||||
<%= methods["sourcecode"] %>
|
||||
</pre></blockquote>
|
||||
<% end %>
|
||||
<% end %><%# method_list["methods"] %>
|
||||
<% end %>
|
||||
<% end %><%# sections["method_list"] %>
|
||||
<% end %>
|
||||
<% end %><%# classes["sections"] %>
|
||||
<% end %>
|
||||
EOF
|
||||
|
||||
ONE_PAGE = XHTML_STRICT_PREAMBLE + HTML_ELEMENT + %{
|
||||
<head>
|
||||
<title><%= values["title"] %></title>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>" />
|
||||
</head>
|
||||
<body>
|
||||
<% values["files"].each do |files| %>
|
||||
<h2>File: <a name="<%= files["href"] %>"><%= files["short_name"] %></a></h2>
|
||||
<table>
|
||||
<tr><td>Path:</td><td><%= files["full_path"] %></td></tr>
|
||||
<tr><td>Modified:</td><td><%= files["dtm_modified"] %></td></tr>
|
||||
</table>
|
||||
} + CONTENTS_XML + %{
|
||||
<% end %><%# values["files"] %>
|
||||
|
||||
<% if values["classes"] then %>
|
||||
<h2>Classes</h2>
|
||||
<% values["classes"].each do |classes| %>
|
||||
<% if classes["parent"] then %>
|
||||
<h3><%= classes["classmod"] %> <a name="<%= classes["href"] %>"><%= classes["full_name"] %></a> < <%= href classes["par_url"], classes["parent"] %></h3>
|
||||
<% end %>
|
||||
<% unless classes["parent"] then %>
|
||||
<h3><%= classes["classmod"] %> <%= classes["full_name"] %></h3>
|
||||
<% end %>
|
||||
|
||||
<% if classes["infiles"] then %>
|
||||
(in files
|
||||
<% classes["infiles"].each do |infiles| %>
|
||||
<%= href infiles["full_path_url"], infiles["full_path"] %>
|
||||
<% end %><%# classes["infiles"] %>
|
||||
)
|
||||
<% end %>
|
||||
} + CONTENTS_XML + %{
|
||||
<% end %><%# values["classes"] %>
|
||||
<% end %>
|
||||
</body>
|
||||
</html>
|
||||
}
|
||||
|
||||
end
|
||||
|
171
lib/rdoc/generator/markup.rb
Normal file
|
@ -0,0 +1,171 @@
|
|||
require 'rdoc/text'
|
||||
require 'rdoc/code_objects'
|
||||
require 'rdoc/generator'
|
||||
require 'rdoc/markup/to_html_crossref'
|
||||
|
||||
##
|
||||
# Handle common RDoc::Markup tasks for various CodeObjects
|
||||
|
||||
module RDoc::Generator::Markup
|
||||
|
||||
##
|
||||
# Generates a relative URL from this object's path to +target_path+
|
||||
|
||||
def aref_to(target_path)
|
||||
RDoc::Markup::ToHtml.gen_relative_url path, target_path
|
||||
end
|
||||
|
||||
##
|
||||
# Generates a relative URL from +from_path+ to this object's path
|
||||
|
||||
def as_href(from_path)
|
||||
RDoc::Markup::ToHtml.gen_relative_url from_path, path
|
||||
end
|
||||
|
||||
##
|
||||
# Handy wrapper for marking up this object's comment
|
||||
|
||||
def description
|
||||
markup @comment
|
||||
end
|
||||
|
||||
##
|
||||
# Creates an RDoc::Markup::ToHtmlCrossref formatter
|
||||
|
||||
def formatter
|
||||
return @formatter if defined? @formatter
|
||||
|
||||
show_hash = RDoc::RDoc.current.options.show_hash
|
||||
this = RDoc::Context === self ? self : @parent
|
||||
@formatter = RDoc::Markup::ToHtmlCrossref.new this.path, this, show_hash
|
||||
end
|
||||
|
||||
##
|
||||
# Build a webcvs URL starting for the given +url+ with +full_path+ appended
|
||||
# as the destination path. If +url+ contains '%s' +full_path+ will be
|
||||
# sprintf'd into +url+ instead.
|
||||
|
||||
def cvs_url(url, full_path)
|
||||
if /%s/ =~ url then
|
||||
sprintf url, full_path
|
||||
else
|
||||
url + full_path
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class RDoc::AnyMethod
|
||||
|
||||
include RDoc::Generator::Markup
|
||||
|
||||
##
|
||||
# Prepend +src+ with line numbers. Relies on the first line of a source
|
||||
# code listing having:
|
||||
#
|
||||
# # File xxxxx, line dddd
|
||||
|
||||
def add_line_numbers(src)
|
||||
if src =~ /\A.*, line (\d+)/ then
|
||||
first = $1.to_i - 1
|
||||
last = first + src.count("\n")
|
||||
size = last.to_s.length
|
||||
|
||||
line = first
|
||||
src.gsub!(/^/) do
|
||||
res = if line == first then
|
||||
" " * (size + 2)
|
||||
else
|
||||
"%2$*1$d: " % [size, line]
|
||||
end
|
||||
|
||||
line += 1
|
||||
res
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
##
|
||||
# Turns the method's token stream into HTML
|
||||
|
||||
def markup_code
|
||||
return '' unless @token_stream
|
||||
|
||||
src = ""
|
||||
|
||||
@token_stream.each do |t|
|
||||
next unless t
|
||||
# style = STYLE_MAP[t.class]
|
||||
style = case t
|
||||
when RDoc::RubyToken::TkCONSTANT then "ruby-constant"
|
||||
when RDoc::RubyToken::TkKW then "ruby-keyword kw"
|
||||
when RDoc::RubyToken::TkIVAR then "ruby-ivar"
|
||||
when RDoc::RubyToken::TkOp then "ruby-operator"
|
||||
when RDoc::RubyToken::TkId then "ruby-identifier"
|
||||
when RDoc::RubyToken::TkNode then "ruby-node"
|
||||
when RDoc::RubyToken::TkCOMMENT then "ruby-comment cmt"
|
||||
when RDoc::RubyToken::TkREGEXP then "ruby-regexp re"
|
||||
when RDoc::RubyToken::TkSTRING then "ruby-value str"
|
||||
when RDoc::RubyToken::TkVal then "ruby-value"
|
||||
else
|
||||
nil
|
||||
end
|
||||
|
||||
text = CGI.escapeHTML t.text
|
||||
|
||||
if style
|
||||
src << "<span class=\"#{style}\">#{text}</span>"
|
||||
else
|
||||
src << text
|
||||
end
|
||||
end
|
||||
|
||||
add_line_numbers src
|
||||
|
||||
src
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
class RDoc::Attr
|
||||
|
||||
include RDoc::Generator::Markup
|
||||
|
||||
end
|
||||
|
||||
class RDoc::Constant
|
||||
|
||||
include RDoc::Generator::Markup
|
||||
|
||||
end
|
||||
|
||||
class RDoc::Context
|
||||
|
||||
include RDoc::Generator::Markup
|
||||
|
||||
end
|
||||
|
||||
class RDoc::Context::Section
|
||||
|
||||
include RDoc::Generator::Markup
|
||||
|
||||
end
|
||||
|
||||
class RDoc::TopLevel
|
||||
|
||||
##
|
||||
# Returns a URL for this source file on some web repository. Use the -W
|
||||
# command line option to set.
|
||||
|
||||
def cvs_url
|
||||
url = RDoc::RDoc.current.options.webcvs
|
||||
|
||||
if /%s/ =~ url then
|
||||
url % @absolute_name
|
||||
else
|
||||
url + @absolute_name
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
|
@ -1,225 +1,79 @@
|
|||
require 'rdoc/generator'
|
||||
require 'rdoc/markup/to_flow'
|
||||
require 'rdoc/ri'
|
||||
|
||||
require 'rdoc/ri/cache'
|
||||
require 'rdoc/ri/reader'
|
||||
require 'rdoc/ri/writer'
|
||||
require 'rdoc/ri/descriptions'
|
||||
##
|
||||
# Generates ri data files
|
||||
|
||||
class RDoc::Generator::RI
|
||||
|
||||
##
|
||||
# Generator may need to return specific subclasses depending on the
|
||||
# options they are passed. Because of this we create them using a factory
|
||||
RDoc::RDoc.add_generator self
|
||||
|
||||
def self.for(options)
|
||||
new(options)
|
||||
def self.for options
|
||||
new options
|
||||
end
|
||||
|
||||
##
|
||||
# Set up a new ri generator
|
||||
|
||||
def initialize(options) #:not-new:
|
||||
@options = options
|
||||
@ri_writer = RDoc::RI::Writer.new "."
|
||||
@markup = RDoc::Markup.new
|
||||
@to_flow = RDoc::Markup::ToFlow.new
|
||||
|
||||
@generated = {}
|
||||
def initialize options #:not-new:
|
||||
@options = options
|
||||
@store = RDoc::RI::Store.new '.'
|
||||
@old_siginfo = nil
|
||||
@current = nil
|
||||
end
|
||||
|
||||
##
|
||||
# Build the initial indices and output objects based on an array of
|
||||
# TopLevel objects containing the extracted information.
|
||||
# Build the initial indices and output objects based on an array of TopLevel
|
||||
# objects containing the extracted information.
|
||||
|
||||
def generate(toplevels)
|
||||
RDoc::TopLevel.all_classes_and_modules.each do |cls|
|
||||
process_class cls
|
||||
end
|
||||
end
|
||||
def generate top_levels
|
||||
install_siginfo_handler
|
||||
|
||||
def process_class(from_class)
|
||||
generate_class_info(from_class)
|
||||
RDoc::TopLevel.all_classes_and_modules.each do |klass|
|
||||
@current = "#{klass.class}: #{klass.full_name}"
|
||||
|
||||
# now recurse into this class' constituent classes
|
||||
from_class.each_classmodule do |mod|
|
||||
process_class(mod)
|
||||
end
|
||||
end
|
||||
@store.save_class klass
|
||||
|
||||
def generate_class_info(cls)
|
||||
case cls
|
||||
when RDoc::NormalModule then
|
||||
cls_desc = RDoc::RI::ModuleDescription.new
|
||||
else
|
||||
cls_desc = RDoc::RI::ClassDescription.new
|
||||
cls_desc.superclass = cls.superclass
|
||||
end
|
||||
klass.each_method do |method|
|
||||
@current = "#{method.class}: #{method.full_name}"
|
||||
@store.save_method klass, method
|
||||
end
|
||||
|
||||
cls_desc.name = cls.name
|
||||
cls_desc.full_name = cls.full_name
|
||||
cls_desc.comment = markup(cls.comment)
|
||||
|
||||
cls_desc.attributes = cls.attributes.sort.map do |a|
|
||||
RDoc::RI::Attribute.new(a.name, a.rw, markup(a.comment))
|
||||
end
|
||||
|
||||
cls_desc.constants = cls.constants.map do |c|
|
||||
RDoc::RI::Constant.new(c.name, c.value, markup(c.comment))
|
||||
end
|
||||
|
||||
cls_desc.includes = cls.includes.map do |i|
|
||||
RDoc::RI::IncludedModule.new(i.name)
|
||||
end
|
||||
|
||||
class_methods, instance_methods = method_list(cls)
|
||||
|
||||
cls_desc.class_methods = class_methods.map do |m|
|
||||
RDoc::RI::MethodSummary.new(m.name)
|
||||
end
|
||||
|
||||
cls_desc.instance_methods = instance_methods.map do |m|
|
||||
RDoc::RI::MethodSummary.new(m.name)
|
||||
end
|
||||
|
||||
update_or_replace(cls_desc)
|
||||
|
||||
class_methods.each do |m|
|
||||
generate_method_info(cls_desc, m)
|
||||
end
|
||||
|
||||
instance_methods.each do |m|
|
||||
generate_method_info(cls_desc, m)
|
||||
end
|
||||
end
|
||||
|
||||
def generate_method_info(cls_desc, method)
|
||||
meth_desc = RDoc::RI::MethodDescription.new
|
||||
meth_desc.name = method.name
|
||||
meth_desc.full_name = cls_desc.full_name
|
||||
if method.singleton
|
||||
meth_desc.full_name += "::"
|
||||
else
|
||||
meth_desc.full_name += "#"
|
||||
end
|
||||
meth_desc.full_name << method.name
|
||||
|
||||
meth_desc.comment = markup(method.comment)
|
||||
meth_desc.params = params_of(method)
|
||||
meth_desc.visibility = method.visibility.to_s
|
||||
meth_desc.is_singleton = method.singleton
|
||||
meth_desc.block_params = method.block_params
|
||||
|
||||
meth_desc.aliases = method.aliases.map do |a|
|
||||
RDoc::RI::AliasName.new(a.name)
|
||||
end
|
||||
|
||||
@ri_writer.add_method(cls_desc, meth_desc)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
##
|
||||
# Returns a list of class and instance methods that we'll be documenting
|
||||
|
||||
def method_list(cls)
|
||||
list = cls.method_list
|
||||
unless @options.show_all
|
||||
list = list.find_all do |m|
|
||||
m.visibility == :public || m.visibility == :protected || m.force_documentation
|
||||
klass.each_attribute do |attribute|
|
||||
@store.save_method klass, attribute
|
||||
end
|
||||
end
|
||||
|
||||
c = []
|
||||
i = []
|
||||
list.sort.each do |m|
|
||||
if m.singleton
|
||||
c << m
|
||||
else
|
||||
i << m
|
||||
end
|
||||
end
|
||||
return c,i
|
||||
end
|
||||
@current = 'saving cache'
|
||||
|
||||
def params_of(method)
|
||||
if method.call_seq
|
||||
method.call_seq
|
||||
else
|
||||
params = method.params || ""
|
||||
@store.save_cache
|
||||
|
||||
p = params.gsub(/\s*\#.*/, '')
|
||||
p = p.tr("\n", " ").squeeze(" ")
|
||||
p = "(" + p + ")" unless p[0] == ?(
|
||||
ensure
|
||||
@current = nil
|
||||
|
||||
if (block = method.block_params)
|
||||
block.gsub!(/\s*\#.*/, '')
|
||||
block = block.tr("\n", " ").squeeze(" ")
|
||||
if block[0] == ?(
|
||||
block.sub!(/^\(/, '').sub!(/\)/, '')
|
||||
end
|
||||
p << " {|#{block.strip}| ...}"
|
||||
end
|
||||
p
|
||||
end
|
||||
end
|
||||
|
||||
def markup(comment)
|
||||
return nil if !comment || comment.empty?
|
||||
|
||||
# Convert leading comment markers to spaces, but only
|
||||
# if all non-blank lines have them
|
||||
|
||||
if comment =~ /^(?>\s*)[^\#]/
|
||||
content = comment
|
||||
else
|
||||
content = comment.gsub(/^\s*(#+)/) { $1.tr('#',' ') }
|
||||
end
|
||||
@markup.convert(content, @to_flow)
|
||||
remove_siginfo_handler
|
||||
end
|
||||
|
||||
##
|
||||
# By default we replace existing classes with the same name. If the
|
||||
# --merge option was given, we instead merge this definition into an
|
||||
# existing class. We add our methods, aliases, etc to that class, but do
|
||||
# not change the class's description.
|
||||
# Installs a siginfo handler that prints the current filename.
|
||||
|
||||
def update_or_replace(cls_desc)
|
||||
old_cls = nil
|
||||
def install_siginfo_handler
|
||||
return unless Signal.list.key? 'INFO'
|
||||
|
||||
if @options.merge
|
||||
rdr = RDoc::RI::Reader.new RDoc::RI::Cache.new(@options.op_dir)
|
||||
|
||||
namespace = rdr.top_level_namespace
|
||||
namespace = rdr.lookup_namespace_in(cls_desc.name, namespace)
|
||||
if namespace.empty?
|
||||
$stderr.puts "You asked me to merge this source into existing "
|
||||
$stderr.puts "documentation. This file references a class or "
|
||||
$stderr.puts "module called #{cls_desc.name} which I don't"
|
||||
$stderr.puts "have existing documentation for."
|
||||
$stderr.puts
|
||||
$stderr.puts "Perhaps you need to generate its documentation first"
|
||||
exit 1
|
||||
else
|
||||
old_cls = namespace[0]
|
||||
end
|
||||
@old_siginfo = trap 'INFO' do
|
||||
puts @current if @current
|
||||
end
|
||||
end
|
||||
|
||||
prev_cls = @generated[cls_desc.full_name]
|
||||
##
|
||||
# Removes a siginfo handler and replaces the previous
|
||||
|
||||
if old_cls and not prev_cls then
|
||||
old_desc = rdr.get_class old_cls
|
||||
cls_desc.merge_in old_desc
|
||||
end
|
||||
def remove_siginfo_handler
|
||||
return unless Signal.list.key? 'INFO'
|
||||
|
||||
if prev_cls then
|
||||
cls_desc.merge_in prev_cls
|
||||
end
|
||||
handler = @old_siginfo || 'DEFAULT'
|
||||
|
||||
@generated[cls_desc.full_name] = cls_desc
|
||||
|
||||
@ri_writer.remove_class cls_desc
|
||||
@ri_writer.add_class cls_desc
|
||||
trap 'INFO', handler
|
||||
end
|
||||
|
||||
end
|
||||
|
|
0
lib/rdoc/generator/template/darkfish/.document
Normal file
297
lib/rdoc/generator/template/darkfish/classpage.rhtml
Normal file
|
@ -0,0 +1,297 @@
|
|||
<?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>
|
||||
<meta content="text/html; charset=<%= @options.charset %>" http-equiv="Content-Type" />
|
||||
|
||||
<title><%= klass.type.capitalize %>: <%= klass.full_name %></title>
|
||||
|
||||
<link rel="stylesheet" href="<%= rel_prefix %>/rdoc.css" type="text/css" media="screen" />
|
||||
|
||||
<script src="<%= rel_prefix %>/js/jquery.js" type="text/javascript"
|
||||
charset="utf-8"></script>
|
||||
<script src="<%= rel_prefix %>/js/thickbox-compressed.js" type="text/javascript"
|
||||
charset="utf-8"></script>
|
||||
<script src="<%= rel_prefix %>/js/quicksearch.js" type="text/javascript"
|
||||
charset="utf-8"></script>
|
||||
<script src="<%= rel_prefix %>/js/darkfish.js" type="text/javascript"
|
||||
charset="utf-8"></script>
|
||||
|
||||
</head>
|
||||
<body class="<%= klass.type %>">
|
||||
|
||||
<div id="metadata">
|
||||
<div id="home-metadata">
|
||||
<div id="home-section" class="section">
|
||||
<h3 class="section-header">
|
||||
<a href="<%= rel_prefix %>/index.html">Home</a>
|
||||
<a href="<%= rel_prefix %>/index.html#classes">Classes</a>
|
||||
<a href="<%= rel_prefix %>/index.html#methods">Methods</a>
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="file-metadata">
|
||||
<div id="file-list-section" class="section">
|
||||
<h3 class="section-header">In Files</h3>
|
||||
<div class="section-body">
|
||||
<ul>
|
||||
<% klass.in_files.each do |tl| %>
|
||||
<li><a href="<%= rel_prefix %>/<%= h tl.path %>?TB_iframe=true&height=550&width=785"
|
||||
class="thickbox" title="<%= h tl.absolute_name %>"><%= h tl.absolute_name %></a></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<% if !svninfo.empty? %>
|
||||
<div id="file-svninfo-section" class="section">
|
||||
<h3 class="section-header">Subversion Info</h3>
|
||||
<div class="section-body">
|
||||
<dl class="svninfo">
|
||||
<dt>Rev</dt>
|
||||
<dd><%= svninfo[:rev] %></dd>
|
||||
|
||||
<dt>Last Checked In</dt>
|
||||
<dd><%= svninfo[:commitdate].strftime('%Y-%m-%d %H:%M:%S') %>
|
||||
(<%= svninfo[:commitdelta] %> ago)</dd>
|
||||
|
||||
<dt>Checked in by</dt>
|
||||
<dd><%= svninfo[:committer] %></dd>
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<div id="class-metadata">
|
||||
|
||||
<!-- Parent Class -->
|
||||
<% if klass.type == 'class' %>
|
||||
<div id="parent-class-section" class="section">
|
||||
<h3 class="section-header">Parent</h3>
|
||||
<% unless String === klass.superclass %>
|
||||
<p class="link"><a href="<%= klass.aref_to klass.superclass.path %>"><%= klass.superclass.full_name %></a></p>
|
||||
<% else %>
|
||||
<p class="link"><%= klass.superclass %></p>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<!-- Namespace Contents -->
|
||||
<% unless klass.classes_and_modules.empty? %>
|
||||
<div id="namespace-list-section" class="section">
|
||||
<h3 class="section-header">Namespace</h3>
|
||||
<ul class="link-list">
|
||||
<% (klass.modules.sort + klass.classes.sort).each do |mod| %>
|
||||
<li><span class="type"><%= mod.type.upcase %></span> <a href="<%= klass.aref_to mod.path %>"><%= mod.full_name %></a></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<!-- Method Quickref -->
|
||||
<% unless klass.method_list.empty? %>
|
||||
<div id="method-list-section" class="section">
|
||||
<h3 class="section-header">Methods</h3>
|
||||
<ul class="link-list">
|
||||
<% klass.each_method do |meth| %>
|
||||
<li><a href="#<%= meth.aref %>"><%= meth.singleton ? '::' : '#' %><%= meth.name %></a></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<!-- Included Modules -->
|
||||
<% unless klass.includes.empty? %>
|
||||
<div id="includes-section" class="section">
|
||||
<h3 class="section-header">Included Modules</h3>
|
||||
<ul class="link-list">
|
||||
<% klass.each_include do |inc| %>
|
||||
<% unless String === inc.module %>
|
||||
<li><a class="include" href="<%= klass.aref_to inc.module.path %>"><%= inc.module.full_name %></a></li>
|
||||
<% else %>
|
||||
<li><span class="include"><%= inc.name %></span></li>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</ul>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<div id="project-metadata">
|
||||
<% simple_files = @files.select {|tl| tl.parser == RDoc::Parser::Simple } %>
|
||||
<% unless simple_files.empty? then %>
|
||||
<div id="fileindex-section" class="section project-section">
|
||||
<h3 class="section-header">Files</h3>
|
||||
<ul>
|
||||
<% simple_files.each do |file| %>
|
||||
<li class="file"><a href="<%= rel_prefix %>/<%= file.path %>"><%= h file.base_name %></a></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<div id="classindex-section" class="section project-section">
|
||||
<h3 class="section-header">Class Index
|
||||
<span class="search-toggle"><img src="<%= rel_prefix %>/images/find.png"
|
||||
height="16" width="16" alt="[+]"
|
||||
title="show/hide quicksearch" /></span></h3>
|
||||
<form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
|
||||
<fieldset>
|
||||
<legend>Quicksearch</legend>
|
||||
<input type="text" name="quicksearch" value=""
|
||||
class="quicksearch-field" />
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
<ul class="link-list">
|
||||
<% @modsort.each do |index_klass| %>
|
||||
<li><a href="<%= rel_prefix %>/<%= index_klass.path %>"><%= index_klass.full_name %></a></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<div id="no-class-search-results" style="display: none;">No matching classes.</div>
|
||||
</div>
|
||||
|
||||
<% if $DEBUG_RDOC %>
|
||||
<div id="debugging-toggle"><img src="<%= rel_prefix %>/images/bug.png"
|
||||
alt="toggle debugging" height="16" width="16" /></div>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="documentation">
|
||||
<h1 class="<%= klass.type %>"><%= klass.full_name %></h1>
|
||||
|
||||
<div id="description">
|
||||
<%= klass.description %>
|
||||
</div>
|
||||
|
||||
<!-- Constants -->
|
||||
<% unless klass.constants.empty? %>
|
||||
<div id="constants-list" class="section">
|
||||
<h3 class="section-header">Constants</h3>
|
||||
<dl>
|
||||
<% klass.each_constant do |const| %>
|
||||
<dt><a name="<%= const.name %>"><%= const.name %></a></dt>
|
||||
<% if const.comment %>
|
||||
<dd class="description"><%= const.description.strip %></dd>
|
||||
<% else %>
|
||||
<dd class="description missing-docs">(Not documented)</dd>
|
||||
<% end %>
|
||||
<% end %>
|
||||
</dl>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<!-- Attributes -->
|
||||
<% unless klass.attributes.empty? %>
|
||||
<div id="attribute-method-details" class="method-section section">
|
||||
<h3 class="section-header">Attributes</h3>
|
||||
|
||||
<% klass.each_attribute do |attrib| %>
|
||||
<div id="<%= attrib.html_name %>-attribute-method" class="method-detail">
|
||||
<a name="<%= h attrib.name %>"></a>
|
||||
<% if attrib.rw =~ /w/i %>
|
||||
<a name="<%= h attrib.name %>="></a>
|
||||
<% end %>
|
||||
<div class="method-heading attribute-method-heading">
|
||||
<span class="method-name"><%= h attrib.name %></span><span
|
||||
class="attribute-access-type">[<%= attrib.rw %>]</span>
|
||||
</div>
|
||||
|
||||
<div class="method-description">
|
||||
<% if attrib.comment %>
|
||||
<%= attrib.description.strip %>
|
||||
<% else %>
|
||||
<p class="missing-docs">(Not documented)</p>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<!-- Methods -->
|
||||
<% klass.methods_by_type.each do |type, visibilities|
|
||||
next if visibilities.empty?
|
||||
visibilities.each do |visibility, methods|
|
||||
next if methods.empty? %>
|
||||
<div id="<%= visibility %>-<%= type %>-method-details" class="method-section section">
|
||||
<h3 class="section-header"><%= visibility.to_s.capitalize %> <%= type.capitalize %> Methods</h3>
|
||||
|
||||
<% methods.each do |method| %>
|
||||
<div id="<%= method.html_name %>-method" class="method-detail <%= method.is_alias_for ? "method-alias" : '' %>">
|
||||
<a name="<%= h method.aref %>"></a>
|
||||
|
||||
<div class="method-heading">
|
||||
<% if method.call_seq %>
|
||||
<span class="method-callseq"><%= method.call_seq.strip.gsub(/->/, '→').gsub( /^\w.+\./m, '') %></span>
|
||||
<span class="method-click-advice">click to toggle source</span>
|
||||
<% else %>
|
||||
<span class="method-name"><%= h method.name %></span><span
|
||||
class="method-args"><%= method.params %></span>
|
||||
<span class="method-click-advice">click to toggle source</span>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<div class="method-description">
|
||||
<% if method.comment %>
|
||||
<%= method.description.strip %>
|
||||
<% else %>
|
||||
<p class="missing-docs">(Not documented)</p>
|
||||
<% end %>
|
||||
|
||||
<% if method.token_stream %>
|
||||
<div class="method-source-code"
|
||||
id="<%= method.html_name %>-source">
|
||||
<pre>
|
||||
<%= method.markup_code %>
|
||||
</pre>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<% unless method.aliases.empty? %>
|
||||
<div class="aliases">
|
||||
Also aliased as: <%= method.aliases.map do |aka|
|
||||
%{<a href="#{ klass.aref_to aka.path}">#{h aka.name}</a>}
|
||||
end.join(", ") %>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<% if method.is_alias_for then %>
|
||||
<div class="aliases">
|
||||
Alias for: <a href="<%= klass.aref_to method.is_alias_for.path %>"><%= h method.is_alias_for.name %></a>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<% end %>
|
||||
</div>
|
||||
<% end
|
||||
end %>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<div id="rdoc-debugging-section-dump" class="debugging-section">
|
||||
<% if $DEBUG_RDOC
|
||||
require 'pp' %>
|
||||
<pre><%= h PP.pp(klass, _erbout) %></pre>
|
||||
</div>
|
||||
<% else %>
|
||||
<p>Disabled; run with --debug to generate this.</p>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<div id="validator-badges">
|
||||
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
||||
<p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
|
||||
Rdoc Generator</a> <%= RDoc::Generator::Darkfish::VERSION %></small>.</p>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
|
124
lib/rdoc/generator/template/darkfish/filepage.rhtml
Normal file
|
@ -0,0 +1,124 @@
|
|||
<?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>
|
||||
<meta content="text/html; charset=<%= @options.charset %>" http-equiv="Content-Type" />
|
||||
|
||||
<title>File: <%= file.base_name %> [<%= @options.title %>]</title>
|
||||
|
||||
<link type="text/css" media="screen" href="<%= rel_prefix %>/rdoc.css" rel="stylesheet" />
|
||||
|
||||
<script src="<%= rel_prefix %>/js/jquery.js" type="text/javascript"
|
||||
charset="utf-8"></script>
|
||||
<script src="<%= rel_prefix %>/js/thickbox-compressed.js" type="text/javascript"
|
||||
charset="utf-8"></script>
|
||||
<script src="<%= rel_prefix %>/js/quicksearch.js" type="text/javascript"
|
||||
charset="utf-8"></script>
|
||||
<script src="<%= rel_prefix %>/js/darkfish.js" type="text/javascript"
|
||||
charset="utf-8"></script>
|
||||
</head>
|
||||
|
||||
<% if file.parser == RDoc::Parser::Simple %>
|
||||
<body class="file">
|
||||
<div id="metadata">
|
||||
<div id="home-metadata">
|
||||
<div id="home-section" class="section">
|
||||
<h3 class="section-header">
|
||||
<a href="<%= rel_prefix %>/index.html">Home</a>
|
||||
<a href="<%= rel_prefix %>/index.html#classes">Classes</a>
|
||||
<a href="<%= rel_prefix %>/index.html#methods">Methods</a>
|
||||
</h3>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="project-metadata">
|
||||
<% simple_files = @files.select { |f| f.parser == RDoc::Parser::Simple } %>
|
||||
<% unless simple_files.empty? then %>
|
||||
<div id="fileindex-section" class="section project-section">
|
||||
<h3 class="section-header">Files</h3>
|
||||
<ul>
|
||||
<% simple_files.each do |f| %>
|
||||
<li class="file"><a href="<%= rel_prefix %>/<%= f.path %>"><%= h f.base_name %></a></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
</div>
|
||||
<% end %>
|
||||
|
||||
<div id="classindex-section" class="section project-section">
|
||||
<h3 class="section-header">Class Index
|
||||
<span class="search-toggle"><img src="<%= rel_prefix %>/images/find.png"
|
||||
height="16" width="16" alt="[+]"
|
||||
title="show/hide quicksearch" /></span></h3>
|
||||
<form action="#" method="get" accept-charset="utf-8" class="initially-hidden">
|
||||
<fieldset>
|
||||
<legend>Quicksearch</legend>
|
||||
<input type="text" name="quicksearch" value=""
|
||||
class="quicksearch-field" />
|
||||
</fieldset>
|
||||
</form>
|
||||
|
||||
<ul class="link-list">
|
||||
<% @modsort.each do |index_klass| %>
|
||||
<li><a href="<%= rel_prefix %>/<%= index_klass.path %>"><%= index_klass.full_name %></a></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<div id="no-class-search-results" style="display: none;">No matching classes.</div>
|
||||
</div>
|
||||
|
||||
<% if $DEBUG_RDOC %>
|
||||
<div id="debugging-toggle"><img src="<%= rel_prefix %>/images/bug.png"
|
||||
alt="toggle debugging" height="16" width="16" /></div>
|
||||
<% end %>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="documentation">
|
||||
<%= file.description %>
|
||||
</div>
|
||||
|
||||
<div id="validator-badges">
|
||||
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
||||
<p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
|
||||
Rdoc Generator</a> <%= RDoc::Generator::Darkfish::VERSION %></small>.</p>
|
||||
</div>
|
||||
</body>
|
||||
<% else %>
|
||||
<body class="file file-popup">
|
||||
<div id="metadata">
|
||||
<dl>
|
||||
<dt class="modified-date">Last Modified</dt>
|
||||
<dd class="modified-date"><%= file.last_modified %></dd>
|
||||
|
||||
<% if file.requires %>
|
||||
<dt class="requires">Requires</dt>
|
||||
<dd class="requires">
|
||||
<ul>
|
||||
<% file.requires.each do |require| %>
|
||||
<li><%= require.name %></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
</dd>
|
||||
<% end %>
|
||||
|
||||
<% if @options.webcvs %>
|
||||
<dt class="scs-url">Trac URL</dt>
|
||||
<dd class="scs-url"><a target="_top"
|
||||
href="<%= file.cvs_url %>"><%= file.cvs_url %></a></dd>
|
||||
<% end %>
|
||||
</dl>
|
||||
</div>
|
||||
|
||||
<div id="documentation">
|
||||
<% if file.comment %>
|
||||
<div class="description">
|
||||
<h2>Description</h2>
|
||||
<%= file.description %>
|
||||
</div>
|
||||
<% end %>
|
||||
</div>
|
||||
</body>
|
||||
<% end %>
|
||||
</html>
|
||||
|
BIN
lib/rdoc/generator/template/darkfish/images/brick.png
Normal file
After Width: | Height: | Size: 452 B |
BIN
lib/rdoc/generator/template/darkfish/images/brick_link.png
Normal file
After Width: | Height: | Size: 764 B |
BIN
lib/rdoc/generator/template/darkfish/images/bug.png
Normal file
After Width: | Height: | Size: 774 B |
BIN
lib/rdoc/generator/template/darkfish/images/bullet_black.png
Normal file
After Width: | Height: | Size: 211 B |
After Width: | Height: | Size: 207 B |
After Width: | Height: | Size: 209 B |
BIN
lib/rdoc/generator/template/darkfish/images/date.png
Normal file
After Width: | Height: | Size: 626 B |
BIN
lib/rdoc/generator/template/darkfish/images/find.png
Normal file
After Width: | Height: | Size: 659 B |
BIN
lib/rdoc/generator/template/darkfish/images/loadingAnimation.gif
Normal file
After Width: | Height: | Size: 5.7 KiB |
BIN
lib/rdoc/generator/template/darkfish/images/macFFBgHack.png
Normal file
After Width: | Height: | Size: 207 B |
BIN
lib/rdoc/generator/template/darkfish/images/package.png
Normal file
After Width: | Height: | Size: 853 B |
BIN
lib/rdoc/generator/template/darkfish/images/page_green.png
Normal file
After Width: | Height: | Size: 621 B |
BIN
lib/rdoc/generator/template/darkfish/images/page_white_text.png
Normal file
After Width: | Height: | Size: 342 B |
BIN
lib/rdoc/generator/template/darkfish/images/page_white_width.png
Normal file
After Width: | Height: | Size: 309 B |
BIN
lib/rdoc/generator/template/darkfish/images/plugin.png
Normal file
After Width: | Height: | Size: 591 B |
BIN
lib/rdoc/generator/template/darkfish/images/ruby.png
Normal file
After Width: | Height: | Size: 592 B |
BIN
lib/rdoc/generator/template/darkfish/images/tag_green.png
Normal file
After Width: | Height: | Size: 613 B |
BIN
lib/rdoc/generator/template/darkfish/images/wrench.png
Normal file
After Width: | Height: | Size: 610 B |
BIN
lib/rdoc/generator/template/darkfish/images/wrench_orange.png
Normal file
After Width: | Height: | Size: 584 B |
BIN
lib/rdoc/generator/template/darkfish/images/zoom.png
Normal file
After Width: | Height: | Size: 692 B |
64
lib/rdoc/generator/template/darkfish/index.rhtml
Normal file
|
@ -0,0 +1,64 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
|
||||
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
||||
|
||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
||||
<head>
|
||||
<meta content="text/html; charset=<%= @options.charset %>" http-equiv="Content-Type" />
|
||||
|
||||
<title><%= h @options.title %></title>
|
||||
|
||||
<link type="text/css" media="screen" href="rdoc.css" rel="stylesheet" />
|
||||
|
||||
<script src="js/jquery.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="js/thickbox-compressed.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="js/quicksearch.js" type="text/javascript" charset="utf-8"></script>
|
||||
<script src="js/darkfish.js" type="text/javascript" charset="utf-8"></script>
|
||||
|
||||
</head>
|
||||
<body class="indexpage">
|
||||
|
||||
<% $stderr.sync = true %>
|
||||
<h1><%= h @options.title %></h1>
|
||||
|
||||
<% if @options.main_page && main_page = @files.find { |f| f.full_name == @options.main_page } %>
|
||||
<div id="main">
|
||||
<%= main_page.description.sub(%r{^\s*<h1.*?/h1>}i, '') %>
|
||||
</div>
|
||||
<% else %>
|
||||
<p>This is the API documentation for '<%= @options.title %>'.</p>
|
||||
<% end %>
|
||||
|
||||
<% simple_files = @files.select {|tl| tl.parser == RDoc::Parser::Simple } %>
|
||||
<% unless simple_files.empty? then %>
|
||||
<h2>Files</h2>
|
||||
<ul>
|
||||
<% simple_files.sort.each do |file| %>
|
||||
<li class="file"><a href="<%= file.path %>"><%= h file.base_name %></a></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<% end %>
|
||||
|
||||
<h2 id="classes">Classes/Modules</h2>
|
||||
<ul>
|
||||
<% @modsort.each do |klass| %>
|
||||
<li class="<%= klass.type %>"><a href="<%= klass.path %>"><%= klass.full_name %></a></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
|
||||
<h2 id="methods">Methods</h2>
|
||||
<ul>
|
||||
<% RDoc::TopLevel.all_classes_and_modules.map do |mod|
|
||||
mod.method_list
|
||||
end.flatten.sort.each do |method| %>
|
||||
<li><a href="<%= method.path %>"><%= method.pretty_name %> — <%= method.parent.full_name %></a></li>
|
||||
<% end %>
|
||||
</ul>
|
||||
|
||||
<div id="validator-badges">
|
||||
<p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
|
||||
<p><small>Generated with the <a href="http://deveiate.org/projects/Darkfish-Rdoc/">Darkfish
|
||||
Rdoc Generator</a> <%= RDoc::Generator::Darkfish::VERSION %></small>.</p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
116
lib/rdoc/generator/template/darkfish/js/darkfish.js
Normal file
|
@ -0,0 +1,116 @@
|
|||
/**
|
||||
*
|
||||
* Darkfish Page Functions
|
||||
* $Id: darkfish.js 53 2009-01-07 02:52:03Z deveiant $
|
||||
*
|
||||
* Author: Michael Granger <mgranger@laika.com>
|
||||
*
|
||||
*/
|
||||
|
||||
/* Provide console simulation for firebug-less environments */
|
||||
if (!("console" in window) || !("firebug" in console)) {
|
||||
var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
|
||||
"group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
|
||||
|
||||
window.console = {};
|
||||
for (var i = 0; i < names.length; ++i)
|
||||
window.console[names[i]] = function() {};
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Unwrap the first element that matches the given @expr@ from the targets and return them.
|
||||
*/
|
||||
$.fn.unwrap = function( expr ) {
|
||||
return this.each( function() {
|
||||
$(this).parents( expr ).eq( 0 ).after( this ).remove();
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
function showSource( e ) {
|
||||
var target = e.target;
|
||||
var codeSections = $(target).
|
||||
parents('.method-detail').
|
||||
find('.method-source-code');
|
||||
|
||||
$(target).
|
||||
parents('.method-detail').
|
||||
find('.method-source-code').
|
||||
slideToggle();
|
||||
};
|
||||
|
||||
function hookSourceViews() {
|
||||
$('.method-description,.method-heading').click( showSource );
|
||||
};
|
||||
|
||||
function toggleDebuggingSection() {
|
||||
$('.debugging-section').slideToggle();
|
||||
};
|
||||
|
||||
function hookDebuggingToggle() {
|
||||
$('#debugging-toggle img').click( toggleDebuggingSection );
|
||||
};
|
||||
|
||||
function hookQuickSearch() {
|
||||
$('.quicksearch-field').each( function() {
|
||||
var searchElems = $(this).parents('.section').find( 'li' );
|
||||
var toggle = $(this).parents('.section').find('h3 .search-toggle');
|
||||
// console.debug( "Toggle is: %o", toggle );
|
||||
var qsbox = $(this).parents('form').get( 0 );
|
||||
|
||||
$(this).quicksearch( this, searchElems, {
|
||||
noSearchResultsIndicator: 'no-class-search-results',
|
||||
focusOnLoad: false
|
||||
});
|
||||
$(toggle).click( function() {
|
||||
// console.debug( "Toggling qsbox: %o", qsbox );
|
||||
$(qsbox).toggle();
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
function highlightTarget( anchor ) {
|
||||
console.debug( "Highlighting target '%s'.", anchor );
|
||||
|
||||
$("a[name=" + anchor + "]").each( function() {
|
||||
if ( !$(this).parent().parent().hasClass('target-section') ) {
|
||||
console.debug( "Wrapping the target-section" );
|
||||
$('div.method-detail').unwrap( 'div.target-section' );
|
||||
$(this).parent().wrap( '<div class="target-section"></div>' );
|
||||
} else {
|
||||
console.debug( "Already wrapped." );
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
function highlightLocationTarget() {
|
||||
console.debug( "Location hash: %s", window.location.hash );
|
||||
if ( ! window.location.hash || window.location.hash.length == 0 ) return;
|
||||
|
||||
var anchor = window.location.hash.substring(1);
|
||||
console.debug( "Found anchor: %s; matching %s", anchor, "a[name=" + anchor + "]" );
|
||||
|
||||
highlightTarget( anchor );
|
||||
};
|
||||
|
||||
function highlightClickTarget( event ) {
|
||||
console.debug( "Highlighting click target for event %o", event.target );
|
||||
try {
|
||||
var anchor = $(event.target).attr( 'href' ).substring(1);
|
||||
console.debug( "Found target anchor: %s", anchor );
|
||||
highlightTarget( anchor );
|
||||
} catch ( err ) {
|
||||
console.error( "Exception while highlighting: %o", err );
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
$(document).ready( function() {
|
||||
hookSourceViews();
|
||||
hookDebuggingToggle();
|
||||
hookQuickSearch();
|
||||
highlightLocationTarget();
|
||||
|
||||
$('ul.link-list a').bind( "click", highlightClickTarget );
|
||||
});
|
32
lib/rdoc/generator/template/darkfish/js/jquery.js
vendored
Normal file
114
lib/rdoc/generator/template/darkfish/js/quicksearch.js
Normal file
|
@ -0,0 +1,114 @@
|
|||
/**
|
||||
*
|
||||
* JQuery QuickSearch - Hook up a form field to hide non-matching elements.
|
||||
* $Id: quicksearch.js 53 2009-01-07 02:52:03Z deveiant $
|
||||
*
|
||||
* Author: Michael Granger <mgranger@laika.com>
|
||||
*
|
||||
*/
|
||||
jQuery.fn.quicksearch = function( target, searchElems, options ) {
|
||||
// console.debug( "Quicksearch fn" );
|
||||
|
||||
var settings = {
|
||||
delay: 250,
|
||||
clearButton: false,
|
||||
highlightMatches: false,
|
||||
focusOnLoad: false,
|
||||
noSearchResultsIndicator: null
|
||||
};
|
||||
if ( options ) $.extend( settings, options );
|
||||
|
||||
return jQuery(this).each( function() {
|
||||
// console.debug( "Creating a new quicksearch on %o for %o", this, searchElems );
|
||||
new jQuery.quicksearch( this, searchElems, settings );
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
jQuery.quicksearch = function( searchBox, searchElems, settings ) {
|
||||
var timeout;
|
||||
var boxdiv = $(searchBox).parents('div').eq(0);
|
||||
|
||||
function init() {
|
||||
setupKeyEventHandlers();
|
||||
focusOnLoad();
|
||||
};
|
||||
|
||||
function setupKeyEventHandlers() {
|
||||
// console.debug( "Hooking up the 'keypress' event to %o", searchBox );
|
||||
$(searchBox).
|
||||
unbind( 'keyup' ).
|
||||
keyup( function(e) { return onSearchKey( e.keyCode ); });
|
||||
$(searchBox).
|
||||
unbind( 'keypress' ).
|
||||
keypress( function(e) {
|
||||
switch( e.which ) {
|
||||
// Execute the search on Enter, Tab, or Newline
|
||||
case 9:
|
||||
case 13:
|
||||
case 10:
|
||||
clearTimeout( timeout );
|
||||
e.preventDefault();
|
||||
doQuickSearch();
|
||||
break;
|
||||
|
||||
// Allow backspace
|
||||
case 8:
|
||||
return true;
|
||||
break;
|
||||
|
||||
// Only allow valid search characters
|
||||
default:
|
||||
return validQSChar( e.charCode );
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
function focusOnLoad() {
|
||||
if ( !settings.focusOnLoad ) return false;
|
||||
$(searchBox).focus();
|
||||
};
|
||||
|
||||
function onSearchKey ( code ) {
|
||||
clearTimeout( timeout );
|
||||
// console.debug( "...scheduling search." );
|
||||
timeout = setTimeout( doQuickSearch, settings.delay );
|
||||
};
|
||||
|
||||
function validQSChar( code ) {
|
||||
var c = String.fromCharCode( code );
|
||||
return (
|
||||
(c == ':') ||
|
||||
(c >= 'a' && c <= 'z') ||
|
||||
(c >= 'A' && c <= 'Z')
|
||||
);
|
||||
};
|
||||
|
||||
function doQuickSearch() {
|
||||
var searchText = searchBox.value;
|
||||
var pat = new RegExp( searchText, "im" );
|
||||
var shownCount = 0;
|
||||
|
||||
if ( settings.noSearchResultsIndicator ) {
|
||||
$('#' + settings.noSearchResultsIndicator).hide();
|
||||
}
|
||||
|
||||
// All elements start out hidden
|
||||
$(searchElems).each( function(index) {
|
||||
var str = $(this).text();
|
||||
|
||||
if ( pat.test(str) ) {
|
||||
shownCount += 1;
|
||||
$(this).fadeIn();
|
||||
} else {
|
||||
$(this).hide();
|
||||
}
|
||||
});
|
||||
|
||||
if ( shownCount == 0 && settings.noSearchResultsIndicator ) {
|
||||
$('#' + settings.noSearchResultsIndicator).slideDown();
|
||||
}
|
||||
};
|
||||
|
||||
init();
|
||||
};
|
701
lib/rdoc/generator/template/darkfish/rdoc.css
Normal file
|
@ -0,0 +1,701 @@
|
|||
/*
|
||||
* "Darkfish" Rdoc CSS
|
||||
* $Id: rdoc.css 54 2009-01-27 01:09:48Z deveiant $
|
||||
*
|
||||
* Author: Michael Granger <ged@FaerieMUD.org>
|
||||
*
|
||||
*/
|
||||
|
||||
/* Base Green is: #6C8C22 */
|
||||
|
||||
*{ padding: 0; margin: 0; }
|
||||
|
||||
body {
|
||||
background: #efefef;
|
||||
font: 14px "Helvetica Neue", Helvetica, Tahoma, sans-serif;
|
||||
}
|
||||
body.class, body.module, body.file {
|
||||
margin-left: 40px;
|
||||
}
|
||||
body.file-popup {
|
||||
font-size: 90%;
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 300%;
|
||||
text-shadow: rgba(135,145,135,0.65) 2px 2px 3px;
|
||||
color: #6C8C22;
|
||||
}
|
||||
h2,h3,h4 { margin-top: 1.5em; }
|
||||
|
||||
:link,
|
||||
:visited {
|
||||
color: #6C8C22;
|
||||
text-decoration: none;
|
||||
}
|
||||
:link:hover,
|
||||
:visited:hover {
|
||||
border-bottom: 1px dotted #6C8C22;
|
||||
}
|
||||
|
||||
pre {
|
||||
background: #ddd;
|
||||
padding: 0.5em 0;
|
||||
}
|
||||
|
||||
|
||||
/* @group Generic Classes */
|
||||
|
||||
.initially-hidden {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.quicksearch-field {
|
||||
width: 98%;
|
||||
background: #ddd;
|
||||
border: 1px solid #aaa;
|
||||
height: 1.5em;
|
||||
-webkit-border-radius: 4px;
|
||||
}
|
||||
.quicksearch-field:focus {
|
||||
background: #f1edba;
|
||||
}
|
||||
|
||||
.missing-docs {
|
||||
font-size: 120%;
|
||||
background: white url(images/wrench_orange.png) no-repeat 4px center;
|
||||
color: #ccc;
|
||||
line-height: 2em;
|
||||
border: 1px solid #d00;
|
||||
opacity: 1;
|
||||
padding-left: 20px;
|
||||
text-indent: 24px;
|
||||
letter-spacing: 3px;
|
||||
font-weight: bold;
|
||||
-webkit-border-radius: 5px;
|
||||
-moz-border-radius: 5px;
|
||||
}
|
||||
|
||||
.target-section {
|
||||
border: 2px solid #dcce90;
|
||||
border-left-width: 8px;
|
||||
padding: 0 1em;
|
||||
background: #fff3c2;
|
||||
}
|
||||
|
||||
/* @end */
|
||||
|
||||
|
||||
/* @group Index Page, Standalone file pages */
|
||||
body.indexpage {
|
||||
margin: 1em 3em;
|
||||
}
|
||||
body.indexpage p,
|
||||
body.indexpage div,
|
||||
body.file p {
|
||||
margin: 1em 0;
|
||||
}
|
||||
|
||||
.indexpage ul,
|
||||
.file #documentation ul {
|
||||
line-height: 160%;
|
||||
list-style: none;
|
||||
}
|
||||
.indexpage ul :link,
|
||||
.indexpage ul :visited,
|
||||
.file #documentation ul :link,
|
||||
.file #documentation ul :visited {
|
||||
font-size: 16px;
|
||||
}
|
||||
|
||||
.indexpage li,
|
||||
.file #documentation li {
|
||||
padding-left: 20px;
|
||||
background: url(images/bullet_black.png) no-repeat left 4px;
|
||||
}
|
||||
.indexpage li.module {
|
||||
background: url(images/package.png) no-repeat left 4px;
|
||||
}
|
||||
.indexpage li.class {
|
||||
background: url(images/ruby.png) no-repeat left 4px;
|
||||
}
|
||||
.indexpage li.file {
|
||||
background: url(images/page_white_text.png) no-repeat left 4px;
|
||||
}
|
||||
.file li p,
|
||||
.indexpage li p {
|
||||
margin: 0 0;
|
||||
}
|
||||
|
||||
/* @end */
|
||||
|
||||
/* @group Top-Level Structure */
|
||||
|
||||
.class #metadata,
|
||||
.file #metadata,
|
||||
.module #metadata {
|
||||
float: left;
|
||||
width: 260px;
|
||||
}
|
||||
|
||||
.class #documentation,
|
||||
.file #documentation,
|
||||
.module #documentation {
|
||||
margin: 2em 1em 5em 300px;
|
||||
min-width: 340px;
|
||||
}
|
||||
|
||||
.file #metadata {
|
||||
margin: 0.8em;
|
||||
}
|
||||
|
||||
#validator-badges {
|
||||
clear: both;
|
||||
margin: 1em 1em 2em;
|
||||
}
|
||||
|
||||
/* @end */
|
||||
|
||||
/* @group Metadata Section */
|
||||
#metadata .section {
|
||||
background-color: #dedede;
|
||||
-moz-border-radius: 5px;
|
||||
-webkit-border-radius: 5px;
|
||||
border: 1px solid #aaa;
|
||||
margin: 0 8px 16px;
|
||||
font-size: 90%;
|
||||
overflow: hidden;
|
||||
}
|
||||
#metadata h3.section-header {
|
||||
margin: 0;
|
||||
padding: 2px 8px;
|
||||
background: #ccc;
|
||||
color: #666;
|
||||
-moz-border-radius-topleft: 4px;
|
||||
-moz-border-radius-topright: 4px;
|
||||
-webkit-border-top-left-radius: 4px;
|
||||
-webkit-border-top-right-radius: 4px;
|
||||
border-bottom: 1px solid #aaa;
|
||||
}
|
||||
#metadata #home-section h3.section-header {
|
||||
border-bottom: 0;
|
||||
}
|
||||
|
||||
#metadata ul,
|
||||
#metadata dl,
|
||||
#metadata p {
|
||||
padding: 8px;
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
#file-metadata ul {
|
||||
padding-left: 28px;
|
||||
list-style-image: url(images/page_green.png);
|
||||
}
|
||||
|
||||
dl.svninfo {
|
||||
color: #666;
|
||||
margin: 0;
|
||||
}
|
||||
dl.svninfo dt {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
ul.link-list li {
|
||||
white-space: nowrap;
|
||||
}
|
||||
ul.link-list .type {
|
||||
font-size: 8px;
|
||||
text-transform: uppercase;
|
||||
color: white;
|
||||
background: #969696;
|
||||
padding: 2px 4px;
|
||||
-webkit-border-radius: 5px;
|
||||
}
|
||||
|
||||
/* @end */
|
||||
|
||||
|
||||
/* @group Project Metadata Section */
|
||||
#project-metadata {
|
||||
margin-top: 3em;
|
||||
}
|
||||
|
||||
.file #project-metadata {
|
||||
margin-top: 0em;
|
||||
}
|
||||
|
||||
#project-metadata .section {
|
||||
border: 1px solid #aaa;
|
||||
}
|
||||
#project-metadata h3.section-header {
|
||||
border-bottom: 1px solid #aaa;
|
||||
position: relative;
|
||||
}
|
||||
#project-metadata h3.section-header .search-toggle {
|
||||
position: absolute;
|
||||
right: 5px;
|
||||
}
|
||||
|
||||
|
||||
#project-metadata form {
|
||||
color: #777;
|
||||
background: #ccc;
|
||||
padding: 8px 8px 16px;
|
||||
border-bottom: 1px solid #bbb;
|
||||
}
|
||||
#project-metadata fieldset {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
#no-class-search-results {
|
||||
margin: 0 auto 1em;
|
||||
text-align: center;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
color: #aaa;
|
||||
}
|
||||
|
||||
/* @end */
|
||||
|
||||
|
||||
/* @group Documentation Section */
|
||||
#description {
|
||||
font-size: 100%;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
#description p {
|
||||
margin: 1em 0.4em;
|
||||
}
|
||||
|
||||
#description ul {
|
||||
margin-left: 2em;
|
||||
}
|
||||
#description ul li {
|
||||
line-height: 1.4em;
|
||||
}
|
||||
|
||||
#description dl,
|
||||
#documentation dl {
|
||||
margin: 8px 1.5em;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
#description dl {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
#description dt,
|
||||
#documentation dt {
|
||||
padding: 2px 4px;
|
||||
font-weight: bold;
|
||||
background: #ddd;
|
||||
}
|
||||
#description dd,
|
||||
#documentation dd {
|
||||
padding: 2px 12px;
|
||||
}
|
||||
#description dd + dt,
|
||||
#documentation dd + dt {
|
||||
margin-top: 0.7em;
|
||||
}
|
||||
|
||||
#documentation .section {
|
||||
font-size: 90%;
|
||||
}
|
||||
#documentation h3.section-header {
|
||||
margin-top: 2em;
|
||||
padding: 0.75em 0.5em;
|
||||
background-color: #dedede;
|
||||
color: #333;
|
||||
font-size: 150%;
|
||||
border: 1px solid #bbb;
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
}
|
||||
|
||||
#constants-list > dl,
|
||||
#attributes-list > dl {
|
||||
margin: 1em 0 2em;
|
||||
border: 0;
|
||||
}
|
||||
#constants-list > dl dt,
|
||||
#attributes-list > dl dt {
|
||||
padding-left: 0;
|
||||
font-weight: bold;
|
||||
font-family: Monaco, "Andale Mono";
|
||||
background: inherit;
|
||||
}
|
||||
#constants-list > dl dt a,
|
||||
#attributes-list > dl dt a {
|
||||
color: inherit;
|
||||
}
|
||||
#constants-list > dl dd,
|
||||
#attributes-list > dl dd {
|
||||
margin: 0 0 1em 0;
|
||||
padding: 0;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
/* @group Method Details */
|
||||
|
||||
#documentation .method-source-code {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#documentation .method-detail {
|
||||
margin: 0.5em 0;
|
||||
padding: 0.5em 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
#documentation .method-detail:hover {
|
||||
background-color: #f1edba;
|
||||
}
|
||||
#documentation .method-heading {
|
||||
position: relative;
|
||||
padding: 2px 4px 0 20px;
|
||||
font-size: 125%;
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
background: url(images/brick.png) no-repeat left bottom;
|
||||
}
|
||||
#documentation .method-heading :link,
|
||||
#documentation .method-heading :visited {
|
||||
color: inherit;
|
||||
}
|
||||
#documentation .method-click-advice {
|
||||
position: absolute;
|
||||
top: 2px;
|
||||
right: 5px;
|
||||
font-size: 10px;
|
||||
color: #9b9877;
|
||||
visibility: hidden;
|
||||
padding-right: 20px;
|
||||
line-height: 20px;
|
||||
background: url(images/zoom.png) no-repeat right top;
|
||||
}
|
||||
#documentation .method-detail:hover .method-click-advice {
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
#documentation .method-alias .method-heading {
|
||||
color: #666;
|
||||
background: url(images/brick_link.png) no-repeat left bottom;
|
||||
}
|
||||
|
||||
#documentation .method-description,
|
||||
#documentation .aliases {
|
||||
margin: 0 20px;
|
||||
line-height: 1.2em;
|
||||
color: #666;
|
||||
}
|
||||
#documentation .aliases {
|
||||
padding-top: 4px;
|
||||
font-style: italic;
|
||||
cursor: default;
|
||||
}
|
||||
#documentation .method-description p {
|
||||
padding: 0;
|
||||
}
|
||||
#documentation .method-description p + p {
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
|
||||
#documentation .attribute-method-heading {
|
||||
background: url(images/tag_green.png) no-repeat left bottom;
|
||||
}
|
||||
#documentation #attribute-method-details .method-detail:hover {
|
||||
background-color: transparent;
|
||||
cursor: default;
|
||||
}
|
||||
#documentation .attribute-access-type {
|
||||
font-size: 60%;
|
||||
text-transform: uppercase;
|
||||
vertical-align: super;
|
||||
padding: 0 2px;
|
||||
}
|
||||
/* @end */
|
||||
|
||||
/* @end */
|
||||
|
||||
|
||||
|
||||
/* @group Source Code */
|
||||
|
||||
div.method-source-code {
|
||||
background: #262626;
|
||||
color: #efefef;
|
||||
margin: 1em;
|
||||
padding: 0.5em;
|
||||
border: 1px dashed #999;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
div.method-source-code pre {
|
||||
background: inherit;
|
||||
padding: 0;
|
||||
color: white;
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/* @group Ruby keyword styles */
|
||||
|
||||
.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; }
|
||||
|
||||
/* @end */
|
||||
/* @end */
|
||||
|
||||
|
||||
/* @group File Popup Contents */
|
||||
|
||||
.file #metadata,
|
||||
.file-popup #metadata {
|
||||
}
|
||||
|
||||
.file-popup dl {
|
||||
font-size: 80%;
|
||||
padding: 0.75em;
|
||||
background-color: #dedede;
|
||||
color: #333;
|
||||
border: 1px solid #bbb;
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
}
|
||||
.file dt {
|
||||
font-weight: bold;
|
||||
padding-left: 22px;
|
||||
line-height: 20px;
|
||||
background: url(images/page_white_width.png) no-repeat left top;
|
||||
}
|
||||
.file dt.modified-date {
|
||||
background: url(images/date.png) no-repeat left top;
|
||||
}
|
||||
.file dt.requires {
|
||||
background: url(images/plugin.png) no-repeat left top;
|
||||
}
|
||||
.file dt.scs-url {
|
||||
background: url(images/wrench.png) no-repeat left top;
|
||||
}
|
||||
|
||||
.file dl dd {
|
||||
margin: 0 0 1em 0;
|
||||
}
|
||||
.file #metadata dl dd ul {
|
||||
list-style: circle;
|
||||
margin-left: 20px;
|
||||
padding-top: 0;
|
||||
}
|
||||
.file #metadata dl dd ul li {
|
||||
}
|
||||
|
||||
|
||||
.file h2 {
|
||||
margin-top: 2em;
|
||||
padding: 0.75em 0.5em;
|
||||
background-color: #dedede;
|
||||
color: #333;
|
||||
font-size: 120%;
|
||||
border: 1px solid #bbb;
|
||||
-moz-border-radius: 3px;
|
||||
-webkit-border-radius: 3px;
|
||||
}
|
||||
|
||||
/* @end */
|
||||
|
||||
|
||||
|
||||
|
||||
/* @group ThickBox Styles */
|
||||
#TB_window {
|
||||
font: 12px Arial, Helvetica, sans-serif;
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
#TB_secondLine {
|
||||
font: 10px Arial, Helvetica, sans-serif;
|
||||
color:#666666;
|
||||
}
|
||||
|
||||
#TB_window :link,
|
||||
#TB_window :visited { color: #666666; }
|
||||
#TB_window :link:hover,
|
||||
#TB_window :visited:hover { color: #000; }
|
||||
#TB_window :link:active,
|
||||
#TB_window :visited:active { color: #666666; }
|
||||
#TB_window :link:focus,
|
||||
#TB_window :visited:focus { color: #666666; }
|
||||
|
||||
#TB_overlay {
|
||||
position: fixed;
|
||||
z-index:100;
|
||||
top: 0px;
|
||||
left: 0px;
|
||||
height:100%;
|
||||
width:100%;
|
||||
}
|
||||
|
||||
.TB_overlayMacFFBGHack {background: url(images/macFFBgHack.png) repeat;}
|
||||
.TB_overlayBG {
|
||||
background-color:#000;
|
||||
filter:alpha(opacity=75);
|
||||
-moz-opacity: 0.75;
|
||||
opacity: 0.75;
|
||||
}
|
||||
|
||||
* html #TB_overlay { /* ie6 hack */
|
||||
position: absolute;
|
||||
height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px');
|
||||
}
|
||||
|
||||
#TB_window {
|
||||
position: fixed;
|
||||
background: #ffffff;
|
||||
z-index: 102;
|
||||
color:#000000;
|
||||
display:none;
|
||||
border: 4px solid #525252;
|
||||
text-align:left;
|
||||
top:50%;
|
||||
left:50%;
|
||||
}
|
||||
|
||||
* html #TB_window { /* ie6 hack */
|
||||
position: absolute;
|
||||
margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px');
|
||||
}
|
||||
|
||||
#TB_window img#TB_Image {
|
||||
display:block;
|
||||
margin: 15px 0 0 15px;
|
||||
border-right: 1px solid #ccc;
|
||||
border-bottom: 1px solid #ccc;
|
||||
border-top: 1px solid #666;
|
||||
border-left: 1px solid #666;
|
||||
}
|
||||
|
||||
#TB_caption{
|
||||
height:25px;
|
||||
padding:7px 30px 10px 25px;
|
||||
float:left;
|
||||
}
|
||||
|
||||
#TB_closeWindow{
|
||||
height:25px;
|
||||
padding:11px 25px 10px 0;
|
||||
float:right;
|
||||
}
|
||||
|
||||
#TB_closeAjaxWindow{
|
||||
padding:7px 10px 5px 0;
|
||||
margin-bottom:1px;
|
||||
text-align:right;
|
||||
float:right;
|
||||
}
|
||||
|
||||
#TB_ajaxWindowTitle{
|
||||
float:left;
|
||||
padding:7px 0 5px 10px;
|
||||
margin-bottom:1px;
|
||||
font-size: 22px;
|
||||
}
|
||||
|
||||
#TB_title{
|
||||
background-color: #6C8C22;
|
||||
color: #dedede;
|
||||
height:40px;
|
||||
}
|
||||
#TB_title :link,
|
||||
#TB_title :visited {
|
||||
color: white !important;
|
||||
border-bottom: 1px dotted #dedede;
|
||||
}
|
||||
|
||||
#TB_ajaxContent{
|
||||
clear:both;
|
||||
padding:2px 15px 15px 15px;
|
||||
overflow:auto;
|
||||
text-align:left;
|
||||
line-height:1.4em;
|
||||
}
|
||||
|
||||
#TB_ajaxContent.TB_modal{
|
||||
padding:15px;
|
||||
}
|
||||
|
||||
#TB_ajaxContent p{
|
||||
padding:5px 0px 5px 0px;
|
||||
}
|
||||
|
||||
#TB_load{
|
||||
position: fixed;
|
||||
display:none;
|
||||
height:13px;
|
||||
width:208px;
|
||||
z-index:103;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
margin: -6px 0 0 -104px; /* -height/2 0 0 -width/2 */
|
||||
}
|
||||
|
||||
* html #TB_load { /* ie6 hack */
|
||||
position: absolute;
|
||||
margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px');
|
||||
}
|
||||
|
||||
#TB_HideSelect{
|
||||
z-index:99;
|
||||
position:fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
background-color:#fff;
|
||||
border:none;
|
||||
filter:alpha(opacity=0);
|
||||
-moz-opacity: 0;
|
||||
opacity: 0;
|
||||
height:100%;
|
||||
width:100%;
|
||||
}
|
||||
|
||||
* html #TB_HideSelect { /* ie6 hack */
|
||||
position: absolute;
|
||||
height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px');
|
||||
}
|
||||
|
||||
#TB_iframeContent{
|
||||
clear:both;
|
||||
border:none;
|
||||
margin-bottom:-1px;
|
||||
margin-top:1px;
|
||||
_margin-bottom:1px;
|
||||
}
|
||||
|
||||
/* @end */
|
||||
|
||||
/* @group Debugging Section */
|
||||
|
||||
#debugging-toggle {
|
||||
text-align: center;
|
||||
}
|
||||
#debugging-toggle img {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#rdoc-debugging-section-dump {
|
||||
display: none;
|
||||
margin: 0 2em 2em;
|
||||
background: #ccc;
|
||||
border: 1px solid #999;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* @end */
|
|
@ -1,81 +0,0 @@
|
|||
require 'rdoc/rdoc'
|
||||
require 'rdoc/generator'
|
||||
require 'rdoc/markup/to_texinfo'
|
||||
|
||||
module RDoc
|
||||
module Generator
|
||||
# This generates Texinfo files for viewing with GNU Info or Emacs
|
||||
# from RDoc extracted from Ruby source files.
|
||||
class TEXINFO
|
||||
# What should the .info file be named by default?
|
||||
DEFAULT_INFO_FILENAME = 'rdoc.info'
|
||||
|
||||
include Generator::MarkUp
|
||||
|
||||
# Accept some options
|
||||
def initialize(options)
|
||||
@options = options
|
||||
@options.inline_source = true
|
||||
@options.op_name ||= 'rdoc.texinfo'
|
||||
@options.formatter = ::RDoc::Markup::ToTexInfo.new
|
||||
end
|
||||
|
||||
# Generate the +texinfo+ files
|
||||
def generate(toplevels)
|
||||
@toplevels = toplevels
|
||||
@files, @classes = ::RDoc::Generator::Context.build_indices(@toplevels,
|
||||
@options)
|
||||
|
||||
(@files + @classes).each { |x| x.value_hash }
|
||||
|
||||
open(@options.op_name, 'w') do |f|
|
||||
f.puts TexinfoTemplate.new('files' => @files,
|
||||
'classes' => @classes,
|
||||
'filename' => @options.op_name.gsub(/texinfo/, 'info'),
|
||||
'title' => @options.title).render
|
||||
end
|
||||
# TODO: create info files and install?
|
||||
end
|
||||
|
||||
class << self
|
||||
# Factory? We don't need no stinkin' factory!
|
||||
alias_method :for, :new
|
||||
end
|
||||
end
|
||||
|
||||
# Basically just a wrapper around ERB.
|
||||
# Should probably use RDoc::TemplatePage instead
|
||||
class TexinfoTemplate
|
||||
BASE_DIR = ::File.expand_path(::File.dirname(__FILE__)) # have to calculate this when the file's loaded.
|
||||
|
||||
def initialize(values, file = 'texinfo.erb')
|
||||
@v, @file = [values, file]
|
||||
end
|
||||
|
||||
def template
|
||||
::File.read(::File.join(BASE_DIR, 'texinfo', @file))
|
||||
end
|
||||
|
||||
# Go!
|
||||
def render
|
||||
ERB.new(template).result binding
|
||||
end
|
||||
|
||||
def href(location, text)
|
||||
text # TODO: how does texinfo do hyperlinks?
|
||||
end
|
||||
|
||||
def target(name, text)
|
||||
text # TODO: how do hyperlink targets work?
|
||||
end
|
||||
|
||||
# TODO: this is probably implemented elsewhere?
|
||||
def method_prefix(section)
|
||||
{ 'Class' => '.',
|
||||
'Module' => '::',
|
||||
'Instance' => '#',
|
||||
}[section['category']]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -1,44 +0,0 @@
|
|||
@node <%= @v['class']['full_name'].gsub(/::/, '-') %>
|
||||
@chapter <%= @v['class']["classmod"] %> <%= @v['class']['full_name'] %>
|
||||
|
||||
<% if @v['class']["parent"] and @v['class']['par_url'] %>
|
||||
Inherits <%= href @v['class']["par_url"], @v['class']["parent"] %><% end %>
|
||||
|
||||
<%= @v['class']["description"] %>
|
||||
|
||||
<% if @v['class']["includes"] %>
|
||||
Includes
|
||||
<% @v['class']["includes"].each do |include| %>
|
||||
* <%= href include["aref"], include["name"] %>
|
||||
<% end # @v['class']["includes"] %>
|
||||
<% end %>
|
||||
|
||||
<% if @v['class']["sections"] %>
|
||||
<% @v['class']["sections"].each do |section| %>
|
||||
<% if section["attributes"] %>
|
||||
Attributes
|
||||
<% section["attributes"].each do |attributes| %>
|
||||
* <%= attributes["name"] %> <%= attributes["rw"] %> <%= attributes["a_desc"] %>
|
||||
<% end # section["attributes"] %>
|
||||
<% end %>
|
||||
<% end %>
|
||||
|
||||
<% @v['class']["sections"].each do |section| %>
|
||||
<% if section["method_list"] %>
|
||||
Methods
|
||||
@menu
|
||||
<% section["method_list"].each_with_index do |method_list, i| %>
|
||||
<%= i %>
|
||||
<% (method_list["methods"] || []).each do |method| %>
|
||||
* <%= @v['class']['full_name'].gsub(/::/, '-') %><%= method_prefix method_list %><%= method['name'] %>::<% end %>
|
||||
<% end %>
|
||||
@end menu
|
||||
|
||||
<% section["method_list"].each do |method_list| %>
|
||||
<% (method_list["methods"] || []).uniq.each do |method| %>
|
||||
<%= TexinfoTemplate.new(@v.merge({'method' => method, 'list' => method_list}),
|
||||
'method.texinfo.erb').render %><% end %>
|
||||
<% end %>
|
||||
<% end # if section["method_list"] %>
|
||||
<% end # @v['class']["sections"] %>
|
||||
<% end %>
|
|
@ -1,6 +0,0 @@
|
|||
<% if false %>
|
||||
<h2>File: <%= @v['file']["short_name"] %></h2>
|
||||
Path: <%= @v['file']["full_path"] %>
|
||||
|
||||
<%= TexinfoTemplate.new(@v, 'content.texinfo.erb').render %>
|
||||
<% end %>
|
|
@ -1,6 +0,0 @@
|
|||
@node <%= @v['class']['full_name'].gsub(/::/, '-') %><%= method_prefix @v['list'] %><%= @v['method']['name'] %>
|
||||
@section <%= @v['class']["classmod"] %> <%= @v['class']['full_name'] %><%= method_prefix @v['list'] %><%= @v['method']['name'] %>
|
||||
<%= @v['method']["type"] %> <%= @v['method']["category"] %> method:
|
||||
<%= target @v['method']["aref"], @v['method']['callseq'] ||
|
||||
@v['method']["name"] + @v['method']["params"] %>
|
||||
<%= @v['method']["m_desc"] %>
|
|
@ -1,28 +0,0 @@
|
|||
\input texinfo @c -*-texinfo-*-
|
||||
@c %**start of header
|
||||
@setfilename <%= @v['filename'] %>
|
||||
@settitle <%= @v['title'] %>
|
||||
@c %**end of header
|
||||
|
||||
@contents @c TODO: whitespace is a mess... =\
|
||||
|
||||
@ifnottex
|
||||
@node Top
|
||||
|
||||
@top <%= @v['title'] %>
|
||||
@end ifnottex
|
||||
|
||||
<% if @f = @v['files'].detect { |f| f.name =~ /Readme/i } %>
|
||||
<%= @f.values['description'] %><% end %>
|
||||
|
||||
@menu
|
||||
<% @v['classes'].each do |klass| %>
|
||||
* <%= klass.name.gsub(/::/, '-') %>::<% end %>
|
||||
@c TODO: add files
|
||||
@end menu
|
||||
|
||||
<% (@v['classes'] || []).each_with_index do |klass, i| %>
|
||||
<%= TexinfoTemplate.new(@v.merge('class' => klass.values),
|
||||
'class.texinfo.erb').render %><% end %>
|
||||
|
||||
@bye
|
|
@ -1,117 +0,0 @@
|
|||
require 'rdoc/generator/html'
|
||||
|
||||
##
|
||||
# Generate XML output as one big file
|
||||
|
||||
class RDoc::Generator::XML < RDoc::Generator::HTML
|
||||
|
||||
##
|
||||
# Standard generator factory
|
||||
|
||||
def self.for(options)
|
||||
new(options)
|
||||
end
|
||||
|
||||
def initialize(*args)
|
||||
super
|
||||
end
|
||||
|
||||
##
|
||||
# Build the initial indices and output objects
|
||||
# based on an array of TopLevel objects containing
|
||||
# the extracted information.
|
||||
|
||||
def generate(info)
|
||||
@info = info
|
||||
@files = []
|
||||
@classes = []
|
||||
@hyperlinks = {}
|
||||
|
||||
build_indices
|
||||
generate_xml
|
||||
end
|
||||
|
||||
##
|
||||
# Generate:
|
||||
#
|
||||
# * a list of File objects for each TopLevel object.
|
||||
# * a list of Class objects for each first level
|
||||
# class or module in the TopLevel objects
|
||||
# * a complete list of all hyperlinkable terms (file,
|
||||
# class, module, and method names)
|
||||
|
||||
def build_indices
|
||||
@info.each do |toplevel|
|
||||
@files << RDoc::Generator::File.new(toplevel, @options, RDoc::Generator::FILE_DIR)
|
||||
end
|
||||
|
||||
RDoc::TopLevel.all_classes_and_modules.each do |cls|
|
||||
build_class_list(cls, @files[0], RDoc::Generator::CLASS_DIR)
|
||||
end
|
||||
end
|
||||
|
||||
def build_class_list(from, html_file, class_dir)
|
||||
@classes << RDoc::Generator::Class.new(from, html_file, class_dir, @options)
|
||||
from.each_classmodule do |mod|
|
||||
build_class_list(mod, html_file, class_dir)
|
||||
end
|
||||
end
|
||||
|
||||
##
|
||||
# Generate all the HTML. For the one-file case, we generate
|
||||
# all the information in to one big hash
|
||||
|
||||
def generate_xml
|
||||
values = {
|
||||
'charset' => @options.charset,
|
||||
'files' => gen_into(@files),
|
||||
'classes' => gen_into(@classes)
|
||||
}
|
||||
|
||||
template = RDoc::TemplatePage.new @template::ONE_PAGE
|
||||
|
||||
if @options.op_name
|
||||
opfile = File.open(@options.op_name, "w")
|
||||
else
|
||||
opfile = $stdout
|
||||
end
|
||||
template.write_html_on(opfile, values)
|
||||
end
|
||||
|
||||
def gen_into(list)
|
||||
res = []
|
||||
list.each do |item|
|
||||
res << item.value_hash
|
||||
end
|
||||
res
|
||||
end
|
||||
|
||||
def gen_file_index
|
||||
gen_an_index(@files, 'Files')
|
||||
end
|
||||
|
||||
def gen_class_index
|
||||
gen_an_index(@classes, 'Classes')
|
||||
end
|
||||
|
||||
def gen_method_index
|
||||
gen_an_index(RDoc::Generator::HtmlMethod.all_methods, 'Methods')
|
||||
end
|
||||
|
||||
def gen_an_index(collection, title)
|
||||
res = []
|
||||
collection.sort.each do |f|
|
||||
if f.document_self
|
||||
res << { "href" => f.path, "name" => f.index_name }
|
||||
end
|
||||
end
|
||||
|
||||
return {
|
||||
"entries" => res,
|
||||
'list_title' => title,
|
||||
'index_url' => main_url,
|
||||
}
|
||||
end
|
||||
|
||||
end
|
||||
|
|
@ -1,113 +0,0 @@
|
|||
require 'rdoc/generator/xml'
|
||||
|
||||
module RDoc::Generator::XML::RDF
|
||||
|
||||
CONTENTS_RDF = <<-EOF
|
||||
<% if defined? classes and classes["description"] then %>
|
||||
<description rd:parseType="Literal">
|
||||
<%= classes["description"] %>
|
||||
</description>
|
||||
<% end %>
|
||||
|
||||
<% if defined? files and files["requires"] then %>
|
||||
<% files["requires"].each do |requires| %>
|
||||
<rd:required-file rd:name="<%= requires["name"] %>" />
|
||||
<% end # files["requires"] %>
|
||||
<% end %>
|
||||
|
||||
<% 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="<%= attributes["name"] %>">
|
||||
<% if attributes["rw"] then %>
|
||||
<attribute-rw><%= attributes["rw"] %></attribute-rw>
|
||||
<% end %>
|
||||
<description rdf:parseType="Literal"><%= attributes["a_desc"] %></description>
|
||||
</Attribute>
|
||||
</contents>
|
||||
<% end # sections["attributes"] %>
|
||||
<% end %>
|
||||
|
||||
<% 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="<%= 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">
|
||||
<%= methods["m_desc"] %>
|
||||
</description>
|
||||
<% end %>
|
||||
<% if methods["sourcecode"] then %>
|
||||
<source-code-listing rdf:parseType="Literal">
|
||||
<%= methods["sourcecode"] %>
|
||||
</source-code-listing>
|
||||
<% end %>
|
||||
</Method>
|
||||
</contents>
|
||||
<% end # method_list["methods"] %>
|
||||
<% end %>
|
||||
<% end # sections["method_list"] %>
|
||||
<% end %>
|
||||
<!-- end method list -->
|
||||
<% end # classes["sections"] %>
|
||||
<% end %>
|
||||
EOF
|
||||
|
||||
########################################################################
|
||||
|
||||
ONE_PAGE = %{<?xml version="1.0" encoding="utf-8"?>
|
||||
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns="http://pragprog.com/rdoc/rdoc.rdf#"
|
||||
xmlns:rd="http://pragprog.com/rdoc/rdoc.rdf#">
|
||||
|
||||
<!-- RDoc -->
|
||||
<% 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 # values["files"] %>
|
||||
<% values["classes"].each do |classes| %>
|
||||
<<%= values["classmod"] %> rd:name="<%= classes["full_name"] %>" rd:id="<%= classes["full_name"] %>">
|
||||
<classmod-info>
|
||||
<% if classes["infiles"] then %>
|
||||
<InFiles>
|
||||
<% classes["infiles"].each do |infiles| %>
|
||||
<infile>
|
||||
<File rd:name="<%= infiles["full_path"] %>"
|
||||
<% if infiles["full_path_url"] then %>
|
||||
rdf:about="<%= infiles["full_path_url"] %>"
|
||||
<% end %>
|
||||
/>
|
||||
</infile>
|
||||
<% end # classes["infiles"] %>
|
||||
</InFiles>
|
||||
<% end %>
|
||||
<% if classes["parent"] then %>
|
||||
<superclass><%= href classes["par_url"], classes["parent"] %></superclass>
|
||||
<% end %>
|
||||
</classmod-info>
|
||||
} + CONTENTS_RDF + %{
|
||||
</<%= classes["classmod"] %>>
|
||||
<% end # values["classes"] %>
|
||||
<!-- /RDoc -->
|
||||
</rdf:RDF>
|
||||
}
|
||||
|
||||
end
|
||||
|
|
@ -1,123 +0,0 @@
|
|||
require 'rdoc/generator/xml'
|
||||
|
||||
module RDoc::Generator::XML::XML
|
||||
|
||||
CONTENTS_XML = <<-EOF
|
||||
<% if defined? classes and classes["description"] then %>
|
||||
<description>
|
||||
<%= classes["description"] %>
|
||||
</description>
|
||||
<% end %>
|
||||
<contents>
|
||||
<% if defined? files and files["requires"] then %>
|
||||
<required-file-list>
|
||||
<% files["requires"].each do |requires| %>
|
||||
<required-file name="<%= requires["name"] %>"
|
||||
<% if requires["aref"] then %>
|
||||
href="<%= requires["aref"] %>"
|
||||
<% end %>
|
||||
/>
|
||||
<% end %><%# files["requires"] %>
|
||||
</required-file-list>
|
||||
<% end %>
|
||||
<% if defined? classes and classes["sections"] then %>
|
||||
<% classes["sections"].each do |sections| %>
|
||||
<% if sections["constants"] then %>
|
||||
<constant-list>
|
||||
<% sections["constants"].each do |constant| %>
|
||||
<constant name="<%= constant["name"] %>">
|
||||
<% if constant["value"] then %>
|
||||
<value><%= constant["value"] %></value>
|
||||
<% end %>
|
||||
<description><%= constant["a_desc"] %></description>
|
||||
</constant>
|
||||
<% end %><%# sections["constants"] %>
|
||||
</constant-list>
|
||||
<% end %>
|
||||
<% if sections["attributes"] then %>
|
||||
<attribute-list>
|
||||
<% 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 %><%# sections["attributes"] %>
|
||||
</attribute-list>
|
||||
<% end %>
|
||||
<% if sections["method_list"] then %>
|
||||
<method-list>
|
||||
<% 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>
|
||||
<%= methods["m_desc"] %>
|
||||
</description>
|
||||
<% end %>
|
||||
<% if methods["sourcecode"] then %>
|
||||
<source-code-listing>
|
||||
<%= methods["sourcecode"] %>
|
||||
</source-code-listing>
|
||||
<% end %>
|
||||
</method>
|
||||
<% end %><%# method_list["methods"] %>
|
||||
<% end %>
|
||||
<% end %><%# sections["method_list"] %>
|
||||
</method-list>
|
||||
<% 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>
|
||||
EOF
|
||||
|
||||
ONE_PAGE = %{<?xml version="1.0" encoding="utf-8"?>
|
||||
<rdoc>
|
||||
<file-list>
|
||||
<% values["files"].each do |files| %>
|
||||
<file name="<%= files["short_name"] %>" id="<%= files["href"] %>">
|
||||
<file-info>
|
||||
<path><%= files["full_path"] %></path>
|
||||
<dtm-modified><%= files["dtm_modified"] %></dtm-modified>
|
||||
</file-info>
|
||||
} + CONTENTS_XML + %{
|
||||
</file>
|
||||
<% end %><%# values["files"] %>
|
||||
</file-list>
|
||||
<class-module-list>
|
||||
<% values["classes"].each do |classes| %>
|
||||
<<%= classes["classmod"] %> name="<%= classes["full_name"] %>" id="<%= classes["full_name"] %>">
|
||||
<classmod-info>
|
||||
<% if classes["infiles"] then %>
|
||||
<infiles>
|
||||
<% classes["infiles"].each do |infiles| %>
|
||||
<infile><%= href infiles["full_path_url"], infiles["full_path"] %></infile>
|
||||
<% end %><%# classes["infiles"] %>
|
||||
</infiles>
|
||||
<% end %>
|
||||
<% if classes["parent"] then %>
|
||||
<superclass><%= href classes["par_url"], classes["parent"] %></superclass>
|
||||
<% end %>
|
||||
</classmod-info>
|
||||
} + CONTENTS_XML + %{
|
||||
</<%= classes["classmod"] %>>
|
||||
<% end %><%# values["classes"] %>
|
||||
</class-module-list>
|
||||
</rdoc>
|
||||
}
|
||||
|
||||
end
|