require 'puppet/util/instance_loader'
# Manage Reference Documentation.
class Puppet::Util::Reference
include Puppet::Util
include Puppet::Util::Docs
extend Puppet::Util::InstanceLoader
autoload(:reference, 'puppet/reference')
def self.footer
"\n\n----------------\n\n*This page autogenerated on %s*\n" % Time.now
end
def self.modes
%w{pdf trac text}
end
def self.newreference(name, options = {}, &block)
ref = self.new(name, options, &block)
instance_hash(:reference)[symbolize(name)] = ref
ref
end
def self.page(*sections)
depth = 4
# Use the minimum depth
sections.each do |name|
section = reference(name) or raise "Could not find section %s" % name
depth = section.depth if section.depth < depth
end
text = ".. contents:: :depth: 2\n\n"
end
def self.pdf(text)
puts "creating pdf"
File.open("/tmp/puppetdoc.txt", "w") do |f|
f.puts text
end
rst2latex = %x{which rst2latex}
if $? != 0 or rst2latex =~ /no /
rst2latex = %x{which rst2latex.py}
end
if $? != 0 or rst2latex =~ /no /
raise "Could not find rst2latex"
end
rst2latex.chomp!
cmd = %{#{rst2latex} /tmp/puppetdoc.txt > /tmp/puppetdoc.tex}
output = %x{#{cmd}}
unless $? == 0
$stderr.puts "rst2latex failed"
$stderr.puts output
exit(1)
end
$stderr.puts output
# Now convert to pdf
puts "handling pdf"
Dir.chdir("/tmp") do
%x{texi2pdf puppetdoc.tex >/dev/null 2>/dev/null}
end
#if FileTest.exists?("/tmp/puppetdoc.pdf")
# FileUtils.mv("/tmp/puppetdoc.pdf", "/export/apache/docroots/reductivelabs.com/htdocs/downloads/puppet/reference.pdf")
#end
end
def self.references
instance_loader(:reference).loadall
loaded_instances(:reference).sort { |a,b| a.to_s <=> b.to_s }
end
HEADER_LEVELS = [nil, "=", "-", "+", "'", "~"]
attr_accessor :page, :depth, :header, :title, :dynamic
attr_writer :doc
def doc
if defined?(@doc)
return "%s - %s" % [@name, @doc]
else
return @title
end
end
def dynamic?
self.dynamic
end
def h(name, level)
return "%s\n%s\n\n" % [name, HEADER_LEVELS[level] * name.to_s.length]
end
def initialize(name, options = {}, &block)
@name = name
options.each do |option, value|
send(option.to_s + "=", value)
end
meta_def(:generate, &block)
# Now handle the defaults
@title ||= "%s Reference" % @name.to_s.capitalize
@page ||= @title.gsub(/\s+/, '')
@depth ||= 2
@header ||= ""
end
# Indent every line in the chunk except those which begin with '..'.
def indent(text, tab)
return text.gsub(/(^|\A)/, tab).gsub(/^ +\.\./, "..")
end
def option(name, value)
":%s: %s\n" % [name.to_s.capitalize, value]
end
def paramwrap(name, text, options = {})
options[:level] ||= 5
#str = "%s : " % name
str = h(name, options[:level])
if options[:namevar]
str += "- **namevar**\n\n"
end
str += text
#str += text.gsub(/\n/, "\n ")
str += "\n\n"
return str
end
# Remove all trac links.
def strip_trac(text)
text.gsub(/`\w+\s+([^`]+)`:trac:/) { |m| $1 }
end
def text
puts output
end
def to_rest(withcontents = true)
# First the header
text = h(@title, 1)
text += "\n\n**This page is autogenerated; any changes will get overwritten**\n\n"
if withcontents
text += ".. contents:: :depth: %s\n\n" % @depth
end
text += @header
text += generate()
if withcontents
text += self.class.footer
end
return text
end
def to_text(withcontents = true)
strip_trac(to_rest(withcontents))
end
def to_trac(with_contents = true)
"{{{\n#!rst\n#{self.to_rest(with_contents)}\n}}}"
end
def trac
File.open("/tmp/puppetdoc.txt", "w") do |f|
f.puts self.to_trac
end
puts "Writing %s reference to trac as %s" % [@name, @page]
cmd = %{sudo trac-admin /opt/rl/trac/puppet wiki import %s /tmp/puppetdoc.txt} % self.page
output = %x{#{cmd}}
unless $? == 0
$stderr.puts "trac-admin failed"
$stderr.puts output
exit(1)
end
unless output =~ /^\s+/
$stderr.puts output
end
end
end
# $Id: reference.rb 2636 2007-06-19 23:52:34Z luke $
syntax highlighted by Code2HTML, v. 0.9.1