Files
ml 1662d550c7 Give the interpreter real Celtic Cross meanings and --format/--lang support
- guidance.c now prints last, after the full spread; both it and main.c's
  new Celtic Cross readout pull real Waite card meanings via tarot_data.c
  instead of just naming cards.
- interpreter-cli gains --format text|html|json and --lang en|de, matching
  deck-engine - required linking engine/src/tarot_data.c and i18n.c into
  the interpreter binary (a narrow, documented exception to its earlier
  "no engine .c files" policy) and writing German translations for
  narrative.c's/guidance.c's own text.
2026-07-11 19:39:30 +02:00

76 lines
3.2 KiB
Plaintext

digraph architecture {
rankdir=LR;
pad="0.3";
fontname="Helvetica";
node [shape=box, style="rounded,filled", fontname="Helvetica", fontsize=12, margin="0.15,0.1"];
edge [fontname="Helvetica", fontsize=10];
labelloc="t";
label="Deck in a Dash — component architecture";
fontsize=16;
subgraph cluster_res {
label="res/ (source assets)";
style="dashed"; color=gray40; fontsize=11;
images [label="22 RWS Major Arcana\nJPEGs (res/img/)", fillcolor="#fdf3d0"];
pdf [label="Waite's \"Pictorial Key\nto the Tarot\" (PDF,\npublic domain)", fillcolor="#fdf3d0"];
{ rank=same; images; pdf; }
}
subgraph cluster_thirdparty {
label="engine/third_party/astronomy/";
style="dashed"; color=gray40; fontsize=11;
astronomy [label="Astronomy Engine\n(vendored, MIT,\npinned commit)", fillcolor="#fdf3d0"];
}
subgraph cluster_i18nsrc {
label="engine/i18n/ (translation sources)";
style="dashed"; color=gray40; fontsize=11;
langfiles [label="en.lang, de.lang, ...\nkey=value per language", fillcolor="#fdf3d0"];
}
subgraph cluster_engine {
label="engine/src/ (core engine — plain C, no I/O assumptions except reading_print_*/main.c/i18n_load)";
style="solid"; color=black; fontsize=11;
rng [label="rng.c\nstring-seeded PRNG\n(FNV-1a + splitmix64)", fillcolor="#cfe8fb"];
tarot [label="tarot.c\nCeltic Cross draw", fillcolor="#cfe8fb"];
tarot_data [label="tarot_data.c\ncard + position text", fillcolor="#cfe8fb"];
astro [label="astro.c\nnatal chart + transits", fillcolor="#cfe8fb"];
i18n [label="i18n.c\ntranslation catalog\n+ English fallback", fillcolor="#cfe8fb"];
reading [label="reading.c\nDailyReading\norchestration + text/HTML", fillcolor="#c8f0c8"];
main [label="main.c\nCLI arg parsing", fillcolor="#e3e3e3"];
{ rank=same; main; reading; }
{ rank=same; tarot; astro; i18n; }
}
subgraph cluster_dist {
label="dist/ (build output, generated by `make`)";
style="dashed"; color=gray40; fontsize=11;
binary [label="deck-engine", fillcolor="#fde0d0"];
distimg [label="img/\n(copied JPEGs)", fillcolor="#fde0d0"];
disti18n [label="i18n/\n(copied .lang files)", fillcolor="#fde0d0"];
runsh [label="run.sh", fillcolor="#fde0d0"];
props [label="user.properties\n(birth data + lang)", fillcolor="#fde0d0"];
{ rank=same; binary; distimg; disti18n; runsh; props; }
}
pdf -> tarot_data [label="sourced from", style=dotted, color=gray40];
tarot -> rng;
tarot -> tarot_data;
astro -> astronomy;
tarot_data -> i18n [label="looks up\ntranslated text", style=dotted, color=gray40];
astro -> i18n [label="looks up\ntranslated text", style=dotted, color=gray40];
reading -> i18n [label="looks up\nUI labels", style=dotted, color=gray40];
reading -> tarot;
reading -> astro;
main -> reading [label="CLI only"];
main -> i18n [label="i18n_load(\n--lang, --i18n-dir)"];
main -> binary [label="`make` builds", style=dotted, color=gray40];
images -> distimg [label="`make images`\ncopies", style=dotted, color=gray40];
langfiles -> disti18n [label="`make i18n`\ncopies", style=dotted, color=gray40];
runsh -> props [label="reads at\nrun time", style=dotted, color=gray40];
}