165 lines
5.6 KiB
Nix
165 lines
5.6 KiB
Nix
{ bibliography, chemistry, core, document, ... }:
|
|
let
|
|
inherit(core) context expression list path set string;
|
|
inherit(chemistry) substances;
|
|
inherit(document) evaluate;
|
|
in
|
|
evaluationOrder:
|
|
{ configuration, content, dependencies, name, resources, state ? {}, titleNotes ? null, ... } @ document:
|
|
let
|
|
initialState
|
|
= {
|
|
bibliography = bibliography.initEvaluationState;
|
|
dependencies = [];
|
|
figures
|
|
= {
|
|
counter = 1;
|
|
};
|
|
notes
|
|
= let
|
|
notes
|
|
= {
|
|
enableMarkdown= true;
|
|
fontSize = 20;
|
|
version = 1;
|
|
}
|
|
// (configuration.notes or {});
|
|
in
|
|
{
|
|
inherit(notes) enableMarkdown fontSize version;
|
|
label = if titleNotes != null then 1 else 0;
|
|
pages
|
|
= list.ifOrEmpty'
|
|
(titleNotes != null)
|
|
[
|
|
{
|
|
title = "Title Page";
|
|
level = 0;
|
|
}
|
|
{
|
|
label = "1";
|
|
overlay = 0;
|
|
note = titleNotes;
|
|
}
|
|
];
|
|
};
|
|
schemes
|
|
= {
|
|
counter = 1;
|
|
};
|
|
source = context name;
|
|
substances = substances.evaluate configuration.concise;
|
|
tables
|
|
= {
|
|
counter = if configuration.concise then 0 else 1; # ToDo !!!
|
|
};
|
|
todos = [];
|
|
}
|
|
// state;
|
|
|
|
evaluatedState
|
|
= list.fold
|
|
(
|
|
state:
|
|
part:
|
|
if set.hasAttribute part content
|
|
then
|
|
evaluate
|
|
{ inherit configuration resources; }
|
|
(state // { context = [ ]; })
|
|
content.${part}
|
|
else
|
|
state
|
|
)
|
|
initialState
|
|
evaluationOrder;
|
|
|
|
notes
|
|
= let
|
|
inherit(evaluatedState) notes;
|
|
in
|
|
{
|
|
dst = "${name}.md";
|
|
src
|
|
= path.toFile "${name}.md"
|
|
(
|
|
string.concatMappedLines
|
|
(
|
|
{ level ? 0, note ? [], title ? null, ... }:
|
|
if title != null
|
|
then
|
|
let
|
|
title'
|
|
= if list.isInstanceOf title
|
|
then
|
|
string.concatWith " " title
|
|
else
|
|
string title;
|
|
in
|
|
if level == 0
|
|
then
|
|
"# ${title'}"
|
|
else
|
|
"## ${title'}"
|
|
else
|
|
note
|
|
)
|
|
notes.pages
|
|
);
|
|
};
|
|
|
|
pdfpc
|
|
= let
|
|
inherit(evaluatedState) notes;
|
|
in
|
|
{
|
|
dst = "${name}.pdfpc";
|
|
src
|
|
= path.toFile "${name}.pdfpc"
|
|
(
|
|
expression.toJSON
|
|
{
|
|
pdfpcFormat = notes.version;
|
|
disableMarkdown = !notes.enableMarkdown;
|
|
noteFontSize = notes.fontSize;
|
|
pages
|
|
= list.imap
|
|
(idx: page: page // { inherit idx; })
|
|
(
|
|
list.filter
|
|
({ title ? null, ... }: title == null)
|
|
notes.pages
|
|
);
|
|
}
|
|
);
|
|
};
|
|
in
|
|
document
|
|
// {
|
|
dependencies
|
|
= dependencies
|
|
++ evaluatedState.dependencies
|
|
++ (list.ifOrEmpty' (evaluatedState.notes.label != 0) [ pdfpc notes ])
|
|
++ [
|
|
{
|
|
dst = "todos";
|
|
src
|
|
= path.toFile "todos"
|
|
(
|
|
string.concatMappedLines
|
|
({ context, task }: "${string.concatWith " → " context}: ${task}")
|
|
evaluatedState.todos
|
|
);
|
|
}
|
|
];
|
|
resources
|
|
= resources
|
|
// {
|
|
substances
|
|
= substances.finalise
|
|
resources.substances
|
|
evaluatedState.substances;
|
|
};
|
|
state = evaluatedState;
|
|
}
|