aca310e5cc
New Features: In Tab-View mode, Ctrl-number will take the user to the numbered tab view. Modified files now show an '*' astrisk in the view title. Debugger framework can now support PHP debugging. Not important for python development, but at least that means the debugger framework is more generalized. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38852 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
112 lines
3.0 KiB
Python
112 lines
3.0 KiB
Python
#----------------------------------------------------------------------------
|
|
# Name: strutils.py
|
|
# Purpose: String Utilities
|
|
#
|
|
# Author: Morgan Hua
|
|
#
|
|
# Created: 11/3/05
|
|
# CVS-ID: $Id$
|
|
# Copyright: (c) 2005 ActiveGrid, Inc.
|
|
# License: wxWindows License
|
|
#----------------------------------------------------------------------------
|
|
|
|
|
|
def caseInsensitiveCompare(s1, s2):
|
|
""" Method used by sort() to sort values in case insensitive order """
|
|
s1L = s1.lower()
|
|
s2L = s2.lower()
|
|
if s1L == s2L:
|
|
return 0
|
|
elif s1L < s2L:
|
|
return -1
|
|
else:
|
|
return 1
|
|
|
|
def multiSplit(stringList, tokenList=[" "]):
|
|
"""Splits strings in stringList by tokens, returns list of string."""
|
|
if not stringList: return []
|
|
if isinstance(tokenList, basestring):
|
|
tokenList = [tokenList]
|
|
if isinstance(stringList, basestring):
|
|
stringList = [stringList]
|
|
rtnList = stringList
|
|
for token in tokenList:
|
|
rtnList = rtnList[:]
|
|
for string in rtnList:
|
|
if string.find(token) > -1:
|
|
rtnList.remove(string)
|
|
names = string.split(token)
|
|
for name in names:
|
|
name = name.strip()
|
|
if name:
|
|
rtnList.append(name)
|
|
return rtnList
|
|
|
|
QUOTES = ("\"", "'")
|
|
|
|
def _findArgStart(argStr):
|
|
i = -1
|
|
for c in argStr:
|
|
i += 1
|
|
if (c == " "):
|
|
continue
|
|
elif (c == ","):
|
|
continue
|
|
return i
|
|
return None
|
|
|
|
def _findArgEnd(argStr):
|
|
quotedArg = True
|
|
argEndChar = argStr[0]
|
|
if (not argEndChar in QUOTES):
|
|
argEndChar = ","
|
|
quotedArg = False
|
|
i = -1
|
|
firstChar = True
|
|
for c in argStr:
|
|
i+= 1
|
|
if (firstChar):
|
|
firstChar = False
|
|
if (quotedArg):
|
|
continue
|
|
if (c == argEndChar):
|
|
if (quotedArg):
|
|
return min(i+1, len(argStr))
|
|
else:
|
|
return i
|
|
return i
|
|
|
|
def parseArgs(argStr, stripQuotes=False):
|
|
"""
|
|
Given a str representation of method arguments, returns list arguments (as
|
|
strings).
|
|
|
|
Input: "('[a,b]', 'c', 1)" -> Output: ["'[a,b]'", "'c'", "1"].
|
|
|
|
If stripQuotes, removes quotes from quoted arg.
|
|
"""
|
|
if (argStr.startswith("(")):
|
|
argStr = argStr[1:]
|
|
if (argStr.endswith(")")):
|
|
argStr = argStr[:-1]
|
|
else:
|
|
raise AssertionError("Expected argStr to end with ')'")
|
|
|
|
rtn = []
|
|
argsStr = argStr.strip()
|
|
while (True):
|
|
startIndex = _findArgStart(argStr)
|
|
if (startIndex == None):
|
|
break
|
|
argStr = argStr[startIndex:]
|
|
endIndex = _findArgEnd(argStr)
|
|
if (endIndex == len(argStr) - 1):
|
|
rtn.append(argStr.strip())
|
|
break
|
|
t = argStr[:endIndex].strip()
|
|
if (stripQuotes and t[0] in QUOTES and t[-1] in QUOTES):
|
|
t = t[1:-1]
|
|
rtn.append(t)
|
|
argStr = argStr[endIndex:]
|
|
return rtn
|