add some more cset encoding support

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@23989 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
rfm 2006-10-29 09:17:05 +00:00
parent 207bd558d2
commit f305543c4c
6 changed files with 76 additions and 9 deletions

View file

@ -1,3 +1,13 @@
2006-10-29 Richard Frith-Macdonald <rfm@gnu.org>
* Source/GSPrivate.h:
* Source/Additions/Unicode.m:
* Source/GSeq.h:
* Headers/Additions/GNUstepBase/Unicode.h:
uni_cop should be private in future.
* Source/Additions/GSMime.m: Add support for some more character
encodings.
2006-10-27 Richard Frith-Macdonald <rfm@gnu.org> 2006-10-27 Richard Frith-Macdonald <rfm@gnu.org>
* Source/NSTask.m: GSPrivateCheckTasks() retain terminated task * Source/NSTask.m: GSPrivateCheckTasks() retain terminated task

View file

@ -52,9 +52,12 @@ GS_EXPORT NSStringEncoding GSEncodingForRegistry(NSString *registry,
NSString *encoding); NSString *encoding);
GS_EXPORT unichar uni_tolower(unichar ch); GS_EXPORT unichar uni_tolower(unichar ch);
GS_EXPORT unichar uni_toupper(unichar ch); GS_EXPORT unichar uni_toupper(unichar ch);
GS_EXPORT unsigned char uni_cop(unichar u); GS_EXPORT unsigned char uni_cop(unichar u);
GS_EXPORT BOOL uni_isnonsp(unichar u); GS_EXPORT BOOL uni_isnonsp(unichar u);
GS_EXPORT unichar *uni_is_decomp(unichar u); GS_EXPORT unichar *uni_is_decomp(unichar u);
GS_EXPORT unsigned GSUnicode(const unichar *chars, unsigned length,
BOOL *isASCII, BOOL *isLatin1);
#endif #endif
@ -67,8 +70,6 @@ GS_EXPORT unichar *uni_is_decomp(unichar u);
#define GSUniBOM 0x08 #define GSUniBOM 0x08
#define GSUniShortOk 0x10 #define GSUniShortOk 0x10
GS_EXPORT unsigned GSUnicode(const unichar *chars, unsigned length,
BOOL *isASCII, BOOL *isLatin1);
GS_EXPORT BOOL GSFromUnicode(unsigned char **dst, unsigned int *size, GS_EXPORT BOOL GSFromUnicode(unsigned char **dst, unsigned int *size,
const unichar *src, unsigned int slen, NSStringEncoding enc, NSZone *zone, const unichar *src, unsigned int slen, NSStringEncoding enc, NSZone *zone,
unsigned int options); unsigned int options);

View file

