[Pydev-cvs] org.python.pydev/PySrc/ThirdParty/brm/bike/transformer undo.py,NONE,1.1 save.py,NONE,1.1
Brought to you by:
fabioz
From: Fabio Z. <fa...@us...> - 2004-09-14 17:42:27
|
Update of /cvsroot/pydev/org.python.pydev/PySrc/ThirdParty/brm/bike/transformer In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9579/PySrc/ThirdParty/brm/bike/transformer Added Files: undo.py save.py WordRewriter.py __init__.py Log Message: Code completion improvements. Starting refactoring integration with bicycle repair man. --- NEW FILE: __init__.py --- """ Package containing modules which transform the internal representation of the sourcecode. """ --- NEW FILE: WordRewriter.py --- from bike.parsing.load import getSourceNode from bike.transformer.undo import getUndoStack from bike.transformer.save import queueFileToSave import re # This class maintains a set of changed lines to the original source # nodes. This is important because the act of changing a line messes # up the coordinates on which renames are done. # Commit writes the changes back to the source nodes class WordRewriter: def __init__(self): self.modifiedsrc = {} def rewriteString(self, srcnode, lineno, colno, newname): filename = srcnode.filename if not self.modifiedsrc.has_key(filename): getUndoStack().addSource(filename,srcnode.getSource()) self.modifiedsrc[filename] = {} if not self.modifiedsrc[filename].has_key(lineno): line = srcnode.getLines()[lineno-1] self.modifiedsrc[filename][lineno] = self._lineToDict(line) self.modifiedsrc[filename][lineno][colno] = newname # writes all the changes back to the src nodes def commit(self): for filename in self.modifiedsrc.keys(): srcnode = getSourceNode(filename) for lineno in self.modifiedsrc[filename]: lines = srcnode.getLines() lines[lineno-1] = self._dictToLine(self.modifiedsrc[filename][lineno]) queueFileToSave(filename,"".join(srcnode.getLines())) # this function creates a dictionary with each word referenced by # its column position in the original line def _lineToDict(self, line): words = re.split("(\w+)", line) h = {};i = 0 for word in words: h[i] = word i+=len(word) return h def _dictToLine(self, d): cols = d.keys() cols.sort() return "".join([d[colno]for colno in cols]) --- NEW FILE: save.py --- from bike import log outputqueue = {} def getQueuedFile(filename): try: return outputqueue[filename] except: pass #print "HERE!" def resetOutputQueue(): global outputqueue outputqueue = {} def queueFileToSave(filename,src): outputqueue[filename] = src from bike.parsing.load import getSourceNode getSourceNode(filename).resetWithSource(src) def save(): from bike.transformer.undo import getUndoStack global outputqueue savedFiles = [] for filename,src in outputqueue.iteritems(): print >> log.progress, "Writing:",filename f = file(filename, "w+") f.write(outputqueue[filename]) f.close() savedFiles.append(filename) outputqueue = {} #print "stack is "+ str(getUndoStack().stack) getUndoStack().commitUndoFrame() return savedFiles --- NEW FILE: undo.py --- from bike import log from bike.transformer.save import queueFileToSave _undoStack = None def getUndoStack(forceNewStack = 0): global _undoStack if _undoStack is None or forceNewStack: _undoStack = UndoStack() return _undoStack class UndoStackEmptyException: pass class UndoStack(object): def __init__(self): self.stack = [] self.stack.append({}) self.frame = self.stack[-1] self.setUndoBufferSize(10) def setUndoBufferSize(self, undoBufferSize): self.undoBufferSize = undoBufferSize def addSource(self, filename, src): if filename not in self.frame: self.frame[filename] = src def commitUndoFrame(self): #restrict size of buffer while len(self.stack) > self.undoBufferSize: #print "clipping undo stack" del self.stack[0] if len(self.frame) != 0: #print "commitUndoFrame" self.stack.append({}) self.frame = self.stack[-1] def undo(self, **opts): #print "undo called",self.stack if len(self.stack) < 2: raise UndoStackEmptyException() undoframe = self.stack[-2] #print "undoframe is",undoframe for filename,src in undoframe.iteritems(): print >>log.progress, "Undoing:",filename queueFileToSave(filename,src) self.stack = self.stack[:-2] self.stack.append({}) self.frame = self.stack[-1] |