/
usr
/
lib64
/
python2.7
/
Tools
/
scripts
/
/usr/lib64/python2.7/Tools/scripts
mkdir
upload
Name
Size
Mode
Actions
analyze_dxp.py
4205
0755
edit
dl
rm
analyze_dxp.pyc
4748
0644
edit
dl
rm
analyze_dxp.pyo
4748
0644
edit
dl
rm
byext.py
3944
0755
edit
dl
rm
byext.pyc
4521
0644
edit
dl
rm
byext.pyo
4521
0644
edit
dl
rm
byteyears.py
1637
0755
edit
dl
rm
byteyears.pyc
1398
0644
edit
dl
rm
byteyears.pyo
1398
0644
edit
dl
rm
checkappend.py
4657
0755
edit
dl
rm
checkappend.pyc
4886
0644
edit
dl
rm
checkappend.pyo
4886
0644
edit
dl
rm
checkpip.py
757
0755
edit
dl
rm
checkpip.pyc
1044
0644
edit
dl
rm
checkpip.pyo
1044
0644
edit
dl
rm
checkpyc.py
2010
0755
edit
dl
rm
checkpyc.pyc
1976
0644
edit
dl
rm
checkpyc.pyo
1976
0644
edit
dl
rm
classfix.py
5952
0755
edit
dl
rm
classfix.pyc
4189
0644
edit
dl
rm
classfix.pyo
4189
0644
edit
dl
rm
cleanfuture.py
8577
0755
edit
dl
rm
cleanfuture.pyc
7394
0644
edit
dl
rm
cleanfuture.pyo
7361
0644
edit
dl
rm
combinerefs.py
4380
0755
edit
dl
rm
combinerefs.pyc
4256
0644
edit
dl
rm
combinerefs.pyo
4223
0644
edit
dl
rm
copytime.py
663
0755
edit
dl
rm
copytime.pyc
937
0644
edit
dl
rm
copytime.pyo
937
0644
edit
dl
rm
crlf.py
610
0755
edit
dl
rm
crlf.pyc
855
0644
edit
dl
rm
crlf.pyo
855
0644
edit
dl
rm
cvsfiles.py
1786
0755
edit
dl
rm
cvsfiles.pyc
2163
0644
edit
dl
rm
cvsfiles.pyo
2163
0644
edit
dl
rm
db2pickle.py
3570
0755
edit
dl
rm
db2pickle.pyc
3497
0644
edit
dl
rm
db2pickle.pyo
3497
0644
edit
dl
rm
diff.py
2066
0755
edit
dl
rm
diff.pyc
2386
0644
edit
dl
rm
diff.pyo
2386
0644
edit
dl
rm
dutree.py
1615
0755
edit
dl
rm
dutree.pyc
2230
0644
edit
dl
rm
dutree.pyo
2230
0644
edit
dl
rm
eptags.py
1483
0755
edit
dl
rm
eptags.pyc
1876
0644
edit
dl
rm
eptags.pyo
1876
0644
edit
dl
rm
finddiv.py
2517
0755
edit
dl
rm
finddiv.pyc
3296
0644
edit
dl
rm
finddiv.pyo
3296
0644
edit
dl
rm
findlinksto.py
1069
0755
edit
dl
rm
findlinksto.pyc
1425
0644
edit
dl
rm
findlinksto.pyo
1425
0644
edit
dl
rm
findnocoding.py
2808
0755
edit
dl
rm
findnocoding.pyc
3201
0644
edit
dl
rm
findnocoding.pyo
3201
0644
edit
dl
rm
find_recursionlimit.py
3473
0755
edit
dl
rm
find_recursionlimit.pyc
5673
0644
edit
dl
rm
find_recursionlimit.pyo
5673
0644
edit
dl
rm
fixcid.py
9995
0755
edit
dl
rm
fixcid.pyc
7851
0644
edit
dl
rm
fixcid.pyo
7851
0644
edit
dl
rm
fixdiv.py
13841
0755
edit
dl
rm
fixdiv.pyc
13849
0644
edit
dl
rm
fixdiv.pyo
13766
0644
edit
dl
rm
fixheader.py
1189
0755
edit
dl
rm
fixheader.pyc
1471
0644
edit
dl
rm
fixheader.pyo
1471
0644
edit
dl
rm
fixnotice.py
3051
0755
edit
dl
rm
fixnotice.pyc
3500
0644
edit
dl
rm
fixnotice.pyo
3500
0644
edit
dl
rm
fixps.py
893
0755
edit
dl
rm
fixps.pyc
969
0644
edit
dl
rm
fixps.pyo
969
0644
edit
dl
rm
google.py
519
0755
edit
dl
rm
google.pyc
792
0644
edit
dl
rm
google.pyo
792
0644
edit
dl
rm
gprof2html.py
2167
0755
edit
dl
rm
gprof2html.pyc
2277
0644
edit
dl
rm
gprof2html.pyo
2277
0644
edit
dl
rm
h2py.py
5953
0755
edit
dl
rm
h2py.pyc
4392
0644
edit
dl
rm
h2py.pyo
4392
0644
edit
dl
rm
hotshotmain.py
1483
0755
edit
dl
rm
hotshotmain.pyc
1863
0644
edit
dl
rm
hotshotmain.pyo
1863
0644
edit
dl
rm
ifdef.py
3718
0755
edit
dl
rm
ifdef.pyc
2265
0644
edit
dl
rm
ifdef.pyo
2265
0644
edit
dl
rm
lfcr.py
618
0755
edit
dl
rm
lfcr.pyc
880
0644
edit
dl
rm
lfcr.pyo
880
0644
edit
dl
rm
linktree.py
2424
0755
edit
dl
rm
linktree.pyc
2025
0644
edit
dl
rm
linktree.pyo
2025
0644
edit
dl
rm
lll.py
742
0755
edit
dl
rm
lll.pyc
942
0644
edit
dl
rm
lll.pyo
942
0644
edit
dl
rm
logmerge.py
5575
0755
edit
dl
rm
logmerge.pyc
5083
0644
edit
dl
rm
logmerge.pyo
5083
0644
edit
dl
rm
mailerdaemon.py
7942
0755
edit
dl
rm
mailerdaemon.pyc
7364
0644
edit
dl
rm
mailerdaemon.pyo
7364
0644
edit
dl
rm
md5sum.py
2385
0755
edit
dl
rm
md5sum.pyc
2917
0644
edit
dl
rm
md5sum.pyo
2917
0644
edit
dl
rm
methfix.py
5462
0755
edit
dl
rm
methfix.pyc
4125
0644
edit
dl
rm
methfix.pyo
4125
0644
edit
dl
rm
mkreal.py
1627
0755
edit
dl
rm
mkreal.pyc
1980
0644
edit
dl
rm
mkreal.pyo
1980
0644
edit
dl
rm
ndiff.py
3808
0755
edit
dl
rm
ndiff.pyc
3859
0644
edit
dl
rm
ndiff.pyo
3859
0644
edit
dl
rm
nm2def.py
2443
0755
edit
dl
rm
nm2def.pyc
2960
0644
edit
dl
rm
nm2def.pyo
2960
0644
edit
dl
rm
objgraph.py
6017
0755
edit
dl
rm
objgraph.pyc
4933
0644
edit
dl
rm
objgraph.pyo
4933
0644
edit
dl
rm
parseentities.py
1719
0755
edit
dl
rm
parseentities.pyc
2077
0644
edit
dl
rm
parseentities.pyo
2077
0644
edit
dl
rm
patchcheck.py
7679
0755
edit
dl
rm
patchcheck.pyc
9128
0644
edit
dl
rm
patchcheck.pyo
9128
0644
edit
dl
rm
pathfix.py
4329
0755
edit
dl
rm
pathfix.pyc
3838
0644
edit
dl
rm
pathfix.pyo
3838
0644
edit
dl
rm
pdeps.py
3936
0755
edit
dl
rm
pdeps.pyc
3220
0644
edit
dl
rm
pdeps.pyo
3220
0644
edit
dl
rm
pickle2db.py
3942
0755
edit
dl
rm
pickle2db.pyc
3819
0644
edit
dl
rm
pickle2db.pyo
3819
0644
edit
dl
rm
pindent.py
17170
0755
edit
dl
rm
pindent.pyc
11559
0644
edit
dl
rm
pindent.pyo
11559
0644
edit
dl
rm
ptags.py
1224
0755
edit
dl
rm
ptags.pyc
1407
0644
edit
dl
rm
ptags.pyo
1407
0644
edit
dl
rm
pysource.py
3846
0755
edit
dl
rm
pysource.pyc
4009
0644
edit
dl
rm
pysource.pyo
4009
0644
edit
dl
rm
redemo.py
5792
0755
edit
dl
rm
redemo.pyc
5249
0644
edit
dl
rm
redemo.pyo
5249
0644
edit
dl
rm
reindent-rst.py
278
0755
edit
dl
rm
reindent-rst.pyc
481
0644
edit
dl
rm
reindent-rst.pyo
481
0644
edit
dl
rm
reindent.py
11417
0755
edit
dl
rm
reindent.pyc
9629
0644
edit
dl
rm
reindent.pyo
9590
0644
edit
dl
rm
rgrep.py
1492
0755
edit
dl
rm
rgrep.pyc
1881
0644
edit
dl
rm
rgrep.pyo
1881
0644
edit
dl
rm
serve.py
1147
0755
edit
dl
rm
serve.pyc
1597
0644
edit
dl
rm
serve.pyo
1597
0644
edit
dl
rm
setup.py
421
0644
edit
dl
rm
setup.pyc
548
0644
edit
dl
rm
setup.pyo
548
0644
edit
dl
rm
suff.py
621
0755
edit
dl
rm
suff.pyc
904
0644
edit
dl
rm
suff.pyo
904
0644
edit
dl
rm
svneol.py
2930
0755
edit
dl
rm
svneol.pyc
2904
0644
edit
dl
rm
svneol.pyo
2825
0644
edit
dl
rm
texcheck.py
9256
0644
edit
dl
rm
texcheck.pyc
8376
0644
edit
dl
rm
texcheck.pyo
8376
0644
edit
dl
rm
texi2html.py
69825
0755
edit
dl
rm
texi2html.pyc
83323
0644
edit
dl
rm
texi2html.pyo
83323
0644
edit
dl
rm
treesync.py
5783
0755
edit
dl
rm
treesync.pyc
5990
0644
edit
dl
rm
treesync.pyo
5990
0644
edit
dl
rm
untabify.py
1215
0755
edit
dl
rm
untabify.pyc
1583
0644
edit
dl
rm
untabify.pyo
1583
0644
edit
dl
rm
which.py
1630
0755
edit
dl
rm
which.pyc
1632
0644
edit
dl
rm
which.pyo
1632
0644
edit
dl
rm
win_add2path.py
1620
0644
edit
dl
rm
win_add2path.pyc
2069
0644
edit
dl
rm
win_add2path.pyo
2069
0644
edit
dl
rm
xxci.py
2797
0755
edit
dl
rm
xxci.pyc
4017
0644
edit
dl
rm
xxci.pyo
4017
0644
edit
dl
rm
Edit:
/usr/lib64/python2.7/Tools/scripts/pindent.py
(17170B)
#! /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
Save
cmd:
run