On Sat, 2026-10-17 at 23:52 -0400, shihao zhong wrote:
> Hi,
>
> This is the first low item from my list in [1]. It has the same cause
> as
> the EUC_* report in [2], and 43a948b7b25 did not fix it.
Thank you for the report!
> The attached patch also counts a character as cased when towupper()
> or
> towlower() changes it.
When reading your patch, I wondered why we couldn't just do:
towupper_l(wc) != wc || towlower_l(wc) != wc
and the reason is that 00DF is a case-varying character because
towlower_l(1E9E) == 00DF, but the above test would return false. Your
patch correctly counts it as case-varying because iswlower_l(00DF) is
true.
It's a bit fragile in the sense that we don't have a clear reason for
relying on that set of tests, but it's the best we can do, so I agree
with your change and plan to commit it soon.
ICU and the builtin provider are more precise because they are able to
check for the Cased property directly.
Regards,
Jeff Davis