mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-22 16:33:29 +00:00
Merged in GetDefEncoding.m
New function GetAvailableEncodings. Updated the encoding arrays. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@7663 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
4edb867287
commit
2fbd2e2547
1 changed files with 182 additions and 4 deletions
186
Source/Unicode.m
186
Source/Unicode.m
|
@ -1,8 +1,13 @@
|
|||
/* Support functions for Unicode implementation
|
||||
/* Support functions for Unicode implementation
|
||||
Function to determine default c string encoding for
|
||||
GNUstep based on GNUSTEP_STRING_ENCODING environment variable.
|
||||
|
||||
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||
|
||||
Written by: Stevo Crvenkovski < stevo@btinternet.com >
|
||||
Date: March 1997
|
||||
Merged with GetDefEncoding.m and iconv by: Fred Kiefer <fredkiefer@gmx.de>
|
||||
Date: September 2000
|
||||
|
||||
This file is part of the GNUstep Base Library.
|
||||
|
||||
|
@ -24,6 +29,8 @@
|
|||
#include <config.h>
|
||||
#include <Foundation/NSString.h>
|
||||
#include <base/Unicode.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
struct _ucc_ {unichar from; char to;};
|
||||
|
||||
|
@ -46,6 +53,172 @@ struct _ucc_ {unichar from; char to;};
|
|||
#define UNICODE_ENC "UNICODELITTLE"
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
typedef unsigned char unc;
|
||||
static NSStringEncoding defEnc = GSUndefinedEncoding;
|
||||
|
||||
// Uncomment when implemented
|
||||
static NSStringEncoding _availableEncodings[] = {
|
||||
NSASCIIStringEncoding,
|
||||
NSNEXTSTEPStringEncoding,
|
||||
// NSJapaneseEUCStringEncoding,
|
||||
// NSUTF8StringEncoding,
|
||||
NSISOLatin1StringEncoding,
|
||||
// NSSymbolStringEncoding,
|
||||
// NSNonLossyASCIIStringEncoding,
|
||||
// NSShiftJISStringEncoding,
|
||||
NSISOLatin2StringEncoding,
|
||||
NSUnicodeStringEncoding,
|
||||
// NSWindowsCP1251StringEncoding,
|
||||
// NSWindowsCP1252StringEncoding,
|
||||
// NSWindowsCP1253StringEncoding,
|
||||
// NSWindowsCP1254StringEncoding,
|
||||
// NSWindowsCP1250StringEncoding,
|
||||
// NSISO2022JPStringEncoding,
|
||||
// NSMacOSRomanStringEncoding,
|
||||
// NSProprietaryStringEncoding,
|
||||
// GNUstep additions
|
||||
NSCyrillicStringEncoding,
|
||||
// NSKOI8RStringEncoding,
|
||||
// NSISOLatin3StringEncoding,
|
||||
// NSISOLatin4StringEncoding,
|
||||
// NSArabicStringEncoding,
|
||||
// NSGreekStringEncoding,
|
||||
// NSHebrewStringEncoding,
|
||||
// NSGB2312StringEncoding,
|
||||
0
|
||||
};
|
||||
|
||||
struct _strenc_ {NSStringEncoding enc; char *ename;};
|
||||
const struct _strenc_ str_encoding_table[]=
|
||||
{
|
||||
{NSASCIIStringEncoding,"NSASCIIStringEncoding"},
|
||||
{NSNEXTSTEPStringEncoding,"NSNEXTSTEPStringEncoding"},
|
||||
{NSJapaneseEUCStringEncoding, "NSJapaneseEUCStringEncoding"},
|
||||
{NSUTF8StringEncoding,"NSUTF8StringEncoding"},
|
||||
{NSISOLatin1StringEncoding,"NSISOLatin1StringEncoding"},
|
||||
{NSSymbolStringEncoding,"NSSymbolStringEncoding"},
|
||||
{NSNonLossyASCIIStringEncoding,"NSNonLossyASCIIStringEncoding"},
|
||||
{NSShiftJISStringEncoding,"NSShiftJISStringEncoding"},
|
||||
{NSISOLatin2StringEncoding,"NSISOLatin2StringEncoding"},
|
||||
{NSUnicodeStringEncoding, "NSUnicodeStringEncoding"},
|
||||
{NSWindowsCP1251StringEncoding,"NSWindowsCP1251StringEncoding"},
|
||||
{NSWindowsCP1252StringEncoding,"NSWindowsCP1252StringEncoding"},
|
||||
{NSWindowsCP1253StringEncoding,"NSWindowsCP1253StringEncoding"},
|
||||
{NSWindowsCP1254StringEncoding,"NSWindowsCP1254StringEncoding"},
|
||||
{NSWindowsCP1250StringEncoding,"NSWindowsCP1250StringEncoding"},
|
||||
{NSISO2022JPStringEncoding,"NSISO2022JPStringEncoding "},
|
||||
{NSMacOSRomanStringEncoding, "NSMacOSRomanStringEncoding"},
|
||||
{NSProprietaryStringEncoding, "NSProprietaryStringEncoding"},
|
||||
|
||||
// GNUstep additions
|
||||
{NSCyrillicStringEncoding,"NSCyrillicStringEncoding"},
|
||||
{NSKOI8RStringEncoding, "NSKOI8RStringEncoding"},
|
||||
{NSISOLatin3StringEncoding, "NSISOLatin3StringEncoding"},
|
||||
{NSISOLatin4StringEncoding, "NSISOLatin4StringEncoding"},
|
||||
{NSArabicStringEncoding, "NSArabicStringEncoding"},
|
||||
{NSGreekStringEncoding, "NSGreekStringEncoding"},
|
||||
{NSHebrewStringEncoding, "NSHebrewStringEncoding"},
|
||||
{NSGB2312StringEncoding, "NSGB2312StringEncoding"},
|
||||
|
||||
{0, "Unknown encoding"}
|
||||
};
|
||||
|
||||
NSStringEncoding *GetAvailableEncodings()
|
||||
{
|
||||
// FIXME: This should check which iconv definitions are available and
|
||||
// add them to the availble encodings
|
||||
return _availableEncodings;
|
||||
}
|
||||
|
||||
NSStringEncoding GetDefEncoding()
|
||||
{
|
||||
char *encoding;
|
||||
unsigned int count;
|
||||
NSStringEncoding ret,tmp;
|
||||
NSStringEncoding *availableEncodings;
|
||||
|
||||
availableEncodings = GetAvailableEncodings();
|
||||
|
||||
encoding = getenv("GNUSTEP_STRING_ENCODING");
|
||||
if (encoding)
|
||||
{
|
||||
count = 0;
|
||||
while (str_encoding_table[count].enc &&
|
||||
strcmp(str_encoding_table[count].ename,encoding))
|
||||
{
|
||||
count++;
|
||||
}
|
||||
if (str_encoding_table[count].enc)
|
||||
{
|
||||
ret = str_encoding_table[count].enc;
|
||||
if ((ret == NSUnicodeStringEncoding) ||
|
||||
(ret == NSSymbolStringEncoding))
|
||||
{
|
||||
fprintf(stderr, "WARNING: %s - encoding not supported as default c string encoding.\n", encoding);
|
||||
fprintf(stderr, "NSASCIIStringEncoding set as default.\n");
|
||||
ret = NSASCIIStringEncoding;
|
||||
}
|
||||
else /*encoding should be supported but is it implemented?*/
|
||||
{
|
||||
count = 0;
|
||||
tmp = 0;
|
||||
while ( !(availableEncodings[count] == 0) )
|
||||
{
|
||||
if ( !(ret == availableEncodings[count]) )
|
||||
tmp = 0;
|
||||
else
|
||||
{
|
||||
tmp = ret;
|
||||
break;
|
||||
}
|
||||
count++;
|
||||
};
|
||||
if (!tmp)
|
||||
{
|
||||
fprintf(stderr, "WARNING: %s - encoding not yet implemented.\n", encoding);
|
||||
fprintf(stderr, "NSASCIIStringEncoding set as default.\n");
|
||||
ret = NSASCIIStringEncoding;
|
||||
};
|
||||
};
|
||||
}
|
||||
else /* encoding not found */
|
||||
{
|
||||
fprintf(stderr, "WARNING: %s - encoding not supported.\n", encoding);
|
||||
fprintf(stderr, "NSASCIIStringEncoding set as default.\n");
|
||||
ret = NSASCIIStringEncoding;
|
||||
}
|
||||
}
|
||||
else /* environment var not found */
|
||||
{
|
||||
/* This shouldn't be required. It really should be in UserDefaults - asf */
|
||||
//fprintf(stderr,"WARNING: GNUSTEP_STRING_ENCODING environment variable not found\n");
|
||||
//fprintf(stderr, "NSASCIIStringEncoding set as default.\n");
|
||||
ret = NSASCIIStringEncoding;
|
||||
}
|
||||
|
||||
// Cache the encoding
|
||||
defEnc = ret;
|
||||
return ret;
|
||||
};
|
||||
|
||||
NSString*
|
||||
GetEncodingName(NSStringEncoding encoding)
|
||||
{
|
||||
unsigned int count=0;
|
||||
|
||||
while (str_encoding_table[count].enc &&
|
||||
!(str_encoding_table[count].enc == encoding))
|
||||
{
|
||||
count++;
|
||||
}
|
||||
|
||||
return [NSString stringWithCString: str_encoding_table[count].ename];
|
||||
};
|
||||
|
||||
#ifdef HAVE_ICONV
|
||||
|
||||
static char *
|
||||
iconv_stringforencoding(NSStringEncoding enc)
|
||||
|
@ -156,9 +329,6 @@ iconv_ustrtostr(char *s2, int size2, unichar *u1, int size1, NSStringEncoding en
|
|||
|
||||
#endif
|
||||
|
||||
typedef unsigned char unc;
|
||||
static NSStringEncoding defEnc = GSUndefinedEncoding;
|
||||
|
||||
unichar
|
||||
encode_chartouni(char c, NSStringEncoding enc)
|
||||
{
|
||||
|
@ -169,6 +339,7 @@ encode_chartouni(char c, NSStringEncoding enc)
|
|||
case NSNonLossyASCIIStringEncoding:
|
||||
case NSASCIIStringEncoding:
|
||||
case NSISOLatin1StringEncoding:
|
||||
case NSUnicodeStringEncoding:
|
||||
return (unichar)((unc)c);
|
||||
|
||||
case NSNEXTSTEPStringEncoding:
|
||||
|
@ -234,6 +405,7 @@ encode_unitochar(unichar u, NSStringEncoding enc)
|
|||
return '*';
|
||||
|
||||
case NSISOLatin1StringEncoding:
|
||||
case NSUnicodeStringEncoding:
|
||||
if (u < 256)
|
||||
return (char)u;
|
||||
else
|
||||
|
@ -324,6 +496,9 @@ encode_unitochar_strict(unichar u, NSStringEncoding enc)
|
|||
else
|
||||
return 0;
|
||||
|
||||
case NSUnicodeStringEncoding:
|
||||
return u;
|
||||
|
||||
case NSNEXTSTEPStringEncoding:
|
||||
if (u < (unichar)Next_conv_base)
|
||||
return (char)u;
|
||||
|
@ -441,6 +616,7 @@ encode_strtoustr(unichar *u1, const char *s1, int size, NSStringEncoding enc)
|
|||
case NSNonLossyASCIIStringEncoding:
|
||||
case NSASCIIStringEncoding:
|
||||
case NSISOLatin1StringEncoding:
|
||||
case NSUnicodeStringEncoding:
|
||||
for (count = 0; (count < size) && (s1[count] != 0); count++)
|
||||
{
|
||||
u1[count] = (unichar)((unc)s1[count]);
|
||||
|
@ -544,6 +720,7 @@ encode_ustrtostr(char *s2, unichar *u1, int size, NSStringEncoding enc)
|
|||
return count;
|
||||
|
||||
case NSISOLatin1StringEncoding:
|
||||
case NSUnicodeStringEncoding:
|
||||
for (count = 0; (count < size) && (u1[count] != (unichar)0); count++)
|
||||
{
|
||||
u = u1[count];
|
||||
|
@ -669,6 +846,7 @@ encode_ustrtostr_strict(char *s2, unichar *u1, int size, NSStringEncoding enc)
|
|||
return count;
|
||||
|
||||
case NSISOLatin1StringEncoding:
|
||||
case NSUnicodeStringEncoding:
|
||||
for (count = 0; count < size; count++)
|
||||
{
|
||||
u = u1[count];
|
||||
|
|
Loading…
Reference in a new issue