def convert_to_png_blahtex(kind, tex)
FileUtils.mkdir_p get_setting(:html_png_dir)
md5sum = Digest::MD5.hexdigest(tex + " params: ")
result_file = File.join(get_setting(:html_png_dir), md5sum + ".txt")
if File.exists?(result_file)
result = File.read(result_file)
else
args = [
'--png',
'--use-preview-package',
'--shell-dvipng',
"dvipng -D #{Shellwords.shellescape(get_setting(:html_png_resolution).to_s)}",
"--temp-directory #{Shellwords.shellescape(get_setting(:html_png_dir))}",
"--png-directory #{Shellwords.shellescape(get_setting(:html_png_dir))}"
]
args << '--displaymath' if kind == :equation
result = run_blahtex(tex, args)
end
if result.nil? || result.empty?
maruku_error "Blahtex error: empty output"
return
end
doc = REXML::Document.new(result)
png = doc.root.elements.to_a.first
if png.name != 'png'
maruku_error "Blahtex error: \n#{doc}"
return
end
raise "No depth element in:\n #{doc}" unless depth = png.xpath('//depth')[0]
raise "No height element in:\n #{doc}" unless height = png.xpath('//height')[0]
raise "No md5 element in:\n #{doc}" unless md5 = png.xpath('//md5')[0]
depth = depth.text.to_f
height = height.text.to_f
raise "Height or depth was 0! in \n #{doc}" if height == 0 || depth == 0
md5 = md5.text
PNG.new("#{get_setting(:html_png_url)}#{md5}.png", depth, height)
rescue => e
maruku_error "Error: #{e}"
nil
end