"""
    MoinMoin - Processor for a LaTeX syntax

    @copyright: 2002 by Won-kyu Park <wkpark@kldp.org>
    @copyright: 2003 by Benny Siegert (added config.latex_header)
    @license: GNU GPL, see COPYING for details.
"""

Dependencies = []

import sys, os, re, sha
from MoinMoin import config

config_external_latex = "/usr/bin/latex"
config_external_convert = "/usr/bin/convert"
config_external_dvips = "/usr/bin/dvips"
config_umask = 022

def process(request, formatter, lines):
    if not config.latex_cache_dir:
    	return
    if lines[0].strip() == "#!latex":
        del lines[0]

    texstr = '\n'.join(lines).strip()

    imgname = re.sub('\s+', ' ', texstr)
    imgname = sha.new(imgname).hexdigest()

    attdir = config.latex_cache_dir + "/LaTex/attachments"
    atturl = config.latex_cache_url + "/LaTex/attachments"
    outpath = "%s/%s.png" % (attdir, imgname)
    outurl = "%s/%s.png" % (atturl, imgname)
    if not os.path.isdir(attdir):
        os.makedirs(attdir, 0775)

    if not os.path.exists(outpath):
        vartmp = config.latex_vartmp_dir
        data = open("%s/%s.tex" % (vartmp, imgname), "w")
        data.write('\\input %s\n%s\n\\end{document}' % (config.latex_header, texstr))
        data.close()

        cmd = "cd %(vartmp)s;%(latex)s %(options)s %(tex)s >/dev/null" % {
           "latex": config_external_latex,
           "vartmp": vartmp,
           "options": '-interaction=batchmode',
           "tex": imgname
        }
	os.umask(config_umask)
        os.system(cmd)
	os.system("cd %(vartmp)s; %(dvips)s %(imgname)s.dvi -o %(imgname)s.ps" % {
            "dvips": config_external_dvips,
            "vartmp": vartmp,
            "imgname": imgname,
        })
        os.system("%(convert)s -crop 0x0 -density 120x120 %(vartmp)s/%(imgname)s.ps %(outpath)s" % {
            "convert": config_external_convert,
            "vartmp": vartmp,
            "outpath": outpath,
        })
        os.system("rm -f %(vartmp)s/%(imgname)s.*" % {
            "vartmp": vartmp,
            "imgname": imgname,
        })

    request.write(formatter.image(src="%s" % outurl, alt=texstr, align='absmiddle'))
    
