def _replace_one(self, replacement, rw_fixup, matched, env): elems_and_matches = islice( zip_longest( self._substitutions(replacement, env), matched, fillvalue=default(lambda: matched[-1]) ), len(replacement) ) return [ rw_fixup( elem, force_source_from(one_matched) ) for (elem, one_matched) in elems_and_matches ]
def source(self): return force_source_from(self.letters[0])