|
58 | 58 | The encoding will not be inferred using the ``-*- coding -*-`` |
59 | 59 | metacomment. |
60 | 60 |
|
61 | | - context : bool |
| 61 | + context : bool or str |
62 | 62 | If provided, the code will be run in the context of all |
63 | 63 | previous plot directives for which the `:context:` option was |
64 | 64 | specified. This only applies to inline code plot directives, |
65 | | - not those run from files. |
| 65 | + not those run from files. If the ``:context: reset`` is specified, |
| 66 | + the context is reset for this and future plots. |
66 | 67 |
|
67 | 68 | nofigs : bool |
68 | 69 | If specified, the code block will be run, but no figures will |
@@ -249,9 +250,19 @@ def _option_boolean(arg): |
249 | 250 | else: |
250 | 251 | raise ValueError('"%s" unknown boolean' % arg) |
251 | 252 |
|
| 253 | + |
| 254 | +def _option_context(arg): |
| 255 | + if arg in [None, 'reset']: |
| 256 | + return arg |
| 257 | + else: |
| 258 | + raise ValueError("argument should be None or 'reset'") |
| 259 | + return directives.choice(arg, ('None', 'reset')) |
| 260 | + |
| 261 | + |
252 | 262 | def _option_format(arg): |
253 | 263 | return directives.choice(arg, ('python', 'doctest')) |
254 | 264 |
|
| 265 | + |
255 | 266 | def _option_align(arg): |
256 | 267 | return directives.choice(arg, ("top", "middle", "bottom", "left", "center", |
257 | 268 | "right")) |
@@ -299,7 +310,7 @@ def setup(app): |
299 | 310 | 'class': directives.class_option, |
300 | 311 | 'include-source': _option_boolean, |
301 | 312 | 'format': _option_format, |
302 | | - 'context': directives.flag, |
| 313 | + 'context': _option_context, |
303 | 314 | 'nofigs': directives.flag, |
304 | 315 | 'encoding': directives.encoding |
305 | 316 | } |
@@ -561,7 +572,7 @@ def clear_state(plot_rcparams, close=True): |
561 | 572 | matplotlib.rcParams.update(plot_rcparams) |
562 | 573 |
|
563 | 574 | def render_figures(code, code_path, output_dir, output_base, context, |
564 | | - function_name, config): |
| 575 | + function_name, config, context_reset=False): |
565 | 576 | """ |
566 | 577 | Run a pyplot script and save the low and high res PNGs and a PDF |
567 | 578 | in outdir. |
@@ -636,6 +647,8 @@ def render_figures(code, code_path, output_dir, output_base, context, |
636 | 647 | else: |
637 | 648 | ns = {} |
638 | 649 |
|
| 650 | + if context_reset: |
| 651 | + clear_state(config.plot_rcparams) |
639 | 652 |
|
640 | 653 | for i, code_piece in enumerate(code_pieces): |
641 | 654 |
|
@@ -680,6 +693,7 @@ def run(arguments, content, options, state_machine, state, lineno): |
680 | 693 |
|
681 | 694 | options.setdefault('include-source', config.plot_include_source) |
682 | 695 | context = 'context' in options |
| 696 | + context_reset = True if (context and options['context'] == 'reset') else False |
683 | 697 |
|
684 | 698 | rst_file = document.attributes['source'] |
685 | 699 | rst_dir = os.path.dirname(rst_file) |
@@ -764,7 +778,8 @@ def run(arguments, content, options, state_machine, state, lineno): |
764 | 778 | # make figures |
765 | 779 | try: |
766 | 780 | results = render_figures(code, source_file_name, build_dir, output_base, |
767 | | - context, function_name, config) |
| 781 | + context, function_name, config, |
| 782 | + context_reset=context_reset) |
768 | 783 | errors = [] |
769 | 784 | except PlotError as err: |
770 | 785 | reporter = state.memo.reporter |
|
0 commit comments