Sebastian Walz 860d31cee1
Tohu vaBohu
2023-04-21 00:22:52 +02:00

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;
};
};
}