1 # This file is part of Librarian, licensed under GNU Affero GPLv3 or later.
 
   2 # Copyright © Fundacja Wolne Lektury. See NOTICE for more information.
 
   6 from subprocess import call, PIPE
 
   7 from tempfile import mkdtemp
 
   8 from librarian import get_resource
 
   9 from . import DataEmbed, create_embed, downgrades_to
 
  12 class LaTeX(DataEmbed):
 
  13     @downgrades_to('image/png')
 
  15         with open(get_resource('res/embeds/latex/template.tex'), 'rb') as f:
 
  16             tmpl = f.read().decode('utf-8')
 
  17         tempdir = mkdtemp('-librarian-embed-latex')
 
  18         fpath = os.path.join(tempdir, 'doc.tex')
 
  19         with open(fpath, 'wb') as f:
 
  20             f.write((tmpl % {'code': self.data}).encode('utf-8'))
 
  21         call(['xelatex', '-interaction=batchmode', '-output-directory',
 
  22               tempdir, fpath], stdout=PIPE, stderr=PIPE)
 
  23         call(['convert', '-density', '150', os.path.join(tempdir, 'doc.pdf'),
 
  24               '-trim', os.path.join(tempdir, 'doc.png')])
 
  25         pngdata = open(os.path.join(tempdir, 'doc.png'), 'rb').read()
 
  26         shutil.rmtree(tempdir)
 
  27         return create_embed('image/png', data=pngdata)