Current Path: > > > > > lib64 > python2.7 > Tools > scripts
Operation : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64 Software : Apache Server IP : 162.0.232.56 | Your IP: 216.73.216.111 Domains : 1034 Domain(s) Permission : [ 0755 ]
Name | Type | Size | Last Modified | Actions |
---|---|---|---|---|
analyze_dxp.py | File | 4205 bytes | April 10 2024 04:58:41. | |
analyze_dxp.pyc | File | 4748 bytes | April 10 2024 04:58:46. | |
analyze_dxp.pyo | File | 4748 bytes | April 10 2024 04:58:46. | |
byext.py | File | 3944 bytes | April 10 2024 04:58:41. | |
byext.pyc | File | 4521 bytes | April 10 2024 04:58:46. | |
byext.pyo | File | 4521 bytes | April 10 2024 04:58:46. | |
byteyears.py | File | 1637 bytes | April 10 2024 04:58:41. | |
byteyears.pyc | File | 1398 bytes | April 10 2024 04:58:46. | |
byteyears.pyo | File | 1398 bytes | April 10 2024 04:58:46. | |
checkappend.py | File | 4657 bytes | April 10 2024 04:58:41. | |
checkappend.pyc | File | 4886 bytes | April 10 2024 04:58:46. | |
checkappend.pyo | File | 4886 bytes | April 10 2024 04:58:46. | |
checkpip.py | File | 757 bytes | April 10 2024 04:58:41. | |
checkpip.pyc | File | 1044 bytes | April 10 2024 04:58:46. | |
checkpip.pyo | File | 1044 bytes | April 10 2024 04:58:46. | |
checkpyc.py | File | 2010 bytes | April 10 2024 04:58:41. | |
checkpyc.pyc | File | 1976 bytes | April 10 2024 04:58:46. | |
checkpyc.pyo | File | 1976 bytes | April 10 2024 04:58:46. | |
classfix.py | File | 5952 bytes | April 10 2024 04:58:41. | |
classfix.pyc | File | 4189 bytes | April 10 2024 04:58:46. | |
classfix.pyo | File | 4189 bytes | April 10 2024 04:58:46. | |
cleanfuture.py | File | 8577 bytes | April 10 2024 04:58:41. | |
cleanfuture.pyc | File | 7394 bytes | April 10 2024 04:58:46. | |
cleanfuture.pyo | File | 7361 bytes | April 10 2024 04:58:44. | |
combinerefs.py | File | 4380 bytes | April 10 2024 04:58:41. | |
combinerefs.pyc | File | 4256 bytes | April 10 2024 04:58:46. | |
combinerefs.pyo | File | 4223 bytes | April 10 2024 04:58:44. | |
copytime.py | File | 663 bytes | April 10 2024 04:58:41. | |
copytime.pyc | File | 937 bytes | April 10 2024 04:58:46. | |
copytime.pyo | File | 937 bytes | April 10 2024 04:58:46. | |
crlf.py | File | 610 bytes | April 10 2024 04:58:41. | |
crlf.pyc | File | 855 bytes | April 10 2024 04:58:46. | |
crlf.pyo | File | 855 bytes | April 10 2024 04:58:46. | |
cvsfiles.py | File | 1786 bytes | April 10 2024 04:58:41. | |
cvsfiles.pyc | File | 2163 bytes | April 10 2024 04:58:46. | |
cvsfiles.pyo | File | 2163 bytes | April 10 2024 04:58:46. | |
db2pickle.py | File | 3570 bytes | April 10 2024 04:58:41. | |
db2pickle.pyc | File | 3497 bytes | April 10 2024 04:58:46. | |
db2pickle.pyo | File | 3497 bytes | April 10 2024 04:58:46. | |
diff.py | File | 2066 bytes | April 10 2024 04:58:41. | |
diff.pyc | File | 2386 bytes | April 10 2024 04:58:46. | |
diff.pyo | File | 2386 bytes | April 10 2024 04:58:46. | |
dutree.py | File | 1615 bytes | April 10 2024 04:58:41. | |
dutree.pyc | File | 2230 bytes | April 10 2024 04:58:46. | |
dutree.pyo | File | 2230 bytes | April 10 2024 04:58:46. | |
eptags.py | File | 1483 bytes | April 10 2024 04:58:41. | |
eptags.pyc | File | 1876 bytes | April 10 2024 04:58:46. | |
eptags.pyo | File | 1876 bytes | April 10 2024 04:58:46. | |
find_recursionlimit.py | File | 3473 bytes | April 10 2024 04:58:41. | |
find_recursionlimit.pyc | File | 5673 bytes | April 10 2024 04:58:46. | |
find_recursionlimit.pyo | File | 5673 bytes | April 10 2024 04:58:46. | |
finddiv.py | File | 2517 bytes | April 10 2024 04:58:41. | |
finddiv.pyc | File | 3296 bytes | April 10 2024 04:58:46. | |
finddiv.pyo | File | 3296 bytes | April 10 2024 04:58:46. | |
findlinksto.py | File | 1069 bytes | April 10 2024 04:58:41. | |
findlinksto.pyc | File | 1425 bytes | April 10 2024 04:58:46. | |
findlinksto.pyo | File | 1425 bytes | April 10 2024 04:58:46. | |
findnocoding.py | File | 2808 bytes | April 10 2024 04:58:41. | |
findnocoding.pyc | File | 3201 bytes | April 10 2024 04:58:46. | |
findnocoding.pyo | File | 3201 bytes | April 10 2024 04:58:46. | |
fixcid.py | File | 9995 bytes | April 10 2024 04:58:41. | |
fixcid.pyc | File | 7851 bytes | April 10 2024 04:58:46. | |
fixcid.pyo | File | 7851 bytes | April 10 2024 04:58:46. | |
fixdiv.py | File | 13841 bytes | April 10 2024 04:58:41. | |
fixdiv.pyc | File | 13849 bytes | April 10 2024 04:58:46. | |
fixdiv.pyo | File | 13766 bytes | April 10 2024 04:58:44. | |
fixheader.py | File | 1189 bytes | April 10 2024 04:58:41. | |
fixheader.pyc | File | 1471 bytes | April 10 2024 04:58:46. | |
fixheader.pyo | File | 1471 bytes | April 10 2024 04:58:46. | |
fixnotice.py | File | 3051 bytes | April 10 2024 04:58:41. | |
fixnotice.pyc | File | 3500 bytes | April 10 2024 04:58:46. | |
fixnotice.pyo | File | 3500 bytes | April 10 2024 04:58:46. | |
fixps.py | File | 893 bytes | April 10 2024 04:58:41. | |
fixps.pyc | File | 969 bytes | April 10 2024 04:58:46. | |
fixps.pyo | File | 969 bytes | April 10 2024 04:58:46. | |
google.py | File | 519 bytes | April 10 2024 04:58:41. | |
google.pyc | File | 792 bytes | April 10 2024 04:58:46. | |
google.pyo | File | 792 bytes | April 10 2024 04:58:46. | |
gprof2html.py | File | 2167 bytes | April 10 2024 04:58:41. | |
gprof2html.pyc | File | 2277 bytes | April 10 2024 04:58:46. | |
gprof2html.pyo | File | 2277 bytes | April 10 2024 04:58:46. | |
h2py.py | File | 5953 bytes | April 10 2024 04:58:41. | |
h2py.pyc | File | 4392 bytes | April 10 2024 04:58:46. | |
h2py.pyo | File | 4392 bytes | April 10 2024 04:58:46. | |
hotshotmain.py | File | 1483 bytes | April 10 2024 04:58:41. | |
hotshotmain.pyc | File | 1863 bytes | April 10 2024 04:58:46. | |
hotshotmain.pyo | File | 1863 bytes | April 10 2024 04:58:46. | |
ifdef.py | File | 3718 bytes | April 10 2024 04:58:41. | |
ifdef.pyc | File | 2265 bytes | April 10 2024 04:58:46. | |
ifdef.pyo | File | 2265 bytes | April 10 2024 04:58:46. | |
lfcr.py | File | 618 bytes | April 10 2024 04:58:41. | |
lfcr.pyc | File | 880 bytes | April 10 2024 04:58:46. | |
lfcr.pyo | File | 880 bytes | April 10 2024 04:58:46. | |
linktree.py | File | 2424 bytes | April 10 2024 04:58:41. | |
linktree.pyc | File | 2025 bytes | April 10 2024 04:58:46. | |
linktree.pyo | File | 2025 bytes | April 10 2024 04:58:46. | |
lll.py | File | 742 bytes | April 10 2024 04:58:41. | |
lll.pyc | File | 942 bytes | April 10 2024 04:58:46. | |
lll.pyo | File | 942 bytes | April 10 2024 04:58:46. | |
logmerge.py | File | 5575 bytes | April 10 2024 04:58:41. | |
logmerge.pyc | File | 5083 bytes | April 10 2024 04:58:46. | |
logmerge.pyo | File | 5083 bytes | April 10 2024 04:58:46. | |
mailerdaemon.py | File | 7942 bytes | April 10 2024 04:58:41. | |
mailerdaemon.pyc | File | 7364 bytes | April 10 2024 04:58:46. | |
mailerdaemon.pyo | File | 7364 bytes | April 10 2024 04:58:46. | |
md5sum.py | File | 2385 bytes | April 10 2024 04:58:41. | |
md5sum.pyc | File | 2917 bytes | April 10 2024 04:58:46. | |
md5sum.pyo | File | 2917 bytes | April 10 2024 04:58:46. | |
methfix.py | File | 5462 bytes | April 10 2024 04:58:41. | |
methfix.pyc | File | 4125 bytes | April 10 2024 04:58:46. | |
methfix.pyo | File | 4125 bytes | April 10 2024 04:58:46. | |
mkreal.py | File | 1627 bytes | April 10 2024 04:58:41. | |
mkreal.pyc | File | 1980 bytes | April 10 2024 04:58:46. | |
mkreal.pyo | File | 1980 bytes | April 10 2024 04:58:46. | |
ndiff.py | File | 3808 bytes | April 10 2024 04:58:41. | |
ndiff.pyc | File | 3859 bytes | April 10 2024 04:58:46. | |
ndiff.pyo | File | 3859 bytes | April 10 2024 04:58:46. | |
nm2def.py | File | 2443 bytes | April 10 2024 04:58:41. | |
nm2def.pyc | File | 2960 bytes | April 10 2024 04:58:46. | |
nm2def.pyo | File | 2960 bytes | April 10 2024 04:58:46. | |
objgraph.py | File | 6017 bytes | April 10 2024 04:58:41. | |
objgraph.pyc | File | 4933 bytes | April 10 2024 04:58:46. | |
objgraph.pyo | File | 4933 bytes | April 10 2024 04:58:46. | |
parseentities.py | File | 1719 bytes | April 10 2024 04:58:41. | |
parseentities.pyc | File | 2077 bytes | April 10 2024 04:58:46. | |
parseentities.pyo | File | 2077 bytes | April 10 2024 04:58:46. | |
patchcheck.py | File | 7679 bytes | April 10 2024 04:58:41. | |
patchcheck.pyc | File | 9128 bytes | April 10 2024 04:58:46. | |
patchcheck.pyo | File | 9128 bytes | April 10 2024 04:58:46. | |
pathfix.py | File | 4329 bytes | April 10 2024 04:58:41. | |
pathfix.pyc | File | 3838 bytes | April 10 2024 04:58:46. | |
pathfix.pyo | File | 3838 bytes | April 10 2024 04:58:46. | |
pdeps.py | File | 3936 bytes | April 10 2024 04:58:41. | |
pdeps.pyc | File | 3220 bytes | April 10 2024 04:58:46. | |
pdeps.pyo | File | 3220 bytes | April 10 2024 04:58:46. | |
pickle2db.py | File | 3942 bytes | April 10 2024 04:58:41. | |
pickle2db.pyc | File | 3819 bytes | April 10 2024 04:58:46. | |
pickle2db.pyo | File | 3819 bytes | April 10 2024 04:58:46. | |
pindent.py | File | 17170 bytes | April 10 2024 04:58:41. | |
pindent.pyc | File | 11559 bytes | April 10 2024 04:58:46. | |
pindent.pyo | File | 11559 bytes | April 10 2024 04:58:46. | |
ptags.py | File | 1224 bytes | April 10 2024 04:58:41. | |
ptags.pyc | File | 1407 bytes | April 10 2024 04:58:46. | |
ptags.pyo | File | 1407 bytes | April 10 2024 04:58:46. | |
pysource.py | File | 3846 bytes | April 10 2024 04:58:41. | |
pysource.pyc | File | 4009 bytes | April 10 2024 04:58:46. | |
pysource.pyo | File | 4009 bytes | April 10 2024 04:58:46. | |
redemo.py | File | 5792 bytes | April 10 2024 04:58:41. | |
redemo.pyc | File | 5249 bytes | April 10 2024 04:58:46. | |
redemo.pyo | File | 5249 bytes | April 10 2024 04:58:46. | |
reindent-rst.py | File | 278 bytes | April 10 2024 04:58:41. | |
reindent-rst.pyc | File | 481 bytes | April 10 2024 04:58:46. | |
reindent-rst.pyo | File | 481 bytes | April 10 2024 04:58:46. | |
reindent.py | File | 11417 bytes | April 10 2024 04:58:41. | |
reindent.pyc | File | 9629 bytes | April 10 2024 04:58:46. | |
reindent.pyo | File | 9590 bytes | April 10 2024 04:58:44. | |
rgrep.py | File | 1492 bytes | April 10 2024 04:58:41. | |
rgrep.pyc | File | 1881 bytes | April 10 2024 04:58:46. | |
rgrep.pyo | File | 1881 bytes | April 10 2024 04:58:46. | |
serve.py | File | 1147 bytes | April 10 2024 04:58:41. | |
serve.pyc | File | 1597 bytes | April 10 2024 04:58:46. | |
serve.pyo | File | 1597 bytes | April 10 2024 04:58:46. | |
setup.py | File | 421 bytes | April 10 2024 04:58:41. | |
setup.pyc | File | 548 bytes | April 10 2024 04:58:46. | |
setup.pyo | File | 548 bytes | April 10 2024 04:58:46. | |
suff.py | File | 621 bytes | April 10 2024 04:58:41. | |
suff.pyc | File | 904 bytes | April 10 2024 04:58:46. | |
suff.pyo | File | 904 bytes | April 10 2024 04:58:46. | |
svneol.py | File | 2930 bytes | April 10 2024 04:58:41. | |
svneol.pyc | File | 2904 bytes | April 10 2024 04:58:46. | |
svneol.pyo | File | 2825 bytes | April 10 2024 04:58:44. | |
texcheck.py | File | 9256 bytes | April 10 2024 04:58:41. | |
texcheck.pyc | File | 8376 bytes | April 10 2024 04:58:46. | |
texcheck.pyo | File | 8376 bytes | April 10 2024 04:58:46. | |
texi2html.py | File | 69825 bytes | April 10 2024 04:58:41. | |
texi2html.pyc | File | 83323 bytes | April 10 2024 04:58:46. | |
texi2html.pyo | File | 83323 bytes | April 10 2024 04:58:46. | |
treesync.py | File | 5783 bytes | April 10 2024 04:58:41. | |
treesync.pyc | File | 5990 bytes | April 10 2024 04:58:46. | |
treesync.pyo | File | 5990 bytes | April 10 2024 04:58:46. | |
untabify.py | File | 1215 bytes | April 10 2024 04:58:41. | |
untabify.pyc | File | 1583 bytes | April 10 2024 04:58:46. | |
untabify.pyo | File | 1583 bytes | April 10 2024 04:58:46. | |
which.py | File | 1630 bytes | April 10 2024 04:58:41. | |
which.pyc | File | 1632 bytes | April 10 2024 04:58:46. | |
which.pyo | File | 1632 bytes | April 10 2024 04:58:46. | |
win_add2path.py | File | 1620 bytes | April 10 2024 04:58:41. | |
win_add2path.pyc | File | 2069 bytes | April 10 2024 04:58:46. | |
win_add2path.pyo | File | 2069 bytes | April 10 2024 04:58:46. | |
xxci.py | File | 2797 bytes | April 10 2024 04:58:41. | |
xxci.pyc | File | 4017 bytes | April 10 2024 04:58:46. | |
xxci.pyo | File | 4017 bytes | April 10 2024 04:58:46. |
#! /usr/bin/python2.7 # This file contains a class and a main program that perform three # related (though complimentary) formatting operations on Python # programs. When called as "pindent -c", it takes a valid Python # program as input and outputs a version augmented with block-closing # comments. When called as "pindent -d", it assumes its input is a # Python program with block-closing comments and outputs a commentless # version. When called as "pindent -r" it assumes its input is a # Python program with block-closing comments but with its indentation # messed up, and outputs a properly indented version. # A "block-closing comment" is a comment of the form '# end <keyword>' # where <keyword> is the keyword that opened the block. If the # opening keyword is 'def' or 'class', the function or class name may # be repeated in the block-closing comment as well. Here is an # example of a program fully augmented with block-closing comments: # def foobar(a, b): # if a == b: # a = a+1 # elif a < b: # b = b-1 # if b > a: a = a-1 # # end if # else: # print 'oops!' # # end if # # end def foobar # Note that only the last part of an if...elif...else... block needs a # block-closing comment; the same is true for other compound # statements (e.g. try...except). Also note that "short-form" blocks # like the second 'if' in the example must be closed as well; # otherwise the 'else' in the example would be ambiguous (remember # that indentation is not significant when interpreting block-closing # comments). # The operations are idempotent (i.e. applied to their own output # they yield an identical result). Running first "pindent -c" and # then "pindent -r" on a valid Python program produces a program that # is semantically identical to the input (though its indentation may # be different). Running "pindent -e" on that output produces a # program that only differs from the original in indentation. # Other options: # -s stepsize: set the indentation step size (default 8) # -t tabsize : set the number of spaces a tab character is worth (default 8) # -e : expand TABs into spaces # file ... : input file(s) (default standard input) # The results always go to standard output # Caveats: # - comments ending in a backslash will be mistaken for continued lines # - continuations using backslash are always left unchanged # - continuations inside parentheses are not extra indented by -r # but must be indented for -c to work correctly (this breaks # idempotency!) # - continued lines inside triple-quoted strings are totally garbled # Secret feature: # - On input, a block may also be closed with an "end statement" -- # this is a block-closing comment without the '#' sign. # Possible improvements: # - check syntax based on transitions in 'next' table # - better error reporting # - better error recovery # - check identifier after class/def # The following wishes need a more complete tokenization of the source: # - Don't get fooled by comments ending in backslash # - reindent continuation lines indicated by backslash # - handle continuation lines inside parentheses/braces/brackets # - handle triple quoted strings spanning lines # - realign comments # - optionally do much more thorough reformatting, a la C indent from __future__ import print_function # Defaults STEPSIZE = 8 TABSIZE = 8 EXPANDTABS = False import io import re import sys next = {} next['if'] = next['elif'] = 'elif', 'else', 'end' next['while'] = next['for'] = 'else', 'end' next['try'] = 'except', 'finally' next['except'] = 'except', 'else', 'finally', 'end' next['else'] = next['finally'] = next['with'] = \ next['def'] = next['class'] = 'end' next['end'] = () start = 'if', 'while', 'for', 'try', 'with', 'def', 'class' class PythonIndenter: def __init__(self, fpi = sys.stdin, fpo = sys.stdout, indentsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS): self.fpi = fpi self.fpo = fpo self.indentsize = indentsize self.tabsize = tabsize self.lineno = 0 self.expandtabs = expandtabs self._write = fpo.write self.kwprog = re.compile( r'^(?:\s|\\\n)*(?P<kw>[a-z]+)' r'((?:\s|\\\n)+(?P<id>[a-zA-Z_]\w*))?' r'[^\w]') self.endprog = re.compile( r'^(?:\s|\\\n)*#?\s*end\s+(?P<kw>[a-z]+)' r'(\s+(?P<id>[a-zA-Z_]\w*))?' r'[^\w]') self.wsprog = re.compile(r'^[ \t]*') # end def __init__ def write(self, line): if self.expandtabs: self._write(line.expandtabs(self.tabsize)) else: self._write(line) # end if # end def write def readline(self): line = self.fpi.readline() if line: self.lineno += 1 # end if return line # end def readline def error(self, fmt, *args): if args: fmt = fmt % args # end if sys.stderr.write('Error at line %d: %s\n' % (self.lineno, fmt)) self.write('### %s ###\n' % fmt) # end def error def getline(self): line = self.readline() while line[-2:] == '\\\n': line2 = self.readline() if not line2: break # end if line += line2 # end while return line # end def getline def putline(self, line, indent): tabs, spaces = divmod(indent*self.indentsize, self.tabsize) i = self.wsprog.match(line).end() line = line[i:] if line[:1] not in ('\n', '\r', ''): line = '\t'*tabs + ' '*spaces + line # end if self.write(line) # end def putline def reformat(self): stack = [] while True: line = self.getline() if not line: break # EOF # end if m = self.endprog.match(line) if m: kw = 'end' kw2 = m.group('kw') if not stack: self.error('unexpected end') elif stack.pop()[0] != kw2: self.error('unmatched end') # end if self.putline(line, len(stack)) continue # end if m = self.kwprog.match(line) if m: kw = m.group('kw') if kw in start: self.putline(line, len(stack)) stack.append((kw, kw)) continue # end if if next.has_key(kw) and stack: self.putline(line, len(stack)-1) kwa, kwb = stack[-1] stack[-1] = kwa, kw continue # end if # end if self.putline(line, len(stack)) # end while if stack: self.error('unterminated keywords') for kwa, kwb in stack: self.write('\t%s\n' % kwa) # end for # end if # end def reformat def delete(self): begin_counter = 0 end_counter = 0 while True: line = self.getline() if not line: break # EOF # end if m = self.endprog.match(line) if m: end_counter += 1 continue # end if m = self.kwprog.match(line) if m: kw = m.group('kw') if kw in start: begin_counter += 1 # end if # end if self.write(line) # end while if begin_counter - end_counter < 0: sys.stderr.write('Warning: input contained more end tags than expected\n') elif begin_counter - end_counter > 0: sys.stderr.write('Warning: input contained less end tags than expected\n') # end if # end def delete def complete(self): stack = [] todo = [] currentws = thisid = firstkw = lastkw = topid = '' while True: line = self.getline() i = self.wsprog.match(line).end() m = self.endprog.match(line) if m: thiskw = 'end' endkw = m.group('kw') thisid = m.group('id') else: m = self.kwprog.match(line) if m: thiskw = m.group('kw') if not next.has_key(thiskw): thiskw = '' # end if if thiskw in ('def', 'class'): thisid = m.group('id') else: thisid = '' # end if elif line[i:i+1] in ('\n', '#'): todo.append(line) continue else: thiskw = '' # end if # end if indentws = line[:i] indent = len(indentws.expandtabs(self.tabsize)) current = len(currentws.expandtabs(self.tabsize)) while indent < current: if firstkw: if topid: s = '# end %s %s\n' % ( firstkw, topid) else: s = '# end %s\n' % firstkw # end if self.write(currentws + s) firstkw = lastkw = '' # end if currentws, firstkw, lastkw, topid = stack.pop() current = len(currentws.expandtabs(self.tabsize)) # end while if indent == current and firstkw: if thiskw == 'end': if endkw != firstkw: self.error('mismatched end') # end if firstkw = lastkw = '' elif not thiskw or thiskw in start: if topid: s = '# end %s %s\n' % ( firstkw, topid) else: s = '# end %s\n' % firstkw # end if self.write(currentws + s) firstkw = lastkw = topid = '' # end if # end if if indent > current: stack.append((currentws, firstkw, lastkw, topid)) if thiskw and thiskw not in start: # error thiskw = '' # end if currentws, firstkw, lastkw, topid = \ indentws, thiskw, thiskw, thisid # end if if thiskw: if thiskw in start: firstkw = lastkw = thiskw topid = thisid else: lastkw = thiskw # end if # end if for l in todo: self.write(l) # end for todo = [] if not line: break # end if self.write(line) # end while # end def complete # end class PythonIndenter # Simplified user interface # - xxx_filter(input, output): read and write file objects # - xxx_string(s): take and return string object # - xxx_file(filename): process file in place, return true iff changed def complete_filter(input = sys.stdin, output = sys.stdout, stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS): pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs) pi.complete() # end def complete_filter def delete_filter(input= sys.stdin, output = sys.stdout, stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS): pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs) pi.delete() # end def delete_filter def reformat_filter(input = sys.stdin, output = sys.stdout, stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS): pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs) pi.reformat() # end def reformat_filter def complete_string(source, stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS): input = io.BytesIO(source) output = io.BytesIO() pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs) pi.complete() return output.getvalue() # end def complete_string def delete_string(source, stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS): input = io.BytesIO(source) output = io.BytesIO() pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs) pi.delete() return output.getvalue() # end def delete_string def reformat_string(source, stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS): input = io.BytesIO(source) output = io.BytesIO() pi = PythonIndenter(input, output, stepsize, tabsize, expandtabs) pi.reformat() return output.getvalue() # end def reformat_string def make_backup(filename): import os, os.path backup = filename + '~' if os.path.lexists(backup): try: os.remove(backup) except os.error: print("Can't remove backup %r" % (backup,), file=sys.stderr) # end try # end if try: os.rename(filename, backup) except os.error: print("Can't rename %r to %r" % (filename, backup), file=sys.stderr) # end try # end def make_backup def complete_file(filename, stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS): with open(filename, 'r') as f: source = f.read() # end with result = complete_string(source, stepsize, tabsize, expandtabs) if source == result: return 0 # end if make_backup(filename) with open(filename, 'w') as f: f.write(result) # end with return 1 # end def complete_file def delete_file(filename, stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS): with open(filename, 'r') as f: source = f.read() # end with result = delete_string(source, stepsize, tabsize, expandtabs) if source == result: return 0 # end if make_backup(filename) with open(filename, 'w') as f: f.write(result) # end with return 1 # end def delete_file def reformat_file(filename, stepsize = STEPSIZE, tabsize = TABSIZE, expandtabs = EXPANDTABS): with open(filename, 'r') as f: source = f.read() # end with result = reformat_string(source, stepsize, tabsize, expandtabs) if source == result: return 0 # end if make_backup(filename) with open(filename, 'w') as f: f.write(result) # end with return 1 # end def reformat_file # Test program when called as a script usage = """ usage: pindent (-c|-d|-r) [-s stepsize] [-t tabsize] [-e] [file] ... -c : complete a correctly indented program (add #end directives) -d : delete #end directives -r : reformat a completed program (use #end directives) -s stepsize: indentation step (default %(STEPSIZE)d) -t tabsize : the worth in spaces of a tab (default %(TABSIZE)d) -e : expand TABs into spaces (default OFF) [file] ... : files are changed in place, with backups in file~ If no files are specified or a single - is given, the program acts as a filter (reads stdin, writes stdout). """ % vars() def error_both(op1, op2): sys.stderr.write('Error: You can not specify both '+op1+' and -'+op2[0]+' at the same time\n') sys.stderr.write(usage) sys.exit(2) # end def error_both def test(): import getopt try: opts, args = getopt.getopt(sys.argv[1:], 'cdrs:t:e') except getopt.error, msg: sys.stderr.write('Error: %s\n' % msg) sys.stderr.write(usage) sys.exit(2) # end try action = None stepsize = STEPSIZE tabsize = TABSIZE expandtabs = EXPANDTABS for o, a in opts: if o == '-c': if action: error_both(o, action) # end if action = 'complete' elif o == '-d': if action: error_both(o, action) # end if action = 'delete' elif o == '-r': if action: error_both(o, action) # end if action = 'reformat' elif o == '-s': stepsize = int(a) elif o == '-t': tabsize = int(a) elif o == '-e': expandtabs = True # end if # end for if not action: sys.stderr.write( 'You must specify -c(omplete), -d(elete) or -r(eformat)\n') sys.stderr.write(usage) sys.exit(2) # end if if not args or args == ['-']: action = eval(action + '_filter') action(sys.stdin, sys.stdout, stepsize, tabsize, expandtabs) else: action = eval(action + '_file') for filename in args: action(filename, stepsize, tabsize, expandtabs) # end for # end if # end def test if __name__ == '__main__': test() # end if
SILENT KILLER Tool