summaryrefslogtreecommitdiff
path: root/md.sh
diff options
context:
space:
mode:
Diffstat (limited to 'md.sh')
-rwxr-xr-xmd.sh79
1 files changed, 70 insertions, 9 deletions
diff --git a/md.sh b/md.sh
index 3e44052..79cc580 100755
--- a/md.sh
+++ b/md.sh
@@ -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}"
;;