99 lines
2.7 KiB
Python
Executable File
99 lines
2.7 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
import sys
|
|
import os
|
|
import os.path
|
|
import optparse
|
|
import re
|
|
|
|
|
|
cppPattern = re.compile( r".*\.(h|cpp)$" )
|
|
refactorPattern = re.compile( r"^\s*(?P<orig>[^\s]*)\s*-->\s*(?P<replace>[^\s]*)\s*$" )
|
|
|
|
|
|
class Refactor:
|
|
|
|
def __init__ ( self ):
|
|
self._substitutions = []
|
|
return
|
|
|
|
def _addRefactor ( self, original, replacement ):
|
|
self._substitutions.append( ( re.compile(original), replacement ) )
|
|
return
|
|
|
|
def doLineRefactor ( self, line ):
|
|
pline = line
|
|
for (original,replacement) in self._substitutions:
|
|
pline = original.sub( replacement, pline )
|
|
return pline
|
|
|
|
def doFileRefactor ( self, file ):
|
|
oldFile = file + '.noRefactor'
|
|
if not os.path.isfile(oldFile):
|
|
os.rename( file, oldFile )
|
|
|
|
fdold = open( oldFile, 'r' )
|
|
fdnew = open( file , 'w' )
|
|
|
|
while True:
|
|
oldline = fdold.readline()
|
|
if oldline == '': break
|
|
|
|
newline = self.doLineRefactor( oldline )
|
|
fdnew.write( newline )
|
|
|
|
fdnew.close()
|
|
fdold.close()
|
|
return
|
|
|
|
def loadPatterns ( self, file ):
|
|
fd = open( file, "r" )
|
|
if fd:
|
|
while True:
|
|
line = fd.readline()
|
|
if line == "" : break
|
|
if line[0] == '#' : continue
|
|
if line[0] == '\n': continue
|
|
|
|
m = refactorPattern.match( line )
|
|
if m:
|
|
print "o:\"%s\" r:\"%s\"" % ( m.group("orig"), m.group("replace") )
|
|
self._addRefactor( m.group("orig"), m.group("replace") )
|
|
fd.close ()
|
|
return
|
|
|
|
|
|
if __name__ == '__main__' :
|
|
|
|
parser = optparse.OptionParser ()
|
|
parser.add_option( '-t', '--tree' , action='store' , type='string', dest='tree' )
|
|
parser.add_option( '-p', '--patterns', action='store' , type='string', dest='patterns' )
|
|
parser.add_option( '-f', '--file' , action='append', type='string', dest='files' )
|
|
|
|
(options, args) = parser.parse_args()
|
|
|
|
if not options.patterns and not options.files: sys.exit( 1 )
|
|
|
|
refactor = Refactor()
|
|
refactor.loadPatterns( options.patterns )
|
|
|
|
rfiles = []
|
|
if options.patterns:
|
|
if options.tree:
|
|
for (root,dirs,tfiles) in os.walk(options.tree):
|
|
if 'CVS' in dirs: dirs.remove( 'CVS' )
|
|
if '.svn' in dirs: dirs.remove( '.svn' )
|
|
for file in tfiles:
|
|
if cppPattern.match( file ):
|
|
rfiles.append( os.path.join(root,file) )
|
|
|
|
allFiles = []
|
|
if options.files: allFiles += options.files
|
|
allFiles += rfiles
|
|
|
|
for file in allFiles:
|
|
print file
|
|
refactor.doFileRefactor( file )
|
|
|
|
sys.exit( 0 )
|