Add a load of charset aliases to make parsing more tolerant.

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@20963 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-Macdonald 2005-03-22 10:00:55 +00:00
parent 2cc648e1b7
commit b72acfde4a
2 changed files with 47 additions and 17 deletions

View file

@ -2,6 +2,7 @@
* Source/Additions/GSMime.m: Fix some charset-encoding mappings.
Add utf-7 and utf-16.
Add all aliases for ascii and latin1
Document mapping methods better.
2005-03-21 Richard Frith-Macdonald <rfm@gnu.org>

View file

@ -3112,8 +3112,7 @@ static NSCharacterSet *tokenSet = nil;
* Return the MIME characterset name corresponding to the
* specified string encoding.<br />
* As a special case, returns "us-ascii" if enc is zero.<br />
* Raises an NSInvalidArgumentException if enc cannot be
* mapped to a charset.<br />
* Returns nil 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.
@ -3125,11 +3124,6 @@ static NSCharacterSet *tokenSet = nil;
if (enc != 0)
{
charset = (NSString*)NSMapGet(encodings, (void*)enc);
if (charset == nil)
{
[NSException raise: NSInvalidArgumentException
format: @"no charset for encoding '%d'", enc];
}
}
return charset;
}
@ -3322,7 +3316,7 @@ static NSCharacterSet *tokenSet = nil;
* Return the string encoding corresponding to the specified MIME
* characterset name.<br />
* As a special case, returns NSASCIIStringEncoding if charset is nil.<br />
* Raises an NSInvalidArgumentException if charset cannot be found.<br />
* Returns 0 if charset cannot be found.<br />
* NB. We treat iso-10646-ucs-2 as utf-16, which should
* work for most text, but is not strictly correct.<br />
* The correspondence between charsets and encodings is not
@ -3340,11 +3334,6 @@ static NSCharacterSet *tokenSet = nil;
{
charset = [charset lowercaseString];
enc = (NSStringEncoding)NSMapGet(charsets, charset);
if (enc == 0)
{
[NSException raise: NSInvalidArgumentException
format: @"unknown charset '%@'", charset];
}
}
}
return enc;
@ -3388,12 +3377,51 @@ static NSCharacterSet *tokenSet = nil;
{
charsets = NSCreateMapTable (NSObjectMapKeyCallBacks,
NSIntMapValueCallBacks, 0);
// All the ascii mappings from IANA
NSMapInsert(charsets, (void*)@"ansi_x3.4-1968",
(void*)NSASCIIStringEncoding);
NSMapInsert(charsets, (void*)@"iso-ir-6",
(void*)NSASCIIStringEncoding);
NSMapInsert(charsets, (void*)@"ansi_x3.4-1986",
(void*)NSASCIIStringEncoding);
NSMapInsert(charsets, (void*)@"iso_646.irv:1991",
(void*)NSASCIIStringEncoding);
NSMapInsert(charsets, (void*)@"ascii",
(void*)NSASCIIStringEncoding);
NSMapInsert(charsets, (void*)@"iso646-us",
(void*)NSASCIIStringEncoding);
NSMapInsert(charsets, (void*)@"us-ascii",
(void*)NSASCIIStringEncoding);
NSMapInsert(charsets, (void*)@"us",
(void*)NSASCIIStringEncoding);
NSMapInsert(charsets, (void*)@"ibm367",
(void*)NSASCIIStringEncoding);
NSMapInsert(charsets, (void*)@"cp367",
(void*)NSASCIIStringEncoding);
NSMapInsert(charsets, (void*)@"csascii",
(void*)NSASCIIStringEncoding);
// All the latin1 mappings from IANA
NSMapInsert(charsets, (void*)@"iso-8859-1:1987",
(void*)NSISOLatin1StringEncoding);
NSMapInsert(charsets, (void*)@"iso-ir-100",
(void*)NSISOLatin1StringEncoding);
NSMapInsert(charsets, (void*)@"iso_8859-1",
(void*)NSISOLatin1StringEncoding);
NSMapInsert(charsets, (void*)@"iso-8859-1",
(void*)NSISOLatin1StringEncoding);
NSMapInsert(charsets, (void*)@"latin1",
(void*)NSISOLatin1StringEncoding);
NSMapInsert(charsets, (void*)@"l1",
(void*)NSISOLatin1StringEncoding);
NSMapInsert(charsets, (void*)@"ibm819",
(void*)NSISOLatin1StringEncoding);
NSMapInsert(charsets, (void*)@"cp819",
(void*)NSISOLatin1StringEncoding);
NSMapInsert(charsets, (void*)@"csisolatin1",
(void*)NSISOLatin1StringEncoding);
NSMapInsert(charsets, (void*)@"iso-8859-2",
(void*)NSISOLatin2StringEncoding);
NSMapInsert(charsets, (void*)@"iso-8859-3",
@ -4495,11 +4523,12 @@ static NSCharacterSet *tokenSet = nil;
{
if ([[type objectForKey: @"Type"] isEqualToString: @"text"] == YES)
{
NSString *charset = [type parameterForKey: @"charset"];
NSString *charset;
NSStringEncoding e;
if (charset != nil
&& [charset isEqualToString: @"ascii"] == NO
&& [charset isEqualToString: @"us-ascii"] == NO)
charset = [type parameterForKey: @"charset"];
e = [documentClass encodingFromCharset: charset];
if (e != NSASCIIStringEncoding && e != NSUTF7StringEncoding)
{
encoding = @"8bit";
enc = [GSMimeHeader alloc];