More charset/encoding fixes and improvements.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@20961 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-Macdonald 2005-03-22 09:16:22 +00:00
parent 5c3ec8f597
commit a8731f9b8c
2 changed files with 47 additions and 8 deletions

View file

@ -1,3 +1,9 @@
2005-03-22 Richard Frith-Macdonald <rfm@gnu.org>
* Source/Additions/GSMime.m: Fix some charset-encoding mappings.
Add utf-7 and utf-16.
Document mapping methods better.
2005-03-21 Richard Frith-Macdonald <rfm@gnu.org>
* Headers/Foundation/NSFileManager.h: Add path handling documentation.
@ -9,7 +15,7 @@
gnustep/unix/windows. In the default gnustep mode we try to
handle paths in any format and just do the right thing.
Also updated handling of path extensions to match MacOSX behavior.
* Source/Additions/GSMime.h: Remove deprecated method.
* Source/Additions/GSMime.m: Remove deprecated method.
Optimise a little by avoiding class lookups.
2005-03-18 Richard Frith-Macdonald <rfm@gnu.org>

View file

@ -1967,6 +1967,10 @@ NSDebugMLLog(@"GSMime", @"Header parsed - %@", info);
- (void) setDefaultCharset: (NSString*)aName
{
_defaultEncoding = [documentClass encodingFromCharset: aName];
if (_defaultEncoding == 0)
{
_defaultEncoding = NSASCIIStringEncoding;
}
}
@ -3106,15 +3110,26 @@ static NSCharacterSet *tokenSet = nil;
/**
* Return the MIME characterset name corresponding to the
* specified string encoding.
* specified string encoding.<br />
* As a special case, returns "ascii" if enc is zero.<br />
* Raises an NSInvalidArgumentException if enc cannot be
* mapped to a charset.<br />
* NB. The correspondence between charsets and encodings is not
* a direct one to one mapping, so successive calls to +encodingFromCharset:
* and +charsetFromEncoding: may not produce the original input.
*/
+ (NSString*) charsetFromEncoding: (NSStringEncoding)enc
{
NSString *charset = (NSString*)NSMapGet(encodings, (void*)enc);
NSString *charset = @"ascii";
if (charset == nil)
if (enc != 0)
{
charset = @"utf-8";
charset = (NSString*)NSMapGet(encodings, (void*)enc);
if (charset == nil)
{
[NSException raise: NSInvalidArgumentException
format: @"no charset for encoding '%d'", enc];
}
}
return charset;
}
@ -3305,7 +3320,14 @@ static NSCharacterSet *tokenSet = nil;
/**
* Return the string encoding corresponding to the specified MIME
* characterset name.
* characterset name.<br />
* As a special case, returns NSASCIIStringEncoding if charset is nil.<br />
* Raises an NSInvalidArgumentException if charset cannot be found.<br />
* NB. We treat iso-10646-ucs-2 and iso-10646 as utf-16, which should
* work correctly for most text, but is not strictly correct.<br />
* The correspondence between charsets and encodings is not
* a direct one to one mapping, so successive calls to +encodingFromCharset:
* and +charsetFromEncoding: may not produce the original input.
*/
+ (NSStringEncoding) encodingFromCharset: (NSString*)charset
{
@ -3320,7 +3342,8 @@ static NSCharacterSet *tokenSet = nil;
enc = (NSStringEncoding)NSMapGet(charsets, charset);
if (enc == 0)
{
enc = NSASCIIStringEncoding; // Default character set.
[NSException raise: NSInvalidArgumentException
format: @"unknown charset '%@'", charset];
}
}
}
@ -3367,6 +3390,8 @@ static NSCharacterSet *tokenSet = nil;
NSIntMapValueCallBacks, 0);
NSMapInsert(charsets, (void*)@"ascii",
(void*)NSASCIIStringEncoding);
NSMapInsert(charsets, (void*)@"us-ascii",
(void*)NSASCIIStringEncoding);
NSMapInsert(charsets, (void*)@"iso-8859-1",
(void*)NSISOLatin1StringEncoding);
NSMapInsert(charsets, (void*)@"iso-8859-2",
@ -3407,10 +3432,14 @@ static NSCharacterSet *tokenSet = nil;
(void*)NSUnicodeStringEncoding);
NSMapInsert(charsets, (void*)@"iso-10646",
(void*)NSUnicodeStringEncoding);
NSMapInsert(charsets, (void*)@"utf-16",
(void*)NSUnicodeStringEncoding);
NSMapInsert(charsets, (void*)@"big5",
(void*)NSBIG5StringEncoding);
NSMapInsert(charsets, (void*)@"shift_JIS",
(void*)NSShiftJISStringEncoding);
NSMapInsert(charsets, (void*)@"utf-7",
(void*)NSUTF7StringEncoding);
NSMapInsert(charsets, (void*)@"utf-8",
(void*)NSUTF8StringEncoding);
}
@ -3457,11 +3486,15 @@ static NSCharacterSet *tokenSet = nil;
NSMapInsert(encodings, (void*)NSWindowsCP1254StringEncoding,
(void*)@"windows-1254");
NSMapInsert(encodings, (void*)NSUnicodeStringEncoding,
(void*)@"utf-8");
(void*)@"utf-16");
NSMapInsert(encodings, (void*)NSBIG5StringEncoding,
(void*)@"big5");
NSMapInsert(encodings, (void*)NSShiftJISStringEncoding,
(void*)@"shift_JIS");
NSMapInsert(encodings, (void*)NSUTF7StringEncoding,
(void*)@"utf-7");
NSMapInsert(encodings, (void*)NSUTF8StringEncoding,
(void*)@"utf-8");
}
}
}