X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/02b800ce7c2bb1c1f08075f22be2e7412124b47f..fae803f27be8ae1c4fe8f8775b333cc0fc80bdee:/wxPython/samples/ide/activegrid/util/strutils.py diff --git a/wxPython/samples/ide/activegrid/util/strutils.py b/wxPython/samples/ide/activegrid/util/strutils.py index b79bd2a474..f70d03ee54 100644 --- a/wxPython/samples/ide/activegrid/util/strutils.py +++ b/wxPython/samples/ide/activegrid/util/strutils.py @@ -21,3 +21,91 @@ def caseInsensitiveCompare(s1, s2): 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