diff options
Diffstat (limited to 'ruby_1_9_3/lib/rdoc/generator/ri.rb')
-rw-r--r-- | ruby_1_9_3/lib/rdoc/generator/ri.rb | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/ruby_1_9_3/lib/rdoc/generator/ri.rb b/ruby_1_9_3/lib/rdoc/generator/ri.rb new file mode 100644 index 0000000000..939a165cfb --- /dev/null +++ b/ruby_1_9_3/lib/rdoc/generator/ri.rb @@ -0,0 +1,86 @@ +require 'rdoc/generator' +require 'rdoc/ri' + +## +# Generates ri data files + +class RDoc::Generator::RI + + RDoc::RDoc.add_generator self + + ## + # Description of this generator + + DESCRIPTION = 'creates ri data files' + + ## + # Set up a new ri generator + + def initialize options #:not-new: + @options = options + @old_siginfo = nil + @current = nil + + @store = RDoc::RI::Store.new '.' + @store.dry_run = @options.dry_run + @store.encoding = @options.encoding if @options.respond_to? :encoding + end + + ## + # Build the initial indices and output objects based on an array of TopLevel + # objects containing the extracted information. + + def generate top_levels + install_siginfo_handler + + @store.load_cache + + RDoc::TopLevel.all_classes_and_modules.each do |klass| + @current = "#{klass.class}: #{klass.full_name}" + + @store.save_class klass + + klass.each_method do |method| + @current = "#{method.class}: #{method.full_name}" + @store.save_method klass, method + end + + klass.each_attribute do |attribute| + @store.save_method klass, attribute + end + end + + @current = 'saving cache' + + @store.save_cache + + ensure + @current = nil + + remove_siginfo_handler + end + + ## + # Installs a siginfo handler that prints the current filename. + + def install_siginfo_handler + return unless Signal.list.key? 'INFO' + + @old_siginfo = trap 'INFO' do + puts @current if @current + end + end + + ## + # Removes a siginfo handler and replaces the previous + + def remove_siginfo_handler + return unless Signal.list.key? 'INFO' + + handler = @old_siginfo || 'DEFAULT' + + trap 'INFO', handler + end + +end + |