@ -3604,8 +3604,9 @@ static NSCharacterSet *tokenSet = nil;
NSIntMapValueCallBacks, 0); NSIntMapValueCallBacks, 0);
/* /*
* These mappings were obtained from * These mappings were obtained primarily from
* http://www.iana.org/assignments/character-sets * http://www.iana.org/assignments/character-sets
* with additions determined empirically.
* *
* We should ideally have all the aliases for each * We should ideally have all the aliases for each
* encoding we support, but I just did the aliases * encoding we support, but I just did the aliases
@ -3623,6 +3624,8 @@ static NSCharacterSet *tokenSet = nil;
(void*)NSASCIIStringEncoding); (void*)NSASCIIStringEncoding);
NSMapInsert(charsets, (void*)@"iso_646.irv:1991", NSMapInsert(charsets, (void*)@"iso_646.irv:1991",
(void*)NSASCIIStringEncoding); (void*)NSASCIIStringEncoding);
NSMapInsert(charsets, (void*)@"iso_646.991-irv",
(void*)NSASCIIStringEncoding);
NSMapInsert(charsets, (void*)@"ascii", NSMapInsert(charsets, (void*)@"ascii",
(void*)NSASCIIStringEncoding); (void*)NSASCIIStringEncoding);
NSMapInsert(charsets, (void*)@"iso646-us", NSMapInsert(charsets, (void*)@"iso646-us",
@ -3682,34 +3685,64 @@ static NSCharacterSet *tokenSet = nil;
(void*)NSISOLatin5StringEncoding); (void*)NSISOLatin5StringEncoding);
NSMapInsert(charsets, (void*)@"iso-8859-10", NSMapInsert(charsets, (void*)@"iso-8859-10",
(void*)NSISOLatin6StringEncoding); (void*)NSISOLatin6StringEncoding);
NSMapInsert(charsets, (void*)@"iso-8859-11",
(void*)NSISOThaiStringEncoding);
NSMapInsert(charsets, (void*)@"iso-8859-13", NSMapInsert(charsets, (void*)@"iso-8859-13",
(void*)NSISOLatin7StringEncoding); (void*)NSISOLatin7StringEncoding);
NSMapInsert(charsets, (void*)@"iso-8859-14", NSMapInsert(charsets, (void*)@"iso-8859-14",
(void*)NSISOLatin8StringEncoding); (void*)NSISOLatin8StringEncoding);
NSMapInsert(charsets, (void*)@"iso-8859-15", NSMapInsert(charsets, (void*)@"iso-8859-15",
(void*)NSISOLatin9StringEncoding); (void*)NSISOLatin9StringEncoding);
NSMapInsert(charsets, (void*)@"microsoft-symbol",
(void*)NSSymbolStringEncoding);
NSMapInsert(charsets, (void*)@"windows-symbol",
(void*)NSSymbolStringEncoding);
NSMapInsert(charsets, (void*)@"microsoft-cp1250",
(void*)NSWindowsCP1250StringEncoding);
NSMapInsert(charsets, (void*)@"windows-1250", NSMapInsert(charsets, (void*)@"windows-1250",
(void*)NSWindowsCP1250StringEncoding); (void*)NSWindowsCP1250StringEncoding);
NSMapInsert(charsets, (void*)@"microsoft-cp1251",
(void*)NSWindowsCP1251StringEncoding);
NSMapInsert(charsets, (void*)@"windows-1251", NSMapInsert(charsets, (void*)@"windows-1251",
(void*)NSWindowsCP1251StringEncoding); (void*)NSWindowsCP1251StringEncoding);
NSMapInsert(charsets, (void*)@"microsoft-cp1252",
(void*)NSWindowsCP1252StringEncoding);
NSMapInsert(charsets, (void*)@"windows-1252", NSMapInsert(charsets, (void*)@"windows-1252",
(void*)NSWindowsCP1252StringEncoding); (void*)NSWindowsCP1252StringEncoding);
NSMapInsert(charsets, (void*)@"microsoft-cp1253",
(void*)NSWindowsCP1253StringEncoding);
NSMapInsert(charsets, (void*)@"windows-1253", NSMapInsert(charsets, (void*)@"windows-1253",
(void*)NSWindowsCP1253StringEncoding); (void*)NSWindowsCP1253StringEncoding);
NSMapInsert(charsets, (void*)@"microsoft-cp1254",
(void*)NSWindowsCP1254StringEncoding);
NSMapInsert(charsets, (void*)@"windows-1254", NSMapInsert(charsets, (void*)@"windows-1254",
(void*)NSWindowsCP1254StringEncoding); (void*)NSWindowsCP1254StringEncoding);
NSMapInsert(charsets, (void*)@"iso-10646-ucs-2", NSMapInsert(charsets, (void*)@"iso-10646-ucs-2",
(void*)NSUnicodeStringEncoding); (void*)NSUnicodeStringEncoding);
NSMapInsert(charsets, (void*)@"utf-16", NSMapInsert(charsets, (void*)@"utf-16",
(void*)NSUnicodeStringEncoding); (void*)NSUnicodeStringEncoding);
NSMapInsert(charsets, (void*)@"iso10646-1",
(void*)NSUnicodeStringEncoding);
NSMapInsert(charsets, (void*)@"big5", NSMapInsert(charsets, (void*)@"big5",
(void*)NSBIG5StringEncoding); (void*)NSBIG5StringEncoding);
NSMapInsert(charsets, (void*)@"jisx0201.1976",
(void*)NSShiftJISStringEncoding);
NSMapInsert(charsets, (void*)@"shift_JIS", NSMapInsert(charsets, (void*)@"shift_JIS",
(void*)NSShiftJISStringEncoding); (void*)NSShiftJISStringEncoding);
NSMapInsert(charsets, (void*)@"utf-7", NSMapInsert(charsets, (void*)@"utf-7",
(void*)NSUTF7StringEncoding); (void*)NSUTF7StringEncoding);
NSMapInsert(charsets, (void*)@"utf-8", NSMapInsert(charsets, (void*)@"utf-8",
(void*)NSUTF8StringEncoding); (void*)NSUTF8StringEncoding);
NSMapInsert(charsets, (void*)@"apple-roman",
(void*)NSMacOSRomanStringEncoding);
NSMapInsert(charsets, (void*)@"koi8-r",
(void*)NSKOI8RStringEncoding);
NSMapInsert(encodings, (void*)@"gb2312.1980",
(void*)NSGB2312StringEncoding);
NSMapInsert(encodings, (void*)@"ksc5601.1987",
(void*)NSKoreanEUCStringEncoding);
NSMapInsert(encodings, (void*)@"ksc5601.1997",
(void*)NSKoreanEUCStringEncoding);
} }
if (encodings == 0) if (encodings == 0)
{ {
@ -3747,6 +3780,8 @@ static NSCharacterSet *tokenSet = nil;
(void*)@"iso-8859-9"); (void*)@"iso-8859-9");
NSMapInsert(encodings, (void*)NSISOLatin6StringEncoding, NSMapInsert(encodings, (void*)NSISOLatin6StringEncoding,
(void*)@"iso-8859-10"); (void*)@"iso-8859-10");
NSMapInsert(encodings, (void*)NSISOThaiStringEncoding,
(void*)@"iso-8859-11");
NSMapInsert(encodings, (void*)NSISOLatin7StringEncoding, NSMapInsert(encodings, (void*)NSISOLatin7StringEncoding,
(void*)@"iso-8859-13"); (void*)@"iso-8859-13");
NSMapInsert(encodings, (void*)NSISOLatin8StringEncoding, NSMapInsert(encodings, (void*)NSISOLatin8StringEncoding,
@ -3775,6 +3810,14 @@ static NSCharacterSet *tokenSet = nil;
(void*)@"utf-8"); (void*)@"utf-8");
NSMapInsert(encodings, (void*)NSGSM0338StringEncoding, NSMapInsert(encodings, (void*)NSGSM0338StringEncoding,
(void*)@"gsm0338"); (void*)@"gsm0338");
NSMapInsert(encodings, (void*)NSMacOSRomanStringEncoding,
(void*)@"apple-roman");
NSMapInsert(encodings, (void*)NSKOI8RStringEncoding,
(void*)@"koi8-r");
NSMapInsert(encodings, (void*)NSGB2312StringEncoding,
(void*)@"gb2312.1980");
NSMapInsert(encodings, (void*)NSKoreanEUCStringEncoding,
(void*)@"ksc5601.1987");
} }
} }
} }

View file

@ -613,7 +613,7 @@ uni_toupper(unichar ch)
} }
unsigned char unsigned char
uni_cop(unichar u) GSPrivateUniCop(unichar u)
{ {
if (u < uni_cop_table[0].code) if (u < uni_cop_table[0].code)
{ {
@ -658,6 +658,12 @@ uni_cop(unichar u)
} }
} }
unsigned char
uni_cop(unichar u)
{
return GSPrivateUniCop(u);
}
BOOL BOOL
uni_isnonsp(unichar u) uni_isnonsp(unichar u)
{ {
@ -669,7 +675,7 @@ uni_isnonsp(unichar u)
return YES; return YES;
// FIXME check is uni_cop good for this // FIXME check is uni_cop good for this
if (uni_cop(u)) if (GSPrivateUniCop(u))
return YES; return YES;
else else
return NO; return NO;

View file

@ -431,6 +431,11 @@ GSPrivateStrExternalize(GSStr s) GS_ATTRIB_PRIVATE;
NSString * NSString *
GSPrivateSymbolPath (Class theClass, Category *theCategory) GS_ATTRIB_PRIVATE; GSPrivateSymbolPath (Class theClass, Category *theCategory) GS_ATTRIB_PRIVATE;
/* Combining class for composite unichars
*/
unsigned char
GSPrivateUniCop(unichar u) GS_ATTRIB_PRIVATE;
/* unload a module from the runtime (not implemented) /* unload a module from the runtime (not implemented)
*/ */
long long

View file

@ -167,9 +167,10 @@ static inline void GSeq_normalize(GSeq seq)
notdone = NO; notdone = NO;
for (i = 1; i < count; i++) for (i = 1; i < count; i++)
{ {
if (uni_cop(*second)) if (GSPrivateUniCop(*second))
{ {
if (uni_cop(*first) > uni_cop(*second)) if (GSPrivateUniCop(*first)
> GSPrivateUniCop(*second))
{ {
unichar tmp = *first; unichar tmp = *first;
@ -177,7 +178,8 @@ static inline void GSeq_normalize(GSeq seq)
*second = tmp; *second = tmp;
notdone = YES; notdone = YES;
} }
else if (uni_cop(*first) == uni_cop(*second)) else if (GSPrivateUniCop(*first)
== GSPrivateUniCop(*second))
{ {
if (*first > *second) if (*first > *second)
{ {