More encoding tidyups

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@9565 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
CaS 2001-04-12 09:29:16 +00:00
parent 5b98e2b7aa
commit 9c4aa92591
4 changed files with 81 additions and 65 deletions

View file

@ -12,6 +12,8 @@
default cString encoding ... the default cString encoding must default cString encoding ... the default cString encoding must
consist of 7 or 8 bit characters, and must contain ASCII as a consist of 7 or 8 bit characters, and must contain ASCII as a
subset. We really should think of a generalised test for that. subset. We really should think of a generalised test for that.
Use GetDefEncoding() throughout rather than defaultCStringEncoding.
* Source/GSString.m: Use GetDefEncoding() to get c string encoding.
2001-04-11 Nicola Pero <nicola@brainstorm.co.uk> 2001-04-11 Nicola Pero <nicola@brainstorm.co.uk>

View file

@ -185,6 +185,15 @@
<code>NSISOLatin1StringEncoding</code> is assumed. <code>NSISOLatin1StringEncoding</code> is assumed.
</p> </p>
<p>
The default C string encoding must be a characterset containing
7 or 8 bit characters, and where the characters are a superset
of the 7-bit ASCII characterset. In particular, this means
that NSUTF8StringEncoding and NSUnicodeStringEncoding are not
permissable.
</p>
<hr> <hr>
<h3><a name ="method-2">localizedNameOfStringEncoding:</a></h3> <h3><a name ="method-2">localizedNameOfStringEncoding:</a></h3>

View file

@ -226,6 +226,8 @@ setup()
if (beenHere == NO) if (beenHere == NO)
{ {
extern NSStringEncoding GetDefEncoding();
beenHere = YES; beenHere = YES;
/* /*
@ -262,7 +264,7 @@ setup()
/* /*
* Cache the default string encoding. * Cache the default string encoding.
*/ */
defEnc = [NSString defaultCStringEncoding]; defEnc = GetDefEncoding();
} }
} }

View file

