lexers.py
38 lines
| 1.5 KiB
| text/x-python
|
PythonLexer
/ converters / lexers.py
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. | ||||
""" | ||||
#----------------------------------------------------------------------------- | ||||
# Copyright (c) 2012, 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. | ||||
#----------------------------------------------------------------------------- | ||||
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): | ||||
name = 'IPython' | ||||
aliases = ['ip', 'ipython'] | ||||
filenames = ['*.ipy'] | ||||
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)), | ||||
] + tokens['root'] | ||||