diff options
Diffstat (limited to 'md.sh')
-rwxr-xr-x | md.sh | 79 |
1 files changed, 70 insertions, 9 deletions
@@ -38,7 +38,7 @@ OUT="$1/index.html" [ $(which lowdown) ] || { printf "%s \tFATAL: lowdown not found\n" "[->]" ; exit 1 ; } cat md-header > $OUT -lowdown -Thtml $IN >> $OUT +lowdown -Thtml --html-no-owasp $IN >> $OUT cat md-footer >> $OUT printf "[ok] \tinitial assembly\n" @@ -89,23 +89,21 @@ sed '/^<!--title:/d' -i'' $OUT ; printf "[ok] \tsitemap\n" ; fi -[ "$(grep -n '<p><img' $OUT)" ] && { - -grep -n '<p><img' $OUT | \ +[ "$(grep -n '<p><img' $OUT)" ] && { # skip if no figures found +# escaping backslashes with '@', to be unescaped later: +grep -n '<p><img' $OUT | sed 's/\\/@/g' | \ while IFS='' read -r data ; do LINE=$(echo $data | cut -f 1 -d :) ; # extract line number FILE=$(echo $data | cut -f 2 -d \") ; # extract file path CAPT=$(echo $data | cut -f 4 -d \") ; # extract image caption - if [ "$CAPT" = "#tex" ] ; then # for tex figures: only remove caption and containers - sed "${LINE}s;.*;<figure><img src=\"${FILE}\" alt=\"\"></figure>;" -i'' $OUT ; - printf "[ok] \ttex figure at line %s\n" "$LINE" ; + if [ "$FILE" = "%tex" ] ; then # for tex figures (to be caught and rendered later) + sed "${LINE}s;.*;<figure><%tex \"${CAPT}\" /></figure>;" -i'' $OUT ; else sed "${LINE}s;.*;<figure><a href=\"${FILE}\"><img src=\"${FILE}\" alt=\"\"></a><figcaption><p>${CAPT}</p></figcaption></figure>;" -i'' $OUT ; printf "[ok] \timage at line %s\n" "$LINE" ; fi done - } @@ -143,7 +141,7 @@ cat $tmp | while IFS='' read -r data ; do fi ; if [ "$HEADER" = "</ul>" ] ; then IDLINE="" ; - fi ; + fi ; # TODO use case expr instead if [ "$IDLINE" ] ; then sed "${IDLINE}s;id=\".*\">.*</h;id=\"${ID}\">${HEADER}</h;" -i'' $OUT ; printf "\tassembled header: %s\n" "$(echo $HEADER | unesc)" ; @@ -167,6 +165,64 @@ printf "[ok] \ttable of contents\n" } +math() { + +# [ $(npx katex -V 2>&1 | grep '404 Not Found') ] && { printf "[warn] \tkatex not found, skipping math rendering\n" ; return ; } + +sed '/main.css/a <link rel="stylesheet" href="/css/katex.css">' -i'' $OUT + +# display / "block" style: +grep -n '<figure><%tex' $OUT | \ +while IFS='' read -r data ; do + LINE=$(echo "$data" | cut -f 1 -d :) ; + EQNBODY=$(echo "$data" | cut -f 2 -d \" ) ; + printf "\trendering tex figure at line %s ... " "$LINE" ; + + tmp=$(mktemp -p /tmp) ; + echo "<figure>" > $tmp ; + echo "$EQNBODY" | sed 's/@/\\/g' | npx katex -d 2>&1 >> $tmp ; + echo "</figure>" >> $tmp ; + sed ':a;N;$!ba;s/\n//g' -i'' $tmp ; + + if [ $(grep "KaTeX parse error" $tmp) ] ; then + printf "\n[warn] \ttex expression at line %s contained errors, skipping\n" "$LINE" ; + else + sed "${LINE}d" -i'' $OUT ; + sed "$(expr $LINE - 1)r $tmp" -i'' $OUT ; + printf "complete\n" ; + fi ; + + rm $tmp ; +done + +# inline / "span" style: +sed 's;<img src="%itex" alt=".*" />;\n&\n;g' -i'' $OUT +grep -n '<img src="%itex"' $OUT | sed 's/\\/@/g' | \ +while IFS='' read -r data ; do + LINE=$(echo "$data" | cut -f 1 -d :) ; + EQNBODY=$(echo "$data" | cut -f 4 -d \" ) ; + printf "\trendering inline tex figure at line %s ... " "$LINE" ; + + tmp=$(mktemp -p /tmp) ; + echo "$EQNBODY" | sed 's/@/\\/g' | npx katex 2>&1 > $tmp ; + sed ':a;N;$!ba;s/\n//g' -i'' $tmp ; + + if [ $(grep "KaTeX parse error" $tmp) ] ; then + printf "\n[warn] \tinline tex expression at line %s contained errors, skipping\n" "$LINE" ; + else + sed "${LINE}d" -i'' $OUT ; + sed "$(expr $LINE - 1)r $tmp" -i'' $OUT ; + printf "complete\n" ; + fi ; + + rm $tmp ; +done + +printf "[ok] \tmath typesetting\n" + +} + + opts=$(grep -e '^opts: ' -m 1 $IN | cut -f 2- -d ' ') while [ "$opts" ]; do case "$opts" in @@ -188,6 +244,11 @@ case "$opts" in opts=$(echo $opts | sed 's/[Hh]//g') ;; + (*[Mm]*) + math + opts=$(echo $opts | sed 's/[Mm]//g') + ;; + (*) printf "[warn] \tmetadata: unrecognized option(s) \"%s\"\n" "${opts}" ;; |