py-cvs-rel2_1 (Rev 1.6 - 1.8) merge

Fix autoindent bug and deflect Unicode from text.get()
This commit is contained in:
Kurt B. Kaiser 2001-07-13 20:33:46 +00:00
parent 48b03144ec
commit 3269cc8bd1
1 changed files with 23 additions and 4 deletions

View File

@ -105,6 +105,11 @@ for ch in "\"'\\\n#":
_tran = string.join(_tran, '')
del ch
try:
UnicodeType = type(unicode(""))
except NameError:
UnicodeType = None
class Parser:
def __init__(self, indentwidth, tabwidth):
@ -113,6 +118,19 @@ class Parser:
def set_str(self, str):
assert len(str) == 0 or str[-1] == '\n'
if type(str) is UnicodeType:
# The parse functions have no idea what to do with Unicode, so
# replace all Unicode characters with "x". This is "safe"
# so long as the only characters germane to parsing the structure
# of Python are 7-bit ASCII. It's *necessary* because Unicode
# strings don't have a .translate() method that supports
# deletechars.
uniphooey = str
str = []
push = str.append
for raw in map(ord, uniphooey):
push(raw < 127 and chr(raw) or "x")
str = "".join(str)
self.str = str
self.study_level = 0
@ -385,13 +403,14 @@ class Parser:
m = _chew_ordinaryre(str, p, q)
if m:
# we skipped at least one boring char
p = m.end()
newp = m.end()
# back up over totally boring whitespace
i = p-1 # index of last boring char
while i >= 0 and str[i] in " \t\n":
i = newp - 1 # index of last boring char
while i >= p and str[i] in " \t\n":
i = i-1
if i >= 0:
if i >= p:
lastch = str[i]
p = newp
if p >= q:
break