"""This module adds a backwards-compatibility to the older wstring module. It is intended for use by 4Suite only; do not use it in your own code.""" import string import utf8_iso _trans = string.maketrans("_:","- ") def _normalize(codeset): codeset = string.lower(codeset) codeset = string.translate(codeset, _trans) return codeset class _Wstringmod: "Emulator for old wstring module" def __init__(self): self.aliases = {'iso-ir-100' : 'iso-8859-1', 'cp819' : 'iso-8859-1', 'l1' : 'iso-8859-1', 'latin1' : 'iso-8859-1', 'ibm819' : 'iso-8859-1', } self.encodings = {'utf-8' : 0} for i in range(1, len(utf8_iso.code_to_uni)): if utf8_iso.code_to_uni[i]: self.encodings['iso-8859-%d' % i] = i def install_alias(self, newname, oldname): self.aliases[_normalize(newname)] = _normalize(oldname) def from_utf8(self, utf8): return UTF8String(utf8) def decode(self, encoding, string): return UTF8String(string, encoding) def chr(self, ch): return UTF8String(utf8_iso.utf8chr(ch)) wstring = _Wstringmod() class UTF8String: "Emulator for the wstring type" def __init__(self, string, encoding='utf-8'): self.data = string enc = _normalize(encoding) codeset = wstring.encodings.get(enc) if codeset is None: if wstring.aliases.has_key(enc): codeset = wstring.encoding.get(wstring.aliases[enc]) if codeset is None: raise utf8_iso.ConvertError('Unknown encoding: %s' % encoding) self.codeset = codeset def utf8(self): if self.codeset == 0: return self.data output = map(lambda char, codeset=self.codeset: utf8_iso.code_to_utf8(codeset, char), self.data) return string.join(output, '') def encode(self, encoding): enc = _normalize(encoding) codeset = wstring.encodings.get(enc) if codeset is None: if wstring.aliases.has_key(enc): codeset = wstring.encoding.get(wstring.aliases[enc]) if codeset is None: raise utf8_iso.ConvertError('Unknown encoding: %s' % encoding) if codeset == 0: return self.data input = self.data output = [] while input: for i in range(len(input)): if ord(input[i])>128: break if i == 0: char, input = utf8_iso.utf8_to_code(codeset, input) output.append(char) else: output.extend(list(input[:i])) input = input[i:] return string.join(output, '')