From a54280104db9192ddf6797fd9da6901e65601a2a Mon Sep 17 00:00:00 2001 From: CaS Date: Sat, 15 Dec 2001 09:05:19 +0000 Subject: [PATCH] Improve merging of indexes git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@11762 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 2 ++ Tools/AGSIndex.h | 2 +- Tools/AGSIndex.m | 42 +++++++++++++++++++++++++++++++----------- Tools/autogsdoc.m | 8 ++++---- 4 files changed, 38 insertions(+), 16 deletions(-) diff --git a/ChangeLog b/ChangeLog index 9eebe0cf7..3806448f2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2001-12-15 Richard Frith-Macdonald + * Tools/AGSIndex.h: improve merge control + * Tools/AGSIndex.m: ditto * Tools/AGSHtml.h: new methods for cleaner indexing. * Tools/AGSHtml.m: new methods for cleaner indexing. * Tools/AGSParser.m: minor bugfixes. diff --git a/Tools/AGSIndex.h b/Tools/AGSIndex.h index 793bb6e22..d84cf1d30 100644 --- a/Tools/AGSIndex.h +++ b/Tools/AGSIndex.h @@ -33,7 +33,7 @@ } - (NSString*) globalRef: (NSString*)ref type: (NSString*)type; - (void) makeRefs: (GSXMLNode*)node; -- (void) mergeRefs: (NSDictionary*)more; +- (void) mergeRefs: (NSDictionary*)more override: (BOOL)flag; - (NSMutableDictionary*) refs; - (void) setDirectory: (NSString*)path; - (void) setGlobalRef: (NSString*)ref type: (NSString*)type; diff --git a/Tools/AGSIndex.m b/Tools/AGSIndex.m index 40afafaaa..07b01c8cd 100644 --- a/Tools/AGSIndex.m +++ b/Tools/AGSIndex.m @@ -28,7 +28,7 @@ static int XML_ELEMENT_NODE; static int XML_TEXT_NODE; static void -mergeDictionaries(NSMutableDictionary *dst, NSDictionary *src) +mergeDictionaries(NSMutableDictionary *dst, NSDictionary *src, BOOL override) { static NSMutableArray *stack = nil; NSEnumerator *e = [src keyEnumerator]; @@ -64,20 +64,35 @@ mergeDictionaries(NSMutableDictionary *dst, NSDictionary *src) } if (d != nil) { - if ([d isKindOfClass: [s class]] == NO) + if ([d isKindOfClass: [NSString class]] == YES) { - NSLog(@"Class missmatch in merge for %@", stack); - } - else if ([d isKindOfClass: [NSString class]] == YES) - { - if ([d isEqual: s] == NO) + if ([s isKindOfClass: [NSString class]] == NO) { - NSLog(@"String missmatch in merge for %@", stack); + NSLog(@"Class missmatch in merge for %@.", stack); + } + else if ([d isEqual: s] == NO) + { + if (override == YES) + { + [dst setObject: s forKey: k]; + } + else + { + NSLog(@"String missmatch in merge for %@. S:%@, D:%@", + stack, s, d); + } } } else if ([d isKindOfClass: [NSDictionary class]] == YES) { - mergeDictionaries(d, s); + if ([s isKindOfClass: [NSDictionary class]] == NO) + { + NSLog(@"Class missmatch in merge for %@.", stack); + } + else + { + mergeDictionaries(d, s, override); + } } } [stack removeLastObject]; @@ -329,9 +344,14 @@ setDirectory(NSMutableDictionary *dict, NSString *path) } } -- (void) mergeRefs: (NSDictionary*)more +/** + * Merge a dictionary containing references into the current + * index. The flag may be used to specify that references + * being merged in should override any pre-existing values. + */ +- (void) mergeRefs: (NSDictionary*)more override: (BOOL)flag { - mergeDictionaries(refs, more); + mergeDictionaries(refs, more, flag); } - (NSMutableDictionary*) refs diff --git a/Tools/autogsdoc.m b/Tools/autogsdoc.m index 47c77ea6a..8b6d0a576 100644 --- a/Tools/autogsdoc.m +++ b/Tools/autogsdoc.m @@ -438,7 +438,7 @@ main(int argc, char **argv, char **env) NSString *p; tmp = [AGSIndex new]; - [tmp mergeRefs: dict]; + [tmp mergeRefs: dict override: NO]; RELEASE(dict); /* * Adjust path to external project files ... @@ -449,7 +449,7 @@ main(int argc, char **argv, char **env) p = [k stringByDeletingLastPathComponent]; } [tmp setDirectory: p]; - [indexer mergeRefs: [tmp refs]]; + [indexer mergeRefs: [tmp refs] override: NO]; RELEASE(tmp); } } @@ -664,7 +664,7 @@ main(int argc, char **argv, char **env) /* * accumulate index info in project references */ - [prjRefs mergeRefs: [locRefs refs]]; + [prjRefs mergeRefs: [locRefs refs] override: NO]; } else if (isDocumentation) { @@ -681,7 +681,7 @@ main(int argc, char **argv, char **env) /* * accumulate project index info into global index */ - [indexer mergeRefs: [prjRefs refs]]; + [indexer mergeRefs: [prjRefs refs] override: YES]; for (i = 1; i < [args count]; i++) {