113 lines
3.6 KiB
Nix
113 lines
3.6 KiB
Nix
# TODO: Remove LaTeX-Code, replace with renderer-methods
|
|
{ chunks, core, evaluator, renderer, ... }:
|
|
let
|
|
inherit(core) debug indentation list type;
|
|
inherit(evaluator) evaluate;
|
|
inherit(renderer) putCaption toBody toTitle render;
|
|
|
|
evaluateJournal
|
|
= { ... } @ document:
|
|
{ ... } @ state:
|
|
{ body, dependencies, ... } @ journal:
|
|
let
|
|
state' = evaluate document state body;
|
|
in
|
|
state'
|
|
// {
|
|
dependencies = state'.dependencies ++ dependencies;
|
|
};
|
|
|
|
renderJournal
|
|
= { level, ... } @ document:
|
|
{ before, body, clearDoublePage, clearPage, concise, label, rotate, title, ... } @ journal:
|
|
output:
|
|
let
|
|
label'
|
|
= if label != null
|
|
then
|
|
[ "\\label{${label}}%" ]
|
|
else
|
|
[ ];
|
|
level' = list.headOr level "paragraph";
|
|
header
|
|
= [ "\\${level'}[\\nolink{%" indentation.more ]
|
|
++ title.bookmark
|
|
++ [ indentation.less "}]{%" indentation.more ]
|
|
++ title.caption
|
|
++ [ indentation.less "}" ];
|
|
header'
|
|
= if title.visible
|
|
then
|
|
header
|
|
else
|
|
[
|
|
"\\begingroup" indentation.more
|
|
"\\makeatletter\\let\\@makechapterhead\\@gobble\\makeatother"
|
|
]
|
|
++ header
|
|
++ [ indentation.less "\\endgroup" ];
|
|
clearPage'
|
|
= if !concise
|
|
&& ( clearDoublePage || level' == "chapter" )
|
|
then
|
|
[ "\\cleardoublepage%" ]
|
|
else if clearPage
|
|
then
|
|
[ "\\clearpage%" ]
|
|
else
|
|
[ ];
|
|
rotate'
|
|
= if rotate
|
|
then
|
|
[ "\\rotatePages%" ]
|
|
else
|
|
[ "\\unrotatePages%" ];
|
|
body' = render (document // { level = list.tailOr level []; }) body;
|
|
before'
|
|
= if before == null
|
|
then
|
|
[ ]
|
|
else if list.isInstanceOf before
|
|
then
|
|
before
|
|
else
|
|
[ before ];
|
|
in
|
|
before' ++ clearPage' ++ rotate' ++ label' ++ header' ++ [ "{" indentation.more ] ++ body' ++ [ indentation.less "}" null ];
|
|
in
|
|
{
|
|
Journal
|
|
= {
|
|
__functor
|
|
= self:
|
|
{ ... }:
|
|
{
|
|
|
|
};
|
|
Entry
|
|
= self:
|
|
title:
|
|
body:
|
|
{
|
|
after ? null,
|
|
before ? null,
|
|
clearDoublePage ? false,
|
|
clearPage ? false,
|
|
concise ? false,
|
|
dependencies ? [],
|
|
label ? null,
|
|
LaTeX ? false,
|
|
rotate ? false,
|
|
}:
|
|
chunks.Chunk "Journal"
|
|
{
|
|
render = renderJournal;
|
|
evaluate = evaluateJournal;
|
|
}
|
|
{
|
|
inherit after before clearDoublePage clearPage concise dependencies label rotate;
|
|
title = toTitle title LaTeX;
|
|
body = toBody body;
|
|
};
|
|
};
|
|
} |