From 6b35cefbf8568c48e77b603fffdb23fb7787a62d Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 20 Jun 2005 14:25:50 +0000 Subject: [PATCH] * 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 --- pkgs/misc/tex/nix/find-includes.pl | 56 ++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 pkgs/misc/tex/nix/find-includes.pl diff --git a/pkgs/misc/tex/nix/find-includes.pl b/pkgs/misc/tex/nix/find-includes.pl new file mode 100644 index 00000000000..0066972bb92 --- /dev/null +++ b/pkgs/misc/tex/nix/find-includes.pl @@ -0,0 +1,56 @@ +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 () { + 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;