##// END OF EJS Templates
%autocall fixes...
fperez -
Show More
@@ -5,7 +5,7 b' General purpose utilities.'
5 5 This is a grab-bag of stuff I find useful in most programs I write. Some of
6 6 these things are also convenient when working at the command line.
7 7
8 $Id: genutils.py 1007 2006-01-12 17:15:41Z vivainio $"""
8 $Id: genutils.py 1013 2006-01-13 08:33:32Z fperez $"""
9 9
10 10 #*****************************************************************************
11 11 # Copyright (C) 2001-2006 Fernando Perez. <fperez@colorado.edu>
@@ -937,12 +937,6 b' class SList(list):'
937 937 n = nlstr = property(get_nlstr)
938 938
939 939 #----------------------------------------------------------------------------
940 # This can be replaced with an isspace() call once we drop 2.2 compatibility
941 _isspace_match = re.compile(r'^\s+$').match
942 def isspace(s):
943 return bool(_isspace_match(s))
944
945 #----------------------------------------------------------------------------
946 940 def esc_quotes(strng):
947 941 """Return the input string with single and double quotes escaped out"""
948 942
@@ -6,7 +6,7 b' Requires Python 2.1 or newer.'
6 6
7 7 This file contains all the classes and helper functions specific to IPython.
8 8
9 $Id: iplib.py 1012 2006-01-12 21:29:37Z vivainio $
9 $Id: iplib.py 1013 2006-01-13 08:33:32Z fperez $
10 10 """
11 11
12 12 #*****************************************************************************
@@ -82,15 +82,26 b' from IPython.genutils import *'
82 82 raw_input_original = raw_input
83 83
84 84 # compiled regexps for autoindent management
85 ini_spaces_re = re.compile(r'^(\s+)')
86 85 dedent_re = re.compile(r'^\s+raise|^\s+return|^\s+pass')
87 86
88 87
89 88 #****************************************************************************
90 89 # Some utility function definitions
91 90
91 ini_spaces_re = re.compile(r'^(\s+)')
92
93 def num_ini_spaces(strng):
94 """Return the number of initial spaces in a string"""
95
96 ini_spaces = ini_spaces_re.match(strng)
97 if ini_spaces:
98 return ini_spaces.end()
99 else:
100 return 0
101
92 102 def softspace(file, newvalue):
93 103 """Copied from code.py, to remove the dependency"""
104
94 105 oldvalue = 0
95 106 try:
96 107 oldvalue = file.softspace
@@ -473,8 +484,18 b' class InteractiveShell(object,Magic):'
473 484
474 485 # RegExp to identify potential function names
475 486 self.re_fun_name = re.compile(r'[a-zA-Z_]([a-zA-Z0-9_.]*) *$')
476 # RegExp to exclude strings with this start from autocalling
477 self.re_exclude_auto = re.compile('^[!=()<>,\*/\+-]|^is ')
487
488 # RegExp to exclude strings with this start from autocalling. In
489 # particular, all binary operators should be excluded, so that if foo
490 # is callable, foo OP bar doesn't become foo(OP bar), which is
491 # invalid. The characters '!=()' don't need to be checked for, as the
492 # _prefilter routine explicitely does so, to catch direct calls and
493 # rebindings of existing names.
494
495 # Warning: the '-' HAS TO BE AT THE END of the first group, otherwise
496 # it affects the rest of the group in square brackets.
497 self.re_exclude_auto = re.compile(r'^[<>,&^\|\*/\+-]'
498 '|^is |^not |^in |^and |^or ')
478 499
479 500 # try to catch also methods for stuff in lists/tuples/dicts: off
480 501 # (experimental). For this to work, the line_split regexp would need
@@ -1077,6 +1098,7 b' want to merge them back into the new files.""" % locals()'
1077 1098
1078 1099 Saving of persistent data should be performed here. """
1079 1100
1101 #print '*** IPython exit cleanup ***' # dbg
1080 1102 # input history
1081 1103 self.savehist()
1082 1104
@@ -1496,14 +1518,10 b' want to merge them back into the new files.""" % locals()'
1496 1518
1497 1519 def autoindent_update(self,line):
1498 1520 """Keep track of the indent level."""
1521
1499 1522 if self.autoindent:
1500 1523 if line:
1501 ini_spaces = ini_spaces_re.match(line)
1502 if ini_spaces:
1503 nspaces = ini_spaces.end()
1504 else:
1505 nspaces = 0
1506 self.indent_current_nsp = nspaces
1524 self.indent_current_nsp = num_ini_spaces(line)
1507 1525
1508 1526 if line[-1] == ':':
1509 1527 self.indent_current_nsp += 4
@@ -1701,10 +1719,26 b' want to merge them back into the new files.""" % locals()'
1701 1719 # Try to be reasonably smart about not re-indenting pasted input more
1702 1720 # than necessary. We do this by trimming out the auto-indent initial
1703 1721 # spaces, if the user's actual input started itself with whitespace.
1704 if self.autoindent:
1705 line2 = line[self.indent_current_nsp:]
1706 if line2[0:1] in (' ','\t'):
1707 line = line2
1722 #debugp('self.buffer[-1]')
1723 ## if self.autoindent:
1724 ## try:
1725 ## prev_line = self.buffer[-1]
1726 ## except IndexError:
1727 ## prev_line = ''
1728 ## prev_indent = num_ini_spaces(prev_line)
1729 ## debugp('prev_indent')
1730 ## # Split the user's input
1731 ## line1 = line[:self.indent_current_nsp]
1732 ## line2 = line[self.indent_current_nsp:]
1733 ## if line1.isspace() and line2 and \
1734 ## num_ini_spaces(line2)==prev_indent:
1735 ## line = line2
1736 #debugp('line')
1737 #debugp('line1')
1738 #debugp('line2')
1739 ## if line1.isspace() and line2 and line2[0:1] in (' ','\t'):
1740 ## line = line2
1741 ## debugp('line')
1708 1742 return self.prefilter(line,continue_prompt)
1709 1743
1710 1744 def split_user_input(self,line):
@@ -1875,8 +1909,8 b' want to merge them back into the new files.""" % locals()'
1875 1909 # lines of pure whitespace in a row, or a line of pure whitespace but
1876 1910 # of a size different to the indent level, will exit the input loop.
1877 1911
1878 if (continue_prompt and self.autoindent and isspace(line) and
1879 (line != self.indent_current or isspace(self.buffer[-1]))):
1912 if (continue_prompt and self.autoindent and line.isspace() and
1913 (line != self.indent_current or (self.buffer[-1]).isspace() )):
1880 1914 line = ''
1881 1915
1882 1916 self.log(line,continue_prompt)
@@ -1,3 +1,23 b''
1 2006-01-13 Fernando Perez <Fernando.Perez@colorado.edu>
2
3 * IPython/iplib.py (raw_input): temporarily deactivate all
4 attempts at allowing pasting of code with autoindent on. It
5 introduced bugs (reported by Prabhu) and I can't seem to find a
6 robust combination which works in all cases. Will have to revisit
7 later.
8
9 * IPython/genutils.py: remove isspace() function. We've dropped
10 2.2 compatibility, so it's OK to use the string method.
11
12 2006-01-12 Fernando Perez <Fernando.Perez@colorado.edu>
13
14 * IPython/iplib.py (InteractiveShell.__init__): fix regexp
15 matching what NOT to autocall on, to include all python binary
16 operators (including things like 'and', 'or', 'is' and 'in').
17 Prompted by a bug report on 'foo & bar', but I realized we had
18 many more potential bug cases with other operators. The regexp is
19 self.re_exclude_auto, it's fairly commented.
20
1 21 2006-01-12 Ville Vainio <vivainio@gmail.com>
2 22
3 23 * IPython/iplib.py (make_quoted_expr,handle_shell_escape):
@@ -11,9 +31,9 b''
11 31 deleted all pretense of supporting multiline command strings in
12 32 !system or %magic commands. Thanks to Jerry McRae for suggestions.
13 33
14 * doc/build_doc_instructions.txt added. Documentation on how to use
15 doc/update_manual.py, added yesterday. Both files contributed by
16 Jörgen Stenarson <jorgen.stenarson@bostream.nu>. This slates
34 * doc/build_doc_instructions.txt added. Documentation on how to
35 use doc/update_manual.py, added yesterday. Both files contributed
36 by Jörgen Stenarson <jorgen.stenarson-AT-bostream.nu>. This slates
17 37 doc/*.sh for deprecation at a later date.
18 38
19 39 * /ipython.py Added ipython.py to root directory for
General Comments 0
You need to be logged in to leave comments. Login now