annotate textshaper/indent.py @ 28:fd626585c299

test decorator and fix errors
author Jeff Hammel <k0scist@gmail.com>
date Sun, 23 Feb 2014 14:27:42 -0800
parents c23782a7b7ba
children 23616399f36c
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
1 #!/usr/bin/env python
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
2
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
3 """
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
4 indentation of text blocks
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
5 """
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
6
24
0930c6884f8a STUB: README.txt setup.py textshaper/indent.py
Jeff Hammel <k0scist@gmail.com>
parents: 11
diff changeset
7 import argparse
9
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
8 import os
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
9 import sys
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
10
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
11 def indent(text, indentation=4, space=' ', strict=False):
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
12 """
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
13 indent a block of text
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
14
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
15 text -- lines of text to indent
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
16 indentation -- number of spaces to indent
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
17 space -- what to indent with
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
18 strict -- whether to enforce required whitespace for negative indentation
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
19 """
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
20
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
21 if not indentation:
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
22 # nothing to do
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
23 return text
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
24
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
25 if indentation > 0:
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
26 retval = [space * indentation + line for line in text]
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
27 else:
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
28 # negative indentation
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
29 indentation = -indentation
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
30 retval = []
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
31 for line in text:
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
32 prefix = line[:indentation]
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
33 for index, char in enumerate(prefix):
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
34 if not char == space:
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
35 if strict:
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
36 raise AssertionError("Found non-'%s' charcter at column %d for indentation -%d" % (space, index, indentation))
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
37 break
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
38 else:
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
39 index = indentation
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
40 retval.append(line[index:])
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
41
10
466386702968 more stuff
Jeff Hammel <k0scist@gmail.com>
parents: 9
diff changeset
42 return retval
466386702968 more stuff
Jeff Hammel <k0scist@gmail.com>
parents: 9
diff changeset
43
466386702968 more stuff
Jeff Hammel <k0scist@gmail.com>
parents: 9
diff changeset
44
24
0930c6884f8a STUB: README.txt setup.py textshaper/indent.py
Jeff Hammel <k0scist@gmail.com>
parents: 11
diff changeset
45 def add_arguments(parser):
0930c6884f8a STUB: README.txt setup.py textshaper/indent.py
Jeff Hammel <k0scist@gmail.com>
parents: 11
diff changeset
46 parser.add_argument('infile', nargs='?', type=argparse.FileType('r'),
0930c6884f8a STUB: README.txt setup.py textshaper/indent.py
Jeff Hammel <k0scist@gmail.com>
parents: 11
diff changeset
47 default=sys.stdin)
0930c6884f8a STUB: README.txt setup.py textshaper/indent.py
Jeff Hammel <k0scist@gmail.com>
parents: 11
diff changeset
48 parser.add_argument('-o', '--output', dest='output',
0930c6884f8a STUB: README.txt setup.py textshaper/indent.py
Jeff Hammel <k0scist@gmail.com>
parents: 11
diff changeset
49 help="output file or stdout if not given")
0930c6884f8a STUB: README.txt setup.py textshaper/indent.py
Jeff Hammel <k0scist@gmail.com>
parents: 11
diff changeset
50
26
c23782a7b7ba more hookups, yo
Jeff Hammel <k0scist@gmail.com>
parents: 24
diff changeset
51
9
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
52 def main(args=sys.argv[1:]):
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
53
10
466386702968 more stuff
Jeff Hammel <k0scist@gmail.com>
parents: 9
diff changeset
54 # parse command line
466386702968 more stuff
Jeff Hammel <k0scist@gmail.com>
parents: 9
diff changeset
55 description = """indent files or stdin if no files given"""
24
0930c6884f8a STUB: README.txt setup.py textshaper/indent.py
Jeff Hammel <k0scist@gmail.com>
parents: 11
diff changeset
56 parser = argparse.Argument(description=__doc__)
0930c6884f8a STUB: README.txt setup.py textshaper/indent.py
Jeff Hammel <k0scist@gmail.com>
parents: 11
diff changeset
57 add_arguments(parser)
0930c6884f8a STUB: README.txt setup.py textshaper/indent.py
Jeff Hammel <k0scist@gmail.com>
parents: 11
diff changeset
58 options = parser.parse_args(args)
10
466386702968 more stuff
Jeff Hammel <k0scist@gmail.com>
parents: 9
diff changeset
59
466386702968 more stuff
Jeff Hammel <k0scist@gmail.com>
parents: 9
diff changeset
60 # process input
466386702968 more stuff
Jeff Hammel <k0scist@gmail.com>
parents: 9
diff changeset
61 for f in _files():
24
0930c6884f8a STUB: README.txt setup.py textshaper/indent.py
Jeff Hammel <k0scist@gmail.com>
parents: 11
diff changeset
62
0930c6884f8a STUB: README.txt setup.py textshaper/indent.py
Jeff Hammel <k0scist@gmail.com>
parents: 11
diff changeset
63 # indent the text
26
c23782a7b7ba more hookups, yo
Jeff Hammel <k0scist@gmail.com>
parents: 24
diff changeset
64 indented = '\n'.join(indent(f))
24
0930c6884f8a STUB: README.txt setup.py textshaper/indent.py
Jeff Hammel <k0scist@gmail.com>
parents: 11
diff changeset
65
0930c6884f8a STUB: README.txt setup.py textshaper/indent.py
Jeff Hammel <k0scist@gmail.com>
parents: 11
diff changeset
66 # append to output
0930c6884f8a STUB: README.txt setup.py textshaper/indent.py
Jeff Hammel <k0scist@gmail.com>
parents: 11
diff changeset
67 if options.output:
0930c6884f8a STUB: README.txt setup.py textshaper/indent.py
Jeff Hammel <k0scist@gmail.com>
parents: 11
diff changeset
68 with open(options.output, 'a') as f:
0930c6884f8a STUB: README.txt setup.py textshaper/indent.py
Jeff Hammel <k0scist@gmail.com>
parents: 11
diff changeset
69 f.write(indented)
0930c6884f8a STUB: README.txt setup.py textshaper/indent.py
Jeff Hammel <k0scist@gmail.com>
parents: 11
diff changeset
70 else:
0930c6884f8a STUB: README.txt setup.py textshaper/indent.py
Jeff Hammel <k0scist@gmail.com>
parents: 11
diff changeset
71 sys.stdout.write(indented)
9
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
72
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
73 if __name__ == '__main__':
71fb16088d54 add file for indentation; wth did my work go??? :(
Jeff Hammel <k0scist@gmail.com>
parents:
diff changeset
74 main()