capsite

Ressources et outils pour la génération de ma capsule et de mon site
git clone git://git.asteride.xyz/~ldp/capsite.git
Journaux | Fichiers | Références

commit 8afbee4a4cdc2a95a0128a6babfa5391724509d2
parent 97362ab5294e6a158f175a6cf382c4a59136920f
Auteur: Selve <selve@asteride.xyz>
Date:   Thu, 26 Oct 2023 15:31:03 -0400

[gen] changements structurels dans génération

La modification la plus importante est dans l'architecture de la génération des
fichiers gemtext et html. La bibliothèque awk lib/pres/pres.awk se charge de
repérer les étiquettes utiles et d'appeler les fonctions qui leur correspondent.
Je crois que cette manière de faire rend plus facile à la fois la maintenance du
programme et la génération d'autres formats.

Diffstat:
Mconstruire.sh | 10++++++----
Mdoc/éléments.txt | 13++++++++-----
Mlib/general.awk | 219+++++++++++++++++++++++++++++++++++++------------------------------------------
Mlib/humans.awk | 20+++++++++++++-------
Alib/liens/gen.awk | 26++++++++++++++++++++++++++
Rlib/liens_rempl.awk -> lib/liens/rempl.awk | 0
Dlib/liens_gen.awk | 27---------------------------
Alib/pres/fonctions.awk | 52++++++++++++++++++++++++++++++++++++++++++++++++++++
Alib/pres/gemtext.awk | 129+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Alib/pres/html.awk | 168+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Alib/pres/pres.awk | 93+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mlib/robots.awk | 2+-
Dlib/vers/gemtext.awk | 146-------------------------------------------------------------------------------
Dlib/vers/html.awk | 192-------------------------------------------------------------------------------
14 files changed, 598 insertions(+), 499 deletions(-)

diff --git a/construire.sh b/construire.sh @@ -24,7 +24,7 @@ liens_std() { echo "$FCH_LIENS_STD -> $DOS_LIENS/$1" aplat <"$FCH_LIENS_STD" | exclure -vproto="$1" | \ awk -v plan="$1" -v ext="$2" -f "$DOS_LIB/general.awk" \ - -f "$DOS_LIB/liens_gen.awk" \ + -f "$DOS_LIB/liens/gen.awk" \ >"$DOS_LIENS/$1" } @@ -51,7 +51,7 @@ robots.txt() { aplat <"$special" | exclure -vdest="$2" | \ awk -v fichier="$DOS_LIENS/$1" \ -f "$DOS_LIB/general.awk" \ - -f "$DOS_LIB/liens_rempl.awk" | \ + -f "$DOS_LIB/liens/rempl.awk" | \ awk -f "$DOS_LIB/general.awk" -f "$DOS_LIB/robots.awk" >"$dst" } @@ -108,7 +108,7 @@ gen_aplat() { aplat <"$f" | exclure -vdest="$2" | \ awk -v fichier="$DOS_LIENS/$1" \ -f "$DOS_LIB/general.awk" \ - -f "$DOS_LIB/liens_rempl.awk" >"$res" + -f "$DOS_LIB/liens/rempl.awk" >"$res" done } @@ -123,7 +123,8 @@ gen_final() { plus_jeune "$res" "$f" || continue echo "$f -> $res" awk -f "$DOS_LIB/general.awk" \ - -f "$DOS_LIB/vers/$2.awk" <"$f" >"$res" + -f "$DOS_LIB/pres/pres.awk" \ + -f "$DOS_LIB/pres/$2.awk" <"$f" >"$res" done } @@ -164,6 +165,7 @@ https() { compresser "$DOS_DST/https" } +# $1 protocol compresser() { for f in $(find "$1" -type f ! -name '*.gz') do diff --git a/doc/éléments.txt b/doc/éléments.txt @@ -1,3 +1,11 @@ +Métadonnées généraux + +@césure +* Type de césure +* Valeurs possibles: + - continue (défaut) + - pre: texte préformaté + :doc: Racine du document. @@ -35,11 +43,6 @@ qu'on pourrait isoler par des lignes vides. - texte (défaut) - liens - citation -@césure -* Type de césure -* Valeurs possibles: - - continue (défaut) - - pre: texte préformaté :par:lien: diff --git a/lib/general.awk b/lib/general.awk @@ -1,19 +1,14 @@ +# general.awk - fonctions auxiliaires pour le format @plat + BEGIN { FS = "\t" RS = "\n" OFS = "\t" - div_normale = "normale" - div_act = div_normale - div_tbl[div_act] = "" -} - -END { - printf("%s", div_tbl[div_normale]) } -etq_reserv != ""{ - $0 = etq_reserv "\t" $0 - etq_reserv = "" +etq_reservee { + $0 = etq_reservee "\t" $0 + etq_reservee = "" } function ouvrante() { @@ -28,89 +23,86 @@ function etq(EXPR) { return match($1, EXPR) } -function metadonnees_lire() { +# lire les metadonnees d'une étiquette +# doit être appelée à la ligne d'ouverture de l'étiquette +# laisse sur la ligne de fermeture de :@: +# 0 : aucune métadonnée lue +# 1 : au moins une métadonnée lue +function metadonnees_lire(META) { if ($3 !~ /^$/ || fermante()) - return 0 - # obtenir l'étiquette + return 1 + # n'obtenir que l'étiquette RS = "\t" getline RS = "\n" if ($1 !~ /:@:$/) { - etq_reserv = $1 - return 0 + etq_reservee = $0 + return 1 } + getline # reste de la ligne getline do { - meta[$1] = meta[$1] $3 + META[$1] = META[$1] $3 getline } while ($1 !~ /:@:$/) - getline return 0 } -function metadonnees_supp(DOMAINE, etq) { - for (etq in meta) +function metadonnees_trouver(META, EXPR, m, m_tmp, n, n_tmp) { + n = 0 + for (m_tmp in META) + if (match(m_tmp, EXPR)) + if ((n_tmp = gsub(":", ":", m_tmp)) > n) { + n = n_tmp + m = m_tmp + } + return m +} + +function metadonnees_supp(META, DOMAINE, etq) { + for (etq in META) if (match(etq, "^" DOMAINE)) delete meta[etq] } -function ramasser(CHAINE) { - div_tbl[div_act] = div_tbl[div_act] CHAINE +function dechapper_cont(TEXTE) { + gsub(/\\[ntr]/, " ", TEXTE) + return TEXTE } -function intervalle() { -{ - m = trouver_meta(":@:césure:$") - if (meta[m] == "pre") - ramasser(ces_pre($3)) - else - ramasser(dechapper($3)) +function dechapper_pre(TEXTE) { + gsub(/\\n/, "\n", TEXTE) + gsub(/\\t/, "\t", TEXTE) + gsub(/\\r/, "\r", TEXTE) + return TEXTE } +function ramasser(CHAINE) { + if (!div_act) + printf("%s", CHAINE) + else { + div_tbl[div_act] = div_tbl[div_act] CHAINE + } } function div(NOM) { - if (NOM == "") - NOM=div_normale div_act = NOM } -function div_contenu(NOM) { - if (NOM == "") - NOM=div_act +function div_obtenir(NOM) { + if (!NOM) + return return div_tbl[NOM] } -function div_vider(NOM) { - if (NOM == "") - NOM=div_act +function div_vider(NOM, chaine) { + if (!NOM) + return + chaine = div_tbl[NOM] div_tbl[NOM] = "" + return chaine } -function dechapper(TEXTE) { - gsub(/\\[ntr]/, " ", TEXTE) - return TEXTE -} - -function ces_pre(TEXTE) { - gsub(/\\n/, "\n", TEXTE) - gsub(/\\t/, "\t", TEXTE) - gsub(/\\r/, "\r", TEXTE) - return TEXTE -} - -function trouver_meta(EXPR, m, m_tmp, n, n_tmp) { - n = 0 - for (m_tmp in meta) - if (match(m_tmp, EXPR)) - if ((n_tmp = gsub(":", ":", m_tmp)) > n) { - n = n_tmp - m = m_tmp - } - return m -} - -# format: AAAA-MM-JJTHH:MM:SS function date_lire(CHAINE, TABLEAU, jh, d1, d2, i) { split(CHAINE, jh, "T") split(jh[1], d1, "-") @@ -127,29 +119,29 @@ function date_lire(CHAINE, TABLEAU, jh, d1, d2, i) { else TABLEAU[i] = TABLEAU[i] + 0 } - return } -function date_formater(DATE, mots) { - mots = noms_jours(DATE[3]) " " noms_mois(DATE[2]) " " DATE[1] - if (DATE[4] != -1) - mots = mots " à " noms_heures(DATE[4]) - if (DATE[5] != -1) - mots = mots " et " noms_minutes(DATE[5]) - return mots +function date_formater(DATE, phrase) { + phrase = noms_jours(DATE[3]) " " noms_mois(DATE[2]) " " DATE[1] + if (DATE[4] != -1) { + phrase = phrase " à " noms_heures(DATE[4]) + if (DATE[5] != -1) + phrase = phrase " à " noms_minutes(DATE[5]) + } + return phrase } -function noms_jours(NUM) { - if (NUM < 1 || NUM > 31) +function noms_jours(N) { + if (N < 1 || N > 31) return "" - if (NUM == 1) + if (N == 1) return "premier" else - return NUM + return N } -function noms_mois(NUM, tableau) { - if (NUM < 1 || NUM > 12) +function noms_mois(N, tableau) { + if (N < 1 || N > 12) return "" tableau[1] = "janvier" tableau[2] = "février" @@ -163,68 +155,61 @@ function noms_mois(NUM, tableau) { tableau[10] = "octobre" tableau[11] = "novembre" tableau[12] = "décembre" - return tableau[NUM] + return tableau[N] } -function noms_heures(NUM) { - if (NUM < 0 || NUM > 23) +function noms_heures(N) { + if (N < 0 || N > 23) return "" - if (NUM == 0) + if (N == 0) return "minuit" - else if (NUM == 12) + else if (N == 12) return "midi" - else if (NUM == 1) - return NUM " heure" + else if (N == 1) + return N " heure" else - return NUM " heures" + return N " heures" } -function noms_minutes(NUM) { - if (NUM < 0 || NUM > 23) +function nom_minutes(N) { + if (N < 0 || N > 59) return "" - if (NUM == 0) + if (N == 0) return "pile" - else if (NUM == 1) - return NUM " minute" + else if (N == 1) + return N " minute" else - return NUM " minutes" + return N " minutes" } function date_nombre(DATE, chaine, lng) { - chaine = sprintf("%.4d%.2d%.2d%.2d%.2d%.2d", DATE[1], DATE[2], DATE[3], \ + chaine = sprintf("%.4d%.2d%.2d%.2d%.2d%.2d", DATE[1], DATE[2], DATE[3], \ DATE[4], DATE[5], DATE[6]) gsub("-0001", "0000", chaine) gsub("-01", "00", chaine) return chaine } -function date_date(CHAINE, DATE, n) { - for (n = 1; n <= 6; n++) +function nombre_date(CHAINE, DATE, n) { + for (n = 1; n <= 6; n++) DATE[n] = -1 - if ((n = substr(CHAINE, 1, 4)) == "0000") - return - DATE[1] = n + 0 - if ((n = substr(CHAINE, 5, 2)) == "00") - return - DATE[2] = n + 0 - if ((n = substr(CHAINE, 7, 2)) == "00") - return - DATE[3] = n + 0 - if ((n = substr(CHAINE, 9, 2)) == "00") - return - DATE[4] = n + 0 - if ((n = substr(CHAINE, 11, 2)) == "00") - return - DATE[5] = n + 0 - if ((n = substr(CHAINE, 13, 2)) == "00") - return - DATE[6] = n + 0 - return -} - -function max(N1, N2) { - if (N1 > N2) - return N1 - else - return N2 + if ((n = substr(CHAINE, 1, 4)) == "0000") + return + DATE[1] = n + 0 + if ((n = substr(CHAINE, 5, 2)) == "00") + return + DATE[2] = n + 0 + if ((n = substr(CHAINE, 7, 2)) == "00") + return + DATE[3] = n + 0 + if ((n = substr(CHAINE, 9, 2)) == "00") + return + DATE[4] = n + 0 + if ((n = substr(CHAINE, 11, 2)) == "00") + return + DATE[5] = n + 0 + if ((n = substr(CHAINE, 13, 2)) == "00") + return + DATE[6] = n + 0 + return } diff --git a/lib/humans.awk b/lib/humans.awk @@ -1,11 +1,17 @@ +function max(N1, N2) { + if (N1 > N2) + return N1 + return N2 +} + etq("^:doc:$") && ouvrante() { - metadonnees_lire() + metadonnees_lire(meta) date_lire(meta[":doc:@:date-mod:"], date_mod) date_lire(meta[":doc:@:date-pub:"], date_pub) date_max = max(max(date_nombre(date_mod), date_nombre(date_pub)), \ date_max) if (meta[":doc:@:type:"] != "humans.txt") { - metadonnees_supp(":doc:") + metadonnees_supp(meta, ":doc:") while (!(etq("^:doc:$") && fermante())) { getline } @@ -14,20 +20,20 @@ etq("^:doc:$") && ouvrante() { } etq("^:doc:DMAJ:$") && ouvrante() { - metadonnees_lire() + metadonnees_lire(meta) } { - intervalle() + ramasser(dechapper_pre($3)) } etq("^:doc:$") && fermante() { ramasser("\n") - metadonnees_supp($1) + metadonnees_supp(meta, $1) } etq("^:doc:DMAJ:$") && fermante() { - date_date(date_max, date) + nombre_date(date_max, date) ramasser(date_formater(date)) - metadonnees_supp($1) + metadonnees_supp(meta, $1) } diff --git a/lib/liens/gen.awk b/lib/liens/gen.awk @@ -0,0 +1,26 @@ +BEGIN { + if (plan == "") + plan = "gemini" + if (ext == "") + ext = "gmi" +} + +etq("^:doc:lien:$") && ouvrante() { + metadonnees_lire(meta) +} + +{ + lien = lien $3 +} + +etq("^:doc:lien:$") && fermante() { + lien = dechapper_cont(lien) + if (match(lien, /^:\/\//)) + lien = plan lien + if (match(lien, /\.$/)) + lien = lien ext + print meta[":doc:lien:@:id:"], lien + lien = "" + #ramasser(meta[":doc:lien:@:id:"] "\t" lien "\n" ) + metadonnees_supp(meta, $1) +} diff --git a/lib/liens_rempl.awk b/lib/liens/rempl.awk diff --git a/lib/liens_gen.awk b/lib/liens_gen.awk @@ -1,27 +0,0 @@ -BEGIN { - if (plan == "") - plan = "gemini" - if (ext == "") - ext = "gmi" -} - -etq("^:doc:lien:$") && ouvrante() { - metadonnees_lire() -} - -{ - div("entree") - ramasser($3) -} - -etq("^:doc:lien:$") && fermante() { - contenu = div_contenu() - div_vider() - div() - if (match(contenu, /^:\/\//)) - contenu = plan contenu - if (match(contenu, /\.$/)) - contenu = contenu ext - ramasser(sprintf("%s\t%s\n", meta[":doc:lien:@:id:"], contenu)) - metadonnees_supp($1) -} diff --git a/lib/pres/fonctions.awk b/lib/pres/fonctions.awk @@ -0,0 +1,52 @@ +# fonctions.awk - liste des fonctions à implémenter + +function intervalle() { +} + +function doc_ouv(META, ETQ) { +} + +function doc_ferm(META, ETQ) { +} + +function par_ouv(META, ETQ) { +} + +function par_ferm(META, ETQ) { +} + +function lien_ouv(META, ETQ) { +} + +function lien_ferm(META, ETQ) { +} + +function liste_ouv(META, ETQ) { +} + +function liste_ferm(META, ETQ) { +} + +function elem_ouv(META, ETQ) { +} + +function elem_ferm(META, ETQ) { +} + +function section_ouv(META, ETQ) { +} + +function section_ferm(META, ETQ) { +} + +function note_ouv(META, ETQ) { +} + +function note_ferm(META, ETQ) { +} + +function encrage_ouv(META, ETQ) { +} + +function encrage_ferm(META, ETQ) { +} diff --git a/lib/pres/gemtext.awk b/lib/pres/gemtext.awk @@ -0,0 +1,129 @@ +# gemtext.awk - présentation spécifique au format gemtext + +BEGIN { + racine = "/~selve/" +} + +function intervalle() { + cesure = meta[metadonnees_trouver(meta, ":@:césure:$")] + if (cesure == "pre") + ramasser(dechapper_pre($3)) + else + ramasser(dechapper_cont($3)) +} + +function doc_ouv(META, ETQ) { + type = meta[ETQ "@:type:"] + titre = meta[ETQ "@:titre:"] + date_pub = meta[ETQ "@:date-pub:"] + date_mod = meta[ETQ "@:date-mod:"] + msg_date = "" + ramasser("# " titre "\n") + if (type == "accueil") { + date_lire(date_pub, date) + msg_date = "Depuis le " date_formater(date) + } + else if (type == "article") { + date_lire(date_pub, date) + msg_date = "Publié le " date_formater(date) + if (date_mod) { + date_lire(date_mod, date) + msg_date = msg_date " et modifié le " date_formater(date) + } + } + else if (type == "florilège") { + } + if (msg_date) + ramasser("\n``` " msg_date "\n" msg_date "\n```\n") +} + +function doc_ferm(META, ETQ) { + type = meta[ETQ "@:type:"] + auteur = meta[ETQ "@:auteur:"] + if (type == "article") + ramasser("\n— " auteur "\n") + if (type != "accueil") + ramasser("\n=> " racine " Retourner à la page d'accueil\n") +} + +function par_ouv(META, ETQ) { + type = meta[ETQ "@:type:"] + cesure = meta[ETQ "@:césure:"] + ramasser("\n") + if (cesure == "pre") + ramasser("```\n") + if (aff_note_num) { + ramasser("[" note_num "] ") + aff_note_num = 0 + } + if (type == "citation") + ramasser("« ") +} + +function par_ferm(META, ETQ) { + type = meta[ETQ "@:type:"] + cesure = meta[ETQ "@:césure:"] + if (type == "citation") + ramasser(" »") + if (type != "liens") + ramasser("\n") + if (cesure == "pre") + ramasser("```\n") +} + +function lien_ouv(META, ETQ) { + ref = meta[ETQ "@:ref:"] + ramasser("=> " ref " ") +} + +function lien_ferm(META, ETQ) { + ramasser("\n") +} + +function liste_ouv(META, ETQ) { +} + +function liste_ferm(META, ETQ) { + ramasser("\n") +} + +function elem_ouv(META, ETQ) { + ramasser("\n* ") +} + +function elem_ferm(META, ETQ) { +} + +function section_ouv(META, ETQ) { + niveau = meta[ETQ "@:niveau:"] + if (!niveau) + niveau = 1 + ramasser("\n") + while (niveau-- > -1) + ramasser("#") + ramasser(" ") +} + +function section_ferm(META, ETQ) { + ramasser("\n") +} + +function note_ouv(META, ETQ) { + ramasser("[" ++note_num "]") + aff_note_num = 1 + div("notes") +} + +function note_ferm(META, ETQ) { + div() +} + +function encrage_ouv(META, ETQ) { +} + +function encrage_ferm(META, ETQ) { + if (meta[ETQ "@:id:"] == "notes") { + ramasser("\n## Notes\n") + ramasser(div_vider("notes")) + } +} diff --git a/lib/pres/html.awk b/lib/pres/html.awk @@ -0,0 +1,168 @@ +# fonctions.awk - liste des fonctions à implémenter + +BEGIN { + racine = "/~selve/" +} + +function intervalle() { + cesure = meta[metadonnees_trouver(meta, ":@:césure:$")] + if (cesure == "pre") + ramasser(dechapper_pre($3)) + else + ramasser(dechapper_cont($3)) +} + +function doc_ouv(META, ETQ) { + type = meta[ETQ "@:type:"] + titre = meta[ETQ "@:titre:"] + date_pub = meta[ETQ "@:date-pub:"] + date_mod = meta[ETQ "@:date-mod:"] + auteur = meta[ETQ "@:auteur:"] + description = meta[ETQ "@:description:"] + ramasser("\ +<!DOCTYPE html>\n\ +<html lang=\"fr\">\n\ +<head>\n\ + <title>" titre "</title>\n\ + <meta charset=\"UTF-8\">\n\ + <meta name=\"author\" content=\"" auteur "\">\n\ + <meta name=\"robots\" content=\"index,follow\">\n\ + <meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0\">\n\ + <link rel=\"stylesheet\" type=\"text/css\" href=\"/~selve/style.css\">\n\ + <link rel=\"icon\" href=\"data:;base64,iVBORw0KGgo=\">\n\ +</head>\n\ +<body>\n\ +<main>\n") + if (titre == "article") + ramasser("<article>\n") + ramasser("<header>\n\ + <hr>\n\ + <h1>" titre "</h1>\n") + if (type == "accueil") { + date_lire(date_pub, date) + msg_date = "~ Depuis le <time datetime=" date_pub ">" \ + date_formater(date) "</time> ~" + ramasser("\t<p><i>" msg_date "</i></p>\n") + } else if (type == "article") { + date_lire(date_pub, date) + msg_date = "Publié le <time datetime=" date_pub ">" \ + date_formater(date) "</time>" + if (date_mod) { + date_lire(date_mod, date) + msg_date = msg_date " et modifié le <time datetime=" \ + date_mod ">" date_formater(date) "</time>" + } + ramasser("\t<p><i>" msg_date "</i></p>\n") + } + if (description && type == "florilège") + ramasser("\t<p><i>" description "</i></p>\n") + ramasser("\t<hr>\n</header>\n") +} + +function doc_ferm(META, ETQ) { + type = meta[ETQ "@:type:"] + auteur = meta[ETQ "@:auteur:"] + if (type == "article") + ramasser("<p>— " auteur "</p>\n</article>\n") + ramasser("</main>\n\ +<hr>\n") + if (type != "accueil") + ramasser("<footer>\n\ +<nav>\n\ + <p><a href=\"" racine "\">Retourner à la page d'accueil</a></p>\n\ +</nav>\n\ +</footer>\n") + ramasser("</body>\n</html>\n") +} + +function par_ouv(META, ETQ) { + type = meta[ETQ "@:type:"] + cesure = meta[ETQ "@:césure:"] + if (cesure == "pre") + nom = "pre" + else if (type == "citation") + nom = "blockquote" + else + nom = "p" + if (aff_note_num) { + ramasser("<" nom " id =\"note-" note_num "\"><a href=\"#ref-" note_num "\"> [" note_num "]</a> ") + aff_note_num = 0 + } else { + ramasser("<" nom ">") + } +} + +function par_ferm(META, ETQ) { + type = meta[ETQ "@:type:"] + cesure = meta[ETQ "@:césure:"] + if (cesure == "pre") + nom = "pre" + else if (type == "citation") + nom = "blockquote" + else + nom = "p" + ramasser("</" nom ">\n") +} + +function lien_ouv(META, ETQ) { + ref = meta[ETQ "@:ref:"] + ramasser("<a href=\"" ref "\">=> ") +} + +function lien_ferm(META, ETQ) { + ramasser("</a><br>\n") +} + +function liste_ouv(META, ETQ) { + ramasser("<ul>\n") +} + +function liste_ferm(META, ETQ) { + ramasser("</ul>\n") +} + +function elem_ouv(META, ETQ) { + ramasser("\t<li>") +} + +function elem_ferm(META, ETQ) { + ramasser("</li>\n") +} + +function section_ouv(META, ETQ) { + niveau = meta[ETQ "@:niveau:"] + if (!niveau) + niveau = 1 + niveau++ + ramasser("<h" niveau ">") + +} + +function section_ferm(META, ETQ) { + niveau = meta[ETQ "@:niveau:"] + if (!niveau) + niveau = 1 + niveau++ + ramasser("</h" niveau ">\n") +} + +function note_ouv(META, ETQ) { + note_num++ + ramasser("<sup id=\"ref-" note_num "\"><a href=\"#note-" note_num "\">[" note_num "]</a></sup>") + aff_note_num = 1 + div("notes") +} + +function note_ferm(META, ETQ) { + div() +} + +function encrage_ouv(META, ETQ) { +} + +function encrage_ferm(META, ETQ) { + if (meta[ETQ "@:id:"] == "notes") { + ramasser("\n<h2>Notes</h2>\n") + ramasser(div_vider("notes")) + } +} diff --git a/lib/pres/pres.awk b/lib/pres/pres.awk @@ -0,0 +1,93 @@ +# pres.awk - couche intermédiaire de présentation + +etq("^:doc:$") && ouvrante() { + etiquette = $1 + metadonnees_lire(meta) + doc_ouv(meta, etiquette) +} + +etq(":par:$") && ouvrante() { + etiquette = $1 + metadonnees_lire(meta) + par_ouv(meta, etiquette) +} + +etq(":lien:$") && ouvrante() { + etiquette = $1 + metadonnees_lire(meta) + lien_ouv(meta, etiquette) +} + +etq(":liste:$") && ouvrante() { + etiquette = $1 + metadonnees_lire(meta) + liste_ouv(meta, etiquette) +} + +etq(":elem:$") && ouvrante() { + etiquette = $1 + metadonnees_lire(meta) + elem_ouv(meta, etiquette) +} + +etq(":section:$") && ouvrante() { + etiquette = $1 + metadonnees_lire(meta) + section_ouv(meta, etiquette) +} + +etq(":note:$") && ouvrante() { + etiquette = $1 + metadonnees_lire(meta) + note_ouv(meta, etiquette) +} + +etq(":encrage:$") && ouvrante() { + etiquette = $1 + metadonnees_lire(meta) + encrage_ouv(meta, etiquette) +} + +{ + intervalle() +} + +etq("^:doc:$") && fermante() { + doc_ferm(meta, $1) + metadonnees_supp(meta, $1) +} + +etq(":par:$") && fermante() { + par_ferm(meta, $1) + metadonnees_supp(meta, $1) +} + +etq(":lien:$") && fermante() { + lien_ferm(meta, $1) + metadonnees_supp(meta, $1) +} + +etq(":liste:$") && fermante() { + liste_ferm(meta, $1) + metadonnees_supp(meta, $1) +} + +etq(":elem:$") && fermante() { + elem_ferm(meta, $1) + metadonnees_supp(meta, $1) +} + +etq(":section:$") && fermante() { + section_ferm(meta, $1) + metadonnees_supp(meta, $1) +} + +etq(":note:$") && fermante() { + note_ferm(meta, $1) + metadonnees_supp(meta, $1) +} + +etq(":encrage:$") && fermante() { + encrage_ferm(meta, $1) + metadonnees_supp(meta, $1) +} diff --git a/lib/robots.awk b/lib/robots.awk @@ -3,7 +3,7 @@ etq("^:doc:$") && ouvrante() { } { - intervalle() + ramasser(dechapper_pre($3)) } etq("^:doc:$") && fermante() { diff --git a/lib/vers/gemtext.awk b/lib/vers/gemtext.awk @@ -1,146 +0,0 @@ -BEGIN { - note_num = 0 - aff_note_num = 0 - echapper = 0 -} - -etq("^:doc:$") && ouvrante() { - metadonnees_lire() - aff_date = 0 - ramasser(sprintf("# %s\n", meta[":doc:@:titre:"])) - type = meta[":doc:@:type:"] - if (type == "accueil") { - date_lire(meta[":doc:@:date-pub:"], date) - msg = "Depuis le " date_formater(date) - aff_date = 1 - } else if (type == "article") { - date_lire(meta[":doc:@:date-pub:"], date) - msg = "Publié le " date_formater(date) - if (meta[":doc:@:date-mod:"] != "") { - date_lire(meta[":doc:@:date-mod:"], date) - msg = msg " et modifié le " date_formater(date) - } - aff_date = 1 - } else if (type == "florilège") { - ramasser(sprintf("\n%s\n", meta[":doc:@:description:"])) - } - if (aff_date) - ramasser(sprintf("\n``` %s\n%s\n```\n", msg, msg)) -} - -etq("^:doc:section:$") && ouvrante() { - metadonnees_lire() - ramasser("\n") - niveau = meta[":doc:section:@:niveau:"] - if (niveau == "") - niveau = 1 - while (niveau-- > -1) - ramasser("#") - ramasser(" ") -} - -etq(":par:$") && ouvrante() { - metadonnees_lire() - ramasser("\n") - if (aff_note_num) { - ramasser("[" note_num "] ") - aff_note_num = 0 - } - m = trouver_meta(":par:@:citation:$") - if (m != "") - ramasser("« ") -} - -etq(":lien:$") && ouvrante() { - metadonnees_lire() - ref = trouver_meta(":lien:@:ref:$") - ramasser("=> " dechapper(meta[ref]) " ") -} - -etq(":liste:$") && ouvrante() { - metadonnees_lire() -} - -etq(":liste:elem:$") && ouvrante() { - metadonnees_lire() - ramasser("\n* ") -} - -etq(":note:$") && ouvrante() { - metadonnees_lire() - ramasser("["++note_num"]") - aff_note_num = 1 - div("notes") -} - -etq(":encrage:$") && ouvrante() { - metadonnees_lire() -} - -etq(":it:$") && ouvrante() { - metadonnees_lire() - ramasser("_") -} - -{ - intervalle() -} - -etq("^:doc:$") && fermante() { - type = meta[":doc:@:type:"] - if (type == "article") { - ramasser("\n— " meta[":doc:@:auteur:"] "\n") - } - if (type != "accueil") - ramasser("\n=> ../ Revenir à la page d'accueil\n") - metadonnees_supp($1) -} - -etq("^:doc:section:$") && fermante() { - ramasser("\n") - metadonnees_supp($1) -} - -etq(":par:$") && fermante() { - type = trouver_meta(":par:@:type:$") - m = trouver_meta(":par:@:citation:$") - if (m != "") - ramasser(" »") - if (meta[type] != "liens") - ramasser("\n") - metadonnees_supp($1) -} - -etq(":lien:$") && fermante() { - ramasser("\n") - metadonnees_supp($1) -} - -etq(":liste:$") && fermante() { - ramasser("\n") - metadonnees_supp($1) -} - -etq(":liste:elem:$") && ouvrante() { - metadonnees_supp($1) -} - -etq(":note:$") && fermante() { - div() - metadonnees_supp($1) -} - -etq(":encrage:$") && fermante() { - ramasser("\n## Notes\n") - id = trouver_meta(":encrage:@:id:$") - if (meta[id] == "notes") { - ramasser(div_contenu("notes")) - div_vider("notes") - } - metadonnees_supp($1) -} - -etq(":it:$") && ouvrante() { - metadonnees_lire() - ramasser("_") -} diff --git a/lib/vers/html.awk b/lib/vers/html.awk @@ -1,192 +0,0 @@ -etq("^:doc:$") && ouvrante() { - metadonnees_lire() - type = meta[":doc:@:type:"] - if (type == "article") { - options["article"] = 1 - options["signature"] = 1 - options["aff_date"] = 1 - options["retour_accueil"] = 1 - } else if (type == "accueil") { - options["aff_date"] = 1 - } else if (type == "florilège") { - options["retour_accueil"] = 1 - options["aff_desc"] = 1 - } - ramasser("\ -<!DOCTYPE html>\n\ -<html lang=\"fr\">\n\ -<head>\n\ - <title>" meta[":doc:@:titre:"] "</title>\n\ - <meta charset=\"UTF-8\">\n\ - <meta name=\"author\" content=\"" meta[":doc:@:auteur:"] "\">\n\ - <meta name=\"robots\" content=\"index,follow\">\n\ - <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n\ - <link rel=\"stylesheet\" type=\"text/css\" href=\"/~selve/style.css\">\n\ - <link rel=\"icon\" href=\"data:;base64,iVBORw0KGgo=\">\n\ -</head>\n\ -<body>\n\ -<main>\n") - if (options["article"]) - ramasser("<article>\n") - ramasser("\ -<header>\n\ - <hr>\n\ - <h1>" meta[":doc:@:titre:"] "</h1>\n") - if (options["aff_date"]) { - date_lire(meta[":doc:@:date-pub:"], date) - if (type == "accueil") { - msg = "<i>~ Depuis le <time datetime=" \ - meta[":doc:@:date-pub:"]">" date_formater(date) \ - "</time> ~</i>" - } else { - msg = "Publié le " date_formater(date) - if (meta[":doc:@:date-mod:"] != "") { - date_lire(meta[":doc:@:date-mod:"], date) - msg = msg " et modifié le <time datetime=" \ - meta[":doc:@:date-mod:"]">" \ - date_formater(date) "</time>" - } - } - ramasser("\ - <p id=\"date-publication\"><i>" msg "</i></p>\n") - } - if (options["aff_desc"]) - ramasser("\t<p><i>" meta[":doc:@:description:"] "</p></i>\n") - ramasser("<hr>\n</header>\n") -} - -etq("^:doc:section:$") && ouvrante() { - metadonnees_lire() - niveau = meta[":doc:section:@:niveau:"] - if (!niveau) - niveau = 1 - niveau++ - ramasser("<h" niveau ">") -} - -etq(":par:$") && ouvrante() { - metadonnees_lire() - m = trouver_meta(":@:césure:$") - if (meta[m] == "pre") - nom = "pre" - else - nom = "p" - m = trouver_meta(":par:@:citation:$") - if (m != "") - nom = "blockquote" - if (aff_note_num) { - ramasser("<" nom " id=\"note-" note_num "\"><a href=\"#ref-" note_num "\">[" note_num "]</a> ") - aff_note_num = 0 - } else { - ramasser("<" nom ">") - } -} - -etq(":lien:$") && ouvrante() { - metadonnees_lire() - ref = trouver_meta(":lien:@:ref:$") - ramasser("<a href=\"" meta[ref] "\">=> ") -} - -etq(":liste:$") && ouvrante() { - metadonnees_lire() - ramasser("<ul>\n") -} - -etq(":liste:elem:$") && ouvrante() { - metadonnees_lire() - ramasser(" <li>") -} - -etq(":note:$") && ouvrante() { - metadonnees_lire() - note_num++ - ramasser("<sup id=\"ref-" note_num "\"><a href=\"#note-" note_num "\">[" note_num "]</a></sup>") - aff_note_num = 1 - div("notes") -} - -etq(":encrage:$") && ouvrante() { - metadonnees_lire() -} - -etq(":it:$") && ouvrante() { - metadonnees_lire() - ramasser("<em>") -} - -{ - intervalle() -} - -etq("^:doc:$") && fermante() { - if (options["signature"]) - ramasser("<p id=\"signature\">— "\ - meta[":doc:@:auteur:"] "</p>\n") - if (options["article"]) - ramasser("</article>\n") - ramasser("\ -</main>\n\ -<hr>\n\ -<footer>\n") - if (options["retour_accueil"]) - ramasser("\ -<nav><p class=\"lien-retour\">\ -<a href=\"../\">Revenir à la page d'accueil</a></p></nav>\n") - ramasser("</footer>\n\ -</body>\n\ -</html>\n") - metadonnees_supp($1) -} - -etq("^:doc:section:$") && fermante() { - ramasser("</h" niveau ">\n") - metadonnees_supp($1) -} - -etq(":par:$") && fermante() { - m = trouver_meta(":@:césure:$") - if (meta[m] == "pre") - ramasser("</pre>\n") - else - ramasser("</p>\n") - m = trouver_meta(":par:@:citation:$") - if (m != "") - ramasser("</blockquote>\n") - metadonnees_supp($1) -} - -etq(":lien:$") && fermante() { - ramasser("</a><br>\n") - metadonnees_supp($1) -} - -etq(":liste:$") && fermante() { - ramasser("</ul>\n") - metadonnees_supp($1) -} - -etq(":liste:elem:$") && fermante() { - ramasser("</li>\n") - metadonnees_supp($1) -} - -etq(":note:$") && fermante() { - div() - metadonnees_supp($1) -} - -etq(":encrage:$") && fermante() { - ramasser("<h2>Notes</h2>\n") - id = trouver_meta(":encrage:@:id:$") - if (meta[id] == "notes") { - ramasser(div_contenu("notes")) - div_vider("notes") - } - metadonnees_supp($1) -} - -etq(":it:$") && fermante() { - ramasser("</em>") - metadonnees_supp($1) -}