mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-22 16:33:29 +00:00
Tidied PL handling
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@15139 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
97ee138a2b
commit
4459611bde
5 changed files with 73 additions and 37 deletions
|
@ -4,6 +4,8 @@
|
|||
from NSObjCRuntime, plus renamed behavior functions, plus a few other
|
||||
runtime manipulation functions. EXPERIMENTAL
|
||||
* Headers/gnustep/base/GSObjCRuntime.h: declarations for above.
|
||||
* Source/GSCompatibility.m: Don't use new format plists when writing
|
||||
descriptions.
|
||||
|
||||
2002-11-26 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
|
|
|
@ -446,21 +446,24 @@ static NSString *indentStrings[] = {
|
|||
@"\t\t\t\t\t\t"
|
||||
};
|
||||
|
||||
#define PLNEW 0
|
||||
#define PLXML 1
|
||||
#define PLOLD 2
|
||||
/**
|
||||
* obj is the object to be written out<br />
|
||||
* loc is the locale for formatting (or nil to indicate no formatting)<br />
|
||||
* lev is the level of indentation to use<br />
|
||||
* step is the indentation step (0 == 0, 1 = 2, 2 = 4, 3 = 8)<br />
|
||||
* x is a flag to indicate xml property list format<br />
|
||||
* x is an indicator for xml or old/new openstep property list format<br />
|
||||
* dest is the output buffer.
|
||||
*/
|
||||
static void
|
||||
OAppend(id obj, NSDictionary *loc, unsigned lev, unsigned step,
|
||||
BOOL x, GSMutableString *dest)
|
||||
int x, GSMutableString *dest)
|
||||
{
|
||||
if ([obj isKindOfClass: [NSString class]])
|
||||
{
|
||||
if (x == YES)
|
||||
if (x == PLXML)
|
||||
{
|
||||
Append(@"<string>", dest);
|
||||
XString(obj, dest);
|
||||
|
@ -477,60 +480,76 @@ OAppend(id obj, NSDictionary *loc, unsigned lev, unsigned step,
|
|||
|
||||
if (val == 1.0)
|
||||
{
|
||||
if (x)
|
||||
if (x == PLXML)
|
||||
{
|
||||
Append(@"<true/>\n", dest);
|
||||
}
|
||||
else
|
||||
else if (x == PLNEW)
|
||||
{
|
||||
Append(@"<*BY>", dest);
|
||||
}
|
||||
else
|
||||
{
|
||||
PString([obj description], dest);
|
||||
}
|
||||
}
|
||||
else if (val == 0.0)
|
||||
{
|
||||
if (x)
|
||||
if (x == PLXML)
|
||||
{
|
||||
Append(@"<false/>\n", dest);
|
||||
}
|
||||
else
|
||||
else if (x == PLNEW)
|
||||
{
|
||||
Append(@"<*BN>", dest);
|
||||
}
|
||||
else
|
||||
{
|
||||
PString([obj description], dest);
|
||||
}
|
||||
}
|
||||
else if (rint(val) == val)
|
||||
{
|
||||
if (x == YES)
|
||||
if (x == PLXML)
|
||||
{
|
||||
Append(@"<integer>", dest);
|
||||
XString([obj stringValue], dest);
|
||||
Append(@"</integer>\n", dest);
|
||||
}
|
||||
else
|
||||
else if (x == PLNEW)
|
||||
{
|
||||
Append(@"<*I", dest);
|
||||
PString([obj stringValue], dest);
|
||||
Append(@">", dest);
|
||||
}
|
||||
else
|
||||
{
|
||||
PString([obj description], dest);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (x == YES)
|
||||
if (x == PLXML)
|
||||
{
|
||||
Append(@"<real>", dest);
|
||||
XString([obj stringValue], dest);
|
||||
Append(@"</real>\n", dest);
|
||||
}
|
||||
else
|
||||
else if (x == PLNEW)
|
||||
{
|
||||
Append(@"<*R", dest);
|
||||
PString([obj stringValue], dest);
|
||||
Append(@">", dest);
|
||||
}
|
||||
else
|
||||
{
|
||||
PString([obj description], dest);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ([obj isKindOfClass: [NSData class]])
|
||||
{
|
||||
if (x == YES)
|
||||
if (x == PLXML)
|
||||
{
|
||||
Append(@"<data>", dest);
|
||||
Append(encodeBase64(obj), dest);
|
||||
|
@ -573,20 +592,24 @@ OAppend(id obj, NSDictionary *loc, unsigned lev, unsigned step,
|
|||
}
|
||||
else if ([obj isKindOfClass: [NSDate class]])
|
||||
{
|
||||
if (x == YES)
|
||||
if (x == PLXML)
|
||||
{
|
||||
Append(@"<date>", dest);
|
||||
Append([obj descriptionWithCalendarFormat: @"%Y-%m-%d %H:%M:%S %z"
|
||||
timeZone: nil locale: nil], dest);
|
||||
Append(@"</date>\n", dest);
|
||||
}
|
||||
else
|
||||
else if (x == PLNEW)
|
||||
{
|
||||
Append(@"<*D", dest);
|
||||
Append([obj descriptionWithCalendarFormat: @"%Y-%m-%d %H:%M:%S %z"
|
||||
timeZone: nil locale: nil], dest);
|
||||
Append(@">", dest);
|
||||
}
|
||||
else
|
||||
{
|
||||
PString([obj description], dest);
|
||||
}
|
||||
}
|
||||
else if ([obj isKindOfClass: [NSArray class]])
|
||||
{
|
||||
|
@ -614,7 +637,7 @@ OAppend(id obj, NSDictionary *loc, unsigned lev, unsigned step,
|
|||
= indentStrings[sizeof(indentStrings)/sizeof(id)-1];
|
||||
}
|
||||
|
||||
if (x == YES)
|
||||
if (x == PLXML)
|
||||
{
|
||||
NSEnumerator *e;
|
||||
|
||||
|
@ -623,7 +646,7 @@ OAppend(id obj, NSDictionary *loc, unsigned lev, unsigned step,
|
|||
while ((obj = [e nextObject]))
|
||||
{
|
||||
Append(iSizeString, dest);
|
||||
OAppend(obj, loc, level, step, YES, dest);
|
||||
OAppend(obj, loc, level, step, x, dest);
|
||||
}
|
||||
Append(iBaseString, dest);
|
||||
Append(@"</array>\n", dest);
|
||||
|
@ -701,7 +724,7 @@ OAppend(id obj, NSDictionary *loc, unsigned lev, unsigned step,
|
|||
= indentStrings[sizeof(indentStrings)/sizeof(id)-1];
|
||||
}
|
||||
|
||||
if (x == YES)
|
||||
if (x == PLXML)
|
||||
{
|
||||
NSEnumerator *e;
|
||||
id key;
|
||||
|
@ -873,7 +896,7 @@ OAppend(id obj, NSDictionary *loc, unsigned lev, unsigned step,
|
|||
{
|
||||
NSDebugLog(@"Non-property-list class (%@) encoded as string",
|
||||
NSStringFromClass([obj class]));
|
||||
if (x == YES)
|
||||
if (x == PLXML)
|
||||
{
|
||||
Append(@"<string>", dest);
|
||||
XString([obj description], dest);
|
||||
|
@ -887,9 +910,11 @@ OAppend(id obj, NSDictionary *loc, unsigned lev, unsigned step,
|
|||
}
|
||||
|
||||
void
|
||||
GSPropertyListMake(id obj, NSDictionary *loc, BOOL xml, unsigned step, id *str)
|
||||
GSPropertyListMake(id obj, NSDictionary *loc, BOOL xml,
|
||||
BOOL forDescription, unsigned step, id *str)
|
||||
{
|
||||
GSMutableString *dest;
|
||||
int style = PLNEW;
|
||||
|
||||
if (plQuotablesBitmapRep == NULL)
|
||||
{
|
||||
|
@ -942,10 +967,19 @@ GSPropertyListMake(id obj, NSDictionary *loc, BOOL xml, unsigned step, id *str)
|
|||
"PUBLIC \"-//GNUstep//DTD plist 0.9//EN\" "
|
||||
"\"http://www.gnustep.org/plist-0_9.xml\">\n"
|
||||
"<plist version=\"0.9\">\n"], dest);
|
||||
style = PLXML;
|
||||
}
|
||||
else if (forDescription || GSUserDefaultsFlag(NSWriteOldStylePropertyLists))
|
||||
{
|
||||
style = PLOLD;
|
||||
}
|
||||
else
|
||||
{
|
||||
style = PLNEW;
|
||||
}
|
||||
|
||||
OAppend(obj, loc, 0, step > 3 ? 3 : step, xml, dest);
|
||||
if (xml == YES)
|
||||
OAppend(obj, loc, 0, step > 3 ? 3 : step, style, dest);
|
||||
if (style == PLXML)
|
||||
{
|
||||
Append(@"</plist>", dest);
|
||||
}
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
#include "GSPrivate.h"
|
||||
|
||||
extern BOOL GSMacOSXCompatiblePropertyLists(void);
|
||||
extern void GSPropertyListMake(id, NSDictionary*, BOOL, unsigned, id*);
|
||||
extern void GSPropertyListMake(id,NSDictionary*,BOOL,BOOL,unsigned,id*);
|
||||
|
||||
@class NSArrayEnumerator;
|
||||
@class NSArrayEnumeratorReverse;
|
||||
|
@ -997,7 +997,7 @@ static int compare(id elem1, id elem2, void* context)
|
|||
{
|
||||
NSString *result = nil;
|
||||
|
||||
GSPropertyListMake(self, locale, NO, level == 1 ? 3 : 2, &result);
|
||||
GSPropertyListMake(self, locale, NO, YES, level == 1 ? 3 : 2, &result);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
@ -1032,11 +1032,11 @@ static int compare(id elem1, id elem2, void* context)
|
|||
|
||||
if (GSMacOSXCompatiblePropertyLists() == YES)
|
||||
{
|
||||
GSPropertyListMake(self, loc, YES, 2, &desc);
|
||||
GSPropertyListMake(self, loc, YES, NO, 2, &desc);
|
||||
}
|
||||
else
|
||||
{
|
||||
GSPropertyListMake(self, loc, NO, 2, &desc);
|
||||
GSPropertyListMake(self, loc, NO, NO, 2, &desc);
|
||||
}
|
||||
|
||||
return [[desc dataUsingEncoding: NSUTF8StringEncoding]
|
||||
|
@ -1056,11 +1056,11 @@ static int compare(id elem1, id elem2, void* context)
|
|||
|
||||
if (GSMacOSXCompatiblePropertyLists() == YES)
|
||||
{
|
||||
GSPropertyListMake(self, loc, YES, 2, &desc);
|
||||
GSPropertyListMake(self, loc, YES, NO, 2, &desc);
|
||||
}
|
||||
else
|
||||
{
|
||||
GSPropertyListMake(self, loc, NO, 2, &desc);
|
||||
GSPropertyListMake(self, loc, NO, NO, 2, &desc);
|
||||
}
|
||||
|
||||
return [[desc dataUsingEncoding: NSUTF8StringEncoding]
|
||||
|
|
|
@ -678,10 +678,10 @@ failure:
|
|||
|
||||
- (NSString*) description
|
||||
{
|
||||
extern void GSPropertyListMake(id, NSDictionary*, BOOL, unsigned, id*);
|
||||
extern void GSPropertyListMake(id,NSDictionary*,BOOL,BOOL,unsigned,id*);
|
||||
NSMutableString *result = nil;
|
||||
|
||||
GSPropertyListMake(self, nil, NO, 0, &result);
|
||||
GSPropertyListMake(self, nil, NO, YES, 0, &result);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
@class GSMutableDictionary;
|
||||
|
||||
extern BOOL GSMacOSXCompatiblePropertyLists(void);
|
||||
extern void GSPropertyListMake(id, NSDictionary*, BOOL, unsigned, id*);
|
||||
extern void GSPropertyListMake(id,NSDictionary*,BOOL,BOOL,unsigned,id*);
|
||||
|
||||
|
||||
static Class NSArray_class;
|
||||
|
@ -746,11 +746,11 @@ compareIt(id o1, id o2, void* context)
|
|||
|
||||
if (GSMacOSXCompatiblePropertyLists() == YES)
|
||||
{
|
||||
GSPropertyListMake(self, loc, YES, 2, &desc);
|
||||
GSPropertyListMake(self, loc, YES, NO, 2, &desc);
|
||||
}
|
||||
else
|
||||
{
|
||||
GSPropertyListMake(self, loc, NO, 2, &desc);
|
||||
GSPropertyListMake(self, loc, NO, NO, 2, &desc);
|
||||
}
|
||||
|
||||
return [[desc dataUsingEncoding: NSUTF8StringEncoding]
|
||||
|
@ -770,11 +770,11 @@ compareIt(id o1, id o2, void* context)
|
|||
|
||||
if (GSMacOSXCompatiblePropertyLists() == YES)
|
||||
{
|
||||
GSPropertyListMake(self, loc, YES, 2, &desc);
|
||||
GSPropertyListMake(self, loc, YES, NO, 2, &desc);
|
||||
}
|
||||
else
|
||||
{
|
||||
GSPropertyListMake(self, loc, NO, 2, &desc);
|
||||
GSPropertyListMake(self, loc, NO, NO, 2, &desc);
|
||||
}
|
||||
|
||||
return [[desc dataUsingEncoding: NSUTF8StringEncoding]
|
||||
|
@ -807,11 +807,11 @@ compareIt(id o1, id o2, void* context)
|
|||
{
|
||||
id val = (*myObj)(self, objSel, key);
|
||||
|
||||
GSPropertyListMake(key, nil, NO, 0, &result);
|
||||
GSPropertyListMake(key, nil, NO, YES, 0, &result);
|
||||
if (val != nil && [val isEqualToString: @""] == NO)
|
||||
{
|
||||
[result appendString: @" = "];
|
||||
GSPropertyListMake(val, nil, NO, 0, &result);
|
||||
GSPropertyListMake(val, nil, NO, YES, 0, &result);
|
||||
}
|
||||
[result appendString: @";\n"];
|
||||
}
|
||||
|
@ -844,7 +844,7 @@ compareIt(id o1, id o2, void* context)
|
|||
{
|
||||
NSMutableString *result = nil;
|
||||
|
||||
GSPropertyListMake(self, locale, NO, level == 1 ? 3 : 2, &result);
|
||||
GSPropertyListMake(self, locale, NO, YES, level == 1 ? 3 : 2, &result);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue