1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
#!/bin/mksh
# © 2023 mirabilos <t.glaser@tarent.de> Ⓕ MIT
set -eo pipefail
case $KSH_VERSION {
(*MIRBSD\ KSH*) ;;
(*) echo E: do not call me with bash or something; exit 255 ;;
}
cat <<\EOF
<!--#set var="pagetitle" value="version history" -->
<!--#include virtual="header.html" -->
<h2>Version History</h2>
<p>For links to download each release, see the <a href="/download.html">Downloads</a> page.</p>
<table class="versions">
EOF
# could be a function converting */_ to b/i but we do not use it anywhere
alias out='print -rn --'
sed \
-e 's!&!\&!g' \
-e 's!<!\<!g' \
-e 's!>!\>!g' \
-e 's!>!\>!g' \
-e 's!"!\"!g' \
-e 's!\[\([^]]*\)\](\(https*://[!-~]*\))!<a href="\2">\1</a>!g' \
-e 's!\([ >]\)`\([^`]*\)`!\1<tt>\2</tt>!g' \
<CHANGES.md |&
in_tr=0
in_ul=0
in_li=0
in_p=0
while IFS= read -pr line; do
was_in_ul=$in_ul
if (( in_li )); then
if [[ $line = ' '* ]]; then
print -r '<br />'
out " ${line##+( )}"
continue
fi
print -r '</li>'
in_li=0
fi
if (( in_ul )); then
if [[ $line = '- '* ]]; then
out " <li>${line##-+( )}"
in_li=1
continue
fi
print -r ' </ul>'
in_ul=0
fi
if [[ $line = '#'* ]]; then
if [[ $line = '# '* ]]; then
if (( in_tr )); then
print -r ' </td>'
print -r ' </tr>'
fi
line=${line#'# '}
line=${line%')'}
title=${line%' ('*}
tag=$title
if [[ $tag = v+([0-9.]) ]]; then
title="<a href=\"#$tag\" title=\"link\">🔗</a>"$title
else
tag=
fi
print -r " <tr${tag:+ id=\"$tag\"}>"
print -r " <td>$title<p class=\"date\">${line##*' ('}</p></td>"
print -r ' <td class="notes">'
in_tr=1
continue
fi
if [[ $line = '## '* ]]; then
print -r " <h4>${line#'## '}</h4><ul>"
in_ul=1
continue
fi
print -ru2 "E: unsupported headline level"
print -ru2 "N: $line"
exit 1
fi
if [[ -z $line ]]; then
if (( in_p )); then
print -r '</p>'
in_p=0
fi
# in_li/in_ul already handled above
continue
fi
if [[ $line = '- '* ]]; then
if (( in_p )); then
print -r '</p>'
in_p=0
print -r ' <ul class="moveup">'
else
print -r ' <ul>'
fi
in_ul=1
out " <li>${line##-+( )}"
in_li=1
continue
fi
if (( in_p )); then
print -r '<br />'
print -nr ' '
elif (( was_in_ul )); then
print -nr ' <p class="moveup">'
in_p=1
else
print -nr ' <p>'
in_p=1
fi
out "$line"
done
if (( in_p )); then
print -r '</p>'
fi
if (( in_li )); then
print -r '</li>'
fi
if (( in_ul )); then
print -r ' </ul>'
fi
cat <<\EOF
</td>
</tr>
</table>
<!--#include virtual="footer.html" -->
EOF
|