diff --git a/Mac/Tools/IDE/PyBrowser.py b/Mac/Tools/IDE/PyBrowser.py index c1abbacfd12..853392f5256 100644 --- a/Mac/Tools/IDE/PyBrowser.py +++ b/Mac/Tools/IDE/PyBrowser.py @@ -3,7 +3,7 @@ import Wkeys import struct import string import types -import regex +import re nullid = '\0\0' closedid = struct.pack('h', 468) @@ -13,11 +13,15 @@ opensolidid = struct.pack('h', 471) arrows = (nullid, closedid, openid, closedsolidid, opensolidid) -has_ctlcharsRE = regex.compile('[\000-\037\177-\377]') - +has_ctlcharsRE = re.compile('[\000-\037\177-\377]') +def ctlcharsREsearch(str): + if has_ctlcharsRE(str) is None: + return -1 + return 1 + def double_repr(key, value, truncvalue = 0, type = type, StringType = types.StringType, - has_ctlchars = has_ctlcharsRE.search, _repr = repr, str = str): + has_ctlchars = ctlcharsREsearch, _repr = repr, str = str): if type(key) == StringType and has_ctlchars(key) < 0: key = str(key) else: diff --git a/Mac/Tools/IDE/PyDocSearch.py b/Mac/Tools/IDE/PyDocSearch.py index f975026d087..b036556da11 100644 --- a/Mac/Tools/IDE/PyDocSearch.py +++ b/Mac/Tools/IDE/PyDocSearch.py @@ -2,7 +2,7 @@ import aetools import Standard_Suite import Required_Suite import WWW_Suite -import regex +import re import W import macfs import os @@ -29,16 +29,16 @@ app = W.getapplication() #SIGNATURE='MSIE' # MS Explorer SIGNATURE='MOSS' # Netscape -_titlepat = regex.compile('\([^<]*\)') +_titlepat = re.compile('\([^<]*\)') def sucktitle(path): f = open(path) text = f.read(1024) # assume the title is in the first 1024 bytes f.close() lowertext = string.lower(text) - if _titlepat.search(lowertext) > 0: - a, b = _titlepat.regs[1] - return text[a:b] + matcher = _titlepat.search(lowertext) + if matcher: + return matcher.group(1) return path def verifydocpath(docpath): diff --git a/Mac/Tools/IDE/PyEdit.py b/Mac/Tools/IDE/PyEdit.py index 7274a1eedf0..fc8503aa9a1 100644 --- a/Mac/Tools/IDE/PyEdit.py +++ b/Mac/Tools/IDE/PyEdit.py @@ -15,7 +15,7 @@ import imp import sys import string import marshal -import regex +import re try: import Wthreading @@ -25,7 +25,8 @@ else: haveThreading = Wthreading.haveThreading _scriptuntitledcounter = 1 -_wordchars = string.letters + string.digits + "_" +# _wordchars = string.letters + string.digits + "_" +_wordchars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_' runButtonLabels = ["Run all", "Stop!"] @@ -553,7 +554,6 @@ class Editor(W.Window): if indent == 1: classname = '' alllines = string.split(alltext, '\r') - identifieRE_match = _identifieRE.match for i in range(selfirstline - 1, -1, -1): line = alllines[i] if line[:6] == 'class ': @@ -673,7 +673,6 @@ class Editor(W.Window): def getclasslist(self): from string import find, strip - import re methodRE = re.compile(r"\r[ \t]+def ") findMethod = methodRE.search editor = self.editgroup.editor @@ -715,7 +714,6 @@ class Editor(W.Window): offsetToLine = editor.ted.WEOffsetToLine getLineRange = editor.ted.WEGetLineRange append = classlist.append - identifieRE_match = _identifieRE.match for pos, tag in list: lineno = offsetToLine(pos) lineStart, lineEnd = getLineRange(lineno) @@ -794,14 +792,13 @@ def _makewholewordpattern(word): # first, escape special regex chars for esc in "\\[].*^+$?": word = _escape(word, esc) - import regex notwordcharspat = '[^' + _wordchars + ']' - pattern = '\(' + word + '\)' + pattern = '(' + word + ')' if word[0] in _wordchars: pattern = notwordcharspat + pattern if word[-1] in _wordchars: pattern = pattern + notwordcharspat - return regex.compile(pattern) + return re.compile(pattern) class SearchEngine: @@ -935,9 +932,9 @@ class SearchEngine: while 1: if self.parms["wholeword"]: wholewordRE = _makewholewordpattern(find) - wholewordRE.search(text, pos) - if wholewordRE.regs: - pos = wholewordRE.regs[1][0] + match = wholewordRE.search(text, pos) + if match: + pos = match.start(1) else: pos = -1 else: @@ -997,9 +994,9 @@ class SearchEngine: selstart, selend = min(selstart, selend), max(selstart, selend) if self.parms["wholeword"]: wholewordRE = _makewholewordpattern(find) - wholewordRE.search(text, selend) - if wholewordRE.regs: - pos = wholewordRE.regs[1][0] + match = wholewordRE.search(text, selend) + if match: + pos = match.start(1) else: pos = -1 else: @@ -1009,9 +1006,9 @@ class SearchEngine: return 1 elif self.parms["wrap"]: if self.parms["wholeword"]: - wholewordRE.search(text, 0) - if wholewordRE.regs: - pos = wholewordRE.regs[1][0] + match = wholewordRE.search(text, 0) + if match: + pos = match.start(1) else: pos = -1 else: @@ -1169,12 +1166,19 @@ def execstring(pytext, globals, locals, filename="", debugging=0, PyDebugger.stop() -_identifieRE = regex.compile("[A-Za-z_][A-Za-z_0-9]*") +_identifieRE = re.compile("[A-Za-z_][A-Za-z_0-9]*") + +def identifieRE_match(str): + match = _identifieRE.match(str) + if not match: + return -1 + return match.end() def _filename_as_modname(fname): if fname[-3:] == '.py': modname = fname[:-3] - if _identifieRE.match(modname) == len(modname): + match = _identifieRE.match(modname) + if match and match.start() == 0 and match.end() == len(modname): return string.join(string.split(modname, '.'), '_') def findeditor(topwindow, fromtop = 0): diff --git a/Mac/Tools/IDE/PyFontify.py b/Mac/Tools/IDE/PyFontify.py index 02de08e0b3c..b5d61027771 100644 --- a/Mac/Tools/IDE/PyFontify.py +++ b/Mac/Tools/IDE/PyFontify.py @@ -27,7 +27,7 @@ sublist is not used, hence always None. __version__ = "0.3.3" -import string, regex +import string, re # First a little helper, since I don't like to repeat things. (Tismer speaking) import string @@ -87,10 +87,10 @@ for keyword in keywordsList: keyPat = keyPat[:-2] + "\)" + nonKeyPat matchPat = commentPat + "\|" + keyPat + "\|" + tripleQuotePat + "\|" + quotePat -matchRE = regex.compile(matchPat) +matchRE = re.compile(matchPat) idKeyPat = "[ \t]*[A-Za-z_][A-Za-z_0-9.]*" # Ident w. leading whitespace. -idRE = regex.compile(idKeyPat) +idRE = re.compile(idKeyPat) def fontify(pytext, searchfrom = 0, searchto = None): @@ -98,9 +98,7 @@ def fontify(pytext, searchfrom = 0, searchto = None): searchto = len(pytext) # Cache a few attributes for quicker reference. search = matchRE.search - group = matchRE.group idSearch = idRE.search - idGroup = idRE.group tags = [] tags_append = tags.append @@ -112,10 +110,10 @@ def fontify(pytext, searchfrom = 0, searchto = None): start = 0 end = searchfrom while 1: - start = search(pytext, end) - if start < 0 or start >= searchto: + m = search(pytext, end) + if not m or m.start() >= searchto: break # EXIT LOOP - match = group(0) + match = m.group(0) end = start + len(match) c = match[0] if c not in "#'\"": @@ -133,9 +131,9 @@ def fontify(pytext, searchfrom = 0, searchto = None): # If this was a defining keyword, look ahead to the # following identifier. if match in ["def", "class"]: - start = idSearch(pytext, end) - if start == end: - match = idGroup(0) + m = idSearch(pytext, end) + if m and m.start() == end: + match = m.group(0) end = start + len(match) tags_append((identifierTag, start, end, None)) elif c == "#": diff --git a/Mac/Tools/IDE/Wtext.py b/Mac/Tools/IDE/Wtext.py index 8c1662d598d..11b02768e6f 100644 --- a/Mac/Tools/IDE/Wtext.py +++ b/Mac/Tools/IDE/Wtext.py @@ -603,9 +603,9 @@ class TextEditor(EditText): self.drawselframe(1) -import regex -commentPat = regex.compile("[ \t]*\(#\)") -indentPat = regex.compile("\t*") +import re +commentPat = re.compile("[ \t]*\(#\)") +indentPat = re.compile("\t*") class PyEditor(TextEditor): @@ -659,9 +659,9 @@ class PyEditor(TextEditor): snippet = self.getselectedtext() lines = string.split(snippet, '\r') for i in range(len(lines)): - res = commentPat.match(lines[i]) >= 0 - if res > 0: - pos = commentPat.regs[1][0] + m = commentPat.match(lines[i]) + if m: + pos = m.start(1) lines[i] = lines[i][:pos] + lines[i][pos+1:] snippet = string.join(lines, '\r') self.insert(snippet) @@ -676,8 +676,9 @@ class PyEditor(TextEditor): indent = 3000 # arbitrary large number... for line in lines: if string.strip(line): - if indentPat.match(line): - indent = min(indent, indentPat.regs[0][1]) + m = indentPat.match(line) + if m: + indent = min(indent, m.regs[0][1]) else: indent = 0 break