194 lines
6.7 KiB
Nix
194 lines
6.7 KiB
Nix
{ bibliography, chemistry, core, document, glossaries, ... } @ libs:
|
|
{ configuration, content, date, dependencies, language ? "eng", name, place, resources, ... } @ document:
|
|
let
|
|
inherit(core) debug indentation library list path string time;
|
|
|
|
renderBeginDocument = library.import ./beginDocument.nix libs';
|
|
renderEnclosures = library.import ./enclosures.nix libs';
|
|
renderLetter = library.import ./letter.nix libs';
|
|
renderPrelude = library.import ./prelude.nix libs';
|
|
renderResume = library.import ./resume libs';
|
|
|
|
libs'
|
|
= libs
|
|
// {
|
|
toTex = libs.document.toTex { inherit configuration language resources; };
|
|
};
|
|
|
|
packages
|
|
= [
|
|
"logging"
|
|
"dependencies"
|
|
"chemistry/chem"
|
|
"chemistry/elements"
|
|
"bibliography/citation"
|
|
"floats/floats"
|
|
"geometry"
|
|
"glossaries/glossaries"
|
|
"links"
|
|
"symbols"
|
|
"text/text"
|
|
"utils"
|
|
];
|
|
|
|
acronyms = glossaries.acronyms.toLua { inherit configuration resources; };
|
|
references = bibliography.toBibTeX { inherit configuration resources; } resources.references;
|
|
substances = chemistry.substances.toLua { inherit configuration resources; } resources.substances;
|
|
|
|
prelude
|
|
= {
|
|
acronyms = acronyms.dst;
|
|
assets = "assets/";
|
|
packages = list.map (name: "\\input{\\source/source/${name}.tex}") packages;
|
|
references = references.dst;
|
|
source
|
|
= {
|
|
lua = "source/lua/";
|
|
tex = "source/";
|
|
};
|
|
substances = substances.dst;
|
|
inherit(resume) publications;
|
|
};
|
|
|
|
letter
|
|
= {
|
|
inherit(document) configuration date language place;
|
|
sender
|
|
= {
|
|
inherit(resume) name social;
|
|
};
|
|
subject = document.title;
|
|
}
|
|
// (path.import content.letter libs' document);
|
|
resume
|
|
= {
|
|
inherit(document) date language place;
|
|
}
|
|
// (path.import content.resume libs' document);
|
|
|
|
pdfMeta
|
|
= {
|
|
author = "${resume.name.given} ${resume.name.family}";
|
|
title
|
|
= "${document.title} ${{ deu = "am"; eng = "on"; }.${language}} ${time.formatDate document.date language}";
|
|
subject
|
|
= {
|
|
deu = "Bewerbung";
|
|
eng = "Application";
|
|
}.${language};
|
|
};
|
|
|
|
enclosures
|
|
= {
|
|
inherit(document) language;
|
|
inherit(letter) enclosures;
|
|
};
|
|
|
|
content'
|
|
= indentation { initial = ""; tab = " "; }
|
|
(
|
|
[]
|
|
++ ( renderPrelude prelude )
|
|
++ [ "\\begin{document}" indentation.more ]
|
|
++ ( renderBeginDocument pdfMeta )
|
|
++ list.ifOrEmpty'
|
|
((configuration.application or {}).letter or true)
|
|
( renderLetter letter )
|
|
++ list.ifOrEmpty'
|
|
((configuration.application or {}).resume or true)
|
|
( renderResume resume )
|
|
++ list.ifOrEmpty'
|
|
((configuration.application or {}).enclosures or true)
|
|
( renderEnclosures enclosures )
|
|
++ [ "\\directlua{commonFinal()}" ] # ToDo: Remove!
|
|
++ [ indentation.less "\\end{document}" ]
|
|
);
|
|
|
|
optimiser
|
|
= if configuration.optimise or false
|
|
then
|
|
''
|
|
# Optimise and linearise
|
|
# This removes tooltips, sorry
|
|
mv "${name}.pdf" "${name}-raw.pdf"
|
|
gs \
|
|
-dBATCH \
|
|
-dColorImageResolution=288 \
|
|
-dCompatibilityLevel=1.7 \
|
|
-dDEBUG \
|
|
-dDetectDuplicateImages \
|
|
-dDownsampleColorImages=true \
|
|
-dDownsampleGrayImages=true \
|
|
-dDownsampleMonoImages=true \
|
|
-dFastWebView \
|
|
-dGrayImageResolution=288 \
|
|
-dMonoImageResolution=288 \
|
|
-dNOPAUSE \
|
|
-dPDFSETTINGS=/ebook \
|
|
-dPrinted=false \
|
|
-sDEVICE=pdfwrite \
|
|
-sOutputFile="${name}.pdf" \
|
|
"${name}-raw.pdf" \
|
|
> "${name}.gslog" 2>&1
|
|
''
|
|
else
|
|
"";
|
|
|
|
compile
|
|
= path.toFile "compile-${name}.sh"
|
|
''
|
|
#!/usr/bin/env bash
|
|
echo "$out/${name}.tex"
|
|
#exit 0
|
|
|
|
newHash="false"
|
|
oldHash="true"
|
|
out="$1"
|
|
|
|
counter=""
|
|
while [[ "$newHash" != "$oldHash" && "$counter" != "${configuration.foo or "+++++"}" ]]
|
|
do
|
|
if lualatex \
|
|
--interaction=nonstopmode \
|
|
--halt-on-error \
|
|
--output-format=pdf \
|
|
"\def\source{$out}\def\build{.}\input{$out/${name}.tex}" #2> /dev/null > /dev/null
|
|
then
|
|
oldHash="$newHash"
|
|
newHash="$(md5sum "${name}.pdf")"
|
|
echo "$newHash"
|
|
mv "${name}.log" "$out/${name}.log"
|
|
mv "${name}.llg" "$out/${name}.llg"
|
|
biber "${name}"
|
|
counter="+$counter"
|
|
else
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
${optimiser}
|
|
# move the generated and processed document to the final-directory
|
|
mv "${name}.pdf" "$out/${name}.pdf"
|
|
'';
|
|
texFile = path.toFile "${name}.tex" content';
|
|
in
|
|
document
|
|
// {
|
|
content = content';
|
|
dependencies
|
|
= dependencies
|
|
++ [
|
|
acronyms
|
|
references
|
|
substances
|
|
{
|
|
src = texFile;
|
|
dst = "${name}.tex";
|
|
}
|
|
{
|
|
src = { store = compile; executable = true; };
|
|
dst = "compile-${name}.sh";
|
|
}
|
|
];
|
|
}
|