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