Un traducteur md -> html minimal en awk - retour accueil
git clone git://bebou.netlib.re/katdown
Log | Files | Refs | README |
commit 46e70418f03078a20a3e2c05b129224731a520ad parent e590b96b295c34b56bbe831209948e9b0d7791c0 Auteurice: Arthur Pons <arthur.pons@unistra.fr> Date: Tue, 4 Mar 2025 10:22:14 +0100 On peut écrire les listes sur plusieurs lignes Ca commence à devenir un peu confus On peut mettre une quantité arbitraire d'espaces avant une puce d'une liste Diffstat:
M | README | | | 7 | ++++--- |
M | katdown | | | 46 | ++++++++++++++++++++++++++-------------------- |
2 files changed, 30 insertions(+), 23 deletions(-)
diff --git a/README b/README @@ -49,7 +49,8 @@ est identique aux sorties de `cmark` et `lowdown` dans `lynx`. 1. Pas de tableau 2. Pas d'espace dans les exposants (l'espace est le délimiteur de fin) - 3. Pas de balise d'emphase (em) dans des balises d'haute importance (strong) quand l'emphase est écrite avec la syntaxe `*` + 3. Pas de balise d'emphase (em) dans des balises d'haute importance (strong) + quand l'emphase est écrite avec la syntaxe `*` 4. Pas de note de bas de page - 5. Les éléments des listes doivent être écrits sur une seule ligne - 6. Pas d'échappement automatique d'html + 5. Pas d'échappement automatique d'html + diff --git a/katdown b/katdown @@ -3,42 +3,47 @@ # fork d'un script de Graham Marlow # https://mgmarlow.com/ +# HR +# <hr> +/^---+$/ { print "<hr />"; next } + # BLOCS DE CODE # <pre> -/^---+$/ { print "<hr />"; next } -inqpre && /^```/ { flush(); print "</code></pre>"; intqre = 0; next } -/^```/ { print "<pre><code>"; inqpre = 1; next } -intpre && /^ / { print substr ($0,2); next } -intpre && /^[^ ]/ { flush(); print "</code></pre>"; intpre = 0 } -/^ / { print "<pre><code>"; intpre = 1; print substr ($0,2); next } +inqpre && /^```/ { flush(); print "</code></pre>"; intqre = 0; next } +/^```/ { print "<pre><code>"; inqpre = 1; next } +intpre && /^ / { print substr ($0,2); next } +intpre && /^[^ ]/ { flush(); print "</code></pre>"; intpre = 0 } +!inol && !inul && /^ / { print "<pre><code>"; intpre = 1; print substr ($0,2); next } # TITRES # <hN> -/^# / { print "<h1>" render(substr($0, 3)) "</h1>"; next } -/^## / { print "<h2>" render(substr($0, 4)) "</h2>"; next } -/^### / { print "<h3>" render(substr($0, 5)) "</h3>"; next } -/^#### / { print "<h4>" render(substr($0, 6)) "</h4>"; next } +/^# / { print "<h1>" render(substr($0, 3)) "</h1>"; next } +/^## / { print "<h2>" render(substr($0, 4)) "</h2>"; next } +/^### / { print "<h3>" render(substr($0, 5)) "</h3>"; next } +/^#### / { print "<h4>" render(substr($0, 6)) "</h4>"; next } # LISTES # <ul> -/^ [-*] / { if (!inul) print "<ul>"; inul = 1; print "<li>" render(substr($0, 5)) "</li>"; next } -inul && !/^ [-*] / { print "</ul>"; inul = 0; next } +!inul && /^ +[-*] / { inul = 1; print "<ul>"; printf "<li>"; for (i=2; i<=NF; i++) collect($i); next } +inul && /^ +[-*] / { printf render(line) "</li>\n<li>"; line = sep = ""; for (i=2; i<=NF; i++) collect($i); next } +inul && /^$/ { print render(line) "</li>\n</ul>"; line = sep = ""; inul = 0; next } # <ol> -/^ [0-9]+\./ { if (!inol) print "<ol>"; inol = 1; print "<li>" render(substr($0, length($1)+4)) "</li>"; next } -inol && !/^ [0-9]+\./ { print "</ol>"; inol = 0; next } +!inol && /^ +[0-9]+\. / { inol = 1; print "<ol>"; printf "<li>"; for (i=2; i<=NF; i++) collect($i); next } +inol && /^ +[0-9]+\. / { printf render(line) "</li>\n<li>"; line=""; for (i=2; i<=NF; i++) collect($i); next } +inol && /^$/ { print render(line) "</li>\n</ol>"; line = sep = ""; inol = 0; next } # CITATIONS # <blockquote> -/^> / { if (!inquote) print "<blockquote>"; inquote = 1; print render(substr($0, 3)); next } -inquote && !/^> / { print "</blockquote>"; inquote = 0; next } +/^> / { if (!inquote) print "<blockquote>"; inquote = 1; print render(substr($0, 3)); next } +inquote && !/^> / { print "</blockquote>"; inquote = 0; next } # PARAGRAPHES # <p> -/./ { for (i=1; i<=NF; i++) collect($i) } +/./ { for (i=1; i<=NF; i++) collect($i) } # VIDE -/^$/ { flushp() } -END { flushp(); flushtags() } +/^$/ { flushp() } +END { flushp(); flushtags() } function collect(v) { line = line sep v @@ -54,7 +59,8 @@ function flush() { function flushp() { if (line) { - print "<p>" render(line) "</p>" + if (inul || inol) print render(line) "</li>" + else print "<p>" render(line) "</p>" line = sep = "" } }