in fluent/migrate/transforms.py [0:0]
def __call__(self, ctx):
# For each specified replacement, find all indices of the original
# placeable in the source translation. If missing, the list of indices
# will be empty.
value = self.element.value
if self.normalize_printf:
value = normalize_printf(value)
key_indices = {
key: [m.start() for m in re.finditer(re.escape(key), value)]
for key in self.replacements.keys()
}
# Build a dict of indices to replacement keys.
keys_indexed = {}
for key, indices in key_indices.items():
for index in indices:
keys_indexed[index] = key
# Order the replacements by the position of the original placeable in
# the translation.
replacements = (
(key, ctx.evaluate(self.replacements[key]))
for index, key in sorted(keys_indexed.items(), key=lambda x: x[0])
)
# A list of PatternElements built from the legacy translation and the
# FTL replacements. It may contain empty or adjacent TextElements.
elements = []
tail = value
# Convert original placeables and text into FTL Nodes. For each
# original placeable the translation will be partitioned around it and
# the text before it will be converted into an `FTL.TextElement` and
# the placeable will be replaced with its replacement.
for key, node in replacements:
before, key, tail = tail.partition(key)
elements.append(FTL.TextElement(before))
elements.append(node)
# Don't forget about the tail after the loop ends.
elements.append(FTL.TextElement(tail))
return Transform.pattern_of(*elements)