lexers.py
46 lines
| 1.7 KiB
| text/x-python
|
PythonLexer
David Warde-Farley
|
r8789 | """A custom pygments lexer for IPython code cells. | ||
Informs The pygments highlighting library of the quirks of IPython's superset | ||||
of Python -- magic commands, !shell commands, etc. | ||||
""" | ||||
#----------------------------------------------------------------------------- | ||||
Jonathan Frederic
|
r10673 | # Copyright (c) 2013, the IPython Development Team. | ||
David Warde-Farley
|
r8789 | # | ||
# Distributed under the terms of the Modified BSD License. | ||||
# | ||||
# The full license is in the file COPYING.txt, distributed with this software. | ||||
#----------------------------------------------------------------------------- | ||||
MinRK
|
r7912 | #----------------------------------------------------------------------------- | ||
# Imports | ||||
#----------------------------------------------------------------------------- | ||||
David Warde-Farley
|
r8789 | # Third-party imports | ||
MinRK
|
r7912 | from pygments.lexers import PythonLexer, BashLexer | ||
from pygments.lexer import bygroups, using | ||||
David Warde-Farley
|
r8748 | from pygments.token import Keyword, Operator, Text | ||
MinRK
|
r7912 | #----------------------------------------------------------------------------- | ||
David Warde-Farley
|
r8808 | # Class declarations | ||
MinRK
|
r7912 | #----------------------------------------------------------------------------- | ||
class IPythonLexer(PythonLexer): | ||||
Jonathan Frederic
|
r10673 | """ | ||
Pygments Lexer for use with IPython code. Inherits from | ||||
PythonLexer and adds information about IPython specific | ||||
keywords (i.e. magic commands, shell commands, etc.) | ||||
""" | ||||
#Basic properties | ||||
MinRK
|
r7912 | name = 'IPython' | ||
aliases = ['ip', 'ipython'] | ||||
filenames = ['*.ipy'] | ||||
Jonathan Frederic
|
r10673 | |||
#Highlighting information | ||||
MinRK
|
r7912 | tokens = PythonLexer.tokens.copy() | ||
tokens['root'] = [ | ||||
David Warde-Farley
|
r8749 | (r'(\%+)(\w+)\s+(\.*)(\n)', bygroups(Operator, Keyword, | ||
using(BashLexer), Text)), | ||||
MinRK
|
r7912 | (r'(\%+)(\w+)\b', bygroups(Operator, Keyword)), | ||
(r'^(!)(.+)(\n)', bygroups(Operator, using(BashLexer), Text)), | ||||
Jonathan Frederic
|
r10673 | ] + tokens['root'] | ||