from itertools import groupby from .exceptions import WrongLengthException, UnicodeException, \ EmptyStringError def translation(first, second): """Create an index of mapped letters (zip to dict).""" if len(first) != len(second): raise WrongLengthException('The lists are not of the same length!') return dict(zip(first, second)) def squeeze(word): """Squeeze the given sequence by dropping consecutive duplicates.""" return ''.join(x[0] for x in groupby(word)) def check_str(word): """Throw exception at non-string input.""" if not isinstance(word, str): raise UnicodeException('Expected a unicode string!') def check_empty(word): """Throw exception at empty string input.""" if not len(word): raise EmptyStringError('The given string is empty.') class LazyString(str): def get(self, idx, dist=None): if not self: return None if idx < 0 or idx >= len(self): return None if dist: if idx + dist > len(self): return None return self[idx:idx+dist] return self[idx] def startswith(word, matchwith): return all(map(lambda x: x[0] == x[1], zip(word, matchwith))) def endswith(word, matchwith): return all(map(lambda x: x[0] == x[1], zip(word[::-1], matchwith[::-1]))) def isvowel(c): return c and c.upper() in {'A', 'E', 'I', 'O', 'U', 'Y'} def isslavogermanic(s): if not s: return False s = s.upper() return "W" in s or "K" in s or "CZ" in s or "WITZ" in s