1*a81df63aSIan Rogers#!/usr/bin/perl
2*a81df63aSIan Rogers
3*a81df63aSIan Rogersmy %include = ();
4*a81df63aSIan Rogersmy %included = ();
5*a81df63aSIan Rogers
6*a81df63aSIan Rogersfor my $text (<*.txt>) {
7*a81df63aSIan Rogers    open I, '<', $text || die "cannot read: $text";
8*a81df63aSIan Rogers    while (<I>) {
9*a81df63aSIan Rogers	if (/^include::/) {
10*a81df63aSIan Rogers	    chomp;
11*a81df63aSIan Rogers	    s/^include::\s*//;
12*a81df63aSIan Rogers	    s/\[\]//;
13*a81df63aSIan Rogers	    $include{$text}{$_} = 1;
14*a81df63aSIan Rogers	    $included{$_} = 1;
15*a81df63aSIan Rogers	}
16*a81df63aSIan Rogers    }
17*a81df63aSIan Rogers    close I;
18*a81df63aSIan Rogers}
19*a81df63aSIan Rogers
20*a81df63aSIan Rogers# Do we care about chained includes???
21*a81df63aSIan Rogersmy $changed = 1;
22*a81df63aSIan Rogerswhile ($changed) {
23*a81df63aSIan Rogers    $changed = 0;
24*a81df63aSIan Rogers    while (my ($text, $included) = each %include) {
25*a81df63aSIan Rogers	for my $i (keys %$included) {
26*a81df63aSIan Rogers	    # $text has include::$i; if $i includes $j
27*a81df63aSIan Rogers	    # $text indirectly includes $j.
28*a81df63aSIan Rogers	    if (exists $include{$i}) {
29*a81df63aSIan Rogers		for my $j (keys %{$include{$i}}) {
30*a81df63aSIan Rogers		    if (!exists $include{$text}{$j}) {
31*a81df63aSIan Rogers			$include{$text}{$j} = 1;
32*a81df63aSIan Rogers			$included{$j} = 1;
33*a81df63aSIan Rogers			$changed = 1;
34*a81df63aSIan Rogers		    }
35*a81df63aSIan Rogers		}
36*a81df63aSIan Rogers	    }
37*a81df63aSIan Rogers	}
38*a81df63aSIan Rogers    }
39*a81df63aSIan Rogers}
40*a81df63aSIan Rogers
41*a81df63aSIan Rogerswhile (my ($text, $included) = each %include) {
42*a81df63aSIan Rogers    if (! exists $included{$text} &&
43*a81df63aSIan Rogers	(my $base = $text) =~ s/\.txt$//) {
44*a81df63aSIan Rogers	print "$base.html $base.xml : ", join(" ", keys %$included), "\n";
45*a81df63aSIan Rogers    }
46*a81df63aSIan Rogers}
47