forked from pandas-dev/pandas
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
DOC/BLD: update vendored IPython.sphinxext version (pandas-dev#19765)
updated to commit cc353b25b0fff58e4ed13899df9b3c8153df01d9 from ipython/ipython
- Loading branch information
1 parent
0ca6680
commit 52be57d
Showing
2 changed files
with
225 additions
and
234 deletions.
There are no files selected for viewing
120 changes: 16 additions & 104 deletions
120
doc/sphinxext/ipython_sphinxext/ipython_console_highlighting.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,116 +1,28 @@ | ||
"""reST directive for syntax-highlighting ipython interactive sessions. | ||
XXX - See what improvements can be made based on the new (as of Sept 2009) | ||
'pycon' lexer for the python console. At the very least it will give better | ||
highlighted tracebacks. | ||
""" | ||
reST directive for syntax-highlighting ipython interactive sessions. | ||
#----------------------------------------------------------------------------- | ||
# Needed modules | ||
|
||
# Standard library | ||
import re | ||
|
||
# Third party | ||
from pygments.lexer import Lexer, do_insertions | ||
from pygments.lexers.agile import (PythonConsoleLexer, PythonLexer, | ||
PythonTracebackLexer) | ||
from pygments.token import Comment, Generic | ||
""" | ||
|
||
from sphinx import highlighting | ||
|
||
#----------------------------------------------------------------------------- | ||
# Global constants | ||
line_re = re.compile('.*?\n') | ||
|
||
#----------------------------------------------------------------------------- | ||
# Code begins - classes and functions | ||
|
||
|
||
class IPythonConsoleLexer(Lexer): | ||
|
||
""" | ||
For IPython console output or doctests, such as: | ||
.. sourcecode:: ipython | ||
In [1]: a = 'foo' | ||
In [2]: a | ||
Out[2]: 'foo' | ||
In [3]: print(a) | ||
foo | ||
In [4]: 1 / 0 | ||
Notes: | ||
- Tracebacks are not currently supported. | ||
- It assumes the default IPython prompts, not customized ones. | ||
""" | ||
|
||
name = 'IPython console session' | ||
aliases = ['ipython'] | ||
mimetypes = ['text/x-ipython-console'] | ||
input_prompt = re.compile("(In \[[0-9]+\]: )|( \.\.\.+:)") | ||
output_prompt = re.compile("(Out\[[0-9]+\]: )|( \.\.\.+:)") | ||
continue_prompt = re.compile(" \.\.\.+:") | ||
tb_start = re.compile("\-+") | ||
|
||
def get_tokens_unprocessed(self, text): | ||
pylexer = PythonLexer(**self.options) | ||
tblexer = PythonTracebackLexer(**self.options) | ||
|
||
curcode = '' | ||
insertions = [] | ||
for match in line_re.finditer(text): | ||
line = match.group() | ||
input_prompt = self.input_prompt.match(line) | ||
continue_prompt = self.continue_prompt.match(line.rstrip()) | ||
output_prompt = self.output_prompt.match(line) | ||
if line.startswith("#"): | ||
insertions.append((len(curcode), | ||
[(0, Comment, line)])) | ||
elif input_prompt is not None: | ||
insertions.append((len(curcode), | ||
[(0, Generic.Prompt, input_prompt.group())])) | ||
curcode += line[input_prompt.end():] | ||
elif continue_prompt is not None: | ||
insertions.append((len(curcode), | ||
[(0, Generic.Prompt, continue_prompt.group())])) | ||
curcode += line[continue_prompt.end():] | ||
elif output_prompt is not None: | ||
# Use the 'error' token for output. We should probably make | ||
# our own token, but error is typically in a bright color like | ||
# red, so it works fine for our output prompts. | ||
insertions.append((len(curcode), | ||
[(0, Generic.Error, output_prompt.group())])) | ||
curcode += line[output_prompt.end():] | ||
else: | ||
if curcode: | ||
for item in do_insertions(insertions, | ||
pylexer.get_tokens_unprocessed(curcode)): | ||
yield item | ||
curcode = '' | ||
insertions = [] | ||
yield match.start(), Generic.Output, line | ||
if curcode: | ||
for item in do_insertions(insertions, | ||
pylexer.get_tokens_unprocessed(curcode)): | ||
yield item | ||
|
||
from IPython.lib.lexers import IPyLexer | ||
|
||
def setup(app): | ||
"""Setup as a sphinx extension.""" | ||
|
||
# This is only a lexer, so adding it below to pygments appears sufficient. | ||
# But if somebody knows that the right API usage should be to do that via | ||
# But if somebody knows what the right API usage should be to do that via | ||
# sphinx, by all means fix it here. At least having this setup.py | ||
# suppresses the sphinx warning we'd get without it. | ||
pass | ||
metadata = {'parallel_read_safe': True, 'parallel_write_safe': True} | ||
return metadata | ||
|
||
# Register the extension as a valid pygments lexer. | ||
# Alternatively, we could register the lexer with pygments instead. This would | ||
# require using setuptools entrypoints: http://pygments.org/docs/plugins | ||
|
||
ipy2 = IPyLexer(python3=False) | ||
ipy3 = IPyLexer(python3=True) | ||
|
||
#----------------------------------------------------------------------------- | ||
# Register the extension as a valid pygments lexer | ||
highlighting.lexers['ipython'] = IPythonConsoleLexer() | ||
highlighting.lexers['ipython'] = ipy2 | ||
highlighting.lexers['ipython2'] = ipy2 | ||
highlighting.lexers['ipython3'] = ipy3 |
Oops, something went wrong.