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> 2005-03-21 Richard Frith-Macdonald <rfm@gnu.org>
* Headers/Foundation/NSFileManager.h: Add path handling documentation. * Headers/Foundation/NSFileManager.h: Add path handling documentation.
@ -9,7 +15,7 @@
gnustep/unix/windows. In the default gnustep mode we try to gnustep/unix/windows. In the default gnustep mode we try to
handle paths in any format and just do the right thing. handle paths in any format and just do the right thing.
Also updated handling of path extensions to match MacOSX behavior. 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. Optimise a little by avoiding class lookups.
2005-03-18 Richard Frith-Macdonald <rfm@gnu.org> 2005-03-18 Richard Frith-Macdonald <rfm@gnu.org>

View file

@ -1967,6 +1967,10 @@ NSDebugMLLog(@"GSMime", @"Header parsed - %@", info);
- (void) setDefaultCharset: (NSString*)aName - (void) setDefaultCharset: (NSString*)aName
{ {
_defaultEncoding = [documentClass encodingFromCharset: 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 * 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*) 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; return charset;
} }
@ -3305,7 +3320,14 @@ static NSCharacterSet *tokenSet = nil;
/** /**
* Return the string encoding corresponding to the specified MIME * 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 + (NSStringEncoding) encodingFromCharset: (NSString*)charset
{ {
@ -3320,7 +3342,8 @@ static NSCharacterSet *tokenSet = nil;
enc = (NSStringEncoding)NSMapGet(charsets, charset); enc = (NSStringEncoding)NSMapGet(charsets, charset);
if (enc == 0) 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); NSIntMapValueCallBacks, 0);
NSMapInsert(charsets, (void*)@"ascii", NSMapInsert(charsets, (void*)@"ascii",
(void*)NSASCIIStringEncoding); (void*)NSASCIIStringEncoding);
NSMapInsert(charsets, (void*)@"us-ascii",
(void*)NSASCIIStringEncoding);
NSMapInsert(charsets, (void*)@"iso-8859-1", NSMapInsert(charsets, (void*)@"iso-8859-1",
(void*)NSISOLatin1StringEncoding); (void*)NSISOLatin1StringEncoding);
NSMapInsert(charsets, (void*)@"iso-8859-2", NSMapInsert(charsets, (void*)@"iso-8859-2",
@ -3407,10 +3432,14 @@ static NSCharacterSet *tokenSet = nil;
(void*)NSUnicodeStringEncoding); (void*)NSUnicodeStringEncoding);
NSMapInsert(charsets, (void*)@"iso-10646", NSMapInsert(charsets, (void*)@"iso-10646",
(void*)NSUnicodeStringEncoding); (void*)NSUnicodeStringEncoding);
NSMapInsert(charsets, (void*)@"utf-16",
(void*)NSUnicodeStringEncoding);
NSMapInsert(charsets, (void*)@"big5", NSMapInsert(charsets, (void*)@"big5",
(void*)NSBIG5StringEncoding); (void*)NSBIG5StringEncoding);
NSMapInsert(charsets, (void*)@"shift_JIS", NSMapInsert(charsets, (void*)@"shift_JIS",
(void*)NSShiftJISStringEncoding); (void*)NSShiftJISStringEncoding);
NSMapInsert(charsets, (void*)@"utf-7",
(void*)NSUTF7StringEncoding);
NSMapInsert(charsets, (void*)@"utf-8", NSMapInsert(charsets, (void*)@"utf-8",
(void*)NSUTF8StringEncoding); (void*)NSUTF8StringEncoding);
} }
@ -3457,11 +3486,15 @@ static NSCharacterSet *tokenSet = nil;
NSMapInsert(encodings, (void*)NSWindowsCP1254StringEncoding, NSMapInsert(encodings, (void*)NSWindowsCP1254StringEncoding,
(void*)@"windows-1254"); (void*)@"windows-1254");
NSMapInsert(encodings, (void*)NSUnicodeStringEncoding, NSMapInsert(encodings, (void*)NSUnicodeStringEncoding,
(void*)@"utf-8"); (void*)@"utf-16");
NSMapInsert(encodings, (void*)NSBIG5StringEncoding, NSMapInsert(encodings, (void*)NSBIG5StringEncoding,
(void*)@"big5"); (void*)@"big5");
NSMapInsert(encodings, (void*)NSShiftJISStringEncoding, NSMapInsert(encodings, (void*)NSShiftJISStringEncoding,
(void*)@"shift_JIS"); (void*)@"shift_JIS");
NSMapInsert(encodings, (void*)NSUTF7StringEncoding,
(void*)@"utf-7");
NSMapInsert(encodings, (void*)NSUTF8StringEncoding,
(void*)@"utf-8");
} }
} }
} }