Un traducteur md -> html minimal en awk - retour accueil
git clone git://bebou.netlib.re/katdown
Log | Files | Refs | README |
README (3800B)
1 # katdown 2 3 **KAT**zele mark**DOWN** est un fork 4 d'[awkdown](https://github.com/mgmarlow/awkdown) de Graham Marlow. 5 6 Il a pour but d'être une implémentation d'un ensemble très restreint de syntaxe 7 markdown et d'être POSIX. Les syntaxes et leurs comportement sont librement 8 inspirés de [commonmark](https://spec.commonmark.org/) et de 9 [lowdown](https://kristaps.bsd.lv/lowdown/) pour les extensions à commonmark. 10 11 > This is the Unix philosophy: Write programs that do one thing and do it well. 12 > Write programs to work together. Write programs to handle text streams, because 13 > that is a *universal interface*. 14 15 Doug McIlroy 16 17 ## Dépendances 18 19 Un interpréteur `awk` POSIX. 20 21 Testé avec les versions les plus à jour à l'écriture de ce README dans Debian 22 12 de : 23 24 * gawk 25 * mawk 26 * one-true-awk 27 * gawk --traditionnal 28 * gawk --posix 29 * busybox awk 30 31 Le script de test dépend de `lynx`. Le code est modifiable pour utiliser `w3m`, 32 `elinks` ou autres. 33 34 ## Installation 35 36 Copier `katdown` quelque part dans un dossier de votre `PATH`. Par exemple : 37 38 $ cp katdown /usr/local/bin 39 40 ## Usage 41 42 $ katdown 43 # titre 1 44 45 ## Les tests 46 47 ./launch-tests 48 49 Le script de test vérifie si l'affichage des pages html générées par `katdown` 50 est identique aux sorties de `cmark` et `lowdown` dans `lynx`. 51 52 ## Limites 53 54 `katdown` a de très^trop nombreuses limites, notamment : 55 56 1. Pas de tableau 57 2. Pas d'espace dans les exposants (l'espace est le délimiteur de fin) 58 3. Pas de balise d'emphase (em) dans des balises d'haute importance (strong) 59 quand l'emphase est écrite avec la syntaxe `*` 60 4. Pas de note de bas de page 61 5. Pas d'échappement automatique d'html 62 63 ## Performances 64 65 ### Un *gros* fichier 66 67 On génère un énorme fichier markdown en copiant 10 000 fois le README. On 68 lance katdown interprété par `gawk` dessus. On compare avec les perfs de cmark 69 et lowdown (j'utilise `zsh` et son builtin `time`) : 70 71 $ yes README | head -n10000 | xargs cat > big 72 $ wc -l big; du -h big 73 560000 big 74 14M big 75 $ time < big ./katdown > a 76 ./katdown < big > a 2,77s user 0,02s system 99% cpu 2,791 total 77 $ time < big cmark > a 78 cmark < big > b 0,42s user 0,12s system 99% cpu 0,543 total 79 $ time < big lowdown > a 80 # NE TERMINE PAS 81 82 `katdown` + `gawk` a des performances raisonnables, convertissant plus de 500 83 000 lignes de markdown en moins de trois secondes. `cmark` reste beaucoup plus 84 performant, environ 5 fois plus rapide. `lowdown` a manifestement un souci de 85 perf et ne termine pas. 86 87 A noter, `mawk` semble encore mieux performer en parsant le gros fichier en 1 88 seconde seulement ! Ce qui n'est pas une découverte puisque : 89 90 $ apt show mawk | grep rapide 91 Mawk est plus petit et plus rapide que gawk. Il a quelques limites à la 92 93 Si un jour `katdown` supporte les tableaux je mettrais ici un joli tableau des 94 perfs de chaque interpréteur. 95 96 ### Pleins de petits fichiers 97 98 On copie 10 000 fois le README puis on lance les traducteurs, quatre en 99 parrallèle, sur les 10 000 fichiers : 100 101 $ for i in $(seq 10000);do cp README README-$i; done 102 $ find -type f -name 'README*' | xargs -P4 -n1 cmark > /dev/null 103 find -type f -name 'README*' 0,01s user 0,01s system 0% cpu 2,150 total 104 xargs -P4 -n1 cmark > /dev/null 7,48s user 2,28s system 229% cpu 4,247 total 105 $ find -type f -name 'README*' | xargs -P4 -n1 ./katdown > /dev/null 106 find -type f -name 'README*' 0,01s user 0,01s system 95% cpu 0,020 total 107 xargs -P4 -n1 ../katdown > /dev/null 20,72s user 16,74s system 364% cpu 10,282 total 108 109 `katdown` convertit les 10 000 fichiers en un peu plus de 10 secondes, `cmark` 110 en un peu plus de 4 secondes. Il ne semble donc pas y avoir d'overhead 111 significatif au lancement d'awk. Encore moins en utilisant `mawk` avec un temps 112 de génération de 3,5 secondes, plus rapide que `cmark` ! 113