diff --git a/head/offlineimap.py b/head/offlineimap.py index 5656f31..5f86347 100644 --- a/head/offlineimap.py +++ b/head/offlineimap.py @@ -28,28 +28,6 @@ passwd = getpass.getpass('Password: ') imapobj = imaplib.IMAP4_SSL(host) imapobj.login(user, passwd) -def imapsplit(string): - workstr = string - retval = [] - while len(workstr): - if re.search('^\s', workstr): - workstr = re.search('^\s(.*)$', workstr).group(1) - elif workstr[0] == '(': - parenlist = re.search('^(\([^)]*\))', workstr).group(1) - workstr = workstr[len(parenlist):] - retval.append(parenlist) - elif workstr[0] == '"': - quotelist = re.search('^("[^"]*")', workstr).group(1) - workstr = workstr[len(quotelist):] - retval.append(quotelist) - else: - unq = re.search('^(\S+)', workstr).group(1) - workstr = workstr[len(unq):] - retval.append(unq) - return retval - - - def parselistresult(liststr): return re.match('^(\(.*\))\s+(\".*\")\s+(\".*\")$', liststr).groups() diff --git a/head/offlineimap/imaputil.py b/head/offlineimap/imaputil.py new file mode 100644 index 0000000..5c24e2a --- /dev/null +++ b/head/offlineimap/imaputil.py @@ -0,0 +1,61 @@ +# IMAP utility module +# Copyright (C) 2002 John Goerzen +# +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +import re + +def dequote(string): + """Takes a string which may or may not be quoted and returns it, unquoted. + This function does NOT consider parenthised lists to be quoted. + """ + + if not (string[0] == '"' and string[-1] == '"'): + return string + string = string[1:-1] # Strip off quotes. + string = string.replace('\\"', '"') + string = string.replace('\\\\', '\\') + return string + +def imapsplit(string): + """Takes a string from an IMAP conversation and returns a list containing + its components. One example string is: + + (\\HasNoChildren) "." "INBOX.Sent" + + The result from parsing this will be: + + ['(\\HasNoChildren)', '"."', '"INBOX.Sent"']""" + + workstr = string + retval = [] + while len(workstr): + if re.search('^\s', workstr): + workstr = re.search('^\s(.*)$', workstr).group(1) + elif workstr[0] == '(': + parenlist = re.search('^(\([^)]*\))', workstr).group(1) + workstr = workstr[len(parenlist):] + retval.append(parenlist) + elif workstr[0] == '"': + quotelist = re.search('^("[^"]*")', workstr).group(1) + workstr = workstr[len(quotelist):] + retval.append(quotelist) + else: + unq = re.search('^(\S+)', workstr).group(1) + workstr = workstr[len(unq):] + retval.append(unq) + return retval +