Translated to use re instead of regex. Also replaced one use of

L.append(a,b,c,d) with the correct L.append((a,b,c,d)).
This commit is contained in:
Guido van Rossum 1998-06-19 21:39:27 +00:00
parent 1b0ff2c32f
commit f57736e77a
1 changed files with 45 additions and 33 deletions

View File

@ -77,7 +77,7 @@
TABSIZE = 8 TABSIZE = 8
import os import os
import regex import re
import string import string
import sys import sys
@ -100,15 +100,15 @@ def __init__(self, fpi = sys.stdin, fpo = sys.stdout,
self.tabsize = tabsize self.tabsize = tabsize
self.lineno = 0 self.lineno = 0
self.write = fpo.write self.write = fpo.write
self.kwprog = regex.symcomp( self.kwprog = re.compile(
'^[ \t]*\(<kw>[a-z]+\)' r'^\s*(?P<kw>[a-z]+)'
'\([ \t]+\(<id>[a-zA-Z_][a-zA-Z0-9_]*\)\)?' r'(\s+(?P<id>[a-zA-Z_]\w*))?'
'[^a-zA-Z0-9_]') r'[^\w]')
self.endprog = regex.symcomp( self.endprog = re.compile(
'^[ \t]*#?[ \t]*end[ \t]+\(<kw>[a-z]+\)' r'^\s*#?\s*end\s+(?P<kw>[a-z]+)'
'\([ \t]+\(<id>[a-zA-Z_][a-zA-Z0-9_]*\)\)?' r'(\s+(?P<id>[a-zA-Z_]\w*))?'
'[^a-zA-Z0-9_]') r'[^\w]')
self.wsprog = regex.compile('^[ \t]*') self.wsprog = re.compile(r'^[ \t]*')
# end def __init__ # end def __init__
def readline(self): def readline(self):
@ -142,7 +142,10 @@ def putline(self, line, indent = None):
return return
# end if # end if
tabs, spaces = divmod(indent*self.indentsize, self.tabsize) 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:]) self.write('\t'*tabs + ' '*spaces + line[i:])
# end def putline # end def putline
@ -152,9 +155,10 @@ def reformat(self):
line = self.getline() line = self.getline()
if not line: break # EOF if not line: break # EOF
# end if # end if
if self.endprog.match(line) >= 0: m = self.endprog.match(line)
if m:
kw = 'end' kw = 'end'
kw2 = self.endprog.group('kw') kw2 = m.group('kw')
if not stack: if not stack:
self.error('unexpected end') self.error('unexpected end')
elif stack[-1][0] != kw2: elif stack[-1][0] != kw2:
@ -164,8 +168,9 @@ def reformat(self):
self.putline(line, len(stack)) self.putline(line, len(stack))
continue continue
# end if # end if
if self.kwprog.match(line) >= 0: m = self.kwprog.match(line)
kw = self.kwprog.group('kw') if m:
kw = m.group('kw')
if kw in start: if kw in start:
self.putline(line, len(stack)) self.putline(line, len(stack))
stack.append((kw, kw)) stack.append((kw, kw))
@ -195,26 +200,33 @@ def complete(self):
current, firstkw, lastkw, topid = 0, '', '', '' current, firstkw, lastkw, topid = 0, '', '', ''
while 1: while 1:
line = self.getline() line = self.getline()
i = max(0, self.wsprog.match(line)) i = 0
if self.endprog.match(line) >= 0: m = self.wsprog.match(line)
if m: i = m.end()
# end if
m = self.endprog.match(line)
if m:
thiskw = 'end' thiskw = 'end'
endkw = self.endprog.group('kw') endkw = m.group('kw')
thisid = self.endprog.group('id') thisid = m.group('id')
elif self.kwprog.match(line) >= 0: else:
thiskw = self.kwprog.group('kw') m = self.kwprog.match(line)
if not next.has_key(thiskw): 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:
thiskw = '' thiskw = ''
# end if # end if
if thiskw in ('def', 'class'):
thisid = self.kwprog.group('id')
else:
thisid = ''
# end if
elif line[i:i+1] in ('\n', '#'):
todo.append(line)
continue
else:
thiskw = ''
# end if # end if
indent = len(string.expandtabs(line[:i], self.tabsize)) indent = len(string.expandtabs(line[:i], self.tabsize))
while indent < current: while indent < current:
@ -249,7 +261,7 @@ def complete(self):
# end if # end if
# end if # end if
if indent > current: if indent > current:
stack.append(current, firstkw, lastkw, topid) stack.append((current, firstkw, lastkw, topid))
if thiskw and thiskw not in start: if thiskw and thiskw not in start:
# error # error
thiskw = '' thiskw = ''