require 'rdoc/rdoc'
require 'rdoc/generator'
require 'yaml'
require File.dirname(__FILE__) + '/to_texinfo'
module RDoc
RDoc::GENERATORS['texinfo'] = RDoc::Generator.new("rdoc_texinfo",
:Texinfo,
'texinfo')
module Generator
class Context
attr_reader :values
def initialize(context, options)
@context = context
@options = options
@formatter = ::RDoc::Markup::ToTexInfo.new
end
end
class Method
def markup_code(tokens)
tokens.map{ |t| t.text }.join("\n")
end
end
class Texinfo
VERSION = '0.0.1'
DEFAULT_FILENAME = 'rdoc.texinfo'
DEFAULT_INFO_FILENAME = 'rdoc.info'
include Generator::MarkUp
def initialize(options)
@options = options
@options.inline_source = true
end
def generate(toplevels)
@toplevels = toplevels
@files, @classes = ::RDoc::Generator::Context.build_indicies(@toplevels,
@options)
(@files + @classes).each { |x| x.value_hash }
open(@options.op_name || DEFAULT_FILENAME, 'w') do |f|
f.puts TexinfoTemplate.new('files' => @files,
'classes' => @classes,
'filename' => DEFAULT_INFO_FILENAME, 'title' => @options.title).render
end
end
class << self
alias_method :for, :new
end
end
class TexinfoTemplate
def initialize(values, file = 'texinfo.erb')
@values, @file = [values, file]
@v = @values
end
def template
::File.read(::File.dirname(__FILE__) + '/' + @file)
end
def render
ERB.new(template).result binding
end
def href(location, text)
text end
def target(name, text)
text end
def hash_or_dot(section)
{ 'Class' => '.',
'Module' => '::',
'Instance' => '#',
}[section['category']]
end
end
end
end