Revision: 6919
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=6919&view=rev
Author: mdboom
Date: 2009-02-16 15:31:13 +0000 (Mon, 16 Feb 2009)
Log Message:
-----------
Merged revisions 6918 via svnmerge from
https://matplotlib.svn.sf.net/svnroot/matplotlib/branches/v0_98_5_maint
........
r6918 | mdboom | 2009-02-16 10:23:25 -0500 (Mon, 16 Feb 2009) | 2 lines
Move plot_directive to installed source tree. Add support for inline code.
........
Modified Paths:
--------------
trunk/matplotlib/CHANGELOG
trunk/matplotlib/doc/conf.py
Added Paths:
-----------
trunk/matplotlib/lib/matplotlib/sphinxext/plot_directive.py
Removed Paths:
-------------
trunk/matplotlib/doc/sphinxext/plot_directive.py
Property Changed:
----------------
trunk/matplotlib/
trunk/matplotlib/doc/pyplots/README
trunk/matplotlib/doc/sphinxext/gen_gallery.py
trunk/matplotlib/doc/sphinxext/gen_rst.py
Property changes on: trunk/matplotlib
___________________________________________________________________
Modified: svnmerge-integrated
- /branches/v0_91_maint:1-6428 /branches/v0_98_5_maint:1-6916
+ /branches/v0_91_maint:1-6428 /branches/v0_98_5_maint:1-6918
Modified: svn:mergeinfo
- /branches/v0_91_maint:5753-5771
/branches/v0_98_5_maint:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916
+ /branches/v0_91_maint:5753-5771
/branches/v0_98_5_maint:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6809,6811,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6906-6909,6911-6912,6915-6916,6918
Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG 2009-02-16 15:23:25 UTC (rev 6918)
+++ trunk/matplotlib/CHANGELOG 2009-02-16 15:31:13 UTC (rev 6919)
@@ -1,3 +1,6 @@
+2009-02-16 Move plot_directive.py to the installed source tree. Add
+ support for inline code content - MGD
+
2009-02-16 Move mathmpl.py to the installed source tree so it is
available to other projects. - MGD
Modified: trunk/matplotlib/doc/conf.py
===================================================================
--- trunk/matplotlib/doc/conf.py 2009-02-16 15:23:25 UTC (rev 6918)
+++ trunk/matplotlib/doc/conf.py 2009-02-16 15:31:13 UTC (rev 6919)
@@ -28,8 +28,9 @@
# Add any Sphinx extension module names here, as strings. They can be
extensions
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
extensions = ['matplotlib.sphinxext.mathmpl', 'math_symbol_table',
- 'sphinx.ext.autodoc', 'matplotlib.sphinxext.only_directives',
- 'plot_directive', 'inheritance_diagram', 'gen_gallery',
'gen_rst']
+ 'sphinx.ext.autodoc', # 'matplotlib.sphinxext.only_directives',
+ 'matplotlib.sphinxext.plot_directive', 'inheritance_diagram',
+ 'gen_gallery', 'gen_rst']
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
Property changes on: trunk/matplotlib/doc/pyplots/README
___________________________________________________________________
Modified: svn:mergeinfo
-
/branches/v0_98_5_maint/doc/pyplots/README:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916
+
/branches/v0_98_5_maint/doc/pyplots/README:6581,6585,6587,6589-6609,6614,6616,6625,6652,6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918
Property changes on: trunk/matplotlib/doc/sphinxext/gen_gallery.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_91_maint/doc/_templates/gen_gallery.py:5753-5771
/branches/v0_98_5_maint/doc/sphinxext/gen_gallery.py:6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916
+ /branches/v0_91_maint/doc/_templates/gen_gallery.py:5753-5771
/branches/v0_98_5_maint/doc/sphinxext/gen_gallery.py:6660-6662,6672-6673,6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918
Property changes on: trunk/matplotlib/doc/sphinxext/gen_rst.py
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/v0_91_maint/doc/examples/gen_rst.py:5753-5771
/branches/v0_98_5_maint/doc/sphinxext/gen_rst.py:6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916
+ /branches/v0_91_maint/doc/examples/gen_rst.py:5753-5771
/branches/v0_98_5_maint/doc/sphinxext/gen_rst.py:6714-6715,6717-6732,6752-6754,6761-6773,6781,6792,6800,6802,6805,6822,6827,6850,6854,6856,6859,6861-6873,6883-6884,6886,6890-6891,6911-6912,6915-6916,6918
Deleted: trunk/matplotlib/doc/sphinxext/plot_directive.py
===================================================================
--- trunk/matplotlib/doc/sphinxext/plot_directive.py 2009-02-16 15:23:25 UTC
(rev 6918)
+++ trunk/matplotlib/doc/sphinxext/plot_directive.py 2009-02-16 15:31:13 UTC
(rev 6919)
@@ -1,303 +0,0 @@
-"""A special directive for including a matplotlib plot.
-
-Given a path to a .py file, it includes the source code inline, then:
-
-- On HTML, will include a .png with a link to a high-res .png.
-
-- On LaTeX, will include a .pdf
-
-This directive supports all of the options of the `image` directive,
-except for `target` (since plot will add its own target).
-
-Additionally, if the :include-source: option is provided, the literal
-source will be included inline, as well as a link to the source.
-
-The set of file formats to generate can be specified with the
-plot_formats configuration variable.
-"""
-
-import sys, os, glob, shutil, imp, warnings, cStringIO
-from docutils.parsers.rst import directives
-try:
- # docutils 0.4
- from docutils.parsers.rst.directives.images import align
-except ImportError:
- # docutils 0.5
- from docutils.parsers.rst.directives.images import Image
- align = Image.align
-from docutils import nodes
-
-import matplotlib
-import matplotlib.cbook as cbook
-matplotlib.use('Agg')
-import matplotlib.pyplot as plt
-import matplotlib.image as image
-from matplotlib import _pylab_helpers
-
-if hasattr(os.path, 'relpath'):
- relpath = os.path.relpath
-else:
- def relpath(target, base=os.curdir):
- """
- Return a relative path to the target from either the current dir or an
optional base dir.
- Base can be a directory specified either as absolute or relative to
current dir.
- """
-
- if not os.path.exists(target):
- raise OSError, 'Target does not exist: '+target
-
- if not os.path.isdir(base):
- raise OSError, 'Base is not a directory or does not exist: '+base
-
- base_list = (os.path.abspath(base)).split(os.sep)
- target_list = (os.path.abspath(target)).split(os.sep)
-
- # On the windows platform the target may be on a completely different
drive from the base.
- if os.name in ['nt','dos','os2'] and base_list[0] <> target_list[0]:
- raise OSError, 'Target is on a different drive to base. Target:
'+target_list[0].upper()+', base: '+base_list[0].upper()
-
- # Starting from the filepath root, work out how much of the filepath is
- # shared by base and target.
- for i in range(min(len(base_list), len(target_list))):
- if base_list[i] <> target_list[i]: break
- else:
- # If we broke out of the loop, i is pointing to the first
differing path elements.
- # If we didn't break out of the loop, i is pointing to identical
path elements.
- # Increment i so that in all cases it points to the first
differing path elements.
- i+=1
-
- rel_list = [os.pardir] * (len(base_list)-i) + target_list[i:]
- return os.path.join(*rel_list)
-
-def write_char(s):
- sys.stdout.write(s)
- sys.stdout.flush()
-
-options = {'alt': directives.unchanged,
- 'height': directives.length_or_unitless,
- 'width': directives.length_or_percentage_or_unitless,
- 'scale': directives.nonnegative_int,
- 'align': align,
- 'class': directives.class_option,
- 'include-source': directives.flag }
-
-template = """
-.. htmlonly::
-
- [%(links)s]
-
- .. image:: %(tmpdir)s/%(outname)s.png
- %(options)s
-
-.. latexonly::
- .. image:: %(tmpdir)s/%(outname)s.pdf
- %(options)s
-"""
-
-exception_template = """
-.. htmlonly::
-
- [`source code <%(linkdir)s/%(basename)s.py>`__]
-
-Exception occurred rendering plot.
-
-"""
-
-def out_of_date(original, derived):
- """
- Returns True if derivative is out-of-date wrt original,
- both of which are full file paths.
- """
- return (not os.path.exists(derived))
- # or os.stat(derived).st_mtime < os.stat(original).st_mtime)
-
-def runfile(fullpath):
- """
- Import a Python module from a path.
- """
- # Change the working directory to the directory of the example, so
- # it can get at its data files, if any.
- pwd = os.getcwd()
- path, fname = os.path.split(fullpath)
- sys.path.insert(0, os.path.abspath(path))
- stdout = sys.stdout
- sys.stdout = cStringIO.StringIO()
- os.chdir(path)
- try:
- fd = open(fname)
- module = imp.load_module("__main__", fd, fname, ('py', 'r',
imp.PY_SOURCE))
- except:
- raise
- finally:
- del sys.path[0]
- os.chdir(pwd)
- sys.stdout = stdout
- return module
-
-def makefig(fullpath, outdir):
- """
- run a pyplot script and save the low and high res PNGs and a PDF in _static
- """
- formats = [('png', 80), ('hires.png', 200), ('pdf', 50)]
-
- fullpath = str(fullpath) # todo, why is unicode breaking this
-
- basedir, fname = os.path.split(fullpath)
- basename, ext = os.path.splitext(fname)
- all_exists = True
-
- # Look for single-figure output files first
- for format, dpi in formats:
- outname = os.path.join(outdir, '%s.%s' % (basename, format))
- if out_of_date(fullpath, outname):
- all_exists = False
- break
-
- if all_exists:
- write_char('.' * len(formats))
- return 1
-
- # Then look for multi-figure output files, assuming
- # if we have some we have all...
- i = 0
- while True:
- all_exists = True
- for format, dpi in formats:
- outname = os.path.join(outdir, '%s_%02d.%s' % (basename, i,
format))
- if out_of_date(fullpath, outname):
- all_exists = False
- break
- if all_exists:
- i += 1
- else:
- break
-
- if i != 0:
- write_char('.' * i * len(formats))
- return i
-
- # We didn't find the files, so build them
-
- plt.close('all') # we need to clear between runs
- matplotlib.rcdefaults()
- # Set a figure size that doesn't overflow typical browser windows
- matplotlib.rcParams['figure.figsize'] = (5.5, 4.5)
-
- try:
- runfile(fullpath)
- except:
- s = cbook.exception_to_str("Exception running plot %s" % fullpath)
- warnings.warn(s)
- return 0
-
- fig_managers = _pylab_helpers.Gcf.get_all_fig_managers()
- for i, figman in enumerate(fig_managers):
- for format, dpi in formats:
- if len(fig_managers) == 1:
- outname = basename
- else:
- outname = "%s_%02d" % (basename, i)
- outpath = os.path.join(outdir, '%s.%s' % (outname, format))
- try:
- figman.canvas.figure.savefig(outpath, dpi=dpi)
- except:
- s = cbook.exception_to_str("Exception running plot %s" %
fullpath)
- warnings.warn(s)
- return 0
-
- write_char('*')
-
- return len(fig_managers)
-
-def plot_directive(name, arguments, options, content, lineno,
- content_offset, block_text, state, state_machine):
- """
- Handle the plot directive.
- """
- formats = setup.config.plot_formats
- if type(formats) == str:
- formats = eval(formats)
-
- reference = directives.uri(arguments[0])
- basedir, fname = os.path.split(reference)
- basename, ext = os.path.splitext(fname)
- basedir = relpath(basedir, setup.app.builder.srcdir)
-
- # Get the directory of the rst file, and determine the relative
- # path from the resulting html file to the plot_directive links
- # (linkdir). This relative path is used for html links *only*,
- # and not the embedded image. That is given an absolute path to
- # the temporary directory, and then sphinx moves the file to
- # build/html/_images for us later.
- rstdir, rstfile =
os.path.split(state_machine.document.attributes['source'])
- reldir = rstdir[len(setup.confdir)+1:]
- relparts = [p for p in os.path.split(reldir) if p.strip()]
- nparts = len(relparts)
- outdir = os.path.join('plot_directive', basedir)
- linkdir = ('../' * nparts) + outdir
-
- # tmpdir is where we build all the output files. This way the
- # plots won't have to be redone when generating latex after html.
- tmpdir = os.path.abspath(os.path.join('build', outdir))
- if not os.path.exists(tmpdir):
- cbook.mkdirs(tmpdir)
-
- # destdir is the directory within the output to store files
- # that we'll be linking to -- not the embedded images.
- destdir = os.path.abspath(os.path.join(setup.app.builder.outdir, outdir))
- if not os.path.exists(destdir):
- cbook.mkdirs(destdir)
-
- # Generate the figures, and return the number of them
- num_figs = makefig(reference, tmpdir)
-
- if options.has_key('include-source'):
- contents = open(reference, 'r').read()
- lines = ['::', ''] + [' %s'%row.rstrip() for row in
contents.split('\n')]
- del options['include-source']
- else:
- lines = []
-
- if num_figs > 0:
- options = [' :%s: %s' % (key, val) for key, val in
- options.items()]
- options = "\n".join(options)
- shutil.copyfile(reference, os.path.join(destdir, fname))
-
- for i in range(num_figs):
- if num_figs == 1:
- outname = basename
- else:
- outname = "%s_%02d" % (basename, i)
-
- # Copy the linked-to files to the destination within the build
tree,
- # and add a link for them
- links = ['`source code <%(linkdir)s/%(basename)s.py>`__']
- for format in formats[1:]:
- shutil.copyfile(os.path.join(tmpdir, outname + "." + format),
- os.path.join(destdir, outname + "." + format))
- links.append('`%s <%s/%s.%s>`__' % (format, linkdir, outname,
format))
- links = ', '.join(links) % locals()
-
- # Output the resulting reST
- lines.extend((template % locals()).split('\n'))
- else:
- lines.extend((exception_template % locals()).split('\n'))
-
- if len(lines):
- state_machine.insert_input(
- lines, state_machine.input_lines.source(0))
-
- return []
-
-def setup(app):
- setup.app = app
- setup.config = app.config
- setup.confdir = app.confdir
-
- app.add_directive('plot', plot_directive, False, (1, 0, 1), **options)
- app.add_config_value(
- 'plot_formats',
- ['png', 'hires.png', 'pdf'],
- True)
-
Copied: trunk/matplotlib/lib/matplotlib/sphinxext/plot_directive.py (from rev
6918, branches/v0_98_5_maint/lib/matplotlib/sphinxext/plot_directive.py)
===================================================================
--- trunk/matplotlib/lib/matplotlib/sphinxext/plot_directive.py
(rev 0)
+++ trunk/matplotlib/lib/matplotlib/sphinxext/plot_directive.py 2009-02-16
15:31:13 UTC (rev 6919)
@@ -0,0 +1,331 @@
+"""A special directive for including a matplotlib plot.
+
+Given a path to a .py file, it includes the source code inline, then:
+
+- On HTML, will include a .png with a link to a high-res .png.
+
+- On LaTeX, will include a .pdf
+
+This directive supports all of the options of the `image` directive,
+except for `target` (since plot will add its own target).
+
+Additionally, if the :include-source: option is provided, the literal
+source will be included inline, as well as a link to the source.
+
+The set of file formats to generate can be specified with the
+plot_formats configuration variable.
+"""
+
+import sys, os, glob, shutil, hashlib, imp, warnings, cStringIO
+try:
+ from hashlib import md5
+except ImportError:
+ from md5 import md5
+from docutils.parsers.rst import directives
+try:
+ # docutils 0.4
+ from docutils.parsers.rst.directives.images import align
+except ImportError:
+ # docutils 0.5
+ from docutils.parsers.rst.directives.images import Image
+ align = Image.align
+from docutils import nodes
+
+import matplotlib
+import matplotlib.cbook as cbook
+matplotlib.use('Agg')
+import matplotlib.pyplot as plt
+import matplotlib.image as image
+from matplotlib import _pylab_helpers
+
+import only_directives
+
+if hasattr(os.path, 'relpath'):
+ relpath = os.path.relpath
+else:
+ def relpath(target, base=os.curdir):
+ """
+ Return a relative path to the target from either the current dir or an
optional base dir.
+ Base can be a directory specified either as absolute or relative to
current dir.
+ """
+
+ if not os.path.exists(target):
+ raise OSError, 'Target does not exist: '+target
+
+ if not os.path.isdir(base):
+ raise OSError, 'Base is not a directory or does not exist: '+base
+
+ base_list = (os.path.abspath(base)).split(os.sep)
+ target_list = (os.path.abspath(target)).split(os.sep)
+
+ # On the windows platform the target may be on a completely different
drive from the base.
+ if os.name in ['nt','dos','os2'] and base_list[0] <> target_list[0]:
+ raise OSError, 'Target is on a different drive to base. Target:
'+target_list[0].upper()+', base: '+base_list[0].upper()
+
+ # Starting from the filepath root, work out how much of the filepath is
+ # shared by base and target.
+ for i in range(min(len(base_list), len(target_list))):
+ if base_list[i] <> target_list[i]: break
+ else:
+ # If we broke out of the loop, i is pointing to the first
differing path elements.
+ # If we didn't break out of the loop, i is pointing to identical
path elements.
+ # Increment i so that in all cases it points to the first
differing path elements.
+ i+=1
+
+ rel_list = [os.pardir] * (len(base_list)-i) + target_list[i:]
+ return os.path.join(*rel_list)
+
+def write_char(s):
+ sys.stdout.write(s)
+ sys.stdout.flush()
+
+options = {'alt': directives.unchanged,
+ 'height': directives.length_or_unitless,
+ 'width': directives.length_or_percentage_or_unitless,
+ 'scale': directives.nonnegative_int,
+ 'align': align,
+ 'class': directives.class_option,
+ 'include-source': directives.flag }
+
+template = """
+.. htmlonly::
+
+ [%(links)s]
+
+ .. image:: %(tmpdir)s/%(outname)s.png
+ %(options)s
+
+.. latexonly::
+ .. image:: %(tmpdir)s/%(outname)s.pdf
+ %(options)s
+"""
+
+exception_template = """
+.. htmlonly::
+
+ [`source code <%(linkdir)s/%(basename)s.py>`__]
+
+Exception occurred rendering plot.
+
+"""
+
+def out_of_date(original, derived):
+ """
+ Returns True if derivative is out-of-date wrt original,
+ both of which are full file paths.
+ """
+ return (not os.path.exists(derived))
+ # or os.stat(derived).st_mtime < os.stat(original).st_mtime)
+
+def runfile(fullpath):
+ """
+ Import a Python module from a path.
+ """
+ # Change the working directory to the directory of the example, so
+ # it can get at its data files, if any.
+ pwd = os.getcwd()
+ path, fname = os.path.split(fullpath)
+ sys.path.insert(0, os.path.abspath(path))
+ stdout = sys.stdout
+ sys.stdout = cStringIO.StringIO()
+ os.chdir(path)
+ try:
+ fd = open(fname)
+ module = imp.load_module("__main__", fd, fname, ('py', 'r',
imp.PY_SOURCE))
+ except:
+ raise
+ finally:
+ del sys.path[0]
+ os.chdir(pwd)
+ sys.stdout = stdout
+ return module
+
+def makefig(fullpath, code, outdir):
+ """
+ run a pyplot script and save the low and high res PNGs and a PDF in _static
+ """
+ formats = [('png', 80), ('hires.png', 200), ('pdf', 50)]
+
+ fullpath = str(fullpath) # todo, why is unicode breaking this
+ basedir, fname = os.path.split(fullpath)
+ basename, ext = os.path.splitext(fname)
+
+ if str(basename) == "None":
+ import pdb
+ pdb.set_trace()
+
+ all_exists = True
+
+ # Look for single-figure output files first
+ for format, dpi in formats:
+ outname = os.path.join(outdir, '%s.%s' % (basename, format))
+ if out_of_date(fullpath, outname):
+ all_exists = False
+ break
+
+ if all_exists:
+ write_char('.' * len(formats))
+ return 1
+
+ # Then look for multi-figure output files, assuming
+ # if we have some we have all...
+ i = 0
+ while True:
+ all_exists = True
+ for format, dpi in formats:
+ outname = os.path.join(outdir, '%s_%02d.%s' % (basename, i,
format))
+ if out_of_date(fullpath, outname):
+ all_exists = False
+ break
+ if all_exists:
+ i += 1
+ else:
+ break
+
+ if i != 0:
+ write_char('.' * i * len(formats))
+ return i
+
+ # We didn't find the files, so build them
+
+ plt.close('all') # we need to clear between runs
+ matplotlib.rcdefaults()
+ # Set a figure size that doesn't overflow typical browser windows
+ matplotlib.rcParams['figure.figsize'] = (5.5, 4.5)
+
+ if code is not None:
+ exec(code)
+ else:
+ try:
+ runfile(fullpath)
+ except:
+ s = cbook.exception_to_str("Exception running plot %s" % fullpath)
+ warnings.warn(s)
+ return 0
+
+ fig_managers = _pylab_helpers.Gcf.get_all_fig_managers()
+ for i, figman in enumerate(fig_managers):
+ for format, dpi in formats:
+ if len(fig_managers) == 1:
+ outname = basename
+ else:
+ outname = "%s_%02d" % (basename, i)
+ outpath = os.path.join(outdir, '%s.%s' % (outname, format))
+ try:
+ figman.canvas.figure.savefig(outpath, dpi=dpi)
+ except:
+ s = cbook.exception_to_str("Exception running plot %s" %
fullpath)
+ warnings.warn(s)
+ return 0
+
+ write_char('*')
+
+ return len(fig_managers)
+
+def plot_directive(name, arguments, options, content, lineno,
+ content_offset, block_text, state, state_machine):
+ """
+ Handle the plot directive.
+ """
+ formats = setup.config.plot_formats
+ if type(formats) == str:
+ formats = eval(formats)
+
+ # The user may provide a filename *or* Python code content, but not both
+ if len(arguments) == 1:
+ reference = directives.uri(arguments[0])
+ basedir, fname = os.path.split(reference)
+ basename, ext = os.path.splitext(fname)
+ basedir = relpath(basedir, setup.app.builder.srcdir)
+ if len(content):
+ raise ValueError("plot directive may not specify both a filename
and inline content")
+ content = None
+ else:
+ basedir = "inline"
+ content = '\n'.join(content)
+ # Since we don't have a filename, use a hash based on the content
+ reference = basename = md5(content).hexdigest()[-10:]
+ fname = None
+
+ # Get the directory of the rst file, and determine the relative
+ # path from the resulting html file to the plot_directive links
+ # (linkdir). This relative path is used for html links *only*,
+ # and not the embedded image. That is given an absolute path to
+ # the temporary directory, and then sphinx moves the file to
+ # build/html/_images for us later.
+ rstdir, rstfile =
os.path.split(state_machine.document.attributes['source'])
+ reldir = rstdir[len(setup.confdir)+1:]
+ relparts = [p for p in os.path.split(reldir) if p.strip()]
+ nparts = len(relparts)
+ outdir = os.path.join('plot_directive', basedir)
+ linkdir = ('../' * nparts) + outdir
+
+ # tmpdir is where we build all the output files. This way the
+ # plots won't have to be redone when generating latex after html.
+ tmpdir = os.path.abspath(os.path.join('build', outdir))
+ if not os.path.exists(tmpdir):
+ cbook.mkdirs(tmpdir)
+
+ # destdir is the directory within the output to store files
+ # that we'll be linking to -- not the embedded images.
+ destdir = os.path.abspath(os.path.join(setup.app.builder.outdir, outdir))
+ if not os.path.exists(destdir):
+ cbook.mkdirs(destdir)
+
+ # Generate the figures, and return the number of them
+ num_figs = makefig(reference, content, tmpdir)
+
+ if options.has_key('include-source'):
+ if content is None:
+ content = open(reference, 'r').read()
+ lines = ['::', ''] + [' %s'%row.rstrip() for row in
content.split('\n')]
+ del options['include-source']
+ else:
+ lines = []
+
+ if num_figs > 0:
+ options = [' :%s: %s' % (key, val) for key, val in
+ options.items()]
+ options = "\n".join(options)
+ if fname is not None:
+ shutil.copyfile(reference, os.path.join(destdir, fname))
+
+ for i in range(num_figs):
+ if num_figs == 1:
+ outname = basename
+ else:
+ outname = "%s_%02d" % (basename, i)
+
+ # Copy the linked-to files to the destination within the build
tree,
+ # and add a link for them
+ links = []
+ if fname is not None:
+ links.append('`source code <%(linkdir)s/%(basename)s.py>`__')
+ for format in formats[1:]:
+ shutil.copyfile(os.path.join(tmpdir, outname + "." + format),
+ os.path.join(destdir, outname + "." + format))
+ links.append('`%s <%s/%s.%s>`__' % (format, linkdir, outname,
format))
+ links = ', '.join(links) % locals()
+
+ # Output the resulting reST
+ lines.extend((template % locals()).split('\n'))
+ else:
+ lines.extend((exception_template % locals()).split('\n'))
+
+ if len(lines):
+ state_machine.insert_input(
+ lines, state_machine.input_lines.source(0))
+
+ return []
+
+def setup(app):
+ setup.app = app
+ setup.config = app.config
+ setup.confdir = app.confdir
+
+ app.add_directive('plot', plot_directive, True, (0, 1, 0), **options)
+ app.add_config_value(
+ 'plot_formats',
+ ['png', 'hires.png', 'pdf'],
+ True)
+
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Open Source Business Conference (OSBC), March 24-25, 2009, San Francisco, CA
-OSBC tackles the biggest issue in open source: Open Sourcing the Enterprise
-Strategies to boost innovation and cut costs with open source participation
-Receive a $600 discount off the registration fee with the source code: SFAD
http://p.sf.net/sfu/XcvMzF8H
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins