##// END OF EJS Templates
FIX, coalescestreams incorrect nesting.
Jonathan Frederic -
Show More
@@ -1,75 +1,75 b''
1 """Module that allows latex output notebooks to be conditioned before
1 """Module that allows latex output notebooks to be conditioned before
2 they are converted. Exposes a decorator (@cell_preprocessor) in
2 they are converted. Exposes a decorator (@cell_preprocessor) in
3 addition to the coalesce_streams pre-proccessor.
3 addition to the coalesce_streams pre-proccessor.
4 """
4 """
5 #-----------------------------------------------------------------------------
5 #-----------------------------------------------------------------------------
6 # Copyright (c) 2013, the IPython Development Team.
6 # Copyright (c) 2013, the IPython Development Team.
7 #
7 #
8 # Distributed under the terms of the Modified BSD License.
8 # Distributed under the terms of the Modified BSD License.
9 #
9 #
10 # The full license is in the file COPYING.txt, distributed with this software.
10 # The full license is in the file COPYING.txt, distributed with this software.
11 #-----------------------------------------------------------------------------
11 #-----------------------------------------------------------------------------
12
12
13 #-----------------------------------------------------------------------------
13 #-----------------------------------------------------------------------------
14 # Functions
14 # Functions
15 #-----------------------------------------------------------------------------
15 #-----------------------------------------------------------------------------
16
16
17 def cell_preprocessor(function):
17 def cell_preprocessor(function):
18 """
18 """
19 Wrap a function to be executed on all cells of a notebook
19 Wrap a function to be executed on all cells of a notebook
20
20
21 Wrapped Parameters
21 Wrapped Parameters
22 ----------
22 ----------
23 cell : NotebookNode cell
23 cell : NotebookNode cell
24 Notebook cell being processed
24 Notebook cell being processed
25 resources : dictionary
25 resources : dictionary
26 Additional resources used in the conversion process. Allows
26 Additional resources used in the conversion process. Allows
27 preprocessors to pass variables into the Jinja engine.
27 preprocessors to pass variables into the Jinja engine.
28 index : int
28 index : int
29 Index of the cell being processed
29 Index of the cell being processed
30 """
30 """
31
31
32 def wrappedfunc(nb, resources):
32 def wrappedfunc(nb, resources):
33 for worksheet in nb.worksheets :
33 for worksheet in nb.worksheets :
34 for index, cell in enumerate(worksheet.cells):
34 for index, cell in enumerate(worksheet.cells):
35 worksheet.cells[index], resources = function(cell, resources, index)
35 worksheet.cells[index], resources = function(cell, resources, index)
36 return nb, resources
36 return nb, resources
37 return wrappedfunc
37 return wrappedfunc
38
38
39
39
40 @cell_preprocessor
40 @cell_preprocessor
41 def coalesce_streams(cell, resources, index):
41 def coalesce_streams(cell, resources, index):
42 """
42 """
43 Merge consecutive sequences of stream output into single stream
43 Merge consecutive sequences of stream output into single stream
44 to prevent extra newlines inserted at flush calls
44 to prevent extra newlines inserted at flush calls
45
45
46 Parameters
46 Parameters
47 ----------
47 ----------
48 cell : NotebookNode cell
48 cell : NotebookNode cell
49 Notebook cell being processed
49 Notebook cell being processed
50 resources : dictionary
50 resources : dictionary
51 Additional resources used in the conversion process. Allows
51 Additional resources used in the conversion process. Allows
52 transformers to pass variables into the Jinja engine.
52 transformers to pass variables into the Jinja engine.
53 index : int
53 index : int
54 Index of the cell being processed
54 Index of the cell being processed
55 """
55 """
56
56
57 outputs = cell.get('outputs', [])
57 outputs = cell.get('outputs', [])
58 if not outputs:
58 if not outputs:
59 return cell, resources
59 return cell, resources
60
60
61 last = outputs[0]
61 last = outputs[0]
62 new_outputs = [last]
62 new_outputs = [last]
63
63
64 for output in outputs[1:]:
64 for output in outputs[1:]:
65 if (output.output_type == 'stream' and
65 if (output.output_type == 'stream' and
66 last.output_type == 'stream' and
66 last.output_type == 'stream' and
67 last.stream == output.stream
67 last.stream == output.stream
68 ):
68 ):
69 last.text += output.text
69 last.text += output.text
70 else:
70 else:
71 new_outputs.append(output)
71 new_outputs.append(output)
72 last = output
72 last = output
73
73
74 cell.outputs = new_outputs
74 cell.outputs = new_outputs
75 return cell, resources
75 return cell, resources
General Comments 0
You need to be logged in to leave comments. Login now