diff options
Diffstat (limited to 'lib/python2.7/site-packages/wx-3.0-msw/wx/py/magic.py')
-rw-r--r-- | lib/python2.7/site-packages/wx-3.0-msw/wx/py/magic.py | 92 |
1 files changed, 92 insertions, 0 deletions
diff --git a/lib/python2.7/site-packages/wx-3.0-msw/wx/py/magic.py b/lib/python2.7/site-packages/wx-3.0-msw/wx/py/magic.py new file mode 100644 index 0000000..9625f87 --- /dev/null +++ b/lib/python2.7/site-packages/wx-3.0-msw/wx/py/magic.py @@ -0,0 +1,92 @@ +"""magic.py is a utility that allows a simple line from the interpreter +be translated from a more bash-like form to a python form. +For instance, 'plot a' is transformed to 'plot(a)' +Special exceptions are made for predefined ls,cd, and pwd functions""" + +__author__ = "David N. Mashburn <david.n.mashburn@gmail.com>" +# created 07/01/2009 + +import keyword + +from parse import testForContinuations + +aliasDict = {} + +#DNM +# TODO : Still Refining this... seems to be ok for now... still finding gotchas, though! +# TODO : Multi-line strings seem to be correctly broken into commands by PyCrust(PySlices) +# TODO : Is there a better version of ls, cd, pwd, etc that could be used? +def magicSingle(command): + if command=='': # Pass if command is blank + return command + + first_space=command.find(' ') + + if command[0]==' ': # Pass if command begins with a space + pass + elif command[0]=='?': # Do help if starts with ? + command='help('+command[1:]+')' + elif command[0]=='!': # Use os.system if starts with ! + command='sx("'+command[1:]+'")' + elif command in ('ls','pwd'): # automatically use ls and pwd with no arguments + command=command+'()' + elif command[:3] in ('ls ','cd '): # when using the 'ls ' or 'cd ' constructs, fill in both parentheses and quotes + command=command[:2]+'("'+command[3:]+'")' + elif command[:6] == 'alias ': + c = command[6:].lstrip().split(' ') + if len(c)<2: + #print 'Not enough arguments for alias!' + command = '' + else: + n,v = c[0],' '.join(c[1:]) + aliasDict[n]=v + command = '' + elif command.split(' ')[0] in aliasDict.keys(): + c = command.split(' ') + if len(c)<2: + command = 'sx("'+aliasDict[c[0]]+'")' + else: + command = 'sx("'+aliasDict[c[0]]+' '+' '.join(c[1:])+'")' + elif first_space!=-1: # if there is at least one space, add parentheses at beginning and end + cmds=command.split(' ') + if len(cmds)>1: + wd1=cmds[0] + wd2=cmds[1] + i=1 + while wd2=='': + i+=1 + if len(cmds)==i: + break + wd2=cmds[i] + if wd2=='': + return command + if (wd1[0].isalpha() or wd1[0]=='_') and (wd2[0].isalnum() or (wd2[0] in """."'_""")) and not keyword.iskeyword(wd1) and not keyword.iskeyword(wd2): + if wd1.replace('.','').replace('_','').isalnum(): + command=wd1+'('+command[(first_space+1):]+')' # add parentheses where the first space was and at the end... hooray! + return command + +def magic(command): + continuations = testForContinuations(command) + + if len(continuations)==2: # Error case... + return command + elif len(continuations)==4: + stringContinuationList,indentationBlockList, \ + lineContinuationList,parentheticalContinuationList = continuations + + commandList=[] + firstLine = True + for i in command.split('\n'): + if firstLine: + commandList.append(magicSingle(i)) + elif stringContinuationList.pop(0)==False and \ + indentationBlockList.pop(0)==False and \ + lineContinuationList.pop(0)==False and \ + parentheticalContinuationList.pop(0)==False: + commandList.append(magicSingle(i)) # unless this is in a larger expression, use magic + else: + commandList.append(i) + + firstLine=False + + return '\n'.join(commandList) |