Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 01 Dec 2004 17:14:50 +0300
From:      Denis Antrushin <DAntrushin@mail.ru>
To:        Alexander Leidinger <Alexander@Leidinger.net>
Cc:        tode@bpanet.de
Subject:   Re: Bug in our ru_RU.KOI8-R locale (with patch)?
Message-ID:  <41ADD1DA.9000509@mail.ru>
In-Reply-To: <1101908414.41adc9be50c73@netchild.homeip.net>
References:  <1101908414.41adc9be50c73@netchild.homeip.net>

next in thread | previous in thread | raw e-mail | index | archive | help
Alexander Leidinger wrote:
> Hi,
> 
> I got a report that our ru_RU.KOI8-R locale seems to be broken. Attached
> is a test program (test.pl, tested with perl 5.8.2) and some test input
> (test.txt) which is supposed to show the problem. I can't read any
> cyrillic language, so I can't really confirm if the attached patch is the
> right fix.
First of all, test.txt is in CP1251 encoding, not KOI8-R ;-)
Second, patch is plain wrong -- it replaces KOI8-R character codes with
CP1251 ones.

> If you run the test program you should see something like this (strange
> looking text maybe because of the webmailer I use):
> ---snip---
> Match small (RegEx with i flag): 0
> Match small (RegEx without i flag): 8
> Match for normal (RegEx with i flag): 17
> Match for normal (RegEx without i flag): 9
> 
> Case - Check for '&#1103;&#1107;&#1112;&#1098;&#1096;&#1101;'
> lc() => &#1103;&#1107;&#1112;&#1098;&#1096;&#1101;
> uc() => &#1071;&#1075;&#1080;&#1066;&#1064;&#1069;
> lcfirst() => &#1103;&#1107;&#1112;&#1098;&#1096;&#1101;
> ucfirst() => &#1071;&#1107;&#1112;&#1098;&#1096;&#1101;
> 
> Case - Check for '&#1071;&#1107;&#1112;&#1098;&#1096;&#1101;'
> lc() => &#1103;&#1107;&#1112;&#1098;&#1096;&#1101;
> uc() => &#1071;&#1075;&#1080;&#1066;&#1064;&#1069;
> lcfirst() => &#1103;&#1107;&#1112;&#1098;&#1096;&#1101;
> ucfirst() => &#1071;&#1107;&#1112;&#1098;&#1096;&#1101;
> ---snip---
> 
> I'm told the "Case - Check" parts are correct with the patch, but not
> without it (lc() -> lower case the entire string; uc() -> upper case the
> entire string; lcfirst() -> lower case the first character; ...). Can
> someone please confirm this?
This is what test gives me (transliterated to ascii):

Case - Check for 'pushkin'
lc() => pushkin
uc() => PUSHKIN
lcfirst() => pushkin
ucfirst() => Pushkin

Case - Check for 'Pushkin'
lc() => pushkin
uc() => PUSHKIN
lcfirst() => pushkin
ucfirst() => Pushkin

It seems correct for me...


> If this is correct we've solved only a part of the problem. The other
> part seems to be related to LC_COLLATE. "Match small" with the i flag
> (case insensitive matching) shouldn't print 0 when "Match normal" with
> the i flag doesn't print 0. Any ideas how to solve this?
> 
> If the patch isn't correct we still have a bug somwhere (please CC
> perl@freebsd.org then). Why isn't perl able to do a case insensitive
> match in the ru_RU.KOI8-R locale?
> 
> BTW.: this affects 4.x (problem noticed here), 5.x and -current (I've
> tested the patch here).
> 
> Bye,
> Alexander.
> 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?41ADD1DA.9000509>