mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-30 16:30:41 +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
f9bca02419
commit
093ccdaacb
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.
|
Copyright (C) 1997 Free Software Foundation, Inc.
|
||||||
|
|
||||||
Written by: Stevo Crvenkovski < stevo@btinternet.com >
|
Written by: Stevo Crvenkovski < stevo@btinternet.com >
|
||||||
Date: March 1997
|
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.
|
This file is part of the GNUstep Base Library.
|
||||||
|
|
||||||
|
@ -24,6 +29,8 @@
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include <Foundation/NSString.h>
|
#include <Foundation/NSString.h>
|
||||||
#include <base/Unicode.h>
|
#include <base/Unicode.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
struct _ucc_ {unichar from; char to;};
|
struct _ucc_ {unichar from; char to;};
|
||||||
|
|
||||||
|
@ -46,6 +53,172 @@ struct _ucc_ {unichar from; char to;};
|
||||||
#define UNICODE_ENC "UNICODELITTLE"
|
#define UNICODE_ENC "UNICODELITTLE"
|
||||||
#endif
|
#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 *
|
static char *
|
||||||
iconv_stringforencoding(NSStringEncoding enc)
|
iconv_stringforencoding(NSStringEncoding enc)
|
||||||
|
@ -156,9 +329,6 @@ iconv_ustrtostr(char *s2, int size2, unichar *u1, int size1, NSStringEncoding en
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef unsigned char unc;
|
|
||||||
static NSStringEncoding defEnc = GSUndefinedEncoding;
|
|
||||||
|
|
||||||
unichar
|
unichar
|
||||||
encode_chartouni(char c, NSStringEncoding enc)
|
encode_chartouni(char c, NSStringEncoding enc)
|
||||||
{
|
{
|
||||||
|
@ -169,6 +339,7 @@ encode_chartouni(char c, NSStringEncoding enc)
|
||||||
case NSNonLossyASCIIStringEncoding:
|
case NSNonLossyASCIIStringEncoding:
|
||||||
case NSASCIIStringEncoding:
|
case NSASCIIStringEncoding:
|
||||||
case NSISOLatin1StringEncoding:
|
case NSISOLatin1StringEncoding:
|
||||||
|
case NSUnicodeStringEncoding:
|
||||||
return (unichar)((unc)c);
|
return (unichar)((unc)c);
|
||||||
|
|
||||||
case NSNEXTSTEPStringEncoding:
|
case NSNEXTSTEPStringEncoding:
|
||||||
|
@ -234,6 +405,7 @@ encode_unitochar(unichar u, NSStringEncoding enc)
|
||||||
return '*';
|
return '*';
|
||||||
|
|
||||||
case NSISOLatin1StringEncoding:
|
case NSISOLatin1StringEncoding:
|
||||||
|
case NSUnicodeStringEncoding:
|
||||||
if (u < 256)
|
if (u < 256)
|
||||||
return (char)u;
|
return (char)u;
|
||||||
else
|
else
|
||||||
|
@ -324,6 +496,9 @@ encode_unitochar_strict(unichar u, NSStringEncoding enc)
|
||||||
else
|
else
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
case NSUnicodeStringEncoding:
|
||||||
|
return u;
|
||||||
|
|
||||||
case NSNEXTSTEPStringEncoding:
|
case NSNEXTSTEPStringEncoding:
|
||||||
if (u < (unichar)Next_conv_base)
|
if (u < (unichar)Next_conv_base)
|
||||||
return (char)u;
|
return (char)u;
|
||||||
|
@ -441,6 +616,7 @@ encode_strtoustr(unichar *u1, const char *s1, int size, NSStringEncoding enc)
|
||||||
case NSNonLossyASCIIStringEncoding:
|
case NSNonLossyASCIIStringEncoding:
|
||||||
case NSASCIIStringEncoding:
|
case NSASCIIStringEncoding:
|
||||||
case NSISOLatin1StringEncoding:
|
case NSISOLatin1StringEncoding:
|
||||||
|
case NSUnicodeStringEncoding:
|
||||||
for (count = 0; (count < size) && (s1[count] != 0); count++)
|
for (count = 0; (count < size) && (s1[count] != 0); count++)
|
||||||
{
|
{
|
||||||
u1[count] = (unichar)((unc)s1[count]);
|
u1[count] = (unichar)((unc)s1[count]);
|
||||||
|
@ -544,6 +720,7 @@ encode_ustrtostr(char *s2, unichar *u1, int size, NSStringEncoding enc)
|
||||||
return count;
|
return count;
|
||||||
|
|
||||||
case NSISOLatin1StringEncoding:
|
case NSISOLatin1StringEncoding:
|
||||||
|
case NSUnicodeStringEncoding:
|
||||||
for (count = 0; (count < size) && (u1[count] != (unichar)0); count++)
|
for (count = 0; (count < size) && (u1[count] != (unichar)0); count++)
|
||||||
{
|
{
|
||||||
u = u1[count];
|
u = u1[count];
|
||||||
|
@ -669,6 +846,7 @@ encode_ustrtostr_strict(char *s2, unichar *u1, int size, NSStringEncoding enc)
|
||||||
return count;
|
return count;
|
||||||
|
|
||||||
case NSISOLatin1StringEncoding:
|
case NSISOLatin1StringEncoding:
|
||||||
|
case NSUnicodeStringEncoding:
|
||||||
for (count = 0; count < size; count++)
|
for (count = 0; count < size; count++)
|
||||||
{
|
{
|
||||||
u = u1[count];
|
u = u1[count];
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue