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