diff --git a/Tools/AGSHtml.h b/Tools/AGSHtml.h
index 8213d14df..9621ea744 100644
--- a/Tools/AGSHtml.h
+++ b/Tools/AGSHtml.h
@@ -35,6 +35,10 @@
NSString *nextFile; // Not retained
NSString *prevFile; // Not retained
NSString *upFile; // Not retained
+ unsigned chap;
+ unsigned sect;
+ unsigned ssect;
+ unsigned sssect;
}
- (void) decIndent;
- (void) incIndent;
diff --git a/Tools/AGSHtml.m b/Tools/AGSHtml.m
index c6091cb02..1afb504d0 100644
--- a/Tools/AGSHtml.m
+++ b/Tools/AGSHtml.m
@@ -344,6 +344,10 @@ static NSMutableSet *textNodes = nil;
else if ([name isEqual: @"chapter"] == YES)
{
heading = @"h1";
+ chap++;
+ sect = 0;
+ ssect = 0;
+ sssect = 0;
[self outputNodeList: children to: buf];
}
else if ([name isEqual: @"class"] == YES)
@@ -372,6 +376,98 @@ static NSMutableSet *textNodes = nil;
[self outputText: children to: buf];
[buf appendString: @""];
}
+ else if ([name isEqual: @"contents"] == YES)
+ {
+ NSDictionary *dict;
+
+ dict = [[localRefs refs] objectForKey: @"contents"];
+ if ([dict count] > 0)
+ {
+ NSArray *a;
+ unsigned i;
+ unsigned l = 0;
+
+ [buf appendString: indent];
+ [buf appendString: @"
\n"];
+ [buf appendString: indent];
+ [buf appendString: @"Contents -
\n"];
+
+ a = [dict allKeys];
+ a = [a sortedArrayUsingSelector: @selector(compare:)];
+ for (i = 0; i < [a count]; i++)
+ {
+ NSString *k = [a objectAtIndex: i];
+ NSString *v = [dict objectForKey: k];
+ unsigned pos = 3;
+
+ if ([k hasSuffix: @"000"] == YES)
+ {
+ pos = 2;
+ if ([k hasSuffix: @"000000"] == YES)
+ {
+ pos = 1;
+ if ([k hasSuffix: @"000"] == YES)
+ {
+ pos = 0;
+ }
+ }
+ if (l == pos)
+ {
+ [buf appendString: indent];
+ [buf appendString: @"\n"];
+ [self incIndent];
+ }
+ else
+ {
+ while (l > pos + 1)
+ {
+ [self decIndent];
+ [buf appendString: indent];
+ [buf appendString: @"\n"];
+ [self decIndent];
+ [buf appendString: indent];
+ [buf appendString: @"
\n"];
+ l--;
+ }
+ if (l == pos + 1)
+ {
+ [self decIndent];
+ [buf appendString: indent];
+ [buf appendString: @"\n"];
+ l--;
+ }
+ }
+ }
+ [buf appendString: indent];
+ [buf appendString: @"\n"];
+ [self incIndent];
+ [buf appendString: indent];
+ [buf appendFormat: @"%@\n", k, v];
+ if (pos == 3)
+ {
+ [self decIndent];
+ [buf appendString: indent];
+ [buf appendString: @"\n"];
+ }
+ else
+ {
+ l++;
+ }
+ }
+ while (l > 0)
+ {
+ [self decIndent];
+ [buf appendString: indent];
+ [buf appendString: @"\n"];
+ [self decIndent];
+ [buf appendString: indent];
+ [buf appendString: @"\n"];
+ l--;
+ }
+ [buf appendString: indent];
+ [buf appendString: @"
\n"];
+ }
+ }
else if ([name isEqual: @"desc"] == YES)
{
[buf appendString: indent];
@@ -609,8 +705,10 @@ static NSMutableSet *textNodes = nil;
[buf appendString: @"<"];
[buf appendString: heading];
[buf appendString: @">"];
+ [buf appendFormat: @"",
+ chap, sect, ssect, sssect];
[self outputText: children to: buf];
- [buf appendString: @""];
+ [buf appendString: @""];
[buf appendString: heading];
[buf appendString: @">\n"];
}
@@ -856,6 +954,9 @@ NSLog(@"Element '%@' not implemented", name); // FIXME
else if ([name isEqual: @"section"] == YES)
{
heading = @"h2";
+ sect++;
+ ssect = 0;
+ sssect = 0;
[self outputNodeList: children to: buf];
}
else if ([name isEqual: @"site"] == YES)
@@ -873,11 +974,14 @@ NSLog(@"Element '%@' not implemented", name); // FIXME
else if ([name isEqual: @"subsect"] == YES)
{
heading = @"h3";
+ ssect++;
+ sssect = 0;
[self outputNodeList: children to: buf];
}
else if ([name isEqual: @"subsubsect"] == YES)
{
heading = @"h4";
+ sssect++;
[self outputNodeList: children to: buf];
}
else if ([name isEqual: @"type"] == YES)
diff --git a/Tools/AGSIndex.h b/Tools/AGSIndex.h
index 6e391ce00..d99e649a7 100644
--- a/Tools/AGSIndex.h
+++ b/Tools/AGSIndex.h
@@ -29,6 +29,10 @@
NSMutableDictionary *refs;
NSString *base; // Not retained
NSString *unit; // Not retained
+ unsigned chap;
+ unsigned sect;
+ unsigned ssect;
+ unsigned sssect;
}
- (NSString*) globalRef: (NSString*)ref type: (NSString*)type;
- (void) makeRefs: (GSXMLNode*)node;
diff --git a/Tools/AGSIndex.m b/Tools/AGSIndex.m
index 7373e4181..01ee62927 100644
--- a/Tools/AGSIndex.m
+++ b/Tools/AGSIndex.m
@@ -32,6 +32,8 @@ mergeDictionaries(NSMutableDictionary *dst, NSDictionary *src, BOOL override)
static NSMutableArray *stack = nil;
NSEnumerator *e = [src keyEnumerator];
NSString *k;
+ id s;
+ id d;
if (stack == nil)
{
@@ -39,8 +41,12 @@ mergeDictionaries(NSMutableDictionary *dst, NSDictionary *src, BOOL override)
}
while ((k = [e nextObject]) != nil)
{
- id s = [src objectForKey: k];
- id d = [dst objectForKey: k];
+ if ([k isEqualToString: @"contents"] == YES)
+ {
+ continue; // Makes no sense to merge file contents.
+ }
+ s = [src objectForKey: k];
+ d = [dst objectForKey: k];
[stack addObject: k];
if (d == nil)
@@ -195,6 +201,13 @@ setDirectory(NSMutableDictionary *dict, NSString *path)
[self setGlobalRef: unit type: name];
}
+ else if ([name isEqual: @"chapter"] == YES)
+ {
+ chap++;
+ sect = 0;
+ ssect = 0;
+ sssect = 0;
+ }
else if ([name isEqual: @"class"] == YES)
{
NSString *tmp;
@@ -218,6 +231,24 @@ setDirectory(NSMutableDictionary *dict, NSString *path)
return;
}
}
+ else if ([name isEqual: @"heading"] == YES)
+ {
+ NSMutableDictionary *d;
+ NSString *k;
+
+ d = [refs objectForKey: @"contents"];
+ if (d == nil)
+ {
+ d = [[NSMutableDictionary alloc] initWithCapacity: 8];
+ [refs setObject: d forKey: @"contents"];
+ RELEASE(d);
+ }
+
+ k = [NSString stringWithFormat: @"%03u%03u%03u%03u",
+ chap, sect, ssect, sssect];
+ [d setObject: [[children content] stringByTrimmingSpaces] forKey: k];
+ children = nil;
+ }
else if ([name isEqual: @"ivariable"] == YES)
{
NSString *tmp = [prop objectForKey: @"name"];
@@ -231,7 +262,7 @@ setDirectory(NSMutableDictionary *dict, NSString *path)
NSString *text;
NSString *val;
- text = [children content];
+ text = [[children content] stringByTrimmingSpaces];
children = nil;
all = [refs objectForKey: name];
if (all == nil)
@@ -281,7 +312,8 @@ setDirectory(NSMutableDictionary *dict, NSString *path)
{
if ([t type] == XML_TEXT_NODE)
{
- sel = [sel stringByAppendingString: [t content]];
+ sel = [sel stringByAppendingString:
+ [[t content] stringByTrimmingSpaces]];
}
t = [t next];
}
@@ -324,6 +356,21 @@ setDirectory(NSMutableDictionary *dict, NSString *path)
[self setGlobalRef: tmp type: name];
}
+ else if ([name isEqual: @"section"] == YES)
+ {
+ sect++;
+ ssect = 0;
+ sssect = 0;
+ }
+ else if ([name isEqual: @"subsect"] == YES)
+ {
+ ssect++;
+ sssect = 0;
+ }
+ else if ([name isEqual: @"subsubsect"] == YES)
+ {
+ sssect++;
+ }
else
{
}
diff --git a/Tools/AGSOutput.m b/Tools/AGSOutput.m
index ea35fd502..5eeba5344 100644
--- a/Tools/AGSOutput.m
+++ b/Tools/AGSOutput.m
@@ -323,7 +323,11 @@ static BOOL snuggleStart(NSString *t)
// Output document forward if available.
tmp = [info objectForKey: @"front"];
- if (tmp != nil)
+ if (tmp == nil)
+ {
+ [self reformat: @"" withIndent: 4 to: str];
+ }
+ else
{
[self reformat: tmp withIndent: 4 to: str];
}