1990-12-26 15:40:07 +00:00
|
|
|
# 'grep'
|
|
|
|
|
1991-12-31 00:00:35 +00:00
|
|
|
import regex
|
|
|
|
from regex_syntax import *
|
1990-12-26 15:40:07 +00:00
|
|
|
import string
|
|
|
|
|
1991-12-31 00:00:35 +00:00
|
|
|
def grep(pat, filename):
|
|
|
|
return ggrep(RE_SYNTAX_GREP, pat, filename)
|
|
|
|
|
|
|
|
def egrep(pat, filename):
|
|
|
|
return ggrep(RE_SYNTAX_EGREP, pat, filename)
|
|
|
|
|
|
|
|
def emgrep(pat, filename):
|
|
|
|
return ggrep(RE_SYNTAX_EMACS, pat, filename)
|
|
|
|
|
|
|
|
def ggrep(syntax, pat, filename):
|
|
|
|
syntax = regex.set_syntax(syntax)
|
|
|
|
try:
|
|
|
|
prog = regex.compile(pat)
|
|
|
|
finally:
|
|
|
|
syntax = regex.set_syntax(syntax)
|
1990-12-26 15:40:07 +00:00
|
|
|
fp = open(filename, 'r')
|
|
|
|
lineno = 0
|
|
|
|
while 1:
|
|
|
|
line = fp.readline()
|
|
|
|
if not line: break
|
|
|
|
lineno = lineno + 1
|
1991-12-31 00:00:35 +00:00
|
|
|
if prog.search(line) >= 0:
|
|
|
|
if line[-1:] == '\n': line = line[:-1]
|
1990-12-26 15:40:07 +00:00
|
|
|
prefix = string.rjust(`lineno`, 3) + ': '
|
|
|
|
print prefix + line
|
1991-12-31 00:00:35 +00:00
|
|
|
if 0: # XXX
|
1992-01-01 19:35:13 +00:00
|
|
|
start, end = prog.regs[0]
|
1990-12-26 15:40:07 +00:00
|
|
|
line = line[:start]
|
|
|
|
if '\t' not in line:
|
|
|
|
prefix = ' ' * (len(prefix) + start)
|
|
|
|
else:
|
|
|
|
prefix = ' ' * len(prefix)
|
|
|
|
for c in line:
|
|
|
|
if c <> '\t': c = ' '
|
|
|
|
prefix = prefix + c
|
1991-12-31 00:00:35 +00:00
|
|
|
if start == end: prefix = prefix + '\\'
|
1990-12-26 15:40:07 +00:00
|
|
|
else: prefix = prefix + '^'*(end-start)
|
|
|
|
print prefix
|