summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreudoxia <uplink@distress.network>2021-11-10 17:41:38 -0500
committereudoxia <uplink@distress.network>2021-11-10 17:41:38 -0500
commit90ca54342273f5e21161417909bcb43a4b5f9733 (patch)
treef62d2c871ddb8087a37d0587281b582e9a29a0e2
parent6b05f4e005149b71ce31485d2fe1bee6d9842950 (diff)
md.sh: fixed various formatting inconsistencies
-rwxr-xr-xmd.sh77
1 files changed, 34 insertions, 43 deletions
diff --git a/md.sh b/md.sh
index 79cc580..a102e42 100755
--- a/md.sh
+++ b/md.sh
@@ -32,10 +32,10 @@ OUT="$1/index.html"
[ "$1" ] || { echo "$usage" ; exit 1 ; }
-[ -f $IN ] || { printf "%s \tFATAL: %s not found\n" "[->]" "$IN"; exit 1 ; }
-[ -f md-header ] || { printf "%s \tFATAL: md-header not found\n" "[->]" ; exit 1 ; }
-[ -f md-footer ] || { printf "%s \tFATAL: md-footer not found\n" "[->]" ; exit 1 ; }
-[ $(which lowdown) ] || { printf "%s \tFATAL: lowdown not found\n" "[->]" ; exit 1 ; }
+[ -f $IN ] || { printf "%s \tFATAL: %s not found\n" "[->]" "$IN" ; exit 1 ; }
+[ -f md-header ] || { printf "%s \tFATAL: md-header not found\n" "[->]" ; exit 1 ; }
+[ -f md-footer ] || { printf "%s \tFATAL: md-footer not found\n" "[->]" ; exit 1 ; }
+[ $(which lowdown) ] || { printf "%s \tFATAL: lowdown not found\n" "[->]" ; exit 1 ; }
cat md-header > $OUT
lowdown -Thtml --html-no-owasp $IN >> $OUT
@@ -68,8 +68,10 @@ BOMBER=$(grep -e '^bomber: ' -m 1 $IN | cut -f 2- -d ' ' | sedesc)
sed "s/<div class=\"bomber\">/&${BOMBER}/1" -i'' $OUT
printf "[ok] \tbomber: %s\n" "$(echo "$BOMBER" | unesc)"
-MDATE=$(stat -c '%y' $IN | sed -e 's/\.[0-9]* //' -e 's/\(..\)\(..\)$/\1:\2/') # format: "yyyy-mm-dd hh:mm:ss±zz:zz" (ISO 8601)
-DATE=$(echo $MDATE | cut -f 1 -d ' ' | sed -e 's/-//g' -e 's/^..//') # format: "yymmdd" (for humans)
+# format: "yyyy-mm-dd hh:mm:ss±zz:zz" (ISO 8601)
+MDATE=$(stat -c '%y' $IN | sed -e 's/\.[0-9]* //' -e 's/\(..\)\(..\)$/\1:\2/')
+# format: "yymmdd" (for humans)
+DATE=$(echo $MDATE | cut -f 1 -d ' ' | sed -e 's/-//g' -e 's/^..//')
sed -e "s;<div class=\"ident\"><time datetime=\";&${MDATE};1" -e "s;</time>;${DATE}&;1" -i'' $OUT
sed "s;<meta http-equiv=\"last-modified\" content=\";&${MDATE};1" -i'' $OUT
printf "[ok] \tdate: %s (%s)\n" "$DATE" "$MDATE"
@@ -109,21 +111,24 @@ done
toc() {
-[ $(which fzy) ] || { printf "[warn] \tfzy not found, skipping toc\n" ; return ; }
-[ -f ./urlencode ] || { printf "[warn] \turlencode not found, skipping toc\n" ; return ; }
+[ $(which fzy) ] || { printf "[warn] \tfzy not found, skipping toc\n" ; return ; }
+[ -f ./urlencode ] || { printf "[warn] \turlencode not found, skipping toc\n" ; return ; }
-tmp=$(mktemp -p /tmp) # using a tempfile, more convenient for storage and operations
-
-TOCLIST=$(grep -e '^#' $IN | sed -e 's; ;- ;' -e 's;^#;;' -e 's;#; ;g') # headers from source as md list
+# tempfiles are more convenient for storage and operations
+tmp=$(mktemp -p /tmp)
+# headers from source as md list
+TOCLIST=$(grep -e '^#' $IN | sed -e 's; ;- ;' -e 's;^#;;' -e 's;#; ;g')
echo "$TOCLIST" | while IFS='' read -r data ; do # encode headers as urls
HEADER=$(echo "$data" | sed 's/^[[:space:]-]*//' | encode) ;
echo "$data" | sed "s/^\([[:space:]-]*\)\(.*\)$/\1${HEADER}/" >> $tmp ;
done
-buffer=$(cat $tmp) ; echo "$buffer" | lowdown -Thtml > $tmp # convert to html, write to tempfile (reset)
+# convert to html, write to tempfile (reset)
+buffer=$(cat $tmp) ; echo "$buffer" | lowdown -Thtml > $tmp
-sed -e '1i <nav class="toc">' -e '/^$/d' -i'' $tmp # prepend starting tag, remove empty lines
+# prepend starting tag, remove empty lines
+sed -e '1i <nav class="toc">' -e '/^$/d' -i'' $tmp
cat $tmp | while IFS='' read -r data ; do
# get header (both encoded and raw), write as link
@@ -133,28 +138,23 @@ cat $tmp | while IFS='' read -r data ; do
# find old id in output, replace with new id
IDLINE=$(grep -ne "^<h[[:digit:]] id=" $OUT | fzy -e "$(echo $HEADER | unesc)" | head -n 1 | cut -f 1 -d :) ;
- if [ "$HEADER" = "<ul>" ] ; then
- IDLINE="" ;
- fi ;
- if [ "$HEADER" = "</ul></li>" ] ; then
- IDLINE="" ;
- fi ;
- if [ "$HEADER" = "</ul>" ] ; then
- IDLINE="" ;
- 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)" ;
- fi ;
+ case "$HEADER" in # filter out bad tag matches
+ ("<nav class=\"toc\">") ;;
+ ("<ul>") ;;
+ ("</ul></li>") ;;
+ ("</ul>") ;;
+ ("</nav>") ;;
+ (*)
+ sed "${IDLINE}s;id=\".*\">.*</h;id=\"${ID}\">${HEADER}</h;" -i'' $OUT ;
+ printf "\tassembled header: %s\n" "$(echo $HEADER | unesc)" ;;
+ esac ;
done
# close link tags on open lines, append closing tag
-
sed "s;[[:alnum:]]$;&</a>;" -i'' $tmp
echo '</nav>' >> $tmp
# get toc line number in output, insert data from tempfile
-
TOCLINE=$(wc -l md-header | cut -f 1 -d ' ')
sed "${TOCLINE}r $tmp" -i'' $OUT
@@ -224,34 +224,25 @@ printf "[ok] \tmath typesetting\n"
opts=$(grep -e '^opts: ' -m 1 $IN | cut -f 2- -d ' ')
-while [ "$opts" ]; do
+while [ "$opts" ] ; do
case "$opts" in
(*[Cc]*)
toc
- opts=$(echo $opts | sed 's/[Cc]//g')
- ;;
-
+ opts=$(echo $opts | sed 's/[Cc]//g') ;;
(*[Ff]*)
sed "/^<footer>/,/^<\/footer>/d" -i'' $OUT
printf "[ok] \tfooterless\n"
- opts=$(echo $opts | sed 's/[Ff]//g')
- ;;
-
+ opts=$(echo $opts | sed 's/[Ff]//g') ;;
(*[Hh]*)
sed -e "/^<header>/,/^<\/header>/d" -e '/^<meta name="description"/d' -i'' $OUT
sed "/bg.js/d" -i'' $OUT
printf "[ok] \theaderless\n"
- opts=$(echo $opts | sed 's/[Hh]//g')
- ;;
-
+ opts=$(echo $opts | sed 's/[Hh]//g') ;;
(*[Mm]*)
math
- opts=$(echo $opts | sed 's/[Mm]//g')
- ;;
-
+ opts=$(echo $opts | sed 's/[Mm]//g') ;;
(*)
- printf "[warn] \tmetadata: unrecognized option(s) \"%s\"\n" "${opts}"
- ;;
+ printf "[warn] \tmetadata: unrecognized option(s) \"%s\"\n" "${opts}" ;;
esac
done