diff --git a/ChangeLog b/ChangeLog index 98147dcc3..261f25414 100644 --- a/ChangeLog +++ b/ChangeLog @@ -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 diff --git a/Source/GSCompatibility.m b/Source/GSCompatibility.m index 1c0c96262..75e770e33 100644 --- a/Source/GSCompatibility.m +++ b/Source/GSCompatibility.m @@ -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
* loc is the locale for formatting (or nil to indicate no formatting)
* lev is the level of indentation to use
* step is the indentation step (0 == 0, 1 = 2, 2 = 4, 3 = 8)
- * x is a flag to indicate xml property list format
+ * x is an indicator for xml or old/new openstep property list format
* 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(@"", 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(@"\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(@"\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(@"", dest); XString([obj stringValue], dest); Append(@"\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(@"", dest); XString([obj stringValue], dest); Append(@"\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(@"", 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(@"", dest); Append([obj descriptionWithCalendarFormat: @"%Y-%m-%d %H:%M:%S %z" timeZone: nil locale: nil], dest); Append(@"\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(@"\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(@"", 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" "\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(@"", dest); } diff --git a/Source/NSArray.m b/Source/NSArray.m index 7765ccbe7..e692dfdd1 100644 --- a/Source/NSArray.m +++ b/Source/NSArray.m @@ -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] diff --git a/Source/NSData.m b/Source/NSData.m index 427f7f54e..4caebeacf 100644 --- a/Source/NSData.m +++ b/Source/NSData.m @@ -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; } diff --git a/Source/NSDictionary.m b/Source/NSDictionary.m index 1798a7b41..7144b4cb2 100644 --- a/Source/NSDictionary.m +++ b/Source/NSDictionary.m @@ -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; }