buildframework/helium/external/python/lib/common/Sphinx-0.5.1-py2.5.egg/sphinx/ext/pngmath.py
author wbernard
Wed, 23 Dec 2009 19:29:07 +0200
changeset 179 d8ac696cc51f
permissions -rw-r--r--
helium_7.0-r14027
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
179
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     2
"""
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     3
    sphinx.ext.pngmath
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     4
    ~~~~~~~~~~~~~~~~~~
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     5
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     6
    Render math in HTML via dvipng.
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     7
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     8
    :copyright: 2008 by Georg Brandl.
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
     9
    :license: BSD.
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    10
"""
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    11
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    12
import re
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    13
import shutil
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    14
import tempfile
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    15
import posixpath
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    16
from os import path, getcwd, chdir
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    17
from subprocess import Popen, PIPE
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    18
try:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    19
    from hashlib import sha1 as sha
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    20
except ImportError:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    21
    from sha import sha
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    22
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    23
from docutils import nodes
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    24
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    25
from sphinx.util import ensuredir
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    26
from sphinx.util.png import read_png_depth, write_png_depth
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    27
from sphinx.application import SphinxError
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    28
from sphinx.ext.mathbase import setup as mathbase_setup, wrap_displaymath
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    29
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    30
class MathExtError(SphinxError):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    31
    category = 'Math extension error'
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    32
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    33
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    34
DOC_HEAD = r'''
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    35
\documentclass[12pt]{article}
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    36
\usepackage[utf8]{inputenc}
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    37
\usepackage{amsmath}
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    38
\usepackage{amsthm}
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    39
\usepackage{amssymb}
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    40
\usepackage{amsfonts}
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    41
\usepackage{bm}
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    42
\pagestyle{empty}
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    43
'''
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    44
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    45
DOC_BODY = r'''
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    46
\begin{document}
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    47
%s
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    48
\end{document}
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    49
'''
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    50
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    51
DOC_BODY_PREVIEW = r'''
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    52
\usepackage[active]{preview}
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    53
\begin{document}
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    54
\begin{preview}
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    55
%s
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    56
\end{preview}
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    57
\end{document}
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    58
'''
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    59
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    60
depth_re = re.compile(r'\[\d+ depth=(-?\d+)\]')
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    61
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    62
def render_math(self, math):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    63
    """
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    64
    Render the LaTeX math expression *math* using latex and dvipng.
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    65
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    66
    Return the filename relative to the built document and the "depth",
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    67
    that is, the distance of image bottom and baseline in pixels, if the
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    68
    option to use preview_latex is switched on.
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    69
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    70
    Error handling may seem strange, but follows a pattern: if LaTeX or
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    71
    dvipng aren't available, only a warning is generated (since that enables
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    72
    people on machines without these programs to at least build the rest
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    73
    of the docs successfully).  If the programs are there, however, they
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    74
    may not fail since that indicates a problem in the math source.
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    75
    """
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    76
    use_preview = self.builder.config.pngmath_use_preview
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    77
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    78
    shasum = "%s.png" % sha(math.encode('utf-8')).hexdigest()
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    79
    relfn = posixpath.join(self.builder.imgpath, 'math', shasum)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    80
    outfn = path.join(self.builder.outdir, '_images', 'math', shasum)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    81
    if path.isfile(outfn):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    82
        depth = read_png_depth(outfn)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    83
        return relfn, depth
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    84
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    85
    latex = DOC_HEAD + self.builder.config.pngmath_latex_preamble
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    86
    latex += (use_preview and DOC_BODY_PREVIEW or DOC_BODY) % math
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    87
    if isinstance(latex, unicode):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    88
        latex = latex.encode('utf-8')
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    89
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    90
    # use only one tempdir per build -- the use of a directory is cleaner
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    91
    # than using temporary files, since we can clean up everything at once
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    92
    # just removing the whole directory (see cleanup_tempdir)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    93
    if not hasattr(self.builder, '_mathpng_tempdir'):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    94
        tempdir = self.builder._mathpng_tempdir = tempfile.mkdtemp()
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    95
    else:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    96
        tempdir = self.builder._mathpng_tempdir
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    97
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    98
    tf = open(path.join(tempdir, 'math.tex'), 'w')
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
    99
    tf.write(latex)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   100
    tf.close()
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   101
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   102
    # build latex command; old versions of latex don't have the
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   103
    # --output-directory option, so we have to manually chdir to the
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   104
    # temp dir to run it.
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   105
    ltx_args = [self.builder.config.pngmath_latex, '--interaction=nonstopmode']
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   106
    # add custom args from the config file
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   107
    ltx_args.extend(self.builder.config.pngmath_latex_args)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   108
    ltx_args.append('math.tex')
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   109
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   110
    curdir = getcwd()
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   111
    chdir(tempdir)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   112
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   113
    try:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   114
        try:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   115
            p = Popen(ltx_args, stdout=PIPE, stderr=PIPE)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   116
        except OSError, err:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   117
            if err.errno != 2:   # No such file or directory
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   118
                raise
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   119
            if not hasattr(self.builder, '_mathpng_warned_latex'):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   120
                self.builder.warn('LaTeX command %r cannot be run (needed for math '
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   121
                                  'display), check the pngmath_latex setting' %
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   122
                                  self.builder.config.pngmath_latex)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   123
                self.builder._mathpng_warned_latex = True
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   124
            return relfn, None
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   125
    finally:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   126
        chdir(curdir)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   127
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   128
    stdout, stderr = p.communicate()
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   129
    if p.returncode != 0:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   130
        raise MathExtError('latex exited with error:\n[stderr]\n%s\n[stdout]\n%s'
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   131
                           % (stderr, stdout))
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   132
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   133
    ensuredir(path.dirname(outfn))
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   134
    # use some standard dvipng arguments
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   135
    dvipng_args = [self.builder.config.pngmath_dvipng]
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   136
    dvipng_args += ['-o', outfn, '-T', 'tight', '-z9']
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   137
    # add custom ones from config value
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   138
    dvipng_args.extend(self.builder.config.pngmath_dvipng_args)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   139
    if use_preview:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   140
        dvipng_args.append('--depth')
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   141
    # last, the input file name
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   142
    dvipng_args.append(path.join(tempdir, 'math.dvi'))
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   143
    try:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   144
        p = Popen(dvipng_args, stdout=PIPE, stderr=PIPE)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   145
    except OSError, err:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   146
        if err.errno != 2:   # No such file or directory
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   147
            raise
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   148
        if not hasattr(self.builder, '_mathpng_warned_dvipng'):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   149
            self.builder.warn('dvipng command %r cannot be run (needed for math '
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   150
                              'display), check the pngmath_dvipng setting' %
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   151
                              self.builder.config.pngmath_dvipng)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   152
            self.builder._mathpng_warned_dvipng = True
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   153
        return relfn, None
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   154
    stdout, stderr = p.communicate()
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   155
    if p.returncode != 0:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   156
        raise MathExtError('dvipng exited with error:\n[stderr]\n%s\n[stdout]\n%s'
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   157
                           % (stderr, stdout))
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   158
    depth = None
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   159
    if use_preview:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   160
        for line in stdout.splitlines():
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   161
            m = depth_re.match(line)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   162
            if m:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   163
                depth = int(m.group(1))
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   164
                write_png_depth(outfn, depth)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   165
                break
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   166
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   167
    return relfn, depth
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   168
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   169
def cleanup_tempdir(app, exc):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   170
    if exc:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   171
        return
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   172
    if not hasattr(app.builder, '_mathpng_tempdir'):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   173
        return
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   174
    try:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   175
        shutil.rmtree(app.builder._mathpng_tempdir)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   176
    except Exception:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   177
        pass
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   178
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   179
def html_visit_math(self, node):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   180
    try:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   181
        fname, depth = render_math(self, '$'+node['latex']+'$')
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   182
    except MathExtError, exc:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   183
        sm = nodes.system_message(str(exc), type='WARNING', level=2,
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   184
                                  backrefs=[], source=node['latex'])
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   185
        sm.walkabout(self)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   186
        self.builder.warn('display latex %r: ' % node['latex'] + str(exc))
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   187
        raise nodes.SkipNode
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   188
    self.body.append('<img class="math" src="%s" alt="%s" %s/>' %
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   189
                     (fname, self.encode(node['latex']).strip(),
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   190
                      depth and 'style="vertical-align: %dpx" ' % (-depth) or ''))
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   191
    raise nodes.SkipNode
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   192
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   193
def html_visit_displaymath(self, node):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   194
    if node['nowrap']:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   195
        latex = node['latex']
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   196
    else:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   197
        latex = wrap_displaymath(node['latex'], None)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   198
    try:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   199
        fname, depth = render_math(self, latex)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   200
    except MathExtError, exc:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   201
        sm = nodes.system_message(str(exc), type='WARNING', level=2,
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   202
                                  backrefs=[], source=node['latex'])
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   203
        sm.walkabout(self)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   204
        self.builder.warn('inline latex %r: ' % node['latex'] + str(exc))
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   205
        raise nodes.SkipNode
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   206
    self.body.append(self.starttag(node, 'div', CLASS='math'))
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   207
    self.body.append('<p>')
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   208
    if node['number']:
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   209
        self.body.append('<span class="eqno">(%s)</span>' % node['number'])
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   210
    self.body.append('<img src="%s" alt="%s" />\n</div>' %
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   211
                     (fname, self.encode(node['latex']).strip()))
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   212
    self.body.append('</p>')
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   213
    raise nodes.SkipNode
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   214
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   215
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   216
def setup(app):
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   217
    mathbase_setup(app, (html_visit_math, None), (html_visit_displaymath, None))
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   218
    app.add_config_value('pngmath_dvipng', 'dvipng', False)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   219
    app.add_config_value('pngmath_latex', 'latex', False)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   220
    app.add_config_value('pngmath_use_preview', False, False)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   221
    app.add_config_value('pngmath_dvipng_args', ['-gamma 1.5', '-D 110'], False)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   222
    app.add_config_value('pngmath_latex_args', [], False)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   223
    app.add_config_value('pngmath_latex_preamble', '', False)
d8ac696cc51f helium_7.0-r14027
wbernard
parents:
diff changeset
   224
    app.connect('build-finished', cleanup_tempdir)