diff options
author | Georg Brandl <georg@python.org> | 2009-02-07 20:55:27 +0100 |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2009-02-07 20:55:27 +0100 |
commit | 361ed69a3ab667b04084c9cb402b2505b7abce1c (patch) | |
tree | 7566dac9dcfe297e4f2c65d7a4df21041ae26301 /sphinx/ext/pngmath.py | |
parent | 92033eb477a61fc0081b8d85b1b92af154b66e81 (diff) | |
download | sphinx-git-361ed69a3ab667b04084c9cb402b2505b7abce1c.tar.gz |
Don't call LaTeX or dvipng over and over again if it was not
found once, and use text-only latex as a substitute in that case.
Diffstat (limited to 'sphinx/ext/pngmath.py')
-rw-r--r-- | sphinx/ext/pngmath.py | 48 |
1 files changed, 31 insertions, 17 deletions
diff --git a/sphinx/ext/pngmath.py b/sphinx/ext/pngmath.py index dc1d2ee8d..5b7f280a5 100644 --- a/sphinx/ext/pngmath.py +++ b/sphinx/ext/pngmath.py @@ -82,6 +82,11 @@ def render_math(self, math): depth = read_png_depth(outfn) return relfn, depth + # if latex or dvipng has failed once, don't bother to try again + if hasattr(self.builder, '_mathpng_warned_latex') or \ + hasattr(self.builder, '_mathpng_warned_dvipng'): + return None, None + latex = DOC_HEAD + self.builder.config.pngmath_latex_preamble latex += (use_preview and DOC_BODY_PREVIEW or DOC_BODY) % math if isinstance(latex, unicode): @@ -116,12 +121,11 @@ def render_math(self, math): except OSError, err: if err.errno != 2: # No such file or directory raise - if not hasattr(self.builder, '_mathpng_warned_latex'): - self.builder.warn('LaTeX command %r cannot be run (needed for math ' - 'display), check the pngmath_latex setting' % - self.builder.config.pngmath_latex) - self.builder._mathpng_warned_latex = True - return relfn, None + self.builder.warn('LaTeX command %r cannot be run (needed for math ' + 'display), check the pngmath_latex setting' % + self.builder.config.pngmath_latex) + self.builder._mathpng_warned_latex = True + return None, None finally: chdir(curdir) @@ -145,12 +149,11 @@ def render_math(self, math): except OSError, err: if err.errno != 2: # No such file or directory raise - if not hasattr(self.builder, '_mathpng_warned_dvipng'): - self.builder.warn('dvipng command %r cannot be run (needed for math ' - 'display), check the pngmath_dvipng setting' % - self.builder.config.pngmath_dvipng) - self.builder._mathpng_warned_dvipng = True - return relfn, None + self.builder.warn('dvipng command %r cannot be run (needed for math ' + 'display), check the pngmath_dvipng setting' % + self.builder.config.pngmath_dvipng) + self.builder._mathpng_warned_dvipng = True + return None, None stdout, stderr = p.communicate() if p.returncode != 0: raise MathExtError('dvipng exited with error:\n[stderr]\n%s\n[stdout]\n%s' @@ -185,9 +188,15 @@ def html_visit_math(self, node): sm.walkabout(self) self.builder.warn('display latex %r: ' % node['latex'] + str(exc)) raise nodes.SkipNode - self.body.append('<img class="math" src="%s" alt="%s" %s/>' % - (fname, self.encode(node['latex']).strip(), - depth and 'style="vertical-align: %dpx" ' % (-depth) or '')) + if fname is None: + # something failed -- use text-only as a bad substitute + self.body.append('<span class="math">%s</span>' % + self.encode(node['latex']).strip()) + else: + self.body.append( + '<img class="math" src="%s" alt="%s" %s/>' % + (fname, self.encode(node['latex']).strip(), + depth and 'style="vertical-align: %dpx" ' % (-depth) or '')) raise nodes.SkipNode def html_visit_displaymath(self, node): @@ -207,8 +216,13 @@ def html_visit_displaymath(self, node): self.body.append('<p>') if node['number']: self.body.append('<span class="eqno">(%s)</span>' % node['number']) - self.body.append('<img src="%s" alt="%s" />\n</div>' % - (fname, self.encode(node['latex']).strip())) + if fname is None: + # something failed -- use text-only as a bad substitute + self.body.append('<span class="math">%s</span>' % + self.encode(node['latex']).strip()) + else: + self.body.append('<img src="%s" alt="%s" />\n</div>' % + (fname, self.encode(node['latex']).strip())) self.body.append('</p>') raise nodes.SkipNode |