##// END OF EJS Templates
Add tests for nbconvert HTTP service
Add tests for nbconvert HTTP service

File last commit:

r13505:516dd69f
r13828:52a4b7c1
Show More
highlight.py
121 lines | 3.8 KiB | text/x-python | PythonLexer
Jonathan Frederic
Cleanup and refactor of filters
r10676 """
Module containing filter functions that allow code to be highlighted
from within Jinja templates.
"""
#-----------------------------------------------------------------------------
# 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.
#-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Imports
#-----------------------------------------------------------------------------
Jonathan Frederic
Almost have nbconvert working again...
r10630
Pablo de Oliveira
Select adequate highlighter for cell magic languages...
r12571 from pygments import highlight as pygements_highlight
Jonathan Frederic
Almost have nbconvert working again...
r10630 from pygments.lexers import get_lexer_by_name
from pygments.formatters import HtmlFormatter
from pygments.formatters import LatexFormatter
Matthias BUSSONNIER
LaTeX highlighter configurable, + tests
r13505
Jonathan Frederic
Almost have nbconvert working again...
r10630
Jonathan Frederic
Post code-review, extended refactor.
r10485 # Our own imports
Brian E. Granger
Fixing import for nbconvert.
r11089 from IPython.nbconvert.utils.lexers import IPythonLexer
Matthias BUSSONNIER
LaTeX highlighter configurable, + tests
r13505 from IPython.nbconvert.utils.base import NbConvertBase
Jonathan Frederic
Post code-review, extended refactor.
r10485
#-----------------------------------------------------------------------------
# Globals and constants
#-----------------------------------------------------------------------------
Jonathan Frederic
Cleanup and refactor of filters
r10676 MULTILINE_OUTPUTS = ['text', 'html', 'svg', 'latex', 'javascript', 'json']
Jonathan Frederic
Post code-review, extended refactor.
r10485
#-----------------------------------------------------------------------------
# Utility functions
#-----------------------------------------------------------------------------
Jonathan Frederic
Cleanup and refactor of filters
r10676
Brian E. Granger
Fixing import logic.
r11088 __all__ = [
Matthias BUSSONNIER
make default language highlight configurable for html
r13128 'Highlight2Html',
Matthias BUSSONNIER
LaTeX highlighter configurable, + tests
r13505 'Highlight2Latex'
Brian E. Granger
Fixing import logic.
r11088 ]
Jonathan Frederic
Add strip_verbatim to latex highlight
r12717
Matthias BUSSONNIER
LaTeX highlighter configurable, + tests
r13505 class Highlight2Html(NbConvertBase):
Matthias BUSSONNIER
make default language highlight configurable for html
r13128
def __call__(self, source, language=None, metadata=None):
"""
Return a syntax-highlighted version of the input source as html output.
Parameters
----------
source : str
source of the cell to highlight
language : str
language to highlight the syntax of
metadata : NotebookNode cell metadata
metadata of the cell to highlight
"""
if not language:
Matthias BUSSONNIER
LaTeX highlighter configurable, + tests
r13505 language=self.default_language
Pablo de Oliveira
Select adequate highlighter for cell magic languages...
r12571
Matthias BUSSONNIER
make default language highlight configurable for html
r13128 return _pygment_highlight(source, HtmlFormatter(), language, metadata)
Jonathan Frederic
Cleanup and refactor of filters
r10676
Jonathan Frederic
Post code-review, extended refactor.
r10485
Matthias BUSSONNIER
LaTeX highlighter configurable, + tests
r13505 class Highlight2Latex(NbConvertBase):
Pablo de Oliveira
Select adequate highlighter for cell magic languages...
r12571
Matthias BUSSONNIER
LaTeX highlighter configurable, + tests
r13505 def __call__(self, source, language=None, metadata=None, strip_verbatim=False):
"""
Return a syntax-highlighted version of the input source as latex output.
Parameters
----------
source : str
source of the cell to highlight
language : str
language to highlight the syntax of
metadata : NotebookNode cell metadata
metadata of the cell to highlight
strip_verbatim : bool
remove the Verbatim environment that pygments provides by default
"""
if not language:
language=self.default_language
latex = _pygment_highlight(source, LatexFormatter(), language, metadata)
if strip_verbatim:
latex = latex.replace(r'\begin{Verbatim}[commandchars=\\\{\}]' + '\n', '')
return latex.replace('\n\\end{Verbatim}\n', '')
else:
return latex
Pablo de Oliveira
Select adequate highlighter for cell magic languages...
r12571
Pablo de Oliveira
highlight: Swap metadata and language keyword arguments
r12578 def _pygment_highlight(source, output_formatter, language='ipython', metadata=None):
Jonathan Frederic
Post code-review, extended refactor.
r10485 """
Return a syntax-highlighted version of the input source
Pablo de Oliveira
Select adequate highlighter for cell magic languages...
r12571
Jonathan Frederic
Cleanup and refactor of filters
r10676 Parameters
----------
Pablo de Oliveira
highlight filter: pass metadata as an optional argument
r12577 source : str
Jonathan Frederic
Add strip_verbatim to latex highlight
r12717 source of the cell to highlight
Jonathan Frederic
Cleanup and refactor of filters
r10676 output_formatter : Pygments formatter
language : str
Jonathan Frederic
Add strip_verbatim to latex highlight
r12717 language to highlight the syntax of
Pablo de Oliveira
highlight: Swap metadata and language keyword arguments
r12578 metadata : NotebookNode cell metadata
Jonathan Frederic
Add strip_verbatim to latex highlight
r12717 metadata of the cell to highlight
Jonathan Frederic
Post code-review, extended refactor.
r10485 """
Pablo de Oliveira
Select adequate highlighter for cell magic languages...
r12571
Pablo de Oliveira
highlight: cell metadata to decide how to highlight foreign languages...
r12572 # If the cell uses a magic extension language,
# use the magic language instead.
if language == 'ipython' \
Pablo de Oliveira
highlight filter: pass metadata as an optional argument
r12577 and metadata \
and 'magics_language' in metadata:
Pablo de Oliveira
highlight: cell metadata to decide how to highlight foreign languages...
r12572
Pablo de Oliveira
highlight filter: pass metadata as an optional argument
r12577 language = metadata['magics_language']
Pablo de Oliveira
Select adequate highlighter for cell magic languages...
r12571
Jonathan Frederic
Cleanup and refactor of filters
r10676 if language == 'ipython':
Jonathan Frederic
Post code-review, extended refactor.
r10485 lexer = IPythonLexer()
else:
Jonathan Frederic
Cleanup and refactor of filters
r10676 lexer = get_lexer_by_name(language, stripall=True)
Jonathan Frederic
Post code-review, extended refactor.
r10485
Pablo de Oliveira
highlight filter: pass metadata as an optional argument
r12577 return pygements_highlight(source, lexer, output_formatter)