##// END OF EJS Templates
s/_is_cell_editor_focused/is_cell_editor_focused
s/_is_cell_editor_focused/is_cell_editor_focused

File last commit:

r15869:adc92e82
r15916:472f166b
Show More
coalescestreams.py
83 lines | 2.7 KiB | text/x-python | PythonLexer
Jonathan Frederic
Cleanup and refactor, transformers
r10674 """Module that allows latex output notebooks to be conditioned before
they are converted. Exposes a decorator (@cell_preprocessor) in
addition to the coalesce_streams pre-proccessor.
"""
#-----------------------------------------------------------------------------
# Copyright (c) 2013, the IPython Development Team.
#
# Distributed under the terms of the Modified BSD License.
#
# The full license is in the file COPYING.txt, distributed with this software.
#-----------------------------------------------------------------------------
Jonathan Frederic
Post code-review, extended refactor.
r10485
Jonathan Frederic
Cleanup and refactor, transformers
r10674 #-----------------------------------------------------------------------------
Jonathan Frederic
Use regex instead
r15869 # Imports
Jonathan Frederic
Cleanup and refactor, transformers
r10674 #-----------------------------------------------------------------------------
Jonathan Frederic
Use regex instead
r15869 import re
Jonathan Frederic
Post code-review, extended refactor.
r10485
Jonathan Frederic
Use regex instead
r15869 #-----------------------------------------------------------------------------
# Functions
#-----------------------------------------------------------------------------
Jonathan Frederic
Cleanup and refactor, transformers
r10674 def cell_preprocessor(function):
"""
Wrap a function to be executed on all cells of a notebook
Thomas Kluyver
Clean up numpydoc section headers
r13587 The wrapped function should have these parameters:
Thomas Kluyver
Improvements to docs formatting.
r12553
Jonathan Frederic
Cleanup and refactor, transformers
r10674 cell : NotebookNode cell
Notebook cell being processed
resources : dictionary
Additional resources used in the conversion process. Allows
Paul Ivanov
replace 'transformer' with 'preprocessor'
r12219 preprocessors to pass variables into the Jinja engine.
Jonathan Frederic
Cleanup and refactor, transformers
r10674 index : int
Index of the cell being processed
"""
def wrappedfunc(nb, resources):
Jonathan Frederic
Post code-review, extended refactor.
r10485 for worksheet in nb.worksheets :
for index, cell in enumerate(worksheet.cells):
Jonathan Frederic
Cleanup and refactor, transformers
r10674 worksheet.cells[index], resources = function(cell, resources, index)
return nb, resources
Jonathan Frederic
Post code-review, extended refactor.
r10485 return wrappedfunc
@cell_preprocessor
Jonathan Frederic
Cleanup and refactor, transformers
r10674 def coalesce_streams(cell, resources, index):
"""
Merge consecutive sequences of stream output into single stream
to prevent extra newlines inserted at flush calls
Parameters
----------
cell : NotebookNode cell
Notebook cell being processed
resources : dictionary
Additional resources used in the conversion process. Allows
transformers to pass variables into the Jinja engine.
index : int
Index of the cell being processed
"""
Jonathan Frederic
Post code-review, extended refactor.
r10485 outputs = cell.get('outputs', [])
if not outputs:
Jonathan Frederic
Cleanup and refactor, transformers
r10674 return cell, resources
Jonathan Frederic
Post code-review, extended refactor.
r10485 last = outputs[0]
new_outputs = [last]
Jonathan Frederic
Cleanup and refactor, transformers
r10674
Jonathan Frederic
Post code-review, extended refactor.
r10485 for output in outputs[1:]:
if (output.output_type == 'stream' and
last.output_type == 'stream' and
last.stream == output.stream
):
Jonathan Frederic
Use regex instead
r15869 last.text += output.text
# Respect \r characters.
cr_pat = re.compile(r'.*\r(?=[^\n])')
last.text = cr_pat.sub('', last.text)
Jonathan Frederic
Post code-review, extended refactor.
r10485 else:
new_outputs.append(output)
Jonathan Frederic
FIX, coalescestreams incorrect nesting.
r12268 last = output
Jonathan Frederic
Post code-review, extended refactor.
r10485
cell.outputs = new_outputs
Jonathan Frederic
Cleanup and refactor, transformers
r10674 return cell, resources