[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: NSString lowercaseString
From: |
Ivan Vučica |
Subject: |
Re: NSString lowercaseString |
Date: |
Tue, 31 Jul 2012 19:26:01 +0200 |
It works and transforms the umlaut correctly. Locale setting has no effect (not
that C locale should have effect on Foundation classes). Both uppercaseString
and lowercaseString for your input ("Töst") work correctly.
On 31. 7. 2012., at 19:02, "Sebastian Reitenbach"
<sebastia@l00-bugdead-prods.de> wrote:
> Hi,
>
> with OGo, I convert a UTF-8 string to lowercase, using [NSStrings
> lowercaseString]
>
> when there are Umlauts in the string, then GNUstep just omits the character.
> I've no idea, whether this is right or wrong actually.
>
> With the attached patch below to GSString it does not omit the character
> anymore.
>
>
> gcc -fgnu-runtime -fconstant-string-class=NSConstantString
> -I/usr/local/include -L/usr/local/lib -l gnustep-base lowercase.m -o lowercase
>
> cat lowercase.m
> #import <Foundation/Foundation.h>
>
>
> int main(int argc, char *argv[]) {
> NSLog(@"Lowercase: %@", [[NSString stringWithString:@"Töst"]
> lowercaseString]);
>
> }
>
>
>
> Does above running the program on a Mac output the ö or omit it from the
> string?
>
> does it change when running with LC_CTYPE="C" or LC_CTYPE='de_DE.UTF-8' ?
>
> I don't have a Mac, so cannot test myself, maybe also the approach used by
> OGo could be wrong.
> At least when reading the Apple docs, then there is nothing said about
> skipped characters,
> only that i.e. a ß may change to SS when i.e. using uppercaseString.
> Since they mentioned the ß in the documentation, I'd expect the
> lowercaseString to handle other Umlauts too, or is that just plain wrong
> assumption?
>
> if someone could hit me with a cluestick please ;)
>
> cheers,
> Sebastian
>
> the patch to not omit Umlauts.
> $OpenBSD$
> --- Source/GSString.m.orig Tue Jul 31 18:31:36 2012
> +++ Source/GSString.m Tue Jul 31 18:32:24 2012
> @@ -3699,6 +3700,8 @@ agree, create a new GSCInlineString otherwise.
> while (i-- > 0)
> {
> o->_contents.c[i] = tolower(_contents.c[i]);
> + if (o->_contents.c[i] == 0)
> + o->_contents.c[i] = _contents.c[i];
> }
> o->_flags.wide = 0;
> o->_flags.owned = 1; // Ignored on dealloc, but means we own buffer
>
> _______________________________________________
> Discuss-gnustep mailing list
> Discuss-gnustep@gnu.org
> https://lists.gnu.org/mailman/listinfo/discuss-gnustep