# File lib/rdoc/generator/json_index.rb, line 112
  def generate top_levels
    debug_msg "Generating JSON index"

    reset top_levels.sort, RDoc::TopLevel.all_classes_and_modules.sort

    index_classes
    index_methods
    index_pages

    debug_msg "  writing search index to %s" % SEARCH_INDEX_FILE
    data = { :index => @index }

    return if @options.dry_run

    out_dir = @base_dir + @options.op_dir
    index_file = out_dir + SEARCH_INDEX_FILE

    FileUtils.mkdir_p index_file.dirname, :verbose => $DEBUG_RDOC

    index_file.open 'w', 0644 do |io|
      io.set_encoding Encoding::UTF_8 if Object.const_defined? :Encoding
      io.write 'var search_data = '

      JSON.dump data, io, 0
    end

    Dir.chdir @template_dir do
      Dir['**/*.js'].each do |source|
        dest = File.join out_dir, source

        FileUtils.install source, dest, :mode => 0644, :verbose => $DEBUG_RDOC
      end
    end
  end