knazarov.com/bin/toc.sh

71 lines
1.1 KiB
Bash
Raw Normal View History

2023-06-11 18:01:25 +00:00
#!/bin/bash
2021-08-08 17:47:34 +00:00
set -e
get_header() {
HFILE="$1"
HEADER="$2"
FILTER="{ \
if (match(\$0, /^$HEADER: /)) {print substr(\$0, RLENGTH+1, length(\$0) - RLENGTH)}; \
if (\$0~/^$/) {exit}; \
if (!\$0~/^[^ ]*: .*$/) {exit}; \
}"
awk "$FILTER" "$HFILE"
}
2021-08-08 17:47:34 +00:00
render() {
NODATE="$1"
2021-08-08 17:47:34 +00:00
DIR="$2"
BASE="$3"
2021-08-08 17:47:34 +00:00
pushd "$DIR" > /dev/null
find . ! -path . -type d | while read -r FN
2021-08-08 17:47:34 +00:00
do
PAGE="$(echo "$FN" | sed 's/^\.\///g')"
#echo "FILE: $PAGE"
MD="$PAGE/note.md"
if [ ! -f "$MD" ]; then
echo "$MD doesn't exist"
exit 1;
fi
SUBJECT="$(get_header "$MD" "Subject")"
FDATE="$(get_header "$MD" "X-Date" | sed 's/T.*$//g')"
if [ -z "$SUBJECT" ]; then
echo "No subject in $MD"
exit 1
fi
if [ -z "$FDATE" ] && [ "$NODATE" == "0" ]; then
echo "No date in $MD"
exit 1
fi
if [ -z "$FDATE" ]; then
echo "* [$SUBJECT]($BASE/$PAGE)"
else
echo "* $FDATE [$SUBJECT]($BASE/$PAGE)"
fi
2021-08-08 17:47:34 +00:00
done
popd > /dev/null
2021-08-08 17:47:34 +00:00
}
NODATE=0
if [ "$1" == "--nodate" ]; then
NODATE=1
shift
2021-08-08 17:47:34 +00:00
fi
if [ ! -d "$1" ]; then
2021-08-08 17:47:34 +00:00
echo "Missing source directory"
exit 1
fi
render "$NODATE" "$1" "$2" | sort -r