--- /dev/null
+# Copyright 2000 by Jeffrey Chang. All rights reserved.
+# This code is part of the Biopython distribution and governed by its
+# license. Please see the LICENSE file that should have been included
+# as part of this package.
+
+"""This provides useful general functions for working with strings (DEPRECATED).
+
+This module and its C code equivalent are considered to be deprecated, and
+are likely to be removed in a future release of Biopython. Please get in
+touch via the mailing list if this will affect you.
+
+Functions:
+splitany Split a string using many delimiters.
+find_anychar Find one of a list of characters in a string.
+rfind_anychar Find one of a list of characters in a string, from end to start.
+
+"""
+import warnings
+warnings.warn("Bio.stringfns and its C code equivalent Bio.cstringfns are" \
+ +" deprecated, and will be removed in a future release of"\
+ +" Biopython. If you want to continue to use this code,"\
+ +" please get in contact with the Biopython developers via"\
+ +" the mailing lists to avoid its permanent removal from"\
+ +" Biopython.", \
+ DeprecationWarning)
+
+def splitany(s, sep=" \011\012\013\014\015", maxsplit=None, negate=0):
+ """splitany(s [,sep [,maxsplit [,negate]]]) -> list of strings
+
+ Split a string. Similar to string.split, except that this considers
+ any one of the characters in sep to be a delimiter. If negate is
+ true, then everything but sep will be a separator.
+
+ """
+ strlist = []
+ prev = 0
+ for i in range(len(s)):
+ if maxsplit is not None and len(strlist) >= maxsplit:
+ break
+ if (s[i] in sep) == (not negate):
+ strlist.append(s[prev:i])
+ prev = i+1
+ strlist.append(s[prev:])
+ return strlist
+
+def find_anychar(string, chars, index=None, negate=0):
+ """find_anychar(string, chars[, index]) -> index of a character or -1
+
+ Find a character in string. chars is a list of characters to look
+ for. Return the index of the first occurrence of any of the
+ characters, or -1 if not found. index is the index where the
+ search should start. By default, I search from the beginning of
+ the string.
+
+ """
+ if index is None:
+ index = 0
+ while index < len(string) and \
+ ((not negate and string[index] not in chars) or
+ (negate and string[index] in chars)):
+ index += 1
+ if index == len(string):
+ return -1
+ return index
+
+def rfind_anychar(string, chars, index=None, negate=0):
+ """rfind_anychar(string, chars[, index]) -> index of a character or -1
+
+ Find a character in string, looking from the end to the start.
+ chars is a list of characters to look for. Return the index of
+ the first occurrence of any of the characters, or -1 if not found.
+ index is the index where the search should start. By default, I
+ search from the end of the string.
+
+ """
+ if index is None:
+ index = len(string)-1
+ while index >= 0 and \
+ ((not negate and string[index] not in chars) or
+ (negate and string[index] in chars)):
+ index -= 1
+ # If not found, index will already be -1.
+ return index
+
+# Try and load C implementations of functions. If I can't,
+# then just ignore and use the pure python implementations.
+try:
+ from cstringfns import *
+except ImportError:
+ pass