Added lhs2TeX support to LaTeX builder.
svn path=/nixpkgs/trunk/; revision=16439
This commit is contained in:
parent
9f59fb9377
commit
5164d2ec62
@ -76,6 +76,29 @@ rec {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
findLhs2TeXIncludes =
|
||||||
|
{ rootFile
|
||||||
|
}:
|
||||||
|
|
||||||
|
builtins.genericClosure {
|
||||||
|
startSet = [{key = rootFile;}];
|
||||||
|
|
||||||
|
operator =
|
||||||
|
{key, ...}:
|
||||||
|
|
||||||
|
let
|
||||||
|
|
||||||
|
trace = x: builtins.trace x x;
|
||||||
|
|
||||||
|
deps = import (pkgs.runCommand "lhs2tex-includes"
|
||||||
|
{ src = trace key; }
|
||||||
|
"${pkgs.stdenv.bash}/bin/bash ${./find-lhs2tex-includes.sh}");
|
||||||
|
|
||||||
|
in pkgs.lib.concatMap (x : if builtins.pathExists x then [{key = x;}]
|
||||||
|
else builtins.trace ("not found: ${toString x}") [])
|
||||||
|
(map (x : trace "${dirOf key}/${x}") deps);
|
||||||
|
};
|
||||||
|
|
||||||
dot2pdf =
|
dot2pdf =
|
||||||
{ dotGraph
|
{ dotGraph
|
||||||
}:
|
}:
|
||||||
@ -103,6 +126,17 @@ rec {
|
|||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
lhs2tex =
|
||||||
|
{ source, flags ? null } :
|
||||||
|
pkgs.stdenv.mkDerivation {
|
||||||
|
name = "tex";
|
||||||
|
builder = ./lhs2tex.sh;
|
||||||
|
inherit source flags;
|
||||||
|
buildInputs = [ pkgs.lhs2tex pkgs.perl ];
|
||||||
|
copyIncludes = ./copy-includes.pl;
|
||||||
|
includes = map (x: [x.key (baseNameOf (toString x.key))])
|
||||||
|
(findLhs2TeXIncludes {rootFile = source;});
|
||||||
|
};
|
||||||
|
|
||||||
animateDot = dotGraph: nrFrames: pkgs.stdenv.mkDerivation {
|
animateDot = dotGraph: nrFrames: pkgs.stdenv.mkDerivation {
|
||||||
name = "dot-frames";
|
name = "dot-frames";
|
||||||
|
@ -20,6 +20,14 @@ while (<FILE>) {
|
|||||||
my $fn2 = $1;
|
my $fn2 = $1;
|
||||||
die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/";
|
die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/";
|
||||||
addName "tex", "$fn2";
|
addName "tex", "$fn2";
|
||||||
|
} elsif (/\\input (.*)$/) {
|
||||||
|
my $fn2 = $1;
|
||||||
|
die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/";
|
||||||
|
addName "tex", "$fn2";
|
||||||
|
} elsif (/\\RequirePackage(\[.*\])?\{(.*)\}/) {
|
||||||
|
my $fn2 = $2;
|
||||||
|
die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/";
|
||||||
|
addName "misc", "$fn2.sty";
|
||||||
} elsif (/\\usepackage(\[.*\])?\{(.*)\}/) {
|
} elsif (/\\usepackage(\[.*\])?\{(.*)\}/) {
|
||||||
my $fn2 = $2;
|
my $fn2 = $2;
|
||||||
die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/";
|
die "absolute path! $fn2" if substr($fn2, 0, 1) eq "/";
|
||||||
|
3
pkgs/misc/tex/nix/find-lhs2tex-includes.sh
Normal file
3
pkgs/misc/tex/nix/find-lhs2tex-includes.sh
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
echo '[' > $out
|
||||||
|
grep '^%include ' $src | cut -d ' ' -f 2 | sed 's/^\(.*\)$/"\1"/' >> $out
|
||||||
|
echo ']' >> $out
|
19
pkgs/misc/tex/nix/lhs2tex.sh
Normal file
19
pkgs/misc/tex/nix/lhs2tex.sh
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
source $stdenv/setup
|
||||||
|
|
||||||
|
ensureDir $out
|
||||||
|
|
||||||
|
mkdir root
|
||||||
|
cd root
|
||||||
|
|
||||||
|
startDir=$(perl $copyIncludes $includes)
|
||||||
|
cd $startDir
|
||||||
|
|
||||||
|
lhstex() {
|
||||||
|
sourceFile=$1
|
||||||
|
targetName=$out/$(basename $(stripHash $sourceFile; echo $strippedName) .lhs).tex
|
||||||
|
echo "converting $sourceFile to $targetName..."
|
||||||
|
lhs2TeX -o "$targetName" $flags "$sourceFile"
|
||||||
|
}
|
||||||
|
|
||||||
|
lhstex $source
|
||||||
|
|
@ -7871,6 +7871,7 @@ let
|
|||||||
|
|
||||||
texFunctions = import ../misc/tex/nix {
|
texFunctions = import ../misc/tex/nix {
|
||||||
inherit stdenv perl tetex graphviz ghostscript makeFontsConf imagemagick runCommand lib;
|
inherit stdenv perl tetex graphviz ghostscript makeFontsConf imagemagick runCommand lib;
|
||||||
|
inherit (haskellPackages) lhs2tex;
|
||||||
};
|
};
|
||||||
|
|
||||||
texLive = builderDefsPackage (import ../misc/tex/texlive) {
|
texLive = builderDefsPackage (import ../misc/tex/texlive) {
|
||||||
|
Loading…
Reference in New Issue
Block a user