wxWidgets/wxPython/samples/ide/activegrid/util/strutils.py
Robin Dunn aca310e5cc DocView and ActiveGrid IDE updates from Morgan Hua:
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
2006-04-20 06:26:03 +00:00

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