mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-30 08:21:25 +00:00
Various unicode fixes made.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@13371 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
e32b1545f3
commit
5053fda75a
4 changed files with 102 additions and 58 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
2002-04-06 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
||||||
|
* Source/NSString.m: Fix error in unicode BOM handling
|
||||||
|
* Source/GSString.m: Fix error in length of unicode data produced.
|
||||||
|
* Tools/cvtenc.m: Made easy to use and added instructions.
|
||||||
|
|
||||||
Sat Apr 6 02:42:43 2002 Nicola Pero <n.pero@mi.flashnet.it>
|
Sat Apr 6 02:42:43 2002 Nicola Pero <n.pero@mi.flashnet.it>
|
||||||
|
|
||||||
* Source/NSUser.m (NSSearchPathForDirectoriesInDomains): Fixed
|
* Source/NSUser.m (NSSearchPathForDirectoriesInDomains): Fixed
|
||||||
|
|
|
@ -813,7 +813,7 @@ dataUsingEncoding_c(ivars self, NSStringEncoding encoding, BOOL flag)
|
||||||
{
|
{
|
||||||
return nil;
|
return nil;
|
||||||
}
|
}
|
||||||
return [NSDataClass dataWithBytesNoCopy: r length: l];
|
return [NSDataClass dataWithBytesNoCopy: r length: l * sizeof(unichar)];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -1166,12 +1166,12 @@ handle_printf_atsign (FILE *stream,
|
||||||
|
|
||||||
b = (unsigned char*)[data bytes];
|
b = (unsigned char*)[data bytes];
|
||||||
uptr = (unichar*)b;
|
uptr = (unichar*)b;
|
||||||
if (*uptr == 0xFFFE)
|
if (*uptr == byteOrderMark)
|
||||||
{
|
{
|
||||||
b = (unsigned char*)++uptr;
|
b = (unsigned char*)++uptr;
|
||||||
len -= sizeof(unichar);
|
len -= sizeof(unichar);
|
||||||
}
|
}
|
||||||
else if (*uptr == 0xFEFF)
|
else if (*uptr == byteOrderMarkSwapped)
|
||||||
{
|
{
|
||||||
b = (unsigned char*)++uptr;
|
b = (unsigned char*)++uptr;
|
||||||
len -= sizeof(unichar);
|
len -= sizeof(unichar);
|
||||||
|
@ -2376,7 +2376,7 @@ handle_printf_atsign (FILE *stream,
|
||||||
|
|
||||||
buff = (unichar*)NSZoneMalloc(NSDefaultMallocZone(),
|
buff = (unichar*)NSZoneMalloc(NSDefaultMallocZone(),
|
||||||
sizeof(unichar)*(len+1));
|
sizeof(unichar)*(len+1));
|
||||||
buff[0] = 0xFEFF;
|
buff[0] = byteOrderMark;
|
||||||
[self getCharacters: &buff[1]];
|
[self getCharacters: &buff[1]];
|
||||||
return [NSDataClass dataWithBytesNoCopy: buff
|
return [NSDataClass dataWithBytesNoCopy: buff
|
||||||
length: sizeof(unichar)*(len+1)];
|
length: sizeof(unichar)*(len+1)];
|
||||||
|
|
146
Tools/cvtenc.m
146
Tools/cvtenc.m
|
@ -38,6 +38,9 @@ main(int argc, char** argv, char **env)
|
||||||
NSProcessInfo *proc;
|
NSProcessInfo *proc;
|
||||||
NSArray *args;
|
NSArray *args;
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
BOOL found = NO;
|
||||||
|
NSString *n;
|
||||||
|
NSStringEncoding enc = 0;
|
||||||
|
|
||||||
#ifdef GS_PASS_ARGUMENTS
|
#ifdef GS_PASS_ARGUMENTS
|
||||||
[NSProcessInfo initializeWithArguments: argv count: argc environment: env];
|
[NSProcessInfo initializeWithArguments: argv count: argc environment: env];
|
||||||
|
@ -53,84 +56,119 @@ main(int argc, char** argv, char **env)
|
||||||
|
|
||||||
args = [proc arguments];
|
args = [proc arguments];
|
||||||
|
|
||||||
if ([args count] <= 1)
|
n = [[NSUserDefaults standardUserDefaults] stringForKey: @"Encoding"];
|
||||||
|
if (n == nil)
|
||||||
{
|
{
|
||||||
NSLog(@"No file names given to convert.");
|
enc = [NSString defaultCStringEncoding];
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
NSString *n;
|
NSStringEncoding *e;
|
||||||
NSStringEncoding enc = 0;
|
NSMutableString *names;
|
||||||
|
|
||||||
n = [[NSUserDefaults standardUserDefaults] stringForKey: @"Encoding"];
|
names = [NSMutableString stringWithCapacity: 1024];
|
||||||
if (n == nil)
|
e = [NSString availableStringEncodings];
|
||||||
|
while (*e != 0)
|
||||||
{
|
{
|
||||||
enc = [NSString defaultCStringEncoding];
|
NSString *name = [NSString localizedNameOfStringEncoding: *e];
|
||||||
|
|
||||||
|
[names appendFormat: @" %@\n", name];
|
||||||
|
if ([n isEqual: name] == YES)
|
||||||
|
{
|
||||||
|
enc = *e;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
e++;
|
||||||
}
|
}
|
||||||
else
|
if (enc == 0)
|
||||||
{
|
{
|
||||||
NSStringEncoding *e;
|
NSLog(@"defaults: unable to find encoding '%@'!\n"
|
||||||
NSMutableString *names;
|
@"Known encoding names are -\n%@", n, names);
|
||||||
|
[pool release];
|
||||||
names = [NSMutableString stringWithCapacity: 1024];
|
exit(0);
|
||||||
e = [NSString availableStringEncodings];
|
|
||||||
while (*e != 0)
|
|
||||||
{
|
|
||||||
NSString *name = [NSString localizedNameOfStringEncoding: *e];
|
|
||||||
|
|
||||||
[names appendFormat: @" %@\n", name];
|
|
||||||
if ([n isEqual: name] == YES)
|
|
||||||
{
|
|
||||||
enc = *e;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
e++;
|
|
||||||
}
|
|
||||||
if (enc == 0)
|
|
||||||
{
|
|
||||||
NSLog(@"defaults: unable to find encoding '%@'!\n"
|
|
||||||
@"Known encoding names are -\n%@", n, names);
|
|
||||||
[pool release];
|
|
||||||
exit(0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 1; i < [args count]; i++)
|
for (i = 1; found == NO && i < [args count]; i++)
|
||||||
|
{
|
||||||
|
NSString *file = [args objectAtIndex: i];
|
||||||
|
|
||||||
|
if ([file isEqual: @"-Encoding"] == YES)
|
||||||
{
|
{
|
||||||
NSString *file = [args objectAtIndex: i];
|
i++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
found = YES;
|
||||||
|
NS_DURING
|
||||||
|
{
|
||||||
|
NSData *myData;
|
||||||
|
|
||||||
if ([file isEqual: @"-Encoding"] == YES)
|
myData = [[NSData alloc] initWithContentsOfFile: file];
|
||||||
|
if (myData == nil)
|
||||||
{
|
{
|
||||||
i++;
|
NSLog(@"File read operation failed for %@.", file);
|
||||||
continue;
|
|
||||||
}
|
}
|
||||||
NS_DURING
|
else
|
||||||
{
|
{
|
||||||
NSData *myData;
|
unsigned l = [myData length];
|
||||||
NSString *myString;
|
const unichar *b = (const unichar*)[myData bytes];
|
||||||
|
NSStringEncoding iEnc;
|
||||||
|
NSStringEncoding oEnc;
|
||||||
|
NSString *myString;
|
||||||
|
|
||||||
myString = [NSString stringWithContentsOfFile: file];
|
if (l > 1 && (*b == 0xFFFE || *b == 0xFEFF))
|
||||||
myData = [myString dataUsingEncoding: enc
|
|
||||||
allowLossyConversion: NO];
|
|
||||||
if (myData == nil)
|
|
||||||
{
|
{
|
||||||
NSLog(@"Encoding conversion failed.", file);
|
iEnc = NSUnicodeStringEncoding;
|
||||||
|
oEnc = enc;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
NSFileHandle *out;
|
iEnc = enc;
|
||||||
|
oEnc = NSUnicodeStringEncoding;
|
||||||
|
}
|
||||||
|
|
||||||
|
myString = [[NSString alloc] initWithData: myData
|
||||||
|
encoding: iEnc];
|
||||||
|
RELEASE(myData);
|
||||||
|
if (myString == nil)
|
||||||
|
{
|
||||||
|
NSLog(@"Encoding input conversion failed for %@.", file);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
myData = [myString dataUsingEncoding: oEnc
|
||||||
|
allowLossyConversion: NO];
|
||||||
|
RELEASE(myString);
|
||||||
|
if (myData == nil)
|
||||||
|
{
|
||||||
|
NSLog(@"Encoding output conversion failed for %@.",
|
||||||
|
file);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
NSFileHandle *out;
|
||||||
|
|
||||||
out = [NSFileHandle fileHandleWithStandardOutput];
|
out = [NSFileHandle fileHandleWithStandardOutput];
|
||||||
[out writeData: myData];
|
[out writeData: myData];
|
||||||
[out synchronizeFile];
|
[out synchronizeFile];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
NS_HANDLER
|
|
||||||
{
|
|
||||||
NSLog(@"Converting '%@' - %@", file, [localException reason]);
|
|
||||||
}
|
|
||||||
NS_ENDHANDLER
|
|
||||||
}
|
}
|
||||||
|
NS_HANDLER
|
||||||
|
{
|
||||||
|
NSLog(@"Converting '%@' - %@", file, [localException reason]);
|
||||||
|
}
|
||||||
|
NS_ENDHANDLER
|
||||||
|
}
|
||||||
|
|
||||||
|
if (found == NO)
|
||||||
|
{
|
||||||
|
NSLog(@"\nThis utility expects a filename as an argument.\n"
|
||||||
|
@"It reads the file, and writes it to STDOUT after converting it\n"
|
||||||
|
@"to unicode from C string encoding or vice versa.\n"
|
||||||
|
@"You can supply a '-Encoding name' option to specify the C string\n"
|
||||||
|
@"encoding to be used, if you don't want to use the default.");
|
||||||
}
|
}
|
||||||
[pool release];
|
[pool release];
|
||||||
return 0;
|
return 0;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue