Signed-off-by: James Turnbull <[email protected]>
---
bin/puppetdoc | 6 ++++--
lib/puppet/application/puppetdoc.rb | 27 ++++++++++++++++++++++++++-
lib/puppet/util/reference.rb | 32 +++++++++++++++++++++++++++-----
3 files changed, 57 insertions(+), 8 deletions(-)
diff --git a/bin/puppetdoc b/bin/puppetdoc
index 09d0966..a69d169 100755
--- a/bin/puppetdoc
+++ b/bin/puppetdoc
@@ -8,7 +8,7 @@
#
# = Usage
#
-# puppetdoc [-a|--all] [-h|--help] [-o|--outputdir <rdoc outputdir>]
[-m|--mode <text|pdf|trac|rdoc>]
+# puppetdoc [-a|--all] [-h|--help] [-o|--outputdir <rdoc outputdir>]
[-m|--mode <text|pdf|markdown|trac|rdoc>]
# [-r|--reference <[type]|configuration|..>] [manifest-file]
#
# = Description
@@ -37,7 +37,7 @@
# Specifies the directory where to output the rdoc documentation in 'rdoc'
mode.
#
# mode::
-# Determine the output mode. Valid modes are 'text', 'trac', 'pdf' and
'rdoc'. Note that 'trac' mode only works on Reductive Labs servers. The
default mode is 'text'. In 'rdoc' mode you must provide 'manifests-path'
+# Determine the output mode. Valid modes are 'text', 'trac', 'pdf',
'markdown' and 'rdoc'. The 'pdf' and 'markdown' modes create PDF or Markdown
formatted files in the /tmp directory. Note that 'trac' mode only works on
Reductive Labs servers. The default mode is 'text'. In 'rdoc' mode you must
provide 'manifests-path'
#
# reference::
# Build a particular reference. Get a list of references by running
+puppetdoc --list+.
@@ -49,6 +49,8 @@
# $ puppetdoc --outputdir /tmp/rdoc --mode rdoc /path/to/manifests
# or
# $ puppetdoc /etc/puppet/manifests/site.pp
+# or
+# $ puppetdoc -m markdown -r configuration
#
# = Author
#
diff --git a/lib/puppet/application/puppetdoc.rb
b/lib/puppet/application/puppetdoc.rb
index 99e46cf..297efe6 100644
--- a/lib/puppet/application/puppetdoc.rb
+++ b/lib/puppet/application/puppetdoc.rb
@@ -60,6 +60,7 @@ Puppet::Application.new(:puppetdoc) do
dispatch do
return :rdoc if options[:mode] == :rdoc
return :trac if options[:mode] == :trac
+ return :markdown if options[:mode] == :markdown
return :other
end
@@ -101,6 +102,30 @@ Puppet::Application.new(:puppetdoc) do
end
end
+ command(:markdown) do
+ text = ""
+ with_contents = false
+ exit_code = 0
+ options[:references].sort { |a,b| a.to_s <=> b.to_s }.each do |name|
+ raise "Could not find reference %s" % name unless section =
Puppet::Util::Reference.reference(name)
+
+ begin
+ # Add the per-section text, but with no ToC
+ text += section.send(options[:format], with_contents)
+ text += Puppet::Util::Reference.footer
+ text.gsub!(/`\w+\s+([^`]+)`:trac:/) { |m| $1 }
+ Puppet::Util::Reference.markdown(name, text)
+ rescue => detail
+ puts detail.backtrace
+ $stderr.puts "Could not generate reference %s: %s" % [name,
detail]
+ exit_code = 1
+ next
+ end
+ end
+
+ exit exit_code
+ end
+
command(:other) do
text = ""
if options[:references].length > 1
@@ -132,7 +157,7 @@ Puppet::Application.new(:puppetdoc) do
if options[:mode] == :pdf
Puppet::Util::Reference.pdf(text)
- else
+ else
puts text
end
diff --git a/lib/puppet/util/reference.rb b/lib/puppet/util/reference.rb
index 40e49f4..211ad91 100644
--- a/lib/puppet/util/reference.rb
+++ b/lib/puppet/util/reference.rb
@@ -14,7 +14,7 @@ class Puppet::Util::Reference
end
def self.modes
- %w{pdf trac text}
+ %w{pdf trac text markdown}
end
def self.newreference(name, options = {}, &block)
@@ -57,14 +57,36 @@ class Puppet::Util::Reference
$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.markdown(name, text)
+ puts "Creating markdown for #{name} reference."
+ dir = "/tmp/" + Puppet::PUPPETVERSION
+ FileUtils.mkdir(dir) unless File.directory?(dir)
+ File.open(dir + "/" + "#{name}.rst", "w") do |f|
+ f.puts text
+ end
+ pandoc = %x{which pandoc}
+ if $? != 0 or pandoc =~ /no /
+ pandoc = %x{which pandoc}
+ end
+ if $? != 0 or pandoc =~ /no /
+ raise "Could not find pandoc"
+ end
+ pandoc.chomp!
+ cmd = %{#{pandoc} -s -r rst -w markdown #{dir}/#{name}.rst -o
#{dir}/#{name}.mkdn}
+ output = %x{#{cmd}}
+ unless $? == 0
+ $stderr.puts "Pandoc failed to create #{name} reference."
+ $stderr.puts output
+ exit(1)
+ end
+
+ File.unlink(dir + "/" + "#{name}.rst")
end
def self.references
--
1.6.0.6
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Puppet Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/puppet-dev?hl=en
-~----------~----~----~----~------~----~------~--~---