-#----------------------------------------------------------------------------
-# 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