Package translate :: Package misc :: Module multistring
[hide private]
[frames] | no frames]

Source Code for Module translate.misc.multistring

 1  #!/usr/bin/env python 
 2  # -*- coding: utf-8 -*- 
 3  # 
 4  # Copyright 2006 Zuza Software Foundation 
 5  # 
 6  # This file is part of translate. 
 7  # 
 8  # translate is free software; you can redistribute it and/or modify 
 9  # it under the terms of the GNU General Public License as published by 
10  # the Free Software Foundation; either version 2 of the License, or 
11  # (at your option) any later version. 
12  # 
13  # translate is distributed in the hope that it will be useful, 
14  # but WITHOUT ANY WARRANTY; without even the implied warranty of 
15  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 
16  # GNU General Public License for more details. 
17  # 
18  # You should have received a copy of the GNU General Public License 
19  # along with translate; if not, write to the Free Software 
20  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
21   
22  """Supports a hybrid Unicode string that can also have a list of alternate strings in the strings attribute""" 
23   
24  from translate.misc import autoencode 
25   
26   
27 -class multistring(autoencode.autoencode):
28
29 - def __new__(newtype, string=u"", encoding=None, errors=None):
30 if isinstance(string, list): 31 if not string: 32 raise ValueError("multistring must contain at least one string") 33 mainstring = string[0] 34 newstring = multistring.__new__(newtype, string[0], encoding, errors) 35 newstring.strings = [newstring] + [autoencode.autoencode.__new__(autoencode.autoencode, altstring, encoding, errors) for altstring in string[1:]] 36 else: 37 newstring = autoencode.autoencode.__new__(newtype, string, encoding, errors) 38 newstring.strings = [newstring] 39 return newstring
40
41 - def __init__(self, *args, **kwargs):
42 super(multistring, self).__init__() 43 if not hasattr(self, "strings"): 44 self.strings = []
45
46 - def __cmp__(self, otherstring):
47 if isinstance(otherstring, multistring): 48 parentcompare = cmp(autoencode.autoencode(self), otherstring) 49 if parentcompare: 50 return parentcompare 51 else: 52 return cmp(self.strings[1:], otherstring.strings[1:]) 53 elif isinstance(otherstring, autoencode.autoencode): 54 return cmp(autoencode.autoencode(self), otherstring) 55 elif isinstance(otherstring, unicode): 56 return cmp(unicode(self), otherstring) 57 elif isinstance(otherstring, str): 58 return cmp(str(self), otherstring) 59 elif isinstance(otherstring, list) and otherstring: 60 return cmp(self, multistring(otherstring)) 61 else: 62 return cmp(type(self), type(otherstring))
63
64 - def __ne__(self, otherstring):
65 return self.__cmp__(otherstring) != 0
66
67 - def __eq__(self, otherstring):
68 return self.__cmp__(otherstring) == 0
69
70 - def __repr__(self):
71 parts = [autoencode.autoencode.__repr__(self)] + [repr(a) for a in self.strings[1:]] 72 return "multistring([" + ",".join(parts) + "])"
73
74 - def replace(self, old, new, count=None):
75 if count is None: 76 newstr = multistring(super(multistring, self).replace(old, new), self.encoding) 77 else: 78 newstr = multistring(super(multistring, self).replace(old, new, count), self.encoding) 79 for s in self.strings[1:]: 80 if count is None: 81 newstr.strings.append(s.replace(old, new)) 82 else: 83 newstr.strings.append(s.replace(old, new, count)) 84 return newstr
85