(py-indent-right, py-outdent-left): new commands, bound to C-c C-r and
[python/dscho.git] / Lib / lib-old / grep.py
blobf4666512b70ea5fdd713a8518c376186f931e817
1 # 'grep'
3 import regex
4 from regex_syntax import *
5 import string
7 opt_show_where = 0
8 opt_show_filename = 0
9 opt_show_lineno = 1
11 def grep(pat, *files):
12 return ggrep(RE_SYNTAX_GREP, pat, files)
14 def egrep(pat, *files):
15 return ggrep(RE_SYNTAX_EGREP, pat, files)
17 def emgrep(pat, *files):
18 return ggrep(RE_SYNTAX_EMACS, pat, files)
20 def ggrep(syntax, pat, files):
21 if len(files) == 1 and type(files[0]) == type([]):
22 files = files[0]
23 global opt_show_filename
24 opt_show_filename = (len(files) != 1)
25 syntax = regex.set_syntax(syntax)
26 try:
27 prog = regex.compile(pat)
28 finally:
29 syntax = regex.set_syntax(syntax)
30 for filename in files:
31 fp = open(filename, 'r')
32 lineno = 0
33 while 1:
34 line = fp.readline()
35 if not line: break
36 lineno = lineno + 1
37 if prog.search(line) >= 0:
38 showline(filename, lineno, line, prog)
39 fp.close()
41 def showline(filename, lineno, line, prog):
42 if line[-1:] == '\n': line = line[:-1]
43 if opt_show_lineno:
44 prefix = string.rjust(`lineno`, 3) + ': '
45 else:
46 prefix = ''
47 if opt_show_filename:
48 prefix = filename + ': ' + prefix
49 print prefix + line
50 if opt_show_where:
51 start, end = prog.regs()[0]
52 line = line[:start]
53 if '\t' not in line:
54 prefix = ' ' * (len(prefix) + start)
55 else:
56 prefix = ' ' * len(prefix)
57 for c in line:
58 if c <> '\t': c = ' '
59 prefix = prefix + c
60 if start == end: prefix = prefix + '\\'
61 else: prefix = prefix + '^'*(end-start)
62 print prefix