Show More
@@ -0,0 +1,40 b'' | |||
|
1 | """Config file for 'doctest' profile. | |
|
2 | ||
|
3 | This profile modifies the prompts to be the standard Python ones, so that you | |
|
4 | can generate easily doctests from an IPython session. | |
|
5 | ||
|
6 | But more importantly, it enables pasting of code with '>>>' prompts and | |
|
7 | arbitrary initial whitespace, as is typical of doctests in reST files and | |
|
8 | docstrings. This allows you to easily re-run existing doctests and iteratively | |
|
9 | work on them as part of your development workflow. | |
|
10 | ||
|
11 | The exception mode is also set to 'plain' so the generated exceptions are as | |
|
12 | similar as possible to the default Python ones, for inclusion in doctests.""" | |
|
13 | ||
|
14 | # get various stuff that are there for historical / familiarity reasons | |
|
15 | import ipy_legacy | |
|
16 | ||
|
17 | from IPython import ipapi | |
|
18 | ||
|
19 | from IPython.Extensions import InterpreterPasteInput | |
|
20 | ||
|
21 | def main(): | |
|
22 | ip = ipapi.get() | |
|
23 | o = ip.options | |
|
24 | ||
|
25 | # Set the prompts similar to the defaults | |
|
26 | o.prompt_in1 = '>>> ' | |
|
27 | o.prompt_in2 = '... ' | |
|
28 | o.prompt_out = '' | |
|
29 | ||
|
30 | # No separation between successive inputs | |
|
31 | o.separate_in = '' | |
|
32 | ||
|
33 | # Disable pprint, so that outputs are printed as similarly to standard | |
|
34 | # python as possible | |
|
35 | o.pprint = 0 | |
|
36 | ||
|
37 | # Use plain exceptions, to also resemble normal pyhton. | |
|
38 | o.xmode = 'plain' | |
|
39 | ||
|
40 | main() |
@@ -31,7 +31,25 b' The >>> and ... are stripped from the input so that the python interpreter' | |||
|
31 | 31 | only sees the real part of the code. |
|
32 | 32 | |
|
33 | 33 | All other input is processed normally. |
|
34 | ||
|
35 | Notes | |
|
36 | ===== | |
|
37 | ||
|
38 | * You can even paste code that has extra initial spaces, such as is common in | |
|
39 | doctests: | |
|
40 | ||
|
41 | In [3]: >>> a = ['Mary', 'had', 'a', 'little', 'lamb'] | |
|
42 | ||
|
43 | In [4]: >>> for i in range(len(a)): | |
|
44 | ...: ... print i, a[i] | |
|
45 | ...: ... | |
|
46 | 0 Mary | |
|
47 | 1 had | |
|
48 | 2 a | |
|
49 | 3 little | |
|
50 | 4 lamb | |
|
34 | 51 | """ |
|
52 | ||
|
35 | 53 | #***************************************************************************** |
|
36 | 54 | # Copyright (C) 2001-2006 Fernando Perez <fperez@colorado.edu> |
|
37 | 55 | # |
@@ -60,23 +78,32 b' __license__ = Release.license' | |||
|
60 | 78 | # The prototype of any alternate prefilter must be like this one (the name |
|
61 | 79 | # doesn't matter): |
|
62 | 80 | # - line is a string containing the user input line. |
|
63 |
# - continuation is a parameter which tells us if we are processing a first |
|
|
64 | # user input or the second or higher of a multi-line statement. | |
|
81 | # - continuation is a parameter which tells us if we are processing a first | |
|
82 | # line of user input or the second or higher of a multi-line statement. | |
|
83 | ||
|
84 | import re | |
|
85 | ||
|
86 | PROMPT_RE = re.compile(r'(^[ \t]*>>> |^[ \t]*\.\.\. )') | |
|
65 | 87 | |
|
66 | 88 | def prefilter_paste(self,line,continuation): |
|
67 | 89 | """Alternate prefilter for input of pasted code from an interpreter. |
|
68 | 90 | """ |
|
69 | ||
|
70 | from re import match | |
|
71 | ||
|
72 | if match(r'^>>> |^\.\.\. ',line): | |
|
91 | if not line: | |
|
92 | return '' | |
|
93 | m = PROMPT_RE.match(line) | |
|
94 | if m: | |
|
73 | 95 | # In the end, always call the default IPython _prefilter() function. |
|
74 | 96 | # Note that self must be passed explicitly, b/c we're calling the |
|
75 | 97 | # unbound class method (since this method will overwrite the instance |
|
76 | 98 | # prefilter()) |
|
77 |
return self._prefilter(line[ |
|
|
99 | return self._prefilter(line[len(m.group(0)):],continuation) | |
|
78 | 100 | elif line.strip() == '...': |
|
79 | 101 | return self._prefilter('',continuation) |
|
102 | elif line.isspace(): | |
|
103 | # This allows us to recognize multiple input prompts separated by blank | |
|
104 | # lines and pasted in a single chunk, very common when pasting doctests | |
|
105 | # or long tutorial passages. | |
|
106 | return '' | |
|
80 | 107 | else: |
|
81 | 108 | return self._prefilter(line,continuation) |
|
82 | 109 |
@@ -6,7 +6,7 b' Requires Python 2.3 or newer.' | |||
|
6 | 6 | |
|
7 | 7 | This file contains all the classes and helper functions specific to IPython. |
|
8 | 8 | |
|
9 |
$Id: iplib.py 25 |
|
|
9 | $Id: iplib.py 2581 2007-08-04 20:52:05Z fperez $ | |
|
10 | 10 | """ |
|
11 | 11 | |
|
12 | 12 | #***************************************************************************** |
@@ -2059,6 +2059,17 b' want to merge them back into the new files.""" % locals()' | |||
|
2059 | 2059 | |
|
2060 | 2060 | #print '***line: <%s>' % line # dbg |
|
2061 | 2061 | |
|
2062 | if not line: | |
|
2063 | # Return immediately on purely empty lines, so that if the user | |
|
2064 | # previously typed some whitespace that started a continuation | |
|
2065 | # prompt, he can break out of that loop with just an empty line. | |
|
2066 | # This is how the default python prompt works. | |
|
2067 | ||
|
2068 | # Only return if the accumulated input buffer was just whitespace! | |
|
2069 | if ''.join(self.buffer).isspace(): | |
|
2070 | self.buffer[:] = [] | |
|
2071 | return '' | |
|
2072 | ||
|
2062 | 2073 | line_info = prefilter.LineInfo(line, continue_prompt) |
|
2063 | 2074 | |
|
2064 | 2075 | # the input history needs to track even empty lines |
@@ -1,3 +1,24 b'' | |||
|
1 | 2007-08-04 Fernando Perez <Fernando.Perez@colorado.edu> | |
|
2 | ||
|
3 | * IPython/Extensions/ipy_profile_doctest.py: New profile for | |
|
4 | doctest support. It sets prompts/exceptions as similar to | |
|
5 | standard Python as possible, so that ipython sessions in this | |
|
6 | profile can be easily pasted as doctests with minimal | |
|
7 | modifications. It also enables pasting of doctests from external | |
|
8 | sources (even if they have leading whitespace), so that you can | |
|
9 | rerun doctests from existing sources. | |
|
10 | ||
|
11 | * IPython/iplib.py (_prefilter): fix a buglet where after entering | |
|
12 | some whitespace, the prompt would become a continuation prompt | |
|
13 | with no way of exiting it other than Ctrl-C. This fix brings us | |
|
14 | into conformity with how the default python prompt works. | |
|
15 | ||
|
16 | * IPython/Extensions/InterpreterPasteInput.py (prefilter_paste): | |
|
17 | Add support for pasting not only lines that start with '>>>', but | |
|
18 | also with ' >>>'. That is, arbitrary whitespace can now precede | |
|
19 | the prompts. This makes the system useful for pasting doctests | |
|
20 | from docstrings back into a normal session. | |
|
21 | ||
|
1 | 22 | 2007-08-02 Fernando Perez <Fernando.Perez@colorado.edu> |
|
2 | 23 | |
|
3 | 24 | * IPython/Shell.py (IPShellEmbed.__call__): fix bug introduced in |
General Comments 0
You need to be logged in to leave comments.
Login now