summaryrefslogtreecommitdiff
path: root/sphinx/ext/pngmath.py
diff options
context:
space:
mode:
authorGeorg Brandl <georg@python.org>2009-02-07 20:55:27 +0100
committerGeorg Brandl <georg@python.org>2009-02-07 20:55:27 +0100
commit361ed69a3ab667b04084c9cb402b2505b7abce1c (patch)
tree7566dac9dcfe297e4f2c65d7a4df21041ae26301 /sphinx/ext/pngmath.py
parent92033eb477a61fc0081b8d85b1b92af154b66e81 (diff)
downloadsphinx-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.py48
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