Reproduction
The regex matcher accepts Unicode case variants such as dotless i, while replacement lookup uses a different casefold equivalence. Some matched words remain unchanged. Separately, distinct regex literals Straße and STRASSE collide in the casefold lookup and use the same replacement. Three failures and two controls reproduce this in the real pronunciation helper.
Expected behavior
Associate each literal regex alternative with its replacement. Preserve longest-key priority and last-entry precedence for equal-length case variants, including language-specific overrides.
The reproduction uses local files/localhost HTTP only; no model downloads or external services are involved. A focused patch and regression tests are prepared against current main.
Reproduction
The regex matcher accepts Unicode case variants such as dotless i, while replacement lookup uses a different casefold equivalence. Some matched words remain unchanged. Separately, distinct regex literals
StraßeandSTRASSEcollide in the casefold lookup and use the same replacement. Three failures and two controls reproduce this in the real pronunciation helper.Expected behavior
Associate each literal regex alternative with its replacement. Preserve longest-key priority and last-entry precedence for equal-length case variants, including language-specific overrides.
The reproduction uses local files/localhost HTTP only; no model downloads or external services are involved. A focused patch and regression tests are prepared against current main.