nixpkgs/pkgs/misc/tex/nix/find-includes.pl
Eelco Dolstra 6b35cefbf8 * Find LaTeX document dependencies automatically by scanning for
\input and \documentclass.  Copied from Maak
  (https://svn.cs.uu.nl:12443/repos/pkgs/texwrappers/trunk/chase-latex-inputs.pl).

  TODO: support \bibliography, \usepackage, \includegraphics, etc.

svn path=/nixpkgs/trunk/; revision=3217
2005-06-20 14:25:50 +00:00

57 lines
1.1 KiB
Perl

use strict;
use File::Basename;
my $root = $ENV{"rootFile"};
my $out = $ENV{"out"};
open OUT, ">$out" or die;
print OUT "[\n";
# We search for files relative to the root file. TODO: search
# relative to the paths in $TEXINPUTS.
die unless substr($root, 0, 1) eq "/";
my ($x, $path, $y) = fileparse($root);
$path =~ s/\/$//;
my @workset = ();
my %doneset = ();
push @workset, $root;
while (scalar @workset > 0) {
my $fn = pop @workset;
next if (defined $doneset{$fn});
if (!open FILE, "< $fn") {
print STDERR "(cannot open $fn, ignoring)\n";
next;
};
print OUT "$fn\n";
$doneset{$fn} = 1;
while (<FILE>) {
if (/\\input\{(.*)\}/) {
my $fn2 = $1;
if (substr($fn2, 0, 1) ne "/") {
$fn2 = $path . "/" . $fn2;
}
push @workset, $fn2;
} elsif (/\\documentclass(\[.*\])?\{(.*)\}/) {
my $fn2 = $2;
if (substr($fn2, 0, 1) ne "/") {
$fn2 = $path . "/" . $fn2;
}
push @workset, $fn2 . ".cls";
}
# !!! also support \usepackage
}
close FILE;
}
print OUT "]\n";
close OUT;