#--# Copyright (c) 2003, 2004 Jim Weirich, 2009 Eric Hodel## Permission is hereby granted, free of charge, to any person obtaining# a copy of this software and associated documentation files (the# "Software"), to deal in the Software without restriction, including# without limitation the rights to use, copy, modify, merge, publish,# distribute, sublicense, and/or sell copies of the Software, and to# permit persons to whom the Software is furnished to do so, subject to# the following conditions:## The above copyright notice and this permission notice shall be# included in all copies or substantial portions of the Software.## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.#++require'rubygems'begingem'rdoc'rescueGem::LoadErrorendunlessdefined?(RDoc)begingem'rake'rescueGem::LoadErrorendunlessdefined?(Rake)require'rdoc'require'rake'require'rake/tasklib'### RDoc::Task creates the following rake tasks to generate and clean up RDoc# output:## [rdoc]# Main task for this RDoc task.## [clobber_rdoc]# Delete all the rdoc files. This target is automatically added to the main# clobber target.## [rerdoc]# Rebuild the rdoc files from scratch, even if they are not out of date.## Simple Example:## require 'rdoc/task'## RDoc::Task.new do |rdoc|# rdoc.main = "README.rdoc"# rdoc.rdoc_files.include("README.rdoc", "lib/**/*.rb")# end## The +rdoc+ object passed to the block is an RDoc::Task object. See the# attributes list for the RDoc::Task class for available customization options.## == Specifying different task names## You may wish to give the task a different name, such as if you are# generating two sets of documentation. For instance, if you want to have a# development set of documentation including private methods:## require 'rdoc/task'## RDoc::Task.new :rdoc_dev do |rdoc|# rdoc.main = "README.doc"# rdoc.rdoc_files.include("README.rdoc", "lib/**/*.rb")# rdoc.options << "--all"# end## The tasks would then be named :<em>rdoc_dev</em>,# :clobber_<em>rdoc_dev</em>, and :re<em>rdoc_dev</em>.## If you wish to have completely different task names, then pass a Hash as# first argument. With the <tt>:rdoc</tt>, <tt>:clobber_rdoc</tt> and# <tt>:rerdoc</tt> options, you can customize the task names to your liking.## For example:## require 'rdoc/task'## RDoc::Task.new(:rdoc => "rdoc", :clobber_rdoc => "rdoc:clean",# :rerdoc => "rdoc:force")## This will create the tasks <tt>:rdoc</tt>, <tt>:rdoc:clean</tt> and# <tt>:rdoc:force</tt>.classRDoc::Task<Rake::TaskLib### Name of the main, top level task. (default is :rdoc)attr_accessor:name### Comment markup format. rdoc, rd and tomdoc are supported. (default is# 'rdoc')attr_accessor:markup### Name of directory to receive the html output files. (default is "html")attr_accessor:rdoc_dir### Title of RDoc documentation. (defaults to rdoc's default)attr_accessor:title### Name of file to be used as the main, top level file of the RDoc. (default# is none)attr_accessor:main### Name of template to be used by rdoc. (defaults to rdoc's default)attr_accessor:template### Name of format generator (<tt>--format<tt>) used by rdoc. (defaults to# rdoc's default)attr_accessor:generator### List of files to be included in the rdoc generation. (default is [])attr_accessor:rdoc_files### Additional list of options to be passed rdoc. (default is [])attr_accessor:options### Whether to run the rdoc process as an external shell (default is false)attr_accessor:external### Create an RDoc task with the given name. See the RDoc::Task class overview# for documentation.definitializename=:rdoc# :yield: selfdefaultscheck_namesname@name=nameyieldselfifblock_given?defineend### Ensures that +names+ only includes names for the :rdoc, :clobber_rdoc and# :rerdoc. If other names are given an ArgumentError is raised.defcheck_namesnamesreturnunlessHash===namesinvalid_options=names.keys.map{|k|k.to_sym}-[:rdoc,:clobber_rdoc,:rerdoc]unlessinvalid_options.empty?thenraiseArgumentError,"invalid options: #{invalid_options.join', '}"endend### Task description for the clobber rdoc task or its renamed equivalentdefclobber_task_description"Remove RDoc HTML files"end### Sets default task valuesdefdefaults@name=:rdoc@rdoc_files=Rake::FileList.new@rdoc_dir='html'@main=nil@title=nil@template=nil@generator=nil@options=[]end### All source is inline now. This method is deprecateddefinline_source# :nodoc:warn"RDoc::Task#inline_source is deprecated"trueend### All source is inline now. This method is deprecateddefinline_source=(value)# :nodoc:warn"RDoc::Task#inline_source is deprecated"end### Create the tasks defined by this task lib.defdefinedescrdoc_task_descriptiontaskrdoc_task_namedescrerdoc_task_descriptiontaskrerdoc_task_name=>[clobber_task_name,rdoc_task_name]descclobber_task_descriptiontaskclobber_task_namedorm_r@rdoc_dirrescuenilendtask:clobber=>[clobber_task_name]directory@rdoc_dirrdoc_target_deps=[@rdoc_files,Rake.application.rakefile].flatten.compacttaskrdoc_task_name=>[rdoc_target]filerdoc_target=>rdoc_target_depsdo@before_running_rdoc.callif@before_running_rdocargs=option_list+@rdoc_files$stderr.puts"rdoc #{args.join' '}"ifRake.application.options.traceRDoc::RDoc.new.documentargsendselfend### List of options that will be supplied to RDocdefoption_listresult=@options.dupresult<<"-o"<<@rdoc_dirresult<<"--main"<<mainifmainresult<<"--markup"<<markupifmarkupresult<<"--title"<<titleiftitleresult<<"-T"<<templateiftemplateresult<<'-f'<<generatorifgeneratorresultend### The block passed to this method will be called just before running the# RDoc generator. It is allowed to modify RDoc::Task attributes inside the# block.defbefore_running_rdoc(&block)@before_running_rdoc=blockend### Task description for the rdoc task or its renamed equivalentdefrdoc_task_description'Build RDoc HTML files'end### Task description for the rerdoc task or its renamed descriptiondefrerdoc_task_description"Rebuild RDoc HTML files"endprivatedefrdoc_target"#{rdoc_dir}/index.html"enddefrdoc_task_namecasenamewhenHashthen(name[:rdoc]||"rdoc").to_selsename.to_sendenddefclobber_task_namecasenamewhenHashthen(name[:clobber_rdoc]||"clobber_rdoc").to_selse"clobber_#{name}"endenddefrerdoc_task_namecasenamewhenHashthen(name[:rerdoc]||"rerdoc").to_selse"re#{name}"endendend# :stopdoc:moduleRake### For backwards compatibilityRDocTask=RDoc::Taskend# :startdoc: