catium

Un générateur de site statique - retour accueil

git clone git://bebou.netlib.re/catium
Log | Files | Refs | README |

commit 3ba549f97bf2c33d8972049b72372a0b7f6ef03d
parent dfe467550ba31f6e58289d2a221dba8aaedce11c
Auterice: Arthur Pons <arthur.pons@unistra.fr>
Date:   Mon, 26 Aug 2024 18:08:37 +0200

Modification du moment de la traduction fmt->html

Le problème :

Si l'on écrivait une section de markdown avec, par exemple, un référence

section: main
blablabla[^1]
endsection

mais que la référence n'était renseignée que plus tard, dans un autre
heredoc de la même section :

section:main
fin d'article machin machin

[^1]: ref1
ensection

Alors la référence c'était pas prise en compte. En effet, puisque chaque
appel à l'alias section: faisait appel directement au traducteur il lui
était impossible de savoir à quoi [^1] faisait référence puisqu'il
n'était renseigné que plus tard.

Correction :

On a bougé le moment de la traduction format->html à l'appel de la
section dans le layout, quand on sait que tout le contenu du fichier
source a été enregistré dans les fichiers des sections. A ce stade les
fichiers sont complets, le traducteur trouvera la référence.

Cette modification permet, entre autre, l'écriture de pages qui ont des
refs ou des liens nommés ET qui ferment/ouvrent des heredoc pour y
intégrer du code (pour ajouter un bloc <details> par ex)

La doc a été modifiée en fonction

Diffstat:
MCONSTRUIRE | 75++++++++++++++++++++++++++++++++++++++++++++-------------------------------
Mcontents/index.sh | 6+++---
Mlayouts/html | 4++--
Mpage | 65++++++++++++++++++++++++++++++-----------------------------------
4 files changed, 79 insertions(+), 71 deletions(-)

diff --git a/CONSTRUIRE b/CONSTRUIRE @@ -437,62 +437,75 @@ et par exemple dans le layout : <<@@ cat [...] <div id="joli-id-pour-du-css"> - $(cat truc) + $(show truc) </div> [...] <div id="autre-id-pour-du-css"> - $(cat bidule) + $(show bidule) </div> @@ } On voit que intuitivement on passe une sorte d'argument à notre alias section[^6]. Il faudrait pouvoir, sur la base de cet argument, stocker -l'html généré par chacune des sections pour pouvoir les appeler séparément +les données de chacune des sections pour pouvoir les appeler séparément dans le layout. Pour pouvoir traiter cette donnée comme un argument l'alias ne suffira plus, il faudra passer par une fonction qu'on pourrait -par exemple nommer `save_md` puisqu'on lui donne du markdown en entrée : +par exemple nommer `save` : - alias section:="<<endsection save_md" - save_md() cmark >> "$1" + alias section:="<<endsection save" + save() cat >> "$1" Ainsi dans index.sh : section: truc blabla endsection + # Devient - <<endsection save_md truc + + <<endsection save truc blabla endsection + # Puis - <<endsection cmark >> truc + + <<endsection cat >> truc blabla endsection -Les captures de commandes que l'on a fait dans le layout vont donc -fonctionner d'elles mêmes. On peut ainsi ouvrir et fermer autant -de sections que l'on veut, y compris plusieurs fois la même grâce -à l'opérateur de redirection `>>` qui concatène plutôt que ne remplace. -Afin d'éviter que les fichiers ne se marchent sur les pieds si -l'on a plusieurs articles, de polluer l'espace de travail et de potentiellement -engorger la mémoire de votre ordinateur on peut faire en sorte que tout -cela se produise dans un dossier temporaire, sur des fichiers temporaires -tous détruits une fois la génération finie. Pour on créer au début de page -un dossier temporaire de travail avec `mktemp`, on dit au shell de le supprimer -si le processus reçoit le signal `EXIT` (une fois qu'il termine quoi) et on -fait une petite fonction pour le layout puisque l'on ne peut plus juste cat -les fichiers comme s'ils existaient à la racine de notre projet : - - the=$(mktemp -d) - trap "rm -rf $the" EXIT - - the() { - cd $the - cat "$@" - } - -Dans le layout on aura `$(the truc)` au lieu de `$(cat truc)`[^7]. +On peut ainsi ouvrir et fermer autant de sections que l'on veut, y compris +plusieurs fois la même grâce à l'opérateur de redirection `>>` qui concatène +plutôt que ne remplace. +Il faut dorénavant que la fonction que l'on appel dans le layout pour +"injecter" les données d'une section à un endroit particulier fasse la +traduction du format vers de l'html. On écrit donc une fonction `show` comme +ceci : + + show() cmark "$1" + +Cette fonction va donner tout le contenu enregistré dans la section qu'on lui +passe en argument (main footer, comme vous voulez) à `cmark` et en ressortira +de l'HTML. + +Afin d'éviter que les fichiers ne se marchent sur les pieds si l'on a plusieurs +articles, de polluer l'espace de travail et de potentiellement engorger la +mémoire de votre ordinateur on peut faire en sorte que tout cela se produise +dans un dossier temporaire, sur des fichiers temporaires tous détruits une fois +la génération finie. Pour on créer au début de page un dossier temporaire de +travail avec `mktemp`, on dit au shell de le supprimer si le processus reçoit +le signal `EXIT` (une fois qu'il termine quoi) et on fait une petite fonction +pour le layout puisque l'on ne peut plus juste cat les fichiers comme s'ils +existaient à la racine de notre projet : + + tmpdir=$(mktemp -d) + trap "rm -rf $tmpdir" EXIT + +Il ne nous manque plus qu'à adapter `save` et `show` pour prendre en compte ce +nouveau dossier : + + save() cat >> "$tmpdir/$1" + show() cmark "$tmpdir/$1" Et voilà, à une exception près[^8] vous avez recréé absolument tout Francium dans sa version non étendue. Bravo ! diff --git a/contents/index.sh b/contents/index.sh @@ -2,7 +2,7 @@ title: Un exemple de page author: katzele description: Un exemple de page Francium démontrant une partie des fonctionnalités -sectionmd: main +section: main # Un exemple de page dans Francium @@ -25,8 +25,8 @@ Ce qui va suivre c'est du mardown généré par cette commande shell exécutée endsection -uptime | save_md main +uptime | save main -sectionmd: footer +section: footer Copyright machin© bidule blablabla endsection diff --git a/layouts/html b/layouts/html @@ -12,10 +12,10 @@ layout() { </head> <body> <main> - $(the main) + $(show main) </main> <footer> - $(the footer) + $(show footer) </footer> </body> </html> diff --git a/page b/page @@ -8,8 +8,22 @@ STYLE=/style.css # Création du dossier temporaire dans lequel # les fichiers contenant l'html des sections -the=$(mktemp -d) -trap "rm -rf $the" EXIT +tmpdir=$(mktemp -d) +trap "rm -rf $tmpdir" EXIT + +# Fonction pour enregistrer du contenu dans une section + +save() cat >> "$tmpdir/$1" + +# L'alias pour ouvrir une section +# Ouvre un heredoc avec pour délimiteur +# "endsection" et commande "save" + +alias section:='<<\endsection save' + +# Pareil mais le shell écrit dans la +# section s'exécutera +# alias section:='<<endsection save' ######################## # PREMIÈRE CONFIGURATION @@ -34,29 +48,21 @@ exit 1; # A DE LA ######### -# Choisissez une fonction save_* -# ou construisez la votre avec -# l'outil de votre choix - -# save_md() cmark >> "$the/$1" -# save_md() lowdown >> "$the/$1" -# save_md() pandoc >> "$the/$1" -# save_asciidoc() asciidoctor >> "$the/$1" -# save_html() cat >> "$the/$1" - -# L'alias pour ouvrir une section -# Ouvre un heredoc avec pour délimiteur -# "endsection" et commande "save_*" -# Décommentez en un ou plusieurs selon -# le choix que vous avez fait au dessus +# Fonction appelée dans le layout +# Permet de traduire en html et afficher +# à l'endroit souhaité la section passée +# en argument +# Par exemple : +# <main> +# $(show main) +# </main> -# alias sectionasciidoc:='<<\endsection save_asciidoc' -# alias sectionmd:='<<\endsection save_md' -# alias sectionhtml:='<<\endsection save_html' - -# Pareil mais le shell écrit dans la -# section s'exécutera -# alias sectionmd:='<<endsection save_md' +# Décommentez l'une des fonctions qui suit +# ou créez la votre en fonction du +# format que vous souhaitez +#show() lowdown "$tmpdir/$1" +#show() asciidoc "$tmpdir/$1" +#show() cat "$tmpdir/$1" ############################### # FIN DE PREMIÈRE CONFIGURATION @@ -78,17 +84,6 @@ author() author="$*" alias description:="description" description() description="$*" -# Fonction appelé dans le layout -# Permet d'afficher à l'endroit -# souhaité la section passée en argument -# Par exemple : -# <main> -# $(the main) -# </main> -the() { - cd $the - cat "$@" -} # On charge la fonction déclarée dans layouts/html # C'est le layout