mirror of
https://github.com/python/cpython.git
synced 2025-08-31 14:07:50 +00:00
Merge Py Idle changes:
Rev 1.10 doerwalter (string methods)
This commit is contained in:
parent
d8e20a0e6b
commit
254eb5380f
1 changed files with 22 additions and 27 deletions
|
@ -1,4 +1,3 @@
|
|||
import string
|
||||
import re
|
||||
import sys
|
||||
|
||||
|
@ -7,7 +6,7 @@ C_NONE, C_BACKSLASH, C_STRING, C_BRACKET = range(4)
|
|||
|
||||
if 0: # for throwaway debugging output
|
||||
def dump(*stuff):
|
||||
sys.__stdout__.write(string.join(map(str, stuff), " ") + "\n")
|
||||
sys.__stdout__.write(" ".join(map(str, stuff)) + "\n")
|
||||
|
||||
# Find what looks like the start of a popular stmt.
|
||||
|
||||
|
@ -103,7 +102,7 @@ for ch in ")}]":
|
|||
_tran[ord(ch)] = ')'
|
||||
for ch in "\"'\\\n#":
|
||||
_tran[ord(ch)] = ch
|
||||
_tran = string.join(_tran, '')
|
||||
_tran = ''.join(_tran)
|
||||
del ch
|
||||
|
||||
try:
|
||||
|
@ -153,13 +152,12 @@ class Parser:
|
|||
# Python 1.5.2 (#0, Apr 13 1999, ...
|
||||
|
||||
def find_good_parse_start(self, use_ps1, is_char_in_string=None,
|
||||
_rfind=string.rfind,
|
||||
_synchre=_synchre):
|
||||
str, pos = self.str, None
|
||||
if use_ps1:
|
||||
# shell window
|
||||
ps1 = '\n' + sys.ps1
|
||||
i = _rfind(str, ps1)
|
||||
i = str.rfind(ps1)
|
||||
if i >= 0:
|
||||
pos = i + len(ps1)
|
||||
# make it look like there's a newline instead
|
||||
|
@ -178,10 +176,10 @@ class Parser:
|
|||
# bumped to a legitimate synch point.
|
||||
limit = len(str)
|
||||
for tries in range(5):
|
||||
i = _rfind(str, ":\n", 0, limit)
|
||||
i = str.rfind(":\n", 0, limit)
|
||||
if i < 0:
|
||||
break
|
||||
i = _rfind(str, '\n', 0, i) + 1 # start of colon line
|
||||
i = str.rfind('\n', 0, i) + 1 # start of colon line
|
||||
m = _synchre(str, i, limit)
|
||||
if m and not is_char_in_string(m.start()):
|
||||
pos = m.start()
|
||||
|
@ -226,7 +224,7 @@ class Parser:
|
|||
# based) of the non-continuation lines.
|
||||
# Creates self.{goodlines, continuation}.
|
||||
|
||||
def _study1(self, _replace=string.replace, _find=string.find):
|
||||
def _study1(self):
|
||||
if self.study_level >= 1:
|
||||
return
|
||||
self.study_level = 1
|
||||
|
@ -236,12 +234,12 @@ class Parser:
|
|||
# uninteresting characters. This can cut the number of chars
|
||||
# by a factor of 10-40, and so greatly speed the following loop.
|
||||
str = self.str
|
||||
str = string.translate(str, _tran)
|
||||
str = _replace(str, 'xxxxxxxx', 'x')
|
||||
str = _replace(str, 'xxxx', 'x')
|
||||
str = _replace(str, 'xx', 'x')
|
||||
str = _replace(str, 'xx', 'x')
|
||||
str = _replace(str, '\nx', '\n')
|
||||
str = str.translate(_tran)
|
||||
str = str.replace('xxxxxxxx', 'x')
|
||||
str = str.replace('xxxx', 'x')
|
||||
str = str.replace('xx', 'x')
|
||||
str = str.replace('xx', 'x')
|
||||
str = str.replace('\nx', '\n')
|
||||
# note that replacing x\n with \n would be incorrect, because
|
||||
# x may be preceded by a backslash
|
||||
|
||||
|
@ -322,7 +320,7 @@ class Parser:
|
|||
|
||||
if ch == '#':
|
||||
# consume the comment
|
||||
i = _find(str, '\n', i)
|
||||
i = str.find('\n', i)
|
||||
assert i >= 0
|
||||
continue
|
||||
|
||||
|
@ -363,8 +361,7 @@ class Parser:
|
|||
# self.lastopenbracketpos
|
||||
# if continuation is C_BRACKET, index of last open bracket
|
||||
|
||||
def _study2(self, _rfind=string.rfind, _find=string.find,
|
||||
_ws=string.whitespace):
|
||||
def _study2(self):
|
||||
if self.study_level >= 2:
|
||||
return
|
||||
self._study1()
|
||||
|
@ -381,7 +378,7 @@ class Parser:
|
|||
q = p
|
||||
for nothing in range(goodlines[i-1], goodlines[i]):
|
||||
# tricky: sets p to 0 if no preceding newline
|
||||
p = _rfind(str, '\n', 0, p-1) + 1
|
||||
p = str.rfind('\n', 0, p-1) + 1
|
||||
# The stmt str[p:q] isn't a continuation, but may be blank
|
||||
# or a non-indenting comment line.
|
||||
if _junkre(str, p):
|
||||
|
@ -444,7 +441,7 @@ class Parser:
|
|||
|
||||
if ch == '#':
|
||||
# consume comment and trailing newline
|
||||
p = _find(str, '\n', p, q) + 1
|
||||
p = str.find('\n', p, q) + 1
|
||||
assert p > 0
|
||||
continue
|
||||
|
||||
|
@ -465,13 +462,13 @@ class Parser:
|
|||
# Assuming continuation is C_BRACKET, return the number
|
||||
# of spaces the next line should be indented.
|
||||
|
||||
def compute_bracket_indent(self, _find=string.find):
|
||||
def compute_bracket_indent(self):
|
||||
self._study2()
|
||||
assert self.continuation == C_BRACKET
|
||||
j = self.lastopenbracketpos
|
||||
str = self.str
|
||||
n = len(str)
|
||||
origi = i = string.rfind(str, '\n', 0, j) + 1
|
||||
origi = i = str.rfind('\n', 0, j) + 1
|
||||
j = j+1 # one beyond open bracket
|
||||
# find first list item; set i to start of its line
|
||||
while j < n:
|
||||
|
@ -482,7 +479,7 @@ class Parser:
|
|||
break
|
||||
else:
|
||||
# this line is junk; advance to next line
|
||||
i = j = _find(str, '\n', j) + 1
|
||||
i = j = str.find('\n', j) + 1
|
||||
else:
|
||||
# nothing interesting follows the bracket;
|
||||
# reproduce the bracket line's indentation + a level
|
||||
|
@ -490,8 +487,7 @@ class Parser:
|
|||
while str[j] in " \t":
|
||||
j = j+1
|
||||
extra = self.indentwidth
|
||||
return len(string.expandtabs(str[i:j],
|
||||
self.tabwidth)) + extra
|
||||
return len(str[i:j].expandtabs(self.tabwidth)) + extra
|
||||
|
||||
# Return number of physical lines in last stmt (whether or not
|
||||
# it's an interesting stmt! this is intended to be called when
|
||||
|
@ -517,7 +513,7 @@ class Parser:
|
|||
|
||||
# See whether the initial line starts an assignment stmt; i.e.,
|
||||
# look for an = operator
|
||||
endpos = string.find(str, '\n', startpos) + 1
|
||||
endpos = str.find('\n', startpos) + 1
|
||||
found = level = 0
|
||||
while i < endpos:
|
||||
ch = str[i]
|
||||
|
@ -553,8 +549,7 @@ class Parser:
|
|||
while str[i] not in " \t\n":
|
||||
i = i+1
|
||||
|
||||
return len(string.expandtabs(str[self.stmt_start :
|
||||
i],
|
||||
return len(str[self.stmt_start:i].expandtabs(\
|
||||
self.tabwidth)) + 1
|
||||
|
||||
# Return the leading whitespace on the initial line of the last
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue