bin/maruku in maruku-0.6.1 vs bin/maruku in maruku-0.7.0.beta1
- old
+ new
@@ -1,181 +1,182 @@
#!/usr/bin/env ruby
+dir = File.join(File.dirname(__FILE__), '..', 'lib')
+$LOAD_PATH.unshift dir unless $LOAD_PATH.include?(dir)
+
require 'maruku'
require 'optparse'
def cli_puts(s)
- $stderr.puts(s) if MaRuKu::Globals[:verbose]
+ $stderr.puts(s) if MaRuKu::Globals[:verbose]
end
+def benchmark(section)
+ t = Time.now
+ res = yield
+ cli_puts("%s finished in %.2f seconds." % [section, Time.now - t])
+ res
+end
export = :html
break_on_error = false
using_math = false
using_mathml = false
output_file = nil
opt = OptionParser.new do |opts|
- opts.banner = "Usage: maruku [options] [file1.md [file2.md ..."
+ opts.banner = "Usage: #{File.basename($0)} [options] [file1.md] [file2.md] ..."
- opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
- MaRuKu::Globals[:verbose] = v end
- opts.on("-u", "--[no-]unsafe", "Use unsafe features") do |v|
- MaRuKu::Globals[:unsafe_features] = v end
+ opts.on("-v", "--[no-]verbose", "Run verbosely") do |v|
+ MaRuKu::Globals[:verbose] = v
+ end
- opts.on("-b", "Break on error") do |v|
- break_on_error = true end
+ opts.on("-u", "--[no-]unsafe", "Use unsafe features") do |v|
+ MaRuKu::Globals[:unsafe_features] = v
+ end
+ opts.on("-b", "--[no-]break", "Break on error") do |v|
+ break_on_error = v
+ end
- opts.on("-i", "--math-images ENGINE", "Uses ENGINE to render TeX to PNG.") do |s|
- using_math = true
- MaRuKu::Globals[:html_math_output_png] = true
- MaRuKu::Globals[:html_math_output_mathml] = false
- MaRuKu::Globals[:html_png_engine] = s
- cli_puts "Using png engine #{s}."
- end
- opts.on("-m", "--math-engine ENGINE", "Uses ENGINE to render MathML") do |s|
- MaRuKu::Globals[:html_math_output_png] = false
- MaRuKu::Globals[:html_math_output_mathml] = true
- using_math = true
- using_mathml = true
- MaRuKu::Globals[:html_math_engine] = s
- end
+ opts.on("-i", "--math-images ENGINE", "Use ENGINE to render TeX to PNG") do |s|
+ using_math = true
+ MaRuKu::Globals[:html_math_output_png] = true
+ MaRuKu::Globals[:html_math_output_mathml] = false
+ MaRuKu::Globals[:html_png_engine] = s
+ cli_puts "Using png engine #{s}."
+ end
- opts.on("-o", "--output FILE", "Output filename") do |s|
- output_file = s
- end
+ opts.on("-m", "--math-engine ENGINE", "Use ENGINE to render MathML") do |s|
+ MaRuKu::Globals[:html_math_output_png] = false
+ MaRuKu::Globals[:html_math_output_mathml] = true
+ using_math = true
+ using_mathml = true
+ MaRuKu::Globals[:html_math_engine] = s
+ end
- opts.on_tail("--pdf", "Write PDF","First writes LaTeX, then calls pdflatex." ) do export = :pdf end
- opts.on_tail("--s5", "Write S5 slideshow") do export = :s5 end
- opts.on_tail("--html", "Write HTML") do export = :html end
- opts.on_tail("--html-frag", "Write the contents of the BODY.") do export = :html_frag end
- opts.on_tail("--tex", "Write LaTeX" ) do export = :tex end
- opts.on_tail("--inspect", "Shows the parsing result" ) do export = :inspect end
+ opts.on("-o", "--output FILE", "Output filename (`-o -' writes to stdout)") {|s| output_file = s}
- opts.on_tail("--version", "Show version") do
- puts "Maruku #{MaRuKu::Version}"; exit
- end
+ opts.on_tail("--pdf", "Output PDF;", "first writes LaTeX, then calls pdflatex") {export = :pdf}
+ opts.on_tail("--s5", "Output S5 slideshow") {export = :s5}
+ opts.on_tail("--html", "Output HTML") {export = :html}
+ opts.on_tail("--html-frag", "Output the contents of the <body> tag") {export = :html_frag}
+ opts.on_tail("--tex", "Output LaTeX" ) {export = :tex}
+ opts.on_tail("--markdown", "Output Markdown" ) {export = :markdown}
+ opts.on_tail("--inspect", "Output the parse tree") {export = :inspect}
- opts.on_tail("--ext EXTENSIONS", "Use maruku extensions (comma separated)" ) do |s|
- s.split(",").each do |e| require "maruku/ext/#{e}"; end
- end
+ opts.on_tail("--ext EXTENSIONS", "Use Maruku extensions (comma separated)") do |s|
+ s.split(",").each {|e| require "maruku/ext/#{e}"}
+ end
- opts.on_tail("-h", "--help", "Show this message") do
- puts opts
- exit
- end
+ opts.on_tail("-h", "--help", "Show this help message") do
+ puts opts
+ exit
+ end
+ opts.on_tail("--version", "Show version") do
+ puts "Maruku #{MaRuKu::Version}"
+ exit
+ end
end
-begin
-opt.parse!
-rescue OptionParser::InvalidOption=>e
- $stderr.puts e
- $stderr.puts opt
- exit
+begin
+ opt.parse!
+rescue OptionParser::InvalidOption => e
+ $stderr.puts e
+ $stderr.puts opt
+ exit 1
end
if using_math
- cli_puts "Using Math extensions."
- require 'maruku/ext/math'
+ cli_puts "Using Math extensions."
+ require 'maruku/ext/math'
end
-#p ARGV
-#p MaRuKu::Globals
+unless ARGV.empty?
+ if ARGV.size > 1 && output_file
+ $stderr.puts "Can't write #{ARGV.map {|f| f.inspect}.join(' and ')} to #{output_file.inspect}"
+ exit 1
+ end
-inputs =
-# If we are given filenames, convert each file
-if not ARGV.empty?
- ARGV.map do |f|
- # read file content
- cli_puts "Reading from file #{f.inspect}."
- [f, File.open(f,'r').read]
- end
+ # If we are given filenames, convert each file
+ ARGV.map do |f|
+ # read file content
+ cli_puts "Reading from file #{f.inspect}."
+ [f, File.read(f)]
+ end
else
- export = :html_frag if export == :html
- export = :tex_frag if export == :tex
-
- cli_puts "Reading from standard input."
- [[nil, $stdin.read]]
-end
+ export = :html_frag if export == :html
+ export = :tex_frag if export == :tex
-inputs.each do |f, input|
-
- # create Maruku
- params = {}
- params[:on_error] = break_on_error ? :raise : :warning
+ cli_puts "Reading from standard input."
+ [[nil, $stdin.read]]
+end.each do |filename, input|
+ doc = benchmark("Parsing") {Maruku.new(input, :on_error => (break_on_error ? :raise : :warning))}
- t = Time.now
- doc = Maruku.new(input, params)
+ out = ""
+ suffix = "?"
+ benchmark("Rendering") do
+ case export
+ when :html
+ suffix = using_mathml ? '.xhtml' : '.html'
+ out = doc.to_html_document
+ when :html_frag
+ suffix = '.html_frag'
+ out = doc.to_html
+ when :pdf, :tex
+ suffix = '.tex'
+ out = doc.to_latex_document
+ when :tex_frag
+ suffix = '.tex_frag'
+ out = doc.to_latex
+ when :inspect
+ suffix = '.txt'
+ out = doc.inspect
+ when :markdown
+ suffix = '.md'
+ out = doc.to_md
+ when :s5
+ suffix = '_s5slides.html'
+ out = doc.to_s5(:content_only => false, :print_slides => true)
+ end
+ end
- cli_puts ("Parsing in %.2f seconds." % (Time.now-t))
+ if (output_file.nil? && filename.nil?) || output_file == "-"
+ if export == :pdf
+ $stderr.puts "Can't write PDF to stdout"
+ exit 1
+ end
- out=""; suffix = "?"
- t = Time.now
- case export
- when :html
- suffix = using_mathml ? '.xhtml' : '.html'
- out = doc.to_html_document( {:indent => -1})
- when :html_frag
- suffix='.html_frag'
- out = doc.to_html( {:indent => -1})
- when :pdf, :tex
- suffix='.tex'
- out = doc.to_latex_document
- when :tex_frag
- suffix='.tex_frag'
- out = doc.to_latex
- when :inspect
- suffix='.txt'
- out = doc.inspect
- when :markdown
- suffix='.pretty_md'
- out = doc.to_markdown
- when :s5
- suffix='_s5slides.html'
- out = doc.to_s5({:content_only => false})
- end
+ cli_puts "Writing to standard output"
+ $stdout.puts out
+ next
+ end
- cli_puts("Rendering in %.2f seconds." % (Time.now-t))
-
- # write to file or stdout
- if f
-
- if not output_file
- dir = File.dirname(f)
- job = File.join(dir, File.basename(f, File.extname(f)))
- output_file = job + suffix
- else
- job = File.basename(output_file, File.extname(output_file))
- end
-
- if output_file == "-"
- cli_puts "Writing to standard output"
- $stdout.puts out
- else
-
- if not (export == :pdf)
- cli_puts "Writing to #{output_file}"
- File.open(output_file,'w') do |f| f.puts out end
- else
- cli_puts "Writing to #{job}.tex"
- File.open("#{job}.tex",'w') do |f| f.puts out end
- cmd = "pdflatex '#{job}.tex' -interaction=nonstopmode "+
- "'-output-directory=#{dir}' "
- cli_puts "maruku: executing $ #{cmd}"
- # run twice for cross references
- system cmd
- system cmd
- end
-
- end
- else # write to stdout
- cli_puts "Writing to standard output"
- $stdout.puts out
- end
- end
-
+ if output_file
+ job = File.basename(output_file, File.extname(output_file))
+ else
+ dir = File.dirname(filename)
+ job = File.join(dir, File.basename(filename, File.extname(filename)))
+ output_file = job + suffix
+ end
+
+ if export == :pdf
+ cli_puts "Writing to #{job}.tex"
+ File.open("#{job}.tex", 'w') {|f| f.puts out}
+ cmd = ["pdflatex", "#{job}.tex", "-interaction=nonstopmode"]
+ cmd << "-output-directory=#{dir}" if dir
+ cli_puts "maruku: executing $ #{cmd.join(' ')}"
+
+ # run twice for cross references
+ system *cmd
+ system *cmd
+ next
+ end
+
+ cli_puts "Writing to #{output_file.inspect}"
+ File.open(output_file, 'w') {|f| f.puts out}
+end