##// END OF EJS Templates
Massive amount of work to improve the test suite, restores doctests....
Massive amount of work to improve the test suite, restores doctests. After Brian's comments, I realized that our test machinery was NOT in reality running all the ipython-syntax doctests we have. This is now fixed. The test suite isn't completely passing, but this commit is for the underlying machinery. I will now work on fixing as many broken tests as I can. Fixes https://bugs.launchpad.net/ipython/+bug/505071

File last commit:

r2275:d8b3ced1
r2414:7fce7ae8
Show More
ipython_console_highlighting.py
114 lines | 4.1 KiB | text/x-python | PythonLexer
/ docs / sphinxext / ipython_console_highlighting.py
Fernando Perez
Update docs for automatic API building.
r1850 """reST directive for syntax-highlighting ipython interactive sessions.
Brian Granger
Cleanup of docs....
r2275
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.
Fernando Perez
Update docs for automatic API building.
r1850 """
#-----------------------------------------------------------------------------
# Needed modules
# Standard library
import re
# Third party
Fernando Perez
Add the matplotlib sphinx extensions, authored by the MPL team.
r1694 from pygments.lexer import Lexer, do_insertions
Fernando Perez
Update docs for automatic API building.
r1850 from pygments.lexers.agile import (PythonConsoleLexer, PythonLexer,
PythonTracebackLexer)
Fernando Perez
Add the matplotlib sphinx extensions, authored by the MPL team.
r1694 from pygments.token import Comment, Generic
Fernando Perez
Update docs for automatic API building.
r1850
Fernando Perez
Add the matplotlib sphinx extensions, authored by the MPL team.
r1694 from sphinx import highlighting
Fernando Perez
Update docs for automatic API building.
r1850 #-----------------------------------------------------------------------------
# Global constants
Fernando Perez
Add the matplotlib sphinx extensions, authored by the MPL team.
r1694 line_re = re.compile('.*?\n')
Fernando Perez
Update docs for automatic API building.
r1850 #-----------------------------------------------------------------------------
# Code begins - classes and functions
Fernando Perez
Add the matplotlib sphinx extensions, authored by the MPL team.
r1694 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
Fernando Perez
Update docs for automatic API building.
r1850
Notes:
- Tracebacks are not currently supported.
- It assumes the default IPython prompts, not customized ones.
Fernando Perez
Add the matplotlib sphinx extensions, authored by the MPL team.
r1694 """
Fernando Perez
Update docs for automatic API building.
r1850
Fernando Perez
Add the matplotlib sphinx extensions, authored by the MPL team.
r1694 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:
Brian Granger
Cleanup of docs....
r2275 # Use the 'error' token for output. We should probably make
# our own token, but error is typicaly in a bright color like
# red, so it works fine for our output prompts.
Fernando Perez
Add the matplotlib sphinx extensions, authored by the MPL team.
r1694 insertions.append((len(curcode),
Brian Granger
Cleanup of docs....
r2275 [(0, Generic.Error, output_prompt.group())]))
Fernando Perez
Add the matplotlib sphinx extensions, authored by the MPL team.
r1694 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
Brian Granger
Cleanup of docs....
r2275
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
# sphinx, by all means fix it here. At least having this setup.py
# suppresses the sphinx warning we'd get without it.
pass
Fernando Perez
Update docs for automatic API building.
r1850 #-----------------------------------------------------------------------------
# Register the extension as a valid pygments lexer
Fernando Perez
Add the matplotlib sphinx extensions, authored by the MPL team.
r1694 highlighting.lexers['ipython'] = IPythonConsoleLexer()