diff options
-rwxr-xr-x | Tools/scripts/pindent.py | 78 |
1 files changed, 45 insertions, 33 deletions
diff --git a/Tools/scripts/pindent.py b/Tools/scripts/pindent.py index 1845ed8..4c8e71d 100755 --- a/Tools/scripts/pindent.py +++ b/Tools/scripts/pindent.py @@ -77,7 +77,7 @@ STEPSIZE = 8 TABSIZE = 8 import os -import regex +import re import string import sys @@ -100,15 +100,15 @@ class PythonIndenter: self.tabsize = tabsize self.lineno = 0 self.write = fpo.write - self.kwprog = regex.symcomp( - '^[ \t]*\(<kw>[a-z]+\)' - '\([ \t]+\(<id>[a-zA-Z_][a-zA-Z0-9_]*\)\)?' - '[^a-zA-Z0-9_]') - self.endprog = regex.symcomp( - '^[ \t]*#?[ \t]*end[ \t]+\(<kw>[a-z]+\)' - '\([ \t]+\(<id>[a-zA-Z_][a-zA-Z0-9_]*\)\)?' - '[^a-zA-Z0-9_]') - self.wsprog = regex.compile('^[ \t]*') + self.kwprog = re.compile( + r'^\s*(?P<kw>[a-z]+)' + r'(\s+(?P<id>[a-zA-Z_]\w*))?' + r'[^\w]') + self.endprog = re.compile( + r'^\s*#?\s*end\s+(?P<kw>[a-z]+)' + r'(\s+(?P<id>[a-zA-Z_]\w*))?' + r'[^\w]') + self.wsprog = re.compile(r'^[ \t]*') # end def __init__ def readline(self): @@ -142,7 +142,10 @@ class PythonIndenter: return # end if tabs, spaces = divmod(indent*self.indentsize, self.tabsize) - i = max(0, self.wsprog.match(line)) + i = 0 + m = self.wsprog.match(line) + if m: i = m.end() + # end if self.write('\t'*tabs + ' '*spaces + line[i:]) # end def putline @@ -152,9 +155,10 @@ class PythonIndenter: line = self.getline() if not line: break # EOF # end if - if self.endprog.match(line) >= 0: + m = self.endprog.match(line) + if m: kw = 'end' - kw2 = self.endprog.group('kw') + kw2 = m.group('kw') if not stack: self.error('unexpected end') elif stack[-1][0] != kw2: @@ -164,8 +168,9 @@ class PythonIndenter: self.putline(line, len(stack)) continue # end if - if self.kwprog.match(line) >= 0: - kw = self.kwprog.group('kw') + m = self.kwprog.match(line) + if m: + kw = m.group('kw') if kw in start: self.putline(line, len(stack)) stack.append((kw, kw)) @@ -195,26 +200,33 @@ class PythonIndenter: current, firstkw, lastkw, topid = 0, '', '', '' while 1: line = self.getline() - i = max(0, self.wsprog.match(line)) - if self.endprog.match(line) >= 0: + i = 0 + m = self.wsprog.match(line) + if m: i = m.end() + # end if + m = self.endprog.match(line) + if m: thiskw = 'end' - endkw = self.endprog.group('kw') - thisid = self.endprog.group('id') - elif self.kwprog.match(line) >= 0: - thiskw = self.kwprog.group('kw') - if not next.has_key(thiskw): - thiskw = '' - # end if - if thiskw in ('def', 'class'): - thisid = self.kwprog.group('id') + endkw = m.group('kw') + thisid = m.group('id') + else: + m = self.kwprog.match(line) + if m: + thiskw = m.group('kw') + if not next.has_key(thiskw): + thiskw = '' + # end if + if thiskw in ('def', 'class'): + thisid = m.group('id') + else: + thisid = '' + # end if + elif line[i:i+1] in ('\n', '#'): + todo.append(line) + continue else: - thisid = '' + thiskw = '' # end if - elif line[i:i+1] in ('\n', '#'): - todo.append(line) - continue - else: - thiskw = '' # end if indent = len(string.expandtabs(line[:i], self.tabsize)) while indent < current: @@ -249,7 +261,7 @@ class PythonIndenter: # end if # end if if indent > current: - stack.append(current, firstkw, lastkw, topid) + stack.append((current, firstkw, lastkw, topid)) if thiskw and thiskw not in start: # error thiskw = '' |