Use encoding number values from Apple

This commit is contained in:
Levin Li 2021-12-25 18:01:42 +08:00
parent ca6145efdd
commit fe2f41c7f1
16 changed files with 589 additions and 332 deletions

View file

@ -5290,21 +5290,21 @@ appendString(NSMutableData *m, NSUInteger offset, NSUInteger fold,
NSMapInsert(charsets, (void*)@"iso8859-4",
(void*)NSISOLatin4StringEncoding);
NSMapInsert(charsets, (void*)@"iso-8859-5",
(void*)NSISOCyrillicStringEncoding);
(void*)NSISOLatinCyrillicStringEncoding);
NSMapInsert(charsets, (void*)@"iso8859-5",
(void*)NSISOCyrillicStringEncoding);
(void*)NSISOLatinCyrillicStringEncoding);
NSMapInsert(charsets, (void*)@"iso-8859-6",
(void*)NSISOArabicStringEncoding);
(void*)NSISOLatinArabicStringEncoding);
NSMapInsert(charsets, (void*)@"iso8859-6",
(void*)NSISOArabicStringEncoding);
(void*)NSISOLatinArabicStringEncoding);
NSMapInsert(charsets, (void*)@"iso-8859-7",
(void*)NSISOGreekStringEncoding);
(void*)NSISOLatinGreekStringEncoding);
NSMapInsert(charsets, (void*)@"iso8859-7",
(void*)NSISOGreekStringEncoding);
(void*)NSISOLatinGreekStringEncoding);
NSMapInsert(charsets, (void*)@"iso-8859-8",
(void*)NSISOHebrewStringEncoding);
(void*)NSISOLatinHebrewStringEncoding);
NSMapInsert(charsets, (void*)@"iso8859-8",
(void*)NSISOHebrewStringEncoding);
(void*)NSISOLatinHebrewStringEncoding);
NSMapInsert(charsets, (void*)@"iso-8859-9",
(void*)NSISOLatin5StringEncoding);
NSMapInsert(charsets, (void*)@"iso8859-9",
@ -5314,9 +5314,9 @@ appendString(NSMutableData *m, NSUInteger offset, NSUInteger fold,
NSMapInsert(charsets, (void*)@"iso8859-10",
(void*)NSISOLatin6StringEncoding);
NSMapInsert(charsets, (void*)@"iso-8859-11",
(void*)NSISOThaiStringEncoding);
(void*)NSISOLatinThaiStringEncoding);
NSMapInsert(charsets, (void*)@"iso8859-11",
(void*)NSISOThaiStringEncoding);
(void*)NSISOLatinThaiStringEncoding);
NSMapInsert(charsets, (void*)@"iso-8859-13",
(void*)NSISOLatin7StringEncoding);
NSMapInsert(charsets, (void*)@"iso8859-13",
@ -5330,7 +5330,7 @@ appendString(NSMutableData *m, NSUInteger offset, NSUInteger fold,
NSMapInsert(charsets, (void*)@"iso8859-15",
(void*)NSISOLatin9StringEncoding);
NSMapInsert(charsets, (void*)@"big5",
(void*)NSBIG5StringEncoding);
(void*)NSBig5StringEncoding);
NSMapInsert(charsets, (void*)@"utf-7",
(void*)NSUTF7StringEncoding);
NSMapInsert(charsets, (void*)@"utf7",
@ -5346,9 +5346,9 @@ appendString(NSMutableData *m, NSUInteger offset, NSUInteger fold,
NSMapInsert(charsets, (void*)@"ksc5601",
(void*)NSKoreanEUCStringEncoding);
NSMapInsert(charsets, (void*)@"gb2312.1980",
(void*)NSGB2312StringEncoding);
(void*)NSChineseEUCStringEncoding);
NSMapInsert(charsets, (void*)@"gb2312",
(void*)NSGB2312StringEncoding);
(void*)NSChineseEUCStringEncoding);
NSMapInsert(charsets, (void*)@"ibm437",
(void*)NSDOSLatinUSStringEncoding);
NSMapInsert(charsets, (void*)@"cp437",
@ -5442,26 +5442,26 @@ appendString(NSMutableData *m, NSUInteger offset, NSUInteger fold,
/* Also map from GNUstep encoding names.
*/
NSMapInsert(charsets, (void*)@"NSISOCyrillicStringEncoding",
(void*)NSISOCyrillicStringEncoding);
NSMapInsert(charsets, (void*)@"NSISOLatinCyrillicStringEncoding",
(void*)NSISOLatinCyrillicStringEncoding);
NSMapInsert(charsets, (void*)@"NSKOI8RStringEncoding",
(void*)NSKOI8RStringEncoding);
NSMapInsert(charsets, (void*)@"NSISOLatin3StringEncoding",
(void*)NSISOLatin3StringEncoding);
NSMapInsert(charsets, (void*)@"NSISOLatin4StringEncoding",
(void*)NSISOLatin4StringEncoding);
NSMapInsert(charsets, (void*)@"NSISOArabicStringEncoding",
(void*)NSISOArabicStringEncoding);
NSMapInsert(charsets, (void*)@"NSISOGreekStringEncoding",
(void*)NSISOGreekStringEncoding);
NSMapInsert(charsets, (void*)@"NSISOHebrewStringEncoding",
(void*)NSISOHebrewStringEncoding);
NSMapInsert(charsets, (void*)@"NSISOLatinArabicStringEncoding",
(void*)NSISOLatinArabicStringEncoding);
NSMapInsert(charsets, (void*)@"NSISOLatinGreekStringEncoding",
(void*)NSISOLatinGreekStringEncoding);
NSMapInsert(charsets, (void*)@"NSISOLatinHebrewStringEncoding",
(void*)NSISOLatinHebrewStringEncoding);
NSMapInsert(charsets, (void*)@"NSISOLatin5StringEncoding",
(void*)NSISOLatin5StringEncoding);
NSMapInsert(charsets, (void*)@"NSISOLatin6StringEncoding",
(void*)NSISOLatin6StringEncoding);
NSMapInsert(charsets, (void*)@"NSISOThaiStringEncoding",
(void*)NSISOThaiStringEncoding);
NSMapInsert(charsets, (void*)@"NSISOLatinThaiStringEncoding",
(void*)NSISOLatinThaiStringEncoding);
NSMapInsert(charsets, (void*)@"NSISOLatin7StringEncoding",
(void*)NSISOLatin7StringEncoding);
NSMapInsert(charsets, (void*)@"NSISOLatin8StringEncoding",
@ -5470,12 +5470,12 @@ appendString(NSMutableData *m, NSUInteger offset, NSUInteger fold,
(void*)NSISOLatin9StringEncoding);
NSMapInsert(charsets, (void*)@"NSUTF7StringEncoding",
(void*)NSUTF7StringEncoding);
NSMapInsert(charsets, (void*)@"NSGB2312StringEncoding",
(void*)NSGB2312StringEncoding);
NSMapInsert(charsets, (void*)@"NSChineseEUCStringEncoding",
(void*)NSChineseEUCStringEncoding);
NSMapInsert(charsets, (void*)@"NSGSM0338StringEncoding",
(void*)NSGSM0338StringEncoding);
NSMapInsert(charsets, (void*)@"NSBIG5StringEncoding",
(void*)NSBIG5StringEncoding);
NSMapInsert(charsets, (void*)@"NSBig5StringEncoding",
(void*)NSBig5StringEncoding);
NSMapInsert(charsets, (void*)@"NSKoreanEUCStringEncoding",
(void*)NSKoreanEUCStringEncoding);
NSMapInsert(charsets, (void*)@"NSDOSLatinUSStringEncoding",
@ -5577,19 +5577,19 @@ appendString(NSMutableData *m, NSUInteger offset, NSUInteger fold,
(void*)@"iso-8859-3");
NSMapInsert(encodings, (void*)NSISOLatin4StringEncoding,
(void*)@"iso-8859-4");
NSMapInsert(encodings, (void*)NSISOCyrillicStringEncoding,
NSMapInsert(encodings, (void*)NSISOLatinCyrillicStringEncoding,
(void*)@"iso-8859-5");
NSMapInsert(encodings, (void*)NSISOArabicStringEncoding,
NSMapInsert(encodings, (void*)NSISOLatinArabicStringEncoding,
(void*)@"iso-8859-6");
NSMapInsert(encodings, (void*)NSISOGreekStringEncoding,
NSMapInsert(encodings, (void*)NSISOLatinGreekStringEncoding,
(void*)@"iso-8859-7");
NSMapInsert(encodings, (void*)NSISOHebrewStringEncoding,
NSMapInsert(encodings, (void*)NSISOLatinHebrewStringEncoding,
(void*)@"iso-8859-8");
NSMapInsert(encodings, (void*)NSISOLatin5StringEncoding,
(void*)@"iso-8859-9");
NSMapInsert(encodings, (void*)NSISOLatin6StringEncoding,
(void*)@"iso-8859-10");
NSMapInsert(encodings, (void*)NSISOThaiStringEncoding,
NSMapInsert(encodings, (void*)NSISOLatinThaiStringEncoding,
(void*)@"iso-8859-11");
NSMapInsert(encodings, (void*)NSISOLatin7StringEncoding,
(void*)@"iso-8859-13");
@ -5597,7 +5597,7 @@ appendString(NSMutableData *m, NSUInteger offset, NSUInteger fold,
(void*)@"iso-8859-14");
NSMapInsert(encodings, (void*)NSISOLatin9StringEncoding,
(void*)@"iso-8859-15");
NSMapInsert(encodings, (void*)NSBIG5StringEncoding,
NSMapInsert(encodings, (void*)NSBig5StringEncoding,
(void*)@"big5");
NSMapInsert(encodings, (void*)NSUTF7StringEncoding,
(void*)@"utf-7");
@ -5605,7 +5605,7 @@ appendString(NSMutableData *m, NSUInteger offset, NSUInteger fold,
(void*)@"gsm0338");
NSMapInsert(encodings, (void*)NSKOI8RStringEncoding,
(void*)@"koi8-r");
NSMapInsert(encodings, (void*)NSGB2312StringEncoding,
NSMapInsert(encodings, (void*)NSChineseEUCStringEncoding,
(void*)@"gb2312.1980");
NSMapInsert(encodings, (void*)NSKoreanEUCStringEncoding,
(void*)@"ksc5601.1987");

View file

@ -35,6 +35,7 @@
#import "Foundation/NSDictionary.h"
#import "Foundation/NSError.h"
#import "Foundation/NSException.h"
#import "Foundation/NSMapTable.h"
#import "Foundation/NSPathUtilities.h"
#endif
@ -221,26 +222,26 @@ static struct _strenc_ str_encoding_table[] = {
#endif
// GNUstep additions
{NSISOCyrillicStringEncoding,
"NSISOCyrillicStringEncoding","ISO-8859-5",0,1,0},
{NSISOLatinCyrillicStringEncoding,
"NSISOLatinCyrillicStringEncoding","ISO-8859-5",0,1,0},
{NSKOI8RStringEncoding,
"NSKOI8RStringEncoding","KOI8-R",0,0,0},
{NSISOLatin3StringEncoding,
"NSISOLatin3StringEncoding","ISO-8859-3",0,0,0},
{NSISOLatin4StringEncoding,
"NSISOLatin4StringEncoding","ISO-8859-4",0,0,0},
{NSISOArabicStringEncoding,
"NSISOArabicStringEncoding","ISO-8859-6",0,0,0},
{NSISOGreekStringEncoding,
"NSISOGreekStringEncoding","ISO-8859-7",0,0,0},
{NSISOHebrewStringEncoding,
"NSISOHebrewStringEncoding","ISO-8859-8",0,0,0},
{NSISOLatinArabicStringEncoding,
"NSISOLatinArabicStringEncoding","ISO-8859-6",0,0,0},
{NSISOLatinGreekStringEncoding,
"NSISOLatinGreekStringEncoding","ISO-8859-7",0,0,0},
{NSISOLatinHebrewStringEncoding,
"NSISOLatinHebrewStringEncoding","ISO-8859-8",0,0,0},
{NSISOLatin5StringEncoding,
"NSISOLatin5StringEncoding","ISO-8859-9",0,0,0},
{NSISOLatin6StringEncoding,
"NSISOLatin6StringEncoding","ISO-8859-10",0,0,0},
{NSISOThaiStringEncoding,
"NSISOThaiStringEncoding","ISO-8859-11",1,1,0},
{NSISOLatinThaiStringEncoding,
"NSISOLatinThaiStringEncoding","ISO-8859-11",1,1,0},
{NSISOLatin7StringEncoding,
"NSISOLatin7StringEncoding","ISO-8859-13",0,0,0},
{NSISOLatin8StringEncoding,
@ -249,12 +250,12 @@ static struct _strenc_ str_encoding_table[] = {
"NSISOLatin9StringEncoding","ISO-8859-15",1,1,0},
{NSUTF7StringEncoding,
"NSUTF7StringEncoding","UTF-7",0,0,0},
{NSGB2312StringEncoding,
"NSGB2312StringEncoding","EUC-CN",0,0,0},
{NSChineseEUCStringEncoding,
"NSChineseEUCStringEncoding","EUC-CN",0,0,0},
{NSGSM0338StringEncoding,
"NSGSM0338StringEncoding","",0,1,0},
{NSBIG5StringEncoding,
"NSBIG5StringEncoding","BIG5",0,0,0},
{NSBig5StringEncoding,
"NSBig5StringEncoding","BIG5",0,0,0},
{NSKoreanEUCStringEncoding,
"NSKoreanEUCStringEncoding","EUC-KR",0,0,0},
@ -329,60 +330,34 @@ static struct _strenc_ str_encoding_table[] = {
{0,"Unknown encoding","",0,0,0}
};
static struct _strenc_ **encodingTable = 0;
static unsigned encTableSize = 0;
static NSMapTable *encodingPointerTable = nil;
static void GSSetupEncodingTable(void)
{
if (encodingTable == 0)
if (nil == encodingPointerTable)
{
GS_MUTEX_LOCK(local_lock);
if (encodingTable == 0)
if (nil == encodingPointerTable)
{
static struct _strenc_ **encTable = 0;
unsigned count;
unsigned i;
/*
* We want to store pointers to our string encoding info in a
* large table so we can do efficient lookup by encoding value.
*/
#define MAX_ENCODING 128
count = sizeof(str_encoding_table) / sizeof(struct _strenc_);
/*
* First determine the largest encoding value and create a
* large enough table of pointers.
*/
encTableSize = 0;
for (i = 0; i < count; i++)
{
unsigned tmp = str_encoding_table[i].enc;
if (tmp > encTableSize)
{
if (tmp < MAX_ENCODING)
{
encTableSize = tmp;
}
}
}
encTable = malloc(
(encTableSize+1)*sizeof(struct _strenc_ *));
memset(encTable, 0, (encTableSize+1)*sizeof(struct _strenc_ *));
encTableSize = sizeof(str_encoding_table) / sizeof(struct _strenc_);
encodingPointerTable = NSCreateMapTable(NSIntegerMapKeyCallBacks, NSNonOwnedPointerMapValueCallBacks, encTableSize);
[[NSObject leakAt:&encodingPointerTable] release];
/*
* Now set up the pointers at the correct location in the table.
*/
for (i = 0; i < count; i++)
for (i = 0; i < encTableSize; i++)
{
struct _strenc_ *entry = &str_encoding_table[i];
unsigned tmp = entry->enc;
if (tmp < MAX_ENCODING)
{
encTable[tmp] = entry;
}
NSMapInsert(encodingPointerTable, (const void *)entry->enc, (const void *)entry);
#ifdef HAVE_ICONV
if (entry->iconv != 0 && *(entry->iconv) != 0)
{
@ -410,7 +385,6 @@ static void GSSetupEncodingTable(void)
}
#endif
}
encodingTable = encTable;
}
GS_MUTEX_UNLOCK(local_lock);
}
@ -424,24 +398,7 @@ EntryForEncoding(NSStringEncoding enc)
if (enc != 0)
{
GSSetupEncodingTable();
if (enc > 0 && enc <= encTableSize)
{
entry = encodingTable[enc];
}
else
{
unsigned i = 0;
while (i < sizeof(str_encoding_table) / sizeof(struct _strenc_))
{
if (str_encoding_table[i].enc == enc)
{
entry = &str_encoding_table[i];
break;
}
i++;
}
}
entry = NSMapGet(encodingPointerTable, (const void *)enc);
}
return entry;
}
@ -517,7 +474,7 @@ GSPrivateIsEncodingSupported(NSStringEncoding enc)
* character set registry and encoding information. For instance,
* for the iso8859-5 character set, the registry is iso8859 and
* the encoding is 5, and the returned NSStringEncoding is
* NSISOCyrillicStringEncoding. If there is no specific encoding,
* NSISOLatinCyrillicStringEncoding. If there is no specific encoding,
* use @"0". Returns GSUndefinedEncoding if there is no match.
*/
NSStringEncoding
@ -1430,7 +1387,7 @@ GSToUnicode(unichar **dst, unsigned int *size, const unsigned char *src,
table = Next_char_to_uni_table;
goto tables;
case NSISOCyrillicStringEncoding:
case NSISOLatinCyrillicStringEncoding:
base = Cyrillic_conv_base;
table = Cyrillic_char_to_uni_table;
goto tables;
@ -1445,7 +1402,7 @@ GSToUnicode(unichar **dst, unsigned int *size, const unsigned char *src,
table = Latin9_char_to_uni_table;
goto tables;
case NSISOThaiStringEncoding:
case NSISOLatinThaiStringEncoding:
base = Thai_conv_base;
table = Thai_char_to_uni_table;
goto tables;
@ -2452,7 +2409,7 @@ bases:
tsize = Next_uni_to_char_table_size;
goto tables;
case NSISOCyrillicStringEncoding:
case NSISOLatinCyrillicStringEncoding:
base = Cyrillic_conv_base;
table = Cyrillic_uni_to_char_table;
tsize = Cyrillic_uni_to_char_table_size;
@ -2470,7 +2427,7 @@ bases:
tsize = Latin9_uni_to_char_table_size;
goto tables;
case NSISOThaiStringEncoding:
case NSISOLatinThaiStringEncoding:
base = Thai_conv_base;
table = Thai_uni_to_char_table;
tsize = Thai_uni_to_char_table_size;
@ -2808,11 +2765,12 @@ GSPrivateAvailableEncodings()
*/
encodings = malloc(sizeof(NSStringEncoding) * (encTableSize+1));
pos = 0;
for (i = 0; i < encTableSize+1; i++)
for (i = 0; i < encTableSize; i++)
{
if (GSPrivateIsEncodingSupported(i) == YES)
NSStringEncoding encoding = str_encoding_table[i].enc;
if (GSPrivateIsEncodingSupported(encoding) == YES)
{
encodings[pos++] = i;
encodings[pos++] = encoding;
}
}
encodings[pos] = 0;
@ -2868,7 +2826,7 @@ GSPrivateCStringEncoding(const char *encoding)
/* AIX IRIX OSF/1 Solaris NetBSD */
|| strcmp(encoding, "ISO8859-5") == 0
|| strcmp(encoding, "iso88595") == 0 /* HP-UX */)
enc = NSISOCyrillicStringEncoding;
enc = NSISOLatinCyrillicStringEncoding;
else if (strcmp(encoding, "KOI8-R") == 0 /* glibc */
|| strcmp(encoding, "koi8-r") == 0 /* Solaris */)
enc = NSKOI8RStringEncoding;
@ -2881,15 +2839,15 @@ GSPrivateCStringEncoding(const char *encoding)
else if (strcmp(encoding, "ISO-8859-6") == 0 /* glibc */
|| strcmp(encoding, "ISO8859-6") == 0 /* AIX Solaris */
|| strcmp(encoding, "iso88596") == 0 /* HP-UX */)
enc = NSISOArabicStringEncoding;
enc = NSISOLatinArabicStringEncoding;
else if (strcmp(encoding, "ISO-8859-7") == 0 /* glibc */
|| strcmp(encoding, "ISO8859-7") == 0 /* AIX IRIX OSF/1 Solaris */
|| strcmp(encoding, "iso88597") == 0 /* HP-UX */)
enc = NSISOGreekStringEncoding;
enc = NSISOLatinGreekStringEncoding;
else if (strcmp(encoding, "ISO-8859-8") == 0 /* glibc */
|| strcmp(encoding, "ISO8859-8") == 0 /* AIX OSF/1 Solaris */
|| strcmp(encoding, "iso88598") == 0 /* HP-UX */)
enc = NSISOHebrewStringEncoding;
enc = NSISOLatinHebrewStringEncoding;
else if (strcmp(encoding, "ISO-8859-9") == 0 /* glibc */
|| strcmp(encoding, "ISO8859-9") == 0 /* AIX IRIX OSF/1 Solaris */
|| strcmp(encoding, "iso88599") == 0 /* HP-UX */)
@ -2901,7 +2859,7 @@ GSPrivateCStringEncoding(const char *encoding)
|| strcmp(encoding, "tis620") == 0 /* HP-UX */
|| strcmp(encoding, "TIS620.2533") == 0 /* Solaris */
|| strcmp(encoding, "TACTIS") == 0 /* OSF/1 */)
enc = NSISOThaiStringEncoding;
enc = NSISOLatinThaiStringEncoding;
else if (strcmp(encoding, "ISO-8859-13") == 0 /* glibc */
|| strcmp(encoding, "ISO8859-13") == 0 /* */
|| strcmp(encoding, "IBM-921") == 0 /* AIX */)
@ -2919,10 +2877,10 @@ GSPrivateCStringEncoding(const char *encoding)
|| strcmp(encoding, "eucCN") == 0 /* IRIX NetBSD */
|| strcmp(encoding, "IBM-eucCN") == 0 /* AIX */
|| strcmp(encoding, "hp15CN") == 0 /* HP-UX */)
enc = NSGB2312StringEncoding;
enc = NSChineseEUCStringEncoding;
else if (strcmp(encoding, "BIG5") == 0 /* glibc Solaris NetBSD */
|| strcmp(encoding, "big5") == 0 /* AIX HP-UX OSF/1 */)
enc = NSBIG5StringEncoding;
enc = NSBig5StringEncoding;
else if (strcmp(encoding, "EUC-KR") == 0 /* glibc */
|| strcmp(encoding, "eucKR") == 0 /* HP-UX IRIX OSF/1 NetBSD */
|| strcmp(encoding, "IBM-eucKR") == 0 /* AIX */