##// END OF EJS Templates
Backport PR #8131: handle undefined when sorting quick help...
Backport PR #8131: handle undefined when sorting quick help Since undefined is neither less than nor greater than anything in Javascript, the sort function was treating it as equal to everything, causing inconsistent behavior depending on the sort algorithm of the browser. closes #8089 This ensures undefined elements are sorted last in the sequence.

File last commit:

r18580:ba8461eb
r20884:3740b498
Show More
highlightmagics.py
100 lines | 3.2 KiB | text/x-python | PythonLexer
Pablo de Oliveira
Add HighlightMagicsPreprocessor...
r12573 """This preprocessor detect cells using a different language through
magic extensions such as `%%R` or `%%octave`. Cell's metadata is marked
so that the appropriate highlighter can be used in the `highlight`
filter.
"""
MinRK
update nbconvert to nbformat 4
r18580 # Copyright (c) IPython Development Team.
Pablo de Oliveira
Add HighlightMagicsPreprocessor...
r12573 # Distributed under the terms of the Modified BSD License.
from __future__ import print_function, absolute_import
import re
# Our own imports
Pablo de Oliveira
Fix style
r12587 from .base import Preprocessor
Pablo de Oliveira
Add HighlightMagicsPreprocessor...
r12573 from IPython.utils.traitlets import Dict
class HighlightMagicsPreprocessor(Preprocessor):
"""
Detects and tags code cells that use a different languages than Python.
"""
# list of magic language extensions and their associated pygment lexers
Pablo de Oliveira
HighlightMagics: merge default languages with the user config languages...
r12575 default_languages = Dict(
Pablo de Oliveira
Add HighlightMagicsPreprocessor...
r12573 default_value={
'%%R': 'r',
'%%bash': 'bash',
Pablo de Oliveira
HighlightMagics: Add new default languages
r12576 '%%cython': 'cython',
'%%javascript': 'javascript',
'%%julia': 'julia',
'%%latex': 'latex',
Pablo de Oliveira
Add HighlightMagicsPreprocessor...
r12573 '%%octave': 'octave',
'%%perl': 'perl',
Pablo de Oliveira
HighlightMagics: Add new default languages
r12576 '%%ruby': 'ruby',
Pablo de Oliveira
HighlightMagics: Remove unnecessary config=false
r12579 '%%sh': 'sh'})
Pablo de Oliveira
HighlightMagics: merge default languages with the user config languages...
r12575
# user defined language extensions
languages = Dict(
Pablo de Oliveira
Add HighlightMagicsPreprocessor...
r12573 config=True,
help=("Syntax highlighting for magic's extension languages. "
"Each item associates a language magic extension such as %%R, "
"with a pygments lexer such as r."))
def __init__(self, config=None, **kw):
"""Public constructor"""
super(HighlightMagicsPreprocessor, self).__init__(config=config, **kw)
Pablo de Oliveira
HighlightMagics: merge default languages with the user config languages...
r12575 # Update the default languages dict with the user configured ones
self.default_languages.update(self.languages)
Pablo de Oliveira
Add HighlightMagicsPreprocessor...
r12573 # build a regular expression to catch language extensions and choose
# an adequate pygments lexer
Pablo de Oliveira
HighlightMagics: merge default languages with the user config languages...
r12575 any_language = "|".join(self.default_languages.keys())
Pablo de Oliveira
Add HighlightMagicsPreprocessor...
r12573 self.re_magic_language = re.compile(
r'^\s*({0})\s+'.format(any_language))
def which_magic_language(self, source):
"""
When a cell uses another language through a magic extension,
the other language is returned.
If no language magic is detected, this function returns None.
Parameters
----------
source: str
Source code of the cell to highlight
"""
m = self.re_magic_language.match(source)
if m:
# By construction of the re, the matched language must be in the
Pablo de Oliveira
HighlightMagics: Remove assert and fix typo
r12580 # languages dictionary
Pablo de Oliveira
HighlightMagics: merge default languages with the user config languages...
r12575 return self.default_languages[m.group(1)]
Pablo de Oliveira
Add HighlightMagicsPreprocessor...
r12573 else:
return None
def preprocess_cell(self, cell, resources, cell_index):
"""
Tags cells using a magic extension language
Parameters
----------
cell : NotebookNode cell
Notebook cell being processed
resources : dictionary
Additional resources used in the conversion process. Allows
preprocessors to pass variables into the Jinja engine.
cell_index : int
Index of the cell being processed (see base.py)
"""
# Only tag code cells
MinRK
update nbconvert to nbformat 4
r18580 if cell.cell_type == "code":
magic_language = self.which_magic_language(cell.source)
Pablo de Oliveira
Add HighlightMagicsPreprocessor...
r12573 if magic_language:
cell['metadata']['magics_language'] = magic_language
return cell, resources