annotate Lib/lib-old/grep.py @ 4566:6403c94de50d legacy-trunk

Added safeguard against failure in __del__.
author Guido van Rossum <guido@python.org>
date Wed, 27 Nov 1996 19:39:58 +0000
parents 43c86d1eb22c
children 6c5f7e74fa88
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 # 'grep'
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
542
b586189cc1f5 Adapted to new "regex" module.
Guido van Rossum <guido@python.org>
parents: 358
diff changeset
3 import regex
b586189cc1f5 Adapted to new "regex" module.
Guido van Rossum <guido@python.org>
parents: 358
diff changeset
4 from regex_syntax import *
103
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 import string
1229ba124e0b Initial revision
Guido van Rossum <guido@python.org>
parents:
diff changeset
6
576
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
7 opt_show_where = 0
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
8 opt_show_filename = 0
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
9 opt_show_lineno = 1
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
10
807
43c86d1eb22c Use *args syntax instead of +args
Guido van Rossum <guido@python.org>
parents: 576
diff changeset
11 def grep(pat, *files):
576
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
12 return ggrep(RE_SYNTAX_GREP, pat, files)
542
b586189cc1f5 Adapted to new "regex" module.
Guido van Rossum <guido@python.org>
parents: 358
diff changeset
13
807
43c86d1eb22c Use *args syntax instead of +args
Guido van Rossum <guido@python.org>
parents: 576
diff changeset
14 def egrep(pat, *files):
576
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
15 return ggrep(RE_SYNTAX_EGREP, pat, files)
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
16
807
43c86d1eb22c Use *args syntax instead of +args
Guido van Rossum <guido@python.org>
parents: 576
diff changeset
17 def emgrep(pat, *files):
576
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
18 return ggrep(RE_SYNTAX_EMACS, pat, files)
542
b586189cc1f5 Adapted to new "regex" module.
Guido van Rossum <guido@python.org>
parents: 358
diff changeset
19
576
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
20 def ggrep(syntax, pat, files):
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
21 if len(files) == 1 and type(files[0]) == type([]):
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
22 files = files[0]
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
23 global opt_show_filename
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
24 opt_show_filename = (len(files) != 1)
542
b586189cc1f5 Adapted to new "regex" module.
Guido van Rossum <guido@python.org>
parents: 358
diff changeset
25 syntax = regex.set_syntax(syntax)
b586189cc1f5 Adapted to new "regex" module.
Guido van Rossum <guido@python.org>
parents: 358
diff changeset
26 try:
b586189cc1f5 Adapted to new "regex" module.
Guido van Rossum <guido@python.org>
parents: 358
diff changeset
27 prog = regex.compile(pat)
b586189cc1f5 Adapted to new "regex" module.
Guido van Rossum <guido@python.org>
parents: 358
diff changeset
28 finally:
b586189cc1f5 Adapted to new "regex" module.
Guido van Rossum <guido@python.org>
parents: 358
diff changeset
29 syntax = regex.set_syntax(syntax)
576
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
30 for filename in files:
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
31 fp = open(filename, 'r')
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
32 lineno = 0
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
33 while 1:
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
34 line = fp.readline()
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
35 if not line: break
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
36 lineno = lineno + 1
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
37 if prog.search(line) >= 0:
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
38 showline(filename, lineno, line, prog)
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
39 fp.close()
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
40
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
41 def showline(filename, lineno, line, prog):
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
42 if line[-1:] == '\n': line = line[:-1]
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
43 if opt_show_lineno:
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
44 prefix = string.rjust(`lineno`, 3) + ': '
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
45 else:
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
46 prefix = ''
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
47 if opt_show_filename:
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
48 prefix = filename + ': ' + prefix
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
49 print prefix + line
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
50 if opt_show_where:
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
51 start, end = prog.regs()[0]
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
52 line = line[:start]
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
53 if '\t' not in line:
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
54 prefix = ' ' * (len(prefix) + start)
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
55 else:
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
56 prefix = ' ' * len(prefix)
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
57 for c in line:
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
58 if c <> '\t': c = ' '
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
59 prefix = prefix + c
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
60 if start == end: prefix = prefix + '\\'
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
61 else: prefix = prefix + '^'*(end-start)
3b8f41f96eb4 Now uses varargs syntax to grep more than one file.
Guido van Rossum <guido@python.org>
parents: 559
diff changeset
62 print prefix