@ -177,80 +177,83 @@ NSStringEncoding *GetAvailableEncodings()
NSStringEncoding NSStringEncoding
GetDefEncoding() GetDefEncoding()
{ {
char *encoding; if (defEnc == GSUndefinedEncoding)
unsigned int count;
NSStringEncoding ret;
NSStringEncoding tmp;
NSStringEncoding *availableEncodings;
availableEncodings = GetAvailableEncodings();
encoding = getenv("GNUSTEP_STRING_ENCODING");
if (encoding != 0)
{ {
count = 0; char *encoding;
while (str_encoding_table[count].enc unsigned int count;
&& strcmp(str_encoding_table[count].ename,encoding)) NSStringEncoding tmp;
NSStringEncoding *availableEncodings;
availableEncodings = GetAvailableEncodings();
encoding = getenv("GNUSTEP_STRING_ENCODING");
if (encoding != 0)
{ {
count++; count = 0;
} while (str_encoding_table[count].enc
if (str_encoding_table[count].enc) && strcmp(str_encoding_table[count].ename,encoding))
{
ret = str_encoding_table[count].enc;
if ((ret == NSUnicodeStringEncoding)
|| (ret == NSUTF8StringEncoding)
|| (ret == NSSymbolStringEncoding))
{ {
fprintf(stderr, "WARNING: %s - encoding not supported as " count++;
"default c string encoding.\n", encoding);
fprintf(stderr, "NSISOLatin1StringEncoding set as default.\n");
ret = NSISOLatin1StringEncoding;
} }
else /*encoding should be supported but is it implemented?*/ if (str_encoding_table[count].enc)
{ {
count = 0; defEnc = str_encoding_table[count].enc;
tmp = 0; if ((defEnc == NSUnicodeStringEncoding)
while (availableEncodings[count] != 0) || (defEnc == NSUTF8StringEncoding)
|| (defEnc == NSSymbolStringEncoding))
{ {
if (ret != availableEncodings[count]) fprintf(stderr, "WARNING: %s - encoding not supported as "
{ "default c string encoding.\n", encoding);
tmp = 0;
}
else
{
tmp = ret;
break;
}
count++;
}
if (tmp == 0 && ret != NSISOLatin1StringEncoding)
{
fprintf(stderr, "WARNING: %s - encoding not yet "
"implemented.\n", encoding);
fprintf(stderr, fprintf(stderr,
"NSISOLatin1StringEncoding set as default.\n"); "NSISOLatin1StringEncoding set as default.\n");
ret = NSISOLatin1StringEncoding; defEnc = NSISOLatin1StringEncoding;
}
else /*encoding should be supported but is it implemented?*/
{
count = 0;
tmp = 0;
while (availableEncodings[count] != 0)
{
if (defEnc != availableEncodings[count])
{
tmp = 0;
}
else
{
tmp = defEnc;
break;
}
count++;
}
if (tmp == 0 && defEnc != NSISOLatin1StringEncoding)
{
fprintf(stderr,
"WARNING: %s - encoding not yet implemented.\n",
encoding);
fprintf(stderr,
"NSISOLatin1StringEncoding set as default.\n");
defEnc = NSISOLatin1StringEncoding;
}
} }
} }
else /* encoding not found */
{
fprintf(stderr,
"WARNING: %s - encoding not supported.\n", encoding);
fprintf(stderr, "NSISOLatin1StringEncoding set as default.\n");
defEnc = NSISOLatin1StringEncoding;
}
} }
else /* encoding not found */ else /* environment var not found */
{ {
fprintf(stderr, "WARNING: %s - encoding not supported.\n", encoding); /* shouldn't be required. It really should be in UserDefaults - asf */
fprintf(stderr, "NSISOLatin1StringEncoding set as default.\n"); //fprintf(stderr, "WARNING: GNUSTEP_STRING_ENCODING environment");
ret = NSISOLatin1StringEncoding; //fprintf(stderr, " variable not found.\n");
//fprintf(stderr, "NSISOLatin1StringEncoding set as default.\n");
defEnc = NSISOLatin1StringEncoding;
} }
} }
else /* environment var not found */ return defEnc;
{
/* shouldn't be required. It really should be in UserDefaults - asf */
//fprintf(stderr,"WARNING: GNUSTEP_STRING_ENCODING environment found\n");
//fprintf(stderr, "NSISOLatin1StringEncoding set as default.\n");
ret = NSISOLatin1StringEncoding;
}
// Cache the encoding
defEnc = ret;
return ret;
} }
NSString* NSString*
@ -621,7 +624,7 @@ chartouni(char c)
{ {
if (defEnc == GSUndefinedEncoding) if (defEnc == GSUndefinedEncoding)
{ {
defEnc = [NSString defaultCStringEncoding]; defEnc = GetDefEncoding();
} }
return encode_chartouni(c, defEnc); return encode_chartouni(c, defEnc);
} }
@ -631,7 +634,7 @@ unitochar(unichar u)
{ {
if (defEnc == GSUndefinedEncoding) if (defEnc == GSUndefinedEncoding)
{ {
defEnc = [NSString defaultCStringEncoding]; defEnc = GetDefEncoding();
} }
return encode_unitochar(u, defEnc); return encode_unitochar(u, defEnc);
} }
@ -641,7 +644,7 @@ strtoustr(unichar *u1, const char *s1, int size)
{ {
if (defEnc == GSUndefinedEncoding) if (defEnc == GSUndefinedEncoding)
{ {
defEnc = [NSString defaultCStringEncoding]; defEnc = GetDefEncoding();
} }
return encode_strtoustr(u1, s1, size, defEnc); return encode_strtoustr(u1, s1, size, defEnc);
@ -652,7 +655,7 @@ ustrtostr(char *s2, unichar *u1, int size)
{ {
if (defEnc == GSUndefinedEncoding) if (defEnc == GSUndefinedEncoding)
{ {
defEnc = [NSString defaultCStringEncoding]; defEnc = GetDefEncoding();
} }
return encode_ustrtostr(s2, u1, size, defEnc); return encode_ustrtostr(s2, u1, size, defEnc);