-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfixindent.py
More file actions
101 lines (87 loc) · 2.97 KB
/
fixindent.py
File metadata and controls
101 lines (87 loc) · 2.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#!/usr/bin/env python
# fixindent.py - Fix indenting in python files by expanding/contracting tabs
# Copyright (C) 2006 Dan Noe / isomerica.net
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, US
#
# $Id$
#
import getopt, sys, re, fileinput
def main():
try:
options, remaining = getopt.getopt(sys.argv[1:], "hvts:")
except getopt.GetoptError:
usage()
sys.exit(1)
verbose = False
spaces = "4"
spacestotab = False
for field, value in options:
if field == "-h":
usage()
sys.exit()
if field == "-v":
verbose = True
if field == "-t":
spacestotab = True
if field == "-s":
try:
spaces = int(value)
except ValueError:
print "-s Spaces argument must be an integer"
usage()
sys.exit()
if len(remaining) == 0:
process(sys.stdin, spaces, spacestotab, verbose)
else:
process(remaining[0], spaces, spacestotab, verbose)
def process(input, spaces, spacestotab, verbose):
p = re.compile(r"^(\s+)(.*)$")
for line in fileinput.input(input):
fixed = False
if line == "\n":
sys.stdout.write(line)
continue
m = p.match(line)
if m:
whitespace = m.group(1)
if spacestotab:
newwhitespace = whitespace.replace(" " * spaces, '\t')
if newwhitespace != whitespace:
fixed = True
else:
newwhitespace = whitespace.expandtabs(int(spaces))
if newwhitespace != whitespace:
fixed = True
output = newwhitespace + m.group(2) + "\n"
if verbose and fixed:
sys.stderr.write("Fixed: " + output)
sys.stdout.write(output)
else:
sys.stdout.write(line)
def usage():
print """fixindent.py - Fix indenting in python files by expanding/contracting tabs
Usage:
fixindent.py -hvts <spaces> <inputfile>
Options:
-h Help (you are reading it)
-v Verbose output
-t Convert spaces to tabs
-s <spaces> Number of spaces to expand/contract
If <inputfile> is omitted, stdin is used.
fixindent.py version 0.1, Copyright (C) 2007 Dan Noe / isomerica.net
"""
if __name__ == "__main__":
main()