summaryrefslogtreecommitdiff
path: root/ruby_1_9_3/lib/rdoc/generator/ri.rb
diff options
context:
space:
mode:
Diffstat (limited to 'ruby_1_9_3/lib/rdoc/generator/ri.rb')
-rw-r--r--ruby_1_9_3/lib/rdoc/generator/ri.rb86
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
+