summaryrefslogtreecommitdiffstats
path: root/Lib/idlelib/PyParse.py
diff options
context:
space:
mode:
authorKurt B. Kaiser <kbk@shore.net>2001-07-13 20:33:46 (GMT)
committerKurt B. Kaiser <kbk@shore.net>2001-07-13 20:33:46 (GMT)
commit3269cc8bd111af7fe9f35e6e90669251bace5ef1 (patch)
tree3bd1c9ba33f1f88ec230446b7a9b9c4d383eba0c /Lib/idlelib/PyParse.py
parent48b03144ec245f7105273f8caed304232fab0f37 (diff)
downloadcpython-3269cc8bd111af7fe9f35e6e90669251bace5ef1.zip
cpython-3269cc8bd111af7fe9f35e6e90669251bace5ef1.tar.gz
cpython-3269cc8bd111af7fe9f35e6e90669251bace5ef1.tar.bz2
py-cvs-rel2_1 (Rev 1.6 - 1.8) merge
Fix autoindent bug and deflect Unicode from text.get()
Diffstat (limited to 'Lib/idlelib/PyParse.py')
-rw-r--r--Lib/idlelib/PyParse.py27
1 files changed, 23 insertions, 4 deletions
diff --git a/Lib/idlelib/PyParse.py b/Lib/idlelib/PyParse.py
index 23b995c..a512356 100644
--- a/Lib/idlelib/PyParse.py
+++ b/Lib/idlelib/PyParse.py
@@ -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