def multistring_to_rich(cls, mulstring): """Convert a multistring to a list of "rich" string trees: >>> target = multistring([u'foo', u'bar', u'baz']) >>> TranslationUnit.multistring_to_rich(target) [<StringElem([<StringElem([u'foo'])>])>, <StringElem([<StringElem([u'bar'])>])>, <StringElem([<StringElem([u'baz'])>])>] """ if isinstance(mulstring, multistring): return [rich_parse(s, cls.rich_parsers) for s in mulstring.strings] return [rich_parse(mulstring, cls.rich_parsers)]
def test_rich_set(self): """Basic test for converting from multistrings to StringElem trees.""" elems = [ rich_parse(u'Tëst <x>string</x>', general.parsers), rich_parse(u'Another test string.', general.parsers), ] unit = self.UnitClass(multistring([u'a', u'b'])) unit.rich_target = elems if unit.hasplural(): assert unit.target.strings[0] == u'Tëst <x>string</x>' assert unit.target.strings[1] == u'Another test string.' else: assert unit.target == u'Tëst <x>string</x>'
def test_rich_set(self): """Basic test for converting from multistrings to StringElem trees.""" elems = [ rich_parse("Tëst <x>string</x>", general.parsers), rich_parse("Another test string.", general.parsers), ] unit = self.UnitClass(multistring(["a", "b"])) unit.rich_target = elems if unit.hasplural(): assert unit.target.strings[0] == "Tëst <x>string</x>" assert unit.target.strings[1] == "Another test string." else: assert unit.target == "Tëst <x>string</x>"
def convertunit(self, unit, prefix): if self.ignorefunc: if self.ignorefunc(unit): return unit if prefix.find("@hash_placeholder@") != -1: if unit.getlocations(): hashable = unit.getlocations()[0] else: hashable = unit.source prefix = prefix.replace( "@hash_placeholder@", md5(hashable.encode('utf-8')).hexdigest()[:self.hash_len]) if unit.istranslated(): rich_string = unit.rich_target else: rich_string = unit.rich_source if not isinstance(rich_string, StringElem): rich_string = [ rich_parse(string, podebug_parsers) for string in rich_string ] if self.rewritefunc: rewritten = [self.rewritefunc(string) for string in rich_string] if rewritten: rich_string = rewritten unit.rich_target = add_prefix(prefix, rich_string) return unit
def transform_characters_preserving_placeholders(self, s, transform): rich_string = rich_parse(s, self.PRESERVE_PLACEABLE_PARSERS) string_elements = rich_string.depth_first(filter=lambda e: e.isleaf()) transformed = [] for element in string_elements: if element.istranslatable: for character in str(element): transformed.append(transform(character)) else: transformed.append(element.sub[0]) return u''.join(transformed)
def convertunit(self, unit, prefix): if self.ignorefunc: if self.ignorefunc(unit): return unit if prefix.find("@hash_placeholder@") != -1: if unit.getlocations(): hashable = unit.getlocations()[0] else: hashable = unit.source prefix = prefix.replace("@hash_placeholder@", hash.md5_f(hashable).hexdigest()[:self.hash_len]) rich_source = unit.rich_source if not isinstance(rich_source, StringElem): rich_source = [rich_parse(string, podebug_parsers) for string in rich_source] if self.rewritefunc: rewritten = [self.rewritefunc(string) for string in rich_source] if rewritten: unit.rich_target = rewritten elif not unit.istranslated(): unit.rich_target = unit.rich_source unit.rich_target = add_prefix(prefix, unit.rich_target) return